diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk
index 60ff9b0120f..33bb4d3ac60 100644
--- a/builddefs/common_features.mk
+++ b/builddefs/common_features.mk
@@ -629,9 +629,7 @@ ifeq ($(strip $(VIA_ENABLE)), yes)
TRI_LAYER_ENABLE := yes
QUANTUM_SRC += \
- nvm_via.c \
- nvm_dynamic_keymap.c
- # TODO: move `nvm_dynamic_keymap.c` to be guarded by `DYNAMIC_KEYMAP_ENABLE = yes`
+ nvm_via.c
endif
VALID_CUSTOM_MATRIX_TYPES:= yes lite no
@@ -986,3 +984,8 @@ ifeq ($(strip $(UART_DRIVER_REQUIRED)), yes)
QUANTUM_LIB_SRC += uart.c
endif
endif
+
+DYNAMIC_KEYMAP_ENABLE ?= no
+ifeq ($(strip $(DYNAMIC_KEYMAP_ENABLE)), yes)
+ QUANTUM_LIB_SRC += nvm_dynamic_keymap.c
+endif
diff --git a/keyboards/rocketboard_16/keycode_lookup.c b/keyboards/rocketboard_16/keycode_lookup.c
index 41fd5c8537d..a29808d04d0 100644
--- a/keyboards/rocketboard_16/keycode_lookup.c
+++ b/keyboards/rocketboard_16/keycode_lookup.c
@@ -14,6 +14,7 @@
* along with this program. If not, see .
*/
+#include
#include "keycode_lookup.h"
#include "quantum_keycodes.h"
#include "keymap_us.h"
diff --git a/keyboards/system76/launch_1/launch_1.c b/keyboards/system76/launch_1/launch_1.c
index dbe697c19db..43312c554ae 100644
--- a/keyboards/system76/launch_1/launch_1.c
+++ b/keyboards/system76/launch_1/launch_1.c
@@ -73,17 +73,30 @@ led_config_t g_led_config = { {
} };
#endif // RGB_MATRIX_ENABLE
-bool eeprom_is_valid(void) {
+typedef union launch_1_eeprom_t {
+ struct {
+ uint16_t magic;
+ uint8_t version;
+ };
+ uint32_t raw;
+} launch_1_eeprom_t;
+
+bool eeprom_is_valid(void) {
+ launch_1_eeprom_t eeprom;
+ eeprom.raw = eeconfig_read_kb();
return (
- eeprom_read_word(((void *)EEPROM_MAGIC_ADDR)) == EEPROM_MAGIC &&
- eeprom_read_byte(((void *)EEPROM_VERSION_ADDR)) == EEPROM_VERSION
+ eeprom.magic == EEPROM_MAGIC &&
+ eeprom.version == EEPROM_VERSION
);
}
// clang-format on
void eeprom_set_valid(bool valid) {
- eeprom_update_word(((void *)EEPROM_MAGIC_ADDR), valid ? EEPROM_MAGIC : 0xFFFF);
- eeprom_update_byte(((void *)EEPROM_VERSION_ADDR), valid ? EEPROM_VERSION : 0xFF);
+ launch_1_eeprom_t eeprom = {
+ .magic = valid ? EEPROM_MAGIC : 0xFFFF,
+ .version = valid ? EEPROM_VERSION : 0xFF,
+ };
+ eeconfig_update_kb(eeprom.raw);
}
void bootmagic_lite_reset_eeprom(void) {
diff --git a/keyboards/xelus/la_plus/rgb_matrix_kb.inc b/keyboards/xelus/la_plus/rgb_matrix_kb.inc
index aee484cdb83..036bc5e7f58 100644
--- a/keyboards/xelus/la_plus/rgb_matrix_kb.inc
+++ b/keyboards/xelus/la_plus/rgb_matrix_kb.inc
@@ -31,7 +31,7 @@ static void startup_animation_setleds(effect_params_t* params, bool dots) {
} else if (num == 0 || num == 1 || num == 2) {
return;
} else if (num >= 22) {
- eeprom_read_block(&rgb_matrix_config, EECONFIG_RGB_MATRIX, sizeof(rgb_matrix_config));
+ eeconfig_read_rgb_matrix(&rgb_matrix_config);
rgb_matrix_mode_noeeprom(rgb_matrix_config.mode);
return;
}
diff --git a/quantum/nvm/eeprom/nvm_dynamic_keymap.c b/quantum/nvm/eeprom/nvm_dynamic_keymap.c
index 9388a9223be..fc6fd871d5b 100644
--- a/quantum/nvm/eeprom/nvm_dynamic_keymap.c
+++ b/quantum/nvm/eeprom/nvm_dynamic_keymap.c
@@ -1,6 +1,7 @@
// Copyright 2024 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later
+#include "keycodes.h"
#include "eeprom.h"
#include "dynamic_keymap.h"
#include "nvm_dynamic_keymap.h"
@@ -115,10 +116,10 @@ void nvm_dynamic_keymap_update_encoder(uint8_t layer, uint8_t encoder_id, bool c
#endif // ENCODER_MAP_ENABLE
void nvm_dynamic_keymap_read_buffer(uint32_t offset, uint32_t size, uint8_t *data) {
- uint16_t dynamic_keymap_eeprom_size = DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2;
- void * source = (void *)(DYNAMIC_KEYMAP_EEPROM_ADDR + offset);
+ uint32_t dynamic_keymap_eeprom_size = DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2;
+ void * source = (void *)(uintptr_t)(DYNAMIC_KEYMAP_EEPROM_ADDR + offset);
uint8_t *target = data;
- for (uint16_t i = 0; i < size; i++) {
+ for (uint32_t i = 0; i < size; i++) {
if (offset + i < dynamic_keymap_eeprom_size) {
*target = eeprom_read_byte(source);
} else {
@@ -130,10 +131,10 @@ void nvm_dynamic_keymap_read_buffer(uint32_t offset, uint32_t size, uint8_t *dat
}
void nvm_dynamic_keymap_update_buffer(uint32_t offset, uint32_t size, uint8_t *data) {
- uint16_t dynamic_keymap_eeprom_size = DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2;
- void * target = (void *)(DYNAMIC_KEYMAP_EEPROM_ADDR + offset);
+ uint32_t dynamic_keymap_eeprom_size = DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2;
+ void * target = (void *)(uintptr_t)(DYNAMIC_KEYMAP_EEPROM_ADDR + offset);
uint8_t *source = data;
- for (uint16_t i = 0; i < size; i++) {
+ for (uint32_t i = 0; i < size; i++) {
if (offset + i < dynamic_keymap_eeprom_size) {
eeprom_update_byte(target, *source);
}
@@ -147,7 +148,7 @@ uint32_t nvm_dynamic_keymap_macro_size(void) {
}
void nvm_dynamic_keymap_macro_read_buffer(uint32_t offset, uint32_t size, uint8_t *data) {
- void * source = (void *)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + offset);
+ void * source = (void *)(uintptr_t)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + offset);
uint8_t *target = data;
for (uint16_t i = 0; i < size; i++) {
if (offset + i < DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE) {
@@ -161,7 +162,7 @@ void nvm_dynamic_keymap_macro_read_buffer(uint32_t offset, uint32_t size, uint8_
}
void nvm_dynamic_keymap_macro_update_buffer(uint32_t offset, uint32_t size, uint8_t *data) {
- void * target = (void *)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + offset);
+ void * target = (void *)(uintptr_t)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + offset);
uint8_t *source = data;
for (uint16_t i = 0; i < size; i++) {
if (offset + i < DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE) {
@@ -173,8 +174,8 @@ void nvm_dynamic_keymap_macro_update_buffer(uint32_t offset, uint32_t size, uint
}
void nvm_dynamic_keymap_macro_reset(void) {
- void *p = (void *)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR);
- void *end = (void *)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE);
+ void *p = (void *)(uintptr_t)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR);
+ void *end = (void *)(uintptr_t)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE);
while (p != end) {
eeprom_update_byte(p, 0);
++p;