# QMK Breaking Changes - 2022 February 26 Changelog | QMK Firmware
Documentation for QMK Firmware

Skip to content

# QMK Breaking Changes - 2022 February 26 Changelog ​

## Notable Features ​

### Default USB Polling rate now 1kHz (#15352) ​

The default USB Polling rate has been aligned across supported platforms to now be 1ms/1kHz.

Something something Lets go gamers!

### Split support for pointing devices (#15304) ​

Pointing devices can now be shared across a split keyboard with support for a single pointing device or a pointing device on each side.

See the Pointing Device documentation for further configuration options.

## Changes Requiring User Action ​

### Legacy macro and action_function system removed (#16025) ​

The long time deprecated `MACRO()` and `action_get_macro` methods have been removed. Where possible, existing usages have been migrated over to core Macros.

### Create a build error if no bootloader is specified (#16181) ​

Bootloader configuration is no longer assumed. Keyboards must now set either:

- `BOOTLOADER` within `rules.mk`
- `bootloader` within `info.json`

### Rename `AdafruitBLE` to `BluefruitLE` (#16127) ​

In preparation of future bluetooth work, the `AdafruitBLE` integration has been renamed to allow potential for any other Adafruit BLE products.

### Updated Keyboard Codebases ​

The following keyboards have had their source moved within QMK:

