summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/led/apa102.c10
-rw-r--r--drivers/ws2812.h2
-rw-r--r--keyboards/1k/keymaps/default/keymap.c1
-rw-r--r--keyboards/1k/keymaps/default/rgblite.h4
-rw-r--r--keyboards/ergodox_ez/glow/keymaps/default/keymap.c200
-rw-r--r--keyboards/ergodox_ez/glow/keymaps/default/rules.mk2
-rw-r--r--keyboards/ergodox_ez/keymaps/default_glow/keymap.c1
-rw-r--r--keyboards/ergodox_ez/keymaps/default_glow/rules.mk4
-rw-r--r--keyboards/ergodox_ez/keymaps/rgb_layer/keymap.c37
-rw-r--r--keyboards/ergodox_ez/keymaps/testing/keymap.c27
-rw-r--r--keyboards/ergodox_ez/rules.mk3
-rw-r--r--keyboards/ergodox_ez/shine/rgblight_custom.c (renamed from keyboards/ergodox_ez/led_i2c.c)9
-rw-r--r--keyboards/ergodox_ez/shine/rules.mk1
-rw-r--r--keyboards/handwired/promethium/rgbsps.c7
-rw-r--r--keyboards/ibm/model_m/mschwingen/mschwingen.c1
-rw-r--r--keyboards/kprepublic/bm60hsrgb/rev2/rev2.c1
-rw-r--r--keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c1
-rw-r--r--keyboards/kprepublic/bm60hsrgb_poker/rev2/rev2.c1
-rw-r--r--keyboards/matrix/abelx/abelx.c1
-rw-r--r--keyboards/matrix/noah/noah.c1
-rw-r--r--keyboards/neson_design/700e/700e.c1
-rw-r--r--keyboards/neson_design/n6/n6.c1
-rw-r--r--keyboards/neson_design/nico/nico.c1
-rw-r--r--keyboards/oddforge/vea/ws2812_custom.c6
-rw-r--r--keyboards/rgbkb/pan/pan.c4
-rw-r--r--keyboards/wilba_tech/wt_rgb_backlight.c3
-rw-r--r--keyboards/work_louder/rgb_functions.c2
-rw-r--r--keyboards/xelus/dawn60/rev1_qmk/rev1_qmk.c2
-rw-r--r--keyboards/xiudi/xd002/keymaps/multilayer_rgb/keymap.c1
-rw-r--r--keyboards/xiudi/xd002/keymaps/multilayer_rgb/rgblite.h8
-rw-r--r--keyboards/xiudi/xd002/keymaps/rgb_lite/keymap.c1
-rw-r--r--keyboards/xiudi/xd002/keymaps/rgb_lite/rgblite.h8
-rw-r--r--platforms/avr/drivers/ws2812_bitbang.c4
-rw-r--r--platforms/avr/drivers/ws2812_i2c.c6
-rw-r--r--platforms/chibios/drivers/vendor/RP/RP2040/ws2812_vendor.c11
-rw-r--r--platforms/chibios/drivers/ws2812_bitbang.c6
-rw-r--r--platforms/chibios/drivers/ws2812_pwm.c6
-rw-r--r--platforms/chibios/drivers/ws2812_spi.c6
-rw-r--r--quantum/rgb_matrix/rgb_matrix_drivers.c1
-rw-r--r--quantum/rgblight/rgblight.c2
-rw-r--r--quantum/rgblight/rgblight_drivers.c2
-rw-r--r--quantum/rgblight/rgblight_drivers.h1
42 files changed, 305 insertions, 92 deletions
diff --git a/drivers/led/apa102.c b/drivers/led/apa102.c
index d6d4327495..b171b07b12 100644
--- a/drivers/led/apa102.c
+++ b/drivers/led/apa102.c
@@ -67,7 +67,9 @@ static void apa102_send_byte(uint8_t byte) {
67} 67}
68 68
69static void apa102_start_frame(void) { 69static void apa102_start_frame(void) {
70 apa102_init(); 70 gpio_write_pin_low(APA102_DI_PIN);
71 gpio_write_pin_low(APA102_CI_PIN);
72
71 for (uint16_t i = 0; i < 4; i++) { 73 for (uint16_t i = 0; i < 4; i++) {
72 apa102_send_byte(0); 74 apa102_send_byte(0);
73 } 75 }
@@ -103,7 +105,8 @@ static void apa102_end_frame(uint16_t num_leds) {
103 apa102_send_byte(0); 105 apa102_send_byte(0);
104 } 106 }
105 107
106 apa102_init(); 108 gpio_write_pin_low(APA102_DI_PIN);
109 gpio_write_pin_low(APA102_CI_PIN);
107} 110}
108 111
109static void apa102_send_frame(uint8_t red, uint8_t green, uint8_t blue, uint8_t brightness) { 112static void apa102_send_frame(uint8_t red, uint8_t green, uint8_t blue, uint8_t brightness) {
@@ -116,9 +119,6 @@ static void apa102_send_frame(uint8_t red, uint8_t green, uint8_t blue, uint8_t
116void apa102_init(void) { 119void apa102_init(void) {
117 gpio_set_pin_output(APA102_DI_PIN); 120 gpio_set_pin_output(APA102_DI_PIN);
118 gpio_set_pin_output(APA102_CI_PIN); 121 gpio_set_pin_output(APA102_CI_PIN);
119
120 gpio_write_pin_low(APA102_DI_PIN);
121 gpio_write_pin_low(APA102_CI_PIN);
122} 122}
123 123
124void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds) { 124void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds) {
diff --git a/drivers/ws2812.h b/drivers/ws2812.h
index 134de51c50..993cce8ce4 100644
--- a/drivers/ws2812.h
+++ b/drivers/ws2812.h
@@ -62,6 +62,8 @@
62# define WS2812_LED_COUNT RGB_MATRIX_LED_COUNT 62# define WS2812_LED_COUNT RGB_MATRIX_LED_COUNT
63#endif 63#endif
64 64
65void ws2812_init(void);
66
65/* User Interface 67/* User Interface
66 * 68 *
67 * Input: 69 * Input:
diff --git a/keyboards/1k/keymaps/default/keymap.c b/keyboards/1k/keymaps/default/keymap.c
index b64d4d8c76..3261a9f922 100644
--- a/keyboards/1k/keymaps/default/keymap.c
+++ b/keyboards/1k/keymaps/default/keymap.c
@@ -21,5 +21,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
21} 21}
22 22
23void keyboard_post_init_user(void) { 23void keyboard_post_init_user(void) {
24 rgblite_init();
24 rgblite_increase_hue(); 25 rgblite_increase_hue();
25} 26}
diff --git a/keyboards/1k/keymaps/default/rgblite.h b/keyboards/1k/keymaps/default/rgblite.h
index 9a7761e30d..2e0b898699 100644
--- a/keyboards/1k/keymaps/default/rgblite.h
+++ b/keyboards/1k/keymaps/default/rgblite.h
@@ -6,6 +6,10 @@
6#include "ws2812.h" 6#include "ws2812.h"
7#include "color.h" 7#include "color.h"
8 8
9static inline void rgblite_init(void) {
10 ws2812_init();
11}
12
9static inline void rgblite_setrgb(RGB rgb) { 13static inline void rgblite_setrgb(RGB rgb) {
10 rgb_led_t leds[RGBLIGHT_LED_COUNT] = {{.r = rgb.r, .g = rgb.g, .b = rgb.b}}; 14 rgb_led_t leds[RGBLIGHT_LED_COUNT] = {{.r = rgb.r, .g = rgb.g, .b = rgb.b}};
11 ws2812_setleds(leds, RGBLIGHT_LED_COUNT); 15 ws2812_setleds(leds, RGBLIGHT_LED_COUNT);
diff --git a/keyboards/ergodox_ez/glow/keymaps/default/keymap.c b/keyboards/ergodox_ez/glow/keymaps/default/keymap.c
new file mode 100644
index 0000000000..94d68cb870
--- /dev/null
+++ b/keyboards/ergodox_ez/glow/keymaps/default/keymap.c
@@ -0,0 +1,200 @@
1#include QMK_KEYBOARD_H
2#include "version.h"
3
4enum layers {
5 BASE, // default layer
6 SYMB, // symbols
7 MDIA, // media keys
8};
9
10enum custom_keycodes {
11 VRSN = SAFE_RANGE,
12};
13
14// clang-format off
15const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
16/* Keymap 0: Basic layer
17 *
18 * ,--------------------------------------------------. ,--------------------------------------------------.
19 * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
20 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
21 * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
22 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
23 * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd |
24 * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
25 * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
26 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
27 * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
28 * `----------------------------------' `----------------------------------'
29 * ,-------------. ,-------------.
30 * | App | LGui | | Alt |Ctrl/Esc|
31 * ,------|------|------| |------+--------+------.
32 * | | | Home | | PgUp | | |
33 * | Space|Backsp|------| |------| Tab |Enter |
34 * | |ace | End | | PgDn | | |
35 * `--------------------' `----------------------'
36 */
37[BASE] = LAYOUT_ergodox_pretty(
38 // left hand
39 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
40 KC_DEL, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
41 KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), GUI_T(KC_QUOT),
42 KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
43 LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT, KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, TT(SYMB),
44 ALT_T(KC_APP), KC_LGUI, KC_LALT, CTL_T(KC_ESC),
45 KC_HOME, KC_PGUP,
46 KC_SPC, KC_BSPC, KC_END, KC_PGDN, KC_TAB, KC_ENT
47),
48/* Keymap 1: Symbol Layer
49 *
50 * ,---------------------------------------------------. ,--------------------------------------------------.
51 * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
52 * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
53 * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
54 * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
55 * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
56 * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
57 * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
58 * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
59 * | EPRM | | | | | | | . | 0 | = | |
60 * `-----------------------------------' `----------------------------------'
61 * ,-------------. ,-------------.
62 * |Animat| | |Toggle|Solid |
63 * ,------|------|------| |------+------+------.
64 * |Bright|Bright| | | |Hue- |Hue+ |
65 * |ness- |ness+ |------| |------| | |
66 * | | | | | | | |
67 * `--------------------' `--------------------'
68 */
69[SYMB] = LAYOUT_ergodox_pretty(
70 // left hand
71 VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
72 KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
73 KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
74 KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS, KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
75 EE_CLR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DOT, KC_0, KC_EQL, KC_TRNS,
76 RGB_MOD, KC_TRNS, RGB_TOG, RGB_M_P,
77 KC_TRNS, KC_TRNS,
78 RGB_VAD, RGB_VAI, KC_TRNS, KC_TRNS, RGB_HUD, RGB_HUI
79),
80/* Keymap 2: Media and mouse keys
81 *
82 * ,--------------------------------------------------. ,--------------------------------------------------.
83 * | | | | | | | | | | | | | | | |
84 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
85 * | | | | MsUp | | | | | | | | | | | |
86 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
87 * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
88 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
89 * | | | | | | | | | | | | Prev | Next | | |
90 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
91 * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
92 * `----------------------------------' `----------------------------------'
93 * ,-------------. ,-------------.
94 * | | | | | |
95 * ,------|------|------| |------+------+------.
96 * | | | | | | |Brwser|
97 * | | |------| |------| |Back |
98 * | | | | | | | |
99 * `--------------------' `--------------------'
100 */
101[MDIA] = LAYOUT_ergodox_pretty(
102 // left hand
103 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
104 KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
105 KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
106 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
107 KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
108
109 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
110 KC_TRNS, KC_TRNS,
111 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WBAK
112),
113};
114// clang-format on
115
116bool process_record_user(uint16_t keycode, keyrecord_t *record) {
117 if (record->event.pressed) {
118 switch (keycode) {
119 case VRSN:
120 SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
121 return false;
122 }
123 }
124 return true;
125}
126
127// Runs just one time when the keyboard initializes.
128void keyboard_post_init_user(void) {
129#ifdef RGBLIGHT_COLOR_LAYER_0
130 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0);
131#endif
132};
133
134// Runs whenever there is a layer state change.
135layer_state_t layer_state_set_user(layer_state_t state) {
136 ergodox_board_led_off();
137 ergodox_right_led_1_off();
138 ergodox_right_led_2_off();
139 ergodox_right_led_3_off();
140
141 uint8_t layer = get_highest_layer(state);
142 switch (layer) {
143 case 0:
144#ifdef RGBLIGHT_COLOR_LAYER_0
145 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0);
146#endif
147 break;
148 case 1:
149 ergodox_right_led_1_on();
150#ifdef RGBLIGHT_COLOR_LAYER_1
151 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_1);
152#endif
153 break;
154 case 2:
155 ergodox_right_led_2_on();
156#ifdef RGBLIGHT_COLOR_LAYER_2
157 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_2);
158#endif
159 break;
160 case 3:
161 ergodox_right_led_3_on();
162#ifdef RGBLIGHT_COLOR_LAYER_3
163 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_3);
164#endif
165 break;
166 case 4:
167 ergodox_right_led_1_on();
168 ergodox_right_led_2_on();
169#ifdef RGBLIGHT_COLOR_LAYER_4
170 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_4);
171#endif
172 break;
173 case 5:
174 ergodox_right_led_1_on();
175 ergodox_right_led_3_on();
176#ifdef RGBLIGHT_COLOR_LAYER_5
177 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_5);
178#endif
179 break;
180 case 6:
181 ergodox_right_led_2_on();
182 ergodox_right_led_3_on();
183#ifdef RGBLIGHT_COLOR_LAYER_6
184 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_6);
185#endif
186 break;
187 case 7:
188 ergodox_right_led_1_on();
189 ergodox_right_led_2_on();
190 ergodox_right_led_3_on();
191#ifdef RGBLIGHT_COLOR_LAYER_7
192 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_7);
193#endif
194 break;
195 default:
196 break;
197 }
198
199 return state;
200};
diff --git a/keyboards/ergodox_ez/glow/keymaps/default/rules.mk b/keyboards/ergodox_ez/glow/keymaps/default/rules.mk
new file mode 100644
index 0000000000..1a840036e2
--- /dev/null
+++ b/keyboards/ergodox_ez/glow/keymaps/default/rules.mk
@@ -0,0 +1,2 @@
1RGBLIGHT_ENABLE = no
2RGB_MATRIX_ENABLE = yes
diff --git a/keyboards/ergodox_ez/keymaps/default_glow/keymap.c b/keyboards/ergodox_ez/keymaps/default_glow/keymap.c
deleted file mode 100644
index 526c364029..0000000000
--- a/keyboards/ergodox_ez/keymaps/default_glow/keymap.c
+++ /dev/null
@@ -1 +0,0 @@
1// Placeholder. See ../default/keymap.c for details
diff --git a/keyboards/ergodox_ez/keymaps/default_glow/rules.mk b/keyboards/ergodox_ez/keymaps/default_glow/rules.mk
deleted file mode 100644
index 20bac4ab9d..0000000000
--- a/keyboards/ergodox_ez/keymaps/default_glow/rules.mk
+++ /dev/null
@@ -1,4 +0,0 @@
1RGBLIGHT_ENABLE = no
2RGB_MATRIX_ENABLE = yes # enable later
3
4SRC += keymaps/default/keymap.c
diff --git a/keyboards/ergodox_ez/keymaps/rgb_layer/keymap.c b/keyboards/ergodox_ez/keymaps/rgb_layer/keymap.c
index 6ed204a357..b033c0ca1c 100644
--- a/keyboards/ergodox_ez/keymaps/rgb_layer/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/rgb_layer/keymap.c
@@ -151,6 +151,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
151), 151),
152}; 152};
153 153
154#ifdef RGBLIGHT_ENABLE
154void eeconfig_init_user(void) { 155void eeconfig_init_user(void) {
155 rgblight_enable(); 156 rgblight_enable();
156 rgblight_sethsv(HSV_CYAN); 157 rgblight_sethsv(HSV_CYAN);
@@ -158,7 +159,7 @@ void eeconfig_init_user(void) {
158 user_config.rgb_layer_change = true; 159 user_config.rgb_layer_change = true;
159 eeconfig_update_user(user_config.raw); 160 eeconfig_update_user(user_config.raw);
160} 161}
161 162#endif
162 163
163bool process_record_user(uint16_t keycode, keyrecord_t *record) { 164bool process_record_user(uint16_t keycode, keyrecord_t *record) {
164 switch (keycode) { 165 switch (keycode) {
@@ -168,21 +169,17 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
168 eeconfig_init(); 169 eeconfig_init();
169 } 170 }
170 return false; 171 return false;
171 break;
172 case VRSN: 172 case VRSN:
173 if (record->event.pressed) { 173 if (record->event.pressed) {
174 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); 174 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
175 } 175 }
176 return false; 176 return false;
177 break; 177#ifdef RGBLIGHT_ENABLE
178 case RGB_SLD: 178 case RGB_SLD:
179 if (record->event.pressed) { 179 if (record->event.pressed) {
180 #ifdef RGBLIGHT_ENABLE
181 rgblight_mode(1); 180 rgblight_mode(1);
182 #endif
183 } 181 }
184 return false; 182 return false;
185 break;
186 case RGB_LYR: // This allows me to use underglow as layer indication, or as normal 183 case RGB_LYR: // This allows me to use underglow as layer indication, or as normal
187 if (record->event.pressed) { 184 if (record->event.pressed) {
188 user_config.rgb_layer_change ^= 1; // Toggles the status 185 user_config.rgb_layer_change ^= 1; // Toggles the status
@@ -191,7 +188,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
191 layer_state_set(layer_state); // then immediately update the layer color 188 layer_state_set(layer_state); // then immediately update the layer color
192 } 189 }
193 } 190 }
194 return false; break; 191 return false;
195 case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // For any of the RGB codes (see quantum_keycodes.h, L400 for reference) 192 case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // For any of the RGB codes (see quantum_keycodes.h, L400 for reference)
196 if (record->event.pressed) { //This disables layer indication, as it's assumed that if you're changing this ... you want that disabled 193 if (record->event.pressed) { //This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
197 if (user_config.rgb_layer_change) { // only if this is enabled 194 if (user_config.rgb_layer_change) { // only if this is enabled
@@ -199,11 +196,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
199 eeconfig_update_user(user_config.raw); // write the setings to EEPROM 196 eeconfig_update_user(user_config.raw); // write the setings to EEPROM
200 } 197 }
201 } 198 }
202 return true; break; 199 return true;
200#endif
203 } 201 }
204 return true; 202 return true;
205} 203}
206 204
205#ifdef RGBLIGHT_ENABLE
207void matrix_init_user(void) { 206void matrix_init_user(void) {
208 // Call the keymap level matrix init. 207 // Call the keymap level matrix init.
209 208
@@ -217,11 +216,7 @@ void matrix_init_user(void) {
217 rgblight_mode_noeeprom(1); 216 rgblight_mode_noeeprom(1);
218 } 217 }
219} 218}
220 219#endif
221// Runs constantly in the background, in a loop.
222void matrix_scan_user(void) {
223
224};
225 220
226layer_state_t layer_state_set_user(layer_state_t state) { 221layer_state_t layer_state_set_user(layer_state_t state) {
227 ergodox_board_led_off(); 222 ergodox_board_led_off();
@@ -231,39 +226,55 @@ layer_state_t layer_state_set_user(layer_state_t state) {
231 switch (get_highest_layer(state)) { 226 switch (get_highest_layer(state)) {
232 case SYMB: 227 case SYMB:
233 ergodox_right_led_1_on(); 228 ergodox_right_led_1_on();
229#ifdef RGBLIGHT_ENABLE
234 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_RED); rgblight_mode_noeeprom(1); } 230 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_RED); rgblight_mode_noeeprom(1); }
231#endif
235 break; 232 break;
236 case MDIA: 233 case MDIA:
237 ergodox_right_led_2_on(); 234 ergodox_right_led_2_on();
235#ifdef RGBLIGHT_ENABLE
238 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_GREEN); rgblight_mode_noeeprom(1); } 236 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_GREEN); rgblight_mode_noeeprom(1); }
237#endif
239 break; 238 break;
240 case 3: 239 case 3:
241 ergodox_right_led_3_on(); 240 ergodox_right_led_3_on();
241#ifdef RGBLIGHT_ENABLE
242 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_BLUE); rgblight_mode_noeeprom(1); } 242 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_BLUE); rgblight_mode_noeeprom(1); }
243#endif
243 break; 244 break;
244 case 4: 245 case 4:
245 ergodox_right_led_1_on(); 246 ergodox_right_led_1_on();
246 ergodox_right_led_2_on(); 247 ergodox_right_led_2_on();
248#ifdef RGBLIGHT_ENABLE
247 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_ORANGE); rgblight_mode_noeeprom(1); } 249 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_ORANGE); rgblight_mode_noeeprom(1); }
250#endif
248 break; 251 break;
249 case 5: 252 case 5:
250 ergodox_right_led_1_on(); 253 ergodox_right_led_1_on();
251 ergodox_right_led_3_on(); 254 ergodox_right_led_3_on();
255#ifdef RGBLIGHT_ENABLE
252 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_YELLOW); rgblight_mode_noeeprom(1); } 256 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_YELLOW); rgblight_mode_noeeprom(1); }
257#endif
253 break; 258 break;
254 case 6: 259 case 6:
255 ergodox_right_led_2_on(); 260 ergodox_right_led_2_on();
256 ergodox_right_led_3_on(); 261 ergodox_right_led_3_on();
262#ifdef RGBLIGHT_ENABLE
257 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_PINK); rgblight_mode_noeeprom(1); } 263 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_PINK); rgblight_mode_noeeprom(1); }
264#endif
258 break; 265 break;
259 case 7: 266 case 7:
260 ergodox_right_led_1_on(); 267 ergodox_right_led_1_on();
261 ergodox_right_led_2_on(); 268 ergodox_right_led_2_on();
262 ergodox_right_led_3_on(); 269 ergodox_right_led_3_on();
270#ifdef RGBLIGHT_ENABLE
263 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_WHITE); rgblight_mode_noeeprom(1); } 271 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_WHITE); rgblight_mode_noeeprom(1); }
272#endif
264 break; 273 break;
265 default: // for any other layers, or the default layer 274 default: // for any other layers, or the default layer
275#ifdef RGBLIGHT_ENABLE
266 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_CYAN); rgblight_mode_noeeprom(1); } 276 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_CYAN); rgblight_mode_noeeprom(1); }
277#endif
267 break; 278 break;
268 } 279 }
269 return state; 280 return state;
diff --git a/keyboards/ergodox_ez/keymaps/testing/keymap.c b/keyboards/ergodox_ez/keymaps/testing/keymap.c
index ef8ca63e3b..ee07f264b9 100644
--- a/keyboards/ergodox_ez/keymaps/testing/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/testing/keymap.c
@@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
29}; 29};
30 30
31void matrix_init_user(void) { 31void matrix_init_user(void) {
32#ifdef RGBLIGHT_COLOR_LAYER_0 32#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_COLOR_LAYER_0)
33 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0); 33 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0);
34#endif 34#endif
35}; 35};
@@ -42,19 +42,18 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
42 eeconfig_init(); 42 eeconfig_init();
43 } 43 }
44 return false; 44 return false;
45 break;
46 case VRSN: 45 case VRSN:
47 if (record->event.pressed) { 46 if (record->event.pressed) {
48 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); 47 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
49 } 48 }
50 return false; 49 return false;
51 break; 50#ifdef RGBLIGHT_ENABLE
52 case RGB_SLD: 51 case RGB_SLD:
53 if (record->event.pressed) { 52 if (record->event.pressed) {
54 rgblight_mode(1); 53 rgblight_mode(1);
55 } 54 }
56 return false; 55 return false;
57 break; 56#endif
58 57
59 } 58 }
60 return true; 59 return true;
@@ -70,48 +69,50 @@ layer_state_t layer_state_set_user(layer_state_t state) {
70 ergodox_right_led_3_off(); 69 ergodox_right_led_3_off();
71 switch (layer) { 70 switch (layer) {
72 case 0: 71 case 0:
73 #ifdef RGBLIGHT_COLOR_LAYER_0 72 #ifdef RGBLIGHT_ENABLE
73 #ifdef RGBLIGHT_COLOR_LAYER_0
74 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0); 74 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0);
75 #else 75 #else
76 rgblight_init(); 76 rgblight_init();
77 #endif
77 #endif 78 #endif
78 break; 79 break;
79 case 1: 80 case 1:
80 ergodox_right_led_1_on(); 81 ergodox_right_led_1_on();
81 #ifdef RGBLIGHT_COLOR_LAYER_1 82 #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_COLOR_LAYER_1)
82 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_1); 83 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_1);
83 #endif 84 #endif
84 break; 85 break;
85 case 2: 86 case 2:
86 ergodox_right_led_2_on(); 87 ergodox_right_led_2_on();
87 #ifdef RGBLIGHT_COLOR_LAYER_2 88 #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_COLOR_LAYER_2)
88 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_2); 89 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_2);
89 #endif 90 #endif
90 break; 91 break;
91 case 3: 92 case 3:
92 ergodox_right_led_3_on(); 93 ergodox_right_led_3_on();
93 #ifdef RGBLIGHT_COLOR_LAYER_3 94 #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_COLOR_LAYER_3)
94 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_3); 95 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_3);
95 #endif 96 #endif
96 break; 97 break;
97 case 4: 98 case 4:
98 ergodox_right_led_1_on(); 99 ergodox_right_led_1_on();
99 ergodox_right_led_2_on(); 100 ergodox_right_led_2_on();
100 #ifdef RGBLIGHT_COLOR_LAYER_4 101 #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_COLOR_LAYER_4)
101 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_4); 102 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_4);
102 #endif 103 #endif
103 break; 104 break;
104 case 5: 105 case 5:
105 ergodox_right_led_1_on(); 106 ergodox_right_led_1_on();
106 ergodox_right_led_3_on(); 107 ergodox_right_led_3_on();
107 #ifdef RGBLIGHT_COLOR_LAYER_5 108 #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_COLOR_LAYER_5)
108 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_5); 109 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_5);
109 #endif 110 #endif
110 break; 111 break;
111 case 6: 112 case 6:
112 ergodox_right_led_2_on(); 113 ergodox_right_led_2_on();
113 ergodox_right_led_3_on(); 114 ergodox_right_led_3_on();
114 #ifdef RGBLIGHT_COLOR_LAYER_6 115 #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_COLOR_LAYER_6)
115 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_6); 116 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_6);
116 #endif 117 #endif
117 break; 118 break;
@@ -119,7 +120,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
119 ergodox_right_led_1_on(); 120 ergodox_right_led_1_on();
120 ergodox_right_led_2_on(); 121 ergodox_right_led_2_on();
121 ergodox_right_led_3_on(); 122 ergodox_right_led_3_on();
122 #ifdef RGBLIGHT_COLOR_LAYER_7 123 #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_COLOR_LAYER_7)
123 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_6); 124 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_6);
124 #endif 125 #endif
125 break; 126 break;
diff --git a/keyboards/ergodox_ez/rules.mk b/keyboards/ergodox_ez/rules.mk
index bba3bd86ae..68f785f3cc 100644
--- a/keyboards/ergodox_ez/rules.mk
+++ b/keyboards/ergodox_ez/rules.mk
@@ -19,8 +19,7 @@ SWAP_HANDS_ENABLE= no # Allow swapping hands of keyboard
19RGB_MATRIX_ENABLE = no # enable later 19RGB_MATRIX_ENABLE = no # enable later
20 20
21# project specific files 21# project specific files
22SRC += matrix.c \ 22SRC += matrix.c
23 led_i2c.c
24I2C_DRIVER_REQUIRED = yes 23I2C_DRIVER_REQUIRED = yes
25 24
26# Disable unsupported hardware 25# Disable unsupported hardware
diff --git a/keyboards/ergodox_ez/led_i2c.c b/keyboards/ergodox_ez/shine/rgblight_custom.c
index 80dabf4815..feac50cba0 100644
--- a/keyboards/ergodox_ez/led_i2c.c
+++ b/keyboards/ergodox_ez/shine/rgblight_custom.c
@@ -18,10 +18,8 @@ You should have received a copy of the GNU General Public License
18along with this program. If not, see <http://www.gnu.org/licenses/>. 18along with this program. If not, see <http://www.gnu.org/licenses/>.
19*/ 19*/
20 20
21#ifdef RGBLIGHT_ENABLE 21#include "ergodox_ez.h"
22 22#include "ws2812.h"
23# include "ergodox_ez.h"
24# include "ws2812.h"
25 23
26void setleds_custom(rgb_led_t *led, uint16_t led_num) { 24void setleds_custom(rgb_led_t *led, uint16_t led_num) {
27 uint16_t length = 0; 25 uint16_t length = 0;
@@ -64,7 +62,6 @@ void setleds_custom(rgb_led_t *led, uint16_t led_num) {
64} 62}
65 63
66const rgblight_driver_t rgblight_driver = { 64const rgblight_driver_t rgblight_driver = {
65 .init = ws2812_init,
67 .setleds = setleds_custom, 66 .setleds = setleds_custom,
68}; 67};
69
70#endif // RGBLIGHT_ENABLE
diff --git a/keyboards/ergodox_ez/shine/rules.mk b/keyboards/ergodox_ez/shine/rules.mk
index b035c36850..4ab494d1aa 100644
--- a/keyboards/ergodox_ez/shine/rules.mk
+++ b/keyboards/ergodox_ez/shine/rules.mk
@@ -1,2 +1,3 @@
1RGBLIGHT_ENABLE = yes 1RGBLIGHT_ENABLE = yes
2WS2812_DRIVER_REQUIRED = yes 2WS2812_DRIVER_REQUIRED = yes
3SRC += rgblight_custom.c
diff --git a/keyboards/handwired/promethium/rgbsps.c b/keyboards/handwired/promethium/rgbsps.c
index 957726e775..7dc26f4a5e 100644
--- a/keyboards/handwired/promethium/rgbsps.c
+++ b/keyboards/handwired/promethium/rgbsps.c
@@ -1,8 +1,15 @@
1#include "keyboard.h"
1#include "ws2812.h" 2#include "ws2812.h"
2#include "rgbsps.h" 3#include "rgbsps.h"
3 4
4rgb_led_t led[RGBSPS_NUM]; 5rgb_led_t led[RGBSPS_NUM];
5 6
7void keyboard_pre_init_kb(void) {
8 ws2812_init();
9
10 keyboard_pre_init_user();
11}
12
6void rgbsps_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b) { 13void rgbsps_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b) {
7 led[index].r = r; 14 led[index].r = r;
8 led[index].g = g; 15 led[index].g = g;
diff --git a/keyboards/ibm/model_m/mschwingen/mschwingen.c b/keyboards/ibm/model_m/mschwingen/mschwingen.c
index 03dfcdc2f2..6a8a0ec8fc 100644
--- a/keyboards/ibm/model_m/mschwingen/mschwingen.c
+++ b/keyboards/ibm/model_m/mschwingen/mschwingen.c
@@ -90,6 +90,7 @@ void sleep_led_enable(void) {
90 90
91void keyboard_pre_init_kb(void) { 91void keyboard_pre_init_kb(void) {
92#ifdef KEYBOARD_ibm_model_m_mschwingen_led_ws2812 92#ifdef KEYBOARD_ibm_model_m_mschwingen_led_ws2812
93 ws2812_init();
93 ws2812_setleds(led, RGBLIGHT_LED_COUNT); 94 ws2812_setleds(led, RGBLIGHT_LED_COUNT);
94#else 95#else
95 /* Set status LEDs pins to output and Low (on) */ 96 /* Set status LEDs pins to output and Low (on) */
diff --git a/keyboards/kprepublic/bm60hsrgb/rev2/rev2.c b/keyboards/kprepublic/bm60hsrgb/rev2/rev2.c
index 3ee74755fa..5bd23a12b8 100644
--- a/keyboards/kprepublic/bm60hsrgb/rev2/rev2.c
+++ b/keyboards/kprepublic/bm60hsrgb/rev2/rev2.c
@@ -154,6 +154,7 @@ rgb_led_t rgb_matrix_ws2812_array[WS2812_LED_TOTAL];
154static void rgb_matrix_driver_init(void) { 154static void rgb_matrix_driver_init(void) {
155 i2c_init(); 155 i2c_init();
156 is31fl3733_init(0); 156 is31fl3733_init(0);
157 ws2812_init();
157 for (uint8_t index = 0; index < IS31FL3733_LED_COUNT; index++) { 158 for (uint8_t index = 0; index < IS31FL3733_LED_COUNT; index++) {
158 bool enabled = true; 159 bool enabled = true;
159 is31fl3733_set_led_control_register(index, enabled, enabled, enabled); 160 is31fl3733_set_led_control_register(index, enabled, enabled, enabled);
diff --git a/keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c b/keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c
index e7641bf4e5..794dea5176 100644
--- a/keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c
+++ b/keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c
@@ -154,6 +154,7 @@ rgb_led_t rgb_matrix_ws2812_array[WS2812_LED_TOTAL];
154static void rgb_matrix_driver_init(void) { 154static void rgb_matrix_driver_init(void) {
155 i2c_init(); 155 i2c_init();
156 is31fl3733_init(0); 156 is31fl3733_init(0);
157 ws2812_init();
157 for (uint8_t index = 0; index < IS31FL3733_LED_COUNT; index++) { 158 for (uint8_t index = 0; index < IS31FL3733_LED_COUNT; index++) {
158 bool enabled = true; 159 bool enabled = true;
159 is31fl3733_set_led_control_register(index, enabled, enabled, enabled); 160 is31fl3733_set_led_control_register(index, enabled, enabled, enabled);
diff --git a/keyboards/kprepublic/bm60hsrgb_poker/rev2/rev2.c b/keyboards/kprepublic/bm60hsrgb_poker/rev2/rev2.c
index 5cb6d850c9..3586dc8e80 100644
--- a/keyboards/kprepublic/bm60hsrgb_poker/rev2/rev2.c
+++ b/keyboards/kprepublic/bm60hsrgb_poker/rev2/rev2.c
@@ -150,6 +150,7 @@ rgb_led_t rgb_matrix_ws2812_array[WS2812_LED_TOTAL];
150static void rgb_matrix_driver_init(void) { 150static void rgb_matrix_driver_init(void) {
151 i2c_init(); 151 i2c_init();
152 is31fl3733_init(0); 152 is31fl3733_init(0);
153 ws2812_init();
153 for (uint8_t index = 0; index < IS31FL3733_LED_COUNT; index++) { 154 for (uint8_t index = 0; index < IS31FL3733_LED_COUNT; index++) {
154 bool enabled = true; 155 bool enabled = true;
155 is31fl3733_set_led_control_register(index, enabled, enabled, enabled); 156 is31fl3733_set_led_control_register(index, enabled, enabled, enabled);
diff --git a/keyboards/matrix/abelx/abelx.c b/keyboards/matrix/abelx/abelx.c
index 0a3071a402..ee7ffde134 100644
--- a/keyboards/matrix/abelx/abelx.c
+++ b/keyboards/matrix/abelx/abelx.c
@@ -79,6 +79,7 @@ void setleds_custom(rgb_led_t *start_led, uint16_t num_leds)
79} 79}
80 80
81const rgblight_driver_t rgblight_driver = { 81const rgblight_driver_t rgblight_driver = {
82 .init = ws2812_init,
82 .setleds = setleds_custom, 83 .setleds = setleds_custom,
83}; 84};
84 85
diff --git a/keyboards/matrix/noah/noah.c b/keyboards/matrix/noah/noah.c
index b5c52f9952..a01d1b11bc 100644
--- a/keyboards/matrix/noah/noah.c
+++ b/keyboards/matrix/noah/noah.c
@@ -55,6 +55,7 @@ void setleds_custom(rgb_led_t *ledarray, uint16_t num_leds) {
55} 55}
56 56
57const rgblight_driver_t rgblight_driver = { 57const rgblight_driver_t rgblight_driver = {
58 .init = ws2812_init,
58 .setleds = setleds_custom, 59 .setleds = setleds_custom,
59}; 60};
60#endif 61#endif
diff --git a/keyboards/neson_design/700e/700e.c b/keyboards/neson_design/700e/700e.c
index 31f88a71f9..a9bcbee288 100644
--- a/keyboards/neson_design/700e/700e.c
+++ b/keyboards/neson_design/700e/700e.c
@@ -355,6 +355,7 @@ void setleds_custom(rgb_led_t *start_led, uint16_t num_leds)
355} 355}
356 356
357const rgblight_driver_t rgblight_driver = { 357const rgblight_driver_t rgblight_driver = {
358 .init = ws2812_init,
358 .setleds = setleds_custom, 359 .setleds = setleds_custom,
359}; 360};
360 361
diff --git a/keyboards/neson_design/n6/n6.c b/keyboards/neson_design/n6/n6.c
index b878b9368d..f257735acc 100644
--- a/keyboards/neson_design/n6/n6.c
+++ b/keyboards/neson_design/n6/n6.c
@@ -350,6 +350,7 @@ void setleds_custom(rgb_led_t *start_led, uint16_t num_leds)
350} 350}
351 351
352const rgblight_driver_t rgblight_driver = { 352const rgblight_driver_t rgblight_driver = {
353 .init = ws2812_init,
353 .setleds = setleds_custom, 354 .setleds = setleds_custom,
354}; 355};
355 356
diff --git a/keyboards/neson_design/nico/nico.c b/keyboards/neson_design/nico/nico.c
index bf8eeb87dd..0738a3ee98 100644
--- a/keyboards/neson_design/nico/nico.c
+++ b/keyboards/neson_design/nico/nico.c
@@ -84,6 +84,7 @@ void setleds_custom(rgb_led_t *start_led, uint16_t num_leds)
84} 84}
85 85
86const rgblight_driver_t rgblight_driver = { 86const rgblight_driver_t rgblight_driver = {
87 .init = ws2812_init,
87 .setleds = setleds_custom, 88 .setleds = setleds_custom,
88}; 89};
89#endif \ No newline at end of file 90#endif \ No newline at end of file
diff --git a/keyboards/oddforge/vea/ws2812_custom.c b/keyboards/oddforge/vea/ws2812_custom.c
index f52c8d06a8..a037b88b3e 100644
--- a/keyboards/oddforge/vea/ws2812_custom.c
+++ b/keyboards/oddforge/vea/ws2812_custom.c
@@ -23,12 +23,6 @@ void ws2812_init(void) {
23 23
24// Setleds for standard RGB 24// Setleds for standard RGB
25void ws2812_setleds(rgb_led_t *ledarray, uint16_t leds) { 25void ws2812_setleds(rgb_led_t *ledarray, uint16_t leds) {
26 static bool s_init = false;
27 if (!s_init) {
28 ws2812_init();
29 s_init = true;
30 }
31
32 i2c_transmit(WS2812_I2C_ADDRESS, (uint8_t *)ledarray, sizeof(rgb_led_t) * (leds >> 1), WS2812_I2C_TIMEOUT); 26 i2c_transmit(WS2812_I2C_ADDRESS, (uint8_t *)ledarray, sizeof(rgb_led_t) * (leds >> 1), WS2812_I2C_TIMEOUT);
33 i2c_transmit(WS2812_I2C_ADDRESS_RIGHT, (uint8_t *)ledarray+(sizeof(rgb_led_t) * (leds >> 1)), sizeof(rgb_led_t) * (leds - (leds >> 1)), WS2812_I2C_TIMEOUT); 27 i2c_transmit(WS2812_I2C_ADDRESS_RIGHT, (uint8_t *)ledarray+(sizeof(rgb_led_t) * (leds >> 1)), sizeof(rgb_led_t) * (leds - (leds >> 1)), WS2812_I2C_TIMEOUT);
34} 28}
diff --git a/keyboards/rgbkb/pan/pan.c b/keyboards/rgbkb/pan/pan.c
index d175be3641..191ff1ac1f 100644
--- a/keyboards/rgbkb/pan/pan.c
+++ b/keyboards/rgbkb/pan/pan.c
@@ -24,8 +24,6 @@
24// LED color buffer 24// LED color buffer
25rgb_led_t rgb_matrix_ws2812_array[RGB_MATRIX_LED_COUNT]; 25rgb_led_t rgb_matrix_ws2812_array[RGB_MATRIX_LED_COUNT];
26 26
27static void init(void) {}
28
29static void flush(void) { 27static void flush(void) {
30 ws2812_setleds(rgb_matrix_ws2812_array, RGB_MATRIX_LED_COUNT); 28 ws2812_setleds(rgb_matrix_ws2812_array, RGB_MATRIX_LED_COUNT);
31} 29}
@@ -56,7 +54,7 @@ static void setled_all(uint8_t r, uint8_t g, uint8_t b) {
56} 54}
57 55
58const rgb_matrix_driver_t rgb_matrix_driver = { 56const rgb_matrix_driver_t rgb_matrix_driver = {
59 .init = init, 57 .init = ws2812_init,
60 .flush = flush, 58 .flush = flush,
61 .set_color = setled, 59 .set_color = setled,
62 .set_color_all = setled_all, 60 .set_color_all = setled_all,
diff --git a/keyboards/wilba_tech/wt_rgb_backlight.c b/keyboards/wilba_tech/wt_rgb_backlight.c
index cf36288705..d03d189b29 100644
--- a/keyboards/wilba_tech/wt_rgb_backlight.c
+++ b/keyboards/wilba_tech/wt_rgb_backlight.c
@@ -2237,6 +2237,9 @@ void backlight_init_drivers(void)
2237 is31fl3733_update_led_control_registers( 0 ); 2237 is31fl3733_update_led_control_registers( 0 );
2238 is31fl3733_update_led_control_registers( 1 ); 2238 is31fl3733_update_led_control_registers( 1 );
2239#else 2239#else
2240#if defined(RGB_BACKLIGHT_DAWN60)
2241 ws2812_init();
2242#endif
2240 // Init the #1 driver 2243 // Init the #1 driver
2241 is31fl3731_init( 0 ); 2244 is31fl3731_init( 0 );
2242 // Init the #2 driver (if used) 2245 // Init the #2 driver (if used)
diff --git a/keyboards/work_louder/rgb_functions.c b/keyboards/work_louder/rgb_functions.c
index 9b39555971..36f9da013e 100644
--- a/keyboards/work_louder/rgb_functions.c
+++ b/keyboards/work_louder/rgb_functions.c
@@ -20,11 +20,13 @@
20#undef WS2812_DI_PIN 20#undef WS2812_DI_PIN
21#define WS2812_DI_PIN RGBLIGHT_DI_PIN 21#define WS2812_DI_PIN RGBLIGHT_DI_PIN
22 22
23#define ws2812_init ws2812_rgb_init
23#define ws2812_setleds ws2812_rgb_setleds 24#define ws2812_setleds ws2812_rgb_setleds
24 25
25#include "ws2812_bitbang.c" 26#include "ws2812_bitbang.c"
26 27
27const rgblight_driver_t rgblight_driver = { 28const rgblight_driver_t rgblight_driver = {
29 .init = ws2812_init,
28 .setleds = ws2812_setleds, 30 .setleds = ws2812_setleds,
29}; 31};
30#endif 32#endif
diff --git a/keyboards/xelus/dawn60/rev1_qmk/rev1_qmk.c b/keyboards/xelus/dawn60/rev1_qmk/rev1_qmk.c
index 6b8f91bc2f..a153a7cf83 100644
--- a/keyboards/xelus/dawn60/rev1_qmk/rev1_qmk.c
+++ b/keyboards/xelus/dawn60/rev1_qmk/rev1_qmk.c
@@ -155,7 +155,7 @@ static void init(void) {
155 is31fl3731_update_led_control_registers(1); 155 is31fl3731_update_led_control_registers(1);
156 156
157 //RGB Underglow ws2812 157 //RGB Underglow ws2812
158 158 ws2812_init();
159} 159}
160 160
161static void flush(void) { 161static void flush(void) {
diff --git a/keyboards/xiudi/xd002/keymaps/multilayer_rgb/keymap.c b/keyboards/xiudi/xd002/keymaps/multilayer_rgb/keymap.c
index 4ae28fd91b..d74678d76a 100644
--- a/keyboards/xiudi/xd002/keymaps/multilayer_rgb/keymap.c
+++ b/keyboards/xiudi/xd002/keymaps/multilayer_rgb/keymap.c
@@ -169,5 +169,6 @@ layer_state_t layer_state_set_user(layer_state_t state) {
169 169
170// default color 170// default color
171void keyboard_post_init_user(void) { 171void keyboard_post_init_user(void) {
172 rgblite_init();
172 rgblite_setrgb(RGB_GREEN); 173 rgblite_setrgb(RGB_GREEN);
173} 174}
diff --git a/keyboards/xiudi/xd002/keymaps/multilayer_rgb/rgblite.h b/keyboards/xiudi/xd002/keymaps/multilayer_rgb/rgblite.h
index 1fa6f899b9..103b228d33 100644
--- a/keyboards/xiudi/xd002/keymaps/multilayer_rgb/rgblite.h
+++ b/keyboards/xiudi/xd002/keymaps/multilayer_rgb/rgblite.h
@@ -3,7 +3,11 @@
3#include "ws2812.h" 3#include "ws2812.h"
4#include "color.h" 4#include "color.h"
5 5
6static inline void rgblite_init(void) {
7 ws2812_init();
8}
9
6static inline void rgblite_setrgb(uint8_t _r, uint8_t _g, uint8_t _b) { 10static inline void rgblite_setrgb(uint8_t _r, uint8_t _g, uint8_t _b) {
7 rgb_led_t leds[RGBLED_NUM] = {{.r = _r, .g = _g, .b = _b}, {.r = _r, .g = _g, .b = _b}}; 11 rgb_led_t leds[RGBLIGHT_LED_COUNT] = {{.r = _r, .g = _g, .b = _b}, {.r = _r, .g = _g, .b = _b}};
8 ws2812_setleds(leds, RGBLED_NUM); 12 ws2812_setleds(leds, RGBLIGHT_LED_COUNT);
9} 13}
diff --git a/keyboards/xiudi/xd002/keymaps/rgb_lite/keymap.c b/keyboards/xiudi/xd002/keymaps/rgb_lite/keymap.c
index a795ca8a6d..aac4dc6fde 100644
--- a/keyboards/xiudi/xd002/keymaps/rgb_lite/keymap.c
+++ b/keyboards/xiudi/xd002/keymaps/rgb_lite/keymap.c
@@ -27,5 +27,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
27} 27}
28 28
29void keyboard_post_init_user(void) { 29void keyboard_post_init_user(void) {
30 rgblite_init();
30 rgblite_increase_hue(); 31 rgblite_increase_hue();
31} 32}
diff --git a/keyboards/xiudi/xd002/keymaps/rgb_lite/rgblite.h b/keyboards/xiudi/xd002/keymaps/rgb_lite/rgblite.h
index 15ee0c0f6b..0bb0582415 100644
--- a/keyboards/xiudi/xd002/keymaps/rgb_lite/rgblite.h
+++ b/keyboards/xiudi/xd002/keymaps/rgb_lite/rgblite.h
@@ -3,9 +3,13 @@
3#include "ws2812.h" 3#include "ws2812.h"
4#include "color.h" 4#include "color.h"
5 5
6static inline void rgblite_init(void) {
7 ws2812_init();
8}
9
6static inline void rgblite_setrgb(uint8_t _r, uint8_t _g, uint8_t _b) { 10static inline void rgblite_setrgb(uint8_t _r, uint8_t _g, uint8_t _b) {
7 rgb_led_t leds[RGBLED_NUM] = {{.r = _r, .g = _g, .b = _b}, {.r = _r, .g = _g, .b = _b}}; 11 rgb_led_t leds[RGBLIGHT_LED_COUNT] = {{.r = _r, .g = _g, .b = _b}, {.r = _r, .g = _g, .b = _b}};
8 ws2812_setleds(leds, RGBLED_NUM); 12 ws2812_setleds(leds, RGBLIGHT_LED_COUNT);
9} 13}
10 14
11static void rgblite_increase_hue(void) { 15static void rgblite_increase_hue(void) {
diff --git a/platforms/avr/drivers/ws2812_bitbang.c b/platforms/avr/drivers/ws2812_bitbang.c
index 116053591f..be127e501c 100644
--- a/platforms/avr/drivers/ws2812_bitbang.c
+++ b/platforms/avr/drivers/ws2812_bitbang.c
@@ -37,9 +37,11 @@
37 37
38static inline void ws2812_sendarray_mask(uint8_t *data, uint16_t datlen, uint8_t masklo, uint8_t maskhi); 38static inline void ws2812_sendarray_mask(uint8_t *data, uint16_t datlen, uint8_t masklo, uint8_t maskhi);
39 39
40void ws2812_setleds(rgb_led_t *ledarray, uint16_t number_of_leds) { 40void ws2812_init(void) {
41 DDRx_ADDRESS(WS2812_DI_PIN) |= pinmask(WS2812_DI_PIN); 41 DDRx_ADDRESS(WS2812_DI_PIN) |= pinmask(WS2812_DI_PIN);
42}
42 43
44void ws2812_setleds(rgb_led_t *ledarray, uint16_t number_of_leds) {
43 uint8_t masklo = ~(pinmask(WS2812_DI_PIN)) & PORTx_ADDRESS(WS2812_DI_PIN); 45 uint8_t masklo = ~(pinmask(WS2812_DI_PIN)) & PORTx_ADDRESS(WS2812_DI_PIN);
44 uint8_t maskhi = pinmask(WS2812_DI_PIN) | PORTx_ADDRESS(WS2812_DI_PIN); 46 uint8_t maskhi = pinmask(WS2812_DI_PIN) | PORTx_ADDRESS(WS2812_DI_PIN);
45 47
diff --git a/platforms/avr/drivers/ws2812_i2c.c b/platforms/avr/drivers/ws2812_i2c.c
index f52a037b8e..60b466c32a 100644
--- a/platforms/avr/drivers/ws2812_i2c.c
+++ b/platforms/avr/drivers/ws2812_i2c.c
@@ -19,11 +19,5 @@ void ws2812_init(void) {
19 19
20// Setleds for standard RGB 20// Setleds for standard RGB
21void ws2812_setleds(rgb_led_t *ledarray, uint16_t leds) { 21void ws2812_setleds(rgb_led_t *ledarray, uint16_t leds) {
22 static bool s_init = false;
23 if (!s_init) {
24 ws2812_init();
25 s_init = true;
26 }
27
28 i2c_transmit(WS2812_I2C_ADDRESS, (uint8_t *)ledarray, sizeof(rgb_led_t) * leds, WS2812_I2C_TIMEOUT); 22 i2c_transmit(WS2812_I2C_ADDRESS, (uint8_t *)ledarray, sizeof(rgb_led_t) * leds, WS2812_I2C_TIMEOUT);
29} 23}
diff --git a/platforms/chibios/drivers/vendor/RP/RP2040/ws2812_vendor.c b/platforms/chibios/drivers/vendor/RP/RP2040/ws2812_vendor.c
index 799d96b3c6..95a827e4b8 100644
--- a/platforms/chibios/drivers/vendor/RP/RP2040/ws2812_vendor.c
+++ b/platforms/chibios/drivers/vendor/RP/RP2040/ws2812_vendor.c
@@ -177,7 +177,7 @@ static void ws2812_dma_callback(void* p, uint32_t ct) {
177 osalSysUnlockFromISR(); 177 osalSysUnlockFromISR();
178} 178}
179 179
180bool ws2812_init(void) { 180void ws2812_init(void) {
181 uint pio_idx = pio_get_index(pio); 181 uint pio_idx = pio_get_index(pio);
182 /* Get PIOx peripheral out of reset state. */ 182 /* Get PIOx peripheral out of reset state. */
183 hal_lld_peripheral_unreset(pio_idx == 0 ? RESETS_ALLREG_PIO0 : RESETS_ALLREG_PIO1); 183 hal_lld_peripheral_unreset(pio_idx == 0 ? RESETS_ALLREG_PIO0 : RESETS_ALLREG_PIO1);
@@ -196,7 +196,7 @@ bool ws2812_init(void) {
196 STATE_MACHINE = pio_claim_unused_sm(pio, true); 196 STATE_MACHINE = pio_claim_unused_sm(pio, true);
197 if (STATE_MACHINE < 0) { 197 if (STATE_MACHINE < 0) {
198 dprintln("ERROR: Failed to acquire state machine for WS2812 output!"); 198 dprintln("ERROR: Failed to acquire state machine for WS2812 output!");
199 return false; 199 return;
200 } 200 }
201 201
202 uint offset = pio_add_program(pio, &ws2812_program); 202 uint offset = pio_add_program(pio, &ws2812_program);
@@ -246,8 +246,6 @@ bool ws2812_init(void) {
246 DMA_CTRL_TRIG_TREQ_SEL(pio == pio0 ? STATE_MACHINE : STATE_MACHINE + 8) | 246 DMA_CTRL_TRIG_TREQ_SEL(pio == pio0 ? STATE_MACHINE : STATE_MACHINE + 8) |
247 DMA_CTRL_TRIG_PRIORITY(RP_DMA_PRIORITY_WS2812); 247 DMA_CTRL_TRIG_PRIORITY(RP_DMA_PRIORITY_WS2812);
248 // clang-format on 248 // clang-format on
249
250 return true;
251} 249}
252 250
253static inline void sync_ws2812_transfer(void) { 251static inline void sync_ws2812_transfer(void) {
@@ -269,11 +267,6 @@ static inline void sync_ws2812_transfer(void) {
269} 267}
270 268
271void ws2812_setleds(rgb_led_t* ledarray, uint16_t leds) { 269void ws2812_setleds(rgb_led_t* ledarray, uint16_t leds) {
272 static bool is_initialized = false;
273 if (unlikely(!is_initialized)) {
274 is_initialized = ws2812_init();
275 }
276
277 sync_ws2812_transfer(); 270 sync_ws2812_transfer();
278 271
279 for (int i = 0; i < leds; i++) { 272 for (int i = 0; i < leds; i++) {
diff --git a/platforms/chibios/drivers/ws2812_bitbang.c b/platforms/chibios/drivers/ws2812_bitbang.c
index 1ed87c4381..9ed6bacd5a 100644
--- a/platforms/chibios/drivers/ws2812_bitbang.c
+++ b/platforms/chibios/drivers/ws2812_bitbang.c
@@ -82,12 +82,6 @@ void ws2812_init(void) {
82 82
83// Setleds for standard RGB 83// Setleds for standard RGB
84void ws2812_setleds(rgb_led_t *ledarray, uint16_t leds) { 84void ws2812_setleds(rgb_led_t *ledarray, uint16_t leds) {
85 static bool s_init = false;
86 if (!s_init) {
87 ws2812_init();
88 s_init = true;
89 }
90
91 // this code is very time dependent, so we need to disable interrupts 85 // this code is very time dependent, so we need to disable interrupts
92 chSysLock(); 86 chSysLock();
93 87
diff --git a/platforms/chibios/drivers/ws2812_pwm.c b/platforms/chibios/drivers/ws2812_pwm.c
index e0b3bfd5b5..7dc3414ead 100644
--- a/platforms/chibios/drivers/ws2812_pwm.c
+++ b/platforms/chibios/drivers/ws2812_pwm.c
@@ -389,12 +389,6 @@ void ws2812_write_led_rgbw(uint16_t led_number, uint8_t r, uint8_t g, uint8_t b,
389 389
390// Setleds for standard RGB 390// Setleds for standard RGB
391void ws2812_setleds(rgb_led_t* ledarray, uint16_t leds) { 391void ws2812_setleds(rgb_led_t* ledarray, uint16_t leds) {
392 static bool s_init = false;
393 if (!s_init) {
394 ws2812_init();
395 s_init = true;
396 }
397
398 for (uint16_t i = 0; i < leds; i++) { 392 for (uint16_t i = 0; i < leds; i++) {
399#ifdef RGBW 393#ifdef RGBW
400 ws2812_write_led_rgbw(i, ledarray[i].r, ledarray[i].g, ledarray[i].b, ledarray[i].w); 394 ws2812_write_led_rgbw(i, ledarray[i].r, ledarray[i].g, ledarray[i].b, ledarray[i].w);
diff --git a/platforms/chibios/drivers/ws2812_spi.c b/platforms/chibios/drivers/ws2812_spi.c
index 01162f07f4..5b990ccaa0 100644
--- a/platforms/chibios/drivers/ws2812_spi.c
+++ b/platforms/chibios/drivers/ws2812_spi.c
@@ -188,12 +188,6 @@ void ws2812_init(void) {
188} 188}
189 189
190void ws2812_setleds(rgb_led_t* ledarray, uint16_t leds) { 190void ws2812_setleds(rgb_led_t* ledarray, uint16_t leds) {
191 static bool s_init = false;
192 if (!s_init) {
193 ws2812_init();
194 s_init = true;
195 }
196
197 for (uint8_t i = 0; i < leds; i++) { 191 for (uint8_t i = 0; i < leds; i++) {
198 set_led_color_rgb(ledarray[i], i); 192 set_led_color_rgb(ledarray[i], i);
199 } 193 }
diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c
index 729dcdb439..4370996d0e 100644
--- a/quantum/rgb_matrix/rgb_matrix_drivers.c
+++ b/quantum/rgb_matrix/rgb_matrix_drivers.c
@@ -151,6 +151,7 @@ rgb_led_t rgb_matrix_ws2812_array[WS2812_LED_COUNT];
151bool ws2812_dirty = false; 151bool ws2812_dirty = false;
152 152
153static void init(void) { 153static void init(void) {
154 ws2812_init();
154 ws2812_dirty = false; 155 ws2812_dirty = false;
155} 156}
156 157
diff --git a/quantum/rgblight/rgblight.c b/quantum/rgblight/rgblight.c
index 530cb04688..28b58feea6 100644
--- a/quantum/rgblight/rgblight.c
+++ b/quantum/rgblight/rgblight.c
@@ -247,6 +247,8 @@ void rgblight_init(void) {
247 rgblight_mode_noeeprom(rgblight_config.mode); 247 rgblight_mode_noeeprom(rgblight_config.mode);
248 } 248 }
249 249
250 rgblight_driver.init();
251
250 is_rgblight_initialized = true; 252 is_rgblight_initialized = true;
251} 253}
252 254
diff --git a/quantum/rgblight/rgblight_drivers.c b/quantum/rgblight/rgblight_drivers.c
index 45b60e1a5f..8902b8f842 100644
--- a/quantum/rgblight/rgblight_drivers.c
+++ b/quantum/rgblight/rgblight_drivers.c
@@ -7,6 +7,7 @@
7# include "ws2812.h" 7# include "ws2812.h"
8 8
9const rgblight_driver_t rgblight_driver = { 9const rgblight_driver_t rgblight_driver = {
10 .init = ws2812_init,
10 .setleds = ws2812_setleds, 11 .setleds = ws2812_setleds,
11}; 12};
12 13
@@ -14,6 +15,7 @@ const rgblight_driver_t rgblight_driver = {
14# include "apa102.h" 15# include "apa102.h"
15 16
16const rgblight_driver_t rgblight_driver = { 17const rgblight_driver_t rgblight_driver = {
18 .init = apa102_init,
17 .setleds = apa102_setleds, 19 .setleds = apa102_setleds,
18}; 20};
19 21
diff --git a/quantum/rgblight/rgblight_drivers.h b/quantum/rgblight/rgblight_drivers.h
index f7125a6f3d..af28b918e1 100644
--- a/quantum/rgblight/rgblight_drivers.h
+++ b/quantum/rgblight/rgblight_drivers.h
@@ -7,6 +7,7 @@
7#include "color.h" 7#include "color.h"
8 8
9typedef struct { 9typedef struct {
10 void (*init)(void);
10 void (*setleds)(rgb_led_t *ledarray, uint16_t number_of_leds); 11 void (*setleds)(rgb_led_t *ledarray, uint16_t number_of_leds);
11} rgblight_driver_t; 12} rgblight_driver_t;
12 13