~ruther/qmk_firmware

37bc9499453f95e4e835faa751dbfffff9bfd644 — Ryan 1 year, 10 months ago dfb6d38
RGB Matrix: driver naming cleanups (#21594)

513 files changed, 1166 insertions(+), 1170 deletions(-)

M builddefs/common_features.mk
M docs/feature_rgb_matrix.md
M drivers/led/aw20216.c
M drivers/led/aw20216.h
M drivers/led/ckled2001.c
M drivers/led/ckled2001.h
M drivers/led/issi/is31fl3218.c
M drivers/led/issi/is31fl3218.h
M drivers/led/issi/is31fl3731.c
M drivers/led/issi/is31fl3731.h
M drivers/led/issi/is31fl3733.c
M drivers/led/issi/is31fl3733.h
M drivers/led/issi/is31fl3736.c
M drivers/led/issi/is31fl3736.h
M drivers/led/issi/is31fl3737.c
M drivers/led/issi/is31fl3737.h
M drivers/led/issi/is31fl3741.c
M drivers/led/issi/is31fl3741.h
M keyboards/0xcb/splaytoraid/info.json
M keyboards/1upkeyboards/1upocarina/info.json
M keyboards/1upkeyboards/pi40/grid_v1_1/info.json
M keyboards/1upkeyboards/pi40/mit_v1_0/info.json
M keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/rules.mk
M keyboards/1upkeyboards/pi40/mit_v1_1/info.json
M keyboards/1upkeyboards/pi50/info.json
M keyboards/1upkeyboards/pi60/info.json
M keyboards/1upkeyboards/pi60_hse/info.json
M keyboards/1upkeyboards/pi60_rgb/info.json
M keyboards/1upkeyboards/super16/info.json
M keyboards/1upkeyboards/super16v2/info.json
M keyboards/1upkeyboards/sweet16v2/kb2040/info.json
M keyboards/1upkeyboards/sweet16v2/pro_micro/info.json
M keyboards/25keys/zinc/info.json
M keyboards/3keyecosystem/2key2/info.json
M keyboards/4pplet/perk60_iso/rev_a/info.json
M keyboards/abatskeyboardclub/nayeon/info.json
M keyboards/abko/ak84bt/info.json
M keyboards/acheron/apollo/87h/delta/info.json
M keyboards/acheron/apollo/87h/gamma/info.json
M keyboards/acheron/apollo/87htsc/info.json
M keyboards/acheron/apollo/88htsc/info.json
M keyboards/adafruit/macropad/info.json
M keyboards/adm42/info.json
M keyboards/adpenrose/akemipad/info.json
M keyboards/aeboards/satellite/rev1/rev1.c
M keyboards/akko/5108/info.json
M keyboards/akko/acr87/info.json
M keyboards/akko/top40/info.json
M keyboards/aleblazer/zodiark/info.json
M keyboards/an_achronism/tetromino/info.json
M keyboards/atlantis/ak81_ve/info.json
M keyboards/atlantis/ps17/info.json
M keyboards/axolstudio/yeti/hotswap/info.json
M keyboards/bandominedoni/info.json
M keyboards/bastardkb/charybdis/3x5/blackpill/info.json
M keyboards/bastardkb/charybdis/3x5/v1/elitec/info.json
M keyboards/bastardkb/charybdis/3x5/v2/elitec/info.json
M keyboards/bastardkb/charybdis/3x5/v2/splinky_2/info.json
M keyboards/bastardkb/charybdis/3x5/v2/splinky_3/info.json
M keyboards/bastardkb/charybdis/3x5/v2/stemcell/info.json
M keyboards/bastardkb/charybdis/3x6/blackpill/info.json
M keyboards/bastardkb/charybdis/3x6/v1/elitec/info.json
M keyboards/bastardkb/charybdis/3x6/v2/elitec/info.json
M keyboards/bastardkb/charybdis/3x6/v2/splinky_2/info.json
M keyboards/bastardkb/charybdis/3x6/v2/splinky_3/info.json
M keyboards/bastardkb/charybdis/3x6/v2/stemcell/info.json
M keyboards/bastardkb/charybdis/4x6/blackpill/info.json
M keyboards/bastardkb/charybdis/4x6/v1/elitec/info.json
M keyboards/bastardkb/charybdis/4x6/v2/elitec/info.json
M keyboards/bastardkb/charybdis/4x6/v2/splinky_2/info.json
M keyboards/bastardkb/charybdis/4x6/v2/splinky_3/info.json
M keyboards/bastardkb/charybdis/4x6/v2/stemcell/info.json
M keyboards/bastardkb/dilemma/3x5_3/info.json
M keyboards/bastardkb/scylla/blackpill/info.json
M keyboards/bastardkb/scylla/v1/elitec/info.json
M keyboards/bastardkb/scylla/v2/elitec/info.json
M keyboards/bastardkb/scylla/v2/splinky_2/info.json
M keyboards/bastardkb/scylla/v2/splinky_3/info.json
M keyboards/bastardkb/scylla/v2/stemcell/info.json
M keyboards/bastardkb/skeletyl/blackpill/info.json
M keyboards/bastardkb/skeletyl/v1/elitec/info.json
M keyboards/bastardkb/skeletyl/v2/elitec/info.json
M keyboards/bastardkb/skeletyl/v2/splinky_2/info.json
M keyboards/bastardkb/skeletyl/v2/splinky_3/info.json
M keyboards/bastardkb/skeletyl/v2/stemcell/info.json
M keyboards/bastardkb/tbkmini/blackpill/info.json
M keyboards/bastardkb/tbkmini/v1/elitec/info.json
M keyboards/bastardkb/tbkmini/v2/elitec/info.json
M keyboards/bastardkb/tbkmini/v2/splinky_2/info.json
M keyboards/bastardkb/tbkmini/v2/splinky_3/info.json
M keyboards/bastardkb/tbkmini/v2/stemcell/info.json
M keyboards/binepad/bn006/info.json
M keyboards/black_hellebore/info.json
M keyboards/blockboy/ac980mini/info.json
M keyboards/boardsource/beiwagon/info.json
M keyboards/boardsource/lulu/info.json
M keyboards/boardsource/microdox/v2/info.json
M keyboards/boardsource/technik_o/info.json
M keyboards/boardsource/technik_s/info.json
M keyboards/boardsource/the_mark/info.json
M keyboards/boardsource/unicorne/info.json
M keyboards/boston_meetup/2019/info.json
M keyboards/bubble75/hotswap/info.json
M keyboards/canary/canary60rgb/info.json
M keyboards/capsunlocked/cu80/v2/info.json
M keyboards/checkerboards/quark_lp/info.json
M keyboards/cherrybstudio/cb87rgb/info.json
M keyboards/chosfox/cf81/info.json
M keyboards/chromatonemini/info.json
M keyboards/churrosoft/deck8/rgb/info.json
M keyboards/controllerworks/mini36/info.json
M keyboards/controllerworks/mini42/info.json
M keyboards/crkbd/info.json
M keyboards/cxt_studio/info.json
M keyboards/dekunukem/duckypad/info.json
M keyboards/deng/djam/info.json
M keyboards/deng/thirty/info.json
M keyboards/doio/kb16/rev1/info.json
M keyboards/doio/kb16/rev2/info.json
M keyboards/doio/kb30/info.json
M keyboards/doio/kb38/info.json
M keyboards/doro67/rgb/info.json
M keyboards/dotmod/dymium65/info.json
M keyboards/dp3000/info.json
M keyboards/dp60/info.json
M keyboards/drop/sense75/info.json
M keyboards/dtisaac/dosa40rgb/info.json
M keyboards/dumbpad/v3x/info.json
M keyboards/durgod/dgk6x/info.json
M keyboards/dztech/dz60rgb/v1/info.json
M keyboards/dztech/dz60rgb/v2/info.json
M keyboards/dztech/dz60rgb/v2_1/info.json
M keyboards/dztech/dz60rgb_ansi/v1/info.json
M keyboards/dztech/dz60rgb_ansi/v2/info.json
M keyboards/dztech/dz60rgb_ansi/v2_1/info.json
M keyboards/dztech/dz60rgb_wkl/v1/info.json
M keyboards/dztech/dz60rgb_wkl/v2/info.json
M keyboards/dztech/dz60rgb_wkl/v2_1/info.json
M keyboards/dztech/dz64rgb/info.json
M keyboards/dztech/dz65rgb/v1/info.json
M keyboards/dztech/dz65rgb/v2/info.json
M keyboards/dztech/dz65rgb/v3/info.json
M keyboards/dztech/tofu/ii/v1/info.json
M keyboards/dztech/tofu/jr/v1/info.json
M keyboards/eek/info.json
M keyboards/eggsworks/egg58/info.json
M keyboards/ein_60/info.json
M keyboards/elephant42/info.json
M keyboards/ergodox_ez/info.json
M keyboards/evyd13/atom47/rev5/info.json
M keyboards/exclusive/e6_rgb/info.json
M keyboards/fancytech/fancyalice66/info.json
M keyboards/feker/ik75/info.json
M keyboards/ferris/0_2/bling/info.json
M keyboards/flashquark/horizon_z/info.json
M keyboards/frooastboard/walnut/info.json
M keyboards/geekboards/macropad_v2/info.json
M keyboards/geekboards/tester/info.json
M keyboards/giabalanai/info.json
M keyboards/gizmo_engineering/gk6/info.json
M keyboards/gkeyboard/gpad8_2r/info.json
M keyboards/gl516/j73gl/keymaps/via_rgb_matrix/rules.mk
M keyboards/gmmk/gmmk2/p65/ansi/info.json
M keyboards/gmmk/gmmk2/p65/iso/info.json
M keyboards/gmmk/gmmk2/p96/ansi/info.json
M keyboards/gmmk/gmmk2/p96/iso/info.json
M keyboards/gmmk/numpad/info.json
M keyboards/gmmk/pro/rev1/ansi/info.json
M keyboards/gmmk/pro/rev1/iso/info.json
M keyboards/gmmk/pro/rev2/ansi/info.json
M keyboards/gmmk/pro/rev2/iso/info.json
M keyboards/gopolar/gg86/info.json
M keyboards/hadron/ver3/info.json
M keyboards/handwired/6macro/info.json
M keyboards/handwired/alcor_dactyl/info.json
M keyboards/handwired/colorlice/info.json
M keyboards/handwired/dactyl_manuform/5x6/keymaps/thattolleyguy/rules.mk
M keyboards/handwired/dactyl_minidox/info.json
M keyboards/handwired/dactyl_minidox/keymaps/dlford/rules.mk
M keyboards/handwired/hnah108/info.json
M keyboards/handwired/hnah40rgb/info.json
M keyboards/handwired/orbweaver/info.json
M keyboards/handwired/p65rgb/info.json
M keyboards/handwired/tractyl_manuform/4x6_right/info.json
M keyboards/heliotrope/info.json
M keyboards/helix/rev3_4rows/info.json
M keyboards/helix/rev3_5rows/info.json
M keyboards/hfdkb/ac001/info.json
M keyboards/horrortroll/chinese_pcb/devil68_pro/info.json
M keyboards/horrortroll/handwired_k552/info.json
M keyboards/hotdox76v2/info.json
M keyboards/hs60/v1/info.json
M keyboards/hub20/info.json
M keyboards/idobao/id42/info.json
M keyboards/idobao/id61/info.json
M keyboards/idobao/id63/info.json
M keyboards/idobao/id67/info.json
M keyboards/idobao/id75/v2/info.json
M keyboards/idobao/id80/v3/ansi/info.json
M keyboards/idobao/id87/v2/info.json
M keyboards/idobao/montex/v1rgb/info.json
M keyboards/idobao/montex/v2/info.json
M keyboards/idyllic/tinny50_rgb/info.json
M keyboards/ilumkb/simpler61/info.json
M keyboards/ilumkb/simpler64/info.json
M keyboards/inett_studio/sqx/hotswap/info.json
M keyboards/inett_studio/sqx/universal/info.json
M keyboards/inland/kb83/info.json
M keyboards/input_club/k_type/is31fl3733-dual.c
M keyboards/input_club/k_type/is31fl3733-dual.h
M keyboards/input_club/k_type/k_type-rgbdriver.c
M keyboards/jacky_studio/bear_65/rev1/info.json
M keyboards/jacky_studio/bear_65/rev2/info.json
M keyboards/jacky_studio/piggy60/rev2/info.json
M keyboards/jadookb/jkb65/info.json
M keyboards/jkeys_design/gentleman65/info.json
M keyboards/jkeys_design/gentleman65_se_s/info.json
M keyboards/junco/info.json
M keyboards/kapl/rev1/info.json
M keyboards/kbdcraft/adam64/info.json
M keyboards/kbdfans/baguette66/rgb/info.json
M keyboards/kbdfans/bella/rgb/info.json
M keyboards/kbdfans/bella/rgb_iso/info.json
M keyboards/kbdfans/boop65/rgb/info.json
M keyboards/kbdfans/kbd67/mkiirgb/v1/info.json
M keyboards/kbdfans/kbd67/mkiirgb/v2/info.json
M keyboards/kbdfans/kbd67/mkiirgb/v3/info.json
M keyboards/kbdfans/kbd67/mkiirgb/v4/info.json
M keyboards/kbdfans/kbd67/mkiirgb_iso/info.json
M keyboards/kbdfans/kbd75rgb/info.json
M keyboards/kbdfans/kbdmini/info.json
M keyboards/kbdfans/kbdpad/mk3/info.json
M keyboards/kbdfans/maja/info.json
M keyboards/kbdfans/odin/rgb/info.json
M keyboards/keebio/bamfk4/info.json
M keyboards/keebio/bdn9/rev2/info.json
M keyboards/keebio/cepstrum/rev1/info.json
M keyboards/keebio/chocopad/rev2/info.json
M keyboards/keebio/convolution/rev1/info.json
M keyboards/keebio/iris/keymaps/johnstegeman/rules.mk
M keyboards/keebio/iris/rev6/info.json
M keyboards/keebio/iris/rev7/info.json
M keyboards/keebio/iris/rev8/info.json
M keyboards/keebio/nyquist/rev4/info.json
M keyboards/keebio/sinc/rev3/info.json
M keyboards/keebio/sinc/rev4/info.json
M keyboards/keebio/stick/info.json
M keyboards/keebwerk/mega/ansi/ansi.c
M keyboards/keebwerk/mega/ansi/keymaps/jesusvallejo/keymap.c
M keyboards/keybee/keybee65/info.json
M keyboards/keycapsss/kimiko/keymaps/oriaj3/rules.mk
M keyboards/keychron/c1_pro/ansi/rgb/info.json
M keyboards/keychron/c2_pro/ansi/rgb/info.json
M keyboards/keychron/q0/rev_0130/info.json
M keyboards/keychron/q0/rev_0131/info.json
M keyboards/keychron/q1/ansi/info.json
M keyboards/keychron/q1/ansi_encoder/info.json
M keyboards/keychron/q1/iso/info.json
M keyboards/keychron/q1/iso_encoder/info.json
M keyboards/keychron/q10/ansi_encoder/info.json
M keyboards/keychron/q10/iso_encoder/info.json
M keyboards/keychron/q11/info.json
M keyboards/keychron/q12/ansi_encoder/info.json
M keyboards/keychron/q12/iso_encoder/info.json
M keyboards/keychron/q2/ansi/info.json
M keyboards/keychron/q2/ansi_encoder/info.json
M keyboards/keychron/q2/iso/info.json
M keyboards/keychron/q2/iso_encoder/info.json
M keyboards/keychron/q2/jis/info.json
M keyboards/keychron/q2/jis_encoder/info.json
M keyboards/keychron/q3/ansi/info.json
M keyboards/keychron/q3/ansi_encoder/info.json
M keyboards/keychron/q3/iso/info.json
M keyboards/keychron/q3/iso_encoder/info.json
M keyboards/keychron/q3/jis/info.json
M keyboards/keychron/q3/jis_encoder/info.json
M keyboards/keychron/q4/ansi_v1/info.json
M keyboards/keychron/q4/ansi_v2/info.json
M keyboards/keychron/q4/iso/info.json
M keyboards/keychron/q5/ansi/info.json
M keyboards/keychron/q5/ansi_encoder/info.json
M keyboards/keychron/q5/iso/info.json
M keyboards/keychron/q5/iso_encoder/info.json
M keyboards/keychron/q6/ansi/info.json
M keyboards/keychron/q6/ansi_encoder/info.json
M keyboards/keychron/q6/iso/info.json
M keyboards/keychron/q6/iso_encoder/info.json
M keyboards/keychron/q60/ansi/info.json
M keyboards/keychron/q65/ansi_encoder/info.json
M keyboards/keychron/q7/ansi/info.json
M keyboards/keychron/q7/iso/info.json
M keyboards/keychron/q8/ansi/info.json
M keyboards/keychron/q8/ansi_encoder/info.json
M keyboards/keychron/q8/iso/info.json
M keyboards/keychron/q8/iso_encoder/info.json
M keyboards/keychron/q9/ansi/info.json
M keyboards/keychron/q9/ansi_encoder/info.json
M keyboards/keychron/q9/iso/info.json
M keyboards/keychron/q9/iso_encoder/info.json
M keyboards/keychron/s1/ansi/rgb/info.json
M keyboards/keychron/v1/ansi/info.json
M keyboards/keychron/v1/ansi_encoder/info.json
M keyboards/keychron/v1/iso/info.json
M keyboards/keychron/v1/iso_encoder/info.json
M keyboards/keychron/v1/jis/info.json
M keyboards/keychron/v1/jis_encoder/info.json
M keyboards/keychron/v10/ansi_encoder/info.json
M keyboards/keychron/v10/iso_encoder/info.json
M keyboards/keychron/v2/ansi/info.json
M keyboards/keychron/v2/ansi_encoder/info.json
M keyboards/keychron/v2/iso/info.json
M keyboards/keychron/v2/iso_encoder/info.json
M keyboards/keychron/v2/jis/info.json
M keyboards/keychron/v2/jis_encoder/info.json
M keyboards/keychron/v3/ansi/info.json
M keyboards/keychron/v3/ansi_encoder/info.json
M keyboards/keychron/v3/iso/info.json
M keyboards/keychron/v3/iso_encoder/info.json
M keyboards/keychron/v3/jis/info.json
M keyboards/keychron/v3/jis_encoder/info.json
M keyboards/keychron/v4/ansi/info.json
M keyboards/keychron/v4/iso/info.json
M keyboards/keychron/v5/ansi/info.json
M keyboards/keychron/v5/ansi_encoder/info.json
M keyboards/keychron/v5/iso/info.json
M keyboards/keychron/v5/iso_encoder/info.json
M keyboards/keychron/v6/ansi/info.json
M keyboards/keychron/v6/ansi_encoder/info.json
M keyboards/keychron/v6/iso/info.json
M keyboards/keychron/v6/iso_encoder/info.json
M keyboards/keychron/v7/ansi/info.json
M keyboards/keychron/v7/iso/info.json
M keyboards/keychron/v8/ansi/info.json
M keyboards/keychron/v8/ansi_encoder/info.json
M keyboards/keychron/v8/iso/info.json
M keyboards/keychron/v8/iso_encoder/info.json
M keyboards/kprepublic/bm16a/v2/info.json
M keyboards/kprepublic/bm40hsrgb/info.json
M keyboards/kprepublic/bm60hsrgb/rev1/info.json
M keyboards/kprepublic/bm60hsrgb/rev2/rev2.c
M keyboards/kprepublic/bm60hsrgb_ec/rev1/info.json
M keyboards/kprepublic/bm60hsrgb_ec/rev2/info.json
M keyboards/kprepublic/bm60hsrgb_iso/rev1/info.json
M keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c
M keyboards/kprepublic/bm60hsrgb_poker/rev1/info.json
M keyboards/kprepublic/bm60hsrgb_poker/rev2/rev2.c
M keyboards/kprepublic/bm65hsrgb/rev1/info.json
M keyboards/kprepublic/bm65hsrgb_iso/rev1/info.json
M keyboards/kprepublic/bm68hsrgb/rev1/info.json
M keyboards/kprepublic/bm68hsrgb/rev2/info.json
M keyboards/kprepublic/bm80hsrgb/info.json
M keyboards/kprepublic/bm80v2/info.json
M keyboards/kprepublic/bm80v2_iso/info.json
M keyboards/kprepublic/bm980hsrgb/info.json
M keyboards/kuro/kuro65/info.json
M keyboards/labbe/labbeminiv1/keymaps/rgbmatrix/rules.mk
M keyboards/laser_ninja/pumpkin_pad/info.json
M keyboards/latincompass/latin17rgb/info.json
M keyboards/latincompass/latin60rgb/info.json
M keyboards/latincompass/latin6rgb/info.json
M keyboards/latincompass/latinpad/info.json
M keyboards/lily58/r2g/info.json
M keyboards/linworks/fave65h/info.json
M keyboards/linworks/fave84h/info.json
M keyboards/linworks/fave87h/info.json
M keyboards/maple_computing/launchpad/keymaps/drashna/rules.mk
M keyboards/marksard/rhymestone/rev1/info.json
M keyboards/matrix/m20add/rgb_ring.c
M keyboards/matrix/noah/info.json
M keyboards/mechlovin/adelais/rgb_led/rev1/info.json
M keyboards/mechlovin/adelais/rgb_led/rev2/info.json
M keyboards/mechlovin/adelais/rgb_led/rev3/info.json
M keyboards/mechlovin/delphine/rgb_led/info.json
M keyboards/mechlovin/hannah60rgb/rev1/info.json
M keyboards/mechlovin/hannah60rgb/rev2/info.json
M keyboards/mechlovin/infinity87/rgb_rev1/info.json
M keyboards/mechlovin/infinity875/info.json
M keyboards/melgeek/mach80/rev1/info.json
M keyboards/melgeek/mach80/rev1/rev1.c
M keyboards/melgeek/mach80/rev2/info.json
M keyboards/melgeek/mach80/rev2/rev2.c
M keyboards/melgeek/mj61/rev1/info.json
M keyboards/melgeek/mj61/rev2/info.json
M keyboards/melgeek/mj63/rev1/info.json
M keyboards/melgeek/mj63/rev2/info.json
M keyboards/melgeek/mj64/rev1/info.json
M keyboards/melgeek/mj64/rev2/info.json
M keyboards/melgeek/mj64/rev3/info.json
M keyboards/melgeek/mj65/info.json
M keyboards/melgeek/mojo68/info.json
M keyboards/melgeek/mojo68/rev1/rev1.c
M keyboards/melgeek/mojo75/info.json
M keyboards/melgeek/tegic/info.json
M keyboards/melgeek/z70ultra/info.json
M keyboards/melgeek/z70ultra/z70ultra.c
M keyboards/miller/gm862/info.json
M keyboards/ml/gas75/info.json
M keyboards/momokai/tap_duo/info.json
M keyboards/momokai/tap_trio/info.json
M keyboards/monsgeek/m5/info.json
M keyboards/monsgeek/m6/info.json
M keyboards/monstargear/xo87/rgb/info.json
M keyboards/moonlander/info.json
M keyboards/mss_studio/m63_rgb/info.json
M keyboards/mss_studio/m64_rgb/info.json
M keyboards/mt/mt64rgb/info.json
M keyboards/mt/mt84/info.json
M keyboards/mwstudio/mw65_rgb/info.json
M keyboards/mwstudio/mw75/info.json
M keyboards/mwstudio/mw75r2/info.json
M keyboards/nack/info.json
M keyboards/neson_design/700e/700e.c
M keyboards/neson_design/n6/n6.c
M keyboards/ning/tiny_board/tb16_rgb/info.json
M keyboards/novelkeys/nk20/info.json
M keyboards/novelkeys/nk65/nk65.c
M keyboards/novelkeys/nk65b/info.json
M keyboards/novelkeys/nk87/nk87.c
M keyboards/novelkeys/nk87b/info.json
M keyboards/novelkeys/nk_plus/info.json
M keyboards/omkbd/runner3680/5x6_5x8/info.json
M keyboards/opendeck/32/rev1/info.json
M keyboards/owlab/voice65/hotswap/info.json
M keyboards/owlab/voice65/soldered/info.json
M keyboards/paprikman/albacore/info.json
M keyboards/percent/canoe_gen2/info.json
M keyboards/phage_studio/pila87/info.json
M keyboards/phase_studio/titan65/hotswap/info.json
M keyboards/planck/ez/info.json
M keyboards/planck/light/info.json
M keyboards/planck/rev6/info.json
M keyboards/planck/rev6_drop/info.json
M keyboards/planck/rev7/info.json
M keyboards/playkbtw/pk64rgb/info.json
M keyboards/plywrks/ply8x/info.json
M keyboards/preonic/rev3/info.json
M keyboards/preonic/rev3_drop/info.json
M keyboards/quarkeys/z40/info.json
M keyboards/rgbkb/mun/rev1/info.json
M keyboards/rgbkb/sol/rev1/info.json
M keyboards/rgbkb/sol/rev2/info.json
M keyboards/rgbkb/sol3/rev1/info.json
M keyboards/rgbkb/zygomorph/keymaps/xulkal/rules.mk
M keyboards/rgbkb/zygomorph/rev1/info.json
M keyboards/rura66/rev1/info.json
M keyboards/ryanskidmore/rskeys100/info.json
M keyboards/s_ol/0xc_pad/info.json
M keyboards/saevus/cor_tkl/info.json
M keyboards/salicylic_acid3/naked48/rev1/info.json
M keyboards/salicylic_acid3/setta21/rev1/info.json
M keyboards/sawnsprojects/satxri6key/keymaps/default/rules.mk
M keyboards/senselessclay/ck60/info.json
M keyboards/silverbullet44/info.json
M keyboards/skeletonkbd/frost68/info.json
M keyboards/skmt/15k/info.json
M keyboards/skyloong/dt40/info.json
M keyboards/smallkeyboard/info.json
M keyboards/soda/mango/info.json
M keyboards/soda/pocket/info.json
M keyboards/sofle/keymaps/killmaster/rules.mk
M keyboards/sowbug/68keys/info.json
M keyboards/sowbug/ansi_tkl/info.json
M keyboards/spaceholdings/nebula12b/info.json
M keyboards/spaceholdings/nebula68b/info.json
M keyboards/splitkb/aurora/corne/rev1/info.json
M keyboards/splitkb/aurora/lily58/rev1/info.json
M keyboards/splitkb/aurora/sweep/rev1/info.json
M keyboards/splitkb/kyria/rev1/info.json
M keyboards/splitkb/kyria/rev2/info.json
M keyboards/splitkb/kyria/rev3/info.json
M keyboards/stront/info.json
M keyboards/synthlabs/060/info.json
M keyboards/system76/launch_1/info.json
M keyboards/teleport/native/info.json
M keyboards/tkc/portico/info.json
M keyboards/tkc/portico68v2/info.json
M keyboards/tkc/portico75/info.json
M keyboards/tominabox1/le_chiffre/info.json
M keyboards/tzarc/djinn/info.json
M keyboards/tzarc/ghoul/info.json
M keyboards/ungodly/launch_pad/info.json
M keyboards/wekey/we27/info.json
M keyboards/wilba_tech/wt_mono_backlight.c
M keyboards/wilba_tech/wt_rgb_backlight.c
M keyboards/winry/winry315/info.json
M keyboards/wolf/m60_b/info.json
M keyboards/work_louder/loop/info.json
M keyboards/work_louder/micro/info.json
M keyboards/work_louder/nano/info.json
M keyboards/work_louder/numpad/info.json
M keyboards/work_louder/work_board/info.json
M keyboards/xbows/knight/info.json
M keyboards/xbows/knight_plus/info.json
M keyboards/xbows/nature/info.json
M keyboards/xbows/numpad/info.json
M keyboards/xbows/ranger/info.json
M keyboards/xbows/woody/info.json
M keyboards/xelus/dawn60/rev1_qmk/rev1_qmk.c
M keyboards/xelus/la_plus/info.json
M keyboards/xelus/pachi/rgb/rev1/rev1.c
M keyboards/xelus/pachi/rgb/rev2/rev2.c
M keyboards/xelus/valor/rev2/info.json
M keyboards/yandrstudio/nz64/info.json
M keyboards/yandrstudio/nz67v2/info.json
M keyboards/yandrstudio/tg67/info.json
M keyboards/yanghu/unicorne/info.json
M keyboards/ymdk/id75/info.json
M keyboards/ymdk/ymd09/info.json
M keyboards/ymdk/ymd40/air40/info.json
M keyboards/yncognito/batpad/info.json
M keyboards/yushakobo/quick17/info.json
M keyboards/zykrah/fuyu/info.json
M quantum/rgb_matrix/rgb_matrix_drivers.c
M builddefs/common_features.mk => builddefs/common_features.mk +14 -14
@@ 416,7 416,7 @@ endif

RGB_MATRIX_ENABLE ?= no

VALID_RGB_MATRIX_TYPES := AW20216 IS31FL3731 IS31FL3733 IS31FL3736 IS31FL3737 IS31FL3741 IS31FL3742A IS31FL3743A IS31FL3745 IS31FL3746A CKLED2001 WS2812 custom
VALID_RGB_MATRIX_TYPES := aw20216 is31fl3731 is31fl3733 is31fl3736 is31fl3737 is31fl3741 is31fl3742a is31fl3743a is31fl3745 is31fl3746a ckled2001 ws2812 custom
ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
    ifeq ($(filter $(RGB_MATRIX_DRIVER),$(VALID_RGB_MATRIX_TYPES)),)
        $(call CATASTROPHIC_ERROR,Invalid RGB_MATRIX_DRIVER,RGB_MATRIX_DRIVER="$(RGB_MATRIX_DRIVER)" is not a valid matrix type)


@@ 437,89 437,89 @@ endif
    CIE1931_CURVE := yes
    RGB_KEYCODES_ENABLE := yes

    ifeq ($(strip $(RGB_MATRIX_DRIVER)), AW20216)
    ifeq ($(strip $(RGB_MATRIX_DRIVER)), aw20216)
        OPT_DEFS += -DAW20216 -DSTM32_SPI -DHAL_USE_SPI=TRUE
        COMMON_VPATH += $(DRIVER_PATH)/led
        SRC += aw20216.c
        QUANTUM_LIB_SRC += spi_master.c
    endif

    ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3731)
    ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3731)
        OPT_DEFS += -DIS31FL3731 -DSTM32_I2C -DHAL_USE_I2C=TRUE
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
        SRC += is31fl3731.c
        QUANTUM_LIB_SRC += i2c_master.c
    endif

    ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3733)
    ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3733)
        OPT_DEFS += -DIS31FL3733 -DSTM32_I2C -DHAL_USE_I2C=TRUE
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
        SRC += is31fl3733.c
        QUANTUM_LIB_SRC += i2c_master.c
    endif

    ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3736)
    ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3736)
        OPT_DEFS += -DIS31FL3736 -DSTM32_I2C -DHAL_USE_I2C=TRUE
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
        SRC += is31fl3736.c
        QUANTUM_LIB_SRC += i2c_master.c
    endif

    ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3737)
    ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3737)
        OPT_DEFS += -DIS31FL3737 -DSTM32_I2C -DHAL_USE_I2C=TRUE
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
        SRC += is31fl3737.c
        QUANTUM_LIB_SRC += i2c_master.c
    endif

    ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3741)
    ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3741)
        OPT_DEFS += -DIS31FL3741 -DSTM32_I2C -DHAL_USE_I2C=TRUE
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
        SRC += is31fl3741.c
        QUANTUM_LIB_SRC += i2c_master.c
    endif

	ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3742A)
	ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3742a)
        OPT_DEFS += -DIS31FLCOMMON -DIS31FL3742A -DSTM32_I2C -DHAL_USE_I2C=TRUE
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
        SRC += is31flcommon.c
        QUANTUM_LIB_SRC += i2c_master.c
    endif

	ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3743A)
	ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3743a)
        OPT_DEFS += -DIS31FLCOMMON -DIS31FL3743A -DSTM32_I2C -DHAL_USE_I2C=TRUE
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
        SRC += is31flcommon.c
        QUANTUM_LIB_SRC += i2c_master.c
    endif

	ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3745)
	ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3745)
        OPT_DEFS += -DIS31FLCOMMON -DIS31FL3745 -DSTM32_I2C -DHAL_USE_I2C=TRUE
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
        SRC += is31flcommon.c
        QUANTUM_LIB_SRC += i2c_master.c
    endif

	ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3746A)
	ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3746a)
        OPT_DEFS += -DIS31FLCOMMON -DIS31FL3746A -DSTM32_I2C -DHAL_USE_I2C=TRUE
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
        SRC += is31flcommon.c
        QUANTUM_LIB_SRC += i2c_master.c
    endif

    ifeq ($(strip $(RGB_MATRIX_DRIVER)), CKLED2001)
    ifeq ($(strip $(RGB_MATRIX_DRIVER)), ckled2001)
        OPT_DEFS += -DCKLED2001 -DSTM32_I2C -DHAL_USE_I2C=TRUE
        COMMON_VPATH += $(DRIVER_PATH)/led
        SRC += ckled2001.c
        QUANTUM_LIB_SRC += i2c_master.c
    endif

    ifeq ($(strip $(RGB_MATRIX_DRIVER)), WS2812)
    ifeq ($(strip $(RGB_MATRIX_DRIVER)), ws2812)
        OPT_DEFS += -DWS2812
        WS2812_DRIVER_REQUIRED := yes
    endif

    ifeq ($(strip $(RGB_MATRIX_DRIVER)), APA102)
    ifeq ($(strip $(RGB_MATRIX_DRIVER)), apa102)
        OPT_DEFS += -DAPA102
        APA102_DRIVER_REQUIRED := yes
    endif

M docs/feature_rgb_matrix.md => docs/feature_rgb_matrix.md +7 -7
@@ 12,7 12,7 @@ There is basic support for addressable RGB matrix lighting with the I2C IS31FL37

```make
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = IS31FL3731
RGB_MATRIX_DRIVER = is31fl3731
```

You can use between 1 and 4 IS31FL3731 IC's. Do not specify `DRIVER_ADDR_<N>` defines for IC's that are not present on your keyboard. You can define the following items in `config.h`:


@@ 76,7 76,7 @@ There is basic support for addressable RGB matrix lighting with the I2C IS31FL37

```make
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = IS31FL3733
RGB_MATRIX_DRIVER = is31fl3733
```

You can use between 1 and 4 IS31FL3733 IC's. Do not specify `DRIVER_ADDR_<N>` defines for IC's that are not present on your keyboard. You can define the following items in `config.h`:


@@ 162,7 162,7 @@ There is basic support for addressable RGB matrix lighting with the I2C IS31FL37

```make
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = IS31FL3736
RGB_MATRIX_DRIVER = is31fl3736
```
You can use between 1 and 4 IS31FL3736 IC's. Do not specify `DRIVER_ADDR_<N>` defines for IC's that are not present on your keyboard.



@@ 238,7 238,7 @@ There is basic support for addressable RGB matrix lighting with the I2C IS31FL37

```make
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = IS31FL3737
RGB_MATRIX_DRIVER = is31fl3737
```
You can use between 1 and 4 IS31FL3737 IC's. Do not specify `DRIVER_ADDR_<N>` defines for IC's that are not present on your keyboard.



