diff --git a/data/mappings/info_config.json b/data/mappings/info_config.json
index 3891ef64379..d03f50c51e0 100644
--- a/data/mappings/info_config.json
+++ b/data/mappings/info_config.json
@@ -82,7 +82,6 @@
"VENDOR_ID": {"info_key": "usb.vid", "value_type": "hex"},
"QMK_ESC_OUTPUT": {"info_key": "qmk_lufa_bootloader.esc_output"},
"QMK_ESC_INPUT": {"info_key": "qmk_lufa_bootloader.esc_input"},
- "QMK_KEYS_PER_SCAN": {"info_key": "qmk.keys_per_scan", "value_type": "int"},
"QMK_LED": {"info_key": "qmk_lufa_bootloader.led"},
"QMK_SPEAKER": {"info_key": "qmk_lufa_bootloader.speaker"},
"SECURE_UNLOCK_SEQUENCE": {"info_key": "secure.unlock_sequence", "value_type": "array.array.int", "to_json": false},
@@ -114,4 +113,5 @@
"DEBOUNCING_DELAY": {"info_key": "_invalid.debouncing_delay", "invalid": true},
"PREVENT_STUCK_MODIFIERS": {"info_key": "_invalid.prevent_stuck_mods", "invalid": true},
"RGBLIGHT_ANIMATIONS": {"info_key": "rgblight.animations.all", "value_type": "bool", "deprecated": true},
+ "QMK_KEYS_PER_SCAN": {"info_key": "qmk.keys_per_scan", "value_type": "int", "deprecated": true},
}
diff --git a/docs/config_options.md b/docs/config_options.md
index f50748b9504..c0a150e405c 100644
--- a/docs/config_options.md
+++ b/docs/config_options.md
@@ -182,15 +182,6 @@ If you define these options you will enable the associated feature, which may in
* how long before oneshot times out
* `#define ONESHOT_TAP_TOGGLE 2`
* how many taps before oneshot toggle is triggered
-* `#define QMK_KEYS_PER_SCAN 4`
- * Allows sending more than one key per scan. By default, only one key event gets
- sent via `process_record()` per scan. This has little impact on most typing, but
- if you're doing a lot of chords, or your scan rate is slow to begin with, you can
- have some delay in processing key events. Each press and release is a separate
- event. For a keyboard with 1ms or so scan times, even a very fast typist isn't
- going to produce the 500 keystrokes a second needed to actually get more than a
- few ms of delay from this. But if you're doing chording on something with 3-4ms
- scan times? You probably want this.
* `#define COMBO_COUNT 2`
* Set this to the number of combos that you're using in the [Combo](feature_combo.md) feature. Or leave it undefined and programmatically set the count.
* `#define COMBO_TERM 200`
diff --git a/docs/ja/config_options.md b/docs/ja/config_options.md
index 5236230a108..c95753bd5d7 100644
--- a/docs/ja/config_options.md
+++ b/docs/ja/config_options.md
@@ -181,8 +181,6 @@ QMK での全ての利用可能な設定にはデフォルトがあります。
* ワンショットがタイムアウトするまでの時間
* `#define ONESHOT_TAP_TOGGLE 2`
* ワンショットトグルが引き起こされるまでのタップ数
-* `#define QMK_KEYS_PER_SCAN 4`
- * 走査ごとに1つ以上のキーを送信できるようにします。デフォルトでは、走査ごとに `process_record()` 経由で1つのキーイベントのみが送信されます。これはほとんどのタイピングにほとんど影響しませんが、多くのコードを入力しているか、走査レートが最初から遅い場合、キーイベントの処理に多少の遅延が生じる可能性があります。それぞれのプレスとリリースは別のイベントです。スキャン時間が 1ms 程度のキーボードの場合、とても高速なタイピストでさえ、実際にキーボードから数 ms 以上の遅延を発生させるのに必要な 500 キーストロークを1秒間に生成することはないでしょう。しかし、3~4ms の走査時間でコードを入力している場合はどうでしょうか?おそらくこれが必要です。
* `#define COMBO_COUNT 2`
* [コンボ](ja/feature_combo.md)機能で使っているコンボの数にこれを設定します。
* `#define COMBO_TERM 200`
diff --git a/keyboards/40percentclub/gherkin/keymaps/stevexyz/config.h b/keyboards/40percentclub/gherkin/keymaps/stevexyz/config.h
index c708babf163..d837be8ba15 100644
--- a/keyboards/40percentclub/gherkin/keymaps/stevexyz/config.h
+++ b/keyboards/40percentclub/gherkin/keymaps/stevexyz/config.h
@@ -39,8 +39,6 @@
// how long before oneshot times out
#define ONESHOT_TAP_TOGGLE 2
// how many taps before oneshot toggle is triggered
- #define QMK_KEYS_PER_SCAN 4
- // Allows sending more than one key per scan. By default, only one key event gets sent via process_record() per scan. This has little impact on most typing, but if you're doing a lot of chords, or your scan rate is slow to begin with, you can have some delay in processing key events. Each press and release is a separate event. For a keyboard with 1ms or so scan times, even a very fast typist isn't going to produce the 500 keystrokes a second needed to actually get more than a few ms of delay from this. But if you're doing chording on something with 3-4ms scan times? You probably want this.
#define COMBO_COUNT 2
// Set this to the number of combos that you're using in the Combo feature.
#define COMBO_TERM 200
diff --git a/keyboards/ai03/jp60/keymaps/default/config.h b/keyboards/ai03/jp60/keymaps/default/config.h
deleted file mode 100644
index 9e0623524aa..00000000000
--- a/keyboards/ai03/jp60/keymaps/default/config.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Copyright 2021 ai03
- *
- * 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 2 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
-
-/* Increase scan quantity for improved performance */
-#define QMK_KEYS_PER_SCAN 12
diff --git a/keyboards/ai03/jp60/keymaps/via/config.h b/keyboards/ai03/jp60/keymaps/via/config.h
deleted file mode 100644
index 9e0623524aa..00000000000
--- a/keyboards/ai03/jp60/keymaps/via/config.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Copyright 2021 ai03
- *
- * 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 2 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
-
-/* Increase scan quantity for improved performance */
-#define QMK_KEYS_PER_SCAN 12
diff --git a/keyboards/bioi/morgan65/config.h b/keyboards/bioi/morgan65/config.h
index e4ad58c3a7e..2ce3c7a56b2 100644
--- a/keyboards/bioi/morgan65/config.h
+++ b/keyboards/bioi/morgan65/config.h
@@ -37,8 +37,6 @@ along with this program. If not, see .
#define MATRIX_ROW_PINS { E6, C6, F4, B2, D4 }
#define MATRIX_COL_PINS { F5, F6, F7, C7, B0, B7, B5, D5, B4, D7, D6, D1, D0, B3 }
-//#define QMK_KEYS_PER_SCAN 4
-
/* Backlight Setup */
#define BACKLIGHT_PIN B6
#define BACKLIGHT_LEVELS 12
diff --git a/keyboards/doio/kb16/config.h b/keyboards/doio/kb16/config.h
index 043a4920066..911ba9d3d59 100644
--- a/keyboards/doio/kb16/config.h
+++ b/keyboards/doio/kb16/config.h
@@ -39,9 +39,6 @@
/* Forcing to use NKRO instead 6KRO */
#define FORCE_NKRO
-/* Larger keys per scan */
-#define QMK_KEYS_PER_SCAN 12
-
/* Use the custom font */
#define OLED_FONT_H "lib/glcdfont.c"
diff --git a/keyboards/dztech/dz60rgb/keymaps/kgreulich/config.h b/keyboards/dztech/dz60rgb/keymaps/kgreulich/config.h
index fc836b5ebb3..e3250acef19 100644
--- a/keyboards/dztech/dz60rgb/keymaps/kgreulich/config.h
+++ b/keyboards/dztech/dz60rgb/keymaps/kgreulich/config.h
@@ -7,8 +7,6 @@
#define TAP_HOLD_CAPS_DELAY 0
#define USB_POLLING_INTERVAL_MS 1
-#define QMK_KEYS_PER_SCAN 4
-
// some speed shit
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
diff --git a/keyboards/dztech/dz60rgb/keymaps/matthewrobo/config.h b/keyboards/dztech/dz60rgb/keymaps/matthewrobo/config.h
index c2b14f52845..ca64eeb69b4 100644
--- a/keyboards/dztech/dz60rgb/keymaps/matthewrobo/config.h
+++ b/keyboards/dztech/dz60rgb/keymaps/matthewrobo/config.h
@@ -51,8 +51,6 @@
// #undef ENABLE_RGB_MATRIX_SOLID_SPLASH
// #undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-#define QMK_KEYS_PER_SCAN 4
-
// #define RGB_MATRIX_KEYRELEASES
// some speed shit
diff --git a/keyboards/dztech/dz60rgb/keymaps/xunz/config.h b/keyboards/dztech/dz60rgb/keymaps/xunz/config.h
index cfeba003bd4..2fdb3e5f4c5 100644
--- a/keyboards/dztech/dz60rgb/keymaps/xunz/config.h
+++ b/keyboards/dztech/dz60rgb/keymaps/xunz/config.h
@@ -46,8 +46,6 @@
// #undef ENABLE_RGB_MATRIX_SOLID_SPLASH
// #undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-#define QMK_KEYS_PER_SCAN 4
-
// #define RGB_MATRIX_KEYRELEASES
#define NO_ACTION_ONESHOT
diff --git a/keyboards/dztech/dz65rgb/keymaps/matthewrobo/config.h b/keyboards/dztech/dz65rgb/keymaps/matthewrobo/config.h
index 586e5765aa7..25842ac186b 100644
--- a/keyboards/dztech/dz65rgb/keymaps/matthewrobo/config.h
+++ b/keyboards/dztech/dz65rgb/keymaps/matthewrobo/config.h
@@ -47,8 +47,6 @@
// #undef ENABLE_RGB_MATRIX_SOLID_SPLASH
// #undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-#define QMK_KEYS_PER_SCAN 4
-
// #define RGB_MATRIX_KEYRELEASES
// some speed shit
diff --git a/keyboards/dztech/dz65rgb/keymaps/yuannan/config.h b/keyboards/dztech/dz65rgb/keymaps/yuannan/config.h
index 0a005cbca38..ef5023f8c62 100644
--- a/keyboards/dztech/dz65rgb/keymaps/yuannan/config.h
+++ b/keyboards/dztech/dz65rgb/keymaps/yuannan/config.h
@@ -30,8 +30,6 @@
#define RGB_MATRIX_VAL_STEP 8
#define RGB_MATRIX_SPD_STEP 8
-//#define QMK_KEYS_PER_SCAN 12nn
-
#define MOUSEKEY_DELAY 0
#define MOUSEKEY_INTERVAL 1
#define MOUSEKEY_MOVE_DELTA 1
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c b/keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c
index ff9ae77bdd9..93b82df8cf7 100644
--- a/keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c
@@ -20,8 +20,6 @@
// debounce settings
// remove these after getting a new keyboard
// #define DEBOUNCE 50
-// #define QMK_KEYS_PER_SCAN 4
-
enum custom_keycodes {
PLACEHOLDER = SAFE_RANGE, // can always be here
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h b/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h
index c35963d842c..acd3a44e167 100644
--- a/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h
@@ -25,7 +25,6 @@
#define LEADER_TIMEOUT 1000
#define PERMISSIVE_HOLD
-#define QMK_KEYS_PER_SCAN 4
#define DANCING_TERM 175
#define ONESHOT_TAP_TOGGLE 5
diff --git a/keyboards/ergodox_ez/keymaps/rgb_layer/config.h b/keyboards/ergodox_ez/keymaps/rgb_layer/config.h
index 1913a2d369a..84c5adfc9e0 100644
--- a/keyboards/ergodox_ez/keymaps/rgb_layer/config.h
+++ b/keyboards/ergodox_ez/keymaps/rgb_layer/config.h
@@ -2,13 +2,9 @@
#define KEYMAP_CONFIG_H
- #define RGBLIGHT_SLEEP
+#define RGBLIGHT_SLEEP
-#ifndef QMK_KEYS_PER_SCAN
-#define QMK_KEYS_PER_SCAN 4
-#endif // !QMK_KEYS_PER_SCAN
-
#define IGNORE_MOD_TAP_INTERRUPT
#undef PERMISSIVE_HOLD
diff --git a/keyboards/ergodox_ez/keymaps/rmw/config.h b/keyboards/ergodox_ez/keymaps/rmw/config.h
index 1ecf8b8b791..1b7528a4a72 100644
--- a/keyboards/ergodox_ez/keymaps/rmw/config.h
+++ b/keyboards/ergodox_ez/keymaps/rmw/config.h
@@ -22,7 +22,6 @@ along with this program. If not, see .
#define USB_MAX_POWER_CONSUMPTION 500
-#define QMK_KEYS_PER_SCAN 4
/* Set 0 if debouncing isn't needed */
#undef DEBOUNCE
#define DEBOUNCE 5
diff --git a/keyboards/eternal_keypad/keymaps/kyek/config.h b/keyboards/eternal_keypad/keymaps/kyek/config.h
index 226b16e546e..36ab46334c0 100644
--- a/keyboards/eternal_keypad/keymaps/kyek/config.h
+++ b/keyboards/eternal_keypad/keymaps/kyek/config.h
@@ -17,5 +17,3 @@
#define ONESHOT_TIMEOUT 2000
#define FORCE_NKRO
-#define USB_POLLING_INTERVAL_MS 1
-#define QMK_KEYS_PER_SCAN 12
diff --git a/keyboards/gmmk/gmmk2/p96/config.h b/keyboards/gmmk/gmmk2/p96/config.h
index 1b3a92dd533..fec383c2403 100644
--- a/keyboards/gmmk/gmmk2/p96/config.h
+++ b/keyboards/gmmk/gmmk2/p96/config.h
@@ -119,10 +119,6 @@
#define ENABLE_RGB_MATRIX_SOLID_SPLASH
#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-
-/* Send up to 4 key press events per scan */
-#define QMK_KEYS_PER_SCAN 4
-
/* Set debounce time to 5ms */
#define DEBOUNCE 5
diff --git a/keyboards/gmmk/pro/config.h b/keyboards/gmmk/pro/config.h
index aba69c88722..aea22c54340 100644
--- a/keyboards/gmmk/pro/config.h
+++ b/keyboards/gmmk/pro/config.h
@@ -113,9 +113,6 @@
#define ENABLE_RGB_MATRIX_SOLID_SPLASH
#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-/* Send up to 4 key press events per scan */
-#define QMK_KEYS_PER_SCAN 4
-
/* Set debounce time to 5ms */
#define DEBOUNCE 5
diff --git a/keyboards/gopolar/gg86/config.h b/keyboards/gopolar/gg86/config.h
index 7566bd2c3f5..79648346231 100644
--- a/keyboards/gopolar/gg86/config.h
+++ b/keyboards/gopolar/gg86/config.h
@@ -35,9 +35,6 @@
/* Forcing to use NKRO instead 6KRO */
#define FORCE_NKRO
-/* Change larger keys per scan for elite gaming */
-#define QMK_KEYS_PER_SCAN 12
-
/* Use the custom font */
#define OLED_FONT_H "lib/glcdfont.c"
diff --git a/keyboards/handwired/marauder/config.h b/keyboards/handwired/marauder/config.h
index fdc269fb7f4..a3165c480d8 100644
--- a/keyboards/handwired/marauder/config.h
+++ b/keyboards/handwired/marauder/config.h
@@ -36,7 +36,7 @@
#define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6, F5, F4, B0 }
#define DIODE_DIRECTION COL2ROW
#define LAYER_STATE_8BIT
-#define QMK_KEYS_PER_SCAN 12 // moar gaming code
+
#define RGB_DI_PIN D3
#ifdef RGB_DI_PIN
#define RGBLED_NUM 7
diff --git a/keyboards/handwired/xealous/config.h b/keyboards/handwired/xealous/config.h
index 5c1469b1f01..2502b4d1969 100644
--- a/keyboards/handwired/xealous/config.h
+++ b/keyboards/handwired/xealous/config.h
@@ -29,7 +29,6 @@ along with this program. If not, see .
//#define DEBUG_MATRIX_SCAN_RATE //Use this to determine scan-rate.
#define FORCE_NKRO
-#define QMK_KEYS_PER_SCAN 4 //if we press four keys simultaneously, lets process them simultaneously...
#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/horrortroll/chinese_pcb/black_e65/config.h b/keyboards/horrortroll/chinese_pcb/black_e65/config.h
index f544206b812..bcd38d62c7a 100644
--- a/keyboards/horrortroll/chinese_pcb/black_e65/config.h
+++ b/keyboards/horrortroll/chinese_pcb/black_e65/config.h
@@ -38,9 +38,6 @@
/* Forcing to use NKRO instead 6KRO */
#define FORCE_NKRO
-/* Change larger keys per scan for elite gaming */
-#define QMK_KEYS_PER_SCAN 12
-
/* LED Indicator */
#define LED_CAPS_LOCK_PIN C7
diff --git a/keyboards/horrortroll/chinese_pcb/devil68_pro/config.h b/keyboards/horrortroll/chinese_pcb/devil68_pro/config.h
index 82465cf99c4..8a227f3c494 100644
--- a/keyboards/horrortroll/chinese_pcb/devil68_pro/config.h
+++ b/keyboards/horrortroll/chinese_pcb/devil68_pro/config.h
@@ -38,9 +38,6 @@
/* Forcing to use NKRO instead 6KRO */
#define FORCE_NKRO
-/* Change larger keys per scan for elite gaming */
-#define QMK_KEYS_PER_SCAN 12
-
#ifdef RGB_MATRIX_ENABLE
#define DRIVER_LED_TOTAL 86
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
diff --git a/keyboards/horrortroll/handwired_k552/config.h b/keyboards/horrortroll/handwired_k552/config.h
index 09e89b13c4b..d3c385f64ec 100644
--- a/keyboards/horrortroll/handwired_k552/config.h
+++ b/keyboards/horrortroll/handwired_k552/config.h
@@ -39,9 +39,6 @@
/* Forcing to use NKRO instead 6KRO */
#define FORCE_NKRO
-/* Change larger keys per scan for elite gaming */
-#define QMK_KEYS_PER_SCAN 12
-
/* EEPROM size */
#define EEPROM_PAGE_SIZE
#define FEE_PAGE_SIZE 0x800
diff --git a/keyboards/horrortroll/lemon40/config.h b/keyboards/horrortroll/lemon40/config.h
index 600ef016578..c3e1972ae36 100644
--- a/keyboards/horrortroll/lemon40/config.h
+++ b/keyboards/horrortroll/lemon40/config.h
@@ -38,9 +38,6 @@
/* Forcing to use NKRO instead 6KRO */
#define FORCE_NKRO
-/* Larger keys per scan */
-#define QMK_KEYS_PER_SCAN 12
-
/* RGB light config */
#ifdef RGBLIGHT_ENABLE
diff --git a/keyboards/horrortroll/paws60/config.h b/keyboards/horrortroll/paws60/config.h
index 7bd3ac8be31..055a6ae3191 100644
--- a/keyboards/horrortroll/paws60/config.h
+++ b/keyboards/horrortroll/paws60/config.h
@@ -37,6 +37,3 @@
/* Forcing to use NKRO instead 6KRO */
#define FORCE_NKRO
-
-/* Larger keys per scan */
-#define QMK_KEYS_PER_SCAN 12
diff --git a/keyboards/ianklug/grooveboard/config.h b/keyboards/ianklug/grooveboard/config.h
index 007a86529cd..2d255a2c184 100644
--- a/keyboards/ianklug/grooveboard/config.h
+++ b/keyboards/ianklug/grooveboard/config.h
@@ -142,5 +142,3 @@ along with this program. If not, see .
/* Bootmagic Lite key configuration */
//#define BOOTMAGIC_LITE_ROW 0
//#define BOOTMAGIC_LITE_COLUMN 0
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/jadookb/jkb2/keymaps/via/config.h b/keyboards/jadookb/jkb2/keymaps/via/config.h
deleted file mode 100644
index 31022ca5358..00000000000
--- a/keyboards/jadookb/jkb2/keymaps/via/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-
- /* Copyright 2021 Wizard-GG
- *
- * 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 2 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
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/jadookb/jkb65/keymaps/via/config.h b/keyboards/jadookb/jkb65/keymaps/via/config.h
deleted file mode 100644
index 9d4eaf74ee4..00000000000
--- a/keyboards/jadookb/jkb65/keymaps/via/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
- /* Copyright 2021 Wizard-GG
- *
- * 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 2 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
-
-#define QMK_KEYS_PER_SCAN 12
diff --git a/keyboards/kbdfans/kbd67/mkiirgb/keymaps/dnsnrk/config.h b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/dnsnrk/config.h
index 25f645f7349..bb3409256c1 100644
--- a/keyboards/kbdfans/kbd67/mkiirgb/keymaps/dnsnrk/config.h
+++ b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/dnsnrk/config.h
@@ -16,8 +16,6 @@
#pragma once
/* place overrides here */
-#undef QMK_KEYS_PER_SCAN
-#define QMK_KEYS_PER_SCAN 4
#undef DEBOUNCE
#define DEBOUNCE 8
#undef TAPPING_TOGGLE
diff --git a/keyboards/kbdfans/kbd67/mkiirgb/keymaps/pascalpfeil/config.h b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/pascalpfeil/config.h
index 2cd513223a3..cda14c4bc0a 100644
--- a/keyboards/kbdfans/kbd67/mkiirgb/keymaps/pascalpfeil/config.h
+++ b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/pascalpfeil/config.h
@@ -19,9 +19,6 @@
/* 1000Hz USB polling */
#define USB_POLLING_INTERVAL_MS 1
-/* Send up to 4 key press events per scan */
-#define QMK_KEYS_PER_SCAN 4
-
/* Force NKRO on boot up */
#define FORCE_NKRO
diff --git a/keyboards/keystonecaps/gameroyadvance/config.h b/keyboards/keystonecaps/gameroyadvance/config.h
index b8d5a69122c..06b40b5e66a 100644
--- a/keyboards/keystonecaps/gameroyadvance/config.h
+++ b/keyboards/keystonecaps/gameroyadvance/config.h
@@ -55,10 +55,6 @@ along with this program. If not, see .
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
-
-
-#define QMK_KEYS_PER_SCAN 12
-
#define RGB_DI_PIN C7
#ifdef RGB_DI_PIN
#define RGBLIGHT_EFFECT_BREATHING
diff --git a/keyboards/kprepublic/bm40hsrgb/keymaps/34keys/config.h b/keyboards/kprepublic/bm40hsrgb/keymaps/34keys/config.h
index 63176adb50e..2534ffd5547 100644
--- a/keyboards/kprepublic/bm40hsrgb/keymaps/34keys/config.h
+++ b/keyboards/kprepublic/bm40hsrgb/keymaps/34keys/config.h
@@ -14,9 +14,6 @@
// Enable rapid switch from tap to hold, disables double tap hold auto-repeat.
#define TAPPING_FORCE_HOLD
-// Recommended for heavy chording.
-#define QMK_KEYS_PER_SCAN 4
-
// Mouse key speed and acceleration.
#undef MOUSEKEY_DELAY
#define MOUSEKEY_DELAY 0
@@ -56,4 +53,4 @@
# undef ENABLE_RGB_MATRIX_DIGITAL_RAIN
# undef RGB_MATRIX_STARTUP_MODE
// # define RGBLIGHT_HUE_STEP 20
-#endif
\ No newline at end of file
+#endif
diff --git a/keyboards/kprepublic/bm40hsrgb/keymaps/gabustoledo/config.h b/keyboards/kprepublic/bm40hsrgb/keymaps/gabustoledo/config.h
index ba18295eada..e71078415a3 100644
--- a/keyboards/kprepublic/bm40hsrgb/keymaps/gabustoledo/config.h
+++ b/keyboards/kprepublic/bm40hsrgb/keymaps/gabustoledo/config.h
@@ -30,9 +30,6 @@
#define AUTO_SHIFT_TIMEOUT TAPPING_TERM
#define AUTO_SHIFT_NO_SETUP
-// Recommended for heavy chording.
-#define QMK_KEYS_PER_SCAN 4
-
// Mouse key speed and acceleration.
#undef MOUSEKEY_DELAY
#define MOUSEKEY_DELAY 0
diff --git a/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/config.h b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/config.h
index 0748f83cdcb..3ddb8134861 100644
--- a/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/config.h
+++ b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/config.h
@@ -35,7 +35,6 @@
// #define MOUSEKEY_MAX_SPEED 10
// #define MOUSEKEY_WHEEL_DELAY 0
#define FORCE_NKRO // NKRO by default requires to be turned on, this forces it on during keyboard startup regardless of EEPROM setting. NKRO can still be turned off but will be turned on again if the keyboard reboots.
-// #define QMK_KEYS_PER_SCAN 4 // Allows sending more than one key per scan. By default, only one key event gets sent via process_record() per scan. This has little impact on most typing, but if you're doing a lot of chords, or your scan rate is slow to begin with, you can have some delay in processing key events. Each press and release is a separate event. For a keyboard with 1ms or so scan times, even a very fast typist isn't going to produce the 500 keystrokes a second needed to actually get more than a few ms of delay from this. But if you're doing chording on something with 3-4ms scan times? You probably want this.
// #define STRICT_LAYER_RELEASE // Force a key release to be evaluated using the current layer stack instead of remembering which layer it came from (used for advanced cases)
// #define LOCKING_SUPPORT_ENABLE // Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap
// #define LOCKING_RESYNC_ENABLE // Tries to keep switch state consistent with keyboard LED state
diff --git a/keyboards/kprepublic/bm80hsrgb/keymaps/peepeetee/config.h b/keyboards/kprepublic/bm80hsrgb/keymaps/peepeetee/config.h
index b322afae9be..97cae26cbdc 100644
--- a/keyboards/kprepublic/bm80hsrgb/keymaps/peepeetee/config.h
+++ b/keyboards/kprepublic/bm80hsrgb/keymaps/peepeetee/config.h
@@ -22,7 +22,6 @@
// #define TERMINAL_HELP
#define FORCE_NKRO // NKRO by default requires to be turned on, this forces it on during keyboard startup regardless of EEPROM setting. NKRO can still be turned off but will be turned on again if the keyboard reboots.
-// #define QMK_KEYS_PER_SCAN 4 // Allows sending more than one key per scan. By default, only one key event gets sent via process_record() per scan. This has little impact on most typing, but if you're doing a lot of chords, or your scan rate is slow to begin with, you can have some delay in processing key events. Each press and release is a separate event. For a keyboard with 1ms or so scan times, even a very fast typist isn't going to produce the 500 keystrokes a second needed to actually get more than a few ms of delay from this. But if you're doing chording on something with 3-4ms scan times? You probably want this.
// #define STRICT_LAYER_RELEASE // Force a key release to be evaluated using the current layer stack instead of remembering which layer it came from (used for advanced cases)
// #define TAPPING_TERM 200 // How long before a tap becomes a hold, if set above 500, a key tapped during the tapping term will turn it into a hold too
// #define TAPPING_TERM_PER_KEY // Enables handling for per key TAPPING_TERM settings
diff --git a/keyboards/kprepublic/jj40/keymaps/stevexyz/config.h b/keyboards/kprepublic/jj40/keymaps/stevexyz/config.h
index 84c02dddd6f..a4d3d375611 100644
--- a/keyboards/kprepublic/jj40/keymaps/stevexyz/config.h
+++ b/keyboards/kprepublic/jj40/keymaps/stevexyz/config.h
@@ -34,8 +34,6 @@
// how long before oneshot times out
#define ONESHOT_TAP_TOGGLE 2
// how many taps before oneshot toggle is triggered
- #define QMK_KEYS_PER_SCAN 4
- // Allows sending more than one key per scan. By default, only one key event gets sent via process_record() per scan. This has little impact on most typing, but if you're doing a lot of chords, or your scan rate is slow to begin with, you can have some delay in processing key events. Each press and release is a separate event. For a keyboard with 1ms or so scan times, even a very fast typist isn't going to produce the 500 keystrokes a second needed to actually get more than a few ms of delay from this. But if you're doing chording on something with 3-4ms scan times? You probably want this.
#define COMBO_COUNT 2
// Set this to the number of combos that you're using in the Combo feature.
#define COMBO_TERM 200
diff --git a/keyboards/lets_split/keymaps/piemod/config.h b/keyboards/lets_split/keymaps/piemod/config.h
index 1b3fd7544e7..c3975da3ca4 100644
--- a/keyboards/lets_split/keymaps/piemod/config.h
+++ b/keyboards/lets_split/keymaps/piemod/config.h
@@ -42,7 +42,4 @@ along with this program. If not, see .
#define RGBLIGHT_EFFECT_SNAKE_LENGTH 1
#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 1
-// Typing Options
-#define QMK_KEYS_PER_SCAN 4
-
#endif
diff --git a/keyboards/lfkeyboards/lfkpad/keymaps/pascalpfeil/config.h b/keyboards/lfkeyboards/lfkpad/keymaps/pascalpfeil/config.h
index a9f61f849cb..0f9ddaef31e 100644
--- a/keyboards/lfkeyboards/lfkpad/keymaps/pascalpfeil/config.h
+++ b/keyboards/lfkeyboards/lfkpad/keymaps/pascalpfeil/config.h
@@ -19,9 +19,6 @@
/* 1000Hz USB polling */
#define USB_POLLING_INTERVAL_MS 1
-/* Send up to 4 key press events per scan */
-#define QMK_KEYS_PER_SCAN 4
-
/* Force NKRO on boot up */
#define FORCE_NKRO
diff --git a/keyboards/maple_computing/minidox/keymaps/norman/config.h b/keyboards/maple_computing/minidox/keymaps/norman/config.h
index 0d3542a03e3..ecdf080c2c1 100644
--- a/keyboards/maple_computing/minidox/keymaps/norman/config.h
+++ b/keyboards/maple_computing/minidox/keymaps/norman/config.h
@@ -1,5 +1,4 @@
#pragma once
#define PERMISSIVE_HOLD
-#define QMK_KEYS_PER_SCAN 4
#define TAPPING_TERM 160
diff --git a/keyboards/massdrop/alt/keymaps/b_/config.h b/keyboards/massdrop/alt/keymaps/b_/config.h
index ca4424bd3fa..b7112c9ea73 100644
--- a/keyboards/massdrop/alt/keymaps/b_/config.h
+++ b/keyboards/massdrop/alt/keymaps/b_/config.h
@@ -23,7 +23,6 @@
// #define MOUSEKEY_MAX_SPEED 10
// #define MOUSEKEY_WHEEL_DELAY 0
//#define FORCE_NKRO // NKRO by default requires to be turned on, this forces it on during keyboard startup regardless of EEPROM setting. NKRO can still be turned off but will be turned on again if the keyboard reboots.
-// #define QMK_KEYS_PER_SCAN 4 // Allows sending more than one key per scan. By default, only one key event gets sent via process_record() per scan. This has little impact on most typing, but if you're doing a lot of chords, or your scan rate is slow to begin with, you can have some delay in processing key events. Each press and release is a separate event. For a keyboard with 1ms or so scan times, even a very fast typist isn't going to produce the 500 keystrokes a second needed to actually get more than a few ms of delay from this. But if you're doing chording on something with 3-4ms scan times? You probably want this.
// #define STRICT_LAYER_RELEASE // Force a key release to be evaluated using the current layer stack instead of remembering which layer it came from (used for advanced cases)
// #define LOCKING_SUPPORT_ENABLE // Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap
// #define LOCKING_RESYNC_ENABLE // Tries to keep switch state consistent with keyboard LED state
diff --git a/keyboards/massdrop/alt/keymaps/pregame/config.h b/keyboards/massdrop/alt/keymaps/pregame/config.h
index 19fc4fed34d..936951e34ae 100644
--- a/keyboards/massdrop/alt/keymaps/pregame/config.h
+++ b/keyboards/massdrop/alt/keymaps/pregame/config.h
@@ -36,7 +36,6 @@
// #define MOUSEKEY_MAX_SPEED 10
// #define MOUSEKEY_WHEEL_DELAY 0
#define FORCE_NKRO // NKRO by default requires to be turned on, this forces it on during keyboard startup regardless of EEPROM setting. NKRO can still be turned off but will be turned on again if the keyboard reboots.
-// #define QMK_KEYS_PER_SCAN 4 // Allows sending more than one key per scan. By default, only one key event gets sent via process_record() per scan. This has little impact on most typing, but if you're doing a lot of chords, or your scan rate is slow to begin with, you can have some delay in processing key events. Each press and release is a separate event. For a keyboard with 1ms or so scan times, even a very fast typist isn't going to produce the 500 keystrokes a second needed to actually get more than a few ms of delay from this. But if you're doing chording on something with 3-4ms scan times? You probably want this.
// #define STRICT_LAYER_RELEASE // Force a key release to be evaluated using the current layer stack instead of remembering which layer it came from (used for advanced cases)
// #define LOCKING_SUPPORT_ENABLE // Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap
// #define LOCKING_RESYNC_ENABLE // Tries to keep switch state consistent with keyboard LED state
diff --git a/keyboards/massdrop/ctrl/keymaps/endgame/config.h b/keyboards/massdrop/ctrl/keymaps/endgame/config.h
index 4850d7eed2f..d0bbfd2103b 100644
--- a/keyboards/massdrop/ctrl/keymaps/endgame/config.h
+++ b/keyboards/massdrop/ctrl/keymaps/endgame/config.h
@@ -20,7 +20,6 @@
#define MOUSEKEY_MAX_SPEED 10
#define MOUSEKEY_WHEEL_DELAY 0
#define FORCE_NKRO // NKRO by default requires to be turned on, this forces it on during keyboard startup regardless of EEPROM setting. NKRO can still be turned off but will be turned on again if the keyboard reboots.
-// #define QMK_KEYS_PER_SCAN 4 // Allows sending more than one key per scan. By default, only one key event gets sent via process_record() per scan. This has little impact on most typing, but if you're doing a lot of chords, or your scan rate is slow to begin with, you can have some delay in processing key events. Each press and release is a separate event. For a keyboard with 1ms or so scan times, even a very fast typist isn't going to produce the 500 keystrokes a second needed to actually get more than a few ms of delay from this. But if you're doing chording on something with 3-4ms scan times? You probably want this.
// #define STRICT_LAYER_RELEASE // Force a key release to be evaluated using the current layer stack instead of remembering which layer it came from (used for advanced cases)
// #define LOCKING_SUPPORT_ENABLE // Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap
// #define LOCKING_RESYNC_ENABLE // Tries to keep switch state consistent with keyboard LED state
diff --git a/keyboards/massdrop/ctrl/keymaps/matthewrobo/config.h b/keyboards/massdrop/ctrl/keymaps/matthewrobo/config.h
index 81e7764a9ee..692faa35a21 100644
--- a/keyboards/massdrop/ctrl/keymaps/matthewrobo/config.h
+++ b/keyboards/massdrop/ctrl/keymaps/matthewrobo/config.h
@@ -37,7 +37,6 @@ along with this program. If not, see .
// #define MOUSEKEY_MAX_SPEED 10
// #define MOUSEKEY_WHEEL_DELAY 0
#define FORCE_NKRO // NKRO by default requires to be turned on, this forces it on during keyboard startup regardless of EEPROM setting. NKRO can still be turned off but will be turned on again if the keyboard reboots.
-// #define QMK_KEYS_PER_SCAN 4 // Allows sending more than one key per scan. By default, only one key event gets sent via process_record() per scan. This has little impact on most typing, but if you're doing a lot of chords, or your scan rate is slow to begin with, you can have some delay in processing key events. Each press and release is a separate event. For a keyboard with 1ms or so scan times, even a very fast typist isn't going to produce the 500 keystrokes a second needed to actually get more than a few ms of delay from this. But if you're doing chording on something with 3-4ms scan times? You probably want this.
// #define STRICT_LAYER_RELEASE // Force a key release to be evaluated using the current layer stack instead of remembering which layer it came from (used for advanced cases)
// #define LOCKING_SUPPORT_ENABLE // Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap
// #define LOCKING_RESYNC_ENABLE // Tries to keep switch state consistent with keyboard LED state
diff --git a/keyboards/massdrop/ctrl/keymaps/xanimos/config.h b/keyboards/massdrop/ctrl/keymaps/xanimos/config.h
index 37987340cee..f1cbd5f3b06 100644
--- a/keyboards/massdrop/ctrl/keymaps/xanimos/config.h
+++ b/keyboards/massdrop/ctrl/keymaps/xanimos/config.h
@@ -36,7 +36,6 @@
#define MOUSEKEY_MAX_SPEED 10
#define MOUSEKEY_WHEEL_DELAY 0
#define FORCE_NKRO // NKRO by default requires to be turned on, this forces it on during keyboard startup regardless of EEPROM setting. NKRO can still be turned off but will be turned on again if the keyboard reboots.
-// #define QMK_KEYS_PER_SCAN 4 // Allows sending more than one key per scan. By default, only one key event gets sent via process_record() per scan. This has little impact on most typing, but if you're doing a lot of chords, or your scan rate is slow to begin with, you can have some delay in processing key events. Each press and release is a separate event. For a keyboard with 1ms or so scan times, even a very fast typist isn't going to produce the 500 keystrokes a second needed to actually get more than a few ms of delay from this. But if you're doing chording on something with 3-4ms scan times? You probably want this.
// #define STRICT_LAYER_RELEASE // Force a key release to be evaluated using the current layer stack instead of remembering which layer it came from (used for advanced cases)
// #define LOCKING_SUPPORT_ENABLE // Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap
// #define LOCKING_RESYNC_ENABLE // Tries to keep switch state consistent with keyboard LED state
diff --git a/keyboards/ml/gas75/config.h b/keyboards/ml/gas75/config.h
index 4f35c4c265e..82d8c134a0f 100644
--- a/keyboards/ml/gas75/config.h
+++ b/keyboards/ml/gas75/config.h
@@ -38,9 +38,6 @@
/* Forcing to use NKRO instead 6KRO */
#define FORCE_NKRO
-/* Larger keys per scan */
-#define QMK_KEYS_PER_SCAN 12
-
/* Encoder pins */
#define ENCODERS_PAD_A { F0 }
#define ENCODERS_PAD_B { F1 }
diff --git a/keyboards/mmkzoo65/config.h b/keyboards/mmkzoo65/config.h
index b562a408592..b874fdef8ad 100644
--- a/keyboards/mmkzoo65/config.h
+++ b/keyboards/mmkzoo65/config.h
@@ -38,4 +38,3 @@
/* 将USB 轮询速率更改为 1000hz 并为精英游戏每次扫描使用更大的密钥*/
#define USB_POLLING_INTERVAL_MS 2
-#define QMK_KEYS_PER_SCAN 12
diff --git a/keyboards/mss_studio/m63_rgb/config.h b/keyboards/mss_studio/m63_rgb/config.h
index e2aae8469fb..a7220ab1c66 100644
--- a/keyboards/mss_studio/m63_rgb/config.h
+++ b/keyboards/mss_studio/m63_rgb/config.h
@@ -36,9 +36,6 @@
/* Forcing to use NKRO instead 6KRO */
#define FORCE_NKRO
-/* Change larger keys per scan for elite gaming */
-#define QMK_KEYS_PER_SCAN 12
-
#ifdef RGB_MATRIX_ENABLE
#define DRIVER_LED_TOTAL 75
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
diff --git a/keyboards/mss_studio/m64_rgb/config.h b/keyboards/mss_studio/m64_rgb/config.h
index d8ac27024b5..c9a1e3f3dbe 100644
--- a/keyboards/mss_studio/m64_rgb/config.h
+++ b/keyboards/mss_studio/m64_rgb/config.h
@@ -36,9 +36,6 @@
/* Forcing to use NKRO instead 6KRO */
#define FORCE_NKRO
-/* Change larger keys per scan for elite gaming */
-#define QMK_KEYS_PER_SCAN 12
-
#ifdef RGB_MATRIX_ENABLE
#define DRIVER_LED_TOTAL 76
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
diff --git a/keyboards/mwstudio/mw65_rgb/keymaps/horrortroll/config.h b/keyboards/mwstudio/mw65_rgb/keymaps/horrortroll/config.h
index 13cffea4da9..0d2051ffd5c 100644
--- a/keyboards/mwstudio/mw65_rgb/keymaps/horrortroll/config.h
+++ b/keyboards/mwstudio/mw65_rgb/keymaps/horrortroll/config.h
@@ -21,10 +21,6 @@
/* Forcing to use NKRO instead 6KRO */
#define FORCE_NKRO
-/* Change USB Polling Rate to 1000hz and a larger keys per scan for elite gaming */
-#define USB_POLLING_INTERVAL_MS 1
-#define QMK_KEYS_PER_SCAN 12
-
#ifdef RGB_MATRIX_ENABLE
/* RGB Matrix config */
#undef ENABLE_RGB_MATRIX_BAND_SAT
diff --git a/keyboards/mwstudio/mw65_rgb/keymaps/thearesia/config.h b/keyboards/mwstudio/mw65_rgb/keymaps/thearesia/config.h
index ba574e1e3c6..fef62c63746 100644
--- a/keyboards/mwstudio/mw65_rgb/keymaps/thearesia/config.h
+++ b/keyboards/mwstudio/mw65_rgb/keymaps/thearesia/config.h
@@ -20,7 +20,3 @@
/* Forcing to use NKRO instead 6KRO */
#define FORCE_NKRO
-
-/* Change USB Polling Rate to 1000hz and a larger keys per scan for elite gaming */
-#define USB_POLLING_INTERVAL_MS 1
-#define QMK_KEYS_PER_SCAN 12
diff --git a/keyboards/pierce/keymaps/durken1/config.h b/keyboards/pierce/keymaps/durken1/config.h
index 7d19a0b83b1..bc0bb1c4b8b 100644
--- a/keyboards/pierce/keymaps/durken1/config.h
+++ b/keyboards/pierce/keymaps/durken1/config.h
@@ -27,9 +27,6 @@
#define PERMISSIVE_HOLD
-// Recommended for heavy chording.
-#define QMK_KEYS_PER_SCAN 4
-
// Combo settings
#define COMBO_COUNT 3
#define COMBO_TERM 35
@@ -74,4 +71,3 @@
#ifdef AUTO_BUTTONS
#define AUTO_BUTTONS_TIMEOUT 750
#endif
-
diff --git a/keyboards/rgbkb/zen/rev1/keymaps/cwebster2/config.h b/keyboards/rgbkb/zen/rev1/keymaps/cwebster2/config.h
index 211e3517ec9..cdffe6fd500 100644
--- a/keyboards/rgbkb/zen/rev1/keymaps/cwebster2/config.h
+++ b/keyboards/rgbkb/zen/rev1/keymaps/cwebster2/config.h
@@ -29,6 +29,4 @@ along with this program. If not, see .
#define COMBO_COUNT 2
#endif
-#define QMK_KEYS_PER_SCAN 4
-
#define EE_HANDS
diff --git a/keyboards/sanctified/dystopia/config.h b/keyboards/sanctified/dystopia/config.h
index a818d3e84f1..cf9d91d5517 100644
--- a/keyboards/sanctified/dystopia/config.h
+++ b/keyboards/sanctified/dystopia/config.h
@@ -27,5 +27,3 @@
#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7, C6, B6, B5, D4, D6, D7, B4 }
#define DIODE_DIRECTION COL2ROW
-
-#define QMK_KEYS_PER_SCAN 12
diff --git a/keyboards/signum/3_0/keymaps/sgurenkov/config.h b/keyboards/signum/3_0/keymaps/sgurenkov/config.h
index 5f8d0d02b88..7d164aa3a9b 100644
--- a/keyboards/signum/3_0/keymaps/sgurenkov/config.h
+++ b/keyboards/signum/3_0/keymaps/sgurenkov/config.h
@@ -29,9 +29,6 @@
// Auto Shift and Retro Shift (Auto Shift for Tap Hold).
#define AUTO_SHIFT_TIMEOUT TAPPING_TERM
-// Recommended for heavy chording.
-#define QMK_KEYS_PER_SCAN 4
-
// Mouse key speed and acceleration.
#undef MOUSEKEY_DELAY
#define MOUSEKEY_DELAY 0
diff --git a/keyboards/skme/zeno/config.h b/keyboards/skme/zeno/config.h
index a6404a8ff43..53aa1cd6213 100644
--- a/keyboards/skme/zeno/config.h
+++ b/keyboards/skme/zeno/config.h
@@ -34,6 +34,3 @@ along with this program. If not, see .
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
-/*Enable 1khz polling by default*/
-#define USB_POLLING_INTERVAL_MS 1
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/sofle/keymaps/killmaster/config.h b/keyboards/sofle/keymaps/killmaster/config.h
index 2e6abe84e32..9d1de12d5ac 100644
--- a/keyboards/sofle/keymaps/killmaster/config.h
+++ b/keyboards/sofle/keymaps/killmaster/config.h
@@ -61,4 +61,3 @@ for more options.
#define MEDIA_KEY_DELAY 2
#define USB_POLLING_INTERVAL_MS 1
-#define QMK_KEYS_PER_SCAN 12
diff --git a/keyboards/splitkb/kyria/keymaps/cwebster2/config.h b/keyboards/splitkb/kyria/keymaps/cwebster2/config.h
index 9a58f7751ae..59994e01fa7 100644
--- a/keyboards/splitkb/kyria/keymaps/cwebster2/config.h
+++ b/keyboards/splitkb/kyria/keymaps/cwebster2/config.h
@@ -47,8 +47,6 @@
#define COMBO_COUNT 5
#endif
-#define QMK_KEYS_PER_SCAN 4
-
#define EE_HANDS
//#define DEBUG_MATRIX_SCAN_RATE
diff --git a/keyboards/synthlabs/solo/config.h b/keyboards/synthlabs/solo/config.h
index affb70befc7..112d12d1eee 100644
--- a/keyboards/synthlabs/solo/config.h
+++ b/keyboards/synthlabs/solo/config.h
@@ -16,8 +16,6 @@
#define MATRIX_ROWS 3
#define MATRIX_COLS 7
-#define QMK_KEYS_PER_SCAN 17
-
/*
* Force NKRO
*
diff --git a/keyboards/xelus/dharma/keymaps/default/config.h b/keyboards/xelus/dharma/keymaps/default/config.h
deleted file mode 100644
index 5d972dd48c0..00000000000
--- a/keyboards/xelus/dharma/keymaps/default/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2021 Harrison Chan (Xelus)
- *
- * 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 2 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
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/dharma/keymaps/via/config.h b/keyboards/xelus/dharma/keymaps/via/config.h
deleted file mode 100644
index 5d972dd48c0..00000000000
--- a/keyboards/xelus/dharma/keymaps/via/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2021 Harrison Chan (Xelus)
- *
- * 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 2 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
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/kangaroo/keymaps/default/config.h b/keyboards/xelus/kangaroo/keymaps/default/config.h
deleted file mode 100644
index 5d972dd48c0..00000000000
--- a/keyboards/xelus/kangaroo/keymaps/default/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2021 Harrison Chan (Xelus)
- *
- * 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 2 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
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/kangaroo/keymaps/via/config.h b/keyboards/xelus/kangaroo/keymaps/via/config.h
deleted file mode 100644
index 5d972dd48c0..00000000000
--- a/keyboards/xelus/kangaroo/keymaps/via/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2021 Harrison Chan (Xelus)
- *
- * 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 2 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
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/la_plus/keymaps/default/config.h b/keyboards/xelus/la_plus/keymaps/default/config.h
deleted file mode 100644
index e559a154261..00000000000
--- a/keyboards/xelus/la_plus/keymaps/default/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright 2021 Harrison Chan (Xelus)
- *
- * 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 2 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
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/la_plus/keymaps/via/config.h b/keyboards/xelus/la_plus/keymaps/via/config.h
index 58c086282c0..43760bd2813 100644
--- a/keyboards/xelus/la_plus/keymaps/via/config.h
+++ b/keyboards/xelus/la_plus/keymaps/via/config.h
@@ -18,5 +18,3 @@
// Enable RGB Matrix
#define VIA_QMK_RGBLIGHT_ENABLE
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/pachi/mini_32u4/keymaps/default/config.h b/keyboards/xelus/pachi/mini_32u4/keymaps/default/config.h
deleted file mode 100644
index 5d972dd48c0..00000000000
--- a/keyboards/xelus/pachi/mini_32u4/keymaps/default/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2021 Harrison Chan (Xelus)
- *
- * 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 2 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
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/pachi/mini_32u4/keymaps/via/config.h b/keyboards/xelus/pachi/mini_32u4/keymaps/via/config.h
index fc3a2bd0b27..47bbf2bf816 100644
--- a/keyboards/xelus/pachi/mini_32u4/keymaps/via/config.h
+++ b/keyboards/xelus/pachi/mini_32u4/keymaps/via/config.h
@@ -18,5 +18,3 @@
// 3 layers or else it will not fit in EEPROM
#define DYNAMIC_KEYMAP_LAYER_COUNT 3
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/pachi/rev1/keymaps/default/config.h b/keyboards/xelus/pachi/rev1/keymaps/default/config.h
deleted file mode 100644
index 5d972dd48c0..00000000000
--- a/keyboards/xelus/pachi/rev1/keymaps/default/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2021 Harrison Chan (Xelus)
- *
- * 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 2 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
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/pachi/rev1/keymaps/via/config.h b/keyboards/xelus/pachi/rev1/keymaps/via/config.h
index fc3a2bd0b27..47bbf2bf816 100644
--- a/keyboards/xelus/pachi/rev1/keymaps/via/config.h
+++ b/keyboards/xelus/pachi/rev1/keymaps/via/config.h
@@ -18,5 +18,3 @@
// 3 layers or else it will not fit in EEPROM
#define DYNAMIC_KEYMAP_LAYER_COUNT 3
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/pachi/rgb/keymaps/default/config.h b/keyboards/xelus/pachi/rgb/keymaps/default/config.h
deleted file mode 100644
index 5d972dd48c0..00000000000
--- a/keyboards/xelus/pachi/rgb/keymaps/default/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2021 Harrison Chan (Xelus)
- *
- * 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 2 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
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/pachi/rgb/keymaps/via/config.h b/keyboards/xelus/pachi/rgb/keymaps/via/config.h
index 1213e7a8f2f..0e34ad2c1ac 100644
--- a/keyboards/xelus/pachi/rgb/keymaps/via/config.h
+++ b/keyboards/xelus/pachi/rgb/keymaps/via/config.h
@@ -21,5 +21,3 @@
// Enable RGB Matrix
#define VIA_QMK_RGBLIGHT_ENABLE
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/rs60/keymaps/default/config.h b/keyboards/xelus/rs60/keymaps/default/config.h
deleted file mode 100644
index 5d972dd48c0..00000000000
--- a/keyboards/xelus/rs60/keymaps/default/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2021 Harrison Chan (Xelus)
- *
- * 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 2 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
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/rs60/keymaps/via/config.h b/keyboards/xelus/rs60/keymaps/via/config.h
deleted file mode 100644
index 5d972dd48c0..00000000000
--- a/keyboards/xelus/rs60/keymaps/via/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2021 Harrison Chan (Xelus)
- *
- * 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 2 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
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/valor/rev2/keymaps/default/config.h b/keyboards/xelus/valor/rev2/keymaps/default/config.h
deleted file mode 100644
index 5d972dd48c0..00000000000
--- a/keyboards/xelus/valor/rev2/keymaps/default/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2021 Harrison Chan (Xelus)
- *
- * 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 2 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
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/valor/rev2/keymaps/via/config.h b/keyboards/xelus/valor/rev2/keymaps/via/config.h
index 490964f2727..e7fb31cb23e 100644
--- a/keyboards/xelus/valor/rev2/keymaps/via/config.h
+++ b/keyboards/xelus/valor/rev2/keymaps/via/config.h
@@ -20,5 +20,3 @@
// More layers
#define DYNAMIC_KEYMAP_LAYER_COUNT 8
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/valor_frl_tkl/keymaps/default/config.h b/keyboards/xelus/valor_frl_tkl/keymaps/default/config.h
deleted file mode 100644
index 7b8de5510e5..00000000000
--- a/keyboards/xelus/valor_frl_tkl/keymaps/default/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2020 Harrison Chan (Xelus)
- *
- * 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 2 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
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/valor_frl_tkl/keymaps/via/config.h b/keyboards/xelus/valor_frl_tkl/keymaps/via/config.h
deleted file mode 100644
index 7b8de5510e5..00000000000
--- a/keyboards/xelus/valor_frl_tkl/keymaps/via/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2020 Harrison Chan (Xelus)
- *
- * 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 2 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
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/xs60/keymaps/default/config.h b/keyboards/xelus/xs60/keymaps/default/config.h
deleted file mode 100644
index 5d972dd48c0..00000000000
--- a/keyboards/xelus/xs60/keymaps/default/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2021 Harrison Chan (Xelus)
- *
- * 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 2 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
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xelus/xs60/keymaps/via/config.h b/keyboards/xelus/xs60/keymaps/via/config.h
index b608adcfc4e..8c0ed0c6e34 100644
--- a/keyboards/xelus/xs60/keymaps/via/config.h
+++ b/keyboards/xelus/xs60/keymaps/via/config.h
@@ -17,5 +17,3 @@
// More layers
#define DYNAMIC_KEYMAP_LAYER_COUNT 8
-
-#define QMK_KEYS_PER_SCAN 4
diff --git a/keyboards/xiudi/xd75/keymaps/tdl-jturner/config.h b/keyboards/xiudi/xd75/keymaps/tdl-jturner/config.h
index 596aaff6659..210c4441c36 100644
--- a/keyboards/xiudi/xd75/keymaps/tdl-jturner/config.h
+++ b/keyboards/xiudi/xd75/keymaps/tdl-jturner/config.h
@@ -24,7 +24,6 @@
//#define TAPPING_TERM 200
#define TAPPING_TOGGLE 2
//#define PERMISSIVE_HOLD
-//#define QMK_KEYS_PER_SCAN 4
#define FORCE_NKRO
#define MOUSEKEY_INTERVAL 16
diff --git a/layouts/community/65_ansi_blocker/brandonschlack/config.h b/layouts/community/65_ansi_blocker/brandonschlack/config.h
index ea8ca619011..d7687315ed9 100644
--- a/layouts/community/65_ansi_blocker/brandonschlack/config.h
+++ b/layouts/community/65_ansi_blocker/brandonschlack/config.h
@@ -54,8 +54,6 @@
# undef ENABLE_RGB_MATRIX_SOLID_SPLASH
# undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-# define QMK_KEYS_PER_SCAN 4
-
# define USB_LED_CAPS_LOCK_SCANCODE 30
#endif
diff --git a/layouts/community/65_ansi_blocker_split_bs/brandonschlack-split/config.h b/layouts/community/65_ansi_blocker_split_bs/brandonschlack-split/config.h
index fe3dcd41c2b..38b827ba326 100644
--- a/layouts/community/65_ansi_blocker_split_bs/brandonschlack-split/config.h
+++ b/layouts/community/65_ansi_blocker_split_bs/brandonschlack-split/config.h
@@ -54,8 +54,6 @@
# undef ENABLE_RGB_MATRIX_SOLID_SPLASH
# undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-# define QMK_KEYS_PER_SCAN 4
-
# define USB_LED_CAPS_LOCK_SCANCODE 30
#endif
diff --git a/quantum/keyboard.c b/quantum/keyboard.c
index 2364e3167b1..1c62a43d9d7 100644
--- a/quantum/keyboard.c
+++ b/quantum/keyboard.c
@@ -212,6 +212,12 @@ static inline bool has_ghost_in_row(uint8_t row, matrix_row_t rowdata) {
return false;
}
+#else
+
+static inline bool has_ghost_in_row(uint8_t row, matrix_row_t rowdata) {
+ return false;
+}
+
#endif
/** \brief matrix_setup
@@ -426,64 +432,74 @@ void switch_events(uint8_t row, uint8_t col, bool pressed) {
#endif
}
-/** \brief Perform scan of keyboard matrix
- *
- * Any detected changes in state are sent out as part of the processing
+/**
+ * @brief Generates a tick event at a maximum rate of 1KHz that drives the
+ * internal QMK state machine.
*/
-bool matrix_scan_task(void) {
- static matrix_row_t matrix_prev[MATRIX_ROWS];
- matrix_row_t matrix_row = 0;
- matrix_row_t matrix_change = 0;
-#ifdef QMK_KEYS_PER_SCAN
- uint8_t keys_processed = 0;
-#endif
-
- uint8_t matrix_changed = matrix_scan();
- if (matrix_changed) last_matrix_activity_trigger();
-
- for (uint8_t r = 0; r < MATRIX_ROWS; r++) {
- matrix_row = matrix_get_row(r);
- matrix_change = matrix_row ^ matrix_prev[r];
- if (matrix_change) {
-#ifdef MATRIX_HAS_GHOST
- if (has_ghost_in_row(r, matrix_row)) {
- continue;
- }
-#endif
- if (debug_matrix) matrix_print();
- matrix_row_t col_mask = 1;
- for (uint8_t c = 0; c < MATRIX_COLS; c++, col_mask <<= 1) {
- if (matrix_change & col_mask) {
- if (should_process_keypress()) {
- action_exec((keyevent_t){
- .key = (keypos_t){.row = r, .col = c}, .pressed = (matrix_row & col_mask), .time = (timer_read() | 1) /* time should not be 0 */
- });
- }
- // record a processed key
- matrix_prev[r] ^= col_mask;
-
- switch_events(r, c, (matrix_row & col_mask));
-
-#ifdef QMK_KEYS_PER_SCAN
- // only jump out if we have processed "enough" keys.
- if (++keys_processed >= QMK_KEYS_PER_SCAN)
-#endif
- // process a key per task call
- goto MATRIX_LOOP_END;
- }
- }
- }
- }
- // call with pseudo tick event when no real key event.
-#ifdef QMK_KEYS_PER_SCAN
- // we can get here with some keys processed now.
- if (!keys_processed)
-#endif
+static inline void generate_tick_event(void) {
+ static uint16_t last_tick = 0;
+ const uint16_t now = timer_read();
+ if (TIMER_DIFF_16(now, last_tick) != 0) {
action_exec(TICK_EVENT);
+ last_tick = now;
+ }
+}
-MATRIX_LOOP_END:
+/**
+ * @brief This task scans the keyboards matrix and processes any key presses
+ * that occur.
+ *
+ * @return true Matrix did change
+ * @return false Matrix didn't change
+ */
+static bool matrix_task(void) {
+ static matrix_row_t matrix_previous[MATRIX_ROWS];
+
+ matrix_scan();
+
+ bool matrix_changed = false;
+ for (uint8_t row = 0; row < MATRIX_ROWS && !matrix_changed; row++) {
+ matrix_changed |= matrix_previous[row] ^ matrix_get_row(row);
+ }
matrix_scan_perf_task();
+
+ // Short-circuit the complete matrix processing if it is not necessary
+ if (!matrix_changed) {
+ generate_tick_event();
+ return matrix_changed;
+ }
+
+ if (debug_config.matrix) {
+ matrix_print();
+ }
+
+ const bool process_keypress = should_process_keypress();
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ const matrix_row_t current_row = matrix_get_row(row);
+ const matrix_row_t row_changes = current_row ^ matrix_previous[row];
+
+ if (!row_changes || has_ghost_in_row(row, current_row)) {
+ continue;
+ }
+
+ matrix_row_t col_mask = 1;
+ for (uint8_t col = 0; col < MATRIX_COLS; col++, col_mask <<= 1) {
+ if (row_changes & col_mask) {
+ const bool key_pressed = current_row & col_mask;
+
+ if (process_keypress) {
+ action_exec(MAKE_KEYEVENT(row, col, key_pressed));
+ }
+
+ switch_events(row, col, key_pressed);
+ }
+ }
+
+ matrix_previous[row] = current_row;
+ }
+
return matrix_changed;
}
@@ -562,20 +578,12 @@ void quantum_task(void) {
#endif
}
-/** \brief Keyboard task: Do keyboard routine jobs
- *
- * Do routine keyboard jobs:
- *
- * * scan matrix
- * * handle mouse movements
- * * handle midi commands
- * * light LEDs
- *
- * This is repeatedly called as fast as possible.
- */
+/** \brief Main task that is repeatedly called as fast as possible. */
void keyboard_task(void) {
- bool matrix_changed = matrix_scan_task();
- (void)matrix_changed;
+ const bool matrix_changed = matrix_task();
+ if (matrix_changed) {
+ last_matrix_activity_trigger();
+ }
quantum_task();
@@ -597,8 +605,10 @@ void keyboard_task(void) {
#endif
#ifdef ENCODER_ENABLE
- bool encoders_changed = encoder_read();
- if (encoders_changed) last_encoder_activity_trigger();
+ const bool encoders_changed = encoder_read();
+ if (encoders_changed) {
+ last_encoder_activity_trigger();
+ }
#endif
#ifdef OLED_ENABLE
diff --git a/quantum/keyboard.h b/quantum/keyboard.h
index fe0736a515d..86ce65aac10 100644
--- a/quantum/keyboard.h
+++ b/quantum/keyboard.h
@@ -71,9 +71,15 @@ static inline bool IS_RELEASED(keyevent_t event) {
/* Common keyevent object factory */
#define MAKE_KEYPOS(row_num, col_num) ((keypos_t){.row = (row_num), .col = (col_num)})
+
+/**
+ * @brief Constructs a key event for a pressed or released key.
+ */
#define MAKE_KEYEVENT(row_num, col_num, press) ((keyevent_t){.key = MAKE_KEYPOS((row_num), (col_num)), .pressed = (press), .time = (timer_read() | 1)})
-/* Tick event */
+/**
+ * @brief Constructs a internal tick event that is used to drive the internal QMK state machine.
+ */
#define TICK_EVENT MAKE_KEYEVENT(KEYLOC_TICK, KEYLOC_TICK, false)
#ifdef ENCODER_MAP_ENABLE
diff --git a/tests/basic/test_keypress.cpp b/tests/basic/test_keypress.cpp
index bb68ced5575..6d5b502a005 100644
--- a/tests/basic/test_keypress.cpp
+++ b/tests/basic/test_keypress.cpp
@@ -64,11 +64,7 @@ TEST_F(KeyPress, CorrectKeysAreReportedWhenTwoKeysArePressed) {
key_b.press();
key_c.press();
- // Note that QMK only processes one key at a time
- // See issue #1476 for more information
EXPECT_REPORT(driver, (key_b.report_code));
- keyboard_task();
-
EXPECT_REPORT(driver, (key_b.report_code, key_c.report_code));
keyboard_task();
@@ -76,8 +72,6 @@ TEST_F(KeyPress, CorrectKeysAreReportedWhenTwoKeysArePressed) {
key_c.release();
// Note that the first key released is the first one in the matrix order
EXPECT_REPORT(driver, (key_c.report_code));
- keyboard_task();
-
EXPECT_EMPTY_REPORT(driver);
keyboard_task();
}
@@ -92,10 +86,7 @@ TEST_F(KeyPress, LeftShiftIsReportedCorrectly) {
key_lsft.press();
key_a.press();
- // Unfortunately modifiers are also processed in the wrong order
- // See issue #1476 for more information
EXPECT_REPORT(driver, (key_a.report_code));
- keyboard_task();
EXPECT_REPORT(driver, (key_a.report_code, key_lsft.report_code));
keyboard_task();
@@ -118,11 +109,7 @@ TEST_F(KeyPress, PressLeftShiftAndControl) {
key_lsft.press();
key_lctrl.press();
- // Unfortunately modifiers are also processed in the wrong order
- // See issue #1476 for more information
EXPECT_REPORT(driver, (key_lsft.report_code));
- keyboard_task();
-
EXPECT_REPORT(driver, (key_lsft.report_code, key_lctrl.report_code));
keyboard_task();
@@ -130,8 +117,6 @@ TEST_F(KeyPress, PressLeftShiftAndControl) {
key_lctrl.release();
EXPECT_REPORT(driver, (key_lctrl.report_code));
- keyboard_task();
-
EXPECT_EMPTY_REPORT(driver);
keyboard_task();
}
@@ -145,20 +130,13 @@ TEST_F(KeyPress, LeftAndRightShiftCanBePressedAtTheSameTime) {
key_lsft.press();
key_rsft.press();
- // Unfortunately modifiers are also processed in the wrong order
- // See issue #1476 for more information
EXPECT_REPORT(driver, (key_lsft.report_code));
- keyboard_task();
-
EXPECT_REPORT(driver, (key_lsft.report_code, key_rsft.report_code));
keyboard_task();
key_lsft.release();
key_rsft.release();
-
EXPECT_REPORT(driver, (key_rsft.report_code));
- keyboard_task();
-
EXPECT_EMPTY_REPORT(driver);
keyboard_task();
}
diff --git a/tests/tap_dance/test_examples.cpp b/tests/tap_dance/test_examples.cpp
index e67e6cb9076..6dabc45513a 100644
--- a/tests/tap_dance/test_examples.cpp
+++ b/tests/tap_dance/test_examples.cpp
@@ -92,10 +92,9 @@ TEST_F(TapDance, DoubleTapWithMod) {
key_shift.release();
key_esc_caps.press();
EXPECT_REPORT(driver, (KC_LSFT, KC_CAPS));
+ EXPECT_REPORT(driver, (KC_CAPS));
run_one_scan_loop();
key_esc_caps.release();
- EXPECT_REPORT(driver, (KC_LSFT));
- run_one_scan_loop();
EXPECT_EMPTY_REPORT(driver);
run_one_scan_loop();
}
diff --git a/users/curry/config.h b/users/curry/config.h
index 3301ebe533c..0c96293bd59 100644
--- a/users/curry/config.h
+++ b/users/curry/config.h
@@ -65,10 +65,6 @@
# define ONESHOT_TIMEOUT 3000
#endif // !ONESHOT_TIMEOUT
-#if !defined(QMK_KEYS_PER_SCAN)
-# define QMK_KEYS_PER_SCAN 4
-#endif // !QMK_KEYS_PER_SCAN
-
#define IGNORE_MOD_TAP_INTERRUPT
#undef PERMISSIVE_HOLD
diff --git a/users/drashna/post_config.h b/users/drashna/post_config.h
index 2d5e6438d6f..85c028076e5 100644
--- a/users/drashna/post_config.h
+++ b/users/drashna/post_config.h
@@ -37,10 +37,6 @@
# define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_REST_MODE
#endif
-#ifndef QMK_KEYS_PER_SCAN
-# define QMK_KEYS_PER_SCAN 8
-#endif
-
#ifdef MOUSEKEY_ENABLE
// mouse movement config
# ifdef MK_3_SPEED
diff --git a/users/ishtob/config.h b/users/ishtob/config.h
index 6c07d2f2fd7..695077528cf 100755
--- a/users/ishtob/config.h
+++ b/users/ishtob/config.h
@@ -16,7 +16,6 @@
//#define LEADER_TIMEOUT 300
//#define BACKLIGHT_BREATHING
//#define PERMISSIVE_HOLD
-// #define QMK_KEYS_PER_SCAN 4
//audio clicky
//#define AUDIO_CLICKY
diff --git a/users/issmirnov/config.h b/users/issmirnov/config.h
index 664ebfe8a38..5fe78f7a53e 100644
--- a/users/issmirnov/config.h
+++ b/users/issmirnov/config.h
@@ -1,8 +1,5 @@
#pragma once
-// Allows sending more than one key per scan. Useful for chords.
-#define QMK_KEYS_PER_SCAN 4
-
// how long before a tap becomes a hold
#undef TAPPING_TERM
#define TAPPING_TERM 100
diff --git a/users/kuchosauronad0/config.h b/users/kuchosauronad0/config.h
index 58542dc1840..8502031f020 100644
--- a/users/kuchosauronad0/config.h
+++ b/users/kuchosauronad0/config.h
@@ -41,10 +41,6 @@
# define ONESHOT_TIMEOUT 3000
#endif// !ONESHOT_TIMEOUT
-#ifndef QMK_KEYS_PER_SCAN
-# define QMK_KEYS_PER_SCAN 4
-#endif // !QMK_KEYS_PER_SCAN
-
#if defined(LEADER_ENABLE)
# define LEADER_PER_KEY_TIMING
# define LEADER_TIMEOUT 250
diff --git a/users/miles2go/config.h b/users/miles2go/config.h
index a704df4b555..2a1d6504d65 100644
--- a/users/miles2go/config.h
+++ b/users/miles2go/config.h
@@ -6,10 +6,6 @@
#define RGBLIGHT_EFFECT_BREATHING
#endif // RGBLIGHT_ENABLE
-#ifndef QMK_KEYS_PER_SCAN
-#define QMK_KEYS_PER_SCAN 4
-#endif // !QMK_KEYS_PER_SCAN
-
#undef FORCE_NKRO
#ifndef TAPPING_TOGGLE
diff --git a/users/yet-another-developer/config.h b/users/yet-another-developer/config.h
index d46d487fe32..6d1bf83f0b0 100644
--- a/users/yet-another-developer/config.h
+++ b/users/yet-another-developer/config.h
@@ -11,10 +11,6 @@
#define ONESHOT_TIMEOUT 2000
#endif // !ONESHOT_TIMEOUT
-#ifndef QMK_KEYS_PER_SCAN
- #define QMK_KEYS_PER_SCAN 4
-#endif // !QMK_KEYS_PER_SCAN
-
#if defined(LEADER_ENABLE)
#define LEADER_PER_KEY_TIMING
#define LEADER_TIMEOUT 250
diff --git a/users/zer09/config.h b/users/zer09/config.h
index c5ab32f8d43..0324aaa7d35 100644
--- a/users/zer09/config.h
+++ b/users/zer09/config.h
@@ -1,10 +1,6 @@
#ifndef USERSPACE_CONFIG_H
#define USERSPACE_CONFIG_H
-#ifndef QMK_KEYS_PER_SCAN
-#define QMK_KEYS_PER_SCAN 4
-#endif // !QMK_KEYS_PER_SCAN
-
// this makes it possible to do rolling combos (zx) with keys that
// convert to other keys on hold (z becomes ctrl when you hold it,
// and when this option isn't enabled, z rapidly followed by x