is31fl3737/3741: add LED Matrix support (#22163)

This commit is contained in:
Ryan
2023-10-03 01:09:20 +11:00
committed by GitHub
parent 6e3f770d0d
commit bd5860de4e
8 changed files with 1316 additions and 4 deletions
+15 -2
View File
@@ -354,8 +354,7 @@ LED_MATRIX_DRIVER := aw20216s
endif
LED_MATRIX_ENABLE ?= no
VALID_LED_MATRIX_TYPES := is31fl3218 is31fl3731 is31fl3733 is31fl3736 is31fl3742a is31fl3743a is31fl3745 is31fl3746a ckled2001 custom
# TODO: is31fl3737 is31fl3741
VALID_LED_MATRIX_TYPES := is31fl3218 is31fl3731 is31fl3733 is31fl3736 is31fl3737 is31fl3741 is31fl3742a is31fl3743a is31fl3745 is31fl3746a ckled2001 custom
ifeq ($(strip $(LED_MATRIX_ENABLE)), yes)
ifeq ($(filter $(LED_MATRIX_DRIVER),$(VALID_LED_MATRIX_TYPES)),)
@@ -405,6 +404,20 @@ endif
QUANTUM_LIB_SRC += i2c_master.c
endif
ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3737)
OPT_DEFS += -DHAL_USE_I2C=TRUE
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31fl3737-simple.c
QUANTUM_LIB_SRC += i2c_master.c
endif
ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3741)
OPT_DEFS += -DHAL_USE_I2C=TRUE
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31fl3741-simple.c
QUANTUM_LIB_SRC += i2c_master.c
endif
ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3742a)
OPT_DEFS += -DIS31FLCOMMON -DHAL_USE_I2C=TRUE
COMMON_VPATH += $(DRIVER_PATH)/led/issi
+1 -1
View File
@@ -329,7 +329,7 @@ Configures the [LED Matrix](feature_led_matrix.md) feature.
* The centroid (geometric center) of the LEDs. Used for certain effects.
* Default: `[112, 32]`
* `driver` (Required)
* The driver to use. Must be one of `ckled2001`, `custom`, `is31fl3218`, `is31fl3731`, `is31fl3733`, `is31fl3736`, `is31fl3742a`, `is31fl3743a`, `is31fl3745`, `is31fl3746a`.
* The driver to use. Must be one of `ckled2001`, `custom`, `is31fl3218`, `is31fl3731`, `is31fl3733`, `is31fl3736`, `is31fl3737`, `is31fl3741`, `is31fl3742a`, `is31fl3743a`, `is31fl3745`, `is31fl3746a`.
* `layout` (Required)
* List of LED configuration dictionaries. Each dictionary contains:
* `flags` (Required)
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+6
View File
@@ -36,6 +36,12 @@
#ifdef LED_MATRIX_IS31FL3736
# include "is31fl3736-simple.h"
#endif
#ifdef LED_MATRIX_IS31FL3737
# include "is31fl3737-simple.h"
#endif
#ifdef LED_MATRIX_IS31FL3741
# include "is31fl3741-simple.h"
#endif
#if defined(IS31FLCOMMON)
# include "is31flcommon.h"
#endif
+95 -1
View File
@@ -25,7 +25,7 @@
* in their own files.
*/
#if defined(LED_MATRIX_IS31FL3218) || defined(LED_MATRIX_IS31FL3731) || defined(LED_MATRIX_IS31FL3733) || defined(LED_MATRIX_IS31FL3736) || defined(IS31FLCOMMON) || defined(LED_MATRIX_CKLED2001)
#if defined(LED_MATRIX_IS31FL3218) || defined(LED_MATRIX_IS31FL3731) || defined(LED_MATRIX_IS31FL3733) || defined(LED_MATRIX_IS31FL3736) || defined(LED_MATRIX_IS31FL3737) || defined(LED_MATRIX_IS31FL3741) || defined(IS31FLCOMMON) || defined(LED_MATRIX_CKLED2001)
# include "i2c_master.h"
static void init(void) {
@@ -82,6 +82,30 @@ static void init(void) {
# endif
# endif
# elif defined(LED_MATRIX_IS31FL3737)
is31fl3737_init(LED_DRIVER_ADDR_1);
# if defined(LED_DRIVER_ADDR_2)
is31fl3737_init(LED_DRIVER_ADDR_2);
# if defined(LED_DRIVER_ADDR_3)
is31fl3737_init(LED_DRIVER_ADDR_3);
# if defined(LED_DRIVER_ADDR_4)
is31fl3737_init(LED_DRIVER_ADDR_4);
# endif
# endif
# endif
# elif defined(LED_MATRIX_IS31FL3741)
is31fl3741_init(LED_DRIVER_ADDR_1);
# if defined(LED_DRIVER_ADDR_2)
is31fl3741_init(LED_DRIVER_ADDR_2);
# if defined(LED_DRIVER_ADDR_3)
is31fl3741_init(LED_DRIVER_ADDR_3);
# if defined(LED_DRIVER_ADDR_4)
is31fl3741_init(LED_DRIVER_ADDR_4);
# endif
# endif
# endif
# elif defined(IS31FLCOMMON)
IS31FL_common_init(DRIVER_ADDR_1, ISSI_SSR_1);
# if defined(LED_DRIVER_ADDR_2)
@@ -120,6 +144,10 @@ static void init(void) {
is31fl3733_set_led_control_register(index, true);
# elif defined(LED_MATRIX_IS31FL3736)
is31fl3736_set_led_control_register(index, true);
# elif defined(LED_MATRIX_IS31FL3737)
is31fl3737_set_led_control_register(index, true);
# elif defined(LED_MATRIX_IS31FL3741)
is31fl3741_set_led_control_register(index, true);
# elif defined(IS31FLCOMMON)
IS31FL_simple_set_scaling_buffer(index, true);
# elif defined(LED_MATRIX_CKLED2001)
@@ -167,6 +195,30 @@ static void init(void) {
# endif
# endif
# elif defined(LED_MATRIX_IS31FL3737)
is31fl3737_update_led_control_registers(LED_DRIVER_ADDR_1, 0);
# if defined(LED_DRIVER_ADDR_2)
is31fl3737_update_led_control_registers(LED_DRIVER_ADDR_2, 1);
# if defined(LED_DRIVER_ADDR_3)
is31fl3737_update_led_control_registers(LED_DRIVER_ADDR_3, 2);
# if defined(LED_DRIVER_ADDR_4)
is31fl3737_update_led_control_registers(LED_DRIVER_ADDR_4, 3);
# endif
# endif
# endif
# elif defined(LED_MATRIX_IS31FL3741)
is31fl3741_update_led_control_registers(LED_DRIVER_ADDR_1, 0);
# if defined(LED_DRIVER_ADDR_2)
is31fl3741_update_led_control_registers(LED_DRIVER_ADDR_2, 1);
# if defined(LED_DRIVER_ADDR_3)
is31fl3741_update_led_control_registers(LED_DRIVER_ADDR_3, 2);
# if defined(LED_DRIVER_ADDR_4)
is31fl3741_update_led_control_registers(LED_DRIVER_ADDR_4, 3);
# endif
# endif
# endif
# elif defined(IS31FLCOMMON)
# ifdef ISSI_MANUAL_SCALING
IS31FL_set_manual_scaling_buffer();
@@ -270,6 +322,48 @@ const led_matrix_driver_t led_matrix_driver = {
.set_value_all = is31fl3736_set_value_all,
};
# elif defined(LED_MATRIX_IS31FL3737)
static void flush(void) {
is31fl3737_update_pwm_buffers(LED_DRIVER_ADDR_1, 0);
# if defined(LED_DRIVER_ADDR_2)
is31fl3737_update_pwm_buffers(LED_DRIVER_ADDR_2, 1);
# if defined(LED_DRIVER_ADDR_3)
is31fl3737_update_pwm_buffers(LED_DRIVER_ADDR_3, 2);
# if defined(LED_DRIVER_ADDR_4)
is31fl3737_update_pwm_buffers(LED_DRIVER_ADDR_4, 3);
# endif
# endif
# endif
}
const led_matrix_driver_t led_matrix_driver = {
.init = init,
.flush = flush,
.set_value = is31fl3737_set_value,
.set_value_all = is31fl3737_set_value_all,
};
# elif defined(LED_MATRIX_IS31FL3741)
static void flush(void) {
is31fl3741_update_pwm_buffers(LED_DRIVER_ADDR_1, 0);
# if defined(LED_DRIVER_ADDR_2)
is31fl3741_update_pwm_buffers(LED_DRIVER_ADDR_2, 1);
# if defined(LED_DRIVER_ADDR_3)
is31fl3741_update_pwm_buffers(LED_DRIVER_ADDR_3, 2);
# if defined(LED_DRIVER_ADDR_4)
is31fl3741_update_pwm_buffers(LED_DRIVER_ADDR_4, 3);
# endif
# endif
# endif
}
const led_matrix_driver_t led_matrix_driver = {
.init = init,
.flush = flush,
.set_value = is31fl3741_set_value,
.set_value_all = is31fl3741_set_value_all,
};
# elif defined(IS31FLCOMMON)
static void flush(void) {
IS31FL_common_update_pwm_register(DRIVER_ADDR_1, 0);