Old Keyboard Name | New Keyboard Name
--- | ---
6ball | maple_computing/6ball
7skb | salicylic_acid3/7skb
7splus | salicylic_acid3/7splus
acr60 | mechkeys/acr60
adalyn | tominabox1/adalyn
ajisai74 | salicylic_acid3/ajisai74
aleth42 | 25keys/aleth42
alicia_cook | ibnuda/alicia_cook
allison_numpad | prototypist/allison_numpad
allison | prototypist/allison
alu84 | mechkeys/alu84
angel17 | kakunpc/angel17
angel64/alpha | kakunpc/angel64/alpha
angel64/rev1 | kakunpc/angel64/rev1
arch_36 | obosob/arch_36
bakeneko60 | kkatano/bakeneko60
bakeneko65/rev2 | kkatano/bakeneko65/rev2
bakeneko65/rev3 | kkatano/bakeneko65/rev3
bakeneko80 | kkatano/bakeneko80
barleycorn | yiancardesigns/barleycorn
bat43/rev1 | dailycraft/bat43/rev1
bat43/rev2 | dailycraft/bat43/rev2
bigseries/1key | woodkeys/bigseries/1key
bigseries/2key | woodkeys/bigseries/2key
bigseries/3key | woodkeys/bigseries/3key
bigseries/4key | woodkeys/bigseries/4key
bkf | drhigsby/bkf
business_card/alpha | kakunpc/business_card/alpha
business_card/beta | kakunpc/business_card/beta
butterstick | gboards/butterstick
c39 | maple_computing/c39
cassette42 | 25keys/cassette42
chidori | kagizaraya/chidori
chili | ydkb/chili
chimera_ergo | glenpickle/chimera_ergo
chimera_ls | glenpickle/chimera_ls
chimera_ortho | glenpickle/chimera_ortho
chimera_ortho_plus | glenpickle/chimera_ortho_plus
choco60 | recompile_keys/choco60
choc_taro | kakunpc/choc_taro
christmas_tree | maple_computing/christmas_tree
claw44/rev1 | dailycraft/claw44/rev1
cocoa40 | recompile_keys/cocoa40
comet46 | satt/comet46
cu24 | capsunlocked/cu24
cu75 | capsunlocked/cu75
cu80 | capsunlocked/cu80/v1
delilah | rainkeebs/delilah
diverge3 | unikeyboard/diverge3
divergetm2 | unikeyboard/divergetm2
dozen0 | yynmt/dozen0
dubba175 | drhigsby/dubba175
eggman | qpockets/eggman
ergo42 | biacco42/ergo42
ergoarrows | salicylic_acid3/ergoarrows
ergodash/mini | omkbd/ergodash/mini
ergodash/rev1 | omkbd/ergodash/rev1
ergodox_infinity | input_club/ergodox_infinity
ergotaco | gboards/ergotaco
espectro | mechkeys/espectro
felix | unikeyboard/felix
four_banger | bpiphany/four_banger
freyr | hnahkb/freyr
geminate60 | weirdo/geminate60
georgi | gboards/georgi
gergo | gboards/gergo
getta25 | salicylic_acid3/getta25
gingham | yiancardesigns/gingham
gurindam | ibnuda/gurindam
halberd | kagizaraya/halberd
hecomi/alpha | takashiski/hecomi/alpha
hid_liber | bpiphany/hid_liber
id67/default_rgb | idobao/id67/default_rgb
id67/rgb | idobao/id67/rgb
id80 | idobao/id80/v1
id87 | idobao/id87/v1
idobo | idobao/id75/v1
infinity60 | input_club/infinity60
ivy/rev1 | maple_computing/ivy/rev1
jisplit89 | salicylic_acid3/jisplit89
jnao | maple_computing/jnao
just60 | ydkb/just60
kagamidget | yynmt/kagamidget
kelowna/rgb64 | weirdo/kelowna/rgb64
kprepublic/bm65hsrgb_iso | kprepublic/bm65hsrgb_iso/rev1
kprepublic/bm68hsrgb | kprepublic/bm68hsrgb/rev1
k_type | input_club/k_type
latin17rgb | latincompass/latin17rgb
latin47ble | latincompass/latin47ble
latin60rgb | latincompass/latin60rgb
latin64ble | latincompass/latin64ble
latin6rgb | latincompass/latin6rgb
latinpadble | latincompass/latinpadble
latinpad | latincompass/latinpad
launchpad/rev1 | maple_computing/launchpad/rev1
lck75 | lyso1/lck75
le_chiffre | tominabox1/le_chiffre
lefishe | lyso1/lefishe
lets_split_eh/eh | maple_computing/lets_split_eh/eh
ls_60 | weirdo/ls_60
m3n3van | matthewdias/m3n3van
mechmini/v1 | mechkeys/mechmini/v1
mechmini/v2 | mechkeys/mechmini/v2
meira | woodkeys/meira
meishi2 | biacco42/meishi2
meishi | biacco42/meishi
minidox/rev1 | maple_computing/minidox/rev1
minim | matthewdias/minim
mio | recompile_keys/mio
model_v | matthewdias/model_v
montex | idobao/montex/v1
nafuda | salicylic_acid3/nafuda
naiping/np64 | weirdo/naiping/np64
naiping/nphhkb | weirdo/naiping/nphhkb
naiping/npminila | weirdo/naiping/npminila
naked48 | salicylic_acid3/naked48
naked60 | salicylic_acid3/naked60
naked64 | salicylic_acid3/naked64
namecard2x4 | takashiski/namecard2x4
nebula12 | spaceholdings/nebula12
nebula68b | spaceholdings/nebula68b
nebula68 | spaceholdings/nebula68
niu_mini | kbdfans/niu_mini
nk1 | novelkeys/nk1
nk65 | novelkeys/nk65
nk87 | novelkeys/nk87
nknl7en | salicylic_acid3/nknl7en
nknl7jp | salicylic_acid3/nknl7jp
nomu30 | recompile_keys/nomu30
novelpad | novelkeys/novelpad
ogurec | drhigsby/ogurec
otaku_split/rev0 | takashiski/otaku_split/rev0
otaku_split/rev1 | takashiski/otaku_split/rev1
owl8 | dailycraft/owl8
packrat | drhigsby/packrat
pistachio_mp | rate/pistachio_mp
pistachio_pro | rate/pistachio_pro
pistachio | rate/pistachio
plexus75 | checkerboards/plexus75
pursuit40 | checkerboards/pursuit40
qaz | tominabox1/qaz
quark | checkerboards/quark
rabbit_capture_plan | kakunpc/rabbit_capture_plan
rainkeeb | rainkeebs/rainkeeb
reviung33 | reviung/reviung33
reviung34 | reviung/reviung34
reviung39 | reviung/reviung39
reviung41 | reviung/reviung41
reviung53 | reviung/reviung53
reviung5 | reviung/reviung5
reviung61 | reviung/reviung61
runner3680/3x6 | omkbd/runner3680/3x6
runner3680/3x7 | omkbd/runner3680/3x7
runner3680/3x8 | omkbd/runner3680/3x8
runner3680/4x6 | omkbd/runner3680/4x6
runner3680/4x7 | omkbd/runner3680/4x7
runner3680/4x8 | omkbd/runner3680/4x8
runner3680/5x6_5x8 | omkbd/runner3680/5x6_5x8
runner3680/5x6 | omkbd/runner3680/5x6
runner3680/5x7 | omkbd/runner3680/5x7
runner3680/5x8 | omkbd/runner3680/5x8
scarletbandana | woodkeys/scarletbandana
scythe | kagizaraya/scythe
seigaiha | yiancardesigns/seigaiha
setta21 | salicylic_acid3/setta21
space_space/rev1 | qpockets/space_space/rev1
space_space/rev2 | qpockets/space_space/rev2
spiderisland/winry25tc | winry/winry25tc
splitreus62 | nacly/splitreus62
squiggle/rev1 | ibnuda/squiggle/rev1
standaside | edi/standaside
steal_this_keyboard | obosob/steal_this_keyboard
stella | hnahkb/stella
suihankey/alpha | kakunpc/suihankey/alpha
suihankey/rev1 | kakunpc/suihankey/rev1
suihankey/split | kakunpc/suihankey/split
thedogkeyboard | kakunpc/thedogkeyboard
the_ruler | maple_computing/the_ruler
tiger910 | weirdo/tiger910
treadstone32 | marksard/treadstone32
treadstone48/rev1 | marksard/treadstone48/rev1
treadstone48/rev2 | marksard/treadstone48/rev2
txuu | matthewdias/txuu
ua62 | nacly/ua62
underscore33/rev1 | tominabox1/underscore33/rev1
underscore33/rev2 | tominabox1/underscore33/rev2
vn66 | hnahkb/vn66
wallaby | kkatano/wallaby
wanten | qpockets/wanten
whitefox | input_club/whitefox
wings42/rev1 | dailycraft/wings42/rev1
wings42/rev1_extkeys | dailycraft/wings42/rev1_extkeys
wings42/rev2 | dailycraft/wings42/rev2
yasui | rainkeebs/yasui
yd60mq | ymdk/yd60mq
yd68 | ydkb/yd68
ymd75 | ymdk/ymd75
ymd96 | ymdk/ymd96
ymdk_np21 | ymdk/np21
yurei | kkatano/yurei
zinc | 25keys/zinc
zinc/rev1 | 25keys/zinc/rev1
zinc/reva | 25keys/zinc/reva

