Diff
1diff --git a/quantum/eeconfig.c b/quantum/eeconfig.c
2index ffbbf43a95c6307d7f5e0f4be61cccea0ab05c4b..e27f604f124298d61329ce5fcb3ee4768872d196 100644
3--- a/quantum/eeconfig.c
4+++ b/quantum/eeconfig.c
5@@ -3,7 +3,6 @@
6 #include <stdbool.h>
7 #include "eeprom.h"
8 #include "eeconfig.h"
9-#include "action_layer.h"
10
11 #if defined(EEPROM_DRIVER)
12 # include "eeprom_driver.h"
13@@ -52,7 +51,7 @@ void eeconfig_init_quantum(void) {
14 eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER);
15 eeprom_update_byte(EECONFIG_DEBUG, 0);
16 default_layer_state = (layer_state_t)1 << 0;
17- eeprom_update_byte(EECONFIG_DEFAULT_LAYER, default_layer_state);
18+ eeconfig_update_default_layer(default_layer_state);
19 // Enable oneshot and autocorrect by default: 0b0001 0100 0000 0000
20 eeprom_update_word(EECONFIG_KEYMAP, 0x1400);
21 eeprom_update_byte(EECONFIG_BACKLIGHT, 0);
22@@ -160,14 +159,30 @@ void eeconfig_update_debug(uint8_t val) {
23 *
24 * FIXME: needs doc
25 */
26-uint8_t eeconfig_read_default_layer(void) {
27- return eeprom_read_byte(EECONFIG_DEFAULT_LAYER);
28+layer_state_t eeconfig_read_default_layer(void) {
29+ uint8_t val = eeprom_read_byte(EECONFIG_DEFAULT_LAYER);
30+
31+#ifdef DEFAULT_LAYER_STATE_IS_VALUE_NOT_BITMASK
32+ // stored as a layer number, so convert back to bitmask
33+ return 1 << val;
34+#else
35+ // stored as 8-bit-wide bitmask, so read the value directly - handling padding to 16/32 bit layer_state_t
36+ return val;
37+#endif
38 }
39 /** \brief eeconfig update default layer
40 *
41 * FIXME: needs doc
42 */
43-void eeconfig_update_default_layer(uint8_t val) {
44+void eeconfig_update_default_layer(layer_state_t state) {
45+#ifdef DEFAULT_LAYER_STATE_IS_VALUE_NOT_BITMASK
46+ // stored as a layer number, so only store the highest layer
47+ uint8_t val = get_highest_layer(state);
48+#else
49+ // stored as 8-bit-wide bitmask, so write the value directly - handling truncation from 16/32 bit layer_state_t
50+ uint8_t val = state;
51+#endif
52+
53 eeprom_update_byte(EECONFIG_DEFAULT_LAYER, val);
54 }
55
56diff --git a/quantum/eeconfig.h b/quantum/eeconfig.h
57index fa0dd799d195ecf42fd00dfdacd268553067380e..11cf1ccbca8b9350d911eb799c143f9f5d649688 100644
58--- a/quantum/eeconfig.h
59+++ b/quantum/eeconfig.h
60@@ -22,6 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
61 #include <stddef.h> // offsetof
62 #include "eeprom.h"
63 #include "util.h"
64+#include "action_layer.h" // layer_state_t
65
66 #ifndef EECONFIG_MAGIC_NUMBER
67 # define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEE5 // When changing, decrement this value to avoid future re-init issues
68@@ -122,8 +123,8 @@ void eeconfig_disable(void);
69 uint8_t eeconfig_read_debug(void);
70 void eeconfig_update_debug(uint8_t val);
71
72-uint8_t eeconfig_read_default_layer(void);
73-void eeconfig_update_default_layer(uint8_t val);
74+layer_state_t eeconfig_read_default_layer(void);
75+void eeconfig_update_default_layer(layer_state_t val);
76
77 uint16_t eeconfig_read_keymap(void);
78 void eeconfig_update_keymap(uint16_t val);