aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2021-11-24 07:38:49 +0000
committerGitHub <noreply@github.com>2021-11-24 18:38:49 +1100
commit282e916d86a5d353b7cbdfef3afad3c7b011eb14 (patch)
treed711831ca1accadede43c38bc1bcd91d73ad3dc9 /drivers
parent80f91f7b9aa8987d4594a466d2348830b1c32dc2 (diff)
downloadqmk_firmware-282e916d86a5d353b7cbdfef3afad3c7b011eb14.tar.gz
qmk_firmware-282e916d86a5d353b7cbdfef3afad3c7b011eb14.zip
Remove use of __flash due to LTO issues (#15268)
Diffstat (limited to 'drivers')
-rw-r--r--drivers/led/aw20216.c3
-rw-r--r--drivers/led/aw20216.h2
-rw-r--r--drivers/led/ckled2001.c6
-rw-r--r--drivers/led/ckled2001.h2
-rw-r--r--drivers/led/issi/is31fl3731-simple.c6
-rw-r--r--drivers/led/issi/is31fl3731-simple.h2
-rw-r--r--drivers/led/issi/is31fl3731.c6
-rw-r--r--drivers/led/issi/is31fl3731.h2
-rw-r--r--drivers/led/issi/is31fl3733.c6
-rw-r--r--drivers/led/issi/is31fl3733.h2
-rw-r--r--drivers/led/issi/is31fl3736.c6
-rw-r--r--drivers/led/issi/is31fl3736.h2
-rw-r--r--drivers/led/issi/is31fl3737.c6
-rw-r--r--drivers/led/issi/is31fl3737.h2
-rw-r--r--drivers/led/issi/is31fl3741.c6
-rw-r--r--drivers/led/issi/is31fl3741.h2
16 files changed, 38 insertions, 23 deletions
diff --git a/drivers/led/aw20216.c b/drivers/led/aw20216.c
index c608c0ab4..2c7ff8f08 100644
--- a/drivers/led/aw20216.c
+++ b/drivers/led/aw20216.c
@@ -119,7 +119,8 @@ void AW20216_init(pin_t cs_pin, pin_t en_pin) {
119} 119}
120 120
121void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { 121void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
122 aw_led led = g_aw_leds[index]; 122 aw_led led;
123 memcpy_P(&led, (&g_aw_leds[index]), sizeof(led));
123 124
124 g_pwm_buffer[led.driver][led.r] = red; 125 g_pwm_buffer[led.driver][led.r] = red;
125 g_pwm_buffer[led.driver][led.g] = green; 126 g_pwm_buffer[led.driver][led.g] = green;
diff --git a/drivers/led/aw20216.h b/drivers/led/aw20216.h
index 97ac6dc5b..0a17050fe 100644
--- a/drivers/led/aw20216.h
+++ b/drivers/led/aw20216.h
@@ -28,7 +28,7 @@ typedef struct aw_led {
28 uint8_t b; 28 uint8_t b;
29} aw_led; 29} aw_led;
30 30
31extern const aw_led __flash g_aw_leds[DRIVER_LED_TOTAL]; 31extern const aw_led PROGMEM g_aw_leds[DRIVER_LED_TOTAL];
32 32
33void AW20216_init(pin_t cs_pin, pin_t en_pin); 33void AW20216_init(pin_t cs_pin, pin_t en_pin);
34void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue); 34void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
diff --git a/drivers/led/ckled2001.c b/drivers/led/ckled2001.c
index 630730343..990e50cb6 100644
--- a/drivers/led/ckled2001.c
+++ b/drivers/led/ckled2001.c
@@ -141,8 +141,9 @@ void CKLED2001_init(uint8_t addr) {
141} 141}
142 142
143void CKLED2001_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { 143void CKLED2001_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
144 ckled2001_led led;
144 if (index >= 0 && index < DRIVER_LED_TOTAL) { 145 if (index >= 0 && index < DRIVER_LED_TOTAL) {
145 ckled2001_led led = g_ckled2001_leds[index]; 146 memcpy_P(&led, (&g_ckled2001_leds[index]), sizeof(led));
146 147
147 g_pwm_buffer[led.driver][led.r] = red; 148 g_pwm_buffer[led.driver][led.r] = red;
148 g_pwm_buffer[led.driver][led.g] = green; 149 g_pwm_buffer[led.driver][led.g] = green;
@@ -158,7 +159,8 @@ void CKLED2001_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
158} 159}
159 160
160void CKLED2001_set_led_control_register(uint8_t index, bool red, bool green, bool blue) { 161void CKLED2001_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
161 ckled2001_led led = g_ckled2001_leds[index]; 162 ckled2001_led led;
163 memcpy_P(&led, (&g_ckled2001_leds[index]), sizeof(led));
162 164
163 uint8_t control_register_r = led.r / 8; 165 uint8_t control_register_r = led.r / 8;
164 uint8_t control_register_g = led.g / 8; 166 uint8_t control_register_g = led.g / 8;
diff --git a/drivers/led/ckled2001.h b/drivers/led/ckled2001.h
index efe399690..1967961d2 100644
--- a/drivers/led/ckled2001.h
+++ b/drivers/led/ckled2001.h
@@ -27,7 +27,7 @@ typedef struct ckled2001_led {
27 uint8_t b; 27 uint8_t b;
28} __attribute__((packed)) ckled2001_led; 28} __attribute__((packed)) ckled2001_led;
29 29
30extern const ckled2001_led __flash g_ckled2001_leds[DRIVER_LED_TOTAL]; 30extern const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL];
31 31
32void CKLED2001_init(uint8_t addr); 32void CKLED2001_init(uint8_t addr);
33bool CKLED2001_write_register(uint8_t addr, uint8_t reg, uint8_t data); 33bool CKLED2001_write_register(uint8_t addr, uint8_t reg, uint8_t data);
diff --git a/drivers/led/issi/is31fl3731-simple.c b/drivers/led/issi/is31fl3731-simple.c
index 9d28ea91d..f51e2e38a 100644
--- a/drivers/led/issi/is31fl3731-simple.c
+++ b/drivers/led/issi/is31fl3731-simple.c
@@ -193,8 +193,9 @@ void IS31FL3731_init(uint8_t addr) {
193} 193}
194 194
195void IS31FL3731_set_value(int index, uint8_t value) { 195void IS31FL3731_set_value(int index, uint8_t value) {
196 is31_led led;
196 if (index >= 0 && index < DRIVER_LED_TOTAL) { 197 if (index >= 0 && index < DRIVER_LED_TOTAL) {
197 is31_led led = g_is31_leds[index]; 198 memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
198 199
199 // Subtract 0x24 to get the second index of g_pwm_buffer 200 // Subtract 0x24 to get the second index of g_pwm_buffer
200 g_pwm_buffer[led.driver][led.v - 0x24] = value; 201 g_pwm_buffer[led.driver][led.v - 0x24] = value;
@@ -209,7 +210,8 @@ void IS31FL3731_set_value_all(uint8_t value) {
209} 210}
210 211
211void IS31FL3731_set_led_control_register(uint8_t index, bool value) { 212void IS31FL3731_set_led_control_register(uint8_t index, bool value) {
212 is31_led led = g_is31_leds[index]; 213 is31_led led;
214 memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
213 215
214 uint8_t control_register = (led.v - 0x24) / 8; 216 uint8_t control_register = (led.v - 0x24) / 8;
215 uint8_t bit_value = (led.v - 0x24) % 8; 217 uint8_t bit_value = (led.v - 0x24) % 8;
diff --git a/drivers/led/issi/is31fl3731-simple.h b/drivers/led/issi/is31fl3731-simple.h
index ecde31eed..ded94b047 100644
--- a/drivers/led/issi/is31fl3731-simple.h
+++ b/drivers/led/issi/is31fl3731-simple.h
@@ -27,7 +27,7 @@ typedef struct is31_led {
27 uint8_t v; 27 uint8_t v;
28} __attribute__((packed)) is31_led; 28} __attribute__((packed)) is31_led;
29 29
30extern const is31_led __flash g_is31_leds[DRIVER_LED_TOTAL]; 30extern const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL];
31 31
32void IS31FL3731_init(uint8_t addr); 32void IS31FL3731_init(uint8_t addr);
33void IS31FL3731_write_register(uint8_t addr, uint8_t reg, uint8_t data); 33void IS31FL3731_write_register(uint8_t addr, uint8_t reg, uint8_t data);
diff --git a/drivers/led/issi/is31fl3731.c b/drivers/led/issi/is31fl3731.c
index fbf24c30f..e6190a6b9 100644
--- a/drivers/led/issi/is31fl3731.c
+++ b/drivers/led/issi/is31fl3731.c
@@ -181,8 +181,9 @@ void IS31FL3731_init(uint8_t addr) {
181} 181}
182 182
183void IS31FL3731_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { 183void IS31FL3731_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
184 is31_led led;
184 if (index >= 0 && index < DRIVER_LED_TOTAL) { 185 if (index >= 0 && index < DRIVER_LED_TOTAL) {
185 is31_led led = g_is31_leds[index]; 186 memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
186 187
187 // Subtract 0x24 to get the second index of g_pwm_buffer 188 // Subtract 0x24 to get the second index of g_pwm_buffer
188 g_pwm_buffer[led.driver][led.r - 0x24] = red; 189 g_pwm_buffer[led.driver][led.r - 0x24] = red;
@@ -199,7 +200,8 @@ void IS31FL3731_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
199} 200}
200 201
201void IS31FL3731_set_led_control_register(uint8_t index, bool red, bool green, bool blue) { 202void IS31FL3731_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
202 is31_led led = g_is31_leds[index]; 203 is31_led led;
204 memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
203 205
204 uint8_t control_register_r = (led.r - 0x24) / 8; 206 uint8_t control_register_r = (led.r - 0x24) / 8;
205 uint8_t control_register_g = (led.g - 0x24) / 8; 207 uint8_t control_register_g = (led.g - 0x24) / 8;
diff --git a/drivers/led/issi/is31fl3731.h b/drivers/led/issi/is31fl3731.h
index 803ea3ea1..6647119eb 100644
--- a/drivers/led/issi/is31fl3731.h
+++ b/drivers/led/issi/is31fl3731.h
@@ -28,7 +28,7 @@ typedef struct is31_led {
28 uint8_t b; 28 uint8_t b;
29} __attribute__((packed)) is31_led; 29} __attribute__((packed)) is31_led;
30 30
31extern const is31_led __flash g_is31_leds[DRIVER_LED_TOTAL]; 31extern const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL];
32 32
33void IS31FL3731_init(uint8_t addr); 33void IS31FL3731_init(uint8_t addr);
34void IS31FL3731_write_register(uint8_t addr, uint8_t reg, uint8_t data); 34void IS31FL3731_write_register(uint8_t addr, uint8_t reg, uint8_t data);
diff --git a/drivers/led/issi/is31fl3733.c b/drivers/led/issi/is31fl3733.c
index 371010fd8..696491d07 100644
--- a/drivers/led/issi/is31fl3733.c
+++ b/drivers/led/issi/is31fl3733.c
@@ -181,8 +181,9 @@ void IS31FL3733_init(uint8_t addr, uint8_t sync) {
181} 181}
182 182
183void IS31FL3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { 183void IS31FL3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
184 is31_led led;
184 if (index >= 0 && index < DRIVER_LED_TOTAL) { 185 if (index >= 0 && index < DRIVER_LED_TOTAL) {
185 is31_led led = g_is31_leds[index]; 186 memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
186 187
187 g_pwm_buffer[led.driver][led.r] = red; 188 g_pwm_buffer[led.driver][led.r] = red;
188 g_pwm_buffer[led.driver][led.g] = green; 189 g_pwm_buffer[led.driver][led.g] = green;
@@ -198,7 +199,8 @@ void IS31FL3733_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
198} 199}
199 200
200void IS31FL3733_set_led_control_register(uint8_t index, bool red, bool green, bool blue) { 201void IS31FL3733_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
201 is31_led led = g_is31_leds[index]; 202 is31_led led;
203 memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
202 204
203 uint8_t control_register_r = led.r / 8; 205 uint8_t control_register_r = led.r / 8;
204 uint8_t control_register_g = led.g / 8; 206 uint8_t control_register_g = led.g / 8;
diff --git a/drivers/led/issi/is31fl3733.h b/drivers/led/issi/is31fl3733.h
index daa226b41..c5d62fed8 100644
--- a/drivers/led/issi/is31fl3733.h
+++ b/drivers/led/issi/is31fl3733.h
@@ -30,7 +30,7 @@ typedef struct is31_led {
30 uint8_t b; 30 uint8_t b;
31} __attribute__((packed)) is31_led; 31} __attribute__((packed)) is31_led;
32 32
33extern const is31_led __flash g_is31_leds[DRIVER_LED_TOTAL]; 33extern const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL];
34 34
35void IS31FL3733_init(uint8_t addr, uint8_t sync); 35void IS31FL3733_init(uint8_t addr, uint8_t sync);
36bool IS31FL3733_write_register(uint8_t addr, uint8_t reg, uint8_t data); 36bool IS31FL3733_write_register(uint8_t addr, uint8_t reg, uint8_t data);
diff --git a/drivers/led/issi/is31fl3736.c b/drivers/led/issi/is31fl3736.c
index dcaabba2e..c9a871118 100644
--- a/drivers/led/issi/is31fl3736.c
+++ b/drivers/led/issi/is31fl3736.c
@@ -163,8 +163,9 @@ void IS31FL3736_init(uint8_t addr) {
163} 163}
164 164
165void IS31FL3736_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { 165void IS31FL3736_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
166 is31_led led;
166 if (index >= 0 && index < DRIVER_LED_TOTAL) { 167 if (index >= 0 && index < DRIVER_LED_TOTAL) {
167 is31_led led = g_is31_leds[index]; 168 memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
168 169
169 g_pwm_buffer[led.driver][led.r] = red; 170 g_pwm_buffer[led.driver][led.r] = red;
170 g_pwm_buffer[led.driver][led.g] = green; 171 g_pwm_buffer[led.driver][led.g] = green;
@@ -180,7 +181,8 @@ void IS31FL3736_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
180} 181}
181 182
182void IS31FL3736_set_led_control_register(uint8_t index, bool red, bool green, bool blue) { 183void IS31FL3736_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
183 is31_led led = g_is31_leds[index]; 184 is31_led led;
185 memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
184 186
185 // IS31FL3733 187 // IS31FL3733
186 // The PWM register for a matrix position (0x00 to 0xBF) can be 188 // The PWM register for a matrix position (0x00 to 0xBF) can be
diff --git a/drivers/led/issi/is31fl3736.h b/drivers/led/issi/is31fl3736.h
index a30be9055..9fbe1cc57 100644
--- a/drivers/led/issi/is31fl3736.h
+++ b/drivers/led/issi/is31fl3736.h
@@ -39,7 +39,7 @@ typedef struct is31_led {
39 uint8_t b; 39 uint8_t b;
40} __attribute__((packed)) is31_led; 40} __attribute__((packed)) is31_led;
41 41
42extern const is31_led __flash g_is31_leds[DRIVER_LED_TOTAL]; 42extern const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL];
43 43
44void IS31FL3736_init(uint8_t addr); 44void IS31FL3736_init(uint8_t addr);
45void IS31FL3736_write_register(uint8_t addr, uint8_t reg, uint8_t data); 45void IS31FL3736_write_register(uint8_t addr, uint8_t reg, uint8_t data);
diff --git a/drivers/led/issi/is31fl3737.c b/drivers/led/issi/is31fl3737.c
index 62862e0d4..0722e1886 100644
--- a/drivers/led/issi/is31fl3737.c
+++ b/drivers/led/issi/is31fl3737.c
@@ -166,8 +166,9 @@ void IS31FL3737_init(uint8_t addr) {
166} 166}
167 167
168void IS31FL3737_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { 168void IS31FL3737_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
169 is31_led led;
169 if (index >= 0 && index < DRIVER_LED_TOTAL) { 170 if (index >= 0 && index < DRIVER_LED_TOTAL) {
170 is31_led led = g_is31_leds[index]; 171 memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
171 172
172 g_pwm_buffer[led.driver][led.r] = red; 173 g_pwm_buffer[led.driver][led.r] = red;
173 g_pwm_buffer[led.driver][led.g] = green; 174 g_pwm_buffer[led.driver][led.g] = green;
@@ -183,7 +184,8 @@ void IS31FL3737_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
183} 184}
184 185
185void IS31FL3737_set_led_control_register(uint8_t index, bool red, bool green, bool blue) { 186void IS31FL3737_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
186 is31_led led = g_is31_leds[index]; 187 is31_led led;
188 memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
187 189
188 uint8_t control_register_r = led.r / 8; 190 uint8_t control_register_r = led.r / 8;
189 uint8_t control_register_g = led.g / 8; 191 uint8_t control_register_g = led.g / 8;
diff --git a/drivers/led/issi/is31fl3737.h b/drivers/led/issi/is31fl3737.h
index 97917f1d4..31b1a2226 100644
--- a/drivers/led/issi/is31fl3737.h
+++ b/drivers/led/issi/is31fl3737.h
@@ -30,7 +30,7 @@ typedef struct is31_led {
30 uint8_t b; 30 uint8_t b;
31} __attribute__((packed)) is31_led; 31} __attribute__((packed)) is31_led;
32 32
33extern const is31_led __flash g_is31_leds[DRIVER_LED_TOTAL]; 33extern const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL];
34 34
35void IS31FL3737_init(uint8_t addr); 35void IS31FL3737_init(uint8_t addr);
36void IS31FL3737_write_register(uint8_t addr, uint8_t reg, uint8_t data); 36void IS31FL3737_write_register(uint8_t addr, uint8_t reg, uint8_t data);
diff --git a/drivers/led/issi/is31fl3741.c b/drivers/led/issi/is31fl3741.c
index 5084f3b9f..8d347a5e6 100644
--- a/drivers/led/issi/is31fl3741.c
+++ b/drivers/led/issi/is31fl3741.c
@@ -174,8 +174,9 @@ void IS31FL3741_init(uint8_t addr) {
174} 174}
175 175
176void IS31FL3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { 176void IS31FL3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
177 is31_led led;
177 if (index >= 0 && index < DRIVER_LED_TOTAL) { 178 if (index >= 0 && index < DRIVER_LED_TOTAL) {
178 is31_led led = g_is31_leds[index]; 179 memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
179 180
180 g_pwm_buffer[led.driver][led.r] = red; 181 g_pwm_buffer[led.driver][led.r] = red;
181 g_pwm_buffer[led.driver][led.g] = green; 182 g_pwm_buffer[led.driver][led.g] = green;
@@ -191,7 +192,8 @@ void IS31FL3741_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
191} 192}
192 193
193void IS31FL3741_set_led_control_register(uint8_t index, bool red, bool green, bool blue) { 194void IS31FL3741_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
194 is31_led led = g_is31_leds[index]; 195 is31_led led;
196 memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
195 197
196 if (red) { 198 if (red) {
197 g_scaling_registers[led.driver][led.r] = 0xFF; 199 g_scaling_registers[led.driver][led.r] = 0xFF;
diff --git a/drivers/led/issi/is31fl3741.h b/drivers/led/issi/is31fl3741.h
index 563022b9b..8154f8be7 100644
--- a/drivers/led/issi/is31fl3741.h
+++ b/drivers/led/issi/is31fl3741.h
@@ -30,7 +30,7 @@ typedef struct is31_led {
30 uint32_t b : 10; 30 uint32_t b : 10;
31} __attribute__((packed)) is31_led; 31} __attribute__((packed)) is31_led;
32 32
33extern const is31_led __flash g_is31_leds[DRIVER_LED_TOTAL]; 33extern const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL];
34 34
35void IS31FL3741_init(uint8_t addr); 35void IS31FL3741_init(uint8_t addr);
36void IS31FL3741_write_register(uint8_t addr, uint8_t reg, uint8_t data); 36void IS31FL3741_write_register(uint8_t addr, uint8_t reg, uint8_t data);