summaryrefslogtreecommitdiff
path: root/drivers/led
diff options
context:
space:
mode:
authorRyan <fauxpark@gmail.com>2024-01-08 12:24:10 +1100
committerGitHub <noreply@github.com>2024-01-08 12:24:10 +1100
commitbdede8b2cdc05d5f3be04e900210aae9c07cf632 (patch)
treea6833b9aefb4eb60d030e5f568b6224dfaf4d028 /drivers/led
parent6e3cc56bdfb8b222ca64eb15aa7e69d9bcdc2a08 (diff)
LED drivers: misc formatting and typos (#22857)
Diffstat (limited to 'drivers/led')
-rw-r--r--drivers/led/aw20216s.h11
-rw-r--r--drivers/led/issi/is31fl3218-mono.c14
-rw-r--r--drivers/led/issi/is31fl3218.c18
-rw-r--r--drivers/led/issi/is31fl3731-mono.c9
-rw-r--r--drivers/led/issi/is31fl3731.c8
-rw-r--r--drivers/led/issi/is31fl3733-mono.c4
-rw-r--r--drivers/led/issi/is31fl3733.c4
-rw-r--r--drivers/led/issi/is31fl3736-mono.c4
-rw-r--r--drivers/led/issi/is31fl3736.c4
-rw-r--r--drivers/led/issi/is31fl3737-mono.c4
-rw-r--r--drivers/led/issi/is31fl3737.c6
-rw-r--r--drivers/led/issi/is31fl3741-mono.c12
-rw-r--r--drivers/led/issi/is31fl3741.c20
-rw-r--r--drivers/led/issi/is31fl3742a-mono.c27
-rw-r--r--drivers/led/issi/is31fl3742a.c31
-rw-r--r--drivers/led/issi/is31fl3743a-mono.c30
-rw-r--r--drivers/led/issi/is31fl3743a.c34
-rw-r--r--drivers/led/issi/is31fl3745-mono.c30
-rw-r--r--drivers/led/issi/is31fl3745.c34
-rw-r--r--drivers/led/issi/is31fl3746a-mono.c30
-rw-r--r--drivers/led/issi/is31fl3746a.c34
-rw-r--r--drivers/led/snled27351-mono.c8
-rw-r--r--drivers/led/snled27351.c7
23 files changed, 307 insertions, 76 deletions
diff --git a/drivers/led/aw20216s.h b/drivers/led/aw20216s.h
index 38a0c92b2f..b8d8afc4cb 100644
--- a/drivers/led/aw20216s.h
+++ b/drivers/led/aw20216s.h
@@ -119,6 +119,7 @@ void aw20216s_flush(void);
119#define CS16_SW1 0x0F 119#define CS16_SW1 0x0F
120#define CS17_SW1 0x10 120#define CS17_SW1 0x10
121#define CS18_SW1 0x11 121#define CS18_SW1 0x11
122
122#define CS1_SW2 0x12 123#define CS1_SW2 0x12
123#define CS2_SW2 0x13 124#define CS2_SW2 0x13
124#define CS3_SW2 0x14 125#define CS3_SW2 0x14
@@ -137,6 +138,7 @@ void aw20216s_flush(void);
137#define CS16_SW2 0x21 138#define CS16_SW2 0x21
138#define CS17_SW2 0x22 139#define CS17_SW2 0x22
139#define CS18_SW2 0x23 140#define CS18_SW2 0x23
141
140#define CS1_SW3 0x24 142#define CS1_SW3 0x24
141#define CS2_SW3 0x25 143#define CS2_SW3 0x25
142#define CS3_SW3 0x26 144#define CS3_SW3 0x26
@@ -155,6 +157,7 @@ void aw20216s_flush(void);
155#define CS16_SW3 0x33 157#define CS16_SW3 0x33
156#define CS17_SW3 0x34 158#define CS17_SW3 0x34
157#define CS18_SW3 0x35 159#define CS18_SW3 0x35
160
158#define CS1_SW4 0x36 161#define CS1_SW4 0x36
159#define CS2_SW4 0x37 162#define CS2_SW4 0x37
160#define CS3_SW4 0x38 163#define CS3_SW4 0x38
@@ -173,6 +176,7 @@ void aw20216s_flush(void);
173#define CS16_SW4 0x45 176#define CS16_SW4 0x45
174#define CS17_SW4 0x46 177#define CS17_SW4 0x46
175#define CS18_SW4 0x47 178#define CS18_SW4 0x47
179
176#define CS1_SW5 0x48 180#define CS1_SW5 0x48
177#define CS2_SW5 0x49 181#define CS2_SW5 0x49
178#define CS3_SW5 0x4A 182#define CS3_SW5 0x4A
@@ -191,6 +195,7 @@ void aw20216s_flush(void);
191#define CS16_SW5 0x57 195#define CS16_SW5 0x57
192#define CS17_SW5 0x58 196#define CS17_SW5 0x58
193#define CS18_SW5 0x59 197#define CS18_SW5 0x59
198
194#define CS1_SW6 0x5A 199#define CS1_SW6 0x5A
195#define CS2_SW6 0x5B 200#define CS2_SW6 0x5B
196#define CS3_SW6 0x5C 201#define CS3_SW6 0x5C
@@ -209,6 +214,7 @@ void aw20216s_flush(void);
209#define CS16_SW6 0x69 214#define CS16_SW6 0x69
210#define CS17_SW6 0x6A 215#define CS17_SW6 0x6A
211#define CS18_SW6 0x6B 216#define CS18_SW6 0x6B
217
212#define CS1_SW7 0x6C 218#define CS1_SW7 0x6C
213#define CS2_SW7 0x6D 219#define CS2_SW7 0x6D
214#define CS3_SW7 0x6E 220#define CS3_SW7 0x6E
@@ -227,6 +233,7 @@ void aw20216s_flush(void);
227#define CS16_SW7 0x7B 233#define CS16_SW7 0x7B
228#define CS17_SW7 0x7C 234#define CS17_SW7 0x7C
229#define CS18_SW7 0x7D 235#define CS18_SW7 0x7D
236
230#define CS1_SW8 0x7E 237#define CS1_SW8 0x7E
231#define CS2_SW8 0x7F 238#define CS2_SW8 0x7F
232#define CS3_SW8 0x80 239#define CS3_SW8 0x80
@@ -245,6 +252,7 @@ void aw20216s_flush(void);
245#define CS16_SW8 0x8D 252#define CS16_SW8 0x8D
246#define CS17_SW8 0x8E 253#define CS17_SW8 0x8E
247#define CS18_SW8 0x8F 254#define CS18_SW8 0x8F
255
248#define CS1_SW9 0x90 256#define CS1_SW9 0x90
249#define CS2_SW9 0x91 257#define CS2_SW9 0x91
250#define CS3_SW9 0x92 258#define CS3_SW9 0x92
@@ -263,6 +271,7 @@ void aw20216s_flush(void);
263#define CS16_SW9 0x9F 271#define CS16_SW9 0x9F
264#define CS17_SW9 0xA0 272#define CS17_SW9 0xA0
265#define CS18_SW9 0xA1 273#define CS18_SW9 0xA1
274
266#define CS1_SW10 0xA2 275#define CS1_SW10 0xA2
267#define CS2_SW10 0xA3 276#define CS2_SW10 0xA3
268#define CS3_SW10 0xA4 277#define CS3_SW10 0xA4
@@ -281,6 +290,7 @@ void aw20216s_flush(void);
281#define CS16_SW10 0xB1 290#define CS16_SW10 0xB1
282#define CS17_SW10 0xB2 291#define CS17_SW10 0xB2
283#define CS18_SW10 0xB3 292#define CS18_SW10 0xB3
293
284#define CS1_SW11 0xB4 294#define CS1_SW11 0xB4
285#define CS2_SW11 0xB5 295#define CS2_SW11 0xB5
286#define CS3_SW11 0xB6 296#define CS3_SW11 0xB6
@@ -299,6 +309,7 @@ void aw20216s_flush(void);
299#define CS16_SW11 0xC3 309#define CS16_SW11 0xC3
300#define CS17_SW11 0xC4 310#define CS17_SW11 0xC4
301#define CS18_SW11 0xC5 311#define CS18_SW11 0xC5
312
302#define CS1_SW12 0xC6 313#define CS1_SW12 0xC6
303#define CS2_SW12 0xC7 314#define CS2_SW12 0xC7
304#define CS3_SW12 0xC8 315#define CS3_SW12 0xC8
diff --git a/drivers/led/issi/is31fl3218-mono.c b/drivers/led/issi/is31fl3218-mono.c
index ad818f98b1..86683c910c 100644
--- a/drivers/led/issi/is31fl3218-mono.c
+++ b/drivers/led/issi/is31fl3218-mono.c
@@ -13,6 +13,7 @@
13 * You should have received a copy of the GNU General Public License 13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */ 15 */
16
16#include "is31fl3218-mono.h" 17#include "is31fl3218-mono.h"
17#include <string.h> 18#include <string.h>
18#include "i2c_master.h" 19#include "i2c_master.h"
@@ -93,14 +94,17 @@ void is31fl3218_init(void) {
93 94
94void is31fl3218_set_value(int index, uint8_t value) { 95void is31fl3218_set_value(int index, uint8_t value) {
95 is31fl3218_led_t led; 96 is31fl3218_led_t led;
97
96 if (index >= 0 && index < IS31FL3218_LED_COUNT) { 98 if (index >= 0 && index < IS31FL3218_LED_COUNT) {
97 memcpy_P(&led, (&g_is31fl3218_leds[index]), sizeof(led)); 99 memcpy_P(&led, (&g_is31fl3218_leds[index]), sizeof(led));
100
101 if (g_pwm_buffer[led.v - IS31FL3218_REG_PWM] == value) {
102 return;
103 }
104
105 g_pwm_buffer[led.v - IS31FL3218_REG_PWM] = value;
106 g_pwm_buffer_update_required = true;
98 } 107 }
99 if (g_pwm_buffer[led.v - IS31FL3218_REG_PWM] == value) {
100 return;
101 }
102 g_pwm_buffer[led.v - IS31FL3218_REG_PWM] = value;
103 g_pwm_buffer_update_required = true;
104} 108}
105 109
106void is31fl3218_set_value_all(uint8_t value) { 110void is31fl3218_set_value_all(uint8_t value) {
diff --git a/drivers/led/issi/is31fl3218.c b/drivers/led/issi/is31fl3218.c
index 9bfdc9c44d..49cfa08d3b 100644
--- a/drivers/led/issi/is31fl3218.c
+++ b/drivers/led/issi/is31fl3218.c
@@ -13,6 +13,7 @@
13 * You should have received a copy of the GNU General Public License 13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */ 15 */
16
16#include "is31fl3218.h" 17#include "is31fl3218.h"
17#include <string.h> 18#include <string.h>
18#include "i2c_master.h" 19#include "i2c_master.h"
@@ -93,16 +94,19 @@ void is31fl3218_init(void) {
93 94
94void is31fl3218_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { 95void is31fl3218_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
95 is31fl3218_led_t led; 96 is31fl3218_led_t led;
97
96 if (index >= 0 && index < IS31FL3218_LED_COUNT) { 98 if (index >= 0 && index < IS31FL3218_LED_COUNT) {
97 memcpy_P(&led, (&g_is31fl3218_leds[index]), sizeof(led)); 99 memcpy_P(&led, (&g_is31fl3218_leds[index]), sizeof(led));
100
101 if (g_pwm_buffer[led.r - IS31FL3218_REG_PWM] == red && g_pwm_buffer[led.g - IS31FL3218_REG_PWM] == green && g_pwm_buffer[led.b - IS31FL3218_REG_PWM] == blue) {
102 return;
103 }
104
105 g_pwm_buffer[led.r - IS31FL3218_REG_PWM] = red;
106 g_pwm_buffer[led.g - IS31FL3218_REG_PWM] = green;
107 g_pwm_buffer[led.b - IS31FL3218_REG_PWM] = blue;
108 g_pwm_buffer_update_required = true;
98 } 109 }
99 if (g_pwm_buffer[led.r - IS31FL3218_REG_PWM] == red && g_pwm_buffer[led.g - IS31FL3218_REG_PWM] == green && g_pwm_buffer[led.b - IS31FL3218_REG_PWM] == blue) {
100 return;
101 }
102 g_pwm_buffer[led.r - IS31FL3218_REG_PWM] = red;
103 g_pwm_buffer[led.g - IS31FL3218_REG_PWM] = green;
104 g_pwm_buffer[led.b - IS31FL3218_REG_PWM] = blue;
105 g_pwm_buffer_update_required = true;
106} 110}
107 111
108void is31fl3218_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { 112void is31fl3218_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
diff --git a/drivers/led/issi/is31fl3731-mono.c b/drivers/led/issi/is31fl3731-mono.c
index 74e427ef0d..9518ac269f 100644
--- a/drivers/led/issi/is31fl3731-mono.c
+++ b/drivers/led/issi/is31fl3731-mono.c
@@ -52,9 +52,7 @@ void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
52 52
53#if IS31FL3731_I2C_PERSISTENCE > 0 53#if IS31FL3731_I2C_PERSISTENCE > 0
54 for (uint8_t i = 0; i < IS31FL3731_I2C_PERSISTENCE; i++) { 54 for (uint8_t i = 0; i < IS31FL3731_I2C_PERSISTENCE; i++) {
55 if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT) == 0) { 55 if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT) == 0) break;
56 break;
57 }
58 } 56 }
59#else 57#else
60 i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT); 58 i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT);
@@ -174,14 +172,15 @@ void is31fl3731_init(uint8_t addr) {
174 172
175void is31fl3731_set_value(int index, uint8_t value) { 173void is31fl3731_set_value(int index, uint8_t value) {
176 is31fl3731_led_t led; 174 is31fl3731_led_t led;
175
177 if (index >= 0 && index < IS31FL3731_LED_COUNT) { 176 if (index >= 0 && index < IS31FL3731_LED_COUNT) {
178 memcpy_P(&led, (&g_is31fl3731_leds[index]), sizeof(led)); 177 memcpy_P(&led, (&g_is31fl3731_leds[index]), sizeof(led));
179 178
180 // Subtract 0x24 to get the second index of g_pwm_buffer 179 // Subtract 0x24 to get the second index of g_pwm_buffer
181
182 if (g_pwm_buffer[led.driver][led.v - 0x24] == value) { 180 if (g_pwm_buffer[led.driver][led.v - 0x24] == value) {
183 return; 181 return;
184 } 182 }
183
185 g_pwm_buffer[led.driver][led.v - 0x24] = value; 184 g_pwm_buffer[led.driver][led.v - 0x24] = value;
186 g_pwm_buffer_update_required[led.driver] = true; 185 g_pwm_buffer_update_required[led.driver] = true;
187 } 186 }
@@ -212,6 +211,7 @@ void is31fl3731_set_led_control_register(uint8_t index, bool value) {
212void is31fl3731_update_pwm_buffers(uint8_t addr, uint8_t index) { 211void is31fl3731_update_pwm_buffers(uint8_t addr, uint8_t index) {
213 if (g_pwm_buffer_update_required[index]) { 212 if (g_pwm_buffer_update_required[index]) {
214 is31fl3731_write_pwm_buffer(addr, g_pwm_buffer[index]); 213 is31fl3731_write_pwm_buffer(addr, g_pwm_buffer[index]);
214
215 g_pwm_buffer_update_required[index] = false; 215 g_pwm_buffer_update_required[index] = false;
216 } 216 }
217} 217}
@@ -221,6 +221,7 @@ void is31fl3731_update_led_control_registers(uint8_t addr, uint8_t index) {
221 for (int i = 0; i < IS31FL3731_LED_CONTROL_REGISTER_COUNT; i++) { 221 for (int i = 0; i < IS31FL3731_LED_CONTROL_REGISTER_COUNT; i++) {
222 is31fl3731_write_register(addr, i, g_led_control_registers[index][i]); 222 is31fl3731_write_register(addr, i, g_led_control_registers[index][i]);
223 } 223 }
224
224 g_led_control_registers_update_required[index] = false; 225 g_led_control_registers_update_required[index] = false;
225 } 226 }
226} 227}
diff --git a/drivers/led/issi/is31fl3731.c b/drivers/led/issi/is31fl3731.c
index 9a7d0b5eca..1d7c34adc2 100644
--- a/drivers/led/issi/is31fl3731.c
+++ b/drivers/led/issi/is31fl3731.c
@@ -171,6 +171,7 @@ void is31fl3731_init(uint8_t addr) {
171 171
172void is31fl3731_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { 172void is31fl3731_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
173 is31fl3731_led_t led; 173 is31fl3731_led_t led;
174
174 if (index >= 0 && index < IS31FL3731_LED_COUNT) { 175 if (index >= 0 && index < IS31FL3731_LED_COUNT) {
175 memcpy_P(&led, (&g_is31fl3731_leds[index]), sizeof(led)); 176 memcpy_P(&led, (&g_is31fl3731_leds[index]), sizeof(led));
176 177
@@ -178,6 +179,7 @@ void is31fl3731_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
178 if (g_pwm_buffer[led.driver][led.r - 0x24] == red && g_pwm_buffer[led.driver][led.g - 0x24] == green && g_pwm_buffer[led.driver][led.b - 0x24] == blue) { 179 if (g_pwm_buffer[led.driver][led.r - 0x24] == red && g_pwm_buffer[led.driver][led.g - 0x24] == green && g_pwm_buffer[led.driver][led.b - 0x24] == blue) {
179 return; 180 return;
180 } 181 }
182
181 g_pwm_buffer[led.driver][led.r - 0x24] = red; 183 g_pwm_buffer[led.driver][led.r - 0x24] = red;
182 g_pwm_buffer[led.driver][led.g - 0x24] = green; 184 g_pwm_buffer[led.driver][led.g - 0x24] = green;
183 g_pwm_buffer[led.driver][led.b - 0x24] = blue; 185 g_pwm_buffer[led.driver][led.b - 0x24] = blue;
@@ -224,8 +226,9 @@ void is31fl3731_set_led_control_register(uint8_t index, bool red, bool green, bo
224void is31fl3731_update_pwm_buffers(uint8_t addr, uint8_t index) { 226void is31fl3731_update_pwm_buffers(uint8_t addr, uint8_t index) {
225 if (g_pwm_buffer_update_required[index]) { 227 if (g_pwm_buffer_update_required[index]) {
226 is31fl3731_write_pwm_buffer(addr, g_pwm_buffer[index]); 228 is31fl3731_write_pwm_buffer(addr, g_pwm_buffer[index]);
229
230 g_pwm_buffer_update_required[index] = false;
227 } 231 }
228 g_pwm_buffer_update_required[index] = false;
229} 232}
230 233
231void is31fl3731_update_led_control_registers(uint8_t addr, uint8_t index) { 234void is31fl3731_update_led_control_registers(uint8_t addr, uint8_t index) {
@@ -233,8 +236,9 @@ void is31fl3731_update_led_control_registers(uint8_t addr, uint8_t index) {
233 for (int i = 0; i < IS31FL3731_LED_CONTROL_REGISTER_COUNT; i++) { 236 for (int i = 0; i < IS31FL3731_LED_CONTROL_REGISTER_COUNT; i++) {
234 is31fl3731_write_register(addr, i, g_led_control_registers[index][i]); 237 is31fl3731_write_register(addr, i, g_led_control_registers[index][i]);
235 } 238 }
239
240 g_led_control_registers_update_required[index] = false;
236 } 241 }
237 g_led_control_registers_update_required[index] = false;
238} 242}
239 243
240void is31fl3731_flush(void) { 244void is31fl3731_flush(void) {
diff --git a/drivers/led/issi/is31fl3733-mono.c b/drivers/led/issi/is31fl3733-mono.c
index 95d16bc4a3..21cd65a154 100644
--- a/drivers/led/issi/is31fl3733-mono.c
+++ b/drivers/led/issi/is31fl3733-mono.c
@@ -199,12 +199,14 @@ void is31fl3733_init(uint8_t addr, uint8_t sync) {
199 199
200void is31fl3733_set_value(int index, uint8_t value) { 200void is31fl3733_set_value(int index, uint8_t value) {
201 is31fl3733_led_t led; 201 is31fl3733_led_t led;
202
202 if (index >= 0 && index < IS31FL3733_LED_COUNT) { 203 if (index >= 0 && index < IS31FL3733_LED_COUNT) {
203 memcpy_P(&led, (&g_is31fl3733_leds[index]), sizeof(led)); 204 memcpy_P(&led, (&g_is31fl3733_leds[index]), sizeof(led));
204 205
205 if (g_pwm_buffer[led.driver][led.v] == value) { 206 if (g_pwm_buffer[led.driver][led.v] == value) {
206 return; 207 return;
207 } 208 }
209
208 g_pwm_buffer[led.driver][led.v] = value; 210 g_pwm_buffer[led.driver][led.v] = value;
209 g_pwm_buffer_update_required[led.driver] = true; 211 g_pwm_buffer_update_required[led.driver] = true;
210 } 212 }
@@ -241,6 +243,7 @@ void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
241 if (!is31fl3733_write_pwm_buffer(addr, g_pwm_buffer[index])) { 243 if (!is31fl3733_write_pwm_buffer(addr, g_pwm_buffer[index])) {
242 g_led_control_registers_update_required[index] = true; 244 g_led_control_registers_update_required[index] = true;
243 } 245 }
246
244 g_pwm_buffer_update_required[index] = false; 247 g_pwm_buffer_update_required[index] = false;
245 } 248 }
246} 249}
@@ -252,6 +255,7 @@ void is31fl3733_update_led_control_registers(uint8_t addr, uint8_t index) {
252 for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) { 255 for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) {
253 is31fl3733_write_register(addr, i, g_led_control_registers[index][i]); 256 is31fl3733_write_register(addr, i, g_led_control_registers[index][i]);
254 } 257 }
258
255 g_led_control_registers_update_required[index] = false; 259 g_led_control_registers_update_required[index] = false;
256 } 260 }
257} 261}
diff --git a/drivers/led/issi/is31fl3733.c b/drivers/led/issi/is31fl3733.c
index f7162a0ce5..06de119c69 100644
--- a/drivers/led/issi/is31fl3733.c
+++ b/drivers/led/issi/is31fl3733.c
@@ -198,12 +198,14 @@ void is31fl3733_init(uint8_t addr, uint8_t sync) {
198 198
199void is31fl3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { 199void is31fl3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
200 is31fl3733_led_t led; 200 is31fl3733_led_t led;
201
201 if (index >= 0 && index < IS31FL3733_LED_COUNT) { 202 if (index >= 0 && index < IS31FL3733_LED_COUNT) {
202 memcpy_P(&led, (&g_is31fl3733_leds[index]), sizeof(led)); 203 memcpy_P(&led, (&g_is31fl3733_leds[index]), sizeof(led));
203 204
204 if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) { 205 if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
205 return; 206 return;
206 } 207 }
208
207 g_pwm_buffer[led.driver][led.r] = red; 209 g_pwm_buffer[led.driver][led.r] = red;
208 g_pwm_buffer[led.driver][led.g] = green; 210 g_pwm_buffer[led.driver][led.g] = green;
209 g_pwm_buffer[led.driver][led.b] = blue; 211 g_pwm_buffer[led.driver][led.b] = blue;
@@ -256,6 +258,7 @@ void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
256 if (!is31fl3733_write_pwm_buffer(addr, g_pwm_buffer[index])) { 258 if (!is31fl3733_write_pwm_buffer(addr, g_pwm_buffer[index])) {
257 g_led_control_registers_update_required[index] = true; 259 g_led_control_registers_update_required[index] = true;
258 } 260 }
261
259 g_pwm_buffer_update_required[index] = false; 262 g_pwm_buffer_update_required[index] = false;
260 } 263 }
261} 264}
@@ -267,6 +270,7 @@ void is31fl3733_update_led_control_registers(uint8_t addr, uint8_t index) {
267 for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) { 270 for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) {
268 is31fl3733_write_register(addr, i, g_led_control_registers[index][i]); 271 is31fl3733_write_register(addr, i, g_led_control_registers[index][i]);
269 } 272 }
273
270 g_led_control_registers_update_required[index] = false; 274 g_led_control_registers_update_required[index] = false;
271 } 275 }
272} 276}
diff --git a/drivers/led/issi/is31fl3736-mono.c b/drivers/led/issi/is31fl3736-mono.c
index 5ced65aa06..6a7c410962 100644
--- a/drivers/led/issi/is31fl3736-mono.c
+++ b/drivers/led/issi/is31fl3736-mono.c
@@ -171,12 +171,14 @@ void is31fl3736_init(uint8_t addr) {
171 171
172void is31fl3736_set_value(int index, uint8_t value) { 172void is31fl3736_set_value(int index, uint8_t value) {
173 is31fl3736_led_t led; 173 is31fl3736_led_t led;
174
174 if (index >= 0 && index < IS31FL3736_LED_COUNT) { 175 if (index >= 0 && index < IS31FL3736_LED_COUNT) {
175 memcpy_P(&led, (&g_is31fl3736_leds[index]), sizeof(led)); 176 memcpy_P(&led, (&g_is31fl3736_leds[index]), sizeof(led));
176 177
177 if (g_pwm_buffer[led.driver][led.v] == value) { 178 if (g_pwm_buffer[led.driver][led.v] == value) {
178 return; 179 return;
179 } 180 }
181
180 g_pwm_buffer[led.driver][led.v] = value; 182 g_pwm_buffer[led.driver][led.v] = value;
181 g_pwm_buffer_update_required[led.driver] = true; 183 g_pwm_buffer_update_required[led.driver] = true;
182 } 184 }
@@ -215,6 +217,7 @@ void is31fl3736_update_pwm_buffers(uint8_t addr, uint8_t index) {
215 is31fl3736_select_page(addr, IS31FL3736_COMMAND_PWM); 217 is31fl3736_select_page(addr, IS31FL3736_COMMAND_PWM);
216 218
217 is31fl3736_write_pwm_buffer(addr, g_pwm_buffer[index]); 219 is31fl3736_write_pwm_buffer(addr, g_pwm_buffer[index]);
220
218 g_pwm_buffer_update_required[index] = false; 221 g_pwm_buffer_update_required[index] = false;
219 } 222 }
220} 223}
@@ -226,6 +229,7 @@ void is31fl3736_update_led_control_registers(uint8_t addr, uint8_t index) {
226 for (int i = 0; i < IS31FL3736_LED_CONTROL_REGISTER_COUNT; i++) { 229 for (int i = 0; i < IS31FL3736_LED_CONTROL_REGISTER_COUNT; i++) {
227 is31fl3736_write_register(addr, i, g_led_control_registers[index][i]); 230 is31fl3736_write_register(addr, i, g_led_control_registers[index][i]);
228 } 231 }
232
229 g_led_control_registers_update_required[index] = false; 233 g_led_control_registers_update_required[index] = false;
230 } 234 }
231} 235}
diff --git a/drivers/led/issi/is31fl3736.c b/drivers/led/issi/is31fl3736.c
index 0d7b08e7e8..20a79327c0 100644
--- a/drivers/led/issi/is31fl3736.c
+++ b/drivers/led/issi/is31fl3736.c
@@ -171,12 +171,14 @@ void is31fl3736_init(uint8_t addr) {
171 171
172void is31fl3736_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { 172void is31fl3736_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
173 is31fl3736_led_t led; 173 is31fl3736_led_t led;
174
174 if (index >= 0 && index < IS31FL3736_LED_COUNT) { 175 if (index >= 0 && index < IS31FL3736_LED_COUNT) {
175 memcpy_P(&led, (&g_is31fl3736_leds[index]), sizeof(led)); 176 memcpy_P(&led, (&g_is31fl3736_leds[index]), sizeof(led));
176 177
177 if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) { 178 if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
178 return; 179 return;
179 } 180 }
181
180 g_pwm_buffer[led.driver][led.r] = red; 182 g_pwm_buffer[led.driver][led.r] = red;
181 g_pwm_buffer[led.driver][led.g] = green; 183 g_pwm_buffer[led.driver][led.g] = green;
182 g_pwm_buffer[led.driver][led.b] = blue; 184 g_pwm_buffer[led.driver][led.b] = blue;
@@ -232,6 +234,7 @@ void is31fl3736_update_pwm_buffers(uint8_t addr, uint8_t index) {
232 is31fl3736_select_page(addr, IS31FL3736_COMMAND_PWM); 234 is31fl3736_select_page(addr, IS31FL3736_COMMAND_PWM);
233 235
234 is31fl3736_write_pwm_buffer(addr, g_pwm_buffer[index]); 236 is31fl3736_write_pwm_buffer(addr, g_pwm_buffer[index]);
237
235 g_pwm_buffer_update_required[index] = false; 238 g_pwm_buffer_update_required[index] = false;
236 } 239 }
237} 240}
@@ -243,6 +246,7 @@ void is31fl3736_update_led_control_registers(uint8_t addr, uint8_t index) {
243 for (int i = 0; i < IS31FL3736_LED_CONTROL_REGISTER_COUNT; i++) { 246 for (int i = 0; i < IS31FL3736_LED_CONTROL_REGISTER_COUNT; i++) {
244 is31fl3736_write_register(addr, i, g_led_control_registers[index][i]); 247 is31fl3736_write_register(addr, i, g_led_control_registers[index][i]);
245 } 248 }
249
246 g_led_control_registers_update_required[index] = false; 250 g_led_control_registers_update_required[index] = false;
247 } 251 }
248} 252}
diff --git a/drivers/led/issi/is31fl3737-mono.c b/drivers/led/issi/is31fl3737-mono.c
index 56f169550b..bee81b0c7a 100644
--- a/drivers/led/issi/is31fl3737-mono.c
+++ b/drivers/led/issi/is31fl3737-mono.c
@@ -174,12 +174,14 @@ void is31fl3737_init(uint8_t addr) {
174 174
175void is31fl3737_set_value(int index, uint8_t value) { 175void is31fl3737_set_value(int index, uint8_t value) {
176 is31fl3737_led_t led; 176 is31fl3737_led_t led;
177
177 if (index >= 0 && index < IS31FL3737_LED_COUNT) { 178 if (index >= 0 && index < IS31FL3737_LED_COUNT) {
178 memcpy_P(&led, (&g_is31fl3737_leds[index]), sizeof(led)); 179 memcpy_P(&led, (&g_is31fl3737_leds[index]), sizeof(led));
179 180
180 if (g_pwm_buffer[led.driver][led.v] == value) { 181 if (g_pwm_buffer[led.driver][led.v] == value) {
181 return; 182 return;
182 } 183 }
184
183 g_pwm_buffer[led.driver][led.v] = value; 185 g_pwm_buffer[led.driver][led.v] = value;
184 g_pwm_buffer_update_required[led.driver] = true; 186 g_pwm_buffer_update_required[led.driver] = true;
185 } 187 }
@@ -212,6 +214,7 @@ void is31fl3737_update_pwm_buffers(uint8_t addr, uint8_t index) {
212 is31fl3737_select_page(addr, IS31FL3737_COMMAND_PWM); 214 is31fl3737_select_page(addr, IS31FL3737_COMMAND_PWM);
213 215
214 is31fl3737_write_pwm_buffer(addr, g_pwm_buffer[index]); 216 is31fl3737_write_pwm_buffer(addr, g_pwm_buffer[index]);
217
215 g_pwm_buffer_update_required[index] = false; 218 g_pwm_buffer_update_required[index] = false;
216 } 219 }
217} 220}
@@ -223,6 +226,7 @@ void is31fl3737_update_led_control_registers(uint8_t addr, uint8_t index) {
223 for (int i = 0; i < IS31FL3737_LED_CONTROL_REGISTER_COUNT; i++) { 226 for (int i = 0; i < IS31FL3737_LED_CONTROL_REGISTER_COUNT; i++) {
224 is31fl3737_write_register(addr, i, g_led_control_registers[index][i]); 227 is31fl3737_write_register(addr, i, g_led_control_registers[index][i]);
225 } 228 }
229
226 g_led_control_registers_update_required[index] = false; 230 g_led_control_registers_update_required[index] = false;
227 } 231 }
228} 232}
diff --git a/drivers/led/issi/is31fl3737.c b/drivers/led/issi/is31fl3737.c
index 76d17c2b84..debfd570ce 100644
--- a/drivers/led/issi/is31fl3737.c
+++ b/drivers/led/issi/is31fl3737.c
@@ -41,7 +41,7 @@
41# define IS31FL3737_SW_PULLUP IS31FL3737_PUR_0_OHM 41# define IS31FL3737_SW_PULLUP IS31FL3737_PUR_0_OHM
42#endif 42#endif
43 43
44#ifndef IS31FL3737_CS_PULLDONW 44#ifndef IS31FL3737_CS_PULLDOWN
45# define IS31FL3737_CS_PULLDOWN IS31FL3737_PDR_0_OHM 45# define IS31FL3737_CS_PULLDOWN IS31FL3737_PDR_0_OHM
46#endif 46#endif
47 47
@@ -174,12 +174,14 @@ void is31fl3737_init(uint8_t addr) {
174 174
175void is31fl3737_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { 175void is31fl3737_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
176 is31fl3737_led_t led; 176 is31fl3737_led_t led;
177
177 if (index >= 0 && index < IS31FL3737_LED_COUNT) { 178 if (index >= 0 && index < IS31FL3737_LED_COUNT) {
178 memcpy_P(&led, (&g_is31fl3737_leds[index]), sizeof(led)); 179 memcpy_P(&led, (&g_is31fl3737_leds[index]), sizeof(led));
179 180
180 if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) { 181 if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
181 return; 182 return;
182 } 183 }
184
183 g_pwm_buffer[led.driver][led.r] = red; 185 g_pwm_buffer[led.driver][led.r] = red;
184 g_pwm_buffer[led.driver][led.g] = green; 186 g_pwm_buffer[led.driver][led.g] = green;
185 g_pwm_buffer[led.driver][led.b] = blue; 187 g_pwm_buffer[led.driver][led.b] = blue;
@@ -228,6 +230,7 @@ void is31fl3737_update_pwm_buffers(uint8_t addr, uint8_t index) {
228 is31fl3737_select_page(addr, IS31FL3737_COMMAND_PWM); 230 is31fl3737_select_page(addr, IS31FL3737_COMMAND_PWM);
229 231
230 is31fl3737_write_pwm_buffer(addr, g_pwm_buffer[index]); 232 is31fl3737_write_pwm_buffer(addr, g_pwm_buffer[index]);
233
231 g_pwm_buffer_update_required[index] = false; 234 g_pwm_buffer_update_required[index] = false;
232 } 235 }
233} 236}
@@ -239,6 +242,7 @@ void is31fl3737_update_led_control_registers(uint8_t addr, uint8_t index) {
239 for (int i = 0; i < IS31FL3737_LED_CONTROL_REGISTER_COUNT; i++) { 242 for (int i = 0; i < IS31FL3737_LED_CONTROL_REGISTER_COUNT; i++) {
240 is31fl3737_write_register(addr, i, g_led_control_registers[index][i]); 243 is31fl3737_write_register(addr, i, g_led_control_registers[index][i]);
241 } 244 }
245
242 g_led_control_registers_update_required[index] = false; 246 g_led_control_registers_update_required[index] = false;
243 } 247 }
244} 248}
diff --git a/drivers/led/issi/is31fl3741-mono.c b/drivers/led/issi/is31fl3741-mono.c
index 72260654ef..09838aa455 100644
--- a/drivers/led/issi/is31fl3741-mono.c
+++ b/drivers/led/issi/is31fl3741-mono.c
@@ -185,12 +185,14 @@ void is31fl3741_init(uint8_t addr) {
185 185
186void is31fl3741_set_value(int index, uint8_t value) { 186void is31fl3741_set_value(int index, uint8_t value) {
187 is31fl3741_led_t led; 187 is31fl3741_led_t led;
188
188 if (index >= 0 && index < IS31FL3741_LED_COUNT) { 189 if (index >= 0 && index < IS31FL3741_LED_COUNT) {
189 memcpy_P(&led, (&g_is31fl3741_leds[index]), sizeof(led)); 190 memcpy_P(&led, (&g_is31fl3741_leds[index]), sizeof(led));
190 191
191 if (g_pwm_buffer[led.driver][led.v] == value) { 192 if (g_pwm_buffer[led.driver][led.v] == value) {
192 return; 193 return;
193 } 194 }
195
194 g_pwm_buffer_update_required[led.driver] = true; 196 g_pwm_buffer_update_required[led.driver] = true;
195 g_pwm_buffer[led.driver][led.v] = value; 197 g_pwm_buffer[led.driver][led.v] = value;
196 } 198 }
@@ -220,14 +222,13 @@ void is31fl3741_update_pwm_buffers(uint8_t addr, uint8_t index) {
220 is31fl3741_select_page(addr, IS31FL3741_COMMAND_PWM_0); 222 is31fl3741_select_page(addr, IS31FL3741_COMMAND_PWM_0);
221 223
222 is31fl3741_write_pwm_buffer(addr, g_pwm_buffer[index]); 224 is31fl3741_write_pwm_buffer(addr, g_pwm_buffer[index]);
223 }
224 225
225 g_pwm_buffer_update_required[index] = false; 226 g_pwm_buffer_update_required[index] = false;
227 }
226} 228}
227 229
228void is31fl3741_set_pwm_buffer(const is31fl3741_led_t *pled, uint8_t value) { 230void is31fl3741_set_pwm_buffer(const is31fl3741_led_t *pled, uint8_t value) {
229 g_pwm_buffer[pled->driver][pled->v] = value; 231 g_pwm_buffer[pled->driver][pled->v] = value;
230
231 g_pwm_buffer_update_required[pled->driver] = true; 232 g_pwm_buffer_update_required[pled->driver] = true;
232} 233}
233 234
@@ -252,8 +253,7 @@ void is31fl3741_update_led_control_registers(uint8_t addr, uint8_t index) {
252} 253}
253 254
254void is31fl3741_set_scaling_registers(const is31fl3741_led_t *pled, uint8_t value) { 255void is31fl3741_set_scaling_registers(const is31fl3741_led_t *pled, uint8_t value) {
255 g_scaling_registers[pled->driver][pled->v] = value; 256 g_scaling_registers[pled->driver][pled->v] = value;
256
257 g_scaling_registers_update_required[pled->driver] = true; 257 g_scaling_registers_update_required[pled->driver] = true;
258} 258}
259 259
diff --git a/drivers/led/issi/is31fl3741.c b/drivers/led/issi/is31fl3741.c
index 08b86f9171..9bc8c11e8c 100644
--- a/drivers/led/issi/is31fl3741.c
+++ b/drivers/led/issi/is31fl3741.c
@@ -185,12 +185,14 @@ void is31fl3741_init(uint8_t addr) {
185 185
186void is31fl3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { 186void is31fl3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
187 is31fl3741_led_t led; 187 is31fl3741_led_t led;
188
188 if (index >= 0 && index < IS31FL3741_LED_COUNT) { 189 if (index >= 0 && index < IS31FL3741_LED_COUNT) {
189 memcpy_P(&led, (&g_is31fl3741_leds[index]), sizeof(led)); 190 memcpy_P(&led, (&g_is31fl3741_leds[index]), sizeof(led));
190 191
191 if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) { 192 if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
192 return; 193 return;
193 } 194 }
195
194 g_pwm_buffer_update_required[led.driver] = true; 196 g_pwm_buffer_update_required[led.driver] = true;
195 g_pwm_buffer[led.driver][led.r] = red; 197 g_pwm_buffer[led.driver][led.r] = red;
196 g_pwm_buffer[led.driver][led.g] = green; 198 g_pwm_buffer[led.driver][led.g] = green;
@@ -234,16 +236,15 @@ void is31fl3741_update_pwm_buffers(uint8_t addr, uint8_t index) {
234 is31fl3741_select_page(addr, IS31FL3741_COMMAND_PWM_0); 236 is31fl3741_select_page(addr, IS31FL3741_COMMAND_PWM_0);
235 237
236 is31fl3741_write_pwm_buffer(addr, g_pwm_buffer[index]); 238 is31fl3741_write_pwm_buffer(addr, g_pwm_buffer[index]);
237 }
238 239
239 g_pwm_buffer_update_required[index] = false; 240 g_pwm_buffer_update_required[index] = false;
241 }
240} 242}
241 243
242void is31fl3741_set_pwm_buffer(const is31fl3741_led_t *pled, uint8_t red, uint8_t green, uint8_t blue) { 244void is31fl3741_set_pwm_buffer(const is31fl3741_led_t *pled, uint8_t red, uint8_t green, uint8_t blue) {
243 g_pwm_buffer[pled->driver][pled->r] = red; 245 g_pwm_buffer[pled->driver][pled->r] = red;
244 g_pwm_buffer[pled->driver][pled->g] = green; 246 g_pwm_buffer[pled->driver][pled->g] = green;
245 g_pwm_buffer[pled->driver][pled->b] = blue; 247 g_pwm_buffer[pled->driver][pled->b] = blue;
246
247 g_pwm_buffer_update_required[pled->driver] = true; 248 g_pwm_buffer_update_required[pled->driver] = true;
248} 249}
249 250
@@ -268,10 +269,9 @@ void is31fl3741_update_led_control_registers(uint8_t addr, uint8_t index) {
268} 269}
269 270
270void is31fl3741_set_scaling_registers(const is31fl3741_led_t *pled, uint8_t red, uint8_t green, uint8_t blue) { 271void is31fl3741_set_scaling_registers(const is31fl3741_led_t *pled, uint8_t red, uint8_t green, uint8_t blue) {
271 g_scaling_registers[pled->driver][pled->r] = red; 272 g_scaling_registers[pled->driver][pled->r] = red;
272 g_scaling_registers[pled->driver][pled->g] = green; 273 g_scaling_registers[pled->driver][pled->g] = green;
273 g_scaling_registers[pled->driver][pled->b] = blue; 274 g_scaling_registers[pled->driver][pled->b] = blue;
274
275 g_scaling_registers_update_required[pled->driver] = true; 275 g_scaling_registers_update_required[pled->driver] = true;
276} 276}
277 277
diff --git a/drivers/led/issi/is31fl3742a-mono.c b/drivers/led/issi/is31fl3742a-mono.c
index 7d9095429d..29e932468a 100644
--- a/drivers/led/issi/is31fl3742a-mono.c
+++ b/drivers/led/issi/is31fl3742a-mono.c
@@ -1,3 +1,23 @@
1/* Copyright 2017 Jason Williams
2 * Copyright 2018 Jack Humbert
3 * Copyright 2018 Yiancar
4 * Copyright 2020 MelGeek
5 * Copyright 2021 MasterSpoon
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
1#include "is31fl3742a-mono.h" 21#include "is31fl3742a-mono.h"
2#include <string.h> 22#include <string.h>
3#include "i2c_master.h" 23#include "i2c_master.h"
@@ -146,12 +166,14 @@ void is31fl3742a_init(uint8_t addr) {
146 166
147void is31fl3742a_set_value(int index, uint8_t value) { 167void is31fl3742a_set_value(int index, uint8_t value) {
148 is31fl3742a_led_t led; 168 is31fl3742a_led_t led;
169
149 if (index >= 0 && index < IS31FL3742A_LED_COUNT) { 170 if (index >= 0 && index < IS31FL3742A_LED_COUNT) {
150 memcpy_P(&led, (&g_is31fl3742a_leds[index]), sizeof(led)); 171 memcpy_P(&led, (&g_is31fl3742a_leds[index]), sizeof(led));
151 172
152 if (g_pwm_buffer[led.driver][led.v] == value) { 173 if (g_pwm_buffer[led.driver][led.v] == value) {
153 return; 174 return;
154 } 175 }
176
155 g_pwm_buffer[led.driver][led.v] = value; 177 g_pwm_buffer[led.driver][led.v] = value;
156 g_pwm_buffer_update_required[led.driver] = true; 178 g_pwm_buffer_update_required[led.driver] = true;
157 } 179 }
@@ -167,8 +189,7 @@ void is31fl3742a_set_scaling_register(uint8_t index, uint8_t value) {
167 is31fl3742a_led_t led; 189 is31fl3742a_led_t led;
168 memcpy_P(&led, (&g_is31fl3742a_leds[index]), sizeof(led)); 190 memcpy_P(&led, (&g_is31fl3742a_leds[index]), sizeof(led));
169 191
170 g_scaling_registers[led.driver][led.v] = value; 192 g_scaling_registers[led.driver][led.v] = value;
171
172 g_scaling_registers_update_required[led.driver] = true; 193 g_scaling_registers_update_required[led.driver] = true;
173} 194}
174 195
@@ -177,6 +198,7 @@ void is31fl3742a_update_pwm_buffers(uint8_t addr, uint8_t index) {
177 is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_PWM); 198 is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_PWM);
178 199
179 is31fl3742a_write_pwm_buffer(addr, g_pwm_buffer[index]); 200 is31fl3742a_write_pwm_buffer(addr, g_pwm_buffer[index]);
201
180 g_pwm_buffer_update_required[index] = false; 202 g_pwm_buffer_update_required[index] = false;
181 } 203 }
182} 204}
@@ -188,6 +210,7 @@ void is31fl3742a_update_scaling_registers(uint8_t addr, uint8_t index) {
188 for (int i = 0; i < IS31FL3742A_SCALING_REGISTER_COUNT; i++) { 210 for (int i = 0; i < IS31FL3742A_SCALING_REGISTER_COUNT; i++) {
189 is31fl3742a_write_register(addr, i, g_scaling_registers[index][i]); 211 is31fl3742a_write_register(addr, i, g_scaling_registers[index][i]);
190 } 212 }
213
191 g_scaling_registers_update_required[index] = false; 214 g_scaling_registers_update_required[index] = false;
192 } 215 }
193} 216}
diff --git a/drivers/led/issi/is31fl3742a.c b/drivers/led/issi/is31fl3742a.c
index 766ba0ba34..9b9a11ff32 100644
--- a/drivers/led/issi/is31fl3742a.c
+++ b/drivers/led/issi/is31fl3742a.c
@@ -1,3 +1,23 @@
1/* Copyright 2017 Jason Williams
2 * Copyright 2018 Jack Humbert
3 * Copyright 2018 Yiancar
4 * Copyright 2020 MelGeek
5 * Copyright 2021 MasterSpoon
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
1#include "is31fl3742a.h" 21#include "is31fl3742a.h"
2#include <string.h> 22#include <string.h>
3#include "i2c_master.h" 23#include "i2c_master.h"
@@ -146,12 +166,14 @@ void is31fl3742a_init(uint8_t addr) {
146 166
147void is31fl3742a_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { 167void is31fl3742a_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
148 is31fl3742a_led_t led; 168 is31fl3742a_led_t led;
169
149 if (index >= 0 && index < IS31FL3742A_LED_COUNT) { 170 if (index >= 0 && index < IS31FL3742A_LED_COUNT) {
150 memcpy_P(&led, (&g_is31fl3742a_leds[index]), sizeof(led)); 171 memcpy_P(&led, (&g_is31fl3742a_leds[index]), sizeof(led));
151 172
152 if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) { 173 if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
153 return; 174 return;
154 } 175 }
176
155 g_pwm_buffer[led.driver][led.r] = red; 177 g_pwm_buffer[led.driver][led.r] = red;
156 g_pwm_buffer[led.driver][led.g] = green; 178 g_pwm_buffer[led.driver][led.g] = green;
157 g_pwm_buffer[led.driver][led.b] = blue; 179 g_pwm_buffer[led.driver][led.b] = blue;
@@ -169,10 +191,9 @@ void is31fl3742a_set_scaling_register(uint8_t index, uint8_t red, uint8_t green,
169 is31fl3742a_led_t led; 191 is31fl3742a_led_t led;
170 memcpy_P(&led, (&g_is31fl3742a_leds[index]), sizeof(led)); 192 memcpy_P(&led, (&g_is31fl3742a_leds[index]), sizeof(led));
171 193
172 g_scaling_registers[led.driver][led.r] = red; 194 g_scaling_registers[led.driver][led.r] = red;
173 g_scaling_registers[led.driver][led.g] = green; 195 g_scaling_registers[led.driver][led.g] = green;
174 g_scaling_registers[led.driver][led.b] = blue; 196 g_scaling_registers[led.driver][led.b] = blue;
175
176 g_scaling_registers_update_required[led.driver] = true; 197 g_scaling_registers_update_required[led.driver] = true;
177} 198}
178 199
@@ -181,6 +202,7 @@ void is31fl3742a_update_pwm_buffers(uint8_t addr, uint8_t index) {
181 is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_PWM); 202 is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_PWM);
182 203
183 is31fl3742a_write_pwm_buffer(addr, g_pwm_buffer[index]); 204 is31fl3742a_write_pwm_buffer(addr, g_pwm_buffer[index]);
205
184 g_pwm_buffer_update_required[index] = false; 206 g_pwm_buffer_update_required[index] = false;
185 } 207 }
186} 208}
@@ -192,6 +214,7 @@ void is31fl3742a_update_scaling_registers(uint8_t addr, uint8_t index) {
192 for (int i = 0; i < IS31FL3742A_SCALING_REGISTER_COUNT; i++) { 214 for (int i = 0; i < IS31FL3742A_SCALING_REGISTER_COUNT; i++) {
193 is31fl3742a_write_register(addr, i, g_scaling_registers[index][i]); 215 is31fl3742a_write_register(addr, i, g_scaling_registers[index][i]);
194 } 216 }
217
195 g_scaling_registers_update_required[index] = false; 218 g_scaling_registers_update_required[index] = false;
196 } 219 }
197} 220}
diff --git a/drivers/led/issi/is31fl3743a-mono.c b/drivers/led/issi/is31fl3743a-mono.c
index f8340222e4..8bb8836204 100644
--- a/drivers/led/issi/is31fl3743a-mono.c
+++ b/drivers/led/issi/is31fl3743a-mono.c
@@ -1,3 +1,23 @@
1/* Copyright 2017 Jason Williams
2 * Copyright 2018 Jack Humbert
3 * Copyright 2018 Yiancar
4 * Copyright 2020 MelGeek
5 * Copyright 2021 MasterSpoon
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
1#include "is31fl3743a-mono.h" 21#include "is31fl3743a-mono.h"
2#include <string.h> 22#include <string.h>
3#include "i2c_master.h" 23#include "i2c_master.h"
@@ -155,12 +175,14 @@ void is31fl3743a_init(uint8_t addr, uint8_t sync) {
155 175
156void is31fl3743a_set_value(int index, uint8_t value) { 176void is31fl3743a_set_value(int index, uint8_t value) {
157 is31fl3743a_led_t led; 177 is31fl3743a_led_t led;
178
158 if (index >= 0 && index < IS31FL3743A_LED_COUNT) { 179 if (index >= 0 && index < IS31FL3743A_LED_COUNT) {
159 memcpy_P(&led, (&g_is31fl3743a_leds[index]), sizeof(led)); 180 memcpy_P(&led, (&g_is31fl3743a_leds[index]), sizeof(led));
160 181
161 if (g_pwm_buffer[led.driver][led.v] == value) { 182 if (g_pwm_buffer[led.driver][led.v] == value) {
162 return; 183 return;
163 } 184 }
185
164 g_pwm_buffer_update_required[led.driver] = true; 186 g_pwm_buffer_update_required[led.driver] = true;
165 g_pwm_buffer[led.driver][led.v] = value; 187 g_pwm_buffer[led.driver][led.v] = value;
166 } 188 }
@@ -176,8 +198,7 @@ void is31fl3743a_set_scaling_register(uint8_t index, uint8_t value) {
176 is31fl3743a_led_t led; 198 is31fl3743a_led_t led;
177 memcpy_P(&led, (&g_is31fl3743a_leds[index]), sizeof(led)); 199 memcpy_P(&led, (&g_is31fl3743a_leds[index]), sizeof(led));
178 200
179 g_scaling_registers[led.driver][led.v] = value; 201 g_scaling_registers[led.driver][led.v] = value;
180
181 g_scaling_registers_update_required[led.driver] = true; 202 g_scaling_registers_update_required[led.driver] = true;
182} 203}
183 204
@@ -186,9 +207,9 @@ void is31fl3743a_update_pwm_buffers(uint8_t addr, uint8_t index) {
186 is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_PWM); 207 is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_PWM);
187 208
188 is31fl3743a_write_pwm_buffer(addr, g_pwm_buffer[index]); 209 is31fl3743a_write_pwm_buffer(addr, g_pwm_buffer[index]);
189 }
190 210
191 g_pwm_buffer_update_required[index] = false; 211 g_pwm_buffer_update_required[index] = false;
212 }
192} 213}
193 214
194void is31fl3743a_update_scaling_registers(uint8_t addr, uint8_t index) { 215void is31fl3743a_update_scaling_registers(uint8_t addr, uint8_t index) {
@@ -198,6 +219,7 @@ void is31fl3743a_update_scaling_registers(uint8_t addr, uint8_t index) {
198 for (int i = 0; i < IS31FL3743A_SCALING_REGISTER_COUNT; i++) { 219 for (int i = 0; i < IS31FL3743A_SCALING_REGISTER_COUNT; i++) {
199 is31fl3743a_write_register(addr, i + 1, g_scaling_registers[index][i]); 220 is31fl3743a_write_register(addr, i + 1, g_scaling_registers[index][i]);
200 } 221 }
222
201 g_scaling_registers_update_required[index] = false; 223 g_scaling_registers_update_required[index] = false;
202 } 224 }
203} 225}
diff --git a/drivers/led/issi/is31fl3743a.c b/drivers/led/issi/is31fl3743a.c
index 997e1c9147..2e47ec83f9 100644
--- a/drivers/led/issi/is31fl3743a.c
+++ b/drivers/led/issi/is31fl3743a.c
@@ -1,3 +1,23 @@
1/* Copyright 2017 Jason Williams
2 * Copyright 2018 Jack Humbert
3 * Copyright 2018 Yiancar
4 * Copyright 2020 MelGeek
5 * Copyright 2021 MasterSpoon
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
1#include "is31fl3743a.h" 21#include "is31fl3743a.h"
2#include <string.h> 22#include <string.h>
3#include "i2c_master.h" 23#include "i2c_master.h"
@@ -155,12 +175,14 @@ void is31fl3743a_init(uint8_t addr, uint8_t sync) {
155 175
156void is31fl3743a_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { 176void is31fl3743a_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
157 is31fl3743a_led_t led; 177 is31fl3743a_led_t led;
178
158 if (index >= 0 && index < IS31FL3743A_LED_COUNT) { 179 if (index >= 0 && index < IS31FL3743A_LED_COUNT) {
159 memcpy_P(&led, (&g_is31fl3743a_leds[index]), sizeof(led)); 180 memcpy_P(&led, (&g_is31fl3743a_leds[index]), sizeof(led));
160 181
161 if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) { 182 if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
162 return; 183 return;
163 } 184 }
185
164 g_pwm_buffer_update_required[led.driver] = true; 186 g_pwm_buffer_update_required[led.driver] = true;
165 g_pwm_buffer[led.driver][led.r] = red; 187 g_pwm_buffer[led.driver][led.r] = red;
166 g_pwm_buffer[led.driver][led.g] = green; 188 g_pwm_buffer[led.driver][led.g] = green;
@@ -178,10 +200,9 @@ void is31fl3743a_set_scaling_register(uint8_t index, uint8_t red, uint8_t green,
178 is31fl3743a_led_t led; 200 is31fl3743a_led_t led;
179 memcpy_P(&led, (&g_is31fl3743a_leds[index]), sizeof(led)); 201 memcpy_P(&led, (&g_is31fl3743a_leds[index]), sizeof(led));
180 202
181 g_scaling_registers[led.driver][led.r] = red; 203 g_scaling_registers[led.driver][led.r] = red;
182 g_scaling_registers[led.driver][led.g] = green; 204 g_scaling_registers[led.driver][led.g] = green;
183 g_scaling_registers[led.driver][led.b] = blue; 205 g_scaling_registers[led.driver][led.b] = blue;
184
185 g_scaling_registers_update_required[led.driver] = true; 206 g_scaling_registers_update_required[led.driver] = true;
186} 207}
187 208
@@ -190,9 +211,9 @@ void is31fl3743a_update_pwm_buffers(uint8_t addr, uint8_t index) {
190 is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_PWM); 211 is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_PWM);
191 212
192 is31fl3743a_write_pwm_buffer(addr, g_pwm_buffer[index]); 213 is31fl3743a_write_pwm_buffer(addr, g_pwm_buffer[index]);
193 }
194 214
195 g_pwm_buffer_update_required[index] = false; 215 g_pwm_buffer_update_required[index] = false;
216 }
196} 217}
197 218
198void is31fl3743a_update_scaling_registers(uint8_t addr, uint8_t index) { 219void is31fl3743a_update_scaling_registers(uint8_t addr, uint8_t index) {
@@ -202,6 +223,7 @@ void is31fl3743a_update_scaling_registers(uint8_t addr, uint8_t index) {
202 for (int i = 0; i < IS31FL3743A_SCALING_REGISTER_COUNT; i++) { 223 for (int i = 0; i < IS31FL3743A_SCALING_REGISTER_COUNT; i++) {
203 is31fl3743a_write_register(addr, i + 1, g_scaling_registers[index][i]); 224 is31fl3743a_write_register(addr, i + 1, g_scaling_registers[index][i]);
204 } 225 }
226
205 g_scaling_registers_update_required[index] = false; 227 g_scaling_registers_update_required[index] = false;
206 } 228 }
207} 229}
diff --git a/drivers/led/issi/is31fl3745-mono.c b/drivers/led/issi/is31fl3745-mono.c
index c99f397f53..51e4cb9dde 100644
--- a/drivers/led/issi/is31fl3745-mono.c
+++ b/drivers/led/issi/is31fl3745-mono.c
@@ -1,3 +1,23 @@
1/* Copyright 2017 Jason Williams
2 * Copyright 2018 Jack Humbert
3 * Copyright 2018 Yiancar
4 * Copyright 2020 MelGeek
5 * Copyright 2021 MasterSpoon
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
1#include "is31fl3745-mono.h" 21#include "is31fl3745-mono.h"
2#include <string.h> 22#include <string.h>
3#include "i2c_master.h" 23#include "i2c_master.h"
@@ -155,12 +175,14 @@ void is31fl3745_init(uint8_t addr, uint8_t sync) {
155 175
156void is31fl3745_set_value(int index, uint8_t value) { 176void is31fl3745_set_value(int index, uint8_t value) {
157 is31fl3745_led_t led; 177 is31fl3745_led_t led;
178
158 if (index >= 0 && index < IS31FL3745_LED_COUNT) { 179 if (index >= 0 && index < IS31FL3745_LED_COUNT) {
159 memcpy_P(&led, (&g_is31fl3745_leds[index]), sizeof(led)); 180 memcpy_P(&led, (&g_is31fl3745_leds[index]), sizeof(led));
160 181
161 if (g_pwm_buffer[led.driver][led.v] == value) { 182 if (g_pwm_buffer[led.driver][led.v] == value) {
162 return; 183 return;
163 } 184 }
185
164 g_pwm_buffer_update_required[led.driver] = true; 186 g_pwm_buffer_update_required[led.driver] = true;
165 g_pwm_buffer[led.driver][led.v] = value; 187 g_pwm_buffer[led.driver][led.v] = value;
166 } 188 }
@@ -176,8 +198,7 @@ void is31fl3745_set_scaling_register(uint8_t index, uint8_t value) {
176 is31fl3745_led_t led; 198 is31fl3745_led_t led;
177 memcpy_P(&led, (&g_is31fl3745_leds[index]), sizeof(led)); 199 memcpy_P(&led, (&g_is31fl3745_leds[index]), sizeof(led));
178 200
179 g_scaling_registers[led.driver][led.v] = value; 201 g_scaling_registers[led.driver][led.v] = value;
180
181 g_scaling_registers_update_required[led.driver] = true; 202 g_scaling_registers_update_required[led.driver] = true;
182} 203}
183 204
@@ -186,9 +207,9 @@ void is31fl3745_update_pwm_buffers(uint8_t addr, uint8_t index) {
186 is31fl3745_select_page(addr, IS31FL3745_COMMAND_PWM); 207 is31fl3745_select_page(addr, IS31FL3745_COMMAND_PWM);
187 208
188 is31fl3745_write_pwm_buffer(addr, g_pwm_buffer[index]); 209 is31fl3745_write_pwm_buffer(addr, g_pwm_buffer[index]);
189 }
190 210
191 g_pwm_buffer_update_required[index] = false; 211 g_pwm_buffer_update_required[index] = false;
212 }
192} 213}
193 214
194void is31fl3745_update_scaling_registers(uint8_t addr, uint8_t index) { 215void is31fl3745_update_scaling_registers(uint8_t addr, uint8_t index) {
@@ -198,6 +219,7 @@ void is31fl3745_update_scaling_registers(uint8_t addr, uint8_t index) {
198 for (int i = 0; i < IS31FL3745_SCALING_REGISTER_COUNT; i++) { 219 for (int i = 0; i < IS31FL3745_SCALING_REGISTER_COUNT; i++) {
199 is31fl3745_write_register(addr, i + 1, g_scaling_registers[index][i]); 220 is31fl3745_write_register(addr, i + 1, g_scaling_registers[index][i]);
200 } 221 }
222
201 g_scaling_registers_update_required[index] = false; 223 g_scaling_registers_update_required[index] = false;
202 } 224 }
203} 225}
diff --git a/drivers/led/issi/is31fl3745.c b/drivers/led/issi/is31fl3745.c
index 563fe3c115..63e5e08ace 100644
--- a/drivers/led/issi/is31fl3745.c
+++ b/drivers/led/issi/is31fl3745.c
@@ -1,3 +1,23 @@
1/* Copyright 2017 Jason Williams
2 * Copyright 2018 Jack Humbert
3 * Copyright 2018 Yiancar
4 * Copyright 2020 MelGeek
5 * Copyright 2021 MasterSpoon
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
1#include "is31fl3745.h" 21#include "is31fl3745.h"
2#include <string.h> 22#include <string.h>
3#include "i2c_master.h" 23#include "i2c_master.h"
@@ -155,12 +175,14 @@ void is31fl3745_init(uint8_t addr, uint8_t sync) {
155 175
156void is31fl3745_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { 176void is31fl3745_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
157 is31fl3745_led_t led; 177 is31fl3745_led_t led;
178
158 if (index >= 0 && index < IS31FL3745_LED_COUNT) { 179 if (index >= 0 && index < IS31FL3745_LED_COUNT) {
159 memcpy_P(&led, (&g_is31fl3745_leds[index]), sizeof(led)); 180 memcpy_P(&led, (&g_is31fl3745_leds[index]), sizeof(led));
160 181
161 if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) { 182 if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
162 return; 183 return;
163 } 184 }
185
164 g_pwm_buffer_update_required[led.driver] = true; 186 g_pwm_buffer_update_required[led.driver] = true;
165 g_pwm_buffer[led.driver][led.r] = red; 187 g_pwm_buffer[led.driver][led.r] = red;
166 g_pwm_buffer[led.driver][led.g] = green; 188 g_pwm_buffer[led.driver][led.g] = green;
@@ -178,10 +200,9 @@ void is31fl3745_set_scaling_register(uint8_t index, uint8_t red, uint8_t green,
178 is31fl3745_led_t led; 200 is31fl3745_led_t led;
179 memcpy_P(&led, (&g_is31fl3745_leds[index]), sizeof(led)); 201 memcpy_P(&led, (&g_is31fl3745_leds[index]), sizeof(led));
180 202
181 g_scaling_registers[led.driver][led.r] = red; 203 g_scaling_registers[led.driver][led.r] = red;
182 g_scaling_registers[led.driver][led.g] = green; 204 g_scaling_registers[led.driver][led.g] = green;
183 g_scaling_registers[led.driver][led.b] = blue; 205 g_scaling_registers[led.driver][led.b] = blue;
184
185 g_scaling_registers_update_required[led.driver] = true; 206 g_scaling_registers_update_required[led.driver] = true;
186} 207}
187 208
@@ -190,9 +211,9 @@ void is31fl3745_update_pwm_buffers(uint8_t addr, uint8_t index) {
190 is31fl3745_select_page(addr, IS31FL3745_COMMAND_PWM); 211 is31fl3745_select_page(addr, IS31FL3745_COMMAND_PWM);
191 212
192 is31fl3745_write_pwm_buffer(addr, g_pwm_buffer[index]); 213 is31fl3745_write_pwm_buffer(addr, g_pwm_buffer[index]);
193 }
194 214
195 g_pwm_buffer_update_required[index] = false; 215 g_pwm_buffer_update_required[index] = false;
216 }
196} 217}
197 218
198void is31fl3745_update_scaling_registers(uint8_t addr, uint8_t index) { 219void is31fl3745_update_scaling_registers(uint8_t addr, uint8_t index) {
@@ -202,6 +223,7 @@ void is31fl3745_update_scaling_registers(uint8_t addr, uint8_t index) {
202 for (int i = 0; i < IS31FL3745_SCALING_REGISTER_COUNT; i++) { 223 for (int i = 0; i < IS31FL3745_SCALING_REGISTER_COUNT; i++) {
203 is31fl3745_write_register(addr, i + 1, g_scaling_registers[index][i]); 224 is31fl3745_write_register(addr, i + 1, g_scaling_registers[index][i]);
204 } 225 }
226
205 g_scaling_registers_update_required[index] = false; 227 g_scaling_registers_update_required[index] = false;
206 } 228 }
207} 229}
diff --git a/drivers/led/issi/is31fl3746a-mono.c b/drivers/led/issi/is31fl3746a-mono.c
index e0c29f3bd3..3dd97833dd 100644
--- a/drivers/led/issi/is31fl3746a-mono.c
+++ b/drivers/led/issi/is31fl3746a-mono.c
@@ -1,3 +1,23 @@
1/* Copyright 2017 Jason Williams
2 * Copyright 2018 Jack Humbert
3 * Copyright 2018 Yiancar
4 * Copyright 2020 MelGeek
5 * Copyright 2021 MasterSpoon
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
1#include "is31fl3746a-mono.h" 21#include "is31fl3746a-mono.h"
2#include <string.h> 22#include <string.h>
3#include "i2c_master.h" 23#include "i2c_master.h"
@@ -147,12 +167,14 @@ void is31fl3746a_init(uint8_t addr) {
147 167
148void is31fl3746a_set_color(int index, uint8_t value) { 168void is31fl3746a_set_color(int index, uint8_t value) {
149 is31fl3746a_led_t led; 169 is31fl3746a_led_t led;
170
150 if (index >= 0 && index < IS31FL3746A_LED_COUNT) { 171 if (index >= 0 && index < IS31FL3746A_LED_COUNT) {
151 memcpy_P(&led, (&g_is31fl3746a_leds[index]), sizeof(led)); 172 memcpy_P(&led, (&g_is31fl3746a_leds[index]), sizeof(led));
152 173
153 if (g_pwm_buffer[led.driver][led.v] == value) { 174 if (g_pwm_buffer[led.driver][led.v] == value) {
154 return; 175 return;
155 } 176 }
177
156 g_pwm_buffer_update_required[led.driver] = true; 178 g_pwm_buffer_update_required[led.driver] = true;
157 g_pwm_buffer[led.driver][led.v] = value; 179 g_pwm_buffer[led.driver][led.v] = value;
158 } 180 }
@@ -168,8 +190,7 @@ void is31fl3746a_set_scaling_register(uint8_t index, uint8_t value) {
168 is31fl3746a_led_t led; 190 is31fl3746a_led_t led;
169 memcpy_P(&led, (&g_is31fl3746a_leds[index]), sizeof(led)); 191 memcpy_P(&led, (&g_is31fl3746a_leds[index]), sizeof(led));
170 192
171 g_scaling_registers[led.driver][led.v] = value; 193 g_scaling_registers[led.driver][led.v] = value;
172
173 g_scaling_registers_update_required[led.driver] = true; 194 g_scaling_registers_update_required[led.driver] = true;
174} 195}
175 196
@@ -178,9 +199,9 @@ void is31fl3746a_update_pwm_buffers(uint8_t addr, uint8_t index) {
178 is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_PWM); 199 is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_PWM);
179 200
180 is31fl3746a_write_pwm_buffer(addr, g_pwm_buffer[index]); 201 is31fl3746a_write_pwm_buffer(addr, g_pwm_buffer[index]);
181 }
182 202
183 g_pwm_buffer_update_required[index] = false; 203 g_pwm_buffer_update_required[index] = false;
204 }
184} 205}
185 206
186void is31fl3746a_update_scaling_registers(uint8_t addr, uint8_t index) { 207void is31fl3746a_update_scaling_registers(uint8_t addr, uint8_t index) {
@@ -190,6 +211,7 @@ void is31fl3746a_update_scaling_registers(uint8_t addr, uint8_t index) {
190 for (int i = 0; i < IS31FL3746A_SCALING_REGISTER_COUNT; i++) { 211 for (int i = 0; i < IS31FL3746A_SCALING_REGISTER_COUNT; i++) {
191 is31fl3746a_write_register(addr, i + 1, g_scaling_registers[index][i]); 212 is31fl3746a_write_register(addr, i + 1, g_scaling_registers[index][i]);
192 } 213 }
214
193 g_scaling_registers_update_required[index] = false; 215 g_scaling_registers_update_required[index] = false;
194 } 216 }
195} 217}
diff --git a/drivers/led/issi/is31fl3746a.c b/drivers/led/issi/is31fl3746a.c
index 5a3001f02f..4da63313e8 100644
--- a/drivers/led/issi/is31fl3746a.c
+++ b/drivers/led/issi/is31fl3746a.c
@@ -1,3 +1,23 @@
1/* Copyright 2017 Jason Williams
2 * Copyright 2018 Jack Humbert
3 * Copyright 2018 Yiancar
4 * Copyright 2020 MelGeek
5 * Copyright 2021 MasterSpoon
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
1#include "is31fl3746a.h" 21#include "is31fl3746a.h"
2#include <string.h> 22#include <string.h>
3#include "i2c_master.h" 23#include "i2c_master.h"
@@ -147,12 +167,14 @@ void is31fl3746a_init(uint8_t addr) {
147 167
148void is31fl3746a_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { 168void is31fl3746a_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
149 is31fl3746a_led_t led; 169 is31fl3746a_led_t led;
170
150 if (index >= 0 && index < IS31FL3746A_LED_COUNT) { 171 if (index >= 0 && index < IS31FL3746A_LED_COUNT) {
151 memcpy_P(&led, (&g_is31fl3746a_leds[index]), sizeof(led)); 172 memcpy_P(&led, (&g_is31fl3746a_leds[index]), sizeof(led));
152 173
153 if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) { 174 if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
154 return; 175 return;
155 } 176 }
177
156 g_pwm_buffer_update_required[led.driver] = true; 178 g_pwm_buffer_update_required[led.driver] = true;
157 g_pwm_buffer[led.driver][led.r] = red; 179 g_pwm_buffer[led.driver][led.r] = red;
158 g_pwm_buffer[led.driver][led.g] = green; 180 g_pwm_buffer[led.driver][led.g] = green;
@@ -170,10 +192,9 @@ void is31fl3746a_set_scaling_register(uint8_t index, uint8_t red, uint8_t green,
170 is31fl3746a_led_t led; 192 is31fl3746a_led_t led;
171 memcpy_P(&led, (&g_is31fl3746a_leds[index]), sizeof(led)); 193 memcpy_P(&led, (&g_is31fl3746a_leds[index]), sizeof(led));
172 194
173 g_scaling_registers[led.driver][led.r] = red; 195 g_scaling_registers[led.driver][led.r] = red;
174 g_scaling_registers[led.driver][led.g] = green; 196 g_scaling_registers[led.driver][led.g] = green;
175 g_scaling_registers[led.driver][led.b] = blue; 197 g_scaling_registers[led.driver][led.b] = blue;
176
177 g_scaling_registers_update_required[led.driver] = true; 198 g_scaling_registers_update_required[led.driver] = true;
178} 199}
179 200
@@ -182,9 +203,9 @@ void is31fl3746a_update_pwm_buffers(uint8_t addr, uint8_t index) {
182 is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_PWM); 203 is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_PWM);
183 204
184 is31fl3746a_write_pwm_buffer(addr, g_pwm_buffer[index]); 205 is31fl3746a_write_pwm_buffer(addr, g_pwm_buffer[index]);
185 }
186 206
187 g_pwm_buffer_update_required[index] = false; 207 g_pwm_buffer_update_required[index] = false;
208 }
188} 209}
189 210
190void is31fl3746a_update_scaling_registers(uint8_t addr, uint8_t index) { 211void is31fl3746a_update_scaling_registers(uint8_t addr, uint8_t index) {
@@ -194,6 +215,7 @@ void is31fl3746a_update_scaling_registers(uint8_t addr, uint8_t index) {
194 for (int i = 0; i < IS31FL3746A_SCALING_REGISTER_COUNT; i++) { 215 for (int i = 0; i < IS31FL3746A_SCALING_REGISTER_COUNT; i++) {
195 is31fl3746a_write_register(addr, i + 1, g_scaling_registers[index][i]); 216 is31fl3746a_write_register(addr, i + 1, g_scaling_registers[index][i]);
196 } 217 }
218
197 g_scaling_registers_update_required[index] = false; 219 g_scaling_registers_update_required[index] = false;
198 } 220 }
199} 221}
diff --git a/drivers/led/snled27351-mono.c b/drivers/led/snled27351-mono.c
index 4519243e0e..93fea8b515 100644
--- a/drivers/led/snled27351-mono.c
+++ b/drivers/led/snled27351-mono.c
@@ -172,7 +172,6 @@ void snled27351_init(uint8_t addr) {
172 172
173 snled27351_select_page(addr, SNLED27351_COMMAND_LED_CONTROL); 173 snled27351_select_page(addr, SNLED27351_COMMAND_LED_CONTROL);
174 174
175 // Enable LEDs ON/OFF
176 for (int i = 0; i < SNLED27351_LED_CONTROL_ON_OFF_LENGTH; i++) { 175 for (int i = 0; i < SNLED27351_LED_CONTROL_ON_OFF_LENGTH; i++) {
177 snled27351_write_register(addr, i, 0xFF); 176 snled27351_write_register(addr, i, 0xFF);
178 } 177 }
@@ -191,6 +190,7 @@ void snled27351_set_value(int index, uint8_t value) {
191 if (g_pwm_buffer[led.driver][led.v] == value) { 190 if (g_pwm_buffer[led.driver][led.v] == value) {
192 return; 191 return;
193 } 192 }
193
194 g_pwm_buffer[led.driver][led.v] = value; 194 g_pwm_buffer[led.driver][led.v] = value;
195 g_pwm_buffer_update_required[led.driver] = true; 195 g_pwm_buffer_update_required[led.driver] = true;
196 } 196 }
@@ -225,9 +225,10 @@ void snled27351_update_pwm_buffers(uint8_t addr, uint8_t index) {
225 // If any of the transactions fail we risk writing dirty PG0, 225 // If any of the transactions fail we risk writing dirty PG0,
226 // refresh page 0 just in case. 226 // refresh page 0 just in case.
227 if (!snled27351_write_pwm_buffer(addr, g_pwm_buffer[index])) { 227 if (!snled27351_write_pwm_buffer(addr, g_pwm_buffer[index])) {
228 g_led_control_registers_update_required[index] = true; 228 g_pwm_buffer_update_required[index] = true;
229 } 229 }
230 } 230 }
231
231 g_pwm_buffer_update_required[index] = false; 232 g_pwm_buffer_update_required[index] = false;
232} 233}
233 234
@@ -238,8 +239,9 @@ void snled27351_update_led_control_registers(uint8_t addr, uint8_t index) {
238 for (int i = 0; i < SNLED27351_LED_CONTROL_REGISTER_COUNT; i++) { 239 for (int i = 0; i < SNLED27351_LED_CONTROL_REGISTER_COUNT; i++) {
239 snled27351_write_register(addr, i, g_led_control_registers[index][i]); 240 snled27351_write_register(addr, i, g_led_control_registers[index][i]);
240 } 241 }
242
243 g_led_control_registers_update_required[index] = false;
241 } 244 }
242 g_led_control_registers_update_required[index] = false;
243} 245}
244 246
245void snled27351_flush(void) { 247void snled27351_flush(void) {
diff --git a/drivers/led/snled27351.c b/drivers/led/snled27351.c
index d985e4c5f1..28f770d0cd 100644
--- a/drivers/led/snled27351.c
+++ b/drivers/led/snled27351.c
@@ -189,6 +189,7 @@ void snled27351_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
189 if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) { 189 if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
190 return; 190 return;
191 } 191 }
192
192 g_pwm_buffer[led.driver][led.r] = red; 193 g_pwm_buffer[led.driver][led.r] = red;
193 g_pwm_buffer[led.driver][led.g] = green; 194 g_pwm_buffer[led.driver][led.g] = green;
194 g_pwm_buffer[led.driver][led.b] = blue; 195 g_pwm_buffer[led.driver][led.b] = blue;
@@ -239,9 +240,10 @@ void snled27351_update_pwm_buffers(uint8_t addr, uint8_t index) {
239 // If any of the transactions fail we risk writing dirty PG0, 240 // If any of the transactions fail we risk writing dirty PG0,
240 // refresh page 0 just in case. 241 // refresh page 0 just in case.
241 if (!snled27351_write_pwm_buffer(addr, g_pwm_buffer[index])) { 242 if (!snled27351_write_pwm_buffer(addr, g_pwm_buffer[index])) {
242 g_led_control_registers_update_required[index] = true; 243 g_pwm_buffer_update_required[index] = true;
243 } 244 }
244 } 245 }
246
245 g_pwm_buffer_update_required[index] = false; 247 g_pwm_buffer_update_required[index] = false;
246} 248}
247 249
@@ -252,8 +254,9 @@ void snled27351_update_led_control_registers(uint8_t addr, uint8_t index) {
252 for (int i = 0; i < SNLED27351_LED_CONTROL_REGISTER_COUNT; i++) { 254 for (int i = 0; i < SNLED27351_LED_CONTROL_REGISTER_COUNT; i++) {
253 snled27351_write_register(addr, i, g_led_control_registers[index][i]); 255 snled27351_write_register(addr, i, g_led_control_registers[index][i]);
254 } 256 }
257
258 g_led_control_registers_update_required[index] = false;
255 } 259 }
256 g_led_control_registers_update_required[index] = false;
257} 260}
258 261
259void snled27351_flush(void) { 262void snled27351_flush(void) {