@@ 428,7 428,7 @@ There is basic support for addressable RGB matrix lighting with a WS2811/WS2812{

```make
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = WS2812
RGB_MATRIX_DRIVER = ws2812
```

Configure the hardware via your `config.h`:


@@ 450,7 450,7 @@ There is basic support for APA102 based addressable LED strands. To enable it, a

```make
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = APA102
RGB_MATRIX_DRIVER = apa102
```

Configure the hardware via your `config.h`:


@@ 470,7 470,7 @@ There is basic support for addressable RGB matrix lighting with the SPI AW20216 

```make
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = AW20216
RGB_MATRIX_DRIVER = aw20216
```

You can use up to 2 AW20216 IC's. Do not specify `DRIVER_<N>_xxx` defines for IC's that are not present on your keyboard. You can define the following items in `config.h`:

M drivers/led/aw20216.c => drivers/led/aw20216.c +24 -24
@@ 71,7 71,7 @@
uint8_t g_pwm_buffer[DRIVER_COUNT][AW_PWM_REGISTER_COUNT];
bool    g_pwm_buffer_update_required[DRIVER_COUNT] = {false};

bool AW20216_write(pin_t cs_pin, uint8_t page, uint8_t reg, uint8_t* data, uint8_t len) {
bool aw20216_write(pin_t cs_pin, uint8_t page, uint8_t reg, uint8_t* data, uint8_t len) {
    static uint8_t s_spi_transfer_buffer[2] = {0};

    if (!spi_start(cs_pin, false, AW_SPI_MODE, AW_SPI_DIVISOR)) {


@@ 96,52 96,52 @@ bool AW20216_write(pin_t cs_pin, uint8_t page, uint8_t reg, uint8_t* data, uint8
    return true;
}

static inline bool AW20216_write_register(pin_t cs_pin, uint8_t page, uint8_t reg, uint8_t value) {
static inline bool aw20216_write_register(pin_t cs_pin, uint8_t page, uint8_t reg, uint8_t value) {
    // Little wrapper so callers need not care about sending a buffer
    return AW20216_write(cs_pin, page, reg, &value, 1);
    return aw20216_write(cs_pin, page, reg, &value, 1);
}

void AW20216_soft_reset(pin_t cs_pin) {
    AW20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_RESET, AW_RESET_CMD);
void aw20216_soft_reset(pin_t cs_pin) {
    aw20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_RESET, AW_RESET_CMD);
}

static void AW20216_init_scaling(pin_t cs_pin) {
static void aw20216_init_scaling(pin_t cs_pin) {
    // Set constant current to the max, control brightness with PWM
    for (uint8_t i = 0; i < AW_PWM_REGISTER_COUNT; i++) {
        AW20216_write_register(cs_pin, AW_PAGE_SCALING, i, AW_SCALING_MAX);
        aw20216_write_register(cs_pin, AW_PAGE_SCALING, i, AW_SCALING_MAX);
    }
}

static inline void AW20216_init_current_limit(pin_t cs_pin) {
static inline void aw20216_init_current_limit(pin_t cs_pin) {
    // Push config
    AW20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_GLOBALCURRENT, AW_GLOBAL_CURRENT_MAX);
    aw20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_GLOBALCURRENT, AW_GLOBAL_CURRENT_MAX);
}

static inline void AW20216_soft_enable(pin_t cs_pin) {
static inline void aw20216_soft_enable(pin_t cs_pin) {
    // Push config
    AW20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_CONFIGURATION, AW_CONFIG_DEFAULT | AW_CHIPEN);
    aw20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_CONFIGURATION, AW_CONFIG_DEFAULT | AW_CHIPEN);
}

static inline void AW20216_auto_lowpower(pin_t cs_pin) {
    AW20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_MIXFUNCTION, AW_MIXCR_DEFAULT | AW_LPEN);
static inline void aw20216_auto_lowpower(pin_t cs_pin) {
    aw20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_MIXFUNCTION, AW_MIXCR_DEFAULT | AW_LPEN);
}

void AW20216_init(pin_t cs_pin, pin_t en_pin) {
void aw20216_init(pin_t cs_pin, pin_t en_pin) {
    setPinOutput(en_pin);
    writePinHigh(en_pin);

    AW20216_soft_reset(cs_pin);
    aw20216_soft_reset(cs_pin);
    wait_ms(2);

    // Drivers should start with all scaling and PWM registers as off
    AW20216_init_current_limit(cs_pin);
    AW20216_init_scaling(cs_pin);
    aw20216_init_current_limit(cs_pin);
    aw20216_init_scaling(cs_pin);

    AW20216_soft_enable(cs_pin);
    AW20216_auto_lowpower(cs_pin);
    aw20216_soft_enable(cs_pin);
    aw20216_auto_lowpower(cs_pin);
}

void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
void aw20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    aw_led led;
    memcpy_P(&led, (&g_aw_leds[index]), sizeof(led));



@@ 154,15 154,15 @@ void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    g_pwm_buffer_update_required[led.driver] = true;
}

void AW20216_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
void aw20216_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
    for (uint8_t i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
        AW20216_set_color(i, red, green, blue);
        aw20216_set_color(i, red, green, blue);
    }
}

void AW20216_update_pwm_buffers(pin_t cs_pin, uint8_t index) {
void aw20216_update_pwm_buffers(pin_t cs_pin, uint8_t index) {
    if (g_pwm_buffer_update_required[index]) {
        AW20216_write(cs_pin, AW_PAGE_PWM, 0, g_pwm_buffer[index], AW_PWM_REGISTER_COUNT);
        aw20216_write(cs_pin, AW_PAGE_PWM, 0, g_pwm_buffer[index], AW_PWM_REGISTER_COUNT);
    }
    g_pwm_buffer_update_required[index] = false;
}

M drivers/led/aw20216.h => drivers/led/aw20216.h +4 -4
@@ 30,10 30,10 @@ typedef struct aw_led {

extern const aw_led PROGMEM g_aw_leds[RGB_MATRIX_LED_COUNT];

void AW20216_init(pin_t cs_pin, pin_t en_pin);
void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void AW20216_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
void AW20216_update_pwm_buffers(pin_t cs_pin, uint8_t index);
void aw20216_init(pin_t cs_pin, pin_t en_pin);
void aw20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void aw20216_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
void aw20216_update_pwm_buffers(pin_t cs_pin, uint8_t index);

#define CS1_SW1 0x00
#define CS2_SW1 0x01

M drivers/led/ckled2001.c => drivers/led/ckled2001.c +38 -38
@@ 42,7 42,7 @@ uint8_t g_twi_transfer_buffer[65];
// The control buffers match the PG0 LED On/Off registers.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in CKLED2001_write_pwm_buffer() but it's
// buffers and the transfers in ckled2001_write_pwm_buffer() but it's
// probably not worth the extra complexity.
uint8_t g_pwm_buffer[DRIVER_COUNT][192];
bool    g_pwm_buffer_update_required[DRIVER_COUNT] = {false};


@@ 50,7 50,7 @@ bool    g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
uint8_t g_led_control_registers[DRIVER_COUNT][24]             = {0};
bool    g_led_control_registers_update_required[DRIVER_COUNT] = {false};

bool CKLED2001_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
bool ckled2001_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
    // If the transaction fails function returns false.
    g_twi_transfer_buffer[0] = reg;
    g_twi_transfer_buffer[1] = data;


@@ 69,7 69,7 @@ bool CKLED2001_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
    return true;
}

bool CKLED2001_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
bool ckled2001_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
    // Assumes PG1 is already selected.
    // If any of the transactions fails function returns false.
    // Transmit PWM registers in 3 transfers of 64 bytes.


@@ 99,53 99,53 @@ bool CKLED2001_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
    return true;
}

void CKLED2001_init(uint8_t addr) {
void ckled2001_init(uint8_t addr) {
    // Select to function page
    CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
    ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
    // Setting LED driver to shutdown mode
    CKLED2001_write_register(addr, CONFIGURATION_REG, MSKSW_SHUT_DOWN_MODE);
    ckled2001_write_register(addr, CONFIGURATION_REG, MSKSW_SHUT_DOWN_MODE);
    // Setting internal channel pulldown/pullup
    CKLED2001_write_register(addr, PDU_REG, MSKSET_CA_CB_CHANNEL);
    ckled2001_write_register(addr, PDU_REG, MSKSET_CA_CB_CHANNEL);
    // Select number of scan phase
    CKLED2001_write_register(addr, SCAN_PHASE_REG, PHASE_CHANNEL);
    ckled2001_write_register(addr, SCAN_PHASE_REG, PHASE_CHANNEL);
    // Setting PWM Delay Phase
    CKLED2001_write_register(addr, SLEW_RATE_CONTROL_MODE1_REG, MSKPWM_DELAY_PHASE_ENABLE);
    ckled2001_write_register(addr, SLEW_RATE_CONTROL_MODE1_REG, MSKPWM_DELAY_PHASE_ENABLE);
    // Setting Driving/Sinking Channel Slew Rate
    CKLED2001_write_register(addr, SLEW_RATE_CONTROL_MODE2_REG, MSKDRIVING_SINKING_CHHANNEL_SLEWRATE_ENABLE);
    ckled2001_write_register(addr, SLEW_RATE_CONTROL_MODE2_REG, MSKDRIVING_SINKING_CHHANNEL_SLEWRATE_ENABLE);
    // Setting Iref
    CKLED2001_write_register(addr, SOFTWARE_SLEEP_REG, MSKSLEEP_DISABLE);
    ckled2001_write_register(addr, SOFTWARE_SLEEP_REG, MSKSLEEP_DISABLE);
    // Set LED CONTROL PAGE (Page 0)
    CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_CONTROL_PAGE);
    ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_CONTROL_PAGE);
    for (int i = 0; i < LED_CONTROL_ON_OFF_LENGTH; i++) {
        CKLED2001_write_register(addr, i, 0x00);
        ckled2001_write_register(addr, i, 0x00);
    }

    // Set PWM PAGE (Page 1)
    CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_PWM_PAGE);
    ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_PWM_PAGE);
    for (int i = 0; i < LED_CURRENT_TUNE_LENGTH; i++) {
        CKLED2001_write_register(addr, i, 0x00);
        ckled2001_write_register(addr, i, 0x00);
    }

    // Set CURRENT PAGE (Page 4)
    uint8_t current_tuen_reg_list[LED_CURRENT_TUNE_LENGTH] = CKLED2001_CURRENT_TUNE;
    CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, CURRENT_TUNE_PAGE);
    ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, CURRENT_TUNE_PAGE);
    for (int i = 0; i < LED_CURRENT_TUNE_LENGTH; i++) {
        CKLED2001_write_register(addr, i, current_tuen_reg_list[i]);
        ckled2001_write_register(addr, i, current_tuen_reg_list[i]);
    }

    // Enable LEDs ON/OFF
    CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_CONTROL_PAGE);
    ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_CONTROL_PAGE);
    for (int i = 0; i < LED_CONTROL_ON_OFF_LENGTH; i++) {
        CKLED2001_write_register(addr, i, 0xFF);
        ckled2001_write_register(addr, i, 0xFF);
    }

    // Select to function page
    CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
    ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
    // Setting LED driver to normal mode
    CKLED2001_write_register(addr, CONFIGURATION_REG, MSKSW_NORMAL_MODE);
    ckled2001_write_register(addr, CONFIGURATION_REG, MSKSW_NORMAL_MODE);
}

void CKLED2001_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
void ckled2001_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    ckled2001_led led;
    if (index >= 0 && index < RGB_MATRIX_LED_COUNT) {
        memcpy_P(&led, (&g_ckled2001_leds[index]), sizeof(led));


@@ 160,13 160,13 @@ void CKLED2001_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    }
}

void CKLED2001_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
void ckled2001_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
    for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
        CKLED2001_set_color(i, red, green, blue);
        ckled2001_set_color(i, red, green, blue);
    }
}

void CKLED2001_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
void ckled2001_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
    ckled2001_led led;
    memcpy_P(&led, (&g_ckled2001_leds[index]), sizeof(led));



@@ 196,41 196,41 @@ void CKLED2001_set_led_control_register(uint8_t index, bool red, bool green, boo
    g_led_control_registers_update_required[led.driver] = true;
}

void CKLED2001_update_pwm_buffers(uint8_t addr, uint8_t index) {
void ckled2001_update_pwm_buffers(uint8_t addr, uint8_t index) {
    if (g_pwm_buffer_update_required[index]) {
        CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_PWM_PAGE);
        ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_PWM_PAGE);

        // If any of the transactions fail we risk writing dirty PG0,
        // refresh page 0 just in case.
        if (!CKLED2001_write_pwm_buffer(addr, g_pwm_buffer[index])) {
        if (!ckled2001_write_pwm_buffer(addr, g_pwm_buffer[index])) {
            g_led_control_registers_update_required[index] = true;
        }
    }
    g_pwm_buffer_update_required[index] = false;
}

void CKLED2001_update_led_control_registers(uint8_t addr, uint8_t index) {
void ckled2001_update_led_control_registers(uint8_t addr, uint8_t index) {
    if (g_led_control_registers_update_required[index]) {
        CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_CONTROL_PAGE);
        ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_CONTROL_PAGE);
        for (int i = 0; i < 24; i++) {
            CKLED2001_write_register(addr, i, g_led_control_registers[index][i]);
            ckled2001_write_register(addr, i, g_led_control_registers[index][i]);
        }
    }
    g_led_control_registers_update_required[index] = false;
}

void CKLED2001_sw_return_normal(uint8_t addr) {
void ckled2001_sw_return_normal(uint8_t addr) {
    // Select to function page
    CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
    ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
    // Setting LED driver to normal mode
    CKLED2001_write_register(addr, CONFIGURATION_REG, MSKSW_NORMAL_MODE);
    ckled2001_write_register(addr, CONFIGURATION_REG, MSKSW_NORMAL_MODE);
}

void CKLED2001_sw_shutdown(uint8_t addr) {
void ckled2001_sw_shutdown(uint8_t addr) {
    // Select to function page
    CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
    ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
    // Setting LED driver to shutdown mode
    CKLED2001_write_register(addr, CONFIGURATION_REG, MSKSW_SHUT_DOWN_MODE);
    ckled2001_write_register(addr, CONFIGURATION_REG, MSKSW_SHUT_DOWN_MODE);
    // Write SW Sleep Register
    CKLED2001_write_register(addr, SOFTWARE_SLEEP_REG, MSKSLEEP_ENABLE);
    ckled2001_write_register(addr, SOFTWARE_SLEEP_REG, MSKSLEEP_ENABLE);
}

M drivers/led/ckled2001.h => drivers/led/ckled2001.h +10 -10
@@ 29,24 29,24 @@ typedef struct ckled2001_led {

extern const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT];

void CKLED2001_init(uint8_t addr);
bool CKLED2001_write_register(uint8_t addr, uint8_t reg, uint8_t data);
bool CKLED2001_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
void ckled2001_init(uint8_t addr);
bool ckled2001_write_register(uint8_t addr, uint8_t reg, uint8_t data);
bool ckled2001_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);

void CKLED2001_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void CKLED2001_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
void ckled2001_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void ckled2001_set_color_all(uint8_t red, uint8_t green, uint8_t blue);

void CKLED2001_set_led_control_register(uint8_t index, bool red, bool green, bool blue);
void ckled2001_set_led_control_register(uint8_t index, bool red, bool green, bool blue);

// This should not be called from an interrupt
// (eg. from a timer interrupt).
// Call this while idle (in between matrix scans).
// If the buffer is dirty, it will update the driver with the buffer.
void CKLED2001_update_pwm_buffers(uint8_t addr, uint8_t index);
void CKLED2001_update_led_control_registers(uint8_t addr, uint8_t index);
void ckled2001_update_pwm_buffers(uint8_t addr, uint8_t index);
void ckled2001_update_led_control_registers(uint8_t addr, uint8_t index);

void CKLED2001_sw_return_normal(uint8_t addr);
void CKLED2001_sw_shutdown(uint8_t addr);
void ckled2001_sw_return_normal(uint8_t addr);
void ckled2001_sw_shutdown(uint8_t addr);

// Registers Page Define
#define CONFIGURE_CMD_PAGE 0xFD

M drivers/led/issi/is31fl3218.c => drivers/led/issi/is31fl3218.c +14 -14
@@ 37,41 37,41 @@ uint8_t g_twi_transfer_buffer[20];
uint8_t g_pwm_buffer[18];
bool    g_pwm_buffer_update_required = false;

void IS31FL3218_write_register(uint8_t reg, uint8_t data) {
void is31fl3218_write_register(uint8_t reg, uint8_t data) {
    g_twi_transfer_buffer[0] = reg;
    g_twi_transfer_buffer[1] = data;
    i2c_transmit(ISSI_ADDRESS, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
}

void IS31FL3218_write_pwm_buffer(uint8_t *pwm_buffer) {
void is31fl3218_write_pwm_buffer(uint8_t *pwm_buffer) {
    g_twi_transfer_buffer[0] = ISSI_REG_PWM;
    memcpy(g_twi_transfer_buffer + 1, pwm_buffer, 18);

    i2c_transmit(ISSI_ADDRESS, g_twi_transfer_buffer, 19, ISSI_TIMEOUT);
}

void IS31FL3218_init(void) {
void is31fl3218_init(void) {
    // In case we ever want to reinitialize (?)
    IS31FL3218_write_register(ISSI_REG_RESET, 0x00);
    is31fl3218_write_register(ISSI_REG_RESET, 0x00);

    // Turn off software shutdown
    IS31FL3218_write_register(ISSI_REG_SHUTDOWN, 0x01);
    is31fl3218_write_register(ISSI_REG_SHUTDOWN, 0x01);

    // Set all PWM values to zero
    for (uint8_t i = 0; i < 18; i++) {
        IS31FL3218_write_register(ISSI_REG_PWM + i, 0x00);
        is31fl3218_write_register(ISSI_REG_PWM + i, 0x00);
    }

    // Enable all channels
    for (uint8_t i = 0; i < 3; i++) {
        IS31FL3218_write_register(ISSI_REG_CONTROL + i, 0b00111111);
        is31fl3218_write_register(ISSI_REG_CONTROL + i, 0b00111111);
    }

    // Load PWM registers and LED Control register data
    IS31FL3218_write_register(ISSI_REG_UPDATE, 0x01);
    is31fl3218_write_register(ISSI_REG_UPDATE, 0x01);
}

void IS31FL3218_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
void is31fl3218_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    if (g_pwm_buffer[index * 3 + 0] == red && g_pwm_buffer[index * 3 + 1] == green && g_pwm_buffer[index * 3 + 2] == blue) {
        return;
    }


@@ 81,17 81,17 @@ void IS31FL3218_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    g_pwm_buffer_update_required = true;
}

void IS31FL3218_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
void is31fl3218_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
    for (int i = 0; i < 6; i++) {
        IS31FL3218_set_color(i, red, green, blue);
        is31fl3218_set_color(i, red, green, blue);
    }
}

void IS31FL3218_update_pwm_buffers(void) {
void is31fl3218_update_pwm_buffers(void) {
    if (g_pwm_buffer_update_required) {
        IS31FL3218_write_pwm_buffer(g_pwm_buffer);
        is31fl3218_write_pwm_buffer(g_pwm_buffer);
        // Load PWM registers and LED Control register data
        IS31FL3218_write_register(ISSI_REG_UPDATE, 0x01);
        is31fl3218_write_register(ISSI_REG_UPDATE, 0x01);
    }
    g_pwm_buffer_update_required = false;
}

M drivers/led/issi/is31fl3218.h => drivers/led/issi/is31fl3218.h +4 -4
@@ 20,7 20,7 @@
#include <stdbool.h>
#include <string.h>

void IS31FL3218_init(void);
void IS31FL3218_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void IS31FL3218_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
void IS31FL3218_update_pwm_buffers(void);
void is31fl3218_init(void);
void is31fl3218_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void is31fl3218_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
void is31fl3218_update_pwm_buffers(void);

M drivers/led/issi/is31fl3731.c => drivers/led/issi/is31fl3731.c +25 -25
@@ 63,7 63,7 @@ uint8_t g_twi_transfer_buffer[20];
// These buffers match the IS31FL3731 PWM registers 0x24-0xB3.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in IS31FL3731_write_pwm_buffer() but it's
// buffers and the transfers in is31fl3731_write_pwm_buffer() but it's
// probably not worth the extra complexity.
uint8_t g_pwm_buffer[DRIVER_COUNT][144];
bool    g_pwm_buffer_update_required[DRIVER_COUNT] = {false};


@@ 85,7 85,7 @@ bool    g_led_control_registers_update_required[DRIVER_COUNT] = {false};
// 0x0E - R17,G15,G14,G13,G12,G11,G10,G09
// 0x10 - R16,R15,R14,R13,R12,R11,R10,R09

void IS31FL3731_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
    g_twi_transfer_buffer[0] = reg;
    g_twi_transfer_buffer[1] = data;



@@ 98,7 98,7 @@ void IS31FL3731_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
#endif
}

void IS31FL3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
    // assumes bank is already selected

    // transmit PWM registers in 9 transfers of 16 bytes


@@ 123,62 123,62 @@ void IS31FL3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
    }
}

void IS31FL3731_init(uint8_t addr) {
void is31fl3731_init(uint8_t addr) {
    // In order to avoid the LEDs being driven with garbage data
    // in the LED driver's PWM registers, first enable software shutdown,
    // then set up the mode and other settings, clear the PWM registers,
    // then disable software shutdown.

    // select "function register" bank
    IS31FL3731_write_register(addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG);
    is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG);

    // enable software shutdown
    IS31FL3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x00);
    is31fl3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x00);
#ifdef ISSI_3731_DEGHOST // set to enable de-ghosting of the array
    IS31FL3731_write_register(addr, ISSI_REG_GHOST_IMAGE_PREVENTION, 0x10);
    is31fl3731_write_register(addr, ISSI_REG_GHOST_IMAGE_PREVENTION, 0x10);
#endif

    // this delay was copied from other drivers, might not be needed
    wait_ms(10);

    // picture mode
    IS31FL3731_write_register(addr, ISSI_REG_CONFIG, ISSI_REG_CONFIG_PICTUREMODE);
    is31fl3731_write_register(addr, ISSI_REG_CONFIG, ISSI_REG_CONFIG_PICTUREMODE);
    // display frame 0
    IS31FL3731_write_register(addr, ISSI_REG_PICTUREFRAME, 0x00);
    is31fl3731_write_register(addr, ISSI_REG_PICTUREFRAME, 0x00);
    // audio sync off
    IS31FL3731_write_register(addr, ISSI_REG_AUDIOSYNC, 0x00);
    is31fl3731_write_register(addr, ISSI_REG_AUDIOSYNC, 0x00);

    // select bank 0
    IS31FL3731_write_register(addr, ISSI_COMMANDREGISTER, 0);
    is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, 0);

    // turn off all LEDs in the LED control register
    for (int i = 0x00; i <= 0x11; i++) {
        IS31FL3731_write_register(addr, i, 0x00);
        is31fl3731_write_register(addr, i, 0x00);
    }

    // turn off all LEDs in the blink control register (not really needed)
    for (int i = 0x12; i <= 0x23; i++) {
        IS31FL3731_write_register(addr, i, 0x00);
        is31fl3731_write_register(addr, i, 0x00);
    }

    // set PWM on all LEDs to 0
    for (int i = 0x24; i <= 0xB3; i++) {
        IS31FL3731_write_register(addr, i, 0x00);
        is31fl3731_write_register(addr, i, 0x00);
    }

    // select "function register" bank
    IS31FL3731_write_register(addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG);
    is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG);

    // disable software shutdown
    IS31FL3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x01);
    is31fl3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x01);

    // select bank 0 and leave it selected.
    // most usage after initialization is just writing PWM buffers in bank 0
    // as there's not much point in double-buffering
    IS31FL3731_write_register(addr, ISSI_COMMANDREGISTER, 0);
    is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, 0);
}

void IS31FL3731_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
void is31fl3731_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    is31_led led;
    if (index >= 0 && index < RGB_MATRIX_LED_COUNT) {
        memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));


@@ 194,13 194,13 @@ void IS31FL3731_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    }
}

void IS31FL3731_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
void is31fl3731_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
    for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
        IS31FL3731_set_color(i, red, green, blue);
        is31fl3731_set_color(i, red, green, blue);
    }
}

void IS31FL3731_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
void is31fl3731_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
    is31_led led;
    memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));



@@ 230,17 230,17 @@ void IS31FL3731_set_led_control_register(uint8_t index, bool red, bool green, bo
    g_led_control_registers_update_required[led.driver] = true;
}

void IS31FL3731_update_pwm_buffers(uint8_t addr, uint8_t index) {
void is31fl3731_update_pwm_buffers(uint8_t addr, uint8_t index) {
    if (g_pwm_buffer_update_required[index]) {
        IS31FL3731_write_pwm_buffer(addr, g_pwm_buffer[index]);
        is31fl3731_write_pwm_buffer(addr, g_pwm_buffer[index]);
    }
    g_pwm_buffer_update_required[index] = false;
}

void IS31FL3731_update_led_control_registers(uint8_t addr, uint8_t index) {
void is31fl3731_update_led_control_registers(uint8_t addr, uint8_t index) {
    if (g_led_control_registers_update_required[index]) {
        for (int i = 0; i < 18; i++) {
            IS31FL3731_write_register(addr, i, g_led_control_registers[index][i]);
            is31fl3731_write_register(addr, i, g_led_control_registers[index][i]);
        }
    }
    g_led_control_registers_update_required[index] = false;

M drivers/led/issi/is31fl3731.h => drivers/led/issi/is31fl3731.h +8 -8
@@ 31,21 31,21 @@ typedef struct is31_led {

extern const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT];

void IS31FL3731_init(uint8_t addr);
void IS31FL3731_write_register(uint8_t addr, uint8_t reg, uint8_t data);
void IS31FL3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
void is31fl3731_init(uint8_t addr);
void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data);
void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);

void IS31FL3731_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void IS31FL3731_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
void is31fl3731_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void is31fl3731_set_color_all(uint8_t red, uint8_t green, uint8_t blue);

void IS31FL3731_set_led_control_register(uint8_t index, bool red, bool green, bool blue);
void is31fl3731_set_led_control_register(uint8_t index, bool red, bool green, bool blue);

// This should not be called from an interrupt
// (eg. from a timer interrupt).
// Call this while idle (in between matrix scans).
// If the buffer is dirty, it will update the driver with the buffer.
void IS31FL3731_update_pwm_buffers(uint8_t addr, uint8_t index);
void IS31FL3731_update_led_control_registers(uint8_t addr, uint8_t index);
void is31fl3731_update_pwm_buffers(uint8_t addr, uint8_t index);
void is31fl3731_update_led_control_registers(uint8_t addr, uint8_t index);

#define C1_1 0x24
#define C1_2 0x25

M drivers/led/issi/is31fl3733.c => drivers/led/issi/is31fl3733.c +28 -28
@@ 80,7 80,7 @@ uint8_t g_twi_transfer_buffer[20];
// The control buffers match the PG0 LED On/Off registers.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in IS31FL3733_write_pwm_buffer() but it's
// buffers and the transfers in is31fl3733_write_pwm_buffer() but it's
// probably not worth the extra complexity.
uint8_t g_pwm_buffer[DRIVER_COUNT][192];
bool    g_pwm_buffer_update_required[DRIVER_COUNT] = {false};


@@ 88,7 88,7 @@ bool    g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
uint8_t g_led_control_registers[DRIVER_COUNT][24]             = {0};
bool    g_led_control_registers_update_required[DRIVER_COUNT] = {false};

bool IS31FL3733_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
bool is31fl3733_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
    // If the transaction fails function returns false.
    g_twi_transfer_buffer[0] = reg;
    g_twi_transfer_buffer[1] = data;


@@ 107,7 107,7 @@ bool IS31FL3733_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
    return true;
}

bool IS31FL3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
bool is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
    // Assumes PG1 is already selected.
    // If any of the transactions fails function returns false.
    // Transmit PWM registers in 12 transfers of 16 bytes.


@@ 138,7 138,7 @@ bool IS31FL3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
    return true;
}

void IS31FL3733_init(uint8_t addr, uint8_t sync) {
void is31fl3733_init(uint8_t addr, uint8_t sync) {
    // In order to avoid the LEDs being driven with garbage data
    // in the LED driver's PWM registers, shutdown is enabled last.
    // Set up the mode and other settings, clear the PWM registers,


@@ 146,45 146,45 @@ void IS31FL3733_init(uint8_t addr, uint8_t sync) {
    // Sync is passed so set it according to the datasheet.

    // Unlock the command register.
    IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
    is31fl3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);

    // Select PG0
    IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
    is31fl3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
    // Turn off all LEDs.
    for (int i = 0x00; i <= 0x17; i++) {
        IS31FL3733_write_register(addr, i, 0x00);
        is31fl3733_write_register(addr, i, 0x00);
    }

    // Unlock the command register.
    IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
    is31fl3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);

    // Select PG1
    IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
    is31fl3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
    // Set PWM on all LEDs to 0
    // No need to setup Breath registers to PWM as that is the default.
    for (int i = 0x00; i <= 0xBF; i++) {
        IS31FL3733_write_register(addr, i, 0x00);
        is31fl3733_write_register(addr, i, 0x00);
    }

    // Unlock the command register.
    IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
    is31fl3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);

    // Select PG3
    IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
    is31fl3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
    // Set de-ghost pull-up resistors (SWx)
    IS31FL3733_write_register(addr, ISSI_REG_SWPULLUP, ISSI_SWPULLUP);
    is31fl3733_write_register(addr, ISSI_REG_SWPULLUP, ISSI_SWPULLUP);
    // Set de-ghost pull-down resistors (CSx)
    IS31FL3733_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
    is31fl3733_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
    // Set global current to maximum.
    IS31FL3733_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
    is31fl3733_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
    // Disable software shutdown.
    IS31FL3733_write_register(addr, ISSI_REG_CONFIGURATION, ((sync & 0b11) << 6) | ((ISSI_PWM_FREQUENCY & 0b111) << 3) | 0x01);
    is31fl3733_write_register(addr, ISSI_REG_CONFIGURATION, ((sync & 0b11) << 6) | ((ISSI_PWM_FREQUENCY & 0b111) << 3) | 0x01);

    // Wait 10ms to ensure the device has woken up.
    wait_ms(10);
}

void IS31FL3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
void is31fl3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    is31_led led;
    if (index >= 0 && index < RGB_MATRIX_LED_COUNT) {
        memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));


@@ 199,13 199,13 @@ void IS31FL3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    }
}

void IS31FL3733_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
void is31fl3733_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
    for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
        IS31FL3733_set_color(i, red, green, blue);
        is31fl3733_set_color(i, red, green, blue);
    }
}

void IS31FL3733_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
void is31fl3733_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
    is31_led led;
    memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));



@@ 235,28 235,28 @@ void IS31FL3733_set_led_control_register(uint8_t index, bool red, bool green, bo
    g_led_control_registers_update_required[led.driver] = true;
}

void IS31FL3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
    if (g_pwm_buffer_update_required[index]) {
        // Firstly we need to unlock the command register and select PG1.
        IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
        is31fl3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        is31fl3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);

        // If any of the transactions fail we risk writing dirty PG0,
        // refresh page 0 just in case.
        if (!IS31FL3733_write_pwm_buffer(addr, g_pwm_buffer[index])) {
        if (!is31fl3733_write_pwm_buffer(addr, g_pwm_buffer[index])) {
            g_led_control_registers_update_required[index] = true;
        }
    }
    g_pwm_buffer_update_required[index] = false;
}

void IS31FL3733_update_led_control_registers(uint8_t addr, uint8_t index) {
void is31fl3733_update_led_control_registers(uint8_t addr, uint8_t index) {
    if (g_led_control_registers_update_required[index]) {
        // Firstly we need to unlock the command register and select PG0
        IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
        is31fl3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        is31fl3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
        for (int i = 0; i < 24; i++) {
            IS31FL3733_write_register(addr, i, g_led_control_registers[index][i]);
            is31fl3733_write_register(addr, i, g_led_control_registers[index][i]);
        }
    }
    g_led_control_registers_update_required[index] = false;

M drivers/led/issi/is31fl3733.h => drivers/led/issi/is31fl3733.h +8 -8
@@ 32,21 32,21 @@ typedef struct is31_led {

extern const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT];

void IS31FL3733_init(uint8_t addr, uint8_t sync);
bool IS31FL3733_write_register(uint8_t addr, uint8_t reg, uint8_t data);
bool IS31FL3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
void is31fl3733_init(uint8_t addr, uint8_t sync);
bool is31fl3733_write_register(uint8_t addr, uint8_t reg, uint8_t data);
bool is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);

void IS31FL3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void IS31FL3733_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
void is31fl3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void is31fl3733_set_color_all(uint8_t red, uint8_t green, uint8_t blue);

void IS31FL3733_set_led_control_register(uint8_t index, bool red, bool green, bool blue);
void is31fl3733_set_led_control_register(uint8_t index, bool red, bool green, bool blue);

// This should not be called from an interrupt
// (eg. from a timer interrupt).
// Call this while idle (in between matrix scans).
// If the buffer is dirty, it will update the driver with the buffer.
void IS31FL3733_update_pwm_buffers(uint8_t addr, uint8_t index);
void IS31FL3733_update_led_control_registers(uint8_t addr, uint8_t index);
void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index);
void is31fl3733_update_led_control_registers(uint8_t addr, uint8_t index);

#define PUR_0R 0x00   // No PUR resistor
#define PUR_05KR 0x02 // 0.5k Ohm resistor in t_NOL

M drivers/led/issi/is31fl3736.c => drivers/led/issi/is31fl3736.c +33 -33
@@ 74,7 74,7 @@ uint8_t g_twi_transfer_buffer[20];
// The control buffers match the PG0 LED On/Off registers.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in IS31FL3736_write_pwm_buffer() but it's
// buffers and the transfers in is31fl3736_write_pwm_buffer() but it's
// probably not worth the extra complexity.
uint8_t g_pwm_buffer[DRIVER_COUNT][192];
bool    g_pwm_buffer_update_required[DRIVER_COUNT] = {false};


@@ 82,7 82,7 @@ bool    g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
uint8_t g_led_control_registers[DRIVER_COUNT][24] = {{0}, {0}};
bool    g_led_control_registers_update_required   = false;

void IS31FL3736_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
void is31fl3736_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
    g_twi_transfer_buffer[0] = reg;
    g_twi_transfer_buffer[1] = data;



@@ 95,7 95,7 @@ void IS31FL3736_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
#endif
}

void IS31FL3736_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
void is31fl3736_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
    // assumes PG1 is already selected

    // transmit PWM registers in 12 transfers of 16 bytes


@@ 119,52 119,52 @@ void IS31FL3736_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
    }
}

void IS31FL3736_init(uint8_t addr) {
void is31fl3736_init(uint8_t addr) {
    // In order to avoid the LEDs being driven with garbage data
    // in the LED driver's PWM registers, shutdown is enabled last.
    // Set up the mode and other settings, clear the PWM registers,
    // then disable software shutdown.

    // Unlock the command register.
    IS31FL3736_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
    is31fl3736_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);

    // Select PG0
    IS31FL3736_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
    is31fl3736_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
    // Turn off all LEDs.
    for (int i = 0x00; i <= 0x17; i++) {
        IS31FL3736_write_register(addr, i, 0x00);
        is31fl3736_write_register(addr, i, 0x00);
    }

    // Unlock the command register.
    IS31FL3736_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
    is31fl3736_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);

    // Select PG1
    IS31FL3736_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
    is31fl3736_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
    // Set PWM on all LEDs to 0
    // No need to setup Breath registers to PWM as that is the default.
    for (int i = 0x00; i <= 0xBF; i++) {
        IS31FL3736_write_register(addr, i, 0x00);
        is31fl3736_write_register(addr, i, 0x00);
    }

    // Unlock the command register.
    IS31FL3736_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
    is31fl3736_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);

    // Select PG3
    IS31FL3736_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
    is31fl3736_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
    // Set de-ghost pull-up resistors (SWx)
    IS31FL3736_write_register(addr, ISSI_REG_SWPULLUP, ISSI_SWPULLUP);
    is31fl3736_write_register(addr, ISSI_REG_SWPULLUP, ISSI_SWPULLUP);
    // Set de-ghost pull-down resistors (CSx)
    IS31FL3736_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
    is31fl3736_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
    // Set global current to maximum.
    IS31FL3736_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
    is31fl3736_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
    // Disable software shutdown.
    IS31FL3736_write_register(addr, ISSI_REG_CONFIGURATION, 0x01);
    is31fl3736_write_register(addr, ISSI_REG_CONFIGURATION, 0x01);

    // Wait 10ms to ensure the device has woken up.
    wait_ms(10);
}

void IS31FL3736_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
void is31fl3736_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    is31_led led;
    if (index >= 0 && index < RGB_MATRIX_LED_COUNT) {
        memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));


@@ 179,13 179,13 @@ void IS31FL3736_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    }
}

void IS31FL3736_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
void is31fl3736_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
    for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
        IS31FL3736_set_color(i, red, green, blue);
        is31fl3736_set_color(i, red, green, blue);
    }
}

void IS31FL3736_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
void is31fl3736_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
    is31_led led;
    memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));



@@ 229,7 229,7 @@ void IS31FL3736_set_led_control_register(uint8_t index, bool red, bool green, bo
    g_led_control_registers_update_required = true;
}

void IS31FL3736_mono_set_brightness(int index, uint8_t value) {
void is31fl3736_mono_set_brightness(int index, uint8_t value) {
    if (index >= 0 && index < 96) {
        // Index in range 0..95 -> A1..A8, B1..B8, etc.
        // Map index 0..95 to registers 0x00..0xBE (interleaved)


@@ 239,13 239,13 @@ void IS31FL3736_mono_set_brightness(int index, uint8_t value) {
    }
}

void IS31FL3736_mono_set_brightness_all(uint8_t value) {
void is31fl3736_mono_set_brightness_all(uint8_t value) {
    for (int i = 0; i < 96; i++) {
        IS31FL3736_mono_set_brightness(i, value);
        is31fl3736_mono_set_brightness(i, value);
    }
}

void IS31FL3736_mono_set_led_control_register(uint8_t index, bool enabled) {
void is31fl3736_mono_set_led_control_register(uint8_t index, bool enabled) {
    // Index in range 0..95 -> A1..A8, B1..B8, etc.

    // Map index 0..95 to registers 0x00..0xBE (interleaved)


@@ 263,25 263,25 @@ void IS31FL3736_mono_set_led_control_register(uint8_t index, bool enabled) {
    g_led_control_registers_update_required = true;
}

void IS31FL3736_update_pwm_buffers(uint8_t addr, uint8_t index) {
void is31fl3736_update_pwm_buffers(uint8_t addr, uint8_t index) {
    if (g_pwm_buffer_update_required[index]) {
        // Firstly we need to unlock the command register and select PG1
        IS31FL3736_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        IS31FL3736_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
        is31fl3736_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        is31fl3736_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);

        IS31FL3736_write_pwm_buffer(addr, g_pwm_buffer[index]);
        is31fl3736_write_pwm_buffer(addr, g_pwm_buffer[index]);
    }
    g_pwm_buffer_update_required[index] = false;
}

void IS31FL3736_update_led_control_registers(uint8_t addr1, uint8_t addr2) {
void is31fl3736_update_led_control_registers(uint8_t addr1, uint8_t addr2) {
    if (g_led_control_registers_update_required) {
        // Firstly we need to unlock the command register and select PG0
        IS31FL3736_write_register(addr1, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        IS31FL3736_write_register(addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
        is31fl3736_write_register(addr1, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        is31fl3736_write_register(addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
        for (int i = 0; i < 24; i++) {
            IS31FL3736_write_register(addr1, i, g_led_control_registers[0][i]);
            // IS31FL3736_write_register(addr2, i, g_led_control_registers[1][i]);
            is31fl3736_write_register(addr1, i, g_led_control_registers[0][i]);
            // is31fl3736_write_register(addr2, i, g_led_control_registers[1][i]);
        }
        g_led_control_registers_update_required = false;
    }

M drivers/led/issi/is31fl3736.h => drivers/led/issi/is31fl3736.h +11 -11
@@ 42,25 42,25 @@ typedef struct is31_led {

extern const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT];

void IS31FL3736_init(uint8_t addr);
void IS31FL3736_write_register(uint8_t addr, uint8_t reg, uint8_t data);
void IS31FL3736_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
void is31fl3736_init(uint8_t addr);
void is31fl3736_write_register(uint8_t addr, uint8_t reg, uint8_t data);
void is31fl3736_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);

void IS31FL3736_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void IS31FL3736_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
void is31fl3736_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void is31fl3736_set_color_all(uint8_t red, uint8_t green, uint8_t blue);

void IS31FL3736_set_led_control_register(uint8_t index, bool red, bool green, bool blue);
void is31fl3736_set_led_control_register(uint8_t index, bool red, bool green, bool blue);

void IS31FL3736_mono_set_brightness(int index, uint8_t value);
void IS31FL3736_mono_set_brightness_all(uint8_t value);
void IS31FL3736_mono_set_led_control_register(uint8_t index, bool enabled);
void is31fl3736_mono_set_brightness(int index, uint8_t value);
void is31fl3736_mono_set_brightness_all(uint8_t value);
void is31fl3736_mono_set_led_control_register(uint8_t index, bool enabled);

// This should not be called from an interrupt
// (eg. from a timer interrupt).
// Call this while idle (in between matrix scans).
// If the buffer is dirty, it will update the driver with the buffer.
void IS31FL3736_update_pwm_buffers(uint8_t addr, uint8_t index);
void IS31FL3736_update_led_control_registers(uint8_t addr, uint8_t index);
void is31fl3736_update_pwm_buffers(uint8_t addr, uint8_t index);
void is31fl3736_update_led_control_registers(uint8_t addr, uint8_t index);

#define PUR_0R 0x00   // No PUR resistor
#define PUR_05KR 0x01 // 0.5k Ohm resistor

M drivers/led/issi/is31fl3737.c => drivers/led/issi/is31fl3737.c +28 -28
@@ 80,7 80,7 @@ uint8_t g_twi_transfer_buffer[20];
// The control buffers match the PG0 LED On/Off registers.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in IS31FL3737_write_pwm_buffer() but it's
// buffers and the transfers in is31fl3737_write_pwm_buffer() but it's
// probably not worth the extra complexity.

uint8_t g_pwm_buffer[DRIVER_COUNT][192];


@@ 89,7 89,7 @@ bool    g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
uint8_t g_led_control_registers[DRIVER_COUNT][24]             = {0};
bool    g_led_control_registers_update_required[DRIVER_COUNT] = {false};

void IS31FL3737_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
void is31fl3737_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
    g_twi_transfer_buffer[0] = reg;
    g_twi_transfer_buffer[1] = data;



@@ 102,7 102,7 @@ void IS31FL3737_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
#endif
}

void IS31FL3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
void is31fl3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
    // assumes PG1 is already selected

    // transmit PWM registers in 12 transfers of 16 bytes


@@ 126,52 126,52 @@ void IS31FL3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
    }
}

void IS31FL3737_init(uint8_t addr) {
void is31fl3737_init(uint8_t addr) {
    // In order to avoid the LEDs being driven with garbage data
    // in the LED driver's PWM registers, shutdown is enabled last.
    // Set up the mode and other settings, clear the PWM registers,
    // then disable software shutdown.

    // Unlock the command register.
    IS31FL3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
    is31fl3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);

    // Select PG0
    IS31FL3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
    is31fl3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
    // Turn off all LEDs.
    for (int i = 0x00; i <= 0x17; i++) {
        IS31FL3737_write_register(addr, i, 0x00);
        is31fl3737_write_register(addr, i, 0x00);
    }

    // Unlock the command register.
    IS31FL3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
    is31fl3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);

    // Select PG1
    IS31FL3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
    is31fl3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
    // Set PWM on all LEDs to 0
    // No need to setup Breath registers to PWM as that is the default.
    for (int i = 0x00; i <= 0xBF; i++) {
        IS31FL3737_write_register(addr, i, 0x00);
        is31fl3737_write_register(addr, i, 0x00);
    }

    // Unlock the command register.
    IS31FL3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
    is31fl3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);

    // Select PG3
    IS31FL3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
    is31fl3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
    // Set de-ghost pull-up resistors (SWx)
    IS31FL3737_write_register(addr, ISSI_REG_SWPULLUP, ISSI_SWPULLUP);
    is31fl3737_write_register(addr, ISSI_REG_SWPULLUP, ISSI_SWPULLUP);
    // Set de-ghost pull-down resistors (CSx)
    IS31FL3737_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
    is31fl3737_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
    // Set global current to maximum.
    IS31FL3737_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
    is31fl3737_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
    // Disable software shutdown.
    IS31FL3737_write_register(addr, ISSI_REG_CONFIGURATION, ((ISSI_PWM_FREQUENCY & 0b111) << 3) | 0x01);
    is31fl3737_write_register(addr, ISSI_REG_CONFIGURATION, ((ISSI_PWM_FREQUENCY & 0b111) << 3) | 0x01);

    // Wait 10ms to ensure the device has woken up.
    wait_ms(10);
}

void IS31FL3737_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
void is31fl3737_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    is31_led led;
    if (index >= 0 && index < RGB_MATRIX_LED_COUNT) {
        memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));


@@ 186,13 186,13 @@ void IS31FL3737_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    }
}

void IS31FL3737_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
void is31fl3737_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
    for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
        IS31FL3737_set_color(i, red, green, blue);
        is31fl3737_set_color(i, red, green, blue);
    }
}

