aboutsummaryrefslogtreecommitdiff
path: root/drivers/led/issi/is31fl3741.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/led/issi/is31fl3741.h')
-rw-r--r--drivers/led/issi/is31fl3741.h420
1 files changed, 420 insertions, 0 deletions
diff --git a/drivers/led/issi/is31fl3741.h b/drivers/led/issi/is31fl3741.h
new file mode 100644
index 000000000..2df0c5b1a
--- /dev/null
+++ b/drivers/led/issi/is31fl3741.h
@@ -0,0 +1,420 @@
1/* Copyright 2017 Jason Williams
2 * Copyright 2018 Jack Humbert
3 * Copyright 2018 Yiancar
4 * Copyright 2020 MelGeek
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#pragma once
21
22#include <stdint.h>
23#include <stdbool.h>
24
25typedef struct is31_led {
26 uint32_t driver : 2;
27 uint32_t r : 10;
28 uint32_t g : 10;
29 uint32_t b : 10;
30} __attribute__((packed)) is31_led;
31
32extern const is31_led g_is31_leds[DRIVER_LED_TOTAL];
33
34void IS31FL3741_init(uint8_t addr);
35void IS31FL3741_write_register(uint8_t addr, uint8_t reg, uint8_t data);
36bool IS31FL3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
37
38void IS31FL3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
39void IS31FL3741_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
40
41void IS31FL3741_set_led_control_register(uint8_t index, bool red, bool green, bool blue);
42
43// This should not be called from an interrupt
44// (eg. from a timer interrupt).
45// Call this while idle (in between matrix scans).
46// If the buffer is dirty, it will update the driver with the buffer.
47void IS31FL3741_update_pwm_buffers(uint8_t addr1, uint8_t addr2);
48void IS31FL3741_update_led_control_registers(uint8_t addr1, uint8_t addr2);
49void IS31FL3741_set_scaling_registers(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);
50
51void IS31FL3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);
52
53#define CS1_SW1 0x00
54#define CS2_SW1 0x01
55#define CS3_SW1 0x02
56#define CS4_SW1 0x03
57#define CS5_SW1 0x04
58#define CS6_SW1 0x05
59#define CS7_SW1 0x06
60#define CS8_SW1 0x07
61#define CS9_SW1 0x08
62#define CS10_SW1 0x09
63#define CS11_SW1 0x0A
64#define CS12_SW1 0x0B
65#define CS13_SW1 0x0C
66#define CS14_SW1 0x0D
67#define CS15_SW1 0x0E
68#define CS16_SW1 0x0F
69#define CS17_SW1 0x10
70#define CS18_SW1 0x11
71#define CS19_SW1 0x12
72#define CS20_SW1 0x13
73#define CS21_SW1 0x14
74#define CS22_SW1 0x15
75#define CS23_SW1 0x16
76#define CS24_SW1 0x17
77#define CS25_SW1 0x18
78#define CS26_SW1 0x19
79#define CS27_SW1 0x1A
80#define CS28_SW1 0x1B
81#define CS29_SW1 0x1C
82#define CS30_SW1 0x1D
83
84#define CS1_SW2 0x1E
85#define CS2_SW2 0x1F
86#define CS3_SW2 0x20
87#define CS4_SW2 0x21
88#define CS5_SW2 0x22
89#define CS6_SW2 0x23
90#define CS7_SW2 0x24
91#define CS8_SW2 0x25
92#define CS9_SW2 0x26
93#define CS10_SW2 0x27
94#define CS11_SW2 0x28
95#define CS12_SW2 0x29
96#define CS13_SW2 0x2A
97#define CS14_SW2 0x2B
98#define CS15_SW2 0x2C
99#define CS16_SW2 0x2D
100#define CS17_SW2 0x2E
101#define CS18_SW2 0x2F
102#define CS19_SW2 0x30
103#define CS20_SW2 0x31
104#define CS21_SW2 0x32
105#define CS22_SW2 0x33
106#define CS23_SW2 0x34
107#define CS24_SW2 0x35
108#define CS25_SW2 0x36
109#define CS26_SW2 0x37
110#define CS27_SW2 0x38
111#define CS28_SW2 0x39
112#define CS29_SW2 0x3A
113#define CS30_SW2 0x3B
114
115#define CS1_SW3 0x3C
116#define CS2_SW3 0x3D
117#define CS3_SW3 0x3E
118#define CS4_SW3 0x3F
119#define CS5_SW3 0x40
120#define CS6_SW3 0x41
121#define CS7_SW3 0x42
122#define CS8_SW3 0x43
123#define CS9_SW3 0x44
124#define CS10_SW3 0x45
125#define CS11_SW3 0x46
126#define CS12_SW3 0x47
127#define CS13_SW3 0x48
128#define CS14_SW3 0x49
129#define CS15_SW3 0x4A
130#define CS16_SW3 0x4B
131#define CS17_SW3 0x4C
132#define CS18_SW3 0x4D
133#define CS19_SW3 0x4E
134#define CS20_SW3 0x4F
135#define CS21_SW3 0x50
136#define CS22_SW3 0x51
137#define CS23_SW3 0x52
138#define CS24_SW3 0x53
139#define CS25_SW3 0x54
140#define CS26_SW3 0x55
141#define CS27_SW3 0x56
142#define CS28_SW3 0x57
143#define CS29_SW3 0x58
144#define CS30_SW3 0x59
145
146#define CS1_SW4 0x5A
147#define CS2_SW4 0x5B
148#define CS3_SW4 0x5C
149#define CS4_SW4 0x5D
150#define CS5_SW4 0x5E
151#define CS6_SW4 0x5F
152#define CS7_SW4 0x60
153#define CS8_SW4 0x61
154#define CS9_SW4 0x62
155#define CS10_SW4 0x63
156#define CS11_SW4 0x64
157#define CS12_SW4 0x65
158#define CS13_SW4 0x66
159#define CS14_SW4 0x67
160#define CS15_SW4 0x68
161#define CS16_SW4 0x69
162#define CS17_SW4 0x6A
163#define CS18_SW4 0x6B
164#define CS19_SW4 0x6C
165#define CS20_SW4 0x6D
166#define CS21_SW4 0x6E
167#define CS22_SW4 0x6F
168#define CS23_SW4 0x70
169#define CS24_SW4 0x71
170#define CS25_SW4 0x72
171#define CS26_SW4 0x73
172#define CS27_SW4 0x74
173#define CS28_SW4 0x75
174#define CS29_SW4 0x76
175#define CS30_SW4 0x77
176
177#define CS1_SW5 0x78
178#define CS2_SW5 0x79
179#define CS3_SW5 0x7A
180#define CS4_SW5 0x7B
181#define CS5_SW5 0x7C
182#define CS6_SW5 0x7D
183#define CS7_SW5 0x7E
184#define CS8_SW5 0x7F
185#define CS9_SW5 0x80
186#define CS10_SW5 0x81
187#define CS11_SW5 0x82
188#define CS12_SW5 0x83
189#define CS13_SW5 0x84
190#define CS14_SW5 0x85
191#define CS15_SW5 0x86
192#define CS16_SW5 0x87
193#define CS17_SW5 0x88
194#define CS18_SW5 0x89
195#define CS19_SW5 0x8A
196#define CS20_SW5 0x8B
197#define CS21_SW5 0x8C
198#define CS22_SW5 0x8D
199#define CS23_SW5 0x8E
200#define CS24_SW5 0x8F
201#define CS25_SW5 0x90
202#define CS26_SW5 0x91
203#define CS27_SW5 0x92
204#define CS28_SW5 0x93
205#define CS29_SW5 0x94
206#define CS30_SW5 0x95
207
208#define CS1_SW6 0x96
209#define CS2_SW6 0x97
210#define CS3_SW6 0x98
211#define CS4_SW6 0x99
212#define CS5_SW6 0x9A
213#define CS6_SW6 0x9B
214#define CS7_SW6 0x9C
215#define CS8_SW6 0x9D
216#define CS9_SW6 0x9E
217#define CS10_SW6 0x9F
218#define CS11_SW6 0xA0
219#define CS12_SW6 0xA1
220#define CS13_SW6 0xA2
221#define CS14_SW6 0xA3
222#define CS15_SW6 0xA4
223#define CS16_SW6 0xA5
224#define CS17_SW6 0xA6
225#define CS18_SW6 0xA7
226#define CS19_SW6 0xA8
227#define CS20_SW6 0xA9
228#define CS21_SW6 0xAA
229#define CS22_SW6 0xAB
230#define CS23_SW6 0xAC
231#define CS24_SW6 0xAD
232#define CS25_SW6 0xAE
233#define CS26_SW6 0xAF
234#define CS27_SW6 0xB0
235#define CS28_SW6 0xB1
236#define CS29_SW6 0xB2
237#define CS30_SW6 0xB3
238
239#define CS1_SW7 0xB4
240#define CS2_SW7 0xB5
241#define CS3_SW7 0xB6
242#define CS4_SW7 0xB7
243#define CS5_SW7 0xB8
244#define CS6_SW7 0xB9
245#define CS7_SW7 0xBA
246#define CS8_SW7 0xBB
247#define CS9_SW7 0xBC
248#define CS10_SW7 0xBD
249#define CS11_SW7 0xBE
250#define CS12_SW7 0xBF
251#define CS13_SW7 0xC0
252#define CS14_SW7 0xC1
253#define CS15_SW7 0xC2
254#define CS16_SW7 0xC3
255#define CS17_SW7 0xC4
256#define CS18_SW7 0xC5
257#define CS19_SW7 0xC6
258#define CS20_SW7 0xC7
259#define CS21_SW7 0xC8
260#define CS22_SW7 0xC9
261#define CS23_SW7 0xCA
262#define CS24_SW7 0xCB
263#define CS25_SW7 0xCC
264#define CS26_SW7 0xCD
265#define CS27_SW7 0xCE
266#define CS28_SW7 0xCF
267#define CS29_SW7 0xD0
268#define CS30_SW7 0xD1
269
270#define CS1_SW8 0xD2
271#define CS2_SW8 0xD3
272#define CS3_SW8 0xD4
273#define CS4_SW8 0xD5
274#define CS5_SW8 0xD6
275#define CS6_SW8 0xD7
276#define CS7_SW8 0xD8
277#define CS8_SW8 0xD9
278#define CS9_SW8 0xDA
279#define CS10_SW8 0xDB
280#define CS11_SW8 0xDC
281#define CS12_SW8 0xDD
282#define CS13_SW8 0xDE
283#define CS14_SW8 0xDF
284#define CS15_SW8 0xE0
285#define CS16_SW8 0xE1
286#define CS17_SW8 0xE2
287#define CS18_SW8 0xE3
288#define CS19_SW8 0xE4
289#define CS20_SW8 0xE5
290#define CS21_SW8 0xE6
291#define CS22_SW8 0xE7
292#define CS23_SW8 0xE8
293#define CS24_SW8 0xE9
294#define CS25_SW8 0xEA
295#define CS26_SW8 0xEB
296#define CS27_SW8 0xEC
297#define CS28_SW8 0xED
298#define CS29_SW8 0xEE
299#define CS30_SW8 0xEF
300
301#define CS1_SW9 0xF0
302#define CS2_SW9 0xF1
303#define CS3_SW9 0xF2
304#define CS4_SW9 0xF3
305#define CS5_SW9 0xF4
306#define CS6_SW9 0xF5
307#define CS7_SW9 0xF6
308#define CS8_SW9 0xF7
309#define CS9_SW9 0xF8
310#define CS10_SW9 0xF9
311#define CS11_SW9 0xFA
312#define CS12_SW9 0xFB
313#define CS13_SW9 0xFC
314#define CS14_SW9 0xFD
315#define CS15_SW9 0xFE
316#define CS16_SW9 0xFF
317#define CS17_SW9 0x100
318#define CS18_SW9 0x101
319#define CS19_SW9 0x102
320#define CS20_SW9 0x103
321#define CS21_SW9 0x104
322#define CS22_SW9 0x105
323#define CS23_SW9 0x106
324#define CS24_SW9 0x107
325#define CS25_SW9 0x108
326#define CS26_SW9 0x109
327#define CS27_SW9 0x10A
328#define CS28_SW9 0x10B
329#define CS29_SW9 0x10C
330#define CS30_SW9 0x10D
331
332#define CS31_SW1 0x10E
333#define CS32_SW1 0x10F
334#define CS33_SW1 0x110
335#define CS34_SW1 0x111
336#define CS35_SW1 0x112
337#define CS36_SW1 0x113
338#define CS37_SW1 0x114
339#define CS38_SW1 0x115
340#define CS39_SW1 0x116
341
342#define CS31_SW2 0x117
343#define CS32_SW2 0x118
344#define CS33_SW2 0x119
345#define CS34_SW2 0x11A
346#define CS35_SW2 0x11B
347#define CS36_SW2 0x11C
348#define CS37_SW2 0x11D
349#define CS38_SW2 0x11E
350#define CS39_SW2 0x11F
351
352#define CS31_SW3 0x120
353#define CS32_SW3 0x121
354#define CS33_SW3 0x122
355#define CS34_SW3 0x123
356#define CS35_SW3 0x124
357#define CS36_SW3 0x125
358#define CS37_SW3 0x126
359#define CS38_SW3 0x127
360#define CS39_SW3 0x128
361
362#define CS31_SW4 0x129
363#define CS32_SW4 0x12A
364#define CS33_SW4 0x12B
365#define CS34_SW4 0x12C
366#define CS35_SW4 0x12D
367#define CS36_SW4 0x12E
368#define CS37_SW4 0x12F
369#define CS38_SW4 0x130
370#define CS39_SW4 0x131
371
372#define CS31_SW5 0x132
373#define CS32_SW5 0x133
374#define CS33_SW5 0x134
375#define CS34_SW5 0x135
376#define CS35_SW5 0x136
377#define CS36_SW5 0x137
378#define CS37_SW5 0x138
379#define CS38_SW5 0x139
380#define CS39_SW5 0x13A
381
382#define CS31_SW6 0x13B
383#define CS32_SW6 0x13C
384#define CS33_SW6 0x13D
385#define CS34_SW6 0x13E
386#define CS35_SW6 0x13F
387#define CS36_SW6 0x140
388#define CS37_SW6 0x141
389#define CS38_SW6 0x142
390#define CS39_SW6 0x143
391
392#define CS31_SW7 0x144
393#define CS32_SW7 0x145
394#define CS33_SW7 0x146
395#define CS34_SW7 0x147
396#define CS35_SW7 0x148
397#define CS36_SW7 0x149
398#define CS37_SW7 0x14A
399#define CS38_SW7 0x14B
400#define CS39_SW7 0x14C
401
402#define CS31_SW8 0x14D
403#define CS32_SW8 0x14E
404#define CS33_SW8 0x14F
405#define CS34_SW8 0x150
406#define CS35_SW8 0x151
407#define CS36_SW8 0x152
408#define CS37_SW8 0x153
409#define CS38_SW8 0x154
410#define CS39_SW8 0x155
411
412#define CS31_SW9 0x156
413#define CS32_SW9 0x157
414#define CS33_SW9 0x158
415#define CS34_SW9 0x159
416#define CS35_SW9 0x15A
417#define CS36_SW9 0x15B
418#define CS37_SW9 0x15C
419#define CS38_SW9 0x15D
420#define CS39_SW9 0x15E