~ruther/qmk_firmware

8136eda6d48c8bc8dda5dfa439f7324d55448ca2 — Ryan 1 year, 8 months ago 1cbb5ae
is31fl3731: driver naming cleanups (#21918)

64 files changed, 189 insertions(+), 159 deletions(-)

M docs/feature_led_matrix.md
M docs/feature_rgb_matrix.md
M drivers/led/issi/is31fl3731-simple.c
M drivers/led/issi/is31fl3731-simple.h
M drivers/led/issi/is31fl3731.c
M drivers/led/issi/is31fl3731.h
M keyboards/aeboards/satellite/rev1/config.h
M keyboards/clueboard/66_hotswap/gen1/config.h
M keyboards/dp60/config.h
M keyboards/dztech/dz65rgb/v1/config.h
M keyboards/dztech/dz65rgb/v2/config.h
M keyboards/ergodox_ez/config.h
M keyboards/fallacy/config.h
M keyboards/ferris/0_2/bling/config.h
M keyboards/geekboards/tester/config.h
M keyboards/gizmo_engineering/gk6/config.h
M keyboards/handwired/orbweaver/config.h
M keyboards/hs60/v1/config.h
M keyboards/inett_studio/sqx/hotswap/config.h
M keyboards/inett_studio/sqx/universal/config.h
M keyboards/input_club/ergodox_infinity/config.h
M keyboards/input_club/whitefox/config.h
M keyboards/kbdfans/kbd67/mkiirgb/v1/config.h
M keyboards/kbdfans/kbd67/mkiirgb/v2/config.h
M keyboards/kbdfans/maja/config.h
M keyboards/latincompass/latin17rgb/config.h
M keyboards/latincompass/latin6rgb/config.h
M keyboards/matrix/m20add/config.h
M keyboards/matrix/noah/config.h
M keyboards/mechlovin/adelais/rgb_led/rev2/config.h
M keyboards/mechlovin/delphine/rgb_led/config.h
M keyboards/mechlovin/hannah60rgb/rev2/config.h
M keyboards/mechlovin/olly/octagon/config.h
M keyboards/mechlovin/zed65/mono_led/config.h
M keyboards/moonlander/config.h
M keyboards/neson_design/700e/config.h
M keyboards/neson_design/n6/config.h
M keyboards/opendeck/32/rev1/config.h
M keyboards/planck/light/config.h
M keyboards/smallkeyboard/config.h
M keyboards/spaceholdings/nebula12/config.h
M keyboards/terrazzo/config.h
M keyboards/tkc/portico/config.h
M keyboards/wilba_tech/rama_works_kara/config.h
M keyboards/wilba_tech/rama_works_koyu/config.h
M keyboards/wilba_tech/rama_works_m10_c/config.h
M keyboards/wilba_tech/rama_works_m50_a/config.h
M keyboards/wilba_tech/rama_works_m60_a/config.h
M keyboards/wilba_tech/rama_works_m65_b/config.h
M keyboards/wilba_tech/rama_works_m65_bx/config.h
M keyboards/wilba_tech/rama_works_u80_a/config.h
M keyboards/wilba_tech/wt60_b/config.h
M keyboards/wilba_tech/wt60_bx/config.h
M keyboards/wilba_tech/wt60_c/config.h
M keyboards/wilba_tech/zeal60/config.h
M keyboards/wilba_tech/zeal65/config.h
M keyboards/xbows/knight/config.h
M keyboards/xbows/knight_plus/config.h
M keyboards/xbows/nature/config.h
M keyboards/xbows/numpad/config.h
M keyboards/xbows/ranger/config.h
M keyboards/xbows/woody/config.h
M keyboards/xelus/dawn60/rev1/config.h
M keyboards/xelus/dawn60/rev1_qmk/config.h
M docs/feature_led_matrix.md => docs/feature_led_matrix.md +4 -4
@@ 19,9 19,9 @@ You can use between 1 and 4 IS31FL3731 IC's. Do not specify `LED_DRIVER_ADDR_<N>

| Variable | Description | Default |
|----------|-------------|---------|
| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
| `LED_DRIVER_COUNT` | (Required) How many LED driver IC's are present | |
| `IS31FL3731_I2C_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
| `IS31FL3731_I2C_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
| `IS31FL3731_DRIVER_COUNT` | (Required) How many LED driver IC's are present | |
| `LED_MATRIX_LED_COUNT` | (Required) How many LED lights are present across all drivers | |
| `LED_DRIVER_ADDR_1` | (Required) Address for the first LED driver | |
| `LED_DRIVER_ADDR_2` | (Optional) Address for the second LED driver | |


@@ 41,7 41,7 @@ Here is an example using 2 drivers.
#define LED_DRIVER_ADDR_1 0b1110100
#define LED_DRIVER_ADDR_2 0b1110110

#define LED_DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define LED_DRIVER_1_LED_TOTAL 25
#define LED_DRIVER_2_LED_TOTAL 24
#define LED_MATRIX_LED_COUNT (LED_DRIVER_1_LED_TOTAL + LED_DRIVER_2_LED_TOTAL)

M docs/feature_rgb_matrix.md => docs/feature_rgb_matrix.md +5 -5
@@ 19,10 19,10 @@ You can use between 1 and 4 IS31FL3731 IC's. Do not specify `DRIVER_ADDR_<N>` de

| Variable | Description | Default |
|----------|-------------|---------|
| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
| `ISSI_3731_DEGHOST` | (Optional) Set this define to enable de-ghosting by halving Vcc during blanking time | |
| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
| `IS31FL3731_I2C_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
| `IS31FL3731_I2C_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
| `IS31FL3731_DEGHOST` | (Optional) Set this define to enable de-ghosting by halving Vcc during blanking time | |
| `IS31FL3731_DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
| `RGB_MATRIX_LED_COUNT` | (Required) How many RGB lights are present across all drivers | |
| `DRIVER_ADDR_1` | (Required) Address for the first RGB driver | |
| `DRIVER_ADDR_2` | (Optional) Address for the second RGB driver | |


@@ 42,7 42,7 @@ Here is an example using 2 drivers.
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110110

#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 25
#define DRIVER_2_LED_TOTAL 24
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M drivers/led/issi/is31fl3731-simple.c => drivers/led/issi/is31fl3731-simple.c +49 -48
@@ 18,6 18,7 @@
 */

#include "is31fl3731-simple.h"
#include <string.h>
#include "i2c_master.h"
#include "wait.h"



@@ 28,34 29,34 @@
// 0b1110111 AD <-> VCC
// 0b1110101 AD <-> SCL
// 0b1110110 AD <-> SDA
#define ISSI_ADDR_DEFAULT 0x74
#define IS31FL3731_I2C_ADDRESS_DEFAULT 0x74

#define ISSI_REG_CONFIG 0x00
#define ISSI_REG_CONFIG_PICTUREMODE 0x00
#define ISSI_REG_CONFIG_AUTOPLAYMODE 0x08
#define ISSI_REG_CONFIG_AUDIOPLAYMODE 0x18
#define IS31FL3731_REG_CONFIG 0x00
#define IS31FL3731_REG_CONFIG_PICTUREMODE 0x00
#define IS31FL3731_REG_CONFIG_AUTOPLAYMODE 0x08
#define IS31FL3731_REG_CONFIG_AUDIOPLAYMODE 0x18

#define ISSI_CONF_PICTUREMODE 0x00
#define ISSI_CONF_AUTOFRAMEMODE 0x04
#define ISSI_CONF_AUDIOMODE 0x08
#define IS31FL3731_CONF_PICTUREMODE 0x00
#define IS31FL3731_CONF_AUTOFRAMEMODE 0x04
#define IS31FL3731_CONF_AUDIOMODE 0x08

#define ISSI_REG_PICTUREFRAME 0x01
#define IS31FL3731_REG_PICTUREFRAME 0x01

// Not defined in the datasheet -- See AN for IC
#define ISSI_REG_GHOST_IMAGE_PREVENTION 0xC2 // Set bit 4 to enable de-ghosting
#define IS31FL3731_REG_GHOST_IMAGE_PREVENTION 0xC2 // Set bit 4 to enable de-ghosting

#define ISSI_REG_SHUTDOWN 0x0A
#define ISSI_REG_AUDIOSYNC 0x06
#define IS31FL3731_REG_SHUTDOWN 0x0A
#define IS31FL3731_REG_AUDIOSYNC 0x06

#define ISSI_COMMANDREGISTER 0xFD
#define ISSI_BANK_FUNCTIONREG 0x0B // helpfully called 'page nine'
#define IS31FL3731_COMMANDREGISTER 0xFD
#define IS31FL3731_BANK_FUNCTIONREG 0x0B // helpfully called 'page nine'

#ifndef ISSI_TIMEOUT
#    define ISSI_TIMEOUT 100
#ifndef IS31FL3731_I2C_TIMEOUT
#    define IS31FL3731_I2C_TIMEOUT 100
#endif

#ifndef ISSI_PERSISTENCE
#    define ISSI_PERSISTENCE 0
#ifndef IS31FL3731_I2C_PERSISTENCE
#    define IS31FL3731_I2C_PERSISTENCE 0
#endif

// Transfer buffer for TWITransmitData()


@@ 66,20 67,20 @@ uint8_t g_twi_transfer_buffer[20];
// We could optimize this and take out the unused registers from these
// buffers and the transfers in is31fl3731_write_pwm_buffer() but it's
// probably not worth the extra complexity.
uint8_t g_pwm_buffer[LED_DRIVER_COUNT][144];
bool    g_pwm_buffer_update_required[LED_DRIVER_COUNT] = {false};
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 LED_DRIVER_COUNT == 1
uint8_t g_led_control_registers[LED_DRIVER_COUNT][18] = {{0}};
#elif LED_DRIVER_COUNT == 2
uint8_t g_led_control_registers[LED_DRIVER_COUNT][18] = {{0}, {0}};
#elif LED_DRIVER_COUNT == 3
uint8_t g_led_control_registers[LED_DRIVER_COUNT][18] = {{0}, {0}, {0}};
#elif LED_DRIVER_COUNT == 4
uint8_t g_led_control_registers[LED_DRIVER_COUNT][18] = {{0}, {0}, {0}, {0}};
#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[LED_DRIVER_COUNT] = {false};
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)


@@ 99,14 100,14 @@ 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;

#if ISSI_PERSISTENCE > 0
    for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
        if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) == 0) {
#if IS31FL3731_I2C_PERSISTENCE > 0
    for (uint8_t i = 0; i < IS31FL3731_I2C_PERSISTENCE; i++) {
        if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT) == 0) {
            break;
        }
    }
#else
    i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
    i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT);
#endif
}



@@ 125,12 126,12 @@ void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
        // thus this sets registers 0x24-0x33, 0x34-0x43, etc. in one transfer
        memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);

#if ISSI_PERSISTENCE > 0
        for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
            if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) == 0) break;
#if IS31FL3731_I2C_PERSISTENCE > 0
        for (uint8_t i = 0; i < IS31FL3731_I2C_PERSISTENCE; i++) {
            if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT) == 0) break;
        }
#else
        i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT);
        i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT);
#endif
    }
}


@@ 142,26 143,26 @@ void is31fl3731_init(uint8_t addr) {
    // then disable software shutdown.

    // select "function register" bank
    is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG);
    is31fl3731_write_register(addr, IS31FL3731_COMMANDREGISTER, IS31FL3731_BANK_FUNCTIONREG);

    // enable software shutdown
    is31fl3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x00);
#ifdef ISSI_3731_DEGHOST // set to enable de-ghosting of the array
    is31fl3731_write_register(addr, ISSI_REG_GHOST_IMAGE_PREVENTION, 0x10);
    is31fl3731_write_register(addr, IS31FL3731_REG_SHUTDOWN, 0x00);
#ifdef IS31FL3731_DEGHOST // set to enable de-ghosting of the array
    is31fl3731_write_register(addr, IS31FL3731_REG_GHOST_IMAGE_PREVENTION, 0x10);
#endif

    // this delay was copied from other drivers, might not be needed
    wait_ms(10);

    // picture mode
    is31fl3731_write_register(addr, ISSI_REG_CONFIG, ISSI_REG_CONFIG_PICTUREMODE);
    is31fl3731_write_register(addr, IS31FL3731_REG_CONFIG, IS31FL3731_REG_CONFIG_PICTUREMODE);
    // display frame 0
    is31fl3731_write_register(addr, ISSI_REG_PICTUREFRAME, 0x00);
    is31fl3731_write_register(addr, IS31FL3731_REG_PICTUREFRAME, 0x00);
    // audio sync off
    is31fl3731_write_register(addr, ISSI_REG_AUDIOSYNC, 0x00);
    is31fl3731_write_register(addr, IS31FL3731_REG_AUDIOSYNC, 0x00);

    // select bank 0
    is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, 0);
    is31fl3731_write_register(addr, IS31FL3731_COMMANDREGISTER, 0);

    // turn off all LEDs in the LED control register
    for (int i = 0x00; i <= 0x11; i++) {


@@ 179,15 180,15 @@ void is31fl3731_init(uint8_t addr) {
    }

    // select "function register" bank
    is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG);
    is31fl3731_write_register(addr, IS31FL3731_COMMANDREGISTER, IS31FL3731_BANK_FUNCTIONREG);

    // disable software shutdown
    is31fl3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x01);
    is31fl3731_write_register(addr, IS31FL3731_REG_SHUTDOWN, 0x01);

    // select bank 0 and leave it selected.
    // most usage after initialization is just writing PWM buffers in bank 0
    // as there's not much point in double-buffering
    is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, 0);
    is31fl3731_write_register(addr, IS31FL3731_COMMANDREGISTER, 0);
}

void is31fl3731_set_value(int index, uint8_t value) {

M drivers/led/issi/is31fl3731-simple.h => drivers/led/issi/is31fl3731-simple.h +15 -1
@@ 20,9 20,23 @@

#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include "progmem.h"

// ======== DEPRECATED DEFINES - DO NOT USE ========
#ifdef LED_DRIVER_COUNT
#    define IS31FL3731_DRIVER_COUNT LED_DRIVER_COUNT
#endif
#ifdef ISSI_TIMEOUT
#    define IS31FL3731_I2C_TIMEOUT ISSI_TIMEOUT
#endif
#ifdef ISSI_PERSISTENCE
#    define IS31FL3731_I2C_PERSISTENCE ISSI_PERSISTENCE
#endif
#ifdef ISSI_3731_DEGHOST
#    define IS31FL3731_DEGHOST ISSI_3731_DEGHOST
#endif
// ========

typedef struct is31_led {
    uint8_t driver : 2;
    uint8_t v;

M drivers/led/issi/is31fl3731.c => drivers/led/issi/is31fl3731.c +42 -41
@@ 17,6 17,7 @@
 */

#include "is31fl3731.h"
#include <string.h>
#include "i2c_master.h"
#include "wait.h"



@@ 27,34 28,34 @@
// 0b1110111 AD <-> VCC
// 0b1110101 AD <-> SCL
// 0b1110110 AD <-> SDA
#define ISSI_ADDR_DEFAULT 0x74
#define IS31FL3731_I2C_ADDRESS_DEFAULT 0x74

#define ISSI_REG_CONFIG 0x00
#define ISSI_REG_CONFIG_PICTUREMODE 0x00
#define ISSI_REG_CONFIG_AUTOPLAYMODE 0x08
#define ISSI_REG_CONFIG_AUDIOPLAYMODE 0x18
#define IS31FL3731_REG_CONFIG 0x00
#define IS31FL3731_REG_CONFIG_PICTUREMODE 0x00
#define IS31FL3731_REG_CONFIG_AUTOPLAYMODE 0x08
#define IS31FL3731_REG_CONFIG_AUDIOPLAYMODE 0x18

#define ISSI_CONF_PICTUREMODE 0x00
#define ISSI_CONF_AUTOFRAMEMODE 0x04
#define ISSI_CONF_AUDIOMODE 0x08
#define IS31FL3731_CONF_PICTUREMODE 0x00
#define IS31FL3731_CONF_AUTOFRAMEMODE 0x04
#define IS31FL3731_CONF_AUDIOMODE 0x08

#define ISSI_REG_PICTUREFRAME 0x01
#define IS31FL3731_REG_PICTUREFRAME 0x01

// Not defined in the datasheet -- See AN for IC
#define ISSI_REG_GHOST_IMAGE_PREVENTION 0xC2 // Set bit 4 to enable de-ghosting
#define IS31FL3731_REG_GHOST_IMAGE_PREVENTION 0xC2 // Set bit 4 to enable de-ghosting

#define ISSI_REG_SHUTDOWN 0x0A
#define ISSI_REG_AUDIOSYNC 0x06
#define IS31FL3731_REG_SHUTDOWN 0x0A
#define IS31FL3731_REG_AUDIOSYNC 0x06

#define ISSI_COMMANDREGISTER 0xFD
#define ISSI_BANK_FUNCTIONREG 0x0B // helpfully called 'page nine'
#define IS31FL3731_COMMANDREGISTER 0xFD
#define IS31FL3731_BANK_FUNCTIONREG 0x0B // helpfully called 'page nine'

#ifndef ISSI_TIMEOUT
#    define ISSI_TIMEOUT 100
#ifndef IS31FL3731_I2C_TIMEOUT
#    define IS31FL3731_I2C_TIMEOUT 100
#endif

#ifndef ISSI_PERSISTENCE
#    define ISSI_PERSISTENCE 0
#ifndef IS31FL3731_I2C_PERSISTENCE
#    define IS31FL3731_I2C_PERSISTENCE 0
#endif

// Transfer buffer for TWITransmitData()


@@ 65,11 66,11 @@ uint8_t g_twi_transfer_buffer[20];
// We could optimize this and take out the unused registers from these
// buffers and the transfers in is31fl3731_write_pwm_buffer() but it's
// probably not worth the extra complexity.
uint8_t g_pwm_buffer[DRIVER_COUNT][144];
bool    g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
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[DRIVER_COUNT][18]             = {{0}};
bool    g_led_control_registers_update_required[DRIVER_COUNT] = {false};
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)


@@ 89,12 90,12 @@ 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;

#if ISSI_PERSISTENCE > 0
    for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
        if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) == 0) break;
#if IS31FL3731_I2C_PERSISTENCE > 0
    for (uint8_t i = 0; i < IS31FL3731_I2C_PERSISTENCE; i++) {
        if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT) == 0) break;
    }
#else
    i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
    i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT);
#endif
}



@@ 113,12 114,12 @@ void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
        // thus this sets registers 0x24-0x33, 0x34-0x43, etc. in one transfer
        memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);

#if ISSI_PERSISTENCE > 0
        for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
            if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) == 0) break;
#if IS31FL3731_I2C_PERSISTENCE > 0
        for (uint8_t i = 0; i < IS31FL3731_I2C_PERSISTENCE; i++) {
            if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT) == 0) break;
        }
#else
        i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT);
        i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT);
#endif
    }
}


@@ 130,26 131,26 @@ void is31fl3731_init(uint8_t addr) {
    // then disable software shutdown.

    // select "function register" bank
    is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG);
    is31fl3731_write_register(addr, IS31FL3731_COMMANDREGISTER, IS31FL3731_BANK_FUNCTIONREG);

    // enable software shutdown
    is31fl3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x00);
#ifdef ISSI_3731_DEGHOST // set to enable de-ghosting of the array
    is31fl3731_write_register(addr, ISSI_REG_GHOST_IMAGE_PREVENTION, 0x10);
    is31fl3731_write_register(addr, IS31FL3731_REG_SHUTDOWN, 0x00);
#ifdef IS31FL3731_DEGHOST // set to enable de-ghosting of the array
    is31fl3731_write_register(addr, IS31FL3731_REG_GHOST_IMAGE_PREVENTION, 0x10);
#endif

    // this delay was copied from other drivers, might not be needed
    wait_ms(10);

    // picture mode
    is31fl3731_write_register(addr, ISSI_REG_CONFIG, ISSI_REG_CONFIG_PICTUREMODE);
    is31fl3731_write_register(addr, IS31FL3731_REG_CONFIG, IS31FL3731_REG_CONFIG_PICTUREMODE);
    // display frame 0
    is31fl3731_write_register(addr, ISSI_REG_PICTUREFRAME, 0x00);
    is31fl3731_write_register(addr, IS31FL3731_REG_PICTUREFRAME, 0x00);
    // audio sync off
    is31fl3731_write_register(addr, ISSI_REG_AUDIOSYNC, 0x00);
    is31fl3731_write_register(addr, IS31FL3731_REG_AUDIOSYNC, 0x00);

    // select bank 0
    is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, 0);
    is31fl3731_write_register(addr, IS31FL3731_COMMANDREGISTER, 0);

    // turn off all LEDs in the LED control register
    for (int i = 0x00; i <= 0x11; i++) {


@@ 167,15 168,15 @@ void is31fl3731_init(uint8_t addr) {
    }

    // select "function register" bank
    is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG);
    is31fl3731_write_register(addr, IS31FL3731_COMMANDREGISTER, IS31FL3731_BANK_FUNCTIONREG);

    // disable software shutdown
    is31fl3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x01);
    is31fl3731_write_register(addr, IS31FL3731_REG_SHUTDOWN, 0x01);

    // select bank 0 and leave it selected.
    // most usage after initialization is just writing PWM buffers in bank 0
    // as there's not much point in double-buffering
    is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, 0);
    is31fl3731_write_register(addr, IS31FL3731_COMMANDREGISTER, 0);
}

void is31fl3731_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {

M drivers/led/issi/is31fl3731.h => drivers/led/issi/is31fl3731.h +15 -1
@@ 19,9 19,23 @@

#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include "progmem.h"

// ======== DEPRECATED DEFINES - DO NOT USE ========
#ifdef DRIVER_COUNT
#    define IS31FL3731_DRIVER_COUNT DRIVER_COUNT
#endif
#ifdef ISSI_TIMEOUT
#    define IS31FL3731_I2C_TIMEOUT ISSI_TIMEOUT
#endif
#ifdef ISSI_PERSISTENCE
#    define IS31FL3731_I2C_PERSISTENCE ISSI_PERSISTENCE
#endif
#ifdef ISSI_3731_DEGHOST
#    define IS31FL3731_DEGHOST ISSI_3731_DEGHOST
#endif
// ========

typedef struct is31_led {
    uint8_t driver : 2;
    uint8_t r;

M keyboards/aeboards/satellite/rev1/config.h => keyboards/aeboards/satellite/rev1/config.h +1 -1
@@ 20,7 20,7 @@
#define DRIVER_ADDR_1 0x74
#define DRIVER_ADDR_2 0x76

#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 36
#define DRIVER_2_LED_TOTAL 36
#define ISSI_DRIVER_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M keyboards/clueboard/66_hotswap/gen1/config.h => keyboards/clueboard/66_hotswap/gen1/config.h +1 -1
@@ 44,7 44,7 @@
#define I2C1_SCL_PIN B8
#define I2C1_SDA_PIN B9

#define LED_DRIVER_COUNT 1
#define IS31FL3731_DRIVER_COUNT 1
#define LED_MATRIX_LED_COUNT 71

// LED Matrix Animation modes. Explicitly enabled

M keyboards/dp60/config.h => keyboards/dp60/config.h +1 -1
@@ 35,7 35,7 @@
//rgb matrix setting
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110111
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 36
#define DRIVER_2_LED_TOTAL 36
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M keyboards/dztech/dz65rgb/v1/config.h => keyboards/dztech/dz65rgb/v1/config.h +1 -1
@@ 72,7 72,7 @@
#    define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL
#    define DRIVER_ADDR_1 0b1110100
#    define DRIVER_ADDR_2 0b1110111
#    define DRIVER_COUNT 2
#    define IS31FL3731_DRIVER_COUNT 2
#    define DRIVER_1_LED_TOTAL 35
#    define DRIVER_2_LED_TOTAL 33
#    define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M keyboards/dztech/dz65rgb/v2/config.h => keyboards/dztech/dz65rgb/v2/config.h +1 -1
@@ 72,7 72,7 @@
#    define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL
#    define DRIVER_ADDR_1 0b1110100
#    define DRIVER_ADDR_2 0b1110111
#    define DRIVER_COUNT 2
#    define IS31FL3731_DRIVER_COUNT 2
#    define DRIVER_1_LED_TOTAL 35
#    define DRIVER_2_LED_TOTAL 33
#    define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M keyboards/ergodox_ez/config.h => keyboards/ergodox_ez/config.h +1 -1
@@ 93,7 93,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
// RGB backlight
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110111
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 24
#define DRIVER_2_LED_TOTAL 24
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M keyboards/fallacy/config.h => keyboards/fallacy/config.h +1 -1
@@ 19,7 19,7 @@
 * Using the default defines here, but using a custom implementation
 */
#define LED_DRIVER_ADDR_1 0b1110100
#define LED_DRIVER_COUNT 1
#define IS31FL3731_DRIVER_COUNT 1
#define LED_MATRIX_LED_COUNT 3

/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap

M keyboards/ferris/0_2/bling/config.h => keyboards/ferris/0_2/bling/config.h +1 -1
@@ 20,7 20,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
/* LED Drivers */
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110101
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 7
#define DRIVER_2_LED_TOTAL 7
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M keyboards/geekboards/tester/config.h => keyboards/geekboards/tester/config.h +1 -1
@@ 57,7 57,7 @@

#    define DRIVER_ADDR_1 0b1110100
#    define DRIVER_ADDR_2 0b1110101
#    define DRIVER_COUNT 2
#    define IS31FL3731_DRIVER_COUNT 2
#    define DRIVER_1_LED_TOTAL 8
#    define DRIVER_2_LED_TOTAL 0
#    define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M keyboards/gizmo_engineering/gk6/config.h => keyboards/gizmo_engineering/gk6/config.h +1 -1
@@ 21,7 21,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110111

#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 32
#define DRIVER_2_LED_TOTAL 32
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M keyboards/handwired/orbweaver/config.h => keyboards/handwired/orbweaver/config.h +1 -1
@@ 17,7 17,7 @@

#pragma once

#define DRIVER_COUNT 1
#define IS31FL3731_DRIVER_COUNT 1
#define DRIVER_ADDR_1 0b1110100
#define RGB_MATRIX_LED_COUNT 20
#define I2C1_CLOCK_SPEED 100000

M keyboards/hs60/v1/config.h => keyboards/hs60/v1/config.h +1 -1
@@ 44,7 44,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110101

#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 30

#ifdef  HS60_ANSI

M keyboards/inett_studio/sqx/hotswap/config.h => keyboards/inett_studio/sqx/hotswap/config.h +1 -1
@@ 34,7 34,7 @@
#define DRIVER_2_LED_TOTAL 31
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110111
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

#if defined(RGB_MATRIX_ENABLE) && defined(RGBLIGHT_ENABLE)

M keyboards/inett_studio/sqx/universal/config.h => keyboards/inett_studio/sqx/universal/config.h +1 -1
@@ 34,7 34,7 @@
#define DRIVER_2_LED_TOTAL 36
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110111
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

#if defined(RGB_MATRIX_ENABLE) && defined(RGBLIGHT_ENABLE)

M keyboards/input_club/ergodox_infinity/config.h => keyboards/input_club/ergodox_infinity/config.h +1 -1
@@ 44,7 44,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.

/* LED matrix driver */
#define LED_DRIVER_ADDR_1 0x74
#define LED_DRIVER_COUNT 1
#define IS31FL3731_DRIVER_COUNT 1
#define LED_MATRIX_LED_COUNT 76
#define LED_MATRIX_SPLIT { 38, 38 }
#define LED_DISABLE_WHEN_USB_SUSPENDED

M keyboards/input_club/whitefox/config.h => keyboards/input_club/whitefox/config.h +1 -1
@@ 22,7 22,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.

/* LED matrix driver */
#define LED_DRIVER_ADDR_1 0x74
#define LED_DRIVER_COUNT 1
#define IS31FL3731_DRIVER_COUNT 1
#define LED_MATRIX_LED_COUNT 71
#define LED_DISABLE_WHEN_USB_SUSPENDED


M keyboards/kbdfans/kbd67/mkiirgb/v1/config.h => keyboards/kbdfans/kbd67/mkiirgb/v1/config.h +1 -1
@@ 57,7 57,7 @@
#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110111
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 35
#define DRIVER_2_LED_TOTAL 32
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M keyboards/kbdfans/kbd67/mkiirgb/v2/config.h => keyboards/kbdfans/kbd67/mkiirgb/v2/config.h +1 -1
@@ 57,7 57,7 @@
#    define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255
#    define DRIVER_ADDR_1 0b1110100
#    define DRIVER_ADDR_2 0b1110111
#    define DRIVER_COUNT 2
#    define IS31FL3731_DRIVER_COUNT 2
#    define DRIVER_1_LED_TOTAL 35
#    define DRIVER_2_LED_TOTAL 32
#    define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M keyboards/kbdfans/maja/config.h => keyboards/kbdfans/maja/config.h +1 -1
@@ 56,7 56,7 @@
#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110110
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 36
#define DRIVER_2_LED_TOTAL 31
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M keyboards/latincompass/latin17rgb/config.h => keyboards/latincompass/latin17rgb/config.h +1 -1
@@ 79,7 79,7 @@
#    define DRIVER_ADDR_1 0b1110100
#    define DRIVER_ADDR_2 0b1110110

#    define DRIVER_COUNT 2
#    define IS31FL3731_DRIVER_COUNT 2
#    define DRIVER_1_LED_TOTAL 25
#    define DRIVER_2_LED_TOTAL 24
#    define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M keyboards/latincompass/latin6rgb/config.h => keyboards/latincompass/latin6rgb/config.h +1 -1
@@ 79,7 79,7 @@
// 0b1110110 AD <-> SDA
#define DRIVER_ADDR_1 0b1110100

#define DRIVER_COUNT 1
#define IS31FL3731_DRIVER_COUNT 1
#define RGB_MATRIX_LED_COUNT 6
#endif


M keyboards/matrix/m20add/config.h => keyboards/matrix/m20add/config.h +1 -1
@@ 79,5 79,5 @@
#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2

#define DRIVER_ADDR_1 0b1110100
#define DRIVER_COUNT 1
#define IS31FL3731_DRIVER_COUNT 1
#define RGB_MATRIX_LED_COUNT 20

M keyboards/matrix/noah/config.h => keyboards/matrix/noah/config.h +1 -1
@@ 21,7 21,7 @@
// rgb matrix setting
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110110
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 36
#define DRIVER_2_LED_TOTAL 36
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M keyboards/mechlovin/adelais/rgb_led/rev2/config.h => keyboards/mechlovin/adelais/rgb_led/rev2/config.h +1 -1
@@ 10,7 10,7 @@
// 0b1110110 AD <-> SDA
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110110
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 32
#define DRIVER_2_LED_TOTAL 36
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M keyboards/mechlovin/delphine/rgb_led/config.h => keyboards/mechlovin/delphine/rgb_led/config.h +1 -1
@@ 8,7 8,7 @@
// 0b1110101 AD <-> SCL
// 0b1110110 AD <-> SDA
#define DRIVER_ADDR_1 0b1110110
#define DRIVER_COUNT 1
#define IS31FL3731_DRIVER_COUNT 1
#define RGB_MATRIX_LED_COUNT 25
#define RGB_MATRIX_KEYPRESSES // reacts to keypresses
#define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)

M keyboards/mechlovin/hannah60rgb/rev2/config.h => keyboards/mechlovin/hannah60rgb/rev2/config.h +1 -1
@@ 9,7 9,7 @@
// 0b1110110 AD <-> SDA
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110110
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 44
#define DRIVER_2_LED_TOTAL 34
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M keyboards/mechlovin/olly/octagon/config.h => keyboards/mechlovin/olly/octagon/config.h +1 -1
@@ 29,7 29,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define I2C_DRIVER I2CD2
#define I2C1_SCL_PIN B10
#define I2C1_SDA_PIN B11
#define LED_DRIVER_COUNT 1
#define IS31FL3731_DRIVER_COUNT 1
#define LED_MATRIX_LED_COUNT 94
#define LED_MATRIX_KEYPRESSES // reacts to keypresses
#define LED_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)

M keyboards/mechlovin/zed65/mono_led/config.h => keyboards/mechlovin/zed65/mono_led/config.h +1 -1
@@ 29,7 29,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define I2C_DRIVER I2CD2
#define I2C1_SCL_PIN B10
#define I2C1_SDA_PIN B11
#define LED_DRIVER_COUNT 1
#define IS31FL3731_DRIVER_COUNT 1
#define LED_MATRIX_LED_COUNT 70
#define LED_MATRIX_KEYPRESSES // reacts to keypresses
#define LED_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)

M keyboards/moonlander/config.h => keyboards/moonlander/config.h +1 -1
@@ 68,7 68,7 @@
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110111

#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 36
#define DRIVER_2_LED_TOTAL 36
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M keyboards/neson_design/700e/config.h => keyboards/neson_design/700e/config.h +1 -1
@@ 34,7 34,7 @@
#define DRIVER_2_LED_TOTAL 32
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110111
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL+DRIVER_2_LED_TOTAL)

#define USB_SUSPEND_WAKEUP_DELAY 1000

M keyboards/neson_design/n6/config.h => keyboards/neson_design/n6/config.h +1 -1
@@ 34,5 34,5 @@
#define DRIVER_2_LED_TOTAL 32
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110111
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL+DRIVER_2_LED_TOTAL)

M keyboards/opendeck/32/rev1/config.h => keyboards/opendeck/32/rev1/config.h +1 -1
@@ 17,7 17,7 @@

// RGB matrix
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_COUNT 1
#define IS31FL3731_DRIVER_COUNT 1
#define RGB_MATRIX_LED_COUNT (4 * 8 * 3)
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_SPIRAL

M keyboards/planck/light/config.h => keyboards/planck/light/config.h +1 -1
@@ 17,7 17,7 @@
#define DRIVER_ADDR_1      0b1110100
#define DRIVER_ADDR_2      0b1110110

#define DRIVER_COUNT       2
#define IS31FL3731_DRIVER_COUNT       2
#define DRIVER_1_LED_TOTAL 25
#define DRIVER_2_LED_TOTAL 24
#define RGB_MATRIX_LED_COUNT   (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M keyboards/smallkeyboard/config.h => keyboards/smallkeyboard/config.h +1 -1
@@ 75,6 75,6 @@
// 0b1110110 AD <-> SDA
#define DRIVER_ADDR_1 0b1110100

#define DRIVER_COUNT 1
#define IS31FL3731_DRIVER_COUNT 1
#define RGB_MATRIX_LED_COUNT 6
#endif

M keyboards/spaceholdings/nebula12/config.h => keyboards/spaceholdings/nebula12/config.h +1 -1
@@ 73,7 73,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define RGB_BACKLIGHT_COLOR_1 { .h = 0, .s = 255 }
#define RGB_BACKLIGHT_COLOR_2 { .h = 127, .s = 255 }

#define DRIVER_COUNT 1
#define IS31FL3731_DRIVER_COUNT 1
#define RGB_MATRIX_LED_COUNT 16

// These define which keys in the matrix are alphas/mods

M keyboards/terrazzo/config.h => keyboards/terrazzo/config.h +1 -1
@@ 18,7 18,7 @@
#ifdef LED_MATRIX_ENABLE

#define LED_DRIVER_ADDR_1 0x74
#define LED_DRIVER_COUNT 1
#define IS31FL3731_DRIVER_COUNT 1
#define LED_MATRIX_LED_COUNT 105
#define LED_MATRIX_ROWS 15
#define LED_MATRIX_COLS 7

M keyboards/tkc/portico/config.h => keyboards/tkc/portico/config.h +2 -2
@@ 41,14 41,14 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#    define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
#    define DRIVER_ADDR_1 0x74
#    define DRIVER_ADDR_2 0x77
#    define DRIVER_COUNT 2
#    define IS31FL3731_DRIVER_COUNT 2
#    define DRIVER_1_LED_TOTAL 36
#    define DRIVER_2_LED_TOTAL 31
#    define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

#else
// IS31FL3731 driver
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT 67

#define RGB_BACKLIGHT_ENABLED 1

M keyboards/wilba_tech/rama_works_kara/config.h => keyboards/wilba_tech/rama_works_kara/config.h +1 -1
@@ 16,7 16,7 @@
#pragma once

// IS31FL3731 driver
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT 72

// Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap

M keyboards/wilba_tech/rama_works_koyu/config.h => keyboards/wilba_tech/rama_works_koyu/config.h +1 -1
@@ 16,7 16,7 @@
#pragma once

// IS31FL3731 driver
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT 72

// Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap

M keyboards/wilba_tech/rama_works_m10_c/config.h => keyboards/wilba_tech/rama_works_m10_c/config.h +1 -1
@@ 21,7 21,7 @@
#define LOCKING_RESYNC_ENABLE

// IS31FL3731 driver
#define DRIVER_COUNT 1
#define IS31FL3731_DRIVER_COUNT 1
#define RGB_MATRIX_LED_COUNT 12

// Enable WT RGB backlight

M keyboards/wilba_tech/rama_works_m50_a/config.h => keyboards/wilba_tech/rama_works_m50_a/config.h +1 -1
@@ 21,7 21,7 @@
#define LOCKING_RESYNC_ENABLE

// IS31FL3731 driver
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT 72

// Enable WT RGB backlight

M keyboards/wilba_tech/rama_works_m60_a/config.h => keyboards/wilba_tech/rama_works_m60_a/config.h +1 -1
@@ 16,7 16,7 @@
#pragma once

// IS31FL3731 driver
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT 72

// Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap

M keyboards/wilba_tech/rama_works_m65_b/config.h => keyboards/wilba_tech/rama_works_m65_b/config.h +1 -1
@@ 21,7 21,7 @@
#define LOCKING_RESYNC_ENABLE

// IS31FL3731 driver
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT 72

// Enable WT RGB backlight

M keyboards/wilba_tech/rama_works_m65_bx/config.h => keyboards/wilba_tech/rama_works_m65_bx/config.h +1 -1
@@ 21,7 21,7 @@
#define LOCKING_RESYNC_ENABLE

// IS31FL3731 driver
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT 72

// Enable WT RGB backlight

M keyboards/wilba_tech/rama_works_u80_a/config.h => keyboards/wilba_tech/rama_works_u80_a/config.h +1 -1
@@ 38,7 38,7 @@
//#define NO_ACTION_ONESHOT

// IS31FL3731 driver
#define DRIVER_COUNT 3
#define IS31FL3731_DRIVER_COUNT 3
#define RGB_MATRIX_LED_COUNT 108

#define RGB_BACKLIGHT_ENABLED 1

M keyboards/wilba_tech/wt60_b/config.h => keyboards/wilba_tech/wt60_b/config.h +1 -1
@@ 23,7 23,7 @@


// IS31FL3731 driver
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT 72

#define RGB_BACKLIGHT_ENABLED 1

M keyboards/wilba_tech/wt60_bx/config.h => keyboards/wilba_tech/wt60_bx/config.h +1 -1
@@ 23,7 23,7 @@


// IS31FL3731 driver
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT 72

#define RGB_BACKLIGHT_ENABLED 1

M keyboards/wilba_tech/wt60_c/config.h => keyboards/wilba_tech/wt60_c/config.h +1 -1
@@ 23,7 23,7 @@


// IS31FL3731 driver
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT 72

#define RGB_BACKLIGHT_ENABLED 1

M keyboards/wilba_tech/zeal60/config.h => keyboards/wilba_tech/zeal60/config.h +1 -1
@@ 16,7 16,7 @@
#pragma once

// IS31FL3731 driver
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT 72

// Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap

M keyboards/wilba_tech/zeal65/config.h => keyboards/wilba_tech/zeal65/config.h +1 -1
@@ 16,7 16,7 @@
#pragma once

// IS31FL3731 driver
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT 72

// Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap

M keyboards/xbows/knight/config.h => keyboards/xbows/knight/config.h +1 -1
@@ 50,7 50,7 @@
#    define DRIVER_ADDR_1 0b1110100
#    define DRIVER_ADDR_2 0b1110110
#    define DRIVER_ADDR_3 0b1110101
#    define DRIVER_COUNT 3
#    define IS31FL3731_DRIVER_COUNT 3
#    define DRIVER_1_LED_TOTAL 36
#    define DRIVER_2_LED_TOTAL 35
#    define DRIVER_3_LED_TOTAL 15

M keyboards/xbows/knight_plus/config.h => keyboards/xbows/knight_plus/config.h +1 -1
@@ 50,7 50,7 @@
#    define DRIVER_ADDR_1 0b1110100
#    define DRIVER_ADDR_2 0b1110110
#    define DRIVER_ADDR_3 0b1110101
#    define DRIVER_COUNT 3
#    define IS31FL3731_DRIVER_COUNT 3
#    define DRIVER_1_LED_TOTAL 36
#    define DRIVER_2_LED_TOTAL 35
#    define DRIVER_3_LED_TOTAL 15

M keyboards/xbows/nature/config.h => keyboards/xbows/nature/config.h +1 -1
@@ 52,7 52,7 @@
#    define DRIVER_ADDR_1 0b1110100
#    define DRIVER_ADDR_2 0b1110110
#    define DRIVER_ADDR_3 0b1110101
#    define DRIVER_COUNT 3
#    define IS31FL3731_DRIVER_COUNT 3
#    define DRIVER_1_LED_TOTAL 36
#    define DRIVER_2_LED_TOTAL 36
#    define DRIVER_3_LED_TOTAL 15

M keyboards/xbows/numpad/config.h => keyboards/xbows/numpad/config.h +1 -1
@@ 48,6 48,6 @@
#    define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH       // Hue & value pulse away from multiple key hits then fades value out

#    define DRIVER_ADDR_1 0b1110111
#    define DRIVER_COUNT 1
#    define IS31FL3731_DRIVER_COUNT 1
#    define RGB_MATRIX_LED_COUNT 22
#endif

M keyboards/xbows/ranger/config.h => keyboards/xbows/ranger/config.h +1 -1
@@ 49,7 49,7 @@
#    define DRIVER_ADDR_1 0b1110100
#    define DRIVER_ADDR_2 0b1110101
#    define DRIVER_ADDR_3 0b1110110
#    define DRIVER_COUNT 3
#    define IS31FL3731_DRIVER_COUNT 3
#    define DRIVER_1_LED_TOTAL 36
#    define DRIVER_2_LED_TOTAL 36
#    define DRIVER_3_LED_TOTAL 15

M keyboards/xbows/woody/config.h => keyboards/xbows/woody/config.h +1 -1
@@ 58,7 58,7 @@

#    define DRIVER_ADDR_1 0b1110100
#    define DRIVER_ADDR_2 0b1110110
#    define DRIVER_COUNT 2
#    define IS31FL3731_DRIVER_COUNT 2
#    define DRIVER_1_LED_TOTAL 35
#    define DRIVER_2_LED_TOTAL 32
#    define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

M keyboards/xelus/dawn60/rev1/config.h => keyboards/xelus/dawn60/rev1/config.h +1 -1
@@ 16,7 16,7 @@
#pragma once

// IS31FL3731 driver
#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT 64

// Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap

M keyboards/xelus/dawn60/rev1_qmk/config.h => keyboards/xelus/dawn60/rev1_qmk/config.h +1 -1
@@ 27,7 27,7 @@
#define DRIVER_ADDR_1 0x74
#define DRIVER_ADDR_2 0x76

#define DRIVER_COUNT 2
#define IS31FL3731_DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 32
#define DRIVER_2_LED_TOTAL 32
#define ISSI_DRIVER_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

Do not follow this link