summaryrefslogtreecommitdiffstats
path: root/quantum
diff options
context:
space:
mode:
authorDrashna Jaelre <drashna@live.com>2021-08-20 21:02:53 -0700
committerGitHub <noreply@github.com>2021-08-20 21:02:53 -0700
commita80d7891472335ec297082daecc6fbf90042c38c (patch)
tree04d34e9dd3658bf471ca9b11db3fa1095b4aa2c0 /quantum
parentafd3bcbf45a9b7de097d7666ced2c674192949e5 (diff)
Fix issues with VIA EEPROM init and bring in line with eeconfig functionality (#13243)
Co-authored-by: Ryan <fauxpark@gmail.com>
Diffstat (limited to 'quantum')
-rw-r--r--quantum/bootmagic/bootmagic_lite.c8
-rw-r--r--quantum/eeconfig.c33
-rw-r--r--quantum/keyboard.c6
-rw-r--r--quantum/via.c42
-rw-r--r--quantum/via.h6
5 files changed, 58 insertions, 37 deletions
diff --git a/quantum/bootmagic/bootmagic_lite.c b/quantum/bootmagic/bootmagic_lite.c
index 9cbdcb0bbd..54bbf5a2ee 100644
--- a/quantum/bootmagic/bootmagic_lite.c
+++ b/quantum/bootmagic/bootmagic_lite.c
@@ -19,13 +19,7 @@
*
* ...just incase someone wants to only change the eeprom behaviour
*/
-__attribute__((weak)) void bootmagic_lite_reset_eeprom(void) {
-#if defined(VIA_ENABLE)
- via_eeprom_reset();
-#else
- eeconfig_disable();
-#endif
-}
+__attribute__((weak)) void bootmagic_lite_reset_eeprom(void) { eeconfig_disable(); }
/** \brief The lite version of TMK's bootmagic based on Wilba.
*
diff --git a/quantum/eeconfig.c b/quantum/eeconfig.c
index ffa56ab56d..92f0ac4439 100644
--- a/quantum/eeconfig.c
+++ b/quantum/eeconfig.c
@@ -17,6 +17,12 @@
# include "haptic.h"
#endif
+#if defined(VIA_ENABLE)
+bool via_eeprom_is_valid(void);
+void via_eeprom_set_valid(bool valid);
+void eeconfig_init_via(void);
+#endif
+
/** \brief eeconfig enable
*
* FIXME: needs doc
@@ -77,6 +83,13 @@ void eeconfig_init_quantum(void) {
// when a haptic-enabled firmware is loaded onto the keyboard.
eeprom_update_dword(EECONFIG_HAPTIC, 0);
#endif
+#if defined(VIA_ENABLE)
+ // Invalidate VIA eeprom config, and then reset.
+ // Just in case if power is lost mid init, this makes sure that it pets
+ // properly re-initialized.
+ via_eeprom_set_valid(false);
+ eeconfig_init_via();
+#endif
eeconfig_init_kb();
}
@@ -111,13 +124,29 @@ void eeconfig_disable(void) {
*
* FIXME: needs doc
*/
-bool eeconfig_is_enabled(void) { return (eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER); }
+bool eeconfig_is_enabled(void) {
+ bool is_eeprom_enabled = (eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER);
+#ifdef VIA_ENABLE
+ if (is_eeprom_enabled) {
+ is_eeprom_enabled = via_eeprom_is_valid();
+ }
+#endif
+ return is_eeprom_enabled;
+}
/** \brief eeconfig is disabled
*
* FIXME: needs doc
*/
-bool eeconfig_is_disabled(void) { return (eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER_OFF); }
+bool eeconfig_is_disabled(void) {
+ bool is_eeprom_disabled = (eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER_OFF);
+#ifdef VIA_ENABLE
+ if (!is_eeprom_disabled) {
+ is_eeprom_disabled = !via_eeprom_is_valid();
+ }
+#endif
+ return is_eeprom_disabled;
+}
/** \brief eeconfig read debug
*
diff --git a/quantum/keyboard.c b/quantum/keyboard.c
index 0eb41e7d30..644d8650dd 100644
--- a/quantum/keyboard.c
+++ b/quantum/keyboard.c
@@ -309,13 +309,13 @@ void housekeeping_task(void) {
void keyboard_init(void) {
timer_init();
sync_timer_init();
+#ifdef VIA_ENABLE
+ via_init();
+#endif
matrix_init();
#if defined(CRC_ENABLE)
crc_init();
#endif
-#ifdef VIA_ENABLE
- via_init();
-#endif
#ifdef QWIIC_ENABLE
qwiic_init();
#endif
diff --git a/quantum/via.c b/quantum/via.c
index c89b663b9b..1b2dbcf08d 100644
--- a/quantum/via.c
+++ b/quantum/via.c
@@ -83,16 +83,6 @@ void via_eeprom_set_valid(bool valid) {
eeprom_update_byte((void *)VIA_EEPROM_MAGIC_ADDR + 2, valid ? magic2 : 0xFF);
}
-// Flag QMK and VIA/keyboard level EEPROM as invalid.
-// Used in bootmagic_lite() and VIA command handler.
-// Keyboard level code should not need to call this.
-void via_eeprom_reset(void) {
- // Set the VIA specific EEPROM state as invalid.
- via_eeprom_set_valid(false);
- // Set the TMK/QMK EEPROM state as invalid.
- eeconfig_disable();
-}
-
// Override this at the keyboard code level to check
// VIA's EEPROM valid state and reset to defaults as needed.
// Used by keyboards that store their own state in EEPROM,
@@ -109,19 +99,24 @@ void via_init(void) {
// If the EEPROM has the magic, the data is good.
// OK to load from EEPROM.
- if (via_eeprom_is_valid()) {
- } else {
- // This resets the layout options
- via_set_layout_options(VIA_EEPROM_LAYOUT_OPTIONS_DEFAULT);
- // This resets the keymaps in EEPROM to what is in flash.
- dynamic_keymap_reset();
- // This resets the macros in EEPROM to nothing.
- dynamic_keymap_macro_reset();
- // Save the magic number last, in case saving was interrupted
- via_eeprom_set_valid(true);
+ if (!via_eeprom_is_valid()) {
+ eeconfig_init_via();
}
}
+void eeconfig_init_via(void) {
+ // set the magic number to false, in case this gets interrupted
+ via_eeprom_set_valid(false);
+ // This resets the layout options
+ via_set_layout_options(VIA_EEPROM_LAYOUT_OPTIONS_DEFAULT);
+ // This resets the keymaps in EEPROM to what is in flash.
+ dynamic_keymap_reset();
+ // This resets the macros in EEPROM to nothing.
+ dynamic_keymap_macro_reset();
+ // Save the magic number last, in case saving was interrupted
+ via_eeprom_set_valid(true);
+}
+
// This is generalized so the layout options EEPROM usage can be
// variable, between 1 and 4 bytes.
uint32_t via_get_layout_options(void) {
@@ -329,6 +324,13 @@ void raw_hid_receive(uint8_t *data, uint8_t length) {
#endif
break;
}
+#ifdef VIA_EEPROM_ALLOW_RESET
+ case id_eeprom_reset: {
+ via_eeprom_set_valid(false);
+ eeconfig_init_via();
+ break;
+ }
+#endif
case id_dynamic_keymap_macro_get_count: {
command_data[0] = dynamic_keymap_macro_get_count();
break;
diff --git a/quantum/via.h b/quantum/via.h
index de0a21da20..3db318a454 100644
--- a/quantum/via.h
+++ b/quantum/via.h
@@ -152,12 +152,8 @@ bool via_eeprom_is_valid(void);
// Keyboard level code (eg. via_init_kb()) should not call this
void via_eeprom_set_valid(bool valid);
-// Flag QMK and VIA/keyboard level EEPROM as invalid.
-// Used in bootmagic_lite() and VIA command handler.
-// Keyboard level code should not need to call this.
-void via_eeprom_reset(void);
-
// Called by QMK core to initialize dynamic keymaps etc.
+void eeconfig_init_via(void);
void via_init(void);
// Used by VIA to store and retrieve the layout options.