void IS31FL3737_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
void is31fl3737_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
    is31_led led;
    memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));



@@ 222,24 222,24 @@ void IS31FL3737_set_led_control_register(uint8_t index, bool red, bool green, bo
    g_led_control_registers_update_required[led.driver] = true;
}

void IS31FL3737_update_pwm_buffers(uint8_t addr, uint8_t index) {
void is31fl3737_update_pwm_buffers(uint8_t addr, uint8_t index) {
    if (g_pwm_buffer_update_required[index]) {
        // Firstly we need to unlock the command register and select PG1
        IS31FL3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        IS31FL3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
        is31fl3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        is31fl3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);

        IS31FL3737_write_pwm_buffer(addr, g_pwm_buffer[index]);
        is31fl3737_write_pwm_buffer(addr, g_pwm_buffer[index]);
    }
    g_pwm_buffer_update_required[index] = false;
}

void IS31FL3737_update_led_control_registers(uint8_t addr, uint8_t index) {
void is31fl3737_update_led_control_registers(uint8_t addr, uint8_t index) {
    if (g_led_control_registers_update_required[index]) {
        // Firstly we need to unlock the command register and select PG0
        IS31FL3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        IS31FL3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
        is31fl3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        is31fl3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
        for (int i = 0; i < 24; i++) {
            IS31FL3737_write_register(addr, i, g_led_control_registers[index][i]);
            is31fl3737_write_register(addr, i, g_led_control_registers[index][i]);
        }
    }
    g_led_control_registers_update_required[index] = false;

M drivers/led/issi/is31fl3737.h => drivers/led/issi/is31fl3737.h +8 -8
@@ 33,21 33,21 @@ typedef struct is31_led {

extern const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT];

void IS31FL3737_init(uint8_t addr);
void IS31FL3737_write_register(uint8_t addr, uint8_t reg, uint8_t data);
void IS31FL3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
void is31fl3737_init(uint8_t addr);
void is31fl3737_write_register(uint8_t addr, uint8_t reg, uint8_t data);
void is31fl3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);

void IS31FL3737_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void IS31FL3737_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
void is31fl3737_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void is31fl3737_set_color_all(uint8_t red, uint8_t green, uint8_t blue);

void IS31FL3737_set_led_control_register(uint8_t index, bool red, bool green, bool blue);
void is31fl3737_set_led_control_register(uint8_t index, bool red, bool green, bool blue);

// This should not be called from an interrupt
// (eg. from a timer interrupt).
// Call this while idle (in between matrix scans).
// If the buffer is dirty, it will update the driver with the buffer.
void IS31FL3737_update_pwm_buffers(uint8_t addr, uint8_t index);
void IS31FL3737_update_led_control_registers(uint8_t addr, uint8_t index);
void is31fl3737_update_pwm_buffers(uint8_t addr, uint8_t index);
void is31fl3737_update_led_control_registers(uint8_t addr, uint8_t index);

#define PUR_0R 0x00   // No PUR resistor
#define PUR_05KR 0x01 // 0.5k Ohm resistor in t_NOL

M drivers/led/issi/is31fl3741.c => drivers/led/issi/is31fl3741.c +29 -29
@@ 82,7 82,7 @@ uint8_t g_twi_transfer_buffer[20] = {0xFF};
// The scaling buffers match the PG2 and PG3 LED On/Off registers.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in IS31FL3741_write_pwm_buffer() but it's
// buffers and the transfers in is31fl3741_write_pwm_buffer() but it's
// probably not worth the extra complexity.
uint8_t g_pwm_buffer[DRIVER_COUNT][ISSI_MAX_LEDS];
bool    g_pwm_buffer_update_required[DRIVER_COUNT]        = {false};


@@ 90,7 90,7 @@ bool    g_scaling_registers_update_required[DRIVER_COUNT] = {false};

uint8_t g_scaling_registers[DRIVER_COUNT][ISSI_MAX_LEDS];

void IS31FL3741_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
void is31fl3741_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
    g_twi_transfer_buffer[0] = reg;
    g_twi_transfer_buffer[1] = data;



@@ 103,14 103,14 @@ void IS31FL3741_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
#endif
}

bool IS31FL3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
bool is31fl3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
    // Assume PG0 is already selected

    for (int i = 0; i < 342; i += 18) {
        if (i == 180) {
            // unlock the command register and select PG1
            IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
            IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM1);
            is31fl3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
            is31fl3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM1);
        }

        g_twi_transfer_buffer[0] = i % 180;


@@ 148,7 148,7 @@ bool IS31FL3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
    return true;
}

void IS31FL3741_init(uint8_t addr) {
void is31fl3741_init(uint8_t addr) {
    // In order to avoid the LEDs being driven with garbage data
    // in the LED driver's PWM registers, shutdown is enabled last.
    // Set up the mode and other settings, clear the PWM registers,


@@ 156,26 156,26 @@ void IS31FL3741_init(uint8_t addr) {
    // Unlock the command register.

    // Unlock the command register.
    IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
    is31fl3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);

    // Select PG4
    IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
    is31fl3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);

    // Set to Normal operation
    IS31FL3741_write_register(addr, ISSI_REG_CONFIGURATION, 0x01);
    is31fl3741_write_register(addr, ISSI_REG_CONFIGURATION, 0x01);

    // Set Golbal Current Control Register
    IS31FL3741_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
    is31fl3741_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
    // Set Pull up & Down for SWx CSy
    IS31FL3741_write_register(addr, ISSI_REG_PULLDOWNUP, ((ISSI_CSPULLUP << 4) | ISSI_SWPULLUP));
    is31fl3741_write_register(addr, ISSI_REG_PULLDOWNUP, ((ISSI_CSPULLUP << 4) | ISSI_SWPULLUP));

    // IS31FL3741_update_led_scaling_registers(addr, 0xFF, 0xFF, 0xFF);
    // is31fl3741_update_led_scaling_registers(addr, 0xFF, 0xFF, 0xFF);

    // Wait 10ms to ensure the device has woken up.
    wait_ms(10);
}

void IS31FL3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
void is31fl3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    is31_led led;
    if (index >= 0 && index < RGB_MATRIX_LED_COUNT) {
        memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));


@@ 190,13 190,13 @@ void IS31FL3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    }
}

void IS31FL3741_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
void is31fl3741_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
    for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
        IS31FL3741_set_color(i, red, green, blue);
        is31fl3741_set_color(i, red, green, blue);
    }
}

void IS31FL3741_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
void is31fl3741_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
    is31_led led;
    memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));



@@ 221,19 221,19 @@ void IS31FL3741_set_led_control_register(uint8_t index, bool red, bool green, bo
    g_scaling_registers_update_required[led.driver] = true;
}

void IS31FL3741_update_pwm_buffers(uint8_t addr, uint8_t index) {
void is31fl3741_update_pwm_buffers(uint8_t addr, uint8_t index) {
    if (g_pwm_buffer_update_required[index]) {
        // unlock the command register and select PG2
        IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM0);
        is31fl3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        is31fl3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM0);

        IS31FL3741_write_pwm_buffer(addr, g_pwm_buffer[index]);
        is31fl3741_write_pwm_buffer(addr, g_pwm_buffer[index]);
    }

    g_pwm_buffer_update_required[index] = false;
}

void IS31FL3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue) {
void is31fl3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue) {
    g_pwm_buffer[pled->driver][pled->r] = red;
    g_pwm_buffer[pled->driver][pled->g] = green;
    g_pwm_buffer[pled->driver][pled->b] = blue;


@@ 241,31 241,31 @@ void IS31FL3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green,
    g_pwm_buffer_update_required[pled->driver] = true;
}

void IS31FL3741_update_led_control_registers(uint8_t addr, uint8_t index) {
void is31fl3741_update_led_control_registers(uint8_t addr, uint8_t index) {
    if (g_scaling_registers_update_required[index]) {
        // unlock the command register and select PG2
        IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_SCALING_0);
        is31fl3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        is31fl3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_SCALING_0);

        // CS1_SW1 to CS30_SW6 are on PG2
        for (int i = CS1_SW1; i <= CS30_SW6; ++i) {
            IS31FL3741_write_register(addr, i, g_scaling_registers[index][i]);
            is31fl3741_write_register(addr, i, g_scaling_registers[index][i]);
        }

        // unlock the command register and select PG3
        IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_SCALING_1);
        is31fl3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        is31fl3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_SCALING_1);

        // CS1_SW7 to CS39_SW9 are on PG3
        for (int i = CS1_SW7; i <= CS39_SW9; ++i) {
            IS31FL3741_write_register(addr, i - CS1_SW7, g_scaling_registers[index][i]);
            is31fl3741_write_register(addr, i - CS1_SW7, g_scaling_registers[index][i]);
        }

        g_scaling_registers_update_required[index] = false;
    }
}

void IS31FL3741_set_scaling_registers(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue) {
void is31fl3741_set_scaling_registers(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue) {
    g_scaling_registers[pled->driver][pled->r] = red;
    g_scaling_registers[pled->driver][pled->g] = green;
    g_scaling_registers[pled->driver][pled->b] = blue;

M drivers/led/issi/is31fl3741.h => drivers/led/issi/is31fl3741.h +10 -10
@@ 32,24 32,24 @@ typedef struct is31_led {

extern const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT];

void IS31FL3741_init(uint8_t addr);
void IS31FL3741_write_register(uint8_t addr, uint8_t reg, uint8_t data);
bool IS31FL3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
void is31fl3741_init(uint8_t addr);
void is31fl3741_write_register(uint8_t addr, uint8_t reg, uint8_t data);
bool is31fl3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);

void IS31FL3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void IS31FL3741_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
void is31fl3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void is31fl3741_set_color_all(uint8_t red, uint8_t green, uint8_t blue);

void IS31FL3741_set_led_control_register(uint8_t index, bool red, bool green, bool blue);
void is31fl3741_set_led_control_register(uint8_t index, bool red, bool green, bool blue);

// This should not be called from an interrupt
// (eg. from a timer interrupt).
// Call this while idle (in between matrix scans).
// If the buffer is dirty, it will update the driver with the buffer.
void IS31FL3741_update_pwm_buffers(uint8_t addr, uint8_t index);
void IS31FL3741_update_led_control_registers(uint8_t addr, uint8_t index);
void IS31FL3741_set_scaling_registers(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);
void is31fl3741_update_pwm_buffers(uint8_t addr, uint8_t index);
void is31fl3741_update_led_control_registers(uint8_t addr, uint8_t index);
void is31fl3741_set_scaling_registers(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);

void IS31FL3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);
void is31fl3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);

#define PUR_0R 0x00   // No PUR resistor
#define PUR_05KR 0x01 // 0.5k Ohm resistor

M keyboards/0xcb/splaytoraid/info.json => keyboards/0xcb/splaytoraid/info.json +1 -1
@@ 36,7 36,7 @@
        ]
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 4, "matrix": [0, 2], "x": 0, "y": 0},
            {"flags": 4, "matrix": [1, 0], "x": 20, "y": 0},

M keyboards/1upkeyboards/1upocarina/info.json => keyboards/1upkeyboards/1upocarina/info.json +1 -1
@@ 40,7 40,7 @@
        "pin": "GP24"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
        { "flags": 4, "matrix": [0, 0], "x": 23, "y": 26 },
        { "flags": 4, "matrix": [0, 1], "x": 62, "y": 26 },

M keyboards/1upkeyboards/pi40/grid_v1_1/info.json => keyboards/1upkeyboards/pi40/grid_v1_1/info.json +1 -1
@@ 40,7 40,7 @@
        ]
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 1, "matrix": [0, 0], "x": 9, "y": 8},
            {"flags": 4, "matrix": [0, 1], "x": 28, "y": 8},

M keyboards/1upkeyboards/pi40/mit_v1_0/info.json => keyboards/1upkeyboards/pi40/mit_v1_0/info.json +1 -1
@@ 40,7 40,7 @@
        ]
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 1, "matrix": [0, 0], "x": 9, "y": 8},
            {"flags": 4, "matrix": [0, 1], "x": 28, "y": 8},

M keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/rules.mk => keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/rules.mk +0 -2
@@ 17,8 17,6 @@ MOUSEKEY_ENABLE       = no        # Mouse keys

LEADER_ENABLE         = yes
RGB_MATRIX_ENABLE     = yes
RGB_MATRIX_DRIVER     = WS2812
WS2812_DRIVER         = vendor
ENCODER_ENABLE        = yes
ENCODER_MAP_ENABLE    = yes
OLED_ENABLE           = yes

M keyboards/1upkeyboards/pi40/mit_v1_1/info.json => keyboards/1upkeyboards/pi40/mit_v1_1/info.json +1 -1
@@ 40,7 40,7 @@
        ]
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 1, "matrix": [0, 0], "x": 9, "y": 8},
            {"flags": 4, "matrix": [0, 1], "x": 28, "y": 8},

M keyboards/1upkeyboards/pi50/info.json => keyboards/1upkeyboards/pi50/info.json +1 -1
@@ 38,7 38,7 @@
        ]
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "max_brightness": 150,
        "animations": {
            "solid_color": true,

M keyboards/1upkeyboards/pi60/info.json => keyboards/1upkeyboards/pi60/info.json +1 -1
@@ 41,7 41,7 @@
        ]
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 2, "x": 17, "y": 50},
            {"flags": 2, "x": 37, "y": 50},

M keyboards/1upkeyboards/pi60_hse/info.json => keyboards/1upkeyboards/pi60_hse/info.json +1 -1
@@ 32,7 32,7 @@
        "rows": ["GP4", "GP3", "GP2", "GP1", "GP0", "GP21"]
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 2, "x": 98, "y": 51},
            {"flags": 2, "x": 68, "y": 51},

M keyboards/1upkeyboards/pi60_rgb/info.json => keyboards/1upkeyboards/pi60_rgb/info.json +1 -1
@@ 38,7 38,7 @@
        "enabled": true
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 1, "matrix": [5, 5], "x": 103, "y": 58},
            {"flags": 1, "matrix": [5, 10], "x": 159, "y": 58},

M keyboards/1upkeyboards/super16/info.json => keyboards/1upkeyboards/super16/info.json +1 -1
@@ 18,7 18,7 @@
    "sleep": true
  },
  "rgb_matrix": {
    "driver": "WS2812"
    "driver": "ws2812"
  },
  "matrix_pins": {
    "cols": ["D4", "C6", "F6", "F7"],

M keyboards/1upkeyboards/super16v2/info.json => keyboards/1upkeyboards/super16v2/info.json +1 -1
@@ 12,7 12,7 @@
      "pin": "B5"
    },
    "rgb_matrix": {
      "driver": "WS2812"
      "driver": "ws2812"
    },
    "matrix_pins": {
      "cols": ["D5", "D6", "C2", "D0"],

M keyboards/1upkeyboards/sweet16v2/kb2040/info.json => keyboards/1upkeyboards/sweet16v2/kb2040/info.json +1 -1
@@ 41,7 41,7 @@
        ]
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 4, "matrix": [0, 0], "x": 28, "y": 12},
            {"flags": 4, "matrix": [0, 1], "x": 84, "y": 12},

M keyboards/1upkeyboards/sweet16v2/pro_micro/info.json => keyboards/1upkeyboards/sweet16v2/pro_micro/info.json +1 -1
@@ 39,7 39,7 @@
        ]
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 4, "matrix": [0, 0], "x": 28, "y": 12},
            {"flags": 4, "matrix": [0, 1], "x": 84, "y": 12},

M keyboards/25keys/zinc/info.json => keyboards/25keys/zinc/info.json +1 -1
@@ 8,7 8,7 @@
    "device_version": "0.0.1"
   },
   "rgb_matrix": {
     "driver": "WS2812"
     "driver": "ws2812"
   },
  "processor": "atmega32u4",
  "bootloader": "caterina"

M keyboards/3keyecosystem/2key2/info.json => keyboards/3keyecosystem/2key2/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F4", "D7"],

M keyboards/4pplet/perk60_iso/rev_a/info.json => keyboards/4pplet/perk60_iso/rev_a/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["A1", "B12", "B14", "A2", "A0", "A3", "A4"],

M keyboards/abatskeyboardclub/nayeon/info.json => keyboards/abatskeyboardclub/nayeon/info.json +1 -1
@@ 25,7 25,7 @@
        "driver": "vendor"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "processor": "RP2040",
    "bootloader": "rp2040",

