From d840ef2b2855c7c6094e5881a4bc78a05297a488 Mon Sep 17 00:00:00 2001
From: Joel Challis <git@zvecr.com>
Date: Wed, 19 Jan 2022 17:38:48 +0000
Subject: [PATCH] Relocate matrix_scan_quantum tasks (#15882)

* Move matrix_scan_quantum tasks

* Fix tests

* Fix up missing refs
---
 quantum/keyboard.c | 70 ++++++++++++++++++++++++++++++++++++++++++++
 quantum/quantum.c  | 73 ++--------------------------------------------
 2 files changed, 72 insertions(+), 71 deletions(-)

diff --git a/quantum/keyboard.c b/quantum/keyboard.c
index 67f7381f74..fa20c675c3 100644
--- a/quantum/keyboard.c
+++ b/quantum/keyboard.c
@@ -16,6 +16,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include <stdint.h>
+#include "quantum.h"
 #include "keyboard.h"
 #include "matrix.h"
 #include "keymap.h"
@@ -450,6 +451,73 @@ MATRIX_LOOP_END:
     return matrix_changed;
 }
 
+/** \brief Tasks previously located in matrix_scan_quantum
+ *
+ * TODO: rationalise against keyboard_task and current split role
+ */
+void quantum_task(void) {
+#ifdef SPLIT_KEYBOARD
+    // some tasks should only run on master
+    if (!is_keyboard_master()) return;
+#endif
+
+#if defined(AUDIO_ENABLE) && defined(AUDIO_INIT_DELAY)
+    // There are some tasks that need to be run a little bit
+    // after keyboard startup, or else they will not work correctly
+    // because of interaction with the USB device state, which
+    // may still be in flux...
+    //
+    // At the moment the only feature that needs this is the
+    // startup song.
+    static bool     delayed_tasks_run  = false;
+    static uint16_t delayed_task_timer = 0;
+    if (!delayed_tasks_run) {
+        if (!delayed_task_timer) {
+            delayed_task_timer = timer_read();
+        } else if (timer_elapsed(delayed_task_timer) > 300) {
+            audio_startup();
+            delayed_tasks_run = true;
+        }
+    }
+#endif
+
+#if defined(AUDIO_ENABLE) && !defined(NO_MUSIC_MODE)
+    music_task();
+#endif
+
+#ifdef KEY_OVERRIDE_ENABLE
+    key_override_task();
+#endif
+
+#ifdef SEQUENCER_ENABLE
+    sequencer_task();
+#endif
+
+#ifdef TAP_DANCE_ENABLE
+    tap_dance_task();
+#endif
+
+#ifdef COMBO_ENABLE
+    combo_task();
+#endif
+
+#ifdef WPM_ENABLE
+    decay_wpm();
+#endif
+
+#ifdef HAPTIC_ENABLE
+    haptic_task();
+#endif
+
+#ifdef DIP_SWITCH_ENABLE
+    dip_switch_read(false);
+#endif
+
+#ifdef AUTO_SHIFT_ENABLE
+    autoshift_matrix_scan();
+#endif
+}
+
 /** \brief Keyboard task: Do keyboard routine jobs
  *
  * Do routine keyboard jobs:
@@ -465,6 +533,8 @@ void keyboard_task(void) {
     bool matrix_changed = matrix_scan_task();
     (void)matrix_changed;
 
+    quantum_task();
+
 #if defined(RGBLIGHT_ENABLE)
     rgblight_task();
 #endif
diff --git a/quantum/quantum.c b/quantum/quantum.c
index c106f795d0..ac99bcbd45 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -47,10 +47,6 @@ float default_layer_songs[][16][2] = DEFAULT_LAYER_SONGS;
 #    endif
 #endif
 
-#ifdef AUTO_SHIFT_ENABLE
-#    include "process_auto_shift.h"
-#endif
-
 uint8_t extract_mod_bits(uint16_t code) {
     switch (code) {
         case QK_MODS ... QK_MODS_MAX:
@@ -400,73 +396,8 @@ void matrix_init_quantum() {
     matrix_init_kb();
 }
 
-void matrix_scan_quantum() {
-#if defined(AUDIO_ENABLE) && defined(AUDIO_INIT_DELAY)
-    // There are some tasks that need to be run a little bit
-    // after keyboard startup, or else they will not work correctly
-    // because of interaction with the USB device state, which
-    // may still be in flux...
-    //
-    // At the moment the only feature that needs this is the
-    // startup song.
-    static bool     delayed_tasks_run  = false;
-    static uint16_t delayed_task_timer = 0;
-    if (!delayed_tasks_run) {
-        if (!delayed_task_timer) {
-            delayed_task_timer = timer_read();
-        } else if (timer_elapsed(delayed_task_timer) > 300) {
-            audio_startup();
-            delayed_tasks_run = true;
-        }
-    }
-#endif
-
-#if defined(AUDIO_ENABLE) && !defined(NO_MUSIC_MODE)
-    music_task();
-#endif
-
-#ifdef KEY_OVERRIDE_ENABLE
-    key_override_task();
-#endif
-
-#ifdef SEQUENCER_ENABLE
-    sequencer_task();
-#endif
-
-#ifdef TAP_DANCE_ENABLE
-    tap_dance_task();
-#endif
-
-#ifdef COMBO_ENABLE
-    combo_task();
-#endif
-
-#ifdef LED_MATRIX_ENABLE
-    led_matrix_task();
-#endif
-
-#ifdef WPM_ENABLE
-    decay_wpm();
-#endif
-
-#ifdef HAPTIC_ENABLE
-    haptic_task();
-#endif
-
-#ifdef DIP_SWITCH_ENABLE
-    dip_switch_read(false);
-#endif
-
-#ifdef AUTO_SHIFT_ENABLE
-    autoshift_matrix_scan();
-#endif
-
-    matrix_scan_kb();
-}
-
-#ifdef HD44780_ENABLED
-#    include "hd44780.h"
-#endif
+// TODO: remove legacy api
+void matrix_scan_quantum() { matrix_scan_kb(); }
 
 //------------------------------------------------------------------------------
 // Override these functions in your keymap file to play different tunes on