forked from mirrors/qmk_userspace
		
	is31fl3733: complete LED Matrix support (#22149)
This commit is contained in:
		
					parent
					
						
							
								288c2313fe
							
						
					
				
			
			
				commit
				
					
						d58f85e09e
					
				
			
		
					 5 changed files with 24 additions and 63 deletions
				
			
		| 
						 | 
				
			
			@ -354,8 +354,8 @@ LED_MATRIX_DRIVER := aw20216s
 | 
			
		|||
endif
 | 
			
		||||
 | 
			
		||||
LED_MATRIX_ENABLE ?= no
 | 
			
		||||
VALID_LED_MATRIX_TYPES := is31fl3218 is31fl3731 is31fl3736 is31fl3742a is31fl3743a is31fl3745 is31fl3746a ckled2001 custom
 | 
			
		||||
# TODO: is31fl3733 is31fl3737 is31fl3741
 | 
			
		||||
VALID_LED_MATRIX_TYPES := is31fl3218 is31fl3731 is31fl3733 is31fl3736 is31fl3742a is31fl3743a is31fl3745 is31fl3746a ckled2001 custom
 | 
			
		||||
# TODO: is31fl3737 is31fl3741
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(LED_MATRIX_ENABLE)), yes)
 | 
			
		||||
    ifeq ($(filter $(LED_MATRIX_DRIVER),$(VALID_LED_MATRIX_TYPES)),)
 | 
			
		||||
| 
						 | 
				
			
			@ -391,6 +391,13 @@ endif
 | 
			
		|||
        QUANTUM_LIB_SRC += i2c_master.c
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3733)
 | 
			
		||||
        OPT_DEFS += -DHAL_USE_I2C=TRUE
 | 
			
		||||
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
 | 
			
		||||
        SRC += is31fl3733-simple.c
 | 
			
		||||
        QUANTUM_LIB_SRC += i2c_master.c
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3736)
 | 
			
		||||
        OPT_DEFS += -DHAL_USE_I2C=TRUE
 | 
			
		||||
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
 | 
			
		||||
| 
						 | 
				
			
			@ -398,35 +405,35 @@ endif
 | 
			
		|||
        QUANTUM_LIB_SRC += i2c_master.c
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
	ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3742a)
 | 
			
		||||
    ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3742a)
 | 
			
		||||
        OPT_DEFS += -DIS31FLCOMMON -DHAL_USE_I2C=TRUE
 | 
			
		||||
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
 | 
			
		||||
        SRC += is31flcommon.c
 | 
			
		||||
        QUANTUM_LIB_SRC += i2c_master.c
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
	ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3743a)
 | 
			
		||||
    ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3743a)
 | 
			
		||||
        OPT_DEFS += -DIS31FLCOMMON -DHAL_USE_I2C=TRUE
 | 
			
		||||
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
 | 
			
		||||
        SRC += is31flcommon.c
 | 
			
		||||
        QUANTUM_LIB_SRC += i2c_master.c
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
	ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3745)
 | 
			
		||||
    ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3745)
 | 
			
		||||
        OPT_DEFS += -DIS31FLCOMMON -DHAL_USE_I2C=TRUE
 | 
			
		||||
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
 | 
			
		||||
        SRC += is31flcommon.c
 | 
			
		||||
        QUANTUM_LIB_SRC += i2c_master.c
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
	ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3746a)
 | 
			
		||||
    ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3746a)
 | 
			
		||||
        OPT_DEFS += -DIS31FLCOMMON -DHAL_USE_I2C=TRUE
 | 
			
		||||
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
 | 
			
		||||
        SRC += is31flcommon.c
 | 
			
		||||
        QUANTUM_LIB_SRC += i2c_master.c
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
	ifeq ($(strip $(LED_MATRIX_DRIVER)), ckled2001)
 | 
			
		||||
    ifeq ($(strip $(LED_MATRIX_DRIVER)), ckled2001)
 | 
			
		||||
        OPT_DEFS += -DHAL_USE_I2C=TRUE
 | 
			
		||||
        COMMON_VPATH += $(DRIVER_PATH)/led
 | 
			
		||||
        SRC += ckled2001-simple.c
 | 
			
		||||