M keyboards/abko/ak84bt/info.json => keyboards/abko/ak84bt/info.json +1 -1
@@ 27,7 27,7 @@
    },
    "processor": "STM32F103",
    "rgb_matrix": {
        "driver": "IS31FL3733",
        "driver": "is31fl3733",
        "layout": [
            {"matrix": [0, 0], "x": 7, "y": 2, "flags": 4},
            {"matrix": [0, 2], "x": 34, "y": 2, "flags": 4},

M keyboards/acheron/apollo/87h/delta/info.json => keyboards/acheron/apollo/87h/delta/info.json +1 -1
@@ 8,7 8,7 @@
        "pin": "B15"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["C8", "C9", "A8", "A10", "C7", "C6", "B14", "B12", "B10", "B1", "C5", "C4", "A7", "B0", "C11", "A3", "B4"],

M keyboards/acheron/apollo/87h/gamma/info.json => keyboards/acheron/apollo/87h/gamma/info.json +1 -1
@@ 5,7 5,7 @@
        "device_version": "0.0.3"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B3", "A15", "A10", "A8", "B14", "B12", "B10", "B1", "B0", "A7", "A4", "A5", "A6", "C15", "A0", "A1"],

M keyboards/acheron/apollo/87htsc/info.json => keyboards/acheron/apollo/87htsc/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "B15"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["C8", "C9", "A8", "A10", "C7", "C6", "B14", "B12", "B10", "B1", "C5", "C4", "A7", "B0", "C11", "A3", "B4"],

M keyboards/acheron/apollo/88htsc/info.json => keyboards/acheron/apollo/88htsc/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "B15"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["C8", "C9", "A8", "A10", "C7", "C6", "B14", "B12", "B10", "B1", "C5", "C4", "A7", "B0", "C11", "A3", "B4"],

M keyboards/adafruit/macropad/info.json => keyboards/adafruit/macropad/info.json +1 -1
@@ 14,7 14,7 @@
        ]
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "bootmagic": {
        "matrix": [1, 2]

M keyboards/adm42/info.json => keyboards/adm42/info.json +1 -1
@@ 13,7 13,7 @@
        "pin": "B7"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "sat_steps": 24
    },
    "qmk": {

M keyboards/adpenrose/akemipad/info.json => keyboards/adpenrose/akemipad/info.json +1 -1
@@ 11,7 11,7 @@
        "pin": "F4"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D3", "D2", "F5", "F6", "B2"],

M keyboards/aeboards/satellite/rev1/rev1.c => keyboards/aeboards/satellite/rev1/rev1.c +9 -9
@@ 145,30 145,30 @@ led_config_t g_led_config = { {
// Custom Driver
static void init(void) {
    i2c_init();
    IS31FL3731_init(DRIVER_ADDR_1);
    IS31FL3731_init(DRIVER_ADDR_2);
    is31fl3731_init(DRIVER_ADDR_1);
    is31fl3731_init(DRIVER_ADDR_2);
    for (int index = 0; index < ISSI_DRIVER_TOTAL; index++) {
        bool enabled = !(   ( index == 18+5) || //B5
                            ( index == 36+17) || //C17
                            ( index == 54+13) //D13
                        );
        IS31FL3731_set_led_control_register(index, enabled, enabled, enabled);
        is31fl3731_set_led_control_register(index, enabled, enabled, enabled);
    }
    IS31FL3731_update_led_control_registers(DRIVER_ADDR_1, 0);
    IS31FL3731_update_led_control_registers(DRIVER_ADDR_2, 1);
    is31fl3731_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3731_update_led_control_registers(DRIVER_ADDR_2, 1);
}

static void flush(void) {
    IS31FL3731_update_pwm_buffers(DRIVER_ADDR_1, 0);
    IS31FL3731_update_pwm_buffers(DRIVER_ADDR_2, 1);
    is31fl3731_update_pwm_buffers(DRIVER_ADDR_1, 0);
    is31fl3731_update_pwm_buffers(DRIVER_ADDR_2, 1);
}

static void set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    IS31FL3731_set_color(index, red, green, blue);
    is31fl3731_set_color(index, red, green, blue);
}

static void set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
    IS31FL3731_set_color_all( red, green, blue );
    is31fl3731_set_color_all( red, green, blue );
}



M keyboards/akko/5108/info.json => keyboards/akko/5108/info.json +1 -1
@@ 31,7 31,7 @@
        "caps_lock": "C10"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733",
        "driver": "is31fl3733",
        "max_brightness": 180,
        "animations": {
            "breathing": true,

M keyboards/akko/acr87/info.json => keyboards/akko/acr87/info.json +1 -1
@@ 27,7 27,7 @@
    },
    "diode_direction": "ROW2COL",
    "rgb_matrix": {
        "driver": "IS31FL3733",
        "driver": "is31fl3733",
        "max_brightness": 180,
        "animations": {
            "breathing": true,

M keyboards/akko/top40/info.json => keyboards/akko/top40/info.json +1 -1
@@ 27,7 27,7 @@
    },
    "diode_direction": "ROW2COL",
    "rgb_matrix": {
        "driver": "IS31FL3733",
        "driver": "is31fl3733",
        "max_brightness": 180,
        "animations": {
            "breathing": true,

M keyboards/aleblazer/zodiark/info.json => keyboards/aleblazer/zodiark/info.json +1 -1
@@ 19,7 19,7 @@
        "split_count": [34, 34]
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "sat_steps": 8,
        "val_steps": 8,
        "speed_steps": 10

M keyboards/an_achronism/tetromino/info.json => keyboards/an_achronism/tetromino/info.json +1 -1
@@ 110,7 110,7 @@
        "led_count": 70
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 4, "matrix": [0, 0], "x": 0, "y": 0},
            {"flags": 4, "matrix": [0, 1], "x": 17, "y": 0},

M keyboards/atlantis/ak81_ve/info.json => keyboards/atlantis/ak81_ve/info.json +1 -1
@@ 9,7 9,7 @@
        "force_nkro": true
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F0", "C7", "C6", "B6", "B5", "B4", "D7", "D6", "B2", "B7", "D3", "D2", "D1", "D0", "B3"],

M keyboards/atlantis/ps17/info.json => keyboards/atlantis/ps17/info.json +1 -1
@@ 64,7 64,7 @@
        }
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "center_point": [126, 126],
        "layout": [
            {"flags": 4, "matrix": [1, 0], "x": 74, "y": 165},

M keyboards/axolstudio/yeti/hotswap/info.json => keyboards/axolstudio/yeti/hotswap/info.json +1 -1
@@ 9,7 9,7 @@
    "device_version": "0.0.1"
  },
  "rgb_matrix": {
    "driver": "IS31FL3733"
    "driver": "is31fl3733"
  },
  "matrix_pins": {
    "cols": ["C7", "F7", "F6", "F5", "F4", "F1", "F0", "B0", "B1", "B2", "B3", "B7", "D2", "D3", "D5"],

M keyboards/bandominedoni/info.json => keyboards/bandominedoni/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D1", "E6", "F7", "B1", "B3", "B2", "D0"],

M keyboards/bastardkb/charybdis/3x5/blackpill/info.json => keyboards/bastardkb/charybdis/3x5/blackpill/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "ws2812": {
        "pin": "A1",

M keyboards/bastardkb/charybdis/3x5/v1/elitec/info.json => keyboards/bastardkb/charybdis/3x5/v1/elitec/info.json +1 -1
@@ 7,7 7,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["C7", "F0", "D7", "E6", "B4"],

M keyboards/bastardkb/charybdis/3x5/v2/elitec/info.json => keyboards/bastardkb/charybdis/3x5/v2/elitec/info.json +1 -1
@@ 7,7 7,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F5", "B6", "D7", "E6", "B4"],

M keyboards/bastardkb/charybdis/3x5/v2/splinky_2/info.json => keyboards/bastardkb/charybdis/3x5/v2/splinky_2/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["GP28", "GP15", "GP6", "GP7", "GP8"],

M keyboards/bastardkb/charybdis/3x5/v2/splinky_3/info.json => keyboards/bastardkb/charybdis/3x5/v2/splinky_3/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["GP28", "GP21", "GP6", "GP7", "GP8"],

M keyboards/bastardkb/charybdis/3x5/v2/stemcell/info.json => keyboards/bastardkb/charybdis/3x5/v2/stemcell/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "ws2812": {
        "pin": "D3",

M keyboards/bastardkb/charybdis/3x6/blackpill/info.json => keyboards/bastardkb/charybdis/3x6/blackpill/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "ws2812": {
        "pin": "A1",

M keyboards/bastardkb/charybdis/3x6/v1/elitec/info.json => keyboards/bastardkb/charybdis/3x6/v1/elitec/info.json +1 -1
@@ 7,7 7,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D5", "C7", "F0", "D7", "E6", "B4"],

M keyboards/bastardkb/charybdis/3x6/v2/elitec/info.json => keyboards/bastardkb/charybdis/3x6/v2/elitec/info.json +1 -1
@@ 7,7 7,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F6", "F5", "B6", "D7", "E6", "B4"],

M keyboards/bastardkb/charybdis/3x6/v2/splinky_2/info.json => keyboards/bastardkb/charybdis/3x6/v2/splinky_2/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["GP27", "GP28", "GP15", "GP6", "GP7", "GP8"],

M keyboards/bastardkb/charybdis/3x6/v2/splinky_3/info.json => keyboards/bastardkb/charybdis/3x6/v2/splinky_3/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["GP27", "GP28", "GP21", "GP6", "GP7", "GP8"],

M keyboards/bastardkb/charybdis/3x6/v2/stemcell/info.json => keyboards/bastardkb/charybdis/3x6/v2/stemcell/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "ws2812": {
        "pin": "D3",

M keyboards/bastardkb/charybdis/4x6/blackpill/info.json => keyboards/bastardkb/charybdis/4x6/blackpill/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "ws2812": {
        "pin": "A1",

M keyboards/bastardkb/charybdis/4x6/v1/elitec/info.json => keyboards/bastardkb/charybdis/4x6/v1/elitec/info.json +1 -1
@@ 7,7 7,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D5", "C7", "F0", "D7", "E6", "B4"],

M keyboards/bastardkb/charybdis/4x6/v2/elitec/info.json => keyboards/bastardkb/charybdis/4x6/v2/elitec/info.json +1 -1
@@ 7,7 7,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F6", "F5", "B6", "D7", "E6", "B4"],

M keyboards/bastardkb/charybdis/4x6/v2/splinky_2/info.json => keyboards/bastardkb/charybdis/4x6/v2/splinky_2/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["GP27", "GP28", "GP15", "GP6", "GP7", "GP8"],

M keyboards/bastardkb/charybdis/4x6/v2/splinky_3/info.json => keyboards/bastardkb/charybdis/4x6/v2/splinky_3/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["GP27", "GP28", "GP21", "GP6", "GP7", "GP8"],

M keyboards/bastardkb/charybdis/4x6/v2/stemcell/info.json => keyboards/bastardkb/charybdis/4x6/v2/stemcell/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "ws2812": {
        "pin": "D3",

M keyboards/bastardkb/dilemma/3x5_3/info.json => keyboards/bastardkb/dilemma/3x5_3/info.json +1 -1
@@ 5,7 5,7 @@
        "pid": "0x1835"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["GP8", "GP9", "GP7", "GP6", "GP28"],

M keyboards/bastardkb/scylla/blackpill/info.json => keyboards/bastardkb/scylla/blackpill/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "ws2812": {
        "pin": "A1",

M keyboards/bastardkb/scylla/v1/elitec/info.json => keyboards/bastardkb/scylla/v1/elitec/info.json +1 -1
@@ 7,7 7,7 @@
        "pin": "D2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B4", "E6", "C6", "B1", "B3", "B2"],

M keyboards/bastardkb/scylla/v2/elitec/info.json => keyboards/bastardkb/scylla/v2/elitec/info.json +1 -1
@@ 7,7 7,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F6", "F5", "B6", "D7", "E6", "B4"],

M keyboards/bastardkb/scylla/v2/splinky_2/info.json => keyboards/bastardkb/scylla/v2/splinky_2/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["GP27", "GP28", "GP15", "GP6", "GP7", "GP8"],

M keyboards/bastardkb/scylla/v2/splinky_3/info.json => keyboards/bastardkb/scylla/v2/splinky_3/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["GP27", "GP28", "GP21", "GP6", "GP7", "GP8"],

M keyboards/bastardkb/scylla/v2/stemcell/info.json => keyboards/bastardkb/scylla/v2/stemcell/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "ws2812": {
        "pin": "D3",

M keyboards/bastardkb/skeletyl/blackpill/info.json => keyboards/bastardkb/skeletyl/blackpill/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "ws2812": {
        "pin": "A1",

M keyboards/bastardkb/skeletyl/v1/elitec/info.json => keyboards/bastardkb/skeletyl/v1/elitec/info.json +1 -1
@@ 7,7 7,7 @@
        "pin": "D2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["E6", "C6", "B1", "B3", "B2"],

M keyboards/bastardkb/skeletyl/v2/elitec/info.json => keyboards/bastardkb/skeletyl/v2/elitec/info.json +1 -1
@@ 7,7 7,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F5", "B6", "D7", "E6", "B4"],

M keyboards/bastardkb/skeletyl/v2/splinky_2/info.json => keyboards/bastardkb/skeletyl/v2/splinky_2/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["GP28", "GP15", "GP6", "GP7", "GP8"],

M keyboards/bastardkb/skeletyl/v2/splinky_3/info.json => keyboards/bastardkb/skeletyl/v2/splinky_3/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["GP28", "GP21", "GP6", "GP7", "GP8"],

M keyboards/bastardkb/skeletyl/v2/stemcell/info.json => keyboards/bastardkb/skeletyl/v2/stemcell/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "ws2812": {
        "pin": "D3",

M keyboards/bastardkb/tbkmini/blackpill/info.json => keyboards/bastardkb/tbkmini/blackpill/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "ws2812": {
        "pin": "A1",

M keyboards/bastardkb/tbkmini/v1/elitec/info.json => keyboards/bastardkb/tbkmini/v1/elitec/info.json +1 -1
@@ 7,7 7,7 @@
        "pin": "D2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B4", "E6", "C6", "B1", "B3", "B2"],

M keyboards/bastardkb/tbkmini/v2/elitec/info.json => keyboards/bastardkb/tbkmini/v2/elitec/info.json +1 -1
@@ 7,7 7,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F6", "F5", "B6", "D7", "E6", "B4"],

M keyboards/bastardkb/tbkmini/v2/splinky_2/info.json => keyboards/bastardkb/tbkmini/v2/splinky_2/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["GP27", "GP28", "GP15", "GP6", "GP7", "GP8"],

M keyboards/bastardkb/tbkmini/v2/splinky_3/info.json => keyboards/bastardkb/tbkmini/v2/splinky_3/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["GP27", "GP28", "GP21", "GP6", "GP7", "GP8"],

M keyboards/bastardkb/tbkmini/v2/stemcell/info.json => keyboards/bastardkb/tbkmini/v2/stemcell/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "ws2812": {
        "pin": "D3",

M keyboards/binepad/bn006/info.json => keyboards/binepad/bn006/info.json +1 -1
@@ 28,7 28,7 @@
        "pin": "B15"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 4, "matrix": [0, 0], "x": 0, "y": 0},
            {"flags": 4, "matrix": [0, 1], "x": 112, "y": 0},

M keyboards/black_hellebore/info.json => keyboards/black_hellebore/info.json +1 -1
@@ 29,7 29,7 @@
        "vid": "0x3141"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 4, "matrix": [0, 0], "x": 7, "y": 5},
            {"flags": 4, "matrix": [0, 1], "x": 22, "y": 5},

M keyboards/blockboy/ac980mini/info.json => keyboards/blockboy/ac980mini/info.json +1 -1
@@ 19,7 19,7 @@
        "pin": "B7"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "sat_steps": 8,
        "val_steps": 8,
        "speed_steps": 10

M keyboards/boardsource/beiwagon/info.json => keyboards/boardsource/beiwagon/info.json +1 -1
@@ 25,7 25,7 @@
    "vid": "0x4273"
  },
  "rgb_matrix": {
    "driver": "WS2812",
    "driver": "ws2812",
    "layout": [
      {"flags": 2, "x": 16, "y": 38},
      {"flags": 2, "x": 16, "y": 113},

M keyboards/boardsource/lulu/info.json => keyboards/boardsource/lulu/info.json +1 -1
@@ 22,7 22,7 @@
    "enabled": true
  },
  "rgb_matrix": {
    "driver": "WS2812",
    "driver": "ws2812",
    "split_count": [35, 35],
    "max_brightness": 150,
    "animations": {

M keyboards/boardsource/microdox/v2/info.json => keyboards/boardsource/microdox/v2/info.json +1 -1
@@ 35,7 35,7 @@
    }
  },
  "rgb_matrix": {
    "driver": "WS2812",
    "driver": "ws2812",
    "layout": [
      {"flags": 2, "x": 12, "y": 11},
      {"flags": 2, "x": 86, "y": 11},

M keyboards/boardsource/technik_o/info.json => keyboards/boardsource/technik_o/info.json +1 -1
@@ 26,7 26,7 @@
    "vid": "0x4273"
  },
  "rgb_matrix": {
    "driver": "WS2812",
    "driver": "ws2812",
    "layout": [
      {"flags": 2, "x": 220, "y": 17},
      {"flags": 2, "x": 172, "y": 17},

M keyboards/boardsource/technik_s/info.json => keyboards/boardsource/technik_s/info.json +1 -1
@@ 26,7 26,7 @@
    "vid": "0x4273"
  },
  "rgb_matrix": {
    "driver": "WS2812",
    "driver": "ws2812",
    "layout": [
      {"flags": 2, "x": 220, "y": 17},
      {"flags": 2, "x": 172, "y": 17},

M keyboards/boardsource/the_mark/info.json => keyboards/boardsource/the_mark/info.json +1 -1
@@ 43,7 43,7 @@
    "pin": "C6"
  },
  "rgb_matrix": {
    "driver": "WS2812",
    "driver": "ws2812",
    "layout": [
      {"flags": 2, "x": 224, "y": 42},
      {"flags": 2, "x": 224, "y": 21},

M keyboards/boardsource/unicorne/info.json => keyboards/boardsource/unicorne/info.json +1 -1
@@ 51,7 51,7 @@
        },
        "max_brightness": 150,
        "split_count": [27, 27],
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"x": 85, "y": 16, "flags": 2},
            {"x": 50, "y": 13, "flags": 2},

M keyboards/boston_meetup/2019/info.json => keyboards/boston_meetup/2019/info.json +1 -1
@@ 3,7 3,7 @@
        "device_version": "20.1.9"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["A7", "A8", "B2", "B10"],

M keyboards/bubble75/hotswap/info.json => keyboards/bubble75/hotswap/info.json +1 -1
@@ 13,7 13,7 @@
        "pin": "B7"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B0", "B1", "B2", "B3", "E6", "F0", "D0", "D1", "D4", "D6", "D7", "B4", "B5", "B6", "C6"],

M keyboards/canary/canary60rgb/info.json => keyboards/canary/canary60rgb/info.json +1 -1
@@ 18,7 18,7 @@
        "pin": "B6"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["C7", "F7", "F6", "F0", "B0", "B1", "B4", "D7", "D6", "D4", "D5", "D3", "D2", "B7"],

M keyboards/capsunlocked/cu80/v2/info.json => keyboards/capsunlocked/cu80/v2/info.json +1 -1
@@ 19,7 19,7 @@
        "rows": ["D3", "D2", "B7", "F1", "C7", "D5"]
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "animations": {
            "alphas_mods": true,
            "band_pinwheel_sat": true,

M keyboards/checkerboards/quark_lp/info.json => keyboards/checkerboards/quark_lp/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "C2"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "sat_steps": 8,
        "val_steps": 8,
        "speed_steps": 10

M keyboards/cherrybstudio/cb87rgb/info.json => keyboards/cherrybstudio/cb87rgb/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "E6"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D5", "D4", "D6", "D7", "B4", "B5", "F5", "C6", "C7", "F7"],

M keyboards/chosfox/cf81/info.json => keyboards/chosfox/cf81/info.json +1 -1
@@ 35,7 35,7 @@
        ]
    },
    "rgb_matrix": {
        "driver": "IS31FL3733",
        "driver": "is31fl3733",
        "animations": {
            "breathing": true,
            "cycle_all": true,

M keyboards/chromatonemini/info.json => keyboards/chromatonemini/info.json +1 -1
@@ 21,7 21,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "diode_direction": "COL2ROW",
    "matrix_pins": {

M keyboards/churrosoft/deck8/rgb/info.json => keyboards/churrosoft/deck8/rgb/info.json +1 -1
@@ 11,7 11,7 @@
    "rgb_matrix": true
  },
  "rgb_matrix": {
    "driver": "WS2812",
    "driver": "ws2812",
    "max_brightness": 200,
    "layout": [
      {"flags": 4, "matrix": [0, 0], "x":  45, "y": 21},

M keyboards/controllerworks/mini36/info.json => keyboards/controllerworks/mini36/info.json +1 -1
@@ 55,7 55,7 @@
        "oled": true
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 2, "x": 71, "y": 4},
            {"flags": 2, "x": 32, "y": 2},

M keyboards/controllerworks/mini42/info.json => keyboards/controllerworks/mini42/info.json +1 -1
@@ 56,7 56,7 @@
        "oled": true
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "split_count": [27, 27],
        "layout": [
            {"flags": 2, "x": 75, "y": 4},

M keyboards/crkbd/info.json => keyboards/crkbd/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "features": {
        "bootmagic": true,

M keyboards/cxt_studio/info.json => keyboards/cxt_studio/info.json +1 -1
@@ 31,7 31,7 @@
    },
    "processor": "atmega32u4",
    "rgb_matrix": {
       "driver": "WS2812",
       "driver": "ws2812",
       "layout": [
         {"flags": 4, "matrix": [0, 3], "x": 3, "y": 0},
         {"flags": 4, "matrix": [0, 2], "x": 2, "y": 0},

M keyboards/dekunukem/duckypad/info.json => keyboards/dekunukem/duckypad/info.json +1 -1
@@ 17,7 17,7 @@
        "pin": "A10"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"matrix": [0, 2], "x": 224, "y": 0, "flags": 4},
            {"matrix": [0, 1], "x": 112, "y": 0, "flags": 4},

M keyboards/deng/djam/info.json => keyboards/deng/djam/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["C7", "C6", "B6", "B5", "B4", "D7", "D6", "D4"],

M keyboards/deng/thirty/info.json => keyboards/deng/thirty/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B13", "B14", "B3", "A4", "A6"],

M keyboards/doio/kb16/rev1/info.json => keyboards/doio/kb16/rev1/info.json +1 -1
@@ 10,7 10,7 @@
        "force_nkro": true
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F5", "F4", "F1", "F0", "B7"],

M keyboards/doio/kb16/rev2/info.json => keyboards/doio/kb16/rev2/info.json +1 -1
@@ 10,7 10,7 @@
        "force_nkro": true
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B14", "B13", "B12", "B0", "A7"],

M keyboards/doio/kb30/info.json => keyboards/doio/kb30/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B14", "B13", "B12", "B0", "A7", "A9", "A8"],

M keyboards/doio/kb38/info.json => keyboards/doio/kb38/info.json +1 -1
@@ 36,7 36,7 @@
        "pin": "F6"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 4, "matrix": [0, 0], "x": 0, "y": 0},
            {"flags": 4, "matrix": [0, 1], "x": 62.2, "y": 0},

M keyboards/doro67/rgb/info.json => keyboards/doro67/rgb/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
      "driver": "WS2812"
      "driver": "ws2812"
    },
    "matrix_pins": {
      "cols": ["B0", "B1", "B2", "B3", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F5", "F6", "F7"],

M keyboards/dotmod/dymium65/info.json => keyboards/dotmod/dymium65/info.json +1 -1
@@ 38,7 38,7 @@
        "pin": "D7"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "animations": {
            "breathing": true,
            "band_val": true,

M keyboards/dp3000/info.json => keyboards/dp3000/info.json +1 -1
@@ 34,7 34,7 @@
        "pin": "B5"
    },
    "rgb_matrix":{
        "driver":"WS2812",
        "driver":"ws2812",
        "max_brightness": 180,
        "animations": {
            "alphas_mods": true,

M keyboards/dp60/info.json => keyboards/dp60/info.json +1 -1
@@ 17,7 17,7 @@
        "pin": "D7"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "processor": "atmega32u4",
    "bootloader": "atmel-dfu",

M keyboards/drop/sense75/info.json => keyboards/drop/sense75/info.json +1 -1
@@ 116,7 116,7 @@
        }
    },
    "rgb_matrix": {
        "driver": "IS31FL3733",
        "driver": "is31fl3733",
        "animations": {
            "alphas_mods": true,
            "gradient_up_down": true,

M keyboards/dtisaac/dosa40rgb/info.json => keyboards/dtisaac/dosa40rgb/info.json +1 -1
@@ 15,7 15,7 @@
        "pin": "D0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D1", "D6", "D3", "D2", "B6", "C6", "C7", "F7", "F6", "F5", "F4"],

M keyboards/dumbpad/v3x/info.json => keyboards/dumbpad/v3x/info.json +1 -1
@@ 6,7 6,7 @@
        "device_version": "0.1.0"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "timeout": 300000
    },
    "matrix_pins": {

M keyboards/durgod/dgk6x/info.json => keyboards/durgod/dgk6x/info.json +1 -1
@@ 5,7 5,7 @@
        "on_state": 0
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "processor": "STM32F072", // F070
    "bootloader": "stm32-dfu",

M keyboards/dztech/dz60rgb/v1/info.json => keyboards/dztech/dz60rgb/v1/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["A6", "A7", "B0", "B13", "B15", "A8", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14"],

M keyboards/dztech/dz60rgb/v2/info.json => keyboards/dztech/dz60rgb/v2/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["C7", "F7", "F6", "F0", "B0", "B1", "B4", "D7", "D6", "D4", "D5", "D3", "D2", "B7"],

M keyboards/dztech/dz60rgb/v2_1/info.json => keyboards/dztech/dz60rgb/v2_1/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.1.0"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["C7", "F7", "F6", "F0", "B0", "B1", "B4", "D7", "D6", "D4", "D5", "D3", "D2", "B7"],

M keyboards/dztech/dz60rgb_ansi/v1/info.json => keyboards/dztech/dz60rgb_ansi/v1/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["A6", "A7", "B0", "B13", "B15", "A8", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14"],

M keyboards/dztech/dz60rgb_ansi/v2/info.json => keyboards/dztech/dz60rgb_ansi/v2/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["C7", "F7", "F6", "F0", "B0", "B1", "B4", "D7", "D6", "D4", "D5", "D3", "D2", "B7"],

M keyboards/dztech/dz60rgb_ansi/v2_1/info.json => keyboards/dztech/dz60rgb_ansi/v2_1/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.1.0"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["C7", "F7", "F6", "F0", "B0", "B1", "B4", "D7", "D6", "D4", "D5", "D3", "D2", "B7"],

M keyboards/dztech/dz60rgb_wkl/v1/info.json => keyboards/dztech/dz60rgb_wkl/v1/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["A6", "A7", "B0", "B13", "B15", "A8", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14"],

M keyboards/dztech/dz60rgb_wkl/v2/info.json => keyboards/dztech/dz60rgb_wkl/v2/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["C7", "F7", "F6", "F0", "B0", "B1", "B4", "D7", "D6", "D4", "D5", "D3", "D2", "B7"],

M keyboards/dztech/dz60rgb_wkl/v2_1/info.json => keyboards/dztech/dz60rgb_wkl/v2_1/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.1.0"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["C7", "F7", "F6", "F0", "B0", "B1", "B4", "D7", "D6", "D4", "D5", "D3", "D2", "B7"],

M keyboards/dztech/dz64rgb/info.json => keyboards/dztech/dz64rgb/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.2"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["C7", "F7", "F6", "F0", "B0", "B1", "B4", "D7", "D6", "D4", "D5", "D3", "D2", "B7"],

M keyboards/dztech/dz65rgb/v1/info.json => keyboards/dztech/dz65rgb/v1/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "matrix_pins": {
        "cols": ["A6", "A7", "B0", "B13", "B15", "A8", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15"],

M keyboards/dztech/dz65rgb/v2/info.json => keyboards/dztech/dz65rgb/v2/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "2.0.0"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "matrix_pins": {
        "cols": ["F7", "F6", "F5", "C7", "B0", "B1", "B2", "B3", "B4", "D7", "D6", "D4", "D5", "D3", "D2"],

M keyboards/dztech/dz65rgb/v3/info.json => keyboards/dztech/dz65rgb/v3/info.json +1 -1
@@ 4,7 4,7 @@
        "device_version": "3.0.0"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["F7", "F6", "F5", "C7", "B0", "B1", "B2", "B3", "B4", "D7", "D6", "D4", "D5", "D3", "D2"],

M keyboards/dztech/tofu/ii/v1/info.json => keyboards/dztech/tofu/ii/v1/info.json +1 -1
@@ 16,7 16,7 @@
    },
    "processor": "RP2040",
    "rgb_matrix": {
        "driver": "IS31FL3737",
        "driver": "is31fl3737",
        "layout": [
            {"flags": 1, "matrix": [0, 0], "x": 0, "y": 0},
            {"flags": 4, "matrix": [0, 1], "x": 15, "y": 0},

M keyboards/dztech/tofu/jr/v1/info.json => keyboards/dztech/tofu/jr/v1/info.json +1 -1
@@ 16,7 16,7 @@
        "rows": ["GP29", "GP28", "GP27", "GP26", "GP22"]
    },
    "rgb_matrix": {
        "driver": "IS31FL3737",
        "driver": "is31fl3737",
        "layout": [
            {"flags": 1, "matrix": [0, 0], "x": 0, "y": 0},
            {"flags": 4, "matrix": [0, 1], "x": 15, "y": 0},

M keyboards/eek/info.json => keyboards/eek/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.4"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D4", "C6", "B6", "B2", "B3", "B1", "F7", "F6", "F5", "F4"],

M keyboards/eggsworks/egg58/info.json => keyboards/eggsworks/egg58/info.json +1 -1
@@ 33,7 33,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "split": true,
        "split_count": [29, 29],
        "max_brightness": 160,

M keyboards/ein_60/info.json => keyboards/ein_60/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "rgblight": {
        "hue_steps": 4,

M keyboards/elephant42/info.json => keyboards/elephant42/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "sat_steps": 8,
        "val_steps": 8,
        "speed_steps": 8

M keyboards/ergodox_ez/info.json => keyboards/ergodox_ez/info.json +1 -1
@@ 18,7 18,7 @@
        "pin": "D7"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "processor": "atmega32u4",
    "bootloader": "halfkay",

M keyboards/evyd13/atom47/rev5/info.json => keyboards/evyd13/atom47/rev5/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["F0", "F1", "F4", "F5", "F6", "F7", "E6", "D7", "B4", "B5", "B6", "C6", "C7"],

M keyboards/exclusive/e6_rgb/info.json => keyboards/exclusive/e6_rgb/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.6.2"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["D7", "B4", "B5", "B6", "C6", "C7", "F7", "F0", "B0", "B1", "D2", "D3", "B3", "B2"],

M keyboards/fancytech/fancyalice66/info.json => keyboards/fancytech/fancyalice66/info.json +1 -1
@@ 66,7 66,7 @@
            "solid_splash": true,
            "splash": true
        },
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 1, "matrix": [0, 0], "x": 0, "y": 0},
            {"flags": 4, "matrix": [0, 1], "x": 15, "y": 0},

M keyboards/feker/ik75/info.json => keyboards/feker/ik75/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["E6", "B0", "B1", "B2", "B3", "B7", "D2", "D3", "D5", "D4", "D6", "D7", "B4", "B5", "B6", "E2"],

M keyboards/ferris/0_2/bling/info.json => keyboards/ferris/0_2/bling/info.json +1 -1
@@ 4,6 4,6 @@
        "pid": "0x0002"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    }
}

M keyboards/flashquark/horizon_z/info.json => keyboards/flashquark/horizon_z/info.json +1 -1
@@ 20,7 20,7 @@
    },
    "processor": "atmega32u4",
    "rgb_matrix": {
        "driver": "IS31FL3733",
        "driver": "is31fl3733",
        "layout": [
            { "flags": 1, "matrix": [0, 0], "x": 0, "y": 0 },
            { "flags": 4, "matrix": [0, 1], "x": 16, "y": 0 },

M keyboards/frooastboard/walnut/info.json => keyboards/frooastboard/walnut/info.json +1 -1
@@ 15,7 15,7 @@
        "nkro": true
    },
    "rgb_matrix": {
        "driver": "IS31FL3737"
        "driver": "is31fl3737"
    },
    "build": {
        "lto": true

M keyboards/geekboards/macropad_v2/info.json => keyboards/geekboards/macropad_v2/info.json +1 -1
@@ 16,7 16,7 @@
    "driver": "pwm"
  },
  "rgb_matrix": {
    "driver": "WS2812"
    "driver": "ws2812"
  },
  "processor": "STM32F072",
  "bootloader": "stm32-dfu",

M keyboards/geekboards/tester/info.json => keyboards/geekboards/tester/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "matrix_pins": {
        "cols": ["F7", "F6", "D2", "D3"],

M keyboards/giabalanai/info.json => keyboards/giabalanai/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "rgblight": {
        "led_count": 123,

M keyboards/gizmo_engineering/gk6/info.json => keyboards/gizmo_engineering/gk6/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "30.3.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "matrix_pins": {
        "cols": ["B5", "C6", "C7", "F7", "F6", "D5", "D3", "D2", "F1", "F4", "B7", "F5"],

M keyboards/gkeyboard/gpad8_2r/info.json => keyboards/gkeyboard/gpad8_2r/info.json +1 -1
@@ 33,7 33,7 @@
        ]
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 4, "matrix": [1, 0], "x": 28, "y": 12},
            {"flags": 4, "matrix": [1, 1], "x": 84, "y": 12},

M keyboards/gl516/j73gl/keymaps/via_rgb_matrix/rules.mk => keyboards/gl516/j73gl/keymaps/via_rgb_matrix/rules.mk +1 -1
@@ 1,6 1,6 @@
RGBLIGHT_ENABLE = no
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = WS2812
RGB_MATRIX_DRIVER = ws2812
VIA_ENABLE = yes
LTO_ENABLE = yes
SPACE_CADET_ENABLE = no

M keyboards/gmmk/gmmk2/p65/ansi/info.json => keyboards/gmmk/gmmk2/p65/ansi/info.json +1 -1
@@ 12,7 12,7 @@
        "tap_keycode_delay": 10
    },
    "rgb_matrix": {
        "driver": "AW20216"
        "driver": "aw20216"
    },
    "matrix_pins": {
        "cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"],

M keyboards/gmmk/gmmk2/p65/iso/info.json => keyboards/gmmk/gmmk2/p65/iso/info.json +1 -1
@@ 12,7 12,7 @@
        "tap_keycode_delay": 10
    },
    "rgb_matrix": {
        "driver": "AW20216"
        "driver": "aw20216"
    },
    "matrix_pins": {
        "cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"],

M keyboards/gmmk/gmmk2/p96/ansi/info.json => keyboards/gmmk/gmmk2/p96/ansi/info.json +1 -1
@@ 12,7 12,7 @@
        "tap_keycode_delay": 10
    },
    "rgb_matrix": {
        "driver": "AW20216"
        "driver": "aw20216"
    },
    "matrix_pins": {
        "cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"],

M keyboards/gmmk/gmmk2/p96/iso/info.json => keyboards/gmmk/gmmk2/p96/iso/info.json +1 -1
@@ 12,7 12,7 @@
        "tap_keycode_delay": 10
    },
    "rgb_matrix": {
        "driver": "AW20216"
        "driver": "aw20216"
    },
    "matrix_pins": {
        "cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"],

M keyboards/gmmk/numpad/info.json => keyboards/gmmk/numpad/info.json +1 -1
@@ 14,7 14,7 @@
        ]
    },
    "rgb_matrix": {
        "driver": "AW20216"
        "driver": "aw20216"
    },
    "processor": "WB32F3G71",
    "bootloader": "wb32-dfu",

M keyboards/gmmk/pro/rev1/ansi/info.json => keyboards/gmmk/pro/rev1/ansi/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "AW20216"
        "driver": "aw20216"
    },
    "matrix_pins": {
        "cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"],

M keyboards/gmmk/pro/rev1/iso/info.json => keyboards/gmmk/pro/rev1/iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "AW20216"
        "driver": "aw20216"
    },
    "matrix_pins": {
        "cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"],

M keyboards/gmmk/pro/rev2/ansi/info.json => keyboards/gmmk/pro/rev2/ansi/info.json +1 -1
@@ 9,7 9,7 @@
       "device_version": "0.0.2"
    },
    "rgb_matrix": {
        "driver": "AW20216"
        "driver": "aw20216"
    },
    "matrix_pins": {
        "cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"],

M keyboards/gmmk/pro/rev2/iso/info.json => keyboards/gmmk/pro/rev2/iso/info.json +1 -1
@@ 9,7 9,7 @@
       "device_version": "0.0.2"
    },
    "rgb_matrix": {
        "driver": "AW20216"
        "driver": "aw20216"
    },
    "matrix_pins": {
        "cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"],

M keyboards/gopolar/gg86/info.json => keyboards/gopolar/gg86/info.json +1 -1
@@ 13,7 13,7 @@
        "pin": "E2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F0", "F1", "F4", "F5", "F6", "F7", "C6", "B6", "B5", "B4", "D7", "D6", "D4", "C7", "E6", "D2", "D3"],

M keyboards/hadron/ver3/info.json => keyboards/hadron/ver3/info.json +1 -1
@@ 3,7 3,7 @@
        "device_version": "0.0.3"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B8", "B2", "B10", "A0", "A1", "A2", "B0", "A3", "B1", "A6", "A7", "B12", "C13", "B11", "B9"],

M keyboards/handwired/6macro/info.json => keyboards/handwired/6macro/info.json +1 -1
@@ 16,7 16,7 @@
      "pin": "D2"
    },
    "rgb_matrix": {
      "driver": "WS2812"
      "driver": "ws2812"
    },
    "matrix_pins": {
      "cols": ["B0", "B1", "B2"],

M keyboards/handwired/alcor_dactyl/info.json => keyboards/handwired/alcor_dactyl/info.json +1 -1
@@ 27,7 27,7 @@
        "rows": ["GP5", "GP4", "GP3", "GP2", "GP1", "GP0"]
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"x": 0, "y": 0.375},
            {"x": 16.5, "y": 0.38}

M keyboards/handwired/colorlice/info.json => keyboards/handwired/colorlice/info.json +1 -1
@@ 12,7 12,7 @@
      "pin": "B1"
    },
    "rgb_matrix": {
      "driver": "WS2812"
      "driver": "ws2812"
    },
    "matrix_pins": {
      "cols": ["F0", "F1", "F4", "F5", "F6", "F7", "C7", "B6", "B5", "B4", "D7", "D6", "D4", "E6", "B0", "B3"],

M keyboards/handwired/dactyl_manuform/5x6/keymaps/thattolleyguy/rules.mk => keyboards/handwired/dactyl_manuform/5x6/keymaps/thattolleyguy/rules.mk +1 -1
@@ 1,5 1,5 @@
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = WS2812
RGB_MATRIX_DRIVER = ws2812
DYNAMIC_MACRO_ENABLE = yes
# CONSOLE_ENABLE = yes


M keyboards/handwired/dactyl_minidox/info.json => keyboards/handwired/dactyl_minidox/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["C6", "D7", "E6", "B4", "B5"],

M keyboards/handwired/dactyl_minidox/keymaps/dlford/rules.mk => keyboards/handwired/dactyl_minidox/keymaps/dlford/rules.mk +0 -1
@@ 6,7 6,6 @@ SRC += features/caps_word.c
#
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
DYNAMIC_MACRO_ENABLE = yes  # Create macros on the fly
RGB_MATRIX_DRIVER = WS2812
INDICATOR_LIGHTS = yes      # Enable indicator lights for caps lock, etc.
# TAP_DANCE_ENABLE = yes      # Send different keycodes if tapped multiple times
# KEY_OVERRIDE_ENABLE = yes   # Override key combos

M keyboards/handwired/hnah108/info.json => keyboards/handwired/hnah108/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F0", "E6", "B0", "D0", "D1", "D2", "D3", "D5", "D4", "D6", "D7"],

M keyboards/handwired/hnah40rgb/info.json => keyboards/handwired/hnah40rgb/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "E2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D5", "D6", "D3", "D2", "B6", "C6", "C7", "F7", "F6", "F5", "F4"],

M keyboards/handwired/orbweaver/info.json => keyboards/handwired/orbweaver/info.json +1 -1
@@ 13,7 13,7 @@
        "nkro": true
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "matrix_pins": {
        "rows": ["GP4", "GP5", "GP6", "GP7", "GP8", "GP9"],

M keyboards/handwired/p65rgb/info.json => keyboards/handwired/p65rgb/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "B4"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "rgblight": {
        "max_brightness": 180

M keyboards/handwired/tractyl_manuform/4x6_right/info.json => keyboards/handwired/tractyl_manuform/4x6_right/info.json +1 -1
@@ 7,7 7,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["C0", "C1", "C2", "C3", "C4", "C5"],

M keyboards/heliotrope/info.json => keyboards/heliotrope/info.json +1 -1
@@ 28,7 28,7 @@
        "pin": "A4"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 4, "matrix": [0, 0], "x": 7, "y": 5},
            {"flags": 4, "matrix": [0, 1], "x": 22, "y": 5},

M keyboards/helix/rev3_4rows/info.json => keyboards/helix/rev3_4rows/info.json +1 -1
@@ 9,7 9,7 @@
    "device_version": "0.0.1"
  },
  "rgb_matrix": {
    "driver": "WS2812",
    "driver": "ws2812",
    "sat_steps": 8,
    "val_steps": 8,
    "speed_steps": 10

M keyboards/helix/rev3_5rows/info.json => keyboards/helix/rev3_5rows/info.json +1 -1
@@ 9,7 9,7 @@
    "device_version": "0.0.1"
  },
  "rgb_matrix": {
    "driver": "WS2812",
    "driver": "ws2812",
    "sat_steps": 8,
    "val_steps": 8,
    "speed_steps": 10

M keyboards/hfdkb/ac001/info.json => keyboards/hfdkb/ac001/info.json +1 -1
@@ 10,7 10,7 @@
        "force_nkro": true
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["A5", "A6", "A7", "C4", "C5"],

M keyboards/horrortroll/chinese_pcb/devil68_pro/info.json => keyboards/horrortroll/chinese_pcb/devil68_pro/info.json +1 -1
@@ 10,7 10,7 @@
        "force_nkro": true
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B1", "B0", "B5", "B6", "C6", "C7", "E2", "D0", "D1", "D2", "D3", "D5", "D4", "D6", "D7", "B4"],

M keyboards/horrortroll/handwired_k552/info.json => keyboards/horrortroll/handwired_k552/info.json +1 -1
@@ 13,7 13,7 @@
        "pin": "C14"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B15", "C6", "C7", "A3", "A1", "C3", "C1", "B14", "B13", "A9", "B3", "B4", "A0", "C11", "C4", "C0", "C2"],

M keyboards/hotdox76v2/info.json => keyboards/hotdox76v2/info.json +1 -1
@@ 19,7 19,7 @@
        "lto": true
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F7", "F6", "F5", "F4", "F1", "F0", "E6"],

M keyboards/hs60/v1/info.json => keyboards/hs60/v1/info.json +1 -1
@@ 9,7 9,7 @@
    "device_version": "0.0.1"
  },
  "rgb_matrix": {
    "driver": "IS31FL3731"
    "driver": "is31fl3731"
  },
  "matrix_pins": {
    "cols": ["F1", "F4", "F5", "E6", "F0", "B7", "D2", "D3", "D5", "D4", "D6", "D7", "B4", "B5"],

M keyboards/hub20/info.json => keyboards/hub20/info.json +1 -1
@@ 9,7 9,7 @@
      "device_version": "0.0.1"
    },
    "rgb_matrix": {
      "driver": "WS2812"
      "driver": "ws2812"
    },
    "matrix_pins": {
      "cols": ["A6", "A7", "B7", "B6"],

M keyboards/idobao/id42/info.json => keyboards/idobao/id42/info.json +1 -1
@@ 18,7 18,7 @@
        "pin": "B3"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B4", "D7", "D6", "D4", "B5", "C7", "F0", "F7", "F6", "F1", "F4", "F5"],

M keyboards/idobao/id61/info.json => keyboards/idobao/id61/info.json +1 -1
@@ 18,7 18,7 @@
        "pin": "F0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["C7", "F6", "F5", "F4", "F1", "B7", "D5", "D1", "D2", "D3", "D4", "D0", "D6", "D7"],

M keyboards/idobao/id63/info.json => keyboards/idobao/id63/info.json +1 -1
@@ 18,7 18,7 @@
        "pin": "B7"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["C7", "F6", "F5", "F4", "F1", "B3", "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7"],

M keyboards/idobao/id67/info.json => keyboards/idobao/id67/info.json +1 -1
@@ 18,7 18,7 @@
        "pin": "F0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["C7", "F6", "F5", "F4", "F1", "B7", "D5", "D1", "D2", "D3", "D4", "D0", "D6", "D7", "B4"],

M keyboards/idobao/id75/v2/info.json => keyboards/idobao/id75/v2/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "F0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F6", "F5", "F4", "F1", "E6", "D5", "D3", "D2", "D1", "D0", "D4", "D6", "D7", "B4", "B5"],

M keyboards/idobao/id80/v3/ansi/info.json => keyboards/idobao/id80/v3/ansi/info.json +1 -1
@@ 15,7 15,7 @@
        "rgblight": false
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B7", "B3", "B2", "B1", "B0", "E6", "F1", "F4", "F5", "F6", "F7"],

M keyboards/idobao/id87/v2/info.json => keyboards/idobao/id87/v2/info.json +1 -1
@@ 18,7 18,7 @@
        "pin": "E2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D0", "D1", "D2", "D3", "D5", "D4", "D6", "D7", "B4"],

M keyboards/idobao/montex/v1rgb/info.json => keyboards/idobao/montex/v1rgb/info.json +1 -1
@@ 7,7 7,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D5", "D3", "D2", "D1", "D0"],

M keyboards/idobao/montex/v2/info.json => keyboards/idobao/montex/v2/info.json +1 -1
@@ 18,7 18,7 @@
        "pin": "B1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D5", "D3", "D2", "D1", "D0"],

M keyboards/idyllic/tinny50_rgb/info.json => keyboards/idyllic/tinny50_rgb/info.json +1 -1
@@ 27,7 27,7 @@
        "cols": ["GP29", "GP28", "GP27", "GP26", "GP25", "GP24", "GP23", "GP20", "GP19", "GP1", "GP6", "GP5"]
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "ws2812": {
        "pin": "GP10",

M keyboards/ilumkb/simpler61/info.json => keyboards/ilumkb/simpler61/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B0", "B1", "B2", "B3", "B7", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7"],

M keyboards/ilumkb/simpler64/info.json => keyboards/ilumkb/simpler64/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B0", "B1", "B2", "B3", "B7", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7"],

M keyboards/inett_studio/sqx/hotswap/info.json => keyboards/inett_studio/sqx/hotswap/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "D7"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "rgblight": {
        "saturation_steps": 8,

M keyboards/inett_studio/sqx/universal/info.json => keyboards/inett_studio/sqx/universal/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "D7"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "rgblight": {
        "saturation_steps": 8,

M keyboards/inland/kb83/info.json => keyboards/inland/kb83/info.json +1 -1
@@ 9,7 9,7 @@
        "force_nkro": true
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "processor": "WB32FQ95",
    "bootloader": "wb32-dfu",

M keyboards/input_club/k_type/is31fl3733-dual.c => keyboards/input_club/k_type/is31fl3733-dual.c +26 -26
@@ 65,7 65,7 @@ uint8_t g_twi_transfer_buffer[20];
// The control buffers match the PG0 LED On/Off registers.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in IS31FL3733_write_pwm_buffer() but it's
// buffers and the transfers in is31fl3733_write_pwm_buffer() but it's
// probably not worth the extra complexity.
uint8_t g_pwm_buffer[DRIVER_COUNT][192];
bool    g_pwm_buffer_update_required[DRIVER_COUNT] = {false};


@@ 73,7 73,7 @@ bool    g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
uint8_t g_led_control_registers[DRIVER_COUNT][24]             = {{0}, {0}};
bool    g_led_control_registers_update_required[DRIVER_COUNT] = {false};

bool IS31FL3733_write_register(uint8_t index, uint8_t addr, uint8_t reg, uint8_t data) {
bool is31fl3733_write_register(uint8_t index, uint8_t addr, uint8_t reg, uint8_t data) {
    // If the transaction fails function returns false.
    g_twi_transfer_buffer[0] = reg;
    g_twi_transfer_buffer[1] = data;


@@ 92,7 92,7 @@ bool IS31FL3733_write_register(uint8_t index, uint8_t addr, uint8_t reg, uint8_t
    return true;
}

bool IS31FL3733_write_pwm_buffer(uint8_t index, uint8_t addr, uint8_t *pwm_buffer) {
bool is31fl3733_write_pwm_buffer(uint8_t index, uint8_t addr, uint8_t *pwm_buffer) {
    // Assumes PG1 is already selected.
    // If any of the transactions fails function returns false.
    // Transmit PWM registers in 12 transfers of 16 bytes.


@@ 123,7 123,7 @@ bool IS31FL3733_write_pwm_buffer(uint8_t index, uint8_t addr, uint8_t *pwm_buffe
    return true;
}

void IS31FL3733_init(uint8_t bus, uint8_t addr, uint8_t sync) {
void is31fl3733_init(uint8_t bus, uint8_t addr, uint8_t sync) {
    // In order to avoid the LEDs being driven with garbage data
    // in the LED driver's PWM registers, shutdown is enabled last.
    // Set up the mode and other settings, clear the PWM registers,


@@ 131,35 131,35 @@ void IS31FL3733_init(uint8_t bus, uint8_t addr, uint8_t sync) {
    // Sync is passed so set it according to the datasheet.

    // Unlock the command register.
    IS31FL3733_write_register(bus, addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
    is31fl3733_write_register(bus, addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
    // Select PG0
    IS31FL3733_write_register(bus, addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
    is31fl3733_write_register(bus, addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
    // Turn off all LEDs.
    for (int i = 0x00; i <= 0x17; i++) {
        IS31FL3733_write_register(bus, addr, i, 0x00);
        is31fl3733_write_register(bus, addr, i, 0x00);
    }
    // Unlock the command register.
    IS31FL3733_write_register(bus, addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
    is31fl3733_write_register(bus, addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
    // Select PG1
    IS31FL3733_write_register(bus, addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
    is31fl3733_write_register(bus, addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
    // Set PWM on all LEDs to 0
    // No need to setup Breath registers to PWM as that is the default.
    for (int i = 0x00; i <= 0xBF; i++) {
        IS31FL3733_write_register(bus, addr, i, 0x00);
        is31fl3733_write_register(bus, addr, i, 0x00);
    }
    // Unlock the command register.
    IS31FL3733_write_register(bus, addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
    is31fl3733_write_register(bus, addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
    // Select PG3
    IS31FL3733_write_register(bus, addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
    is31fl3733_write_register(bus, addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
    // Set global current to maximum.
    IS31FL3733_write_register(bus, addr, ISSI_REG_GLOBALCURRENT, 0xFF);
    is31fl3733_write_register(bus, addr, ISSI_REG_GLOBALCURRENT, 0xFF);
    // Disable software shutdown.
    IS31FL3733_write_register(bus, addr, ISSI_REG_CONFIGURATION, (sync << 6) | 0x01);
    is31fl3733_write_register(bus, addr, ISSI_REG_CONFIGURATION, (sync << 6) | 0x01);
    // Wait 10ms to ensure the device has woken up.
    wait_ms(10);
}

void IS31FL3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
void is31fl3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    if (index >= 0 && index < RGB_MATRIX_LED_COUNT) {
        is31_led led = g_is31_leds[index];



@@ 170,13 170,13 @@ void IS31FL3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    }
}

void IS31FL3733_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
void is31fl3733_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
    for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
        IS31FL3733_set_color(i, red, green, blue);
        is31fl3733_set_color(i, red, green, blue);
    }
}

void IS31FL3733_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
void is31fl3733_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
    is31_led led = g_is31_leds[index];

    uint8_t control_register_r = led.r / 8;


@@ 205,28 205,28 @@ void IS31FL3733_set_led_control_register(uint8_t index, bool red, bool green, bo
    g_led_control_registers_update_required[led.driver] = true;
}

void IS31FL3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
    if (g_pwm_buffer_update_required[index]) {
        // Firstly we need to unlock the command register and select PG1.
        IS31FL3733_write_register(index, addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        IS31FL3733_write_register(index, addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
        is31fl3733_write_register(index, addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        is31fl3733_write_register(index, addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);

        // If any of the transactions fail we risk writing dirty PG0,
        // refresh page 0 just in case.
        if (!IS31FL3733_write_pwm_buffer(index, addr, g_pwm_buffer[index])) {
        if (!is31fl3733_write_pwm_buffer(index, addr, g_pwm_buffer[index])) {
            g_led_control_registers_update_required[index] = true;
        }
    }
    g_pwm_buffer_update_required[index] = false;
}

void IS31FL3733_update_led_control_registers(uint8_t addr, uint8_t index) {
void is31fl3733_update_led_control_registers(uint8_t addr, uint8_t index) {
    if (g_led_control_registers_update_required[index]) {
        // Firstly we need to unlock the command register and select PG0
        IS31FL3733_write_register(index, addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        IS31FL3733_write_register(index, addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
        is31fl3733_write_register(index, addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
        is31fl3733_write_register(index, addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
        for (int i = 0; i < 24; i++) {
            IS31FL3733_write_register(index, addr, i, g_led_control_registers[index][i]);
            is31fl3733_write_register(index, addr, i, g_led_control_registers[index][i]);
        }
    }
    g_led_control_registers_update_required[index] = false;

M keyboards/input_club/k_type/is31fl3733-dual.h => keyboards/input_club/k_type/is31fl3733-dual.h +8 -8
@@ 31,21 31,21 @@ typedef struct is31_led {

extern const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT];

void IS31FL3733_init(uint8_t bus, uint8_t addr, uint8_t sync);
bool IS31FL3733_write_register(uint8_t index, uint8_t addr, uint8_t reg, uint8_t data);
bool IS31FL3733_write_pwm_buffer(uint8_t index, uint8_t addr, uint8_t *pwm_buffer);
void is31fl3733_init(uint8_t bus, uint8_t addr, uint8_t sync);
bool is31fl3733_write_register(uint8_t index, uint8_t addr, uint8_t reg, uint8_t data);
bool is31fl3733_write_pwm_buffer(uint8_t index, uint8_t addr, uint8_t *pwm_buffer);

void IS31FL3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void IS31FL3733_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
void is31fl3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void is31fl3733_set_color_all(uint8_t red, uint8_t green, uint8_t blue);

void IS31FL3733_set_led_control_register(uint8_t index, bool red, bool green, bool blue);
void is31fl3733_set_led_control_register(uint8_t index, bool red, bool green, bool blue);

// This should not be called from an interrupt
// (eg. from a timer interrupt).
// Call this while idle (in between matrix scans).
// If the buffer is dirty, it will update the driver with the buffer.
void IS31FL3733_update_pwm_buffers(uint8_t addr, uint8_t index); // index is the driver index
void IS31FL3733_update_led_control_registers(uint8_t addr, uint8_t index);
void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index); // index is the driver index
void is31fl3733_update_led_control_registers(uint8_t addr, uint8_t index);

#define A_1 0x00
#define A_2 0x01

M keyboards/input_club/k_type/k_type-rgbdriver.c => keyboards/input_club/k_type/k_type-rgbdriver.c +9 -9
@@ 23,34 23,34 @@

static void init(void) {
    i2c_init(&I2CD1, I2C1_SCL_PIN, I2C1_SDA_PIN);
    IS31FL3733_init(0, DRIVER_ADDR_1, 0);
    is31fl3733_init(0, DRIVER_ADDR_1, 0);
#    ifdef USE_I2C2
    i2c_init(&I2CD2, I2C2_SCL_PIN, I2C2_SDA_PIN);
    IS31FL3733_init(1, DRIVER_ADDR_2, 0);
    is31fl3733_init(1, DRIVER_ADDR_2, 0);
#    endif
    for (int index = 0; index < RGB_MATRIX_LED_COUNT; index++) {
        bool enabled = true;
        // This only caches it for later
        IS31FL3733_set_led_control_register(index, enabled, enabled, enabled);
        is31fl3733_set_led_control_register(index, enabled, enabled, enabled);
    }
    IS31FL3733_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3733_update_led_control_registers(DRIVER_ADDR_1, 0);
#    ifdef USE_I2C2
    IS31FL3733_update_led_control_registers(DRIVER_ADDR_2, 1);
    is31fl3733_update_led_control_registers(DRIVER_ADDR_2, 1);
#    endif
}

static void flush(void) {
    IS31FL3733_update_pwm_buffers(DRIVER_ADDR_1, 0);
    is31fl3733_update_pwm_buffers(DRIVER_ADDR_1, 0);
#    ifdef USE_I2C2
    IS31FL3733_update_pwm_buffers(DRIVER_ADDR_2, 1);
    is31fl3733_update_pwm_buffers(DRIVER_ADDR_2, 1);
#    endif
}

const rgb_matrix_driver_t rgb_matrix_driver = {
    .init = init,
    .flush = flush,
    .set_color = IS31FL3733_set_color,
    .set_color_all = IS31FL3733_set_color_all,
    .set_color = is31fl3733_set_color,
    .set_color_all = is31fl3733_set_color_all,
};

#endif

M keyboards/jacky_studio/bear_65/rev1/info.json => keyboards/jacky_studio/bear_65/rev1/info.json +1 -1
@@ 11,7 11,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D0", "D1", "D2", "D3", "D5", "D4", "D6", "D7", "B4", "F7", "F6", "F5", "F4", "F1", "F0"],

M keyboards/jacky_studio/bear_65/rev2/info.json => keyboards/jacky_studio/bear_65/rev2/info.json +1 -1
@@ 11,7 11,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D0", "D1", "D2", "D3", "D5", "D4", "D6", "D7", "B4", "F7", "F6", "F5", "F4", "F1", "F0"],

M keyboards/jacky_studio/piggy60/rev2/info.json => keyboards/jacky_studio/piggy60/rev2/info.json +1 -1
@@ 24,7 24,7 @@
        "driver": "pwm"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "animations": {
            "alphas_mods": true,
            "gradient_up_down": true,

M keyboards/jadookb/jkb65/info.json => keyboards/jadookb/jkb65/info.json +1 -1
@@ 10,7 10,7 @@
        "pin": "F0"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "timeout": 90000
    },
    "processor": "atmega32u4",

M keyboards/jkeys_design/gentleman65/info.json => keyboards/jkeys_design/gentleman65/info.json +1 -1
@@ 15,7 15,7 @@
        "pin": "F4"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D4", "D6", "D7", "B4", "B5", "B6", "C6", "D5", "C7", "F0", "B2", "B1", "B3", "B0", "B7", "D0"],

M keyboards/jkeys_design/gentleman65_se_s/info.json => keyboards/jkeys_design/gentleman65_se_s/info.json +1 -1
@@ 15,7 15,7 @@
        "pin": "F7"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D5", "D3", "D2", "D1", "D0", "B7", "B2", "B3", "D4", "D6", "D7", "C7", "C6", "B6", "B5", "B4"],

M keyboards/junco/info.json => keyboards/junco/info.json +1 -1
@@ 18,7 18,7 @@
        "driver": "vendor"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "encoder": {
        "rotary": [

M keyboards/kapl/rev1/info.json => keyboards/kapl/rev1/info.json +1 -1
@@ 12,7 12,7 @@
    "pin": "D4"
  },
  "rgb_matrix": {
    "driver": "WS2812",
    "driver": "ws2812",
    "speed_steps": 10
  },
  "rgblight": {

M keyboards/kbdcraft/adam64/info.json => keyboards/kbdcraft/adam64/info.json +1 -1
@@ 25,7 25,7 @@
        "rgb_matrix": true
    },
    "rgb_matrix": {
        "driver": "IS31FL3741",
        "driver": "is31fl3741",
        "max_brightness": 150,
        "animations": {
            "alphas_mods": true,

M keyboards/kbdfans/baguette66/rgb/info.json => keyboards/kbdfans/baguette66/rgb/info.json +1 -1
@@ 14,7 14,7 @@
        "pin": "E6"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "sat_steps": 8,
        "val_steps": 8,
        "speed_steps": 10

M keyboards/kbdfans/bella/rgb/info.json => keyboards/kbdfans/bella/rgb/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["C6", "C7", "F7", "F6", "F5", "F4", "F1", "F0", "D2", "D3", "D5", "D4", "D6", "D7", "B4", "B5"],

M keyboards/kbdfans/bella/rgb_iso/info.json => keyboards/kbdfans/bella/rgb_iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["C6", "C7", "F7", "F6", "F5", "F4", "F1", "F0", "D2", "D3", "D5", "D4", "D6", "D7", "B4", "B5"],

M keyboards/kbdfans/boop65/rgb/info.json => keyboards/kbdfans/boop65/rgb/info.json +1 -1
@@ 9,7 9,7 @@
    "device_version": "0.0.1"
  },
  "rgb_matrix": {
    "driver": "IS31FL3741"
    "driver": "is31fl3741"
  },
 "matrix_pins": {
    "cols": ["F7", "F6", "F5", "C7", "B0", "B1", "B2", "B3", "B4", "D7", "D6", "D4", "D5", "D3", "D2"],

M keyboards/kbdfans/kbd67/mkiirgb/v1/info.json => keyboards/kbdfans/kbd67/mkiirgb/v1/info.json +1 -1
@@ 5,7 5,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "matrix_pins": {
        "cols": ["A6", "A7", "B0", "B13", "B15", "A8", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15"],

M keyboards/kbdfans/kbd67/mkiirgb/v2/info.json => keyboards/kbdfans/kbd67/mkiirgb/v2/info.json +1 -1
@@ 5,7 5,7 @@
        "device_version": "0.0.2"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "matrix_pins": {
        "cols": ["F7", "F6", "F5", "C7", "B0", "B1", "B2", "B3", "B4", "D7", "D6", "D4", "D5", "D3", "D2"],

M keyboards/kbdfans/kbd67/mkiirgb/v3/info.json => keyboards/kbdfans/kbd67/mkiirgb/v3/info.json +1 -1
@@ 5,7 5,7 @@
        "device_version": "0.0.3"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["F7", "F6", "F5", "C7", "B0", "B1", "B2", "B3", "B4", "D7", "D6", "D4", "D5", "D3", "D2"],

M keyboards/kbdfans/kbd67/mkiirgb/v4/info.json => keyboards/kbdfans/kbd67/mkiirgb/v4/info.json +1 -1
@@ 11,7 11,7 @@
        "pin": "C7"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "sat_steps": 8,
        "val_steps": 8,
        "speed_steps": 10

M keyboards/kbdfans/kbd67/mkiirgb_iso/info.json => keyboards/kbdfans/kbd67/mkiirgb_iso/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "C7"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "sat_steps": 8,
        "val_steps": 8,
        "speed_steps": 10

M keyboards/kbdfans/kbd75rgb/info.json => keyboards/kbdfans/kbd75rgb/info.json +1 -1
@@ 15,7 15,7 @@
        "pin": "C7"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "sat_steps": 8,
        "val_steps": 8,
        "speed_steps": 10

M keyboards/kbdfans/kbdmini/info.json => keyboards/kbdfans/kbdmini/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["B3", "B2", "B1", "B0", "F1", "F0", "C6", "B6", "B5", "B4", "D7", "D6", "D4"],

M keyboards/kbdfans/kbdpad/mk3/info.json => keyboards/kbdfans/kbdpad/mk3/info.json +1 -1
@@ 23,7 23,7 @@
    },
    "processor": "atmega32u4",
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 4, "matrix": [0, 0], "x": 0, "y": 0},
            {"flags": 4, "matrix": [0, 1], "x": 75, "y": 0},

M keyboards/kbdfans/maja/info.json => keyboards/kbdfans/maja/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "matrix_pins": {
        "cols": ["C6", "C7", "F7", "F6", "F5", "F4", "F1", "B0", "B1", "B2", "B3", "B7", "D2", "D3", "D5"],

M keyboards/kbdfans/odin/rgb/info.json => keyboards/kbdfans/odin/rgb/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "B15"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["A3", "A4", "A5", "A6", "A7", "B0", "B1", "B2", "B12", "A15", "B3", "B4", "B5", "B6", "B7", "B8", "C13", "C14", "C15", "A0"],

M keyboards/keebio/bamfk4/info.json => keyboards/keebio/bamfk4/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "rgblight": {
        "saturation_steps": 8,

M keyboards/keebio/bdn9/rev2/info.json => keyboards/keebio/bdn9/rev2/info.json +1 -1
@@ 14,7 14,7 @@
        "pin": "B15"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "encoder": {
        "rotary": [

M keyboards/keebio/cepstrum/rev1/info.json => keyboards/keebio/cepstrum/rev1/info.json +1 -1
@@ 124,7 124,7 @@
        "pin": "GP18"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "split_count": [48, 48],
        "layout": [
            {"flags":2, "x":46, "y":0},

M keyboards/keebio/chocopad/rev2/info.json => keyboards/keebio/chocopad/rev2/info.json +1 -1
@@ 21,7 21,7 @@
      "driver": "vendor"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "animations": {
            "alphas_mods": true,
            "gradient_up_down": true,

M keyboards/keebio/convolution/rev1/info.json => keyboards/keebio/convolution/rev1/info.json +1 -1
@@ 29,7 29,7 @@
        "driver": "vendor"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 2, "x": 12, "y": 13},
            {"flags": 2, "x": 40, "y": 13},

M keyboards/keebio/iris/keymaps/johnstegeman/rules.mk => keyboards/keebio/iris/keymaps/johnstegeman/rules.mk +1 -1
@@ 18,7 18,7 @@ CONSOLE_ENABLE = no        # Console for debug
RGBLIGHT_ENABLE = yes 
RGB_MATRIX_ENABLE = no 
#RGB_MATRIX_ENABLE = yes
#RGB_MATRIX_DRIVER = WS2812
#RGB_MATRIX_DRIVER = ws2812
LTO_ENABLE = yes
VIA_ENABLE = yes
KEY_OVERRIDE_ENABLE = yes

M keyboards/keebio/iris/rev6/info.json => keyboards/keebio/iris/rev6/info.json +1 -1
@@ 5,7 5,7 @@
        "device_version": "6.2.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F1", "F4", "B5", "C7", "D4", "D6"],

M keyboards/keebio/iris/rev7/info.json => keyboards/keebio/iris/rev7/info.json +1 -1
@@ 5,7 5,7 @@
        "device_version": "7.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F1", "F4", "B5", "C7", "D4", "D6"],

M keyboards/keebio/iris/rev8/info.json => keyboards/keebio/iris/rev8/info.json +1 -1
@@ 156,7 156,7 @@
            "solid_splash": true,
            "solid_multisplash": true
        },
        "driver": "WS2812",
        "driver": "ws2812",
        "split_count": [34, 34],
        "max_brightness": 120,
        "layout": [

M keyboards/keebio/nyquist/rev4/info.json => keyboards/keebio/nyquist/rev4/info.json +1 -1
@@ 180,7 180,7 @@
        }
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "split_count": [36, 36],
        "max_brightness": 120,
        "animations": {

M keyboards/keebio/sinc/rev3/info.json => keyboards/keebio/sinc/rev3/info.json +1 -1
@@ 44,7 44,7 @@
        "driver": "vendor"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "split_count": [56, 57],
        "layout": [
            {"flags": 4, "matrix": [5, 2], "x": 30, "y": 0},

M keyboards/keebio/sinc/rev4/info.json => keyboards/keebio/sinc/rev4/info.json +1 -1
@@ 42,7 42,7 @@
        "driver": "vendor"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "split_count": [58, 59],
        "layout": [
            {"flags": 4, "matrix": [5, 2], "x": 30, "y": 0},

M keyboards/keebio/stick/info.json => keyboards/keebio/stick/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "encoder": {
        "rotary": [

M keyboards/keebwerk/mega/ansi/ansi.c => keyboards/keebwerk/mega/ansi/ansi.c +2 -2
@@ 36,7 36,7 @@ uint8_t B = 0;
//         } else {
//             G = 0;
//         }
//         IS31FL3733_set_color( 6+64-1, R, G, B );
//         is31fl3733_set_color( 6+64-1, R, G, B );
//     }
//     return res;
// }


@@ 54,6 54,6 @@ __attribute__((weak)) layer_state_t layer_state_set_user(layer_state_t state) {
    if (IS_LAYER_ON_STATE(layer_state, 3)) {
        B = 255;
    }
    IS31FL3733_set_color( 6+64-1, R, G, B );
    is31fl3733_set_color( 6+64-1, R, G, B );
  return state;
}

M keyboards/keebwerk/mega/ansi/keymaps/jesusvallejo/keymap.c => keyboards/keebwerk/mega/ansi/keymaps/jesusvallejo/keymap.c +10 -10
@@ 77,25 77,25 @@ bool bootAnimation(void){
                G = 255;
                R = 0;
                B = 0;
                IS31FL3733_set_color( 6+64-1, R, G, B );
                is31fl3733_set_color( 6+64-1, R, G, B );
            }
            if (timer_elapsed(ledTimer) > 300){
                G = 255;
                R = 255;
                B = 0;
                IS31FL3733_set_color( 6+64-1, R, G, B );
                is31fl3733_set_color( 6+64-1, R, G, B );
            }
            if (timer_elapsed(ledTimer) > 400){
                G = 255;
                R = 255;
                B = 255;
                IS31FL3733_set_color( 6+64-1, R, G, B );
                is31fl3733_set_color( 6+64-1, R, G, B );
            }
            if (timer_elapsed(ledTimer) > 500){
                G = 0;
                R = 0;
                B = 0;
                IS31FL3733_set_color( 6+64-1, R, G, B );
                is31fl3733_set_color( 6+64-1, R, G, B );
                ledTimer = timer_read();
                bootFirst--;
            }


@@ 105,13 105,13 @@ bool bootAnimation(void){
                G = 255;
                R = 255;
                B = 255;
                IS31FL3733_set_color( 6+64-1, R, G, B );
                is31fl3733_set_color( 6+64-1, R, G, B );
            }
            if (timer_elapsed(ledTimer) > 400){
                G = 0;
                R = 0;
                B = 0;
                IS31FL3733_set_color( 6+64-1, R, G, B );
                is31fl3733_set_color( 6+64-1, R, G, B );
                ledTimer = timer_read();
                bootSec--;
            }


@@ 129,7 129,7 @@ void breathing(void) {
            G+=fadeStep;
            R+=fadeStep;
            B+=fadeStep;
            IS31FL3733_set_color( 6+64-1, R, G, B );
            is31fl3733_set_color( 6+64-1, R, G, B );
            previousTime = time;
        }
    }


@@ 139,7 139,7 @@ void breathing(void) {
            G-=fadeStep;
            R-=fadeStep;
            B-=fadeStep;
            IS31FL3733_set_color( 6+64-1, R, G, B );
            is31fl3733_set_color( 6+64-1, R, G, B );
            previousTime = time;
        } 
    }


@@ 147,7 147,7 @@ void breathing(void) {
        R=0;
        G=0;
        B=0;
        IS31FL3733_set_color( 6+64-1, R, G, B );
        is31fl3733_set_color( 6+64-1, R, G, B );
        previousTime = 0;
        time = 0;
        ledTimer=timer_read();


@@ 169,7 169,7 @@ void matrix_scan_user(void){
            G = 0;
            R = 0;
            B = 0;
            IS31FL3733_set_color( 6+64-1, R, G, B );
            is31fl3733_set_color( 6+64-1, R, G, B );
            prevCapsState = capsState; 
        }
    }

M keyboards/keybee/keybee65/info.json => keyboards/keybee/keybee65/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "B0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "rgblight": {
        "max_brightness": 96

M keyboards/keycapsss/kimiko/keymaps/oriaj3/rules.mk => keyboards/keycapsss/kimiko/keymaps/oriaj3/rules.mk +1 -1
@@ 9,7 9,7 @@ LTO_ENABLE = yes

#ENABLE RGB MATRIX WITH DRIVER WS2812
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = WS2812
RGB_MATRIX_DRIVER = ws2812

#DEFINE SPLIT KEYBOARD AND SPLIT TRANSPORT MIRROR
SPLIT_KEYBOARD = yes

M keyboards/keychron/c1_pro/ansi/rgb/info.json => keyboards/keychron/c1_pro/ansi/rgb/info.json +1 -1
@@ 105,7 105,7 @@
        }
    },
    "rgb_matrix": {
        "driver": "CKLED2001",
        "driver": "ckled2001",
        "animations": {
            "breathing": true,
            "band_spiral_val": true,

M keyboards/keychron/c2_pro/ansi/rgb/info.json => keyboards/keychron/c2_pro/ansi/rgb/info.json +1 -1
@@ 122,7 122,7 @@
        }
    },
    "rgb_matrix": {
        "driver": "CKLED2001",
        "driver": "ckled2001",
        "animations": {
            "breathing": true,
            "band_spiral_val": true,

M keyboards/keychron/q0/rev_0130/info.json => keyboards/keychron/q0/rev_0130/info.json +1 -1
@@ 29,7 29,7 @@
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",
    "rgb_matrix": {
        "driver": "CKLED2001",
        "driver": "ckled2001",
        "animations": {
            "band_spiral_val": true,
            "breathing": true,

M keyboards/keychron/q0/rev_0131/info.json => keyboards/keychron/q0/rev_0131/info.json +1 -1
@@ 38,7 38,7 @@
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",
    "rgb_matrix": {
        "driver": "CKLED2001",
        "driver": "ckled2001",
        "animations": {
            "band_spiral_val": true,
            "breathing": true,

M keyboards/keychron/q1/ansi/info.json => keyboards/keychron/q1/ansi/info.json +1 -1
@@ 10,7 10,7 @@
        "force_nkro": true
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6", "F5", "F4", "F1", "F0"],

M keyboards/keychron/q1/ansi_encoder/info.json => keyboards/keychron/q1/ansi_encoder/info.json +1 -1
@@ 10,7 10,7 @@
        "force_nkro": true
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6", "F5", "F4", "F1", "F0"],

M keyboards/keychron/q1/iso/info.json => keyboards/keychron/q1/iso/info.json +1 -1
@@ 10,7 10,7 @@
        "force_nkro": true
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6", "F5", "F4", "F1", "F0"],

M keyboards/keychron/q1/iso_encoder/info.json => keyboards/keychron/q1/iso_encoder/info.json +1 -1
@@ 10,7 10,7 @@
        "force_nkro": true
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6", "F5", "F4", "F1", "F0"],

M keyboards/keychron/q10/ansi_encoder/info.json => keyboards/keychron/q10/ansi_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/q10/iso_encoder/info.json => keyboards/keychron/q10/iso_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/q11/info.json => keyboards/keychron/q11/info.json +1 -1
@@ 59,7 59,7 @@
        ]
    },
    "rgb_matrix": {
        "driver": "CKLED2001",
        "driver": "ckled2001",
        "animations": {
            "breathing": true,
            "band_spiral_val": true,

M keyboards/keychron/q12/ansi_encoder/info.json => keyboards/keychron/q12/ansi_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/q12/iso_encoder/info.json => keyboards/keychron/q12/iso_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/q2/ansi/info.json => keyboards/keychron/q2/ansi/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/q2/ansi_encoder/info.json => keyboards/keychron/q2/ansi_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/q2/iso/info.json => keyboards/keychron/q2/iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/q2/iso_encoder/info.json => keyboards/keychron/q2/iso_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/q2/jis/info.json => keyboards/keychron/q2/jis/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/q2/jis_encoder/info.json => keyboards/keychron/q2/jis_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/q3/ansi/info.json => keyboards/keychron/q3/ansi/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",

M keyboards/keychron/q3/ansi_encoder/info.json => keyboards/keychron/q3/ansi_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/q3/iso/info.json => keyboards/keychron/q3/iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",

M keyboards/keychron/q3/iso_encoder/info.json => keyboards/keychron/q3/iso_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/q3/jis/info.json => keyboards/keychron/q3/jis/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",

M keyboards/keychron/q3/jis_encoder/info.json => keyboards/keychron/q3/jis_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/q4/ansi_v1/info.json => keyboards/keychron/q4/ansi_v1/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9"],

M keyboards/keychron/q4/ansi_v2/info.json => keyboards/keychron/q4/ansi_v2/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9"],

M keyboards/keychron/q4/iso/info.json => keyboards/keychron/q4/iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9"],

M keyboards/keychron/q5/ansi/info.json => keyboards/keychron/q5/ansi/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",

M keyboards/keychron/q5/ansi_encoder/info.json => keyboards/keychron/q5/ansi_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/q5/iso/info.json => keyboards/keychron/q5/iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",

M keyboards/keychron/q5/iso_encoder/info.json => keyboards/keychron/q5/iso_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/q6/ansi/info.json => keyboards/keychron/q6/ansi/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",

M keyboards/keychron/q6/ansi_encoder/info.json => keyboards/keychron/q6/ansi_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/q6/iso/info.json => keyboards/keychron/q6/iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",

M keyboards/keychron/q6/iso_encoder/info.json => keyboards/keychron/q6/iso_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/q60/ansi/info.json => keyboards/keychron/q60/ansi/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9"],

M keyboards/keychron/q65/ansi_encoder/info.json => keyboards/keychron/q65/ansi_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/q7/ansi/info.json => keyboards/keychron/q7/ansi/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "A10", "B5"],

M keyboards/keychron/q7/iso/info.json => keyboards/keychron/q7/iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "A10", "B5"],

M keyboards/keychron/q8/ansi/info.json => keyboards/keychron/q8/ansi/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/q8/ansi_encoder/info.json => keyboards/keychron/q8/ansi_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/q8/iso/info.json => keyboards/keychron/q8/iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/q8/iso_encoder/info.json => keyboards/keychron/q8/iso_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/q9/ansi/info.json => keyboards/keychron/q9/ansi/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["A10", "A9", "A8", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0", "C15", "C14"],

M keyboards/keychron/q9/ansi_encoder/info.json => keyboards/keychron/q9/ansi_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["A10", "A9", "A8", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0", "C15", "C14"],

M keyboards/keychron/q9/iso/info.json => keyboards/keychron/q9/iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["A10", "A9", "A8", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0", "C15", "C14"],

M keyboards/keychron/q9/iso_encoder/info.json => keyboards/keychron/q9/iso_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["A10", "A9", "A8", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0", "C15", "C14"],

M keyboards/keychron/s1/ansi/rgb/info.json => keyboards/keychron/s1/ansi/rgb/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["A10", "A9", "A8", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0", "C15", "C14"],

M keyboards/keychron/v1/ansi/info.json => keyboards/keychron/v1/ansi/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",

M keyboards/keychron/v1/ansi_encoder/info.json => keyboards/keychron/v1/ansi_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/v1/iso/info.json => keyboards/keychron/v1/iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",

M keyboards/keychron/v1/iso_encoder/info.json => keyboards/keychron/v1/iso_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/v1/jis/info.json => keyboards/keychron/v1/jis/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",

M keyboards/keychron/v1/jis_encoder/info.json => keyboards/keychron/v1/jis_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/v10/ansi_encoder/info.json => keyboards/keychron/v10/ansi_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/v10/iso_encoder/info.json => keyboards/keychron/v10/iso_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/v2/ansi/info.json => keyboards/keychron/v2/ansi/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/v2/ansi_encoder/info.json => keyboards/keychron/v2/ansi_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/v2/iso/info.json => keyboards/keychron/v2/iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/v2/iso_encoder/info.json => keyboards/keychron/v2/iso_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/v2/jis/info.json => keyboards/keychron/v2/jis/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/v2/jis_encoder/info.json => keyboards/keychron/v2/jis_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/v3/ansi/info.json => keyboards/keychron/v3/ansi/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",

M keyboards/keychron/v3/ansi_encoder/info.json => keyboards/keychron/v3/ansi_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/v3/iso/info.json => keyboards/keychron/v3/iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",

M keyboards/keychron/v3/iso_encoder/info.json => keyboards/keychron/v3/iso_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/v3/jis/info.json => keyboards/keychron/v3/jis/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",

M keyboards/keychron/v3/jis_encoder/info.json => keyboards/keychron/v3/jis_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/v4/ansi/info.json => keyboards/keychron/v4/ansi/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9"],

M keyboards/keychron/v4/iso/info.json => keyboards/keychron/v4/iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9"],

M keyboards/keychron/v5/ansi/info.json => keyboards/keychron/v5/ansi/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",

M keyboards/keychron/v5/ansi_encoder/info.json => keyboards/keychron/v5/ansi_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/v5/iso/info.json => keyboards/keychron/v5/iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",

M keyboards/keychron/v5/iso_encoder/info.json => keyboards/keychron/v5/iso_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/v6/ansi/info.json => keyboards/keychron/v6/ansi/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",

M keyboards/keychron/v6/ansi_encoder/info.json => keyboards/keychron/v6/ansi_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/v6/iso/info.json => keyboards/keychron/v6/iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "processor": "STM32L432",
    "bootloader": "stm32-dfu",

M keyboards/keychron/v6/iso_encoder/info.json => keyboards/keychron/v6/iso_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "encoder": {
        "rotary": [

M keyboards/keychron/v7/ansi/info.json => keyboards/keychron/v7/ansi/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "A10", "B5"],

M keyboards/keychron/v7/iso/info.json => keyboards/keychron/v7/iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "A10", "B5"],

M keyboards/keychron/v8/ansi/info.json => keyboards/keychron/v8/ansi/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/v8/ansi_encoder/info.json => keyboards/keychron/v8/ansi_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/v8/iso/info.json => keyboards/keychron/v8/iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/keychron/v8/iso_encoder/info.json => keyboards/keychron/v8/iso_encoder/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "1.0.0"
    },
    "rgb_matrix": {
        "driver": "CKLED2001"
        "driver": "ckled2001"
    },
    "matrix_pins": {
        "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "H3"],

M keyboards/kprepublic/bm16a/v2/info.json => keyboards/kprepublic/bm16a/v2/info.json +1 -1
@@ 55,7 55,7 @@
    },
    "community_layouts": ["ortho_4x4"],
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "animations": {
            "alphas_mods": true,
            "gradient_up_down": true,

M keyboards/kprepublic/bm40hsrgb/info.json => keyboards/kprepublic/bm40hsrgb/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "E2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "rgblight": {
        "max_brightness": 180

M keyboards/kprepublic/bm60hsrgb/rev1/info.json => keyboards/kprepublic/bm60hsrgb/rev1/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "E2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "rgblight": {
        "max_brightness": 180

M keyboards/kprepublic/bm60hsrgb/rev2/rev2.c => keyboards/kprepublic/bm60hsrgb/rev2/rev2.c +6 -6
@@ 153,16 153,16 @@ LED_TYPE rgb_matrix_ws2812_array[WS2812_LED_TOTAL];

static void rgb_matrix_driver_init(void) {
    i2c_init();
    IS31FL3733_init(DRIVER_ADDR_1, 0);
    is31fl3733_init(DRIVER_ADDR_1, 0);
    for (uint8_t index = 0; index < ISSI_LED_TOTAL; index++) {
        bool enabled = true;
        IS31FL3733_set_led_control_register(index, enabled, enabled, enabled);
        is31fl3733_set_led_control_register(index, enabled, enabled, enabled);
    }
    IS31FL3733_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3733_update_led_control_registers(DRIVER_ADDR_1, 0);
}

static void rgb_matrix_driver_flush(void) {
    IS31FL3733_update_pwm_buffers(DRIVER_ADDR_1, 0);
    is31fl3733_update_pwm_buffers(DRIVER_ADDR_1, 0);
#    if WS2812_LED_TOTAL > 0
    ws2812_setleds(rgb_matrix_ws2812_array, WS2812_LED_TOTAL);
#    endif


@@ 170,7 170,7 @@ static void rgb_matrix_driver_flush(void) {

static void rgb_matrix_driver_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    if (index < ISSI_LED_TOTAL) {
        IS31FL3733_set_color(index, red, green, blue);
        is31fl3733_set_color(index, red, green, blue);
    } else {
#    if WS2812_LED_TOTAL > 0
        rgb_matrix_ws2812_array[index - ISSI_LED_TOTAL].r = red;


@@ 181,7 181,7 @@ static void rgb_matrix_driver_set_color(int index, uint8_t red, uint8_t green, u
}

static void rgb_matrix_driver_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
    IS31FL3733_set_color_all(red, green, blue);
    is31fl3733_set_color_all(red, green, blue);
#    if WS2812_LED_TOTAL > 0
    for (uint8_t i = 0; i < WS2812_LED_TOTAL; i++) {
        rgb_matrix_ws2812_array[i].r = red;

M keyboards/kprepublic/bm60hsrgb_ec/rev1/info.json => keyboards/kprepublic/bm60hsrgb_ec/rev1/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "E2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D0", "D1", "D2", "D3", "D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7"],

M keyboards/kprepublic/bm60hsrgb_ec/rev2/info.json => keyboards/kprepublic/bm60hsrgb_ec/rev2/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "F0"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "rgblight": {
        "saturation_steps": 8,

M keyboards/kprepublic/bm60hsrgb_iso/rev1/info.json => keyboards/kprepublic/bm60hsrgb_iso/rev1/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "E2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D0", "D1", "D2", "D3", "D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7"],

M keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c => keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c +6 -6
@@ 153,16 153,16 @@ LED_TYPE rgb_matrix_ws2812_array[WS2812_LED_TOTAL];

static void rgb_matrix_driver_init(void) {
    i2c_init();
    IS31FL3733_init(DRIVER_ADDR_1, 0);
    is31fl3733_init(DRIVER_ADDR_1, 0);
    for (uint8_t index = 0; index < ISSI_LED_TOTAL; index++) {
        bool enabled = true;
        IS31FL3733_set_led_control_register(index, enabled, enabled, enabled);
        is31fl3733_set_led_control_register(index, enabled, enabled, enabled);
    }
    IS31FL3733_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3733_update_led_control_registers(DRIVER_ADDR_1, 0);
}

static void rgb_matrix_driver_flush(void) {
    IS31FL3733_update_pwm_buffers(DRIVER_ADDR_1, 0);
    is31fl3733_update_pwm_buffers(DRIVER_ADDR_1, 0);
#    if WS2812_LED_TOTAL > 0
    ws2812_setleds(rgb_matrix_ws2812_array, WS2812_LED_TOTAL);
#    endif


@@ 170,7 170,7 @@ static void rgb_matrix_driver_flush(void) {

static void rgb_matrix_driver_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    if (index < ISSI_LED_TOTAL) {
        IS31FL3733_set_color(index, red, green, blue);
        is31fl3733_set_color(index, red, green, blue);
    } else {
#    if WS2812_LED_TOTAL > 0
        rgb_matrix_ws2812_array[index - ISSI_LED_TOTAL].r = red;


@@ 181,7 181,7 @@ static void rgb_matrix_driver_set_color(int index, uint8_t red, uint8_t green, u
}

static void rgb_matrix_driver_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
    IS31FL3733_set_color_all(red, green, blue);
    is31fl3733_set_color_all(red, green, blue);
#    if WS2812_LED_TOTAL > 0
    for (uint8_t i = 0; i < WS2812_LED_TOTAL; i++) {
        rgb_matrix_ws2812_array[i].r = red;

M keyboards/kprepublic/bm60hsrgb_poker/rev1/info.json => keyboards/kprepublic/bm60hsrgb_poker/rev1/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "E2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "rgblight": {
        "saturation_steps": 8,

M keyboards/kprepublic/bm60hsrgb_poker/rev2/rev2.c => keyboards/kprepublic/bm60hsrgb_poker/rev2/rev2.c +6 -6
@@ 149,16 149,16 @@ LED_TYPE rgb_matrix_ws2812_array[WS2812_LED_TOTAL];

static void rgb_matrix_driver_init(void) {
    i2c_init();
    IS31FL3733_init(DRIVER_ADDR_1, 0);
    is31fl3733_init(DRIVER_ADDR_1, 0);
    for (uint8_t index = 0; index < ISSI_LED_TOTAL; index++) {
        bool enabled = true;
        IS31FL3733_set_led_control_register(index, enabled, enabled, enabled);
        is31fl3733_set_led_control_register(index, enabled, enabled, enabled);
    }
    IS31FL3733_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3733_update_led_control_registers(DRIVER_ADDR_1, 0);
}

static void rgb_matrix_driver_flush(void) {
    IS31FL3733_update_pwm_buffers(DRIVER_ADDR_1, 0);
    is31fl3733_update_pwm_buffers(DRIVER_ADDR_1, 0);
#    if WS2812_LED_TOTAL > 0
    ws2812_setleds(rgb_matrix_ws2812_array, WS2812_LED_TOTAL);
#    endif


@@ 166,7 166,7 @@ static void rgb_matrix_driver_flush(void) {

static void rgb_matrix_driver_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    if (index < ISSI_LED_TOTAL) {
        IS31FL3733_set_color(index, red, green, blue);
        is31fl3733_set_color(index, red, green, blue);
    } else {
#    if WS2812_LED_TOTAL > 0
        rgb_matrix_ws2812_array[index - ISSI_LED_TOTAL].r = red;


@@ 177,7 177,7 @@ static void rgb_matrix_driver_set_color(int index, uint8_t red, uint8_t green, u
}

static void rgb_matrix_driver_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
    IS31FL3733_set_color_all(red, green, blue);
    is31fl3733_set_color_all(red, green, blue);
#    if WS2812_LED_TOTAL > 0
    for (uint8_t i = 0; i < WS2812_LED_TOTAL; i++) {
        rgb_matrix_ws2812_array[i].r = red;

M keyboards/kprepublic/bm65hsrgb/rev1/info.json => keyboards/kprepublic/bm65hsrgb/rev1/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "E2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D0", "D1", "D2", "D3", "D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6"],

M keyboards/kprepublic/bm65hsrgb_iso/rev1/info.json => keyboards/kprepublic/bm65hsrgb_iso/rev1/info.json +1 -1
@@ 19,7 19,7 @@
        "pin": "E2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D0", "D1", "D2", "D3", "D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6"],

M keyboards/kprepublic/bm68hsrgb/rev1/info.json => keyboards/kprepublic/bm68hsrgb/rev1/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "E2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D0", "D1", "D2", "D3", "D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6"],

M keyboards/kprepublic/bm68hsrgb/rev2/info.json => keyboards/kprepublic/bm68hsrgb/rev2/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "E2"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "rgblight": {
        "saturation_steps": 8,

M keyboards/kprepublic/bm80hsrgb/info.json => keyboards/kprepublic/bm80hsrgb/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "E2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F0", "F1", "F4", "D7", "D6", "D4", "D5", "D3", "D2", "F5", "F6", "F7", "D1", "D0", "B4", "B5", "B6"],

M keyboards/kprepublic/bm80v2/info.json => keyboards/kprepublic/bm80v2/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.2"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["E6", "F0", "F1", "F4", "D7", "D6", "B7", "B1", "B0", "B2", "B3", "D3", "D5", "D4", "D2", "B4", "B5"],

M keyboards/kprepublic/bm80v2_iso/info.json => keyboards/kprepublic/bm80v2_iso/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.2"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["E6", "F0", "F1", "F4", "D7", "D6", "B7", "B1", "B0", "B2", "B3", "D3", "D5", "D4", "D2", "B4", "B5"],

M keyboards/kprepublic/bm980hsrgb/info.json => keyboards/kprepublic/bm980hsrgb/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B1", "B2", "B3", "B7", "D0", "D1", "D2", "D3", "D5", "E6", "F0", "F1", "F4", "F5", "D6"],

M keyboards/kuro/kuro65/info.json => keyboards/kuro/kuro65/info.json +1 -1
@@ 115,7 115,7 @@
        }
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 4, "matrix": [4, 6], "x": 96, "y": 64},
            {"flags": 1, "matrix": [4, 10], "x": 150, "y": 64},

M keyboards/labbe/labbeminiv1/keymaps/rgbmatrix/rules.mk => keyboards/labbe/labbeminiv1/keymaps/rgbmatrix/rules.mk +1 -1
@@ 1,2 1,2 @@
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = WS2812
\ No newline at end of file
RGB_MATRIX_DRIVER = ws2812
\ No newline at end of file

M keyboards/laser_ninja/pumpkin_pad/info.json => keyboards/laser_ninja/pumpkin_pad/info.json +1 -1
@@ 46,7 46,7 @@
        }
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 2, "x": 36, "y": 3},
            {"flags": 2, "x": 86, "y": 2},

M keyboards/latincompass/latin17rgb/info.json => keyboards/latincompass/latin17rgb/info.json +1 -1
@@ 19,7 19,7 @@
    "pin": "B7"
  },
  "rgb_matrix": {
    "driver": "IS31FL3731"
    "driver": "is31fl3731"
  },
  "matrix_pins": {
    "cols": ["F7", "F6", "F5", "F4"],

M keyboards/latincompass/latin60rgb/info.json => keyboards/latincompass/latin60rgb/info.json +1 -1
@@ 9,7 9,7 @@
    "device_version": "0.0.1"
  },
  "rgb_matrix": {
    "driver": "IS31FL3733"
    "driver": "is31fl3733"
  },
  "matrix_pins": {
    "cols": ["F7", "F6", "F5", "F4", "F1", "F0", "E6", "B0", "B1", "B2", "B3", "D6", "D4", "D3"],

M keyboards/latincompass/latin6rgb/info.json => keyboards/latincompass/latin6rgb/info.json +1 -1
@@ 9,7 9,7 @@
    "device_version": "0.0.1"
  },
  "rgb_matrix": {
    "driver": "IS31FL3731"
    "driver": "is31fl3731"
  },
  "matrix_pins": {
    "cols": ["F7", "F6", "F5"],

M keyboards/latincompass/latinpad/info.json => keyboards/latincompass/latinpad/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D4", "C6", "D7", "E6"],

M keyboards/lily58/r2g/info.json => keyboards/lily58/r2g/info.json +1 -1
@@ 104,7 104,7 @@
        }
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "split_count": [37, 37],
        "layout": [
            {"flags": 4, "matrix": [0, 5], "x": 72, "y": 4},   // L SW06

M keyboards/linworks/fave65h/info.json => keyboards/linworks/fave65h/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["E6", "F0", "F1", "F4", "F5", "F6", "F7", "C7", "C6", "B6", "B5", "B4", "D7", "D6", "D4"],

M keyboards/linworks/fave84h/info.json => keyboards/linworks/fave84h/info.json +1 -1
@@ 23,7 23,7 @@
        "rows": ["B1", "B2", "B3", "D3", "D1", "D0"]
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 1, "matrix": [3, 13], "x": 190, "y": 40},
            {"flags": 4, "matrix": [3, 11], "x": 167, "y": 40},

M keyboards/linworks/fave87h/info.json => keyboards/linworks/fave87h/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "D2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F0", "F1", "F4", "F5", "F6", "F7", "C7", "C6", "B6", "B5", "B4", "D7", "D6", "D4", "B0", "B7", "E6"],

M keyboards/maple_computing/launchpad/keymaps/drashna/rules.mk => keyboards/maple_computing/launchpad/keymaps/drashna/rules.mk +1 -1
@@ 4,4 4,4 @@ RGBLIGHT_ENABLE  = no
AUDIO_ENABLE     = no
BOOTMAGIC_ENABLE = yes      # Enable Bootmagic Lite
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = WS2812
RGB_MATRIX_DRIVER = ws2812

M keyboards/marksard/rhymestone/rev1/info.json => keyboards/marksard/rhymestone/rev1/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.2.0"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "sat_steps": 8,
        "val_steps": 8,
        "speed_steps": 10

M keyboards/matrix/m20add/rgb_ring.c => keyboards/matrix/m20add/rgb_ring.c +27 -27
@@ 135,13 135,13 @@ static void testing_mode(void)
    if (timer_elapsed(animation_status.last_timer) > EFFECT_TEST_INTERVAL) {
        HSV h = {rgblight_config.hue, rgblight_config.sat, rgblight_config.val};
        RGB c = hsv_to_rgb(h);
        //IS31FL3731_set_color_all(c.r, c.g, c.b);
        IS31FL3731_set_color_all(0, 0, 0);
        IS31FL3731_set_color(rgb_ring.outer_index+RING_OUTER_BEGIN, c.r, c.g, c.b);
        //is31fl3731_set_color_all(c.r, c.g, c.b);
        is31fl3731_set_color_all(0, 0, 0);
        is31fl3731_set_color(rgb_ring.outer_index+RING_OUTER_BEGIN, c.r, c.g, c.b);
        h.v = EFFECT_TEST_VAL_STEP*rgb_ring.outer_index;
        c = hsv_to_rgb(h);
        for (uint8_t i = RING_INNER_BEGIN; i <= RING_INNER_END; i++) {
            IS31FL3731_set_color(i, c.r, c.g, c.b);
            is31fl3731_set_color(i, c.r, c.g, c.b);
        }
        rgb_ring.outer_index = (rgb_ring.outer_index + 1) % RING_OUTER_SIZE;
        //rgb_ring.inner_index = (rgb_ring.inner_index + 1) % RING_INNER_SIZE;


@@ 183,7 183,7 @@ static void ring_effect_no_1(void)
        HSV h = {rgblight_config.hue, rgblight_config.sat, rgblight_config.val};
        for (uint8_t i = RING_OUTER_BEGIN; i <= RING_OUTER_END; i++) {
            RGB c = hsv_to_rgb(h);
            IS31FL3731_set_color(i, c.r, c.g, c.b);
            is31fl3731_set_color(i, c.r, c.g, c.b);
        }
        rgblight_config.hue += EFFECT_1_HUE_STEP;
        rgb_ring.effect_count++;


@@ 200,12 200,12 @@ static void ring_effect_no_1(void)
static void ring_effect_no_2(void)
{
    if (need_update(EFFECT_2_INTERVAL)) {
        IS31FL3731_set_color_all(0, 0, 0);
        is31fl3731_set_color_all(0, 0, 0);
        HSV h = {rgblight_config.hue, rgblight_config.sat, rgblight_config.val};
        RGB c = hsv_to_rgb(h);

        IS31FL3731_set_color(rgb_ring.led_begin, c.r, c.g, c.b);
        IS31FL3731_set_color(rgb_ring.led_end, c.r, c.g, c.b);
        is31fl3731_set_color(rgb_ring.led_begin, c.r, c.g, c.b);
        is31fl3731_set_color(rgb_ring.led_end, c.r, c.g, c.b);

        rgb_ring.led_begin = (rgb_ring.led_begin + 1) % RING_OUTER_SIZE;
        rgb_ring.led_end = (rgb_ring.led_end + RING_OUTER_SIZE - 1) % RING_OUTER_SIZE;


@@ 225,19 225,19 @@ static void ring_effect_no_2(void)
static void ring_effect_no_3(void)
{
    if (rgb_ring.effect_count == 0) {
        IS31FL3731_set_color_all(0, 0, 0);
        is31fl3731_set_color_all(0, 0, 0);
    }

    if (need_update(EFFECT_3_INTERVAL)) {
        HSV h = {rgblight_config.hue, rgblight_config.sat, rgblight_config.val};

        if (rgb_ring.led_clear) {
            IS31FL3731_set_color(rgb_ring.led_begin, 0, 0, 0);
            IS31FL3731_set_color(rgb_ring.led_end, 0, 0, 0);
            is31fl3731_set_color(rgb_ring.led_begin, 0, 0, 0);
            is31fl3731_set_color(rgb_ring.led_end, 0, 0, 0);
        } else {
            RGB c = hsv_to_rgb(h);
            IS31FL3731_set_color(rgb_ring.led_begin, c.r, c.g, c.b);
            IS31FL3731_set_color(rgb_ring.led_end, c.r, c.g, c.b);
            is31fl3731_set_color(rgb_ring.led_begin, c.r, c.g, c.b);
            is31fl3731_set_color(rgb_ring.led_end, c.r, c.g, c.b);
        }

        rgb_ring.led_begin = (rgb_ring.led_begin + 1) % RING_OUTER_SIZE;


@@ 273,12 273,12 @@ static void ring_effect_no_3(void)
static void ring_effect_no_4(void)
{
    if (need_update(EFFECT_4_INTERVAL)) {
        IS31FL3731_set_color_all(0, 0, 0);
        is31fl3731_set_color_all(0, 0, 0);
        HSV h = {rgblight_config.hue, rgblight_config.sat, rgblight_config.val};
        RGB c = hsv_to_rgb(h);

        IS31FL3731_set_color(rgb_ring.led_begin, c.r, c.g, c.b);
        IS31FL3731_set_color(rgb_ring.led_end, c.r, c.g, c.b);
        is31fl3731_set_color(rgb_ring.led_begin, c.r, c.g, c.b);
        is31fl3731_set_color(rgb_ring.led_end, c.r, c.g, c.b);

        rgb_ring.led_begin = (rgb_ring.led_begin + EFFECT_4_STEP) % RING_OUTER_SIZE;
        rgb_ring.led_end = (rgb_ring.led_end + RING_OUTER_SIZE - EFFECT_4_STEP) % RING_OUTER_SIZE;


@@ 297,16 297,16 @@ static void ring_effect_no_4(void)
static void ring_effect_no_5(void)
{
    if (need_update(EFFECT_5_INTERVAL)) {
        IS31FL3731_set_color_all(0, 0, 0);
        is31fl3731_set_color_all(0, 0, 0);
        for (uint8_t i = RING_INNER_BEGIN; i <= RING_INNER_END; i++) {
            HSV h = {rgblight_config.hue, rgblight_config.sat, rgblight_config.val};
            RGB c = hsv_to_rgb(h);
            IS31FL3731_set_color(i, c.r, c.g, c.b);
            is31fl3731_set_color(i, c.r, c.g, c.b);
        }
        for (uint8_t i = RING_OUTER_BEGIN; i <= RING_OUTER_END; i++) {
            HSV h = {rgblight_config.hue+EFFECT_5_HUE_STEP, rgblight_config.sat, rgblight_config.val};
            RGB c = hsv_to_rgb(h);
            IS31FL3731_set_color(i, c.r, c.g, c.b);
            is31fl3731_set_color(i, c.r, c.g, c.b);
        }
        rgblight_config.hue += EFFECT_5_HUE_STEP;
        rgb_ring.effect_count++;


@@ 323,16 323,16 @@ static void ring_effect_no_5(void)
static void ring_effect_no_6(void)
{
    if (need_update(EFFECT_6_INTERVAL)) {
        IS31FL3731_set_color_all(0, 0, 0);
        is31fl3731_set_color_all(0, 0, 0);
        for (uint8_t i = RING_INNER_BEGIN; i <= RING_INNER_END; i++) {
            HSV h = {rgblight_config.hue+i*EFFECT_I_HUE_STEP, rgblight_config.sat, rgblight_config.val};
            RGB c = hsv_to_rgb(h);
            IS31FL3731_set_color(i, c.r, c.g, c.b);
            is31fl3731_set_color(i, c.r, c.g, c.b);
        }
        for (uint8_t i = RING_OUTER_BEGIN; i <= RING_OUTER_END; i++) {
            HSV h = {rgblight_config.hue+i*EFFECT_O_HUE_STEP, rgblight_config.sat, rgblight_config.val};
            RGB c = hsv_to_rgb(h);
            IS31FL3731_set_color(i, c.r, c.g, c.b);
            is31fl3731_set_color(i, c.r, c.g, c.b);
        }
        rgblight_config.hue += EFFECT_I_HUE_STEP;
        rgb_ring.effect_count++;


@@ 364,7 364,7 @@ void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds)
    }

    for (uint8_t i = 0; i < num_leds; i++) {
        IS31FL3731_set_color(i, start_led[i].r, start_led[i].g, start_led[i].b);
        is31fl3731_set_color(i, start_led[i].r, start_led[i].g, start_led[i].b);
    }
}



@@ 372,12 372,12 @@ void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds)
void rgb_ring_init(void)
{
    i2c_init();
    IS31FL3731_init(DRIVER_ADDR_1);
    is31fl3731_init(DRIVER_ADDR_1);
    for (int index = 0; index < RGB_MATRIX_LED_COUNT; index++) {
        bool enabled = true;
        IS31FL3731_set_led_control_register(index, enabled, enabled, enabled);
        is31fl3731_set_led_control_register(index, enabled, enabled, enabled);
    }
    IS31FL3731_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3731_update_led_control_registers(DRIVER_ADDR_1, 0);
}

void rgb_ring_task(void)


@@ 396,7 396,7 @@ void rgb_ring_task(void)
            break;
    };

    IS31FL3731_update_pwm_buffers(DRIVER_ADDR_1, 0);
    is31fl3731_update_pwm_buffers(DRIVER_ADDR_1, 0);
}

bool process_record_kb(uint16_t keycode, keyrecord_t *record)

M keyboards/matrix/noah/info.json => keyboards/matrix/noah/info.json +1 -1
@@ 16,7 16,7 @@
    "pin": "B1"
  },
  "rgb_matrix": {
    "driver": "IS31FL3731"
    "driver": "is31fl3731"
  },
  "community_layouts": ["65_iso_blocker"],
  "layouts": {

M keyboards/mechlovin/adelais/rgb_led/rev1/info.json => keyboards/mechlovin/adelais/rgb_led/rev1/info.json +1 -1
@@ 4,7 4,7 @@
        "pid": "0xAEC1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["A10", "A9", "A8", "B15", "B14", "B13", "B12", "B11", "B10", "B8", "B4", "B5", "B3", "C14", "A15"],

M keyboards/mechlovin/adelais/rgb_led/rev2/info.json => keyboards/mechlovin/adelais/rgb_led/rev2/info.json +1 -1
@@ 4,7 4,7 @@
        "pid": "0xAEC2"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "matrix_pins": {
        "cols": ["A10", "A9", "A8", "B15", "B14", "B13", "B12", "B11", "B10", "B8", "B4", "B5", "B3", "C14", "A7"],

M keyboards/mechlovin/adelais/rgb_led/rev3/info.json => keyboards/mechlovin/adelais/rgb_led/rev3/info.json +1 -1
@@ 4,7 4,7 @@
        "pid": "0xAEC3"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B10", "B11", "B2", "B1", "B0", "A6", "A5", "A10", "A9", "A15", "B3", "B4", "B5", "B8", "B9"],

M keyboards/mechlovin/delphine/rgb_led/info.json => keyboards/mechlovin/delphine/rgb_led/info.json +1 -1
@@ 13,6 13,6 @@
        "pin": "E2"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    }
}

M keyboards/mechlovin/hannah60rgb/rev1/info.json => keyboards/mechlovin/hannah60rgb/rev1/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "A15"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B11", "B10", "B2", "B1", "B0", "A7", "A6", "A0", "C15", "B4", "B5", "B3", "C13", "C14"],

M keyboards/mechlovin/hannah60rgb/rev2/info.json => keyboards/mechlovin/hannah60rgb/rev2/info.json +1 -1
@@ 17,7 17,7 @@
        "pin": "A15"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "matrix_pins": {
        "cols": ["B11", "B10", "B2", "B1", "B0", "A7", "A6", "A0", "C15", "B4", "B5", "B3", "C13", "C14"],

M keyboards/mechlovin/infinity87/rgb_rev1/info.json => keyboards/mechlovin/infinity87/rgb_rev1/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B12", "B13", "B14", "B15", "A8", "A9", "B11", "B10", "B2", "B1", "B0", "A7", "A6", "A5", "A2", "A1", "A0"],

M keyboards/mechlovin/infinity875/info.json => keyboards/mechlovin/infinity875/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "indicators": {
        "caps_lock": "D6",

M keyboards/melgeek/mach80/rev1/info.json => keyboards/melgeek/mach80/rev1/info.json +1 -1
@@ 1,6 1,6 @@
{
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B0", "B1", "B2", "B3", "D2", "D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "D3"],

M keyboards/melgeek/mach80/rev1/rev1.c => keyboards/melgeek/mach80/rev1/rev1.c +8 -8
@@ 153,21 153,21 @@ const is31_led g_is31_indicator_leds[3] = {
bool led_update_kb(led_t led_state) {
    if (led_update_user(led_state)) {
        if (led_state.caps_lock) {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[2], 0x00, 0x00, 0xff);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[2], 0x00, 0x00, 0xff);
        } else {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[2], 0x00, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[2], 0x00, 0x00, 0x00);
        }

        if (led_state.num_lock) {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[1], 0xff, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[1], 0xff, 0x00, 0x00);
        } else {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[1], 0x00, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[1], 0x00, 0x00, 0x00);
        }

        if (led_state.scroll_lock) {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[0], 0x00, 0xff, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[0], 0x00, 0xff, 0x00);
        } else {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[0], 0x00, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[0], 0x00, 0x00, 0x00);
        }
    }
    return true;


@@ 176,10 176,10 @@ bool led_update_kb(led_t led_state) {
void matrix_init_kb(void) {
    for (int i = 0; i < DRIVER_INDICATOR_LED_TOTAL; ++i) {
        is31_led led = g_is31_indicator_leds[i];
        IS31FL3741_set_scaling_registers(&led, 0xFF, 0xFF, 0xFF);
        is31fl3741_set_scaling_registers(&led, 0xFF, 0xFF, 0xFF);
    }

    IS31FL3741_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3741_update_led_control_registers(DRIVER_ADDR_1, 0);

    matrix_init_user();
}

M keyboards/melgeek/mach80/rev2/info.json => keyboards/melgeek/mach80/rev2/info.json +1 -1
@@ 1,6 1,6 @@
{
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B0", "B1", "B2", "B3", "D2", "D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "D3"],

M keyboards/melgeek/mach80/rev2/rev2.c => keyboards/melgeek/mach80/rev2/rev2.c +8 -8
@@ 151,21 151,21 @@ const is31_led g_is31_indicator_leds[3] = {
bool led_update_kb(led_t led_state) {
    if (led_update_user(led_state)) {
        if (led_state.caps_lock) {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[2], 0x00, 0x00, 0xff);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[2], 0x00, 0x00, 0xff);
        } else {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[2], 0x00, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[2], 0x00, 0x00, 0x00);
        }

        if (led_state.num_lock) {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[1], 0xff, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[1], 0xff, 0x00, 0x00);
        } else {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[1], 0x00, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[1], 0x00, 0x00, 0x00);
        }

        if (led_state.scroll_lock) {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[0], 0x00, 0xff, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[0], 0x00, 0xff, 0x00);
        } else {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[0], 0x00, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[0], 0x00, 0x00, 0x00);
        }
    }
    return true;


@@ 174,10 174,10 @@ bool led_update_kb(led_t led_state) {
void matrix_init_kb(void) {
    for (int i = 0; i < DRIVER_INDICATOR_LED_TOTAL; ++i) {
        is31_led led = g_is31_indicator_leds[i];
        IS31FL3741_set_scaling_registers(&led, 0xFF, 0xFF, 0xFF);
        is31fl3741_set_scaling_registers(&led, 0xFF, 0xFF, 0xFF);
    }

    IS31FL3741_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3741_update_led_control_registers(DRIVER_ADDR_1, 0);

    matrix_init_user();
}

M keyboards/melgeek/mj61/rev1/info.json => keyboards/melgeek/mj61/rev1/info.json +1 -1
@@ 1,6 1,6 @@
{
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B15", "A8", "A10", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15", "A0", "A1"],

M keyboards/melgeek/mj61/rev2/info.json => keyboards/melgeek/mj61/rev2/info.json +1 -1
@@ 1,6 1,6 @@
{
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B15", "A8", "B13", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15", "A0", "A1"],

M keyboards/melgeek/mj63/rev1/info.json => keyboards/melgeek/mj63/rev1/info.json +1 -1
@@ 1,6 1,6 @@
{
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B15", "A8", "A10", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15", "A0", "A1"],

M keyboards/melgeek/mj63/rev2/info.json => keyboards/melgeek/mj63/rev2/info.json +1 -1
@@ 1,6 1,6 @@
{
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B15", "A8", "B13", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15", "A0", "A1"],

M keyboards/melgeek/mj64/rev1/info.json => keyboards/melgeek/mj64/rev1/info.json +1 -1
@@ 1,6 1,6 @@
{
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B15", "A8", "A10", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15", "A0", "A1"],

M keyboards/melgeek/mj64/rev2/info.json => keyboards/melgeek/mj64/rev2/info.json +1 -1
@@ 1,6 1,6 @@
{
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B15", "A8", "A10", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15", "A0", "A1"],

M keyboards/melgeek/mj64/rev3/info.json => keyboards/melgeek/mj64/rev3/info.json +1 -1
@@ 1,6 1,6 @@
{
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B15", "A8", "B13", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15", "A0", "A1"],

M keyboards/melgeek/mj65/info.json => keyboards/melgeek/mj65/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B15", "A8", "B13", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15", "A0", "A1", "B14"],

M keyboards/melgeek/mojo68/info.json => keyboards/melgeek/mojo68/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B0", "B1", "B2", "B3", "D2", "D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7"],

M keyboards/melgeek/mojo68/rev1/rev1.c => keyboards/melgeek/mojo68/rev1/rev1.c +8 -8
@@ 121,21 121,21 @@ const is31_led g_is31_indicator_leds[3] = {
bool led_update_kb(led_t led_state) {
    if (led_update_user(led_state)) {
        if (led_state.caps_lock) {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[2], 0xff, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[2], 0xff, 0x00, 0x00);
        } else {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[2], 0x00, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[2], 0x00, 0x00, 0x00);
        }

        if (led_state.num_lock) {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[1], 0x00, 0xff, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[1], 0x00, 0xff, 0x00);
        } else {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[1], 0x00, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[1], 0x00, 0x00, 0x00);
        }

        if (led_state.scroll_lock) {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[0], 0x00, 0x00, 0xff);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[0], 0x00, 0x00, 0xff);
        } else {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[0], 0x00, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[0], 0x00, 0x00, 0x00);
        }
    }
    return true;


@@ 144,10 144,10 @@ bool led_update_kb(led_t led_state) {
void matrix_init_kb(void) {
    for (int i = 0; i < DRIVER_INDICATOR_LED_TOTAL; ++i) {
        is31_led led = g_is31_indicator_leds[i];
        IS31FL3741_set_scaling_registers(&led, 0xFF, 0xFF, 0xFF);
        is31fl3741_set_scaling_registers(&led, 0xFF, 0xFF, 0xFF);
    }

    IS31FL3741_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3741_update_led_control_registers(DRIVER_ADDR_1, 0);

    matrix_init_user();
}

M keyboards/melgeek/mojo75/info.json => keyboards/melgeek/mojo75/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B12", "B13", "B14", "B15", "A8", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15", "A0", "A1"],

M keyboards/melgeek/tegic/info.json => keyboards/melgeek/tegic/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B0", "B1", "B2", "B3", "D2", "D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7"],

M keyboards/melgeek/z70ultra/info.json => keyboards/melgeek/z70ultra/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["B11", "B10", "B1", "A10", "B5", "B4", "B3", "A15", "A2", "A1", "A0", "C15", "C14", "C13"],

M keyboards/melgeek/z70ultra/z70ultra.c => keyboards/melgeek/z70ultra/z70ultra.c +14 -14
@@ 129,27 129,27 @@ const is31_led g_is31_indicator_leds[6] = {
bool led_update_kb(led_t led_state) {
    if (led_update_user(led_state)) {
        if (led_state.caps_lock) {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[2], 0xff, 0x00, 0x00);
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[3], 0xff, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[2], 0xff, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[3], 0xff, 0x00, 0x00);
        } else {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[2], 0x00, 0x00, 0x00);
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[3], 0x00, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[2], 0x00, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[3], 0x00, 0x00, 0x00);
        }

        if (led_state.num_lock) {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[1], 0x00, 0xff, 0x00);
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[4], 0x00, 0xff, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[1], 0x00, 0xff, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[4], 0x00, 0xff, 0x00);
        } else {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[1], 0x00, 0x00, 0x00);
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[4], 0x00, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[1], 0x00, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[4], 0x00, 0x00, 0x00);
        }

        if (led_state.scroll_lock) {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[0], 0x00, 0x00, 0xff);
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[5], 0x00, 0x00, 0xff);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[0], 0x00, 0x00, 0xff);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[5], 0x00, 0x00, 0xff);
        } else {
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[0], 0x00, 0x00, 0x00);
            IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[5], 0x00, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[0], 0x00, 0x00, 0x00);
            is31fl3741_set_pwm_buffer(&g_is31_indicator_leds[5], 0x00, 0x00, 0x00);
        }
    }
    return true;


@@ 158,10 158,10 @@ bool led_update_kb(led_t led_state) {
void matrix_init_kb(void) {
    for (int i = 0; i < DRIVER_INDICATOR_LED_TOTAL; ++i) {
        is31_led led = g_is31_indicator_leds[i];
        IS31FL3741_set_scaling_registers(&led, 0xFF, 0xFF, 0xFF);
        is31fl3741_set_scaling_registers(&led, 0xFF, 0xFF, 0xFF);
    }

    IS31FL3741_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3741_update_led_control_registers(DRIVER_ADDR_1, 0);

    matrix_init_user();
}

M keyboards/miller/gm862/info.json => keyboards/miller/gm862/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["B5", "B6", "C6", "C7", "F7", "F6", "B0", "B1", "B2", "B3", "B7", "D2", "D3", "D5"],

M keyboards/ml/gas75/info.json => keyboards/ml/gas75/info.json +1 -1
@@ 10,7 10,7 @@
        "force_nkro": true
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D1", "D2", "B5", "B6", "C6", "C7", "F7", "F6", "F5", "F4", "E6", "B0", "B1", "B2", "B3"],

M keyboards/momokai/tap_duo/info.json => keyboards/momokai/tap_duo/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "F0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["E6", "B2", "D1", "D2", "D3"],

M keyboards/momokai/tap_trio/info.json => keyboards/momokai/tap_trio/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "F0"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["E6", "B2", "B7", "D1", "D2", "D3"],

M keyboards/monsgeek/m5/info.json => keyboards/monsgeek/m5/info.json +1 -1
@@ 30,7 30,7 @@
        "caps_lock": "C10"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733",
        "driver": "is31fl3733",
        "max_brightness": 180,
        "animations": {
            "breathing": true,

M keyboards/monsgeek/m6/info.json => keyboards/monsgeek/m6/info.json +1 -1
@@ 26,7 26,7 @@
    },
    "diode_direction": "ROW2COL",
    "rgb_matrix": {
        "driver": "IS31FL3733",
        "driver": "is31fl3733",
        "max_brightness": 200,
        "val_steps": 20,
        "animations": {

M keyboards/monstargear/xo87/rgb/info.json => keyboards/monstargear/xo87/rgb/info.json +1 -1
@@ 12,7 12,7 @@
    "pin": "D7"
  },
  "rgb_matrix": {
    "driver": "WS2812"
    "driver": "ws2812"
  },
  "rgblight": {
    "max_brightness": 100

M keyboards/moonlander/info.json => keyboards/moonlander/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "processor": "STM32F303",
    "bootloader": "stm32-dfu",

M keyboards/mss_studio/m63_rgb/info.json => keyboards/mss_studio/m63_rgb/info.json +1 -1
@@ 13,7 13,7 @@
        "pin": "B15"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B0", "B1", "B2", "B10", "A7", "A6", "A5", "A4", "B5", "B6", "A1", "B7", "B8", "B9"],

M keyboards/mss_studio/m64_rgb/info.json => keyboards/mss_studio/m64_rgb/info.json +1 -1
@@ 13,7 13,7 @@
        "pin": "B15"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B0", "B1", "B2", "B10", "A7", "A6", "A5", "A4", "B5", "B6", "A1", "B7", "B8", "B9"],

M keyboards/mt/mt64rgb/info.json => keyboards/mt/mt64rgb/info.json +1 -1
@@ 19,7 19,7 @@
        "pin": "B0"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["B5", "B6", "C6", "C7", "F7", "F6", "F5", "F4", "F1", "F0", "B1", "B2", "B3", "B7"],

M keyboards/mt/mt84/info.json => keyboards/mt/mt84/info.json +1 -1
@@ 18,7 18,7 @@
        "pin": "B0"
    },
    "rgb_matrix": {
        "driver": "IS31FL3737"
        "driver": "is31fl3737"
    },
    "matrix_pins": {
        "cols": ["B5", "B6", "C6", "C7", "F7", "F6", "F5", "F4", "F1", "F0", "B1", "B2", "B3", "B7", "E6"],

M keyboards/mwstudio/mw65_rgb/info.json => keyboards/mwstudio/mw65_rgb/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "B3"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["C6", "B6", "B5", "B4", "D7", "D6", "D4", "C7", "F7", "F6", "F5", "F4", "F1", "F0", "E6"],

M keyboards/mwstudio/mw75/info.json => keyboards/mwstudio/mw75/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6", "F5", "F4", "F1", "F0", "E6"],

M keyboards/mwstudio/mw75r2/info.json => keyboards/mwstudio/mw75r2/info.json +1 -1
@@ 18,7 18,7 @@
        "pin": "B3"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["C7", "C6", "B6", "B5", "B4", "D7", "D4", "D6", "F7", "F6", "E6", "F0", "F1", "F4", "F5"],

M keyboards/nack/info.json => keyboards/nack/info.json +1 -1
@@ 13,7 13,7 @@
        "driver": "spi"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "hue_steps": 10,
        "sat_steps": 10,
        "val_steps": 10

M keyboards/neson_design/700e/700e.c => keyboards/neson_design/700e/700e.c +20 -20
@@ 107,12 107,12 @@ static void self_testing(void)
    switch(rgb_state.testing) {
        case ST_STAGE_1:
            if (rgb_state.index !=0 ) {
                IS31FL3731_set_color_all(0, 0, 0);
                is31fl3731_set_color_all(0, 0, 0);
            }

            if (rgb_state.index >= ST_LEFT_END) {
                for (int i = rgb_state.index - 1; i < RGB_MATRIX_LED_COUNT - rgb_state.index + 1; i++) {
                    IS31FL3731_set_color(i, led.r, led.g, led.b);
                    is31fl3731_set_color(i, led.r, led.g, led.b);
                }
                if (rgb_state.index == ST_LEFT_END) {
                    rgb_state.index = ST_LEFT_BEGIN;


@@ 131,20 131,20 @@ static void self_testing(void)
        break;
        case ST_STAGE_2: {
            // clear all
            IS31FL3731_set_color_all(0, 0, 0);
            is31fl3731_set_color_all(0, 0, 0);
            int i = 0;
            // light left and right
            for (i = 0; i < ST_LEFT_SIZE; i++) {
                IS31FL3731_set_color(ST_LEFT_BEGIN+i, led.r, led.g, led.b);
                is31fl3731_set_color(ST_LEFT_BEGIN+i, led.r, led.g, led.b);
            }
            for (i = 0; i < ST_RIGHT_SIZE; i++) {
                IS31FL3731_set_color(ST_RIGHT_BEGIN+i, led.r, led.g, led.b);
                is31fl3731_set_color(ST_RIGHT_BEGIN+i, led.r, led.g, led.b);

            }
            if (rgb_state.dir) {
                // left to right
                for (int i = rgb_state.index; i < rgb_state.index+ST_LEFT_SIZE+ST_RIGHT_SIZE; i++) {
                    IS31FL3731_set_color(i, led.r, led.g, led.b);
                    is31fl3731_set_color(i, led.r, led.g, led.b);
                }
                rgb_state.index += ST_LEFT_SIZE+ST_RIGHT_SIZE;
                if (rgb_state.index == ST_RIGHT_BEGIN) {


@@ 154,7 154,7 @@ static void self_testing(void)
            } else {
                // right to left
                for (int i = rgb_state.index - ST_RIGHT_SIZE; i < rgb_state.index; i++) {
                    IS31FL3731_set_color(i, led.r, led.g, led.b);
                    is31fl3731_set_color(i, led.r, led.g, led.b);
                }
                rgb_state.index -= ST_LEFT_SIZE + ST_RIGHT_SIZE;
                if (rgb_state.index == ST_LEFT_BEGIN+ST_LEFT_SIZE) {


@@ 174,7 174,7 @@ static void self_testing(void)
        break;
        case ST_STAGE_3:
            if (rgb_state.index != RGB_MATRIX_LED_COUNT/2) {
                IS31FL3731_set_color_all(0, 0, 0);
                is31fl3731_set_color_all(0, 0, 0);
            }

            // light left and right


@@ 193,11 193,11 @@ static void self_testing(void)
            } else {
                // left
                for (int i = 0; i < rgb_state.index+1; i++) {
                    IS31FL3731_set_color(i, led.r, led.g, led.b);
                    is31fl3731_set_color(i, led.r, led.g, led.b);
                }
                // right
                for (int i = ST_RIGHT_END; i > ST_RIGHT_END - rgb_state.index - 1; i--) {
                    IS31FL3731_set_color(i, led.r, led.g, led.b);
                    is31fl3731_set_color(i, led.r, led.g, led.b);
                }
                rgb_state.index ++;
            }


@@ 295,16 295,16 @@ void matrix_init_kb(void)
    writePinLow(LED_CAPS_LOCK_PIN);

    i2c_init();
    IS31FL3731_init(DRIVER_ADDR_1);
    is31fl3731_init(DRIVER_ADDR_1);
#ifdef DRIVER_ADDR_2
    IS31FL3731_init(DRIVER_ADDR_2);
    is31fl3731_init(DRIVER_ADDR_2);
#endif
    for (int index = 0; index < RGB_MATRIX_LED_COUNT; index++) {
        IS31FL3731_set_led_control_register(index, true, true, true);
        is31fl3731_set_led_control_register(index, true, true, true);
    }
    IS31FL3731_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3731_update_led_control_registers(DRIVER_ADDR_1, 0);
#ifdef DRIVER_ADDR_2
    IS31FL3731_update_led_control_registers(DRIVER_ADDR_2, 1);
    is31fl3731_update_led_control_registers(DRIVER_ADDR_2, 1);
#endif
    update_ticks();
    matrix_init_user();


@@ 321,7 321,7 @@ void housekeeping_task_kb(void)
        self_testing();
    } else if (rgb_state.state == CAPS_ALERT) {
        if (rgb_state.alert) {
            IS31FL3731_set_color_all(ALERM_LED_R, ALERM_LED_G, ALERM_LED_B);
            is31fl3731_set_color_all(ALERM_LED_R, ALERM_LED_G, ALERM_LED_B);
            LED_TYPE leds[4];
            for (int i = 0; i < 4; i++) {
                leds[i].r = ALERM_LED_G;


@@ 330,7 330,7 @@ void housekeeping_task_kb(void)
            }
            ws2812_setleds(leds, 4);
        } else {
            IS31FL3731_set_color_all(0, 0, 0);
            is31fl3731_set_color_all(0, 0, 0);
            LED_TYPE leds[4] = {0};
            ws2812_setleds(leds, 4);
        }


@@ 341,9 341,9 @@ void housekeeping_task_kb(void)
        }
    }

    IS31FL3731_update_pwm_buffers(DRIVER_ADDR_1, 0);
    is31fl3731_update_pwm_buffers(DRIVER_ADDR_1, 0);
#ifdef DRIVER_ADDR_2
    IS31FL3731_update_pwm_buffers(DRIVER_ADDR_2, 1);
    is31fl3731_update_pwm_buffers(DRIVER_ADDR_2, 1);
#endif

    housekeeping_task_user();


@@ 354,7 354,7 @@ void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds)
    if (rgb_state.state != NORMAL) return;

    for (uint8_t i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
        IS31FL3731_set_color(i, start_led[i].r, start_led[i].g, start_led[i].b);
        is31fl3731_set_color(i, start_led[i].r, start_led[i].g, start_led[i].b);
    }
    LED_TYPE leds[4];
    for (int i = 0; i < 4; i++) {

M keyboards/neson_design/n6/n6.c => keyboards/neson_design/n6/n6.c +20 -20
@@ 111,12 111,12 @@ static void self_testing(void)
    switch(rgb_state.testing) {
        case ST_STAGE_1:
            if (rgb_state.index !=0 ) {
                IS31FL3731_set_color_all(0, 0, 0);
                is31fl3731_set_color_all(0, 0, 0);
            }

            if (rgb_state.index >= ST_LEFT_END) {
                for (int i = rgb_state.index - 1; i < RGB_MATRIX_LED_COUNT - rgb_state.index + 1; i++) {
                    IS31FL3731_set_color(i, led.r, led.g, led.b);
                    is31fl3731_set_color(i, led.r, led.g, led.b);
                }
                if (rgb_state.index == ST_LEFT_END) {
                    rgb_state.index = ST_LEFT_BEGIN;


@@ 135,20 135,20 @@ static void self_testing(void)
        break;
        case ST_STAGE_2: {
            // clear all
            IS31FL3731_set_color_all(0, 0, 0);
            is31fl3731_set_color_all(0, 0, 0);
            int i = 0;
            // light left and right
            for (i = 0; i < ST_LEFT_SIZE; i++) {
                IS31FL3731_set_color(ST_LEFT_BEGIN+i, led.r, led.g, led.b);
                is31fl3731_set_color(ST_LEFT_BEGIN+i, led.r, led.g, led.b);
            }
            for (i = 0; i < ST_RIGHT_SIZE; i++) {
                IS31FL3731_set_color(ST_RIGHT_BEGIN+i, led.r, led.g, led.b);
                is31fl3731_set_color(ST_RIGHT_BEGIN+i, led.r, led.g, led.b);

            }
            if (rgb_state.dir) {
                // left to right
                for (int i = rgb_state.index; i < rgb_state.index+ST_LEFT_SIZE+ST_RIGHT_SIZE; i++) {
                    IS31FL3731_set_color(i, led.r, led.g, led.b);
                    is31fl3731_set_color(i, led.r, led.g, led.b);
                }
                rgb_state.index += ST_LEFT_SIZE+ST_RIGHT_SIZE;
                if (rgb_state.index == ST_RIGHT_BEGIN) {


@@ 158,7 158,7 @@ static void self_testing(void)
            } else {
                // right to left
                for (int i = rgb_state.index - ST_RIGHT_SIZE; i < rgb_state.index; i++) {
                    IS31FL3731_set_color(i, led.r, led.g, led.b);
                    is31fl3731_set_color(i, led.r, led.g, led.b);
                }
                rgb_state.index -= ST_LEFT_SIZE + ST_RIGHT_SIZE;
                if (rgb_state.index == ST_LEFT_BEGIN+ST_LEFT_SIZE) {


@@ 178,7 178,7 @@ static void self_testing(void)
        break;
        case ST_STAGE_3:
            if (rgb_state.index != RGB_MATRIX_LED_COUNT/2) {
                IS31FL3731_set_color_all(0, 0, 0);
                is31fl3731_set_color_all(0, 0, 0);
            }

            // light left and right


@@ 197,11 197,11 @@ static void self_testing(void)
            } else {
                // left
                for (int i = 0; i < rgb_state.index+1; i++) {
                    IS31FL3731_set_color(i, led.r, led.g, led.b);
                    is31fl3731_set_color(i, led.r, led.g, led.b);
                }
                // right
                for (int i = ST_RIGHT_END; i > ST_RIGHT_END - rgb_state.index - 1; i--) {
                    IS31FL3731_set_color(i, led.r, led.g, led.b);
                    is31fl3731_set_color(i, led.r, led.g, led.b);
                }
                rgb_state.index ++;
            }


@@ 299,16 299,16 @@ void matrix_init_kb(void)
    writePinLow(LED_CAPS_LOCK_PIN);

    i2c_init();
    IS31FL3731_init(DRIVER_ADDR_1);
    is31fl3731_init(DRIVER_ADDR_1);
#ifdef DRIVER_ADDR_2
    IS31FL3731_init(DRIVER_ADDR_2);
    is31fl3731_init(DRIVER_ADDR_2);
#endif
    for (int index = 0; index < RGB_MATRIX_LED_COUNT; index++) {
        IS31FL3731_set_led_control_register(index, true, true, true);
        is31fl3731_set_led_control_register(index, true, true, true);
    }
    IS31FL3731_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3731_update_led_control_registers(DRIVER_ADDR_1, 0);
#ifdef DRIVER_ADDR_2
    IS31FL3731_update_led_control_registers(DRIVER_ADDR_2, 1);
    is31fl3731_update_led_control_registers(DRIVER_ADDR_2, 1);
#endif
    update_ticks();
    matrix_init_user();


@@ 327,13 327,13 @@ void housekeeping_task_kb(void)
            .b = 0x00,
        };
        if (rgb_state.alert) {
            IS31FL3731_set_color_all(led.r, led.g, led.b);
            is31fl3731_set_color_all(led.r, led.g, led.b);
            ws2812_setleds(&led, 1);
        } else {
            led.r = 0;
            led.g = 0;
            led.b = 0;
            IS31FL3731_set_color_all(0, 0, 0);
            is31fl3731_set_color_all(0, 0, 0);
            ws2812_setleds(&led, 1);
        }



@@ 343,9 343,9 @@ void housekeeping_task_kb(void)
        }
    }

    IS31FL3731_update_pwm_buffers(DRIVER_ADDR_1, 0);
    is31fl3731_update_pwm_buffers(DRIVER_ADDR_1, 0);
#ifdef DRIVER_ADDR_2
    IS31FL3731_update_pwm_buffers(DRIVER_ADDR_2, 1);
    is31fl3731_update_pwm_buffers(DRIVER_ADDR_2, 1);
#endif

    housekeeping_task_user();


@@ 356,7 356,7 @@ void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds)
    if (rgb_state.state != NORMAL) return;

    for (uint8_t i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
        IS31FL3731_set_color(i, start_led[i].r, start_led[i].g, start_led[i].b);
        is31fl3731_set_color(i, start_led[i].r, start_led[i].g, start_led[i].b);
    }
    ws2812_setleds(start_led+RGB_MATRIX_LED_COUNT, 1);
}

M keyboards/ning/tiny_board/tb16_rgb/info.json => keyboards/ning/tiny_board/tb16_rgb/info.json +1 -1
@@ 13,7 13,7 @@
        "rgb_matrix": true
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B6", "B1", "B3", "B2"],

M keyboards/novelkeys/nk20/info.json => keyboards/novelkeys/nk20/info.json +1 -1
@@ 13,7 13,7 @@
        "driver": "pwm"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B13", "B14", "B15", "A4"],

M keyboards/novelkeys/nk65/nk65.c => keyboards/novelkeys/nk65/nk65.c +3 -3
@@ 27,9 27,9 @@
 */
void led_update_ports(led_t led_state) {
    if (led_state.caps_lock) {
        IS31FL3733_set_color( 7+64-1, 0, 255, 0 );
        is31fl3733_set_color( 7+64-1, 0, 255, 0 );
    } else {
        IS31FL3733_set_color( 7+64-1, 0, 0, 0 );
        is31fl3733_set_color( 7+64-1, 0, 0, 0 );
    }
}



@@ 45,6 45,6 @@ __attribute__((weak)) layer_state_t layer_state_set_user(layer_state_t state) {
        G = 255;
    }

    IS31FL3733_set_color( 6+64-1, R, G, B );
    is31fl3733_set_color( 6+64-1, R, G, B );
  return state;
}

M keyboards/novelkeys/nk65b/info.json => keyboards/novelkeys/nk65b/info.json +1 -1
@@ 13,7 13,7 @@
        "driver": "pwm"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["A3", "A4", "A5", "A6", "A7", "B0", "B1", "B2", "B10", "B12", "B13", "B14", "B15", "A8", "A9"],

M keyboards/novelkeys/nk87/nk87.c => keyboards/novelkeys/nk87/nk87.c +2 -2
@@ 38,8 38,8 @@ bool led_update_kb(led_t led_state) {
            CAPS = 0;
        }
    }
    IS31FL3733_set_color( 63+64-1, FN1, FN1, CAPS );
    IS31FL3733_set_color( 48+64-1, 0, 0, FN2 );
    is31fl3733_set_color( 63+64-1, FN1, FN1, CAPS );
    is31fl3733_set_color( 48+64-1, 0, 0, FN2 );
    return res;
}


M keyboards/novelkeys/nk87b/info.json => keyboards/novelkeys/nk87b/info.json +1 -1
@@ 13,7 13,7 @@
        "driver": "pwm"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B12", "B13", "B14", "B15", "A8", "A10", "A14", "A15", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "A0", "A1"],

M keyboards/novelkeys/nk_plus/info.json => keyboards/novelkeys/nk_plus/info.json +1 -1
@@ 27,7 27,7 @@
    "processor": "STM32F072",
    "bootloader": "stm32-dfu",
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 1, "matrix": [0, 0], "x": 0, "y": 0},
            {"flags": 1, "matrix": [0, 1], "x": 13, "y": 0},

M keyboards/omkbd/runner3680/5x6_5x8/info.json => keyboards/omkbd/runner3680/5x6_5x8/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.5"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F4", "F5", "F6", "F7", "B1", "B3", "B2", "B6"],

M keyboards/opendeck/32/rev1/info.json => keyboards/opendeck/32/rev1/info.json +1 -1
@@ 4,7 4,7 @@
        "rows": ["C7", "C6", "B6", "B5"]
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "diode_direction": "COL2ROW",
    "processor": "atmega32u4",

M keyboards/owlab/voice65/hotswap/info.json => keyboards/owlab/voice65/hotswap/info.json +1 -1
@@ 10,7 10,7 @@
        "force_nkro": true
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "A15", "B8", "B9", "B12", "B13"],

M keyboards/owlab/voice65/soldered/info.json => keyboards/owlab/voice65/soldered/info.json +1 -1
@@ 10,7 10,7 @@
        "force_nkro": true
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "A15", "B8", "B9", "B12", "B13"],

M keyboards/paprikman/albacore/info.json => keyboards/paprikman/albacore/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["C6", "B6", "B5", "B4"],

M keyboards/percent/canoe_gen2/info.json => keyboards/percent/canoe_gen2/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "B7"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B0", "D0", "C6", "B6", "B5", "B4", "D7", "D6", "D4", "D5", "D3", "D2", "D1", "F6", "F7"],

M keyboards/phage_studio/pila87/info.json => keyboards/phage_studio/pila87/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "processor": "STM32F103",
    "bootloader": "stm32duino",

M keyboards/phase_studio/titan65/hotswap/info.json => keyboards/phase_studio/titan65/hotswap/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "E6"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B0", "B1", "B2", "B3", "B7", "D0", "D1", "D2", "D3", "D5", "F0", "F1", "C7", "F4", "F5", "F6"],

M keyboards/planck/ez/info.json => keyboards/planck/ez/info.json +1 -1
@@ 7,7 7,7 @@
    "device_version": "0.0.1"
  },
  "rgb_matrix": {
    "driver": "IS31FL3737"
    "driver": "is31fl3737"
  },
  "matrix_pins": {
    "cols": ["B11", "B10", "B2", "B1", "A7", "B0"],

M keyboards/planck/light/info.json => keyboards/planck/light/info.json +1 -1
@@ 9,7 9,7 @@
    "device_version": "0.0.1"
  },
  "rgb_matrix": {
    "driver": "IS31FL3731"
    "driver": "is31fl3731"
  },
  "matrix_pins": {
    "cols": ["E6", "E3", "E4", "D3", "D4", "D5", "C0", "A7", "A6", "E1", "E0", "D7"],

M keyboards/planck/rev6/info.json => keyboards/planck/rev6/info.json +1 -1
@@ 16,7 16,7 @@
    "driver": "pwm"
  },
  "rgb_matrix": {
    "driver": "WS2812"
    "driver": "ws2812"
  },
  "matrix_pins": {
    "cols": ["B11", "B10", "B2", "B1", "A7", "B0"],

M keyboards/planck/rev6_drop/info.json => keyboards/planck/rev6_drop/info.json +1 -1
@@ 16,7 16,7 @@
    "driver": "pwm"
  },
  "rgb_matrix": {
    "driver": "WS2812"
    "driver": "ws2812"
  },
  "matrix_pins": {
    "cols": ["B11", "B10", "B2", "B1", "A7", "B0"],

M keyboards/planck/rev7/info.json => keyboards/planck/rev7/info.json +1 -1
@@ 13,7 13,7 @@
    "driver": "pwm"
  },
  "rgb_matrix": {
    "driver": "WS2812"
    "driver": "ws2812"
  },
  "matrix_pins": {
    "cols": ["B11", "B10", "B2", "B1", "A7", "B0"],

M keyboards/playkbtw/pk64rgb/info.json => keyboards/playkbtw/pk64rgb/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "matrix_pins": {
        "cols": ["B5", "B6", "C6", "C7", "F7", "F6", "F5", "F4", "F1", "F0", "B1", "B2", "B3", "B7"],

M keyboards/plywrks/ply8x/info.json => keyboards/plywrks/ply8x/info.json +1 -1
@@ 74,7 74,7 @@
            "solid_splash": true,
            "solid_multisplash": true
        },
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 8, "matrix": [3, 0], "x":2, "y":27},
            {"flags": 8, "matrix": [0,15], "x":211, "y":0},

M keyboards/preonic/rev3/info.json => keyboards/preonic/rev3/info.json +1 -1
@@ 14,7 14,7 @@
        "driver": "pwm"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B11", "B10", "B2", "B1", "A7", "B0"],

M keyboards/preonic/rev3_drop/info.json => keyboards/preonic/rev3_drop/info.json +1 -1
@@ 14,7 14,7 @@
        "driver": "pwm"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B11", "B10", "B2", "B1", "A7", "B0"],

M keyboards/quarkeys/z40/info.json => keyboards/quarkeys/z40/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "sat_steps": 8,
        "val_steps": 8,
        "speed_steps": 10

M keyboards/rgbkb/mun/rev1/info.json => keyboards/rgbkb/mun/rev1/info.json +1 -1
@@ 17,7 17,7 @@
        "driver": "pwm"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["A0", "B11", "B0", "B10", "B12", "B2", "A8"],

M keyboards/rgbkb/sol/rev1/info.json => keyboards/rgbkb/sol/rev1/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F0", "F1", "F4", "F5", "F6", "F7", "C7"],

M keyboards/rgbkb/sol/rev2/info.json => keyboards/rgbkb/sol/rev2/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F0", "F1", "F4", "F5", "F6", "F7", "C7"],

M keyboards/rgbkb/sol3/rev1/info.json => keyboards/rgbkb/sol3/rev1/info.json +1 -1
@@ 17,7 17,7 @@
        "driver": "pwm"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["A6", "A7", "B0", "B2", "B1", "B9", "B3", "B4"],

M keyboards/rgbkb/zygomorph/keymaps/xulkal/rules.mk => keyboards/rgbkb/zygomorph/keymaps/xulkal/rules.mk +0 -1
@@ 11,7 11,6 @@ NKRO_ENABLE = no            # Nkey Rollover - if this doesn't work, see here: ht
RGBLIGHT_ENABLE = no        # Enable global lighting effects. Do not enable with RGB Matrix
RGBLIGHT_SPLIT_ENABLE = no  # Split RGBLight Support
RGB_MATRIX_ENABLE = yes  	# Enable per-key coordinate based RGB effects. Do not enable with RGBlight
RGB_MATRIX_DRIVER = WS2812
RGB_MATRIX_KEYPRESSES = no  # Enable reactive per-key effects.
SPLIT_RGB_MATRIX_ENABLE = yes # For split RGB Matrix support
RGBLIGHT_FULL_POWER = yes   # Allow maximum RGB brightness. Otherwise, limited to a safe level for a normal USB-A port

M keyboards/rgbkb/zygomorph/rev1/info.json => keyboards/rgbkb/zygomorph/rev1/info.json +1 -1
@@ 9,7 9,7 @@
      "device_version": "0.0.1"
    },
    "rgb_matrix": {
      "driver": "WS2812"
      "driver": "ws2812"
    },
    "matrix_pins": {
      "cols": ["F4", "F6", "C7", "C6", "B6", "D4"],

M keyboards/rura66/rev1/info.json => keyboards/rura66/rev1/info.json +1 -1
@@ 9,7 9,7 @@
    "device_version": "0.0.1"
  },
  "rgb_matrix": {
    "driver": "WS2812"
    "driver": "ws2812"
  },
  "rgblight": {
    "saturation_steps": 8,

M keyboards/ryanskidmore/rskeys100/info.json => keyboards/ryanskidmore/rskeys100/info.json +1 -1
@@ 11,7 11,7 @@
        "pin": "C7"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "processor": "atmega32u4",
    "bootloader": "atmel-dfu",

M keyboards/s_ol/0xc_pad/info.json => keyboards/s_ol/0xc_pad/info.json +1 -1
@@ 10,7 10,7 @@
        "pin": "C7"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "layouts": {
        "LAYOUT": {

M keyboards/saevus/cor_tkl/info.json => keyboards/saevus/cor_tkl/info.json +1 -1
@@ 35,7 35,7 @@
        "rows": ["GP0", "GP1", "GP2", "GP21", "GP3", "GP4"]
    },
    "rgb_matrix": {
      "driver": "WS2812"
      "driver": "ws2812"
    },
    "ws2812": {
        "pin": "GP19",

M keyboards/salicylic_acid3/naked48/rev1/info.json => keyboards/salicylic_acid3/naked48/rev1/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F4", "F5", "F6", "F7", "B1", "B3", "B2", "B6", "D7", "E6", "B4", "B5"],

M keyboards/salicylic_acid3/setta21/rev1/info.json => keyboards/salicylic_acid3/setta21/rev1/info.json +1 -1
@@ 16,7 16,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F4", "F5", "F6", "F7", "B1", "B3"],

M keyboards/sawnsprojects/satxri6key/keymaps/default/rules.mk => keyboards/sawnsprojects/satxri6key/keymaps/default/rules.mk +1 -1
@@ 1,4 1,4 @@
VIA_ENABLE = no
RGBLIGHT_ENABLE = no
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = WS2812
RGB_MATRIX_DRIVER = ws2812

M keyboards/senselessclay/ck60/info.json => keyboards/senselessclay/ck60/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "B1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F0", "D5", "D3", "D2", "D1", "D0", "C7", "C6", "B6", "B5", "B4", "D7", "D6", "D4"],

M keyboards/silverbullet44/info.json => keyboards/silverbullet44/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "sat_steps": 8,
        "val_steps": 8,
        "speed_steps": 8

M keyboards/skeletonkbd/frost68/info.json => keyboards/skeletonkbd/frost68/info.json +1 -1
@@ 26,7 26,7 @@
        "pin": "GP0"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"matrix": [0, 0], "x": 33.1, "y": 3.7, "flags": 4},
            {"matrix": [0, 1], "x": 45.7, "y": 3.7, "flags": 4},

M keyboards/skmt/15k/info.json => keyboards/skmt/15k/info.json +1 -1
@@ 47,7 47,7 @@
        }
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 4, "matrix": [2, 4], "x": 224, "y": 64},
            {"flags": 4, "matrix": [2, 3], "x": 168, "y": 64},

M keyboards/skyloong/dt40/info.json => keyboards/skyloong/dt40/info.json +1 -1
@@ 48,7 48,7 @@
            "raindrops": true,
            "ranbow_beacon": true
        },
        "driver": "WS2812",
        "driver": "ws2812",
        "hue_steps": 20,
        "layout": [
            {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},

M keyboards/smallkeyboard/info.json => keyboards/smallkeyboard/info.json +1 -1
@@ 9,7 9,7 @@
    "device_version": "0.0.1"
  },
  "rgb_matrix": {
    "driver": "IS31FL3731"
    "driver": "is31fl3731"
  },
  "matrix_pins": {
    "cols": ["F7", "F6", "F5"],

M keyboards/soda/mango/info.json => keyboards/soda/mango/info.json +1 -1
@@ 72,7 72,7 @@
            "solid_splash": true,
            "solid_multisplash": true
        },
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 1, "matrix": [0, 0], "x": 0,   "y": 0},
            {"flags": 1, "matrix": [0, 1], "x": 75,  "y": 0},

M keyboards/soda/pocket/info.json => keyboards/soda/pocket/info.json +1 -1
@@ 16,7 16,7 @@
        "pin": "C15"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["A2", "A1", "B14", "B4", "B5", "B6", "B7"],

M keyboards/sofle/keymaps/killmaster/rules.mk => keyboards/sofle/keymaps/killmaster/rules.mk +1 -1
@@ 1,4 1,4 @@
EXTRAKEY_ENABLE = yes
LTO_ENABLE = yes
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = WS2812
RGB_MATRIX_DRIVER = ws2812

M keyboards/sowbug/68keys/info.json => keyboards/sowbug/68keys/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "B9"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["A3", "A4", "A5", "A6", "A7", "B0", "B1", "B10", "B11", "B12", "B13", "B14", "B15", "A8", "A9", "A10"],

M keyboards/sowbug/ansi_tkl/info.json => keyboards/sowbug/ansi_tkl/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "B9"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["A4", "A5", "A6", "A7", "B0", "B1", "B10", "B11", "B12", "B13", "B14", "B15", "A8", "A9", "A10", "A15", "B3"],

M keyboards/spaceholdings/nebula12b/info.json => keyboards/spaceholdings/nebula12b/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "D5"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F4", "F5", "D7"],

M keyboards/spaceholdings/nebula68b/info.json => keyboards/spaceholdings/nebula68b/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "B7"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D0", "D1", "D2", "D3", "D5", "B5", "B6", "C6", "C7", "F7", "F6", "F5", "F4", "F1", "F0"],

M keyboards/splitkb/aurora/corne/rev1/info.json => keyboards/splitkb/aurora/corne/rev1/info.json +1 -1
@@ 108,7 108,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 2, "x": 93, "y": 17},                    // L RGB1
            {"flags": 2, "x": 59, "y": 3},                     // L RGB2

M keyboards/splitkb/aurora/lily58/rev1/info.json => keyboards/splitkb/aurora/lily58/rev1/info.json +1 -1
@@ 119,7 119,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 2, "x": 51, "y": 13},                    // L RGB1
            {"flags": 2, "x": 22, "y": 18},                    // L RGB2

M keyboards/splitkb/aurora/sweep/rev1/info.json => keyboards/splitkb/aurora/sweep/rev1/info.json +1 -1
@@ 105,7 105,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 2, "x": 71, "y": 15},
            {"flags": 2, "x": 51, "y": 8},

M keyboards/splitkb/kyria/rev1/info.json => keyboards/splitkb/kyria/rev1/info.json +1 -1
@@ 9,7 9,7 @@
        "split_count": [10, 10]
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B6", "B2", "B3", "B1", "F7", "F6", "F5", "F4"],

M keyboards/splitkb/kyria/rev2/info.json => keyboards/splitkb/kyria/rev2/info.json +1 -1
@@ 9,7 9,7 @@
        "split_count": [10, 10]
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B2", "B6", "B5", "B4", "E6", "D7", "C6", "D4"],

M keyboards/splitkb/kyria/rev3/info.json => keyboards/splitkb/kyria/rev3/info.json +1 -1
@@ 123,7 123,7 @@
        "pin": "D3"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 2, "x": 75, "y": 2},                     // L RGB1
            {"flags": 2, "x": 50, "y": 1},                     // L RGB2

M keyboards/stront/info.json => keyboards/stront/info.json +1 -1
@@ 94,7 94,7 @@
        "split_count": [19, 19]
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "led_count": 38,
        "split_count": [19, 19],
        "layout": [

M keyboards/synthlabs/060/info.json => keyboards/synthlabs/060/info.json +1 -1
@@ 30,7 30,7 @@
    "force_nkro": true
  },
  "rgb_matrix": {
    "driver": "WS2812",
    "driver": "ws2812",
    "layout": [
        {"flags": 1, "matrix": [0, 0], "x": 0, "y": 0},
        {"flags": 4, "matrix": [0, 1], "x": 16, "y": 0},

M keyboards/system76/launch_1/info.json => keyboards/system76/launch_1/info.json +1 -1
@@ 11,7 11,7 @@
        "pin": "E2"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["D7", "C7", "C6", "B6", "B5", "B4", "D6", "D4", "E6", "D5", "D3", "D2", "B7", "B0"],

M keyboards/teleport/native/info.json => keyboards/teleport/native/info.json +1 -1
@@ 11,7 11,7 @@
        "force_nkro": true
    },
    "rgb_matrix": {
        "driver": "IS31FL3733"
        "driver": "is31fl3733"
    },
    "features": {
        "bootmagic": true,

M keyboards/tkc/portico/info.json => keyboards/tkc/portico/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "matrix_pins": {
        "cols": ["D3", "D5", "D4", "D6", "D7", "B4", "B5", "F6", "F5", "F4", "F1", "B0", "B1", "B2", "B3"],

M keyboards/tkc/portico68v2/info.json => keyboards/tkc/portico68v2/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["D3", "D5", "D4", "D6", "D7", "B4", "B5", "F6", "F5", "F4", "F1", "B0", "B1", "B2", "B3"],

M keyboards/tkc/portico75/info.json => keyboards/tkc/portico75/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3741"
        "driver": "is31fl3741"
    },
    "matrix_pins": {
        "cols": ["F4", "F5", "F6", "F7", "C7", "C6", "B6", "B5", "B4", "D7", "D6", "D4", "D5", "B3", "B7"],

M keyboards/tominabox1/le_chiffre/info.json => keyboards/tominabox1/le_chiffre/info.json +1 -1
@@ 31,7 31,7 @@
        "led_count": 11
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "animations": {
            "gradient_up_down": true,
            "gradient_left_right": true,

M keyboards/tzarc/djinn/info.json => keyboards/tzarc/djinn/info.json +1 -1
@@ 38,7 38,7 @@
    "driver": "pwm"
  },
  "rgb_matrix": {
    "driver": "WS2812"
    "driver": "ws2812"
  },
  "split": {
    "enabled": true,

M keyboards/tzarc/ghoul/info.json => keyboards/tzarc/ghoul/info.json +1 -1
@@ 16,7 16,7 @@
    "rgb_matrix": true
  },
  "rgb_matrix": {
    "driver": "WS2812"
    "driver": "ws2812"
  },
  "matrix_pins": {
    "rows": ["NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN"],

M keyboards/ungodly/launch_pad/info.json => keyboards/ungodly/launch_pad/info.json +1 -1
@@ 9,7 9,7 @@
    "device_version": "99.9.9"
  },
  "rgb_matrix": {
    "driver": "WS2812",
    "driver": "ws2812",
    "sat_steps": 8,
    "val_steps": 8,
    "speed_steps": 10

M keyboards/wekey/we27/info.json => keyboards/wekey/we27/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F4", "F5", "C7", "D6", "D4"],

M keyboards/wilba_tech/wt_mono_backlight.c => keyboards/wilba_tech/wt_mono_backlight.c +14 -14
@@ 64,12 64,12 @@ void backlight_init_drivers(void)
{
	// Initialize I2C
	i2c_init();
	IS31FL3736_init( ISSI_ADDR_DEFAULT );
	is31fl3736_init( ISSI_ADDR_DEFAULT );

	for ( uint8_t index = 0; index < 96; index++ )	{
		IS31FL3736_mono_set_led_control_register( index, true );
		is31fl3736_mono_set_led_control_register( index, true );
	}
	IS31FL3736_update_led_control_registers( ISSI_ADDR_DEFAULT, 0x00 );
	is31fl3736_update_led_control_registers( ISSI_ADDR_DEFAULT, 0x00 );
}

void backlight_set_key_hit(uint8_t row, uint8_t column)


@@ 119,17 119,17 @@ void backlight_set_suspend_state(bool state)

void backlight_set_brightness_all( uint8_t value )
{
	IS31FL3736_mono_set_brightness_all( value );
	is31fl3736_mono_set_brightness_all( value );
}

void backlight_effect_all_off(void)
{
	IS31FL3736_mono_set_brightness_all( 0 );
	is31fl3736_mono_set_brightness_all( 0 );
}

void backlight_effect_all_on(void)
{
	IS31FL3736_mono_set_brightness_all( g_config.brightness );
	is31fl3736_mono_set_brightness_all( g_config.brightness );
}

void backlight_effect_raindrops(bool initialize)


@@ 143,7 143,7 @@ void backlight_effect_raindrops(bool initialize)
        // If not, all but one will stay the same as before.
        if ( initialize || i == led_to_change )
        {
            IS31FL3736_mono_set_brightness(i, rand() & 0xFF );
            is31fl3736_mono_set_brightness(i, rand() & 0xFF );
        }
    }
}


@@ 165,9 165,9 @@ void backlight_effect_indicators(void)
    // SW7,CS8 = (6*8+7) = 55
    // SW8,CS8 = (7*8+7) = 63
    // SW9,CS8 = (8*8+7) = 71
    IS31FL3736_mono_set_brightness(55, rgb.r);
    IS31FL3736_mono_set_brightness(63, rgb.g);
    IS31FL3736_mono_set_brightness(71, rgb.b);
    is31fl3736_mono_set_brightness(55, rgb.r);
    is31fl3736_mono_set_brightness(63, rgb.g);
    is31fl3736_mono_set_brightness(71, rgb.b);
#endif // MONO_BACKLIGHT_WT75_A

// This pairs with "All Off" already setting zero brightness,


@@ 181,19 181,19 @@ defined(MONO_BACKLIGHT_WT75_C) || \
defined(MONO_BACKLIGHT_WT80_A)
    if ( host_keyboard_led_state().caps_lock ) {
        // SW3,CS1 = (2*8+0) = 16
        IS31FL3736_mono_set_brightness(16, 255);
        is31fl3736_mono_set_brightness(16, 255);
    }
#endif
#if defined(MONO_BACKLIGHT_WT80_A)
    if ( host_keyboard_led_state().scroll_lock ) {
        // SW7,CS7 = (6*8+6) = 54
        IS31FL3736_mono_set_brightness(54, 255);
        is31fl3736_mono_set_brightness(54, 255);
    }
#endif
#if defined(MONO_BACKLIGHT_WT75_C)
    if ( host_keyboard_led_state().scroll_lock ) {
        // SW7,CS8 = (6*8+7) = 55
        IS31FL3736_mono_set_brightness(55, 255);
        is31fl3736_mono_set_brightness(55, 255);
    }
#endif
}


@@ 361,7 361,7 @@ void backlight_config_save(void)

void backlight_update_pwm_buffers(void)
{
	IS31FL3736_update_pwm_buffers(ISSI_ADDR_DEFAULT,0x00);
	is31fl3736_update_pwm_buffers(ISSI_ADDR_DEFAULT,0x00);
}

bool process_record_backlight(uint16_t keycode, keyrecord_t *record)

M keyboards/wilba_tech/wt_rgb_backlight.c => keyboards/wilba_tech/wt_rgb_backlight.c +72 -72
@@ 1771,36 1771,36 @@ void map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led )
void backlight_update_pwm_buffers(void)
{
#if defined(RGB_BACKLIGHT_M6_B)
    IS31FL3218_update_pwm_buffers();
    is31fl3218_update_pwm_buffers();
#elif defined(RGB_BACKLIGHT_PORTICO75)
	IS31FL3741_update_pwm_buffers( ISSI_ADDR_1, 0 );
    IS31FL3741_update_led_control_registers( ISSI_ADDR_1, 0 );
	is31fl3741_update_pwm_buffers( ISSI_ADDR_1, 0 );
    is31fl3741_update_led_control_registers( ISSI_ADDR_1, 0 );
#elif defined(RGB_BACKLIGHT_M10_C)
    IS31FL3731_update_pwm_buffers( ISSI_ADDR_1, 0 );
    IS31FL3731_update_led_control_registers( ISSI_ADDR_1, 0 );
    is31fl3731_update_pwm_buffers( ISSI_ADDR_1, 0 );
    is31fl3731_update_led_control_registers( ISSI_ADDR_1, 0 );
#elif defined(RGB_BACKLIGHT_HS60)
    IS31FL3733_update_pwm_buffers( ISSI_ADDR_1, 0 );
    IS31FL3733_update_led_control_registers( ISSI_ADDR_1, 0 );
    is31fl3733_update_pwm_buffers( ISSI_ADDR_1, 0 );
    is31fl3733_update_led_control_registers( ISSI_ADDR_1, 0 );
#elif defined(RGB_BACKLIGHT_NK65) || defined(RGB_BACKLIGHT_NEBULA68) || defined(RGB_BACKLIGHT_NK87) || defined(RGB_BACKLIGHT_KW_MEGA)
    IS31FL3733_update_pwm_buffers( ISSI_ADDR_1, 0 );
    IS31FL3733_update_pwm_buffers( ISSI_ADDR_2, 1 );
    IS31FL3733_update_led_control_registers( ISSI_ADDR_1, 0 );
    IS31FL3733_update_led_control_registers( ISSI_ADDR_2, 1 );
    is31fl3733_update_pwm_buffers( ISSI_ADDR_1, 0 );
    is31fl3733_update_pwm_buffers( ISSI_ADDR_2, 1 );
    is31fl3733_update_led_control_registers( ISSI_ADDR_1, 0 );
    is31fl3733_update_led_control_registers( ISSI_ADDR_2, 1 );
#elif defined(RGB_BACKLIGHT_NEBULA12)
    IS31FL3731_update_pwm_buffers( ISSI_ADDR_1, 0 );
    IS31FL3731_update_led_control_registers( ISSI_ADDR_1, 0 );
    is31fl3731_update_pwm_buffers( ISSI_ADDR_1, 0 );
    is31fl3731_update_led_control_registers( ISSI_ADDR_1, 0 );
#elif defined(RGB_BACKLIGHT_U80_A)
    static uint8_t driver = 0;
    switch ( driver )
    {
        case 0:
            IS31FL3731_update_pwm_buffers( ISSI_ADDR_1, 0 );
            is31fl3731_update_pwm_buffers( ISSI_ADDR_1, 0 );
            break;
        case 1:
            IS31FL3731_update_pwm_buffers( ISSI_ADDR_2, 1 );
            is31fl3731_update_pwm_buffers( ISSI_ADDR_2, 1 );
            break;
        case 2:
            IS31FL3731_update_pwm_buffers( ISSI_ADDR_3, 2 );
            is31fl3731_update_pwm_buffers( ISSI_ADDR_3, 2 );
            break;
    }
    if ( ++driver > 2 )


@@ 1808,31 1808,31 @@ void backlight_update_pwm_buffers(void)
        driver = 0;
    }
#else
    IS31FL3731_update_pwm_buffers( ISSI_ADDR_1, 0 );
    IS31FL3731_update_pwm_buffers( ISSI_ADDR_2, 1 );
    IS31FL3731_update_led_control_registers( ISSI_ADDR_1, 0 );
    IS31FL3731_update_led_control_registers( ISSI_ADDR_2, 1 );
    is31fl3731_update_pwm_buffers( ISSI_ADDR_1, 0 );
    is31fl3731_update_pwm_buffers( ISSI_ADDR_2, 1 );
    is31fl3731_update_led_control_registers( ISSI_ADDR_1, 0 );
    is31fl3731_update_led_control_registers( ISSI_ADDR_2, 1 );
#endif
}

void backlight_set_color( int index, uint8_t red, uint8_t green, uint8_t blue )
{
#if defined(RGB_BACKLIGHT_M6_B)
    IS31FL3218_set_color( index, red, green, blue );
    is31fl3218_set_color( index, red, green, blue );
#elif defined(RGB_BACKLIGHT_HS60) || defined(RGB_BACKLIGHT_NK65) || defined(RGB_BACKLIGHT_NEBULA68) || defined(RGB_BACKLIGHT_KW_MEGA)
    IS31FL3733_set_color( index, red, green, blue );
    is31fl3733_set_color( index, red, green, blue );
#elif defined (RGB_BACKLIGHT_PORTICO)
    IS31FL3731_set_color( index, red, green, blue );
    is31fl3731_set_color( index, red, green, blue );
#elif defined (RGB_BACKLIGHT_PORTICO75)
    IS31FL3741_set_color( index, red, green, blue );
    is31fl3741_set_color( index, red, green, blue );
#elif defined(RGB_BACKLIGHT_NK87)
    // This is done to avoid indicator LEDs being set
    if (( index != 63+64-1 ) && ( index != 48+64-1 )) {
        IS31FL3733_set_color( index, red, green, blue );
        is31fl3733_set_color( index, red, green, blue );
    }
#elif defined(RGB_BACKLIGHT_DAWN60)
    if( index < RGB_MATRIX_LED_COUNT ) {
        IS31FL3731_set_color( index, red, green, blue );
        is31fl3731_set_color( index, red, green, blue );
    } else {
        g_ws2812_leds[index - RGB_MATRIX_LED_COUNT].r = red;
        g_ws2812_leds[index - RGB_MATRIX_LED_COUNT].g = green;


@@ 1840,38 1840,38 @@ void backlight_set_color( int index, uint8_t red, uint8_t green, uint8_t blue )
        ws2812_setleds(g_ws2812_leds, WS2812_LED_TOTAL);
    }
#else
    IS31FL3731_set_color( index, red, green, blue );
    is31fl3731_set_color( index, red, green, blue );
#endif
}

void backlight_set_color_all( uint8_t red, uint8_t green, uint8_t blue )
{
#if defined(RGB_BACKLIGHT_M6_B)
    IS31FL3218_set_color_all( red, green, blue );
    is31fl3218_set_color_all( red, green, blue );
#elif defined(RGB_BACKLIGHT_HS60) || defined(RGB_BACKLIGHT_NK65) || defined(RGB_BACKLIGHT_NEBULA68) || defined(RGB_BACKLIGHT_KW_MEGA)
    // This is done to avoid indicator LEDs being set
    for (int i = 0; i < BACKLIGHT_LED_COUNT; i++) {
        IS31FL3733_set_color(i, red, green, blue);
        is31fl3733_set_color(i, red, green, blue);
    }
#elif defined (RGB_BACKLIGHT_PORTICO)
    // This is done to avoid indicator LEDs being set
    for (int i = 0; i < BACKLIGHT_LED_COUNT; i++) {
        IS31FL3731_set_color(i, red, green, blue);
        is31fl3731_set_color(i, red, green, blue);
    }
#elif defined (RGB_BACKLIGHT_PORTICO75)
    // This is done to avoid indicator LEDs being set
    for (int i = 0; i < BACKLIGHT_LED_COUNT; i++) {
        IS31FL3741_set_color(i, red, green, blue);
        is31fl3741_set_color(i, red, green, blue);
    }
#elif defined(RGB_BACKLIGHT_NK87)
    // This is done to avoid indicator LEDs being set
    for (int i = 0; i < BACKLIGHT_LED_COUNT; i++) {
        if (( i != 63+64-1 ) && ( i != 48+64-1 )) {
            IS31FL3733_set_color(i, red, green, blue);
            is31fl3733_set_color(i, red, green, blue);
        }
    }
#elif defined(RGB_BACKLIGHT_DAWN60)
    IS31FL3731_set_color_all( red, green, blue );
    is31fl3731_set_color_all( red, green, blue );
    for (uint8_t i = 0; i < WS2812_LED_TOTAL; i++) {
        g_ws2812_leds[i].r = red;
        g_ws2812_leds[i].g = green;


@@ 1879,7 1879,7 @@ void backlight_set_color_all( uint8_t red, uint8_t green, uint8_t blue )
    }
    ws2812_setleds(g_ws2812_leds, WS2812_LED_TOTAL);
#else
    IS31FL3731_set_color_all( red, green, blue );
    is31fl3731_set_color_all( red, green, blue );
#endif
}



@@ 2914,9 2914,9 @@ void backlight_init_drivers(void)
    i2c_init();

#if defined(RGB_BACKLIGHT_M6_B)
    IS31FL3218_init();
    is31fl3218_init();
#elif defined(RGB_BACKLIGHT_HS60)
    IS31FL3733_init( ISSI_ADDR_1, 0 );
    is31fl3733_init( ISSI_ADDR_1, 0 );

    for ( int index = 0; index < RGB_MATRIX_LED_COUNT; index++ )
    {


@@ 2932,28 2932,28 @@ void backlight_init_drivers(void)
                          ( index == 61-1 ) ); //LA61
#endif
                // This only caches it for later
        IS31FL3733_set_led_control_register( index, enabled, enabled, enabled );
        is31fl3733_set_led_control_register( index, enabled, enabled, enabled );
    }
    // This actually updates the LED drivers
    IS31FL3733_update_led_control_registers( ISSI_ADDR_1, 0 );
    is31fl3733_update_led_control_registers( ISSI_ADDR_1, 0 );
#elif defined(RGB_BACKLIGHT_NK65)
    IS31FL3733_init( ISSI_ADDR_1, 0 );
    IS31FL3733_init( ISSI_ADDR_2, 0 );
    is31fl3733_init( ISSI_ADDR_1, 0 );
    is31fl3733_init( ISSI_ADDR_2, 0 );

    for ( int index = 0; index < RGB_MATRIX_LED_COUNT; index++ )
    {
        bool enabled = !( ( index == 61-1 )   || //LA61
                          ( index > 6+64-1 ) ); //LB7-LB64
        // This only caches it for later
        IS31FL3733_set_led_control_register( index, enabled, enabled, enabled );
        is31fl3733_set_led_control_register( index, enabled, enabled, enabled );
    }
    IS31FL3733_set_led_control_register( 7+64-1, 0, 1, 0 ); //Enable LB7 green enable for indicators
    is31fl3733_set_led_control_register( 7+64-1, 0, 1, 0 ); //Enable LB7 green enable for indicators
    // This actually updates the LED drivers
    IS31FL3733_update_led_control_registers( ISSI_ADDR_1, 0 );
    IS31FL3733_update_led_control_registers( ISSI_ADDR_2, 1 );
    is31fl3733_update_led_control_registers( ISSI_ADDR_1, 0 );
    is31fl3733_update_led_control_registers( ISSI_ADDR_2, 1 );
#elif defined(RGB_BACKLIGHT_NK87)
    IS31FL3733_init( ISSI_ADDR_1, 0 );
    IS31FL3733_init( ISSI_ADDR_2, 0 );
    is31fl3733_init( ISSI_ADDR_1, 0 );
    is31fl3733_init( ISSI_ADDR_2, 0 );

    for ( int index = 0; index < RGB_MATRIX_LED_COUNT; index++ )
    {


@@ 2975,59 2975,59 @@ void backlight_init_drivers(void)
                          ( index == 58+64-1 )   ||
                          ( index == 62+64-1 ) );
        // This only caches it for later
        IS31FL3733_set_led_control_register( index, enabled, enabled, enabled );
        is31fl3733_set_led_control_register( index, enabled, enabled, enabled );
    }
    IS31FL3733_set_led_control_register( 48+64-1, 0, 0, 1 ); //Enable LB48 blue enable for indicators
    is31fl3733_set_led_control_register( 48+64-1, 0, 0, 1 ); //Enable LB48 blue enable for indicators
    // This actually updates the LED drivers
    IS31FL3733_update_led_control_registers( ISSI_ADDR_1, 0 );
    IS31FL3733_update_led_control_registers( ISSI_ADDR_2, 1 );
    is31fl3733_update_led_control_registers( ISSI_ADDR_1, 0 );
    is31fl3733_update_led_control_registers( ISSI_ADDR_2, 1 );
#elif defined(RGB_BACKLIGHT_NEBULA68)
    IS31FL3733_init( ISSI_ADDR_1, 0 );
    IS31FL3733_init( ISSI_ADDR_2, 0 );
    is31fl3733_init( ISSI_ADDR_1, 0 );
    is31fl3733_init( ISSI_ADDR_2, 0 );

    for ( int index = 0; index < RGB_MATRIX_LED_COUNT; index++ )
    {
        bool enabled = !( ( index == 61-1 )   || //LA61
                          ( index > 5+64-1 ) ); //LB6-LB64
        // This only caches it for later
        IS31FL3733_set_led_control_register( index, enabled, enabled, enabled );
        is31fl3733_set_led_control_register( index, enabled, enabled, enabled );
    }
    // This actually updates the LED drivers
    IS31FL3733_update_led_control_registers( ISSI_ADDR_1, 0 );
    IS31FL3733_update_led_control_registers( ISSI_ADDR_2, 1 );
    is31fl3733_update_led_control_registers( ISSI_ADDR_1, 0 );
    is31fl3733_update_led_control_registers( ISSI_ADDR_2, 1 );
#elif defined(RGB_BACKLIGHT_PORTICO75)
    IS31FL3741_init( ISSI_ADDR_1 );
    is31fl3741_init( ISSI_ADDR_1 );
	bool enabled = true;
    for ( int index = 0; index < RGB_MATRIX_LED_COUNT; index++ )
    {
        IS31FL3741_set_led_control_register( index, enabled, enabled, enabled );
        is31fl3741_set_led_control_register( index, enabled, enabled, enabled );
    }
    // This actually updates the LED drivers
    IS31FL3741_update_led_control_registers( ISSI_ADDR_1, 0 );
    is31fl3741_update_led_control_registers( ISSI_ADDR_1, 0 );
#elif defined(RGB_BACKLIGHT_KW_MEGA)
    IS31FL3733_init( ISSI_ADDR_1, 0 );
    IS31FL3733_init( ISSI_ADDR_2, 0 );
    is31fl3733_init( ISSI_ADDR_1, 0 );
    is31fl3733_init( ISSI_ADDR_2, 0 );

    for ( int index = 0; index < RGB_MATRIX_LED_COUNT; index++ )
    {
        bool enabled = !( ( index == 61-1 )   || //LA61
                          ( index > 6+64-1 ) ); //LB7-LB64
        // This only caches it for later
        IS31FL3733_set_led_control_register( index, enabled, enabled, enabled );
        is31fl3733_set_led_control_register( index, enabled, enabled, enabled );
    }
    // This actually updates the LED drivers
    IS31FL3733_update_led_control_registers( ISSI_ADDR_1, 0 );
    IS31FL3733_update_led_control_registers( ISSI_ADDR_2, 1 );
    is31fl3733_update_led_control_registers( ISSI_ADDR_1, 0 );
    is31fl3733_update_led_control_registers( ISSI_ADDR_2, 1 );
#else
    // Init the #1 driver
    IS31FL3731_init( ISSI_ADDR_1 );
    is31fl3731_init( ISSI_ADDR_1 );
    // Init the #2 driver (if used)
#if !defined(RGB_BACKLIGHT_NEBULA12) && !defined(RGB_BACKLIGHT_M10_C)
    IS31FL3731_init( ISSI_ADDR_2 );
    is31fl3731_init( ISSI_ADDR_2 );
#endif
    // Init the #3 driver (if used)
#if defined(RGB_BACKLIGHT_U80_A)
    IS31FL3731_init( ISSI_ADDR_3 );
    is31fl3731_init( ISSI_ADDR_3 );
#endif

    // Experimental feature, not in configuration yet


@@ 3156,16 3156,16 @@ void backlight_init_drivers(void)
        bool enabled = true;
#endif
        // This only caches it for later
        IS31FL3731_set_led_control_register( index, enabled, enabled, enabled );
        is31fl3731_set_led_control_register( index, enabled, enabled, enabled );
    }
    // This actually updates the LED drivers
    // TODO: refactor this to use DRIVER_COUNT
    IS31FL3731_update_led_control_registers( ISSI_ADDR_1, 0 );
    is31fl3731_update_led_control_registers( ISSI_ADDR_1, 0 );
#if !defined(RGB_BACKLIGHT_NEBULA12) && !defined(RGB_BACKLIGHT_M10_C)
    IS31FL3731_update_led_control_registers( ISSI_ADDR_2, 1 );
    is31fl3731_update_led_control_registers( ISSI_ADDR_2, 1 );
#endif
#if defined(RGB_BACKLIGHT_U80_A)
    IS31FL3731_update_led_control_registers( ISSI_ADDR_3, 2 );
    is31fl3731_update_led_control_registers( ISSI_ADDR_3, 2 );
#endif
#endif



@@ 3399,11 3399,11 @@ void backlight_test_led( uint8_t index, bool red, bool green, bool blue )
    {
        if ( i == index )
        {
            IS31FL3731_set_led_control_register( i, red, green, blue );
            is31fl3731_set_led_control_register( i, red, green, blue );
        }
        else
        {
            IS31FL3731_set_led_control_register( i, false, false, false );
            is31fl3731_set_led_control_register( i, false, false, false );
        }
    }
}

M keyboards/winry/winry315/info.json => keyboards/winry/winry315/info.json +1 -1
@@ 9,7 9,7 @@
        "vid": "0xF1F1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "rgblight": {
        "saturation_steps": 8,

M keyboards/wolf/m60_b/info.json => keyboards/wolf/m60_b/info.json +1 -1
@@ 23,7 23,7 @@
    },
    "processor": "atmega32u4",
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 4, "matrix": [2, 0], "x": 7, "y": 32},
            {"flags": 4, "matrix": [1, 0], "x": 4, "y": 16},

M keyboards/work_louder/loop/info.json => keyboards/work_louder/loop/info.json +1 -1
@@ 9,7 9,7 @@
        "max_power": 100
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B3", "B2", "B1", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6"],

M keyboards/work_louder/micro/info.json => keyboards/work_louder/micro/info.json +1 -1
@@ 44,7 44,7 @@
        "pin": "D1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "url": "https://worklouder.cc/",
    "usb": {

M keyboards/work_louder/nano/info.json => keyboards/work_louder/nano/info.json +1 -1
@@ 10,7 10,7 @@
        "max_power": 100
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B5", "B6", "C6"],

M keyboards/work_louder/numpad/info.json => keyboards/work_louder/numpad/info.json +1 -1
@@ 29,7 29,7 @@
        "lto": true
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 1, "matrix": [3, 3], "x": 141, "y": 64},
            {"flags": 1, "matrix": [3, 2], "x": 122, "y": 64},

M keyboards/work_louder/work_board/info.json => keyboards/work_louder/work_board/info.json +1 -1
@@ 9,7 9,7 @@
      "max_power": 100
    },
    "rgb_matrix": {
      "driver": "WS2812"
      "driver": "ws2812"
    },
    "matrix_pins": {
      "cols": ["D3", "D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6", "E6"],

M keyboards/xbows/knight/info.json => keyboards/xbows/knight/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "matrix_pins": {
        "cols": ["B0", "B1", "B2", "B3", "B7", "D2", "D3", "D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6"],

M keyboards/xbows/knight_plus/info.json => keyboards/xbows/knight_plus/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "matrix_pins": {
        "cols": ["B0", "B1", "B2", "B3", "B7", "D2", "D3", "D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6"],

M keyboards/xbows/nature/info.json => keyboards/xbows/nature/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "matrix_pins": {
        "cols": ["B0", "B1", "B2", "B3", "B7", "D2", "D3", "D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6"],

M keyboards/xbows/numpad/info.json => keyboards/xbows/numpad/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "matrix_pins": {
        "cols": ["D4", "D6", "B2", "B1"],

M keyboards/xbows/ranger/info.json => keyboards/xbows/ranger/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "matrix_pins": {
        "cols": ["B7", "B3", "B2", "B1", "B0", "E6", "F0", "F1", "F4", "F5", "D7", "F6", "F7", "D4", "D5", "D3"],

M keyboards/xbows/woody/info.json => keyboards/xbows/woody/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "IS31FL3731"
        "driver": "is31fl3731"
    },
    "matrix_pins": {
        "cols": ["B6", "C6", "C7", "F4", "F5", "F6", "F7", "B7", "D2", "D3", "D5", "D4", "D6", "D7", "B4"],

M keyboards/xelus/dawn60/rev1_qmk/rev1_qmk.c => keyboards/xelus/dawn60/rev1_qmk/rev1_qmk.c +9 -9
@@ 167,28 167,28 @@ led_config_t g_led_config = { {
//Custom Driver
static void init(void) {
    i2c_init();
    IS31FL3731_init(DRIVER_ADDR_1);
    IS31FL3731_init(DRIVER_ADDR_2);
    is31fl3731_init(DRIVER_ADDR_1);
    is31fl3731_init(DRIVER_ADDR_2);
    for (int index = 0; index < ISSI_DRIVER_TOTAL; index++) {
        bool enabled = true;
        IS31FL3731_set_led_control_register(index, enabled, enabled, enabled);
        is31fl3731_set_led_control_register(index, enabled, enabled, enabled);
    }
    IS31FL3731_update_led_control_registers(DRIVER_ADDR_1, 0);
    IS31FL3731_update_led_control_registers(DRIVER_ADDR_2, 1);
    is31fl3731_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3731_update_led_control_registers(DRIVER_ADDR_2, 1);
    
    //RGB Underglow ws2812
    
}

static void flush(void) {
    IS31FL3731_update_pwm_buffers(DRIVER_ADDR_1, 0);
    IS31FL3731_update_pwm_buffers(DRIVER_ADDR_2, 1);
    is31fl3731_update_pwm_buffers(DRIVER_ADDR_1, 0);
    is31fl3731_update_pwm_buffers(DRIVER_ADDR_2, 1);
    ws2812_setleds(rgb_matrix_ws2812_array, WS2812_LED_TOTAL);
}

static void set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    if (index < ISSI_DRIVER_TOTAL) {
        IS31FL3731_set_color(index, red, green, blue);
        is31fl3731_set_color(index, red, green, blue);
    } else {
        rgb_matrix_ws2812_array[index - ISSI_DRIVER_TOTAL].r = red;
        rgb_matrix_ws2812_array[index - ISSI_DRIVER_TOTAL].g = green;


@@ 197,7 197,7 @@ static void set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
}

static void set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
    IS31FL3731_set_color_all( red, green, blue );
    is31fl3731_set_color_all( red, green, blue );
    for (uint8_t i = 0; i < WS2812_LED_TOTAL; i++) {
        rgb_matrix_ws2812_array[i].r = red;
        rgb_matrix_ws2812_array[i].g = green;

M keyboards/xelus/la_plus/info.json => keyboards/xelus/la_plus/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "F1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["E6", "D5", "B2", "B3", "D3", "F6", "F7", "C7", "C6", "B6", "B5", "B4", "D7", "D6", "D4"],

M keyboards/xelus/pachi/rgb/rev1/rev1.c => keyboards/xelus/pachi/rgb/rev1/rev1.c +6 -6
@@ 188,7 188,7 @@ led_config_t g_led_config = { {

static void init(void) {
    i2c_init();
    IS31FL3741_init(DRIVER_ADDR_1);
    is31fl3741_init(DRIVER_ADDR_1);
    for (int index = 0; index < ISSI_DRIVER_TOTAL; index++) {
        bool enabled = !(   ( index == -1+0+13) || //A13
                            ( index == -1+13+3) || //B3


@@ 221,19 221,19 @@ static void init(void) {
                            ( index == -1+104+12) || //I12
                            ( index == -1+104+13) //I13
                        );
        IS31FL3741_set_led_control_register(index, enabled, enabled, enabled);
        is31fl3741_set_led_control_register(index, enabled, enabled, enabled);
    }
    IS31FL3741_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3741_update_led_control_registers(DRIVER_ADDR_1, 0);
}

static void flush(void) {
    IS31FL3741_update_pwm_buffers(DRIVER_ADDR_1, 0);
    is31fl3741_update_pwm_buffers(DRIVER_ADDR_1, 0);
}

const rgb_matrix_driver_t rgb_matrix_driver = {
    .init = init,
    .flush = flush,
    .set_color = IS31FL3741_set_color,
    .set_color_all = IS31FL3741_set_color_all
    .set_color = is31fl3741_set_color,
    .set_color_all = is31fl3741_set_color_all
};
#endif

M keyboards/xelus/pachi/rgb/rev2/rev2.c => keyboards/xelus/pachi/rgb/rev2/rev2.c +6 -6
@@ 194,7 194,7 @@ led_config_t g_led_config = { {

static void init(void) {
    i2c_init();
    IS31FL3741_init(DRIVER_ADDR_1);
    is31fl3741_init(DRIVER_ADDR_1);
    for (int index = 0; index < ISSI_DRIVER_TOTAL; index++) {
        bool enabled = !(   ( index == -1+0+13) || //A13
                            ( index == -1+13+3) || //B3


@@ 227,20 227,20 @@ static void init(void) {
                            ( index == -1+104+12) || //I12
                            ( index == -1+104+13) //I13
                        );
        IS31FL3741_set_led_control_register(index, enabled, enabled, enabled);
        is31fl3741_set_led_control_register(index, enabled, enabled, enabled);
    }
    IS31FL3741_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3741_update_led_control_registers(DRIVER_ADDR_1, 0);
}

static void flush(void) {
    IS31FL3741_update_pwm_buffers(DRIVER_ADDR_1, 0);
    is31fl3741_update_pwm_buffers(DRIVER_ADDR_1, 0);
}

const rgb_matrix_driver_t rgb_matrix_driver = {
    .init = init,
    .flush = flush,
    .set_color = IS31FL3741_set_color,
    .set_color_all = IS31FL3741_set_color_all
    .set_color = is31fl3741_set_color,
    .set_color_all = is31fl3741_set_color_all
};

#ifdef VIA_ENABLE

M keyboards/xelus/valor/rev2/info.json => keyboards/xelus/valor/rev2/info.json +1 -1
@@ 13,7 13,7 @@
        "driver": "pwm"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B2", "B1", "B0", "A7", "A6", "A5", "A4", "A13", "B7", "B6", "B5", "B4", "B3", "A15", "A14"],

M keyboards/yandrstudio/nz64/info.json => keyboards/yandrstudio/nz64/info.json +1 -1
@@ 12,7 12,7 @@
        "driver": "pwm"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["A15", "B3", "B4", "B6", "B7", "B5", "C13", "A5", "A4", "B14", "B15", "A8", "A9", "A10"],

M keyboards/yandrstudio/nz67v2/info.json => keyboards/yandrstudio/nz67v2/info.json +1 -1
@@ 11,7 11,7 @@
        "driver": "pwm"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B9", "A3", "A4", "A5", "A6", "A7", "B0", "B2", "B10", "B11", "B12", "B13", "B14", "B15", "A8"],

M keyboards/yandrstudio/tg67/info.json => keyboards/yandrstudio/tg67/info.json +1 -1
@@ 11,7 11,7 @@
        "driver": "pwm"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["B2", "B10", "B11", "A8", "A9", "A10", "B5", "A15", "B3", "A2", "A3", "B4", "A4", "A5", "A6"],

M keyboards/yanghu/unicorne/info.json => keyboards/yanghu/unicorne/info.json +1 -1
@@ 16,7 16,7 @@
    "driver": "pwm"
  },
  "rgb_matrix": {
    "driver": "WS2812"
    "driver": "ws2812"
  },
  "matrix_pins": {
    "cols": ["A14", "A15", "B13", "B14", "B15", "A13", "A0", "A1", "A2", "A3", "A6", "A7"],

M keyboards/ymdk/id75/info.json => keyboards/ymdk/id75/info.json +1 -1
@@ 67,7 67,7 @@
            "solid_splash": true,
            "solid_multisplash": true
        },
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 4, "matrix": [4, 14], "x": 224, "y": 64},
            {"flags": 4, "matrix": [4, 13], "x": 208, "y": 64},

M keyboards/ymdk/ymd09/info.json => keyboards/ymdk/ymd09/info.json +1 -1
@@ 46,7 46,7 @@
        }
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "layout": [
            {"flags": 4, "matrix": [0, 2], "x": 64, "y": 0},  //7
            {"flags": 4, "matrix": [0, 1], "x": 32, "y": 0},  //8

M keyboards/ymdk/ymd40/air40/info.json => keyboards/ymdk/ymd40/air40/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F1", "F0", "B0", "C7", "F4", "F5", "F6", "F7", "D4", "D6", "B4", "D7"],

M keyboards/yncognito/batpad/info.json => keyboards/yncognito/batpad/info.json +1 -1
@@ 12,7 12,7 @@
        "pin": "B5"
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "matrix_pins": {
        "cols": ["F1", "F0", "D5", "D3"],

M keyboards/yushakobo/quick17/info.json => keyboards/yushakobo/quick17/info.json +1 -1
@@ 9,7 9,7 @@
        "device_version": "0.0.1"
    },
    "rgb_matrix": {
        "driver": "WS2812",
        "driver": "ws2812",
        "sat_steps": 8,
        "val_steps": 8,
        "speed_steps": 10

M keyboards/zykrah/fuyu/info.json => keyboards/zykrah/fuyu/info.json +1 -1
@@ 24,7 24,7 @@
        "cols": ["GP29", "GP28", "GP26", "GP25", "GP24", "GP23", "GP22", "GP21", "GP20", "GP19", "GP18", "GP17", "GP16", "GP27", "GP9", "GP1", "GP0"]
    },
    "rgb_matrix": {
        "driver": "WS2812"
        "driver": "ws2812"
    },
    "ws2812": {
        "pin": "GP2",

M quantum/rgb_matrix/rgb_matrix_drivers.c => quantum/rgb_matrix/rgb_matrix_drivers.c +96 -96
@@ 38,13 38,13 @@ static void init(void) {
    i2c_init();

#    if defined(IS31FL3731)
    IS31FL3731_init(DRIVER_ADDR_1);
    is31fl3731_init(DRIVER_ADDR_1);
#        if defined(DRIVER_ADDR_2)
    IS31FL3731_init(DRIVER_ADDR_2);
    is31fl3731_init(DRIVER_ADDR_2);
#            if defined(DRIVER_ADDR_3)
    IS31FL3731_init(DRIVER_ADDR_3);
    is31fl3731_init(DRIVER_ADDR_3);
#                if defined(DRIVER_ADDR_4)
    IS31FL3731_init(DRIVER_ADDR_4);
    is31fl3731_init(DRIVER_ADDR_4);
#                endif
#            endif
#        endif


@@ 53,58 53,58 @@ static void init(void) {
#        if !defined(DRIVER_SYNC_1)
#            define DRIVER_SYNC_1 0
#        endif
    IS31FL3733_init(DRIVER_ADDR_1, DRIVER_SYNC_1);
    is31fl3733_init(DRIVER_ADDR_1, DRIVER_SYNC_1);
#        if defined(DRIVER_ADDR_2)
#            if !defined(DRIVER_SYNC_2)
#                define DRIVER_SYNC_2 0
#            endif
    IS31FL3733_init(DRIVER_ADDR_2, DRIVER_SYNC_2);
    is31fl3733_init(DRIVER_ADDR_2, DRIVER_SYNC_2);
#            if defined(DRIVER_ADDR_3)
#                if !defined(DRIVER_SYNC_3)
#                    define DRIVER_SYNC_3 0
#                endif
    IS31FL3733_init(DRIVER_ADDR_3, DRIVER_SYNC_3);
    is31fl3733_init(DRIVER_ADDR_3, DRIVER_SYNC_3);
#                if defined(DRIVER_ADDR_4)
#                    if !defined(DRIVER_SYNC_4)
#                        define DRIVER_SYNC_4 0
#                    endif
    IS31FL3733_init(DRIVER_ADDR_4, DRIVER_SYNC_4);
    is31fl3733_init(DRIVER_ADDR_4, DRIVER_SYNC_4);
#                endif
#            endif
#        endif

#    elif defined(IS31FL3736)
    IS31FL3736_init(DRIVER_ADDR_1);
    is31fl3736_init(DRIVER_ADDR_1);
#        if defined(DRIVER_ADDR_2)
    IS31FL3736_init(DRIVER_ADDR_2);
    is31fl3736_init(DRIVER_ADDR_2);
#            if defined(DRIVER_ADDR_3)
    IS31FL3736_init(DRIVER_ADDR_3);
    is31fl3736_init(DRIVER_ADDR_3);
#                if defined(DRIVER_ADDR_4)
    IS31FL3736_init(DRIVER_ADDR_4);
    is31fl3736_init(DRIVER_ADDR_4);
#                endif
#            endif
#        endif

#    elif defined(IS31FL3737)
    IS31FL3737_init(DRIVER_ADDR_1);
    is31fl3737_init(DRIVER_ADDR_1);
#        if defined(DRIVER_ADDR_2)
    IS31FL3737_init(DRIVER_ADDR_2);
    is31fl3737_init(DRIVER_ADDR_2);
#            if defined(DRIVER_ADDR_3)
    IS31FL3737_init(DRIVER_ADDR_3);
    is31fl3737_init(DRIVER_ADDR_3);
#                if defined(DRIVER_ADDR_4)
    IS31FL3737_init(DRIVER_ADDR_4);
    is31fl3737_init(DRIVER_ADDR_4);
#                endif
#            endif
#        endif

#    elif defined(IS31FL3741)
    IS31FL3741_init(DRIVER_ADDR_1);
    is31fl3741_init(DRIVER_ADDR_1);
#        if defined(DRIVER_ADDR_2)
    IS31FL3741_init(DRIVER_ADDR_2);
    is31fl3741_init(DRIVER_ADDR_2);
#            if defined(DRIVER_ADDR_3)
    IS31FL3741_init(DRIVER_ADDR_3);
    is31fl3741_init(DRIVER_ADDR_3);
#                if defined(DRIVER_ADDR_4)
    IS31FL3741_init(DRIVER_ADDR_4);
    is31fl3741_init(DRIVER_ADDR_4);
#                endif
#            endif
#        endif


@@ 122,13 122,13 @@ static void init(void) {
#        endif

#    elif defined(CKLED2001)
    CKLED2001_init(DRIVER_ADDR_1);
    ckled2001_init(DRIVER_ADDR_1);
#        if defined(DRIVER_ADDR_2)
    CKLED2001_init(DRIVER_ADDR_2);
    ckled2001_init(DRIVER_ADDR_2);
#            if defined(DRIVER_ADDR_3)
    CKLED2001_init(DRIVER_ADDR_3);
    ckled2001_init(DRIVER_ADDR_3);
#                if defined(DRIVER_ADDR_4)
    CKLED2001_init(DRIVER_ADDR_4);
    ckled2001_init(DRIVER_ADDR_4);
#                endif
#            endif
#        endif


@@ 139,79 139,79 @@ static void init(void) {

        // This only caches it for later
#    if defined(IS31FL3731)
        IS31FL3731_set_led_control_register(index, enabled, enabled, enabled);
        is31fl3731_set_led_control_register(index, enabled, enabled, enabled);
#    elif defined(IS31FL3733)
        IS31FL3733_set_led_control_register(index, enabled, enabled, enabled);
        is31fl3733_set_led_control_register(index, enabled, enabled, enabled);
#    elif defined(IS31FL3736)
        IS31FL3736_set_led_control_register(index, enabled, enabled, enabled);
        is31fl3736_set_led_control_register(index, enabled, enabled, enabled);
#    elif defined(IS31FL3737)
        IS31FL3737_set_led_control_register(index, enabled, enabled, enabled);
        is31fl3737_set_led_control_register(index, enabled, enabled, enabled);
#    elif defined(IS31FL3741)
        IS31FL3741_set_led_control_register(index, enabled, enabled, enabled);
        is31fl3741_set_led_control_register(index, enabled, enabled, enabled);
#    elif defined(IS31FLCOMMON)
        IS31FL_RGB_set_scaling_buffer(index, enabled, enabled, enabled);
#    elif defined(CKLED2001)
        CKLED2001_set_led_control_register(index, enabled, enabled, enabled);
        ckled2001_set_led_control_register(index, enabled, enabled, enabled);
#    endif
    }

    // This actually updates the LED drivers
#    if defined(IS31FL3731)
    IS31FL3731_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3731_update_led_control_registers(DRIVER_ADDR_1, 0);
#        if defined(DRIVER_ADDR_2)
    IS31FL3731_update_led_control_registers(DRIVER_ADDR_2, 1);
    is31fl3731_update_led_control_registers(DRIVER_ADDR_2, 1);
#            if defined(DRIVER_ADDR_3)
    IS31FL3731_update_led_control_registers(DRIVER_ADDR_3, 2);
    is31fl3731_update_led_control_registers(DRIVER_ADDR_3, 2);
#                if defined(DRIVER_ADDR_4)
    IS31FL3731_update_led_control_registers(DRIVER_ADDR_4, 3);
    is31fl3731_update_led_control_registers(DRIVER_ADDR_4, 3);
#                endif
#            endif
#        endif

#    elif defined(IS31FL3733)
    IS31FL3733_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3733_update_led_control_registers(DRIVER_ADDR_1, 0);
#        if defined(DRIVER_ADDR_2)
    IS31FL3733_update_led_control_registers(DRIVER_ADDR_2, 1);
    is31fl3733_update_led_control_registers(DRIVER_ADDR_2, 1);
#            if defined(DRIVER_ADDR_3)
    IS31FL3733_update_led_control_registers(DRIVER_ADDR_3, 2);
    is31fl3733_update_led_control_registers(DRIVER_ADDR_3, 2);
#                if defined(DRIVER_ADDR_4)
    IS31FL3733_update_led_control_registers(DRIVER_ADDR_4, 3);
    is31fl3733_update_led_control_registers(DRIVER_ADDR_4, 3);
#                endif
#            endif
#        endif

#    elif defined(IS31FL3736)
    IS31FL3736_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3736_update_led_control_registers(DRIVER_ADDR_1, 0);
#        if defined(DRIVER_ADDR_2)
    IS31FL3736_update_led_control_registers(DRIVER_ADDR_2, 1);
    is31fl3736_update_led_control_registers(DRIVER_ADDR_2, 1);
#            if defined(DRIVER_ADDR_3)
    IS31FL3736_update_led_control_registers(DRIVER_ADDR_3, 2);
    is31fl3736_update_led_control_registers(DRIVER_ADDR_3, 2);
#                if defined(DRIVER_ADDR_4)
    IS31FL3736_update_led_control_registers(DRIVER_ADDR_4, 3);
    is31fl3736_update_led_control_registers(DRIVER_ADDR_4, 3);
#                endif
#            endif
#        endif

#    elif defined(IS31FL3737)
    IS31FL3737_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3737_update_led_control_registers(DRIVER_ADDR_1, 0);
#        if defined(DRIVER_ADDR_2)
    IS31FL3737_update_led_control_registers(DRIVER_ADDR_2, 1);
    is31fl3737_update_led_control_registers(DRIVER_ADDR_2, 1);
#            if defined(DRIVER_ADDR_3)
    IS31FL3737_update_led_control_registers(DRIVER_ADDR_3, 2);
    is31fl3737_update_led_control_registers(DRIVER_ADDR_3, 2);
#                if defined(DRIVER_ADDR_4)
    IS31FL3737_update_led_control_registers(DRIVER_ADDR_4, 3);
    is31fl3737_update_led_control_registers(DRIVER_ADDR_4, 3);
#                endif
#            endif
#        endif

#    elif defined(IS31FL3741)
    IS31FL3741_update_led_control_registers(DRIVER_ADDR_1, 0);
    is31fl3741_update_led_control_registers(DRIVER_ADDR_1, 0);
#        if defined(DRIVER_ADDR_2)
    IS31FL3741_update_led_control_registers(DRIVER_ADDR_2, 1);
    is31fl3741_update_led_control_registers(DRIVER_ADDR_2, 1);
#            if defined(DRIVER_ADDR_3)
    IS31FL3741_update_led_control_registers(DRIVER_ADDR_3, 2);
    is31fl3741_update_led_control_registers(DRIVER_ADDR_3, 2);
#                if defined(DRIVER_ADDR_4)
    IS31FL3741_update_led_control_registers(DRIVER_ADDR_4, 3);
    is31fl3741_update_led_control_registers(DRIVER_ADDR_4, 3);
#                endif
#            endif
#        endif


@@ 232,13 232,13 @@ static void init(void) {
#        endif

#    elif defined(CKLED2001)
    CKLED2001_update_led_control_registers(DRIVER_ADDR_1, 0);
    ckled2001_update_led_control_registers(DRIVER_ADDR_1, 0);
#        if defined(DRIVER_ADDR_2)
    CKLED2001_update_led_control_registers(DRIVER_ADDR_2, 1);
    ckled2001_update_led_control_registers(DRIVER_ADDR_2, 1);
#            if defined(DRIVER_ADDR_3)
    CKLED2001_update_led_control_registers(DRIVER_ADDR_3, 2);
    ckled2001_update_led_control_registers(DRIVER_ADDR_3, 2);
#                if defined(DRIVER_ADDR_4)
    CKLED2001_update_led_control_registers(DRIVER_ADDR_4, 3);
    ckled2001_update_led_control_registers(DRIVER_ADDR_4, 3);
#                endif
#            endif
#        endif


@@ 247,13 247,13 @@ static void init(void) {

#    if defined(IS31FL3731)
static void flush(void) {
    IS31FL3731_update_pwm_buffers(DRIVER_ADDR_1, 0);
    is31fl3731_update_pwm_buffers(DRIVER_ADDR_1, 0);
#        if defined(DRIVER_ADDR_2)
    IS31FL3731_update_pwm_buffers(DRIVER_ADDR_2, 1);
    is31fl3731_update_pwm_buffers(DRIVER_ADDR_2, 1);
#            if defined(DRIVER_ADDR_3)
    IS31FL3731_update_pwm_buffers(DRIVER_ADDR_3, 2);
    is31fl3731_update_pwm_buffers(DRIVER_ADDR_3, 2);
#                if defined(DRIVER_ADDR_4)
    IS31FL3731_update_pwm_buffers(DRIVER_ADDR_4, 3);
    is31fl3731_update_pwm_buffers(DRIVER_ADDR_4, 3);
#                endif
#            endif
#        endif


@@ 262,19 262,19 @@ static void flush(void) {
const rgb_matrix_driver_t rgb_matrix_driver = {
    .init          = init,
    .flush         = flush,
    .set_color     = IS31FL3731_set_color,
    .set_color_all = IS31FL3731_set_color_all,
    .set_color     = is31fl3731_set_color,
    .set_color_all = is31fl3731_set_color_all,
};

#    elif defined(IS31FL3733)
static void flush(void) {
    IS31FL3733_update_pwm_buffers(DRIVER_ADDR_1, 0);
    is31fl3733_update_pwm_buffers(DRIVER_ADDR_1, 0);
#        if defined(DRIVER_ADDR_2)
    IS31FL3733_update_pwm_buffers(DRIVER_ADDR_2, 1);
    is31fl3733_update_pwm_buffers(DRIVER_ADDR_2, 1);
#            if defined(DRIVER_ADDR_3)
    IS31FL3733_update_pwm_buffers(DRIVER_ADDR_3, 2);
    is31fl3733_update_pwm_buffers(DRIVER_ADDR_3, 2);
#                if defined(DRIVER_ADDR_4)
    IS31FL3733_update_pwm_buffers(DRIVER_ADDR_4, 3);
    is31fl3733_update_pwm_buffers(DRIVER_ADDR_4, 3);
#                endif
#            endif
#        endif


@@ 283,19 283,19 @@ static void flush(void) {
const rgb_matrix_driver_t rgb_matrix_driver = {
    .init = init,
    .flush = flush,
    .set_color = IS31FL3733_set_color,
    .set_color_all = IS31FL3733_set_color_all,
    .set_color = is31fl3733_set_color,
    .set_color_all = is31fl3733_set_color_all,
};

#    elif defined(IS31FL3736)
static void flush(void) {
    IS31FL3736_update_pwm_buffers(DRIVER_ADDR_1, 0);
    is31fl3736_update_pwm_buffers(DRIVER_ADDR_1, 0);
#        if defined(DRIVER_ADDR_2)
    IS31FL3736_update_pwm_buffers(DRIVER_ADDR_2, 1);
    is31fl3736_update_pwm_buffers(DRIVER_ADDR_2, 1);
#            if defined(DRIVER_ADDR_3)
    IS31FL3736_update_pwm_buffers(DRIVER_ADDR_3, 2);
    is31fl3736_update_pwm_buffers(DRIVER_ADDR_3, 2);
#                if defined(DRIVER_ADDR_4)
    IS31FL3736_update_pwm_buffers(DRIVER_ADDR_4, 3);
    is31fl3736_update_pwm_buffers(DRIVER_ADDR_4, 3);
#                endif
#            endif
#        endif


@@ 304,19 304,19 @@ static void flush(void) {
const rgb_matrix_driver_t rgb_matrix_driver = {
    .init = init,
    .flush = flush,
    .set_color = IS31FL3736_set_color,
    .set_color_all = IS31FL3736_set_color_all,
    .set_color = is31fl3736_set_color,
    .set_color_all = is31fl3736_set_color_all,
};

#    elif defined(IS31FL3737)
static void flush(void) {
    IS31FL3737_update_pwm_buffers(DRIVER_ADDR_1, 0);
    is31fl3737_update_pwm_buffers(DRIVER_ADDR_1, 0);
#        if defined(DRIVER_ADDR_2)
    IS31FL3737_update_pwm_buffers(DRIVER_ADDR_2, 1);
    is31fl3737_update_pwm_buffers(DRIVER_ADDR_2, 1);
#            if defined(DRIVER_ADDR_3)
    IS31FL3737_update_pwm_buffers(DRIVER_ADDR_3, 2);
    is31fl3737_update_pwm_buffers(DRIVER_ADDR_3, 2);
#                if defined(DRIVER_ADDR_4)
    IS31FL3737_update_pwm_buffers(DRIVER_ADDR_4, 3);
    is31fl3737_update_pwm_buffers(DRIVER_ADDR_4, 3);
#                endif
#            endif
#        endif


@@ 325,19 325,19 @@ static void flush(void) {
const rgb_matrix_driver_t rgb_matrix_driver = {
    .init = init,
    .flush = flush,
    .set_color = IS31FL3737_set_color,
    .set_color_all = IS31FL3737_set_color_all,
    .set_color = is31fl3737_set_color,
    .set_color_all = is31fl3737_set_color_all,
};

#    elif defined(IS31FL3741)
static void flush(void) {
    IS31FL3741_update_pwm_buffers(DRIVER_ADDR_1, 0);
    is31fl3741_update_pwm_buffers(DRIVER_ADDR_1, 0);
#        if defined(DRIVER_ADDR_2)
    IS31FL3741_update_pwm_buffers(DRIVER_ADDR_2, 1);
    is31fl3741_update_pwm_buffers(DRIVER_ADDR_2, 1);
#            if defined(DRIVER_ADDR_3)
    IS31FL3741_update_pwm_buffers(DRIVER_ADDR_3, 2);
    is31fl3741_update_pwm_buffers(DRIVER_ADDR_3, 2);
#                if defined(DRIVER_ADDR_4)
    IS31FL3741_update_pwm_buffers(DRIVER_ADDR_4, 3);
    is31fl3741_update_pwm_buffers(DRIVER_ADDR_4, 3);
#                endif
#            endif
#        endif


@@ 346,8 346,8 @@ static void flush(void) {
const rgb_matrix_driver_t rgb_matrix_driver = {
    .init = init,
    .flush = flush,
    .set_color = IS31FL3741_set_color,
    .set_color_all = IS31FL3741_set_color_all,
    .set_color = is31fl3741_set_color,
    .set_color_all = is31fl3741_set_color_all,
};

#    elif defined(IS31FLCOMMON)


@@ 373,13 373,13 @@ const rgb_matrix_driver_t rgb_matrix_driver = {

#    elif defined(CKLED2001)
static void flush(void) {
    CKLED2001_update_pwm_buffers(DRIVER_ADDR_1, 0);
    ckled2001_update_pwm_buffers(DRIVER_ADDR_1, 0);
#        if defined(DRIVER_ADDR_2)
    CKLED2001_update_pwm_buffers(DRIVER_ADDR_2, 1);
    ckled2001_update_pwm_buffers(DRIVER_ADDR_2, 1);
#            if defined(DRIVER_ADDR_3)
    CKLED2001_update_pwm_buffers(DRIVER_ADDR_3, 2);
    ckled2001_update_pwm_buffers(DRIVER_ADDR_3, 2);
#                if defined(DRIVER_ADDR_4)
    CKLED2001_update_pwm_buffers(DRIVER_ADDR_4, 3);
    ckled2001_update_pwm_buffers(DRIVER_ADDR_4, 3);
#                endif
#            endif
#        endif


@@ 388,8 388,8 @@ static void flush(void) {
const rgb_matrix_driver_t rgb_matrix_driver = {
    .init = init,
    .flush = flush,
    .set_color = CKLED2001_set_color,
    .set_color_all = CKLED2001_set_color_all,
    .set_color = ckled2001_set_color,
    .set_color_all = ckled2001_set_color_all,
};
#    endif



@@ 399,24 399,24 @@ const rgb_matrix_driver_t rgb_matrix_driver = {
static void init(void) {
    spi_init();

    AW20216_init(DRIVER_1_CS, DRIVER_1_EN);
    aw20216_init(DRIVER_1_CS, DRIVER_1_EN);
#    if defined(DRIVER_2_CS)
    AW20216_init(DRIVER_2_CS, DRIVER_2_EN);
    aw20216_init(DRIVER_2_CS, DRIVER_2_EN);
#    endif
}

static void flush(void) {
    AW20216_update_pwm_buffers(DRIVER_1_CS, 0);
    aw20216_update_pwm_buffers(DRIVER_1_CS, 0);
#    if defined(DRIVER_2_CS)
    AW20216_update_pwm_buffers(DRIVER_2_CS, 1);
    aw20216_update_pwm_buffers(DRIVER_2_CS, 1);
#    endif
}

const rgb_matrix_driver_t rgb_matrix_driver = {
    .init          = init,
    .flush         = flush,
    .set_color     = AW20216_set_color,
    .set_color_all = AW20216_set_color_all,
    .set_color     = aw20216_set_color,
    .set_color_all = aw20216_set_color_all,
};

#elif defined(WS2812)

Do not follow this link