## Notable core changes ​

### New MCU Support ​

Building on previous cycles, QMK firmware picked up support for a couple extra MCU variants:

- STM32L432
- STM32L442

### New Drivers ​

QMK now has core-supplied support for the following device peripherals:

#### LED ​

- IS31FL3742A
- IS31FL3743A
- IS31FL3745
- IS31FL3746A

#### GPIO ​

- SN74x138
- mcp23018

## Full changelist ​

Core:

- Initial pass at data driven new-keyboard subcommand (#12795)
- Don't send keyboard reports that propagate no changes to the host (#14065)
- Custom matrix lite support for split keyboards (#14674)
- Add sym_defer_pr debouncer type (#14948)
- Add RGB matrix & LED Matrix support for IS31FL3742A, IS31FL3743A, IS31FL3745, IS31FL3746A (#14989)
- New combo configuration options (#15083)
- IS31FL3733 driver for LED Matrix (#15088)
- Add open-drain GPIO support. (#15282)
- Make (un)register code functions weak (#15285)
- Split support for pointing devices. (#15304)
- Added cancel_key_lock function (#15321)
- Remove matrix_is_modified() and debounce_is_active() (#15349)
- Change default USB Polling rate to 1kHz (#15352)
- Implement MAGIC_TOGGLE_CONTROL_CAPSLOCK (#15368)
- Tidy up existing i2c_master implementations (#15376)
- Generalize Unicode defines (#15409)
- Added external spi flash driver. (#15419)
- Remove Deprecated USB Polling comment from vusb.c (#15420)
- Expand rotational range for PMW3360 Optical Sensor (#15431)
- ChibiOS SVN mirror script update (#15435)
- Refactor `bootloader_jump()` implementations (#15450)
- added missing audio_off_user() callback (#15457)
- Migrate serial_uart usages to UART driver (#15479)
- Migrate RN42 to UART driver and refactor (#15492)
- pwm3360 driver cleanup and diff reduction to adns9800 (#15559)
- Advanced deferred_exec for core-side code. (#15579)
- Adjust tap_code16 to account for TAP_HOLD_CAPS_DELAY (#15635)
- Slight tidy up of keyboard task loop (#15725)
- Unify the key up/down behaviour of RGB keycodes (#15730)
- Add PMW3389 optical sensor Support (Updated) (#15740)
- ChibiOS: add support for HID Programmable Buttons (#15787)
- ChibiOS: shorten USB disconnect state on boot to 50ms (#15805)
- Add init function to clear previous matrix effect (#15815)
- Optimize initialization of PMW3360 Sensor (#15821)
- Add Pixel Flow RGB matrix effect (#15829)
- PMW3389 Revert Firmware load during Initilization (#15859)
- Combo `TAP_CODE_DELAY` and `clear_weak_mods` (#15866)
- Relocate matrix_scan_quantum tasks (#15882)
- Adjust mouse key defaults (#15883)
- RGB Matrix: Reload from EEPROM (#15923)
- Enable a default task throttle for split pointing. (#15925)
- Move mcp23018 driver to core (#15944)
- Relocate matrix_init_quantum content (#15953)
- Align location of some host led logic (#15954)
- Rename some Quantum keycodes (#15968)
- Migrate more makefile utilities to builddefs sub-directory (#16002)
- Various Makefile optimisations (#16015)
- Add support for STM32L432, STM32L442. (#16016)
- EEPROM refactor: remove `eeprom_teensy.c` by default, use transient instead (#16020)
- Deprecate Split Transaction status field (#16023)
- Rip out old macro and action_function system (#16025)
- Add a script that simplifies running commands under docker. (#16028)
- Add support for Q-series on the ckled2001 LED driver (#16051)
- Remove unused suspend_idle (#16063)
- Initial migration of suspend callbacks (#16067)
- Add layout change callbacks to VIA (#16087)
- Rename `AdafruitBLE` to `BluefruitLE` (#16127)
- Update outputselect to use platform connected state API (#16185)
- Remove default pointing device driver. (#16190)
- Add SN74x138 demultiplexer driver (#16217)
- Standardise error output. (#16220)
- Followup to #16220, more test error output. (#16221)
- Misc size regression script improvements. (#16268)
- Align existing pca9555 driver to better match mcp23018 API (#16277)
- Size checks print out target firmware file instead (#16290)

CLI:

- `develop` changelog generator: use the PR title instead (#15537)
- `develop` changelog generator: skip code formatting in listing (#16215)

Keyboards:

- Durgod: Increase scan rate by using wait_us timer (#14091)
- Add another GMMK Pro ANSI Keymap with custom RGB. (#14243)
- Parse USB device version BCD (#14580)
- Add vitoni keymap for GMMK Pro (ISO) (#15006)
- Move bm65hsrgb_iso and bm68hsrgb to rev1/ to prepare for updates to the boards (#15132)
- Convert ergoinu to SPLIT_KEYBOARD (#15305)
- Convert not_so_minidox to SPLIT_KEYBOARD (#15306)
- Added new handwired keyboard Wakizashi 40 (#15336)
- Convert ai03/orbit to SPLIT_KEYBOARD (#15340)
- Remove manual enable of LTO within user keymaps (#15378)
- Move to organization folder (#15481)
- Convert some more boards to Matrix Lite (#15489)
- Organize Reviung boards into a directory (#15636)
- move winry25tc to winry/ (#15637)
- Rename ymdk_np21 to np21 + move to ymdk vendor folder (#15641)
- move ymd96 to ymdk vendor folder (#15643)
- move ymd75 to ymdk vendor folder (#15645)
- move yd60mq to ymdk vendor folder (#15647)
- rename idobo to idobao/id75, move to vendor folder (#15661)
- move ID67 to IDOBAO vendor folder (#15662)
- move ID80 to IDOBAO vendor folder (#15665)
- move ID87 to IDOBAO vendor folder (#15667)
- move montex to IDOBAO vendor folder (#15668)
- move @yangdigi 's keyboards to a YDKB folder (#15681)
- move @kkatano 's keyboards to kkatano user folder (#15684)
- Sol 3 Keyboard from RGBKB (#15687)
- move cu24, cu75, cu80/v1 into capsunlocked folder (#15758)
- move mechkeys keyboards into the mechkeys/ vendor folder (#15760)
- move @lyso1 's boards into lyso1/ (#15767)
- move prototypist boards into vendor folder (#15780)
- move @yiancar 's boards into yiancardesigns/ (#15781)
- move novelkeys keyboards to vendor folder (#15783)
- move @weirdo-f 's keyboards into weirdo/ (#15785)
- move @marksard 's boards to marksard/ (#15786)
- move input club keyboards into vendor folder (#15788)
- move @monksoffunk 's boards into 25keys/ (#15789)
- move @Salicylic-acid3 's keyboards to salicylic-acid3/ (#15791)
- move @rainkeebs 's keyboards to rainkeebs/ (#15797)
- move standaside into edi/ (#15798)
- move @obosob 's boards into obosob/ (#15799)
- move @nacly 's boards to nacly/ (#15801)
- move @kakunpc 's keebs into kakunpc/ (#15814)
- move @qpocket 's keyboards to qpocket/ (#15827)
- BDN9 keymap (#15924)
- move @matthewdias 's keebs into matthewdias/ (#15991)
- move id80 and id75 to v1 to accommodate for id75 v2 and id80 v3 (#15992)
- Remove `action_function()` from LFKeyboards boards (#15993)
- move @latincompass (aka @18438880 , @haierwangwei2005)'s boards to /latincompass (#16039)
- move g heavy industry boards into /gboards (#16040)
- move @drhigsby 's boards into /drhigsby (#16041)
- More keyboard rules.mk cleanups (#16044)
- move @That-Canadian 's boards into /maple_computing (#16050)
- move @takai 's keyboards into /recompile_keys (#16053)
- move @satt99 's comet46 to satt/ (#16059)
- move @ka2hiro 's boards into /kagizaraya (#16070)
- move @GlenPickle 's chimera* boards into a folder (#16072)
- move @yynmt 's boards into /yynmt (#16075)
- move @Biacco42 's keebs into /biacco42 (#16080)
- move unikeyboard boards to /unikeyboard (#16081)
- move four_banger to bpiphany (#16082)
- move @takashiski 's keebs into /takashiski (#16089)
- move hid_liber to /bpiphany (#16091)
- move spaceholdings boards into /spaceholdings (#16096)
- move @7-rate 's keebs to /rate (#16099)
- move @npspears 's boards into /checkerboards (#16100)
- move @vuhopkep 's keebs into /hnahkb (#16102)
- move @ibnuda 's keebs into /ibnuda (#16108)
- move @tominabox1 's keebs into /tominabox1 (#16109)
- move niu_mini to /kbdfans (#16112)
- move woodkeys.click keyboards to /woodkeys (#16113)
- move @omkbd 's boards to /omkbd (#16116)
- Overhaul Tractyl Manuform (#16134)
- Reduce firmware size for dztech/dz60rgb_wkl/v2_1:via (#16254)

Keyboard fixes:

- Fix build failure for UT47 (#15483)
- Update grs_70ec to use newer custom matrix (#15609)
- fix compiler issue with Tractyl Manuform 4x6 (#15646)
- Fix CI. (#15828)
- Yet another bad `DEFAULT_FOLDER` fix. (#15904)
- Fix build failures for `mschwingen/modelm` (#15987)
- `rocketboard_16`: Fix mismatched LUT sizes (#15997)
- Fix erroneous SRC for Clueboard 66 hotswap (#16007)
- Fix handwired/ms_sculpt_mobile default keymap (#16032)
- Re-org Hillside folders as new model prep. Fix default keymap. (#16128)
- Fix up default folder locations. Again. (#16135)
- Sol3 rgb fix (#16157)
- Add missing `BOOTLOADER` for a handful of boards (#16225)
- Remove half implemented micronucleus bootloader support (#16252)
- Fixup bootloaders. (#16256)
- Fix idobao/id80/v3 compilation errors (#16280)
- Remove parent-relative paths from keyboards. (#16282)
- Bodge for helix build failures (#16376)

Others:

- Add a clarification to an error message (#15207)
- Clang-format tweaks (#15906)
- Add example implementations for compatible MCUs list (#15935)
- Add version.h to gitignore (#16222)
- Update keyboard mapping for all moved boards this cycle (#16312)
- Align docs to new-keyboard behaviour (#16357)
- Align new-keyboard with recent schema updates (#16378)

Bugs:

- Fixes potential wpm sampling overflow, along with code comment fixes (#15277)
- Add missing define for unicode common (#15416)
- Fix for SPI write timing in PMW3360 driver (#15519)
- Documentation Typo fix (#15538)
- fix a typo (#15557)
- Fix avr serial compile (#15589)
- More AVR GPIO compilation fixes. (#15592)
- Fix bug and code regression for Split Common (#15603)
- Include missing string.h include in split (#15606)
- Fixes for bootloader refactor build failures (#15638)
- Update pmw3360 driver after reading the datasheet top to bottom. Fix some outdated refs. (#15682)
- Fix split pointing for analog joystick (#15691)
- Fix broken bootloader builds in develop. (#15880)
- Fix optical sensor firmware upload (#15919)
- Pass in the keyrecord_t of the dual-role/tapping key when calling per-key tap hold functions (#15938)
- fixed typo in orange HSV colors decalartion (#15976)
- Fix hack for chibiOS reset name (#15984)
- Fix right side ws2812 leds having two indices (#15985)
- Workaround in Makefile for recursive rule matching (#15988)
- Fix BACKLIGHT_CAPS_LOCK warning (#15999)
- Fix compilation issues for led indicators (#16001)
- ChibiOS timer fixes (#16017)
- Fix bootloader_jump for certain CTRL boards (#16026)
- Fix up issue with PROGMEM and hand_swap_config (#16027)
- Don't make EEPROM size assumptions with dynamic keymaps. (#16054)
- fix missed .noci in reviung move (#16107)
- Fix issues with Python Tests (#16162)
- Fixup multibuild filegen (#16166)
- Remove old .gitignore entry. Add more macOS junk exclusions. (#16167)
- Fixup builds so that teensy EEPROM knows which MCU it's targeting. (#16168)
- Create a build error if no bootloader is specified. (#16181)
- Ensure `version.h` is recreated each build. (#16188)
- Add `custom` to list of valid bootloader types in info.json (#16228)
- Fix `layer_state` restoration at end of dynamic macro feature #16208 (#16230)
- Minor additions #12795 (#16276)
- Various fixes for matrix _RIGHT handling (#16292)
- Fix slashes in build_full_test.mk (#16300)
- ps2/avr: use the correct file name (#16316)
- Fix compilation of ChibiOS UART driver (#16348)
- Various fixes for new-keyboard (#16358)
- Allow NO_PIN within data driven configuration (#16359)