| 
						 | 
				
			
			@ -513,28 +520,28 @@ endif
 | 
			
		|||
        QUANTUM_LIB_SRC += i2c_master.c
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
	ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3742a)
 | 
			
		||||
    ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3742a)
 | 
			
		||||
        OPT_DEFS += -DIS31FLCOMMON -DHAL_USE_I2C=TRUE
 | 
			
		||||
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
 | 
			
		||||
        SRC += is31flcommon.c
 | 
			
		||||
        QUANTUM_LIB_SRC += i2c_master.c
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
	ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3743a)
 | 
			
		||||
    ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3743a)
 | 
			
		||||
        OPT_DEFS += -DIS31FLCOMMON -DHAL_USE_I2C=TRUE
 | 
			
		||||
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
 | 
			
		||||
        SRC += is31flcommon.c
 | 
			
		||||
        QUANTUM_LIB_SRC += i2c_master.c
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
	ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3745)
 | 
			
		||||
    ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3745)
 | 
			
		||||
        OPT_DEFS += -DIS31FLCOMMON -DHAL_USE_I2C=TRUE
 | 
			
		||||
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
 | 
			
		||||
        SRC += is31flcommon.c
 | 
			
		||||
        QUANTUM_LIB_SRC += i2c_master.c
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
	ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3746a)
 | 
			
		||||
    ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3746a)
 | 
			
		||||
        OPT_DEFS += -DIS31FLCOMMON -DHAL_USE_I2C=TRUE
 | 
			
		||||
        COMMON_VPATH += $(DRIVER_PATH)/led/issi
 | 
			
		||||
        SRC += is31flcommon.c
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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`, `is31fl3736`, `is31fl3742a`, `is31fl3743a`, `is31fl3745`, `is31fl3746a`.
 | 
			
		||||
        * The driver to use. Must be one of `ckled2001`, `custom`, `is31fl3218`, `is31fl3731`, `is31fl3733`, `is31fl3736`, `is31fl3742a`, `is31fl3743a`, `is31fl3745`, `is31fl3746a`.
 | 
			
		||||
    * `layout` (Required)
 | 
			
		||||
        * List of LED configuration dictionaries. Each dictionary contains:
 | 
			
		||||
            * `flags` (Required)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -61,31 +61,8 @@ uint8_t g_twi_transfer_buffer[20];
 | 
			
		|||
uint8_t g_pwm_buffer[IS31FL3731_DRIVER_COUNT][144];
 | 
			
		||||
bool    g_pwm_buffer_update_required[IS31FL3731_DRIVER_COUNT] = {false};
 | 
			
		||||
 | 
			
		||||
/* There's probably a better way to init this... */
 | 
			
		||||
#if IS31FL3731_DRIVER_COUNT == 1
 | 
			
		||||
uint8_t g_led_control_registers[IS31FL3731_DRIVER_COUNT][18] = {{0}};
 | 
			
		||||
#elif IS31FL3731_DRIVER_COUNT == 2
 | 
			
		||||
uint8_t g_led_control_registers[IS31FL3731_DRIVER_COUNT][18] = {{0}, {0}};
 | 
			
		||||
#elif IS31FL3731_DRIVER_COUNT == 3
 | 
			
		||||
uint8_t g_led_control_registers[IS31FL3731_DRIVER_COUNT][18] = {{0}, {0}, {0}};
 | 
			
		||||
#elif IS31FL3731_DRIVER_COUNT == 4
 | 
			
		||||
uint8_t g_led_control_registers[IS31FL3731_DRIVER_COUNT][18] = {{0}, {0}, {0}, {0}};
 | 
			
		||||
#endif
 | 
			
		||||
bool g_led_control_registers_update_required[IS31FL3731_DRIVER_COUNT] = {false};
 | 
			
		||||
 | 
			
		||||
// This is the bit pattern in the LED control registers
 | 
			
		||||
// (for matrix A, add one to register for matrix B)
 | 
			
		||||
//
 | 
			
		||||
//  reg -  b7  b6  b5  b4  b3  b2  b1  b0
 | 
			
		||||
// 0x00 - R08,R07,R06,R05,R04,R03,R02,R01
 | 
			
		||||
// 0x02 - G08,G07,G06,G05,G04,G03,G02,R00
 | 
			
		||||
// 0x04 - B08,B07,B06,B05,B04,B03,G01,G00
 | 
			
		||||
// 0x06 -  - , - , - , - , - ,B02,B01,B00
 | 
			
		||||
// 0x08 -  - , - , - , - , - , - , - , -
 | 
			
		||||
// 0x0A - B17,B16,B15, - , - , - , - , -
 | 
			
		||||
// 0x0C - G17,G16,B14,B13,B12,B11,B10,B09
 | 
			
		||||
// 0x0E - R17,G15,G14,G13,G12,G11,G10,G09
 | 
			
		||||
// 0x10 - R16,R15,R14,R13,R12,R11,R10,R09
 | 
			
		||||
uint8_t g_led_control_registers[IS31FL3731_DRIVER_COUNT][18]             = {0};
 | 
			
		||||
bool    g_led_control_registers_update_required[IS31FL3731_DRIVER_COUNT] = {false};
 | 
			
		||||
 | 
			
		||||
void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
 | 
			
		||||
    g_twi_transfer_buffer[0] = reg;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,23 +60,9 @@ uint8_t g_twi_transfer_buffer[20];
 | 
			
		|||
uint8_t g_pwm_buffer[IS31FL3731_DRIVER_COUNT][144];
 | 
			
		||||
bool    g_pwm_buffer_update_required[IS31FL3731_DRIVER_COUNT] = {false};
 | 
			
		||||
 | 
			
		||||
uint8_t g_led_control_registers[IS31FL3731_DRIVER_COUNT][18]             = {{0}};
 | 
			
		||||
uint8_t g_led_control_registers[IS31FL3731_DRIVER_COUNT][18]             = {0};
 | 
			
		||||
bool    g_led_control_registers_update_required[IS31FL3731_DRIVER_COUNT] = {false};
 | 
			
		||||
 | 
			
		||||
// This is the bit pattern in the LED control registers
 | 
			
		||||
// (for matrix A, add one to register for matrix B)
 | 
			
		||||
//
 | 
			
		||||
//  reg -  b7  b6  b5  b4  b3  b2  b1  b0
 | 
			
		||||
// 0x00 - R08,R07,R06,R05,R04,R03,R02,R01
 | 
			
		||||
// 0x02 - G08,G07,G06,G05,G04,G03,G02,R00
 | 
			
		||||
// 0x04 - B08,B07,B06,B05,B04,B03,G01,G00
 | 
			
		||||
// 0x06 -  - , - , - , - , - ,B02,B01,B00
 | 
			
		||||
// 0x08 -  - , - , - , - , - , - , - , -
 | 
			
		||||
// 0x0A - B17,B16,B15, - , - , - , - , -
 | 
			
		||||
// 0x0C - G17,G16,B14,B13,B12,B11,B10,B09
 | 
			
		||||
// 0x0E - R17,G15,G14,G13,G12,G11,G10,G09
 | 
			
		||||
// 0x10 - R16,R15,R14,R13,R12,R11,R10,R09
 | 
			
		||||
 | 
			
		||||
void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
 | 
			
		||||
    g_twi_transfer_buffer[0] = reg;
 | 
			
		||||
    g_twi_transfer_buffer[1] = data;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,17 +75,8 @@ uint8_t g_twi_transfer_buffer[20];
 | 
			
		|||
uint8_t g_pwm_buffer[IS31FL3733_DRIVER_COUNT][192];
 | 
			
		||||
bool    g_pwm_buffer_update_required[IS31FL3733_DRIVER_COUNT] = {false};
 | 
			
		||||
 | 
			
		||||
/* There's probably a better way to init this... */
 | 
			
		||||
#if IS31FL3733_DRIVER_COUNT == 1
 | 
			
		||||
uint8_t g_led_control_registers[IS31FL3733_DRIVER_COUNT][24] = {{0}};
 | 
			
		||||
#elif IS31FL3733_DRIVER_COUNT == 2
 | 
			
		||||
uint8_t g_led_control_registers[IS31FL3733_DRIVER_COUNT][24] = {{0}, {0}};
 | 
			
		||||
#elif IS31FL3733_DRIVER_COUNT == 3
 | 
			
		||||
uint8_t g_led_control_registers[IS31FL3733_DRIVER_COUNT][24] = {{0}, {0}, {0}};
 | 
			
		||||
#elif IS31FL3733_DRIVER_COUNT == 4
 | 
			
		||||
uint8_t g_led_control_registers[IS31FL3733_DRIVER_COUNT][24] = {{0}, {0}, {0}, {0}};
 | 
			
		||||
#endif
 | 
			
		||||
bool g_led_control_registers_update_required[IS31FL3733_DRIVER_COUNT] = {false};
 | 
			
		||||
uint8_t g_led_control_registers[IS31FL3733_DRIVER_COUNT][24]             = {0};
 | 
			
		||||
bool    g_led_control_registers_update_required[IS31FL3733_DRIVER_COUNT] = {false};
 | 
			
		||||
 | 
			
		||||
bool is31fl3733_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
 | 
			
		||||
    // If the transaction fails function returns false.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue