summary refs log tree commit diff
path: root/quantum/via.c
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/via.c
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/via.c')
-rw-r--r--quantum/via.c42
1 files changed, 22 insertions, 20 deletions
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;