]> git.donarmstrong.com Git - qmk_firmware.git/blob - quantum/led_matrix_drivers.c
[Keyboard] leds in default keymap (#6357)
[qmk_firmware.git] / quantum / led_matrix_drivers.c
1 /* Copyright 2018 James Laird-Wah
2  * Copyright 2019 Clueboard
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16  */
17
18 #include <stdint.h>
19 #include <stdbool.h>
20 #include "quantum.h"
21 #include "ledmatrix.h"
22
23 /* Each driver needs to define a struct:
24  *
25  *    const led_matrix_driver_t led_matrix_driver;
26  *
27  * All members must be provided. Keyboard custom drivers must define this
28  * in their own files.
29  */
30
31 #if defined(IS31FL3731) || defined(IS31FL3733)
32
33 #if defined(IS31FL3731)
34     #include "is31fl3731-simple.h"
35 #endif
36
37 #include "i2c_master.h"
38
39 static void init(void) {
40     i2c_init();
41     #ifdef IS31FL3731
42         #ifdef LED_DRIVER_ADDR_1
43             IS31FL3731_init(LED_DRIVER_ADDR_1);
44         #endif
45         #ifdef LED_DRIVER_ADDR_2
46             IS31FL3731_init(LED_DRIVER_ADDR_2);
47         #endif
48         #ifdef LED_DRIVER_ADDR_3
49             IS31FL3731_init(LED_DRIVER_ADDR_3);
50         #endif
51         #ifdef LED_DRIVER_ADDR_4
52             IS31FL3731_init(LED_DRIVER_ADDR_4);
53         #endif
54     #else
55         #ifdef LED_DRIVER_ADDR_1
56             IS31FL3733_init(LED_DRIVER_ADDR_1, 0 );
57         #endif
58         #ifdef LED_DRIVER_ADDR_2
59             IS31FL3733_init(LED_DRIVER_ADDR_2, 0 );
60         #endif
61         #ifdef LED_DRIVER_ADDR_3
62             IS31FL3733_init(LED_DRIVER_ADDR_3, 0 );
63         #endif
64         #ifdef LED_DRIVER_ADDR_4
65             IS31FL3733_init(LED_DRIVER_ADDR_4, 0 );
66         #endif
67     #endif
68
69     for (int index = 0; index < LED_DRIVER_LED_COUNT; index++) {
70         #ifdef IS31FL3731
71             IS31FL3731_set_led_control_register(index, true);
72         #else
73             IS31FL3733_set_led_control_register(index, true);
74         #endif
75     }
76     // This actually updates the LED drivers
77     #ifdef IS31FL3731
78         #ifdef LED_DRIVER_ADDR_1
79             IS31FL3731_update_led_control_registers(LED_DRIVER_ADDR_1, 0);
80         #endif
81         #ifdef LED_DRIVER_ADDR_2
82             IS31FL3731_update_led_control_registers(LED_DRIVER_ADDR_2, 1);
83         #endif
84         #ifdef LED_DRIVER_ADDR_3
85             IS31FL3731_update_led_control_registers(LED_DRIVER_ADDR_3, 2);
86         #endif
87         #ifdef LED_DRIVER_ADDR_4
88             IS31FL3731_update_led_control_registers(LED_DRIVER_ADDR_4, 3);
89         #endif
90     #else
91         #ifdef LED_DRIVER_ADDR_1
92             IS31FL3733_update_led_control_registers(LED_DRIVER_ADDR_1, 0);
93         #endif
94         #ifdef LED_DRIVER_ADDR_2
95             IS31FL3733_update_led_control_registers(LED_DRIVER_ADDR_2, 1);
96         #endif
97         #ifdef LED_DRIVER_ADDR_3
98             IS31FL3733_update_led_control_registers(LED_DRIVER_ADDR_3, 2);
99         #endif
100         #ifdef LED_DRIVER_ADDR_4
101             IS31FL3733_update_led_control_registers(LED_DRIVER_ADDR_4, 3);
102         #endif
103     #endif
104 }
105
106 static void flush(void) {
107     #ifdef IS31FL3731
108         #ifdef LED_DRIVER_ADDR_1
109             IS31FL3731_update_pwm_buffers(LED_DRIVER_ADDR_1, 0);
110         #endif
111         #ifdef LED_DRIVER_ADDR_2
112             IS31FL3731_update_pwm_buffers(LED_DRIVER_ADDR_2, 1);
113         #endif
114         #ifdef LED_DRIVER_ADDR_3
115             IS31FL3731_update_pwm_buffers(LED_DRIVER_ADDR_3, 2);
116         #endif
117         #ifdef LED_DRIVER_ADDR_4
118             IS31FL3731_update_pwm_buffers(LED_DRIVER_ADDR_4, 3);
119         #endif
120     #else
121         #ifdef LED_DRIVER_ADDR_1
122             IS31FL3733_update_pwm_buffers(LED_DRIVER_ADDR_1, 0);
123         #endif
124         #ifdef LED_DRIVER_ADDR_2
125             IS31FL3733_update_pwm_buffers(LED_DRIVER_ADDR_2, 1);
126         #endif
127         #ifdef LED_DRIVER_ADDR_3
128             IS31FL3733_update_pwm_buffers(LED_DRIVER_ADDR_3, 2);
129         #endif
130         #ifdef LED_DRIVER_ADDR_4
131             IS31FL3733_update_pwm_buffers(LED_DRIVER_ADDR_4, 3);
132         #endif
133     #endif
134 }
135
136 const led_matrix_driver_t led_matrix_driver = {
137     .init = init,
138     .flush = flush,
139 #ifdef IS31FL3731
140     .set_value = IS31FL3731_set_value,
141     .set_value_all = IS31FL3731_set_value_all,
142 #else
143     .set_value = IS31FL3733_set_value,
144     .set_value_all = IS31FL3733_set_value_all,
145 #endif
146 };
147
148
149 #endif