diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk
index a6193991f84..513a3678a94 100644
--- a/builddefs/common_features.mk
+++ b/builddefs/common_features.mk
@@ -608,24 +608,9 @@ ifeq ($(strip $(VIA_ENABLE)), yes)
TRI_LAYER_ENABLE := yes
endif
-VALID_MAGIC_TYPES := yes
-BOOTMAGIC_ENABLE ?= no
-ifneq ($(strip $(BOOTMAGIC_ENABLE)), no)
- ifeq ($(filter $(BOOTMAGIC_ENABLE),$(VALID_MAGIC_TYPES)),)
- $(call CATASTROPHIC_ERROR,Invalid BOOTMAGIC_ENABLE,BOOTMAGIC_ENABLE="$(BOOTMAGIC_ENABLE)" is not a valid type of magic)
- endif
- ifneq ($(strip $(BOOTMAGIC_ENABLE)), no)
- OPT_DEFS += -DBOOTMAGIC_LITE
- QUANTUM_SRC += $(QUANTUM_DIR)/bootmagic/bootmagic_lite.c
- endif
-endif
-COMMON_VPATH += $(QUANTUM_DIR)/bootmagic
-QUANTUM_SRC += $(QUANTUM_DIR)/bootmagic/magic.c
-
VALID_CUSTOM_MATRIX_TYPES:= yes lite no
CUSTOM_MATRIX ?= no
-
ifneq ($(strip $(CUSTOM_MATRIX)), yes)
ifeq ($(filter $(CUSTOM_MATRIX),$(VALID_CUSTOM_MATRIX_TYPES)),)
$(call CATASTROPHIC_ERROR,Invalid CUSTOM_MATRIX,CUSTOM_MATRIX="$(CUSTOM_MATRIX)" is not a valid custom matrix type)
diff --git a/builddefs/generic_features.mk b/builddefs/generic_features.mk
index 9c869586255..dc34a642307 100644
--- a/builddefs/generic_features.mk
+++ b/builddefs/generic_features.mk
@@ -21,6 +21,7 @@ SPACE_CADET_ENABLE ?= yes
GENERIC_FEATURES = \
AUTO_SHIFT \
AUTOCORRECT \
+ BOOTMAGIC \
CAPS_WORD \
COMBO \
COMMAND \
diff --git a/quantum/bootmagic/bootmagic_lite.c b/quantum/bootmagic/bootmagic.c
similarity index 100%
rename from quantum/bootmagic/bootmagic_lite.c
rename to quantum/bootmagic/bootmagic.c
diff --git a/quantum/bootmagic/bootmagic.h b/quantum/bootmagic/bootmagic.h
index db826025ce5..4b5f5f7c5e8 100644
--- a/quantum/bootmagic/bootmagic.h
+++ b/quantum/bootmagic/bootmagic.h
@@ -15,8 +15,11 @@
*/
#pragma once
-#if defined(BOOTMAGIC_LITE)
-# include "bootmagic_lite.h"
+#ifndef BOOTMAGIC_LITE_COLUMN
+# define BOOTMAGIC_LITE_COLUMN 0
+#endif
+#ifndef BOOTMAGIC_LITE_ROW
+# define BOOTMAGIC_LITE_ROW 0
#endif
void bootmagic(void);
diff --git a/quantum/bootmagic/bootmagic_lite.h b/quantum/bootmagic/bootmagic_lite.h
deleted file mode 100644
index 17777e6b4a5..00000000000
--- a/quantum/bootmagic/bootmagic_lite.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright 2021 QMK
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-#pragma once
-
-#ifndef BOOTMAGIC_LITE_COLUMN
-# define BOOTMAGIC_LITE_COLUMN 0
-#endif
-#ifndef BOOTMAGIC_LITE_ROW
-# define BOOTMAGIC_LITE_ROW 0
-#endif
-
-void bootmagic_lite(void);
diff --git a/quantum/bootmagic/magic.c b/quantum/bootmagic/magic.c
deleted file mode 100644
index d68df3fa588..00000000000
--- a/quantum/bootmagic/magic.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright 2021 QMK
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-#include
-#include
-#include "wait.h"
-#include "matrix.h"
-#include "bootloader.h"
-#include "debug.h"
-#include "keycode_config.h"
-#include "host.h"
-#include "action_layer.h"
-#include "eeconfig.h"
-#include "bootmagic.h"
-
-keymap_config_t keymap_config;
-
-__attribute__((weak)) void bootmagic(void) {}
-
-/** \brief Magic
- *
- * FIXME: Needs doc
- */
-void magic(void) {
- /* check signature */
- if (!eeconfig_is_enabled()) {
- eeconfig_init();
- }
-
- /* init globals */
- debug_config.raw = eeconfig_read_debug();
- keymap_config.raw = eeconfig_read_keymap();
-
- bootmagic();
-
- /* read here just incase bootmagic process changed its value */
- layer_state_t default_layer = (layer_state_t)eeconfig_read_default_layer();
- default_layer_set(default_layer);
-
- /* Also initialize layer state to trigger callback functions for layer_state */
- layer_state_set_kb((layer_state_t)layer_state);
-}
diff --git a/quantum/bootmagic/magic.h b/quantum/bootmagic/magic.h
deleted file mode 100644
index 2c3969b85ca..00000000000
--- a/quantum/bootmagic/magic.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2021 QMK
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-#pragma once
-
-void magic(void);
diff --git a/quantum/keyboard.c b/quantum/keyboard.c
index b5fa1a6e2e9..9bdf6e63444 100644
--- a/quantum/keyboard.c
+++ b/quantum/keyboard.c
@@ -20,7 +20,6 @@ along with this program. If not, see .
#include "keycode_config.h"
#include "matrix.h"
#include "keymap_introspection.h"
-#include "magic.h"
#include "host.h"
#include "led.h"
#include "keycode.h"
@@ -33,6 +32,9 @@ along with this program. If not, see .
#include "sendchar.h"
#include "eeconfig.h"
#include "action_layer.h"
+#ifdef BOOTMAGIC_ENABLE
+# include "bootmagic.h"
+#endif
#ifdef AUDIO_ENABLE
# include "audio.h"
#endif
@@ -370,28 +372,30 @@ void housekeeping_task(void) {
housekeeping_task_user();
}
-/** \brief Init tasks previously located in matrix_init_quantum
+/** \brief quantum_init
*
- * TODO: rationalise against keyboard_init and current split role
+ * Init global state
*/
void quantum_init(void) {
- magic();
- led_init_ports();
-#ifdef BACKLIGHT_ENABLE
- backlight_init_ports();
-#endif
-#ifdef AUDIO_ENABLE
- audio_init();
-#endif
-#ifdef LED_MATRIX_ENABLE
- led_matrix_init();
-#endif
-#ifdef RGB_MATRIX_ENABLE
- rgb_matrix_init();
-#endif
-#if defined(UNICODE_COMMON_ENABLE)
- unicode_input_mode_init();
+ /* check signature */
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+
+ /* init globals */
+ debug_config.raw = eeconfig_read_debug();
+ keymap_config.raw = eeconfig_read_keymap();
+
+#ifdef BOOTMAGIC_ENABLE
+ bootmagic();
#endif
+
+ /* read here just incase bootmagic process changed its value */
+ layer_state_t default_layer = (layer_state_t)eeconfig_read_default_layer();
+ default_layer_set(default_layer);
+
+ /* Also initialize layer state to trigger callback functions for layer_state */
+ layer_state_set_kb((layer_state_t)layer_state);
}
/** \brief keyboard_init
@@ -412,6 +416,22 @@ void keyboard_init(void) {
#endif
matrix_init();
quantum_init();
+ led_init_ports();
+#ifdef BACKLIGHT_ENABLE
+ backlight_init_ports();
+#endif
+#ifdef AUDIO_ENABLE
+ audio_init();
+#endif
+#ifdef LED_MATRIX_ENABLE
+ led_matrix_init();
+#endif
+#ifdef RGB_MATRIX_ENABLE
+ rgb_matrix_init();
+#endif
+#if defined(UNICODE_COMMON_ENABLE)
+ unicode_input_mode_init();
+#endif
#if defined(CRC_ENABLE)
crc_init();
#endif
diff --git a/quantum/keycode_config.c b/quantum/keycode_config.c
index 864488a65c9..cbfbcc81407 100644
--- a/quantum/keycode_config.c
+++ b/quantum/keycode_config.c
@@ -16,6 +16,8 @@
#include "keycode_config.h"
+keymap_config_t keymap_config;
+
/** \brief keycode_config
*
* This function is used to check a specific keycode against the bootmagic config,
diff --git a/quantum/quantum.h b/quantum/quantum.h
index 996e93a12fc..98d848581d1 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -42,7 +42,6 @@
#include "action_layer.h"
#include "eeconfig.h"
#include "bootloader.h"
-#include "bootmagic.h"
#include "timer.h"
#include "sync_timer.h"
#include "gpio.h"
@@ -59,6 +58,10 @@
#include
#include
+#ifdef BOOTMAGIC_ENABLE
+# include "bootmagic.h"
+#endif
+
#ifdef DEFERRED_EXEC_ENABLE
# include "deferred_exec.h"
#endif