From 84df69572ce47f74213869120211f9db371cd3cf Mon Sep 17 00:00:00 2001
From: Joel Challis <git@zvecr.com>
Date: Fri, 10 Nov 2023 05:14:22 +0000
Subject: [PATCH] Infer LED DRIVER_COUNT from configured addresses (#22311)

---
 docs/feature_led_matrix.md           |  4 ----
 docs/feature_rgb_matrix.md           | 12 ------------
 drivers/led/aw20216s.h               |  9 ++++++---
 drivers/led/issi/is31fl3731-simple.h | 13 ++++++++++---
 drivers/led/issi/is31fl3731.h        | 13 ++++++++++---
 drivers/led/issi/is31fl3733-simple.h | 13 ++++++++++---
 drivers/led/issi/is31fl3733.h        | 13 ++++++++++---
 drivers/led/issi/is31fl3736-simple.h | 13 ++++++++++---
 drivers/led/issi/is31fl3736.h        | 13 ++++++++++---
 drivers/led/issi/is31fl3737-simple.h | 13 ++++++++++---
 drivers/led/issi/is31fl3737.h        | 13 ++++++++++---
 drivers/led/issi/is31fl3741-simple.h | 13 ++++++++++---
 drivers/led/issi/is31fl3741.h        | 13 ++++++++++---
 drivers/led/issi/is31fl3743.h        |  2 +-
 drivers/led/issi/is31fl3745.h        |  2 +-
 drivers/led/issi/is31flcommon.h      | 10 ++++++++++
 drivers/led/snled27351-simple.h      | 13 ++++++++++---
 drivers/led/snled27351.h             | 13 ++++++++++---
 18 files changed, 138 insertions(+), 57 deletions(-)

diff --git a/docs/feature_led_matrix.md b/docs/feature_led_matrix.md
index 7dd2e71d61..b1ce09d349 100644
--- a/docs/feature_led_matrix.md
+++ b/docs/feature_led_matrix.md
@@ -21,7 +21,6 @@ You can use between 1 and 4 IS31FL3731 IC's. Do not specify `LED_DRIVER_ADDR_<N>
 |----------|-------------|---------|
 | `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 | |
 | `IS31FL3731_I2C_ADDRESS_1` | (Required) Address for the first LED driver | |
 | `IS31FL3731_I2C_ADDRESS_2` | (Optional) Address for the second LED driver | |
@@ -43,7 +42,6 @@ Here is an example using 2 drivers.
 #define IS31FL3731_I2C_ADDRESS_1 IS31FL3731_I2C_ADDRESS_GND
 #define IS31FL3731_I2C_ADDRESS_2 IS31FL3731_I2C_ADDRESS_SDA
 
-#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)
@@ -96,7 +94,6 @@ Configure the hardware via your `config.h`:
 |----------|-------------|---------|
 | `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
 | `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
-| `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 | |
 | `DRIVER_ADDR_1` | (Optional) Address for the first LED driver | |
 | `DRIVER_ADDR_<N>` | (Required) Address for the additional LED drivers | |
@@ -129,7 +126,6 @@ Here is an example using 2 drivers.
 ```c
 #define DRIVER_ADDR_2 0b0100001
 
-#define DRIVER_COUNT 2
 #define DRIVER_1_LED_TOTAL 66
 #define DRIVER_2_LED_TOTAL 42
 #define LED_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md
index f068058093..01ecff1f3f 100644
--- a/docs/feature_rgb_matrix.md
+++ b/docs/feature_rgb_matrix.md
@@ -22,7 +22,6 @@ You can use between 1 and 4 IS31FL3731 IC's. Do not specify `DRIVER_ADDR_<N>` de
 | `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 | |
 | `IS31FL3731_I2C_ADDRESS_1` | (Required) Address for the first RGB driver | |
 | `IS31FL3731_I2C_ADDRESS_2` | (Optional) Address for the second RGB driver | |
@@ -44,7 +43,6 @@ Here is an example using 2 drivers.
 #define IS31FL3731_I2C_ADDRESS_1 IS31FL3731_I2C_ADDRESS_GND
 #define IS31FL3731_I2C_ADDRESS_2 IS31FL3731_I2C_ADDRESS_SDA
 
-#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)
@@ -91,7 +89,6 @@ You can use between 1 and 4 IS31FL3733 IC's. Do not specify `DRIVER_ADDR_<N>` de
 | `IS31FL3733_GLOBALCURRENT` | (Optional) Configuration for the Global Current Register | 0xFF |
 | `IS31FL3733_SWPULLUP` | (Optional) Set the value of the SWx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
 | `IS31FL3733_CSPULLUP` | (Optional) Set the value of the CSx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
-| `IS31FL3733_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 | |
 | `IS31FL3733_I2C_ADDRESS_1` | (Required) Address for the first RGB driver | |
 | `IS31FL3733_I2C_ADDRESS_2` | (Optional) Address for the second RGB driver | |
@@ -130,7 +127,6 @@ Here is an example using 2 drivers.
 #define IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND
 #define IS31FL3733_I2C_ADDRESS_2 IS31FL3733_I2C_ADDRESS_GND_VCC
 
-#define IS31FL3733_DRIVER_COUNT 2
 #define DRIVER_1_LED_TOTAL 58
 #define DRIVER_2_LED_TOTAL 10
 #define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
@@ -178,7 +174,6 @@ Configure the hardware via your `config.h`:
 | `IS31FL3736_GLOBALCURRENT` | (Optional) Configuration for the Global Current Register | 0xFF |
 | `IS31FL3736_SWPULLUP` | (Optional) Set the value of the SWx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
 | `IS31FL3736_CSPULLUP` | (Optional) Set the value of the CSx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
-| `IS31FL3736_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 | |
 | `IS31FL3736_I2C_ADDRESS_1` | (Required) Address for the first RGB driver | |
 | `IS31FL3736_I2C_ADDRESS_2` | (Optional) Address for the second RGB driver | |
@@ -214,7 +209,6 @@ Here is an example using 2 drivers.
 #define IS31FL3736_I2C_ADDRESS_1 IS31FL3736_I2C_ADDRESS_GND_GND
 #define IS31FL3736_I2C_ADDRESS_2 IS31FL3736_I2C_ADDRESS_GND_SCL
 
-#define IS31FL3736_DRIVER_COUNT 2
 #define DRIVER_1_LED_TOTAL 30
 #define DRIVER_2_LED_TOTAL 32
 #define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
@@ -255,7 +249,6 @@ Configure the hardware via your `config.h`:
 | `IS31FL3737_GLOBALCURRENT` | (Optional) Configuration for the Global Current Register | 0xFF |
 | `IS31FL3737_SWPULLUP` | (Optional) Set the value of the SWx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
 | `IS31FL3737_CSPULLUP` | (Optional) Set the value of the CSx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
-| `IS31FL3737_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 | |
 | `IS31FL3737_I2C_ADDRESS_1` | (Required) Address for the first RGB driver | |
 | `IS31FL3737_I2C_ADDRESS_2` | (Optional) Address for the second RGB driver | |
@@ -290,7 +283,6 @@ Here is an example using 2 drivers.
 #define IS31FL3737_I2C_ADDRESS_1 IS31FL3737_I2C_ADDRESS_GND
 #define IS31FL3737_I2C_ADDRESS_2 IS31FL3737_I2C_ADDRESS_SCL
 
-#define IS31FL3737_DRIVER_COUNT 2
 #define DRIVER_1_LED_TOTAL 30
 #define DRIVER_2_LED_TOTAL 36
 #define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
@@ -341,7 +333,6 @@ Configure the hardware via your `config.h`:
 |----------|-------------|---------|
 | `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
 | `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
-| `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` | (Optional) Address for the first RGB driver | |
 | `DRIVER_ADDR_<N>` | (Required) Address for the additional RGB drivers | |
@@ -376,7 +367,6 @@ Here is an example using 2 drivers.
 ```c
 #define DRIVER_ADDR_2 0b0100001
 
-#define DRIVER_COUNT 2
 #define DRIVER_1_LED_TOTAL 66
 #define DRIVER_2_LED_TOTAL 42
 #define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
@@ -486,7 +476,6 @@ You can use up to 2 AW20216S IC's. Do not specify `DRIVER_<N>_xxx` defines for I
 | `AW20216S_EN_PIN_2` | (Optional) MCU pin connected to second RGB driver hardware enable line  | |
 | `DRIVER_1_LED_TOTAL` | (Required) How many RGB lights are connected to first RGB driver  | |
 | `DRIVER_2_LED_TOTAL` | (Optional) How many RGB lights are connected to second RGB driver  | |
-| `AW20216S_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 | |
 | `AW20216S_SCALING_MAX` | (Optional) LED current scaling value (0-255, higher values mean LED is brighter at full PWM) | 150 |
 | `AW20216S_GLOBAL_CURRENT_MAX` | (Optional) Driver global current limit (0-255, higher values means the driver may consume more power) | 150 |
@@ -502,7 +491,6 @@ Here is an example using 2 drivers.
 #define AW20216S_EN_PIN_1 C13
 #define AW20216S_EN_PIN_2 C13
 
-#define AW20216S_DRIVER_COUNT 2
 #define DRIVER_1_LED_TOTAL 66
 #define DRIVER_2_LED_TOTAL 32
 #define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
diff --git a/drivers/led/aw20216s.h b/drivers/led/aw20216s.h
index 7ad1e5653b..d79d632084 100644
--- a/drivers/led/aw20216s.h
+++ b/drivers/led/aw20216s.h
@@ -23,9 +23,6 @@
 #include "util.h"
 
 // ======== DEPRECATED DEFINES - DO NOT USE ========
-#ifdef DRIVER_COUNT
-#    define AW20216S_DRIVER_COUNT DRIVER_COUNT
-#endif
 #ifdef AW_SCALING_MAX
 #    define AW20216S_SCALING_MAX AW_SCALING_MAX
 #endif
@@ -59,6 +56,12 @@
 #    define AW20216S_LED_COUNT RGB_MATRIX_LED_COUNT
 #endif
 
+#if defined(AW20216S_CS_PIN_2)
+#    define AW20216S_DRIVER_COUNT 2
+#elif defined(AW20216S_CS_PIN_1)
+#    define AW20216S_DRIVER_COUNT 1
+#endif
+
 typedef struct aw20216s_led_t {
     uint8_t driver : 2;
     uint8_t r;
diff --git a/drivers/led/issi/is31fl3731-simple.h b/drivers/led/issi/is31fl3731-simple.h
index 185e80683b..32b42feab0 100644
--- a/drivers/led/issi/is31fl3731-simple.h
+++ b/drivers/led/issi/is31fl3731-simple.h
@@ -36,9 +36,6 @@
 #ifdef LED_DRIVER_ADDR_4
 #    define IS31FL3731_I2C_ADDRESS_4 LED_DRIVER_ADDR_4
 #endif
-#ifdef LED_DRIVER_COUNT
-#    define IS31FL3731_DRIVER_COUNT LED_DRIVER_COUNT
-#endif
 #ifdef ISSI_TIMEOUT
 #    define IS31FL3731_I2C_TIMEOUT ISSI_TIMEOUT
 #endif
@@ -62,6 +59,16 @@
 #    define IS31FL3731_LED_COUNT LED_MATRIX_LED_COUNT
 #endif
 
+#if defined IS31FL3731_I2C_ADDRESS_4
+#    define IS31FL3731_DRIVER_COUNT 4
+#elif defined IS31FL3731_I2C_ADDRESS_3
+#    define IS31FL3731_DRIVER_COUNT 3
+#elif defined IS31FL3731_I2C_ADDRESS_2
+#    define IS31FL3731_DRIVER_COUNT 2
+#elif defined IS31FL3731_I2C_ADDRESS_1
+#    define IS31FL3731_DRIVER_COUNT 1
+#endif
+
 typedef struct is31fl3731_led_t {
     uint8_t driver : 2;
     uint8_t v;
diff --git a/drivers/led/issi/is31fl3731.h b/drivers/led/issi/is31fl3731.h
index 77162ded30..d7b512e4c4 100644
--- a/drivers/led/issi/is31fl3731.h
+++ b/drivers/led/issi/is31fl3731.h
@@ -35,9 +35,6 @@
 #ifdef DRIVER_ADDR_4
 #    define IS31FL3731_I2C_ADDRESS_4 DRIVER_ADDR_4
 #endif
-#ifdef DRIVER_COUNT
-#    define IS31FL3731_DRIVER_COUNT DRIVER_COUNT
-#endif
 #ifdef ISSI_TIMEOUT
 #    define IS31FL3731_I2C_TIMEOUT ISSI_TIMEOUT
 #endif
@@ -61,6 +58,16 @@
 #    define IS31FL3731_LED_COUNT RGB_MATRIX_LED_COUNT
 #endif
 
+#if defined(IS31FL3731_I2C_ADDRESS_4)
+#    define IS31FL3731_DRIVER_COUNT 4
+#elif defined(IS31FL3731_I2C_ADDRESS_3)
+#    define IS31FL3731_DRIVER_COUNT 3
+#elif defined(IS31FL3731_I2C_ADDRESS_2)
+#    define IS31FL3731_DRIVER_COUNT 2
+#elif defined(IS31FL3731_I2C_ADDRESS_1)
+#    define IS31FL3731_DRIVER_COUNT 1
+#endif
+
 typedef struct is31fl3731_led_t {
     uint8_t driver : 2;
     uint8_t r;
diff --git a/drivers/led/issi/is31fl3733-simple.h b/drivers/led/issi/is31fl3733-simple.h
index 2c6014455f..201d3ff788 100644
--- a/drivers/led/issi/is31fl3733-simple.h
+++ b/drivers/led/issi/is31fl3733-simple.h
@@ -26,9 +26,6 @@
 #include "util.h"
 
 // ======== DEPRECATED DEFINES - DO NOT USE ========
-#ifdef LED_DRIVER_COUNT
-#    define IS31FL3733_DRIVER_COUNT LED_DRIVER_COUNT
-#endif
 #ifdef ISSI_TIMEOUT
 #    define IS31FL3733_I2C_TIMEOUT ISSI_TIMEOUT
 #endif
@@ -81,6 +78,16 @@
 #    define IS31FL3733_LED_COUNT LED_MATRIX_LED_COUNT
 #endif
 
+#if defined(IS31FL3733_I2C_ADDRESS_4)
+#    define IS31FL3733_DRIVER_COUNT 4
+#elif defined(IS31FL3733_I2C_ADDRESS_3)
+#    define IS31FL3733_DRIVER_COUNT 3
+#elif defined(IS31FL3733_I2C_ADDRESS_2)
+#    define IS31FL3733_DRIVER_COUNT 2
+#elif defined(IS31FL3733_I2C_ADDRESS_1)
+#    define IS31FL3733_DRIVER_COUNT 1
+#endif
+
 typedef struct is31fl3733_led_t {
     uint8_t driver : 2;
     uint8_t v;
diff --git a/drivers/led/issi/is31fl3733.h b/drivers/led/issi/is31fl3733.h
index a87d790c44..c86aa9ee1e 100644
--- a/drivers/led/issi/is31fl3733.h
+++ b/drivers/led/issi/is31fl3733.h
@@ -49,9 +49,6 @@
 #ifdef DRIVER_ADDR_4
 #    define IS31FL3733_SYNC_4 DRIVER_SYNC_4
 #endif
-#ifdef DRIVER_COUNT
-#    define IS31FL3733_DRIVER_COUNT DRIVER_COUNT
-#endif
 #ifdef ISSI_TIMEOUT
 #    define IS31FL3733_I2C_TIMEOUT ISSI_TIMEOUT
 #endif
@@ -104,6 +101,16 @@
 #    define IS31FL3733_LED_COUNT RGB_MATRIX_LED_COUNT
 #endif
 
+#if defined(IS31FL3733_I2C_ADDRESS_4)
+#    define IS31FL3733_DRIVER_COUNT 4
+#elif defined(IS31FL3733_I2C_ADDRESS_3)
+#    define IS31FL3733_DRIVER_COUNT 3
+#elif defined(IS31FL3733_I2C_ADDRESS_2)
+#    define IS31FL3733_DRIVER_COUNT 2
+#elif defined(IS31FL3733_I2C_ADDRESS_1)
+#    define IS31FL3733_DRIVER_COUNT 1
+#endif
+
 typedef struct is31fl3733_led_t {
     uint8_t driver : 2;
     uint8_t r;
diff --git a/drivers/led/issi/is31fl3736-simple.h b/drivers/led/issi/is31fl3736-simple.h
index 7e3e728641..9ff9c650aa 100644
--- a/drivers/led/issi/is31fl3736-simple.h
+++ b/drivers/led/issi/is31fl3736-simple.h
@@ -23,9 +23,6 @@
 #include "util.h"
 
 // ======== DEPRECATED DEFINES - DO NOT USE ========
-#ifdef DRIVER_COUNT
-#    define IS31FL3736_DRIVER_COUNT DRIVER_COUNT
-#endif
 #ifdef ISSI_TIMEOUT
 #    define IS31FL3736_I2C_TIMEOUT ISSI_TIMEOUT
 #endif
@@ -76,6 +73,16 @@
 #    define IS31FL3736_LED_COUNT LED_MATRIX_LED_COUNT
 #endif
 
+#if defined(IS31FL3736_I2C_ADDRESS_4)
+#    define IS31FL3736_DRIVER_COUNT 4
+#elif defined(IS31FL3736_I2C_ADDRESS_3)
+#    define IS31FL3736_DRIVER_COUNT 3
+#elif defined(IS31FL3736_I2C_ADDRESS_2)
+#    define IS31FL3736_DRIVER_COUNT 2
+#elif defined(IS31FL3736_I2C_ADDRESS_1)
+#    define IS31FL3736_DRIVER_COUNT 1
+#endif
+
 typedef struct is31fl3736_led_t {
     uint8_t driver : 2;
     uint8_t v;
diff --git a/drivers/led/issi/is31fl3736.h b/drivers/led/issi/is31fl3736.h
index bdb787494d..c3fa158de7 100644
--- a/drivers/led/issi/is31fl3736.h
+++ b/drivers/led/issi/is31fl3736.h
@@ -35,9 +35,6 @@
 #ifdef DRIVER_ADDR_4
 #    define IS31FL3736_I2C_ADDRESS_4 DRIVER_ADDR_4
 #endif
-#ifdef DRIVER_COUNT
-#    define IS31FL3736_DRIVER_COUNT DRIVER_COUNT
-#endif
 #ifdef ISSI_TIMEOUT
 #    define IS31FL3736_I2C_TIMEOUT ISSI_TIMEOUT
 #endif
@@ -88,6 +85,16 @@
 #    define IS31FL3736_LED_COUNT RGB_MATRIX_LED_COUNT
 #endif
 
+#if defined(IS31FL3736_I2C_ADDRESS_4)
+#    define IS31FL3736_DRIVER_COUNT 4
+#elif defined(IS31FL3736_I2C_ADDRESS_3)
+#    define IS31FL3736_DRIVER_COUNT 3
+#elif defined(IS31FL3736_I2C_ADDRESS_2)
+#    define IS31FL3736_DRIVER_COUNT 2
+#elif defined(IS31FL3736_I2C_ADDRESS_1)
+#    define IS31FL3736_DRIVER_COUNT 1
+#endif
+
 typedef struct is31fl3736_led_t {
     uint8_t driver : 2;
     uint8_t r;
diff --git a/drivers/led/issi/is31fl3737-simple.h b/drivers/led/issi/is31fl3737-simple.h
index 3262987697..36125518c6 100644
--- a/drivers/led/issi/is31fl3737-simple.h
+++ b/drivers/led/issi/is31fl3737-simple.h
@@ -25,9 +25,6 @@
 #include "util.h"
 
 // ======== DEPRECATED DEFINES - DO NOT USE ========
-#ifdef DRIVER_COUNT
-#    define IS31FL3737_DRIVER_COUNT DRIVER_COUNT
-#endif
 #ifdef ISSI_TIMEOUT
 #    define IS31FL3737_I2C_TIMEOUT ISSI_TIMEOUT
 #endif
@@ -66,6 +63,16 @@
 #    define IS31FL3737_LED_COUNT LED_MATRIX_LED_COUNT
 #endif
 
+#if defined(IS31FL3737_I2C_ADDRESS_4)
+#    define IS31FL3737_DRIVER_COUNT 4
+#elif defined(IS31FL3737_I2C_ADDRESS_3)
+#    define IS31FL3737_DRIVER_COUNT 3
+#elif defined(IS31FL3737_I2C_ADDRESS_2)
+#    define IS31FL3737_DRIVER_COUNT 2
+#elif defined(IS31FL3737_I2C_ADDRESS_1)
+#    define IS31FL3737_DRIVER_COUNT 1
+#endif
+
 typedef struct is31fl3737_led_t {
     uint8_t driver : 2;
     uint8_t v;
diff --git a/drivers/led/issi/is31fl3737.h b/drivers/led/issi/is31fl3737.h
index 17d2635dd8..6a2f301052 100644
--- a/drivers/led/issi/is31fl3737.h
+++ b/drivers/led/issi/is31fl3737.h
@@ -37,9 +37,6 @@
 #ifdef DRIVER_ADDR_4
 #    define IS31FL3737_I2C_ADDRESS_4 DRIVER_ADDR_4
 #endif
-#ifdef DRIVER_COUNT
-#    define IS31FL3737_DRIVER_COUNT DRIVER_COUNT
-#endif
 #ifdef ISSI_TIMEOUT
 #    define IS31FL3737_I2C_TIMEOUT ISSI_TIMEOUT
 #endif
@@ -81,6 +78,16 @@
 #    define IS31FL3737_LED_COUNT RGB_MATRIX_LED_COUNT
 #endif
 
+#if defined(IS31FL3737_I2C_ADDRESS_4)
+#    define IS31FL3737_DRIVER_COUNT 4
+#elif defined(IS31FL3737_I2C_ADDRESS_3)
+#    define IS31FL3737_DRIVER_COUNT 3
+#elif defined(IS31FL3737_I2C_ADDRESS_2)
+#    define IS31FL3737_DRIVER_COUNT 2
+#elif defined(IS31FL3737_I2C_ADDRESS_1)
+#    define IS31FL3737_DRIVER_COUNT 1
+#endif
+
 typedef struct is31fl3737_led_t {
     uint8_t driver : 2;
     uint8_t r;
diff --git a/drivers/led/issi/is31fl3741-simple.h b/drivers/led/issi/is31fl3741-simple.h
index b8cda3da34..04f0c2793a 100644
--- a/drivers/led/issi/is31fl3741-simple.h
+++ b/drivers/led/issi/is31fl3741-simple.h
@@ -25,9 +25,6 @@
 #include "util.h"
 
 // ======== DEPRECATED DEFINES - DO NOT USE ========
-#ifdef DRIVER_COUNT
-#    define IS31FL3741_DRIVER_COUNT DRIVER_COUNT
-#endif
 #ifdef ISSI_TIMEOUT
 #    define IS31FL3741_I2C_TIMEOUT ISSI_TIMEOUT
 #endif
@@ -66,6 +63,16 @@
 #    define IS31FL3741_LED_COUNT LED_MATRIX_LED_COUNT
 #endif
 
+#if defined(IS31FL3741_I2C_ADDRESS_4)
+#    define IS31FL3741_DRIVER_COUNT 4
+#elif defined(IS31FL3741_I2C_ADDRESS_3)
+#    define IS31FL3741_DRIVER_COUNT 3
+#elif defined(IS31FL3741_I2C_ADDRESS_2)
+#    define IS31FL3741_DRIVER_COUNT 2
+#elif defined(IS31FL3741_I2C_ADDRESS_1)
+#    define IS31FL3741_DRIVER_COUNT 1
+#endif
+
 typedef struct is31fl3741_led_t {
     uint8_t  driver : 2;
     uint16_t v : 9;
diff --git a/drivers/led/issi/is31fl3741.h b/drivers/led/issi/is31fl3741.h
index 7f3c31a8ab..0c3f7d3d18 100644
--- a/drivers/led/issi/is31fl3741.h
+++ b/drivers/led/issi/is31fl3741.h
@@ -37,9 +37,6 @@
 #ifdef DRIVER_ADDR_4
 #    define IS31FL3741_I2C_ADDRESS_4 DRIVER_ADDR_4
 #endif
-#ifdef DRIVER_COUNT
-#    define IS31FL3741_DRIVER_COUNT DRIVER_COUNT
-#endif
 #ifdef ISSI_TIMEOUT
 #    define IS31FL3741_I2C_TIMEOUT ISSI_TIMEOUT
 #endif
@@ -81,6 +78,16 @@
 #    define IS31FL3741_LED_COUNT RGB_MATRIX_LED_COUNT
 #endif
 
+#if defined(IS31FL3741_I2C_ADDRESS_4)
+#    define IS31FL3741_DRIVER_COUNT 4
+#elif defined(IS31FL3741_I2C_ADDRESS_3)
+#    define IS31FL3741_DRIVER_COUNT 3
+#elif defined(IS31FL3741_I2C_ADDRESS_2)
+#    define IS31FL3741_DRIVER_COUNT 2
+#elif defined(IS31FL3741_I2C_ADDRESS_1)
+#    define IS31FL3741_DRIVER_COUNT 1
+#endif
+
 typedef struct is31fl3741_led_t {
     uint8_t  driver : 2;
     uint16_t r : 9;
diff --git a/drivers/led/issi/is31fl3743.h b/drivers/led/issi/is31fl3743.h
index d8fcd79096..706b271254 100644
--- a/drivers/led/issi/is31fl3743.h
+++ b/drivers/led/issi/is31fl3743.h
@@ -36,7 +36,7 @@
 
 // Set defaults for Spread Spectrum Register
 #ifndef ISSI_SSR_1
-#    if DRIVER_COUNT == 1
+#    ifndef DRIVER_ADDR_2
 #        define ISSI_SSR_1 0x00
 #    else
 #        define ISSI_SSR_1 0xC0
diff --git a/drivers/led/issi/is31fl3745.h b/drivers/led/issi/is31fl3745.h
index ca5dd4a986..1e88aab4a8 100644
--- a/drivers/led/issi/is31fl3745.h
+++ b/drivers/led/issi/is31fl3745.h
@@ -36,7 +36,7 @@
 
 // Set defaults for Spread Spectrum Register
 #ifndef ISSI_SSR_1
-#    if DRIVER_COUNT == 1
+#    ifndef DRIVER_ADDR_2
 #        define ISSI_SSR_1 0x00
 #    else
 #        define ISSI_SSR_1 0xC0
diff --git a/drivers/led/issi/is31flcommon.h b/drivers/led/issi/is31flcommon.h
index 5414b54047..10613a6eed 100644
--- a/drivers/led/issi/is31flcommon.h
+++ b/drivers/led/issi/is31flcommon.h
@@ -36,6 +36,16 @@
 #    include "is31fl3746.h"
 #endif
 
+#if defined DRIVER_ADDR_4
+#    define DRIVER_COUNT 4
+#elif defined DRIVER_ADDR_3
+#    define DRIVER_COUNT 3
+#elif defined DRIVER_ADDR_2
+#    define DRIVER_COUNT 2
+#elif defined DRIVER_ADDR_1
+#    define DRIVER_COUNT 1
+#endif
+
 #ifdef RGB_MATRIX_ENABLE
 typedef struct is31_led {
     uint8_t driver : 2;
diff --git a/drivers/led/snled27351-simple.h b/drivers/led/snled27351-simple.h
index 051271cca8..66e5d162d0 100644
--- a/drivers/led/snled27351-simple.h
+++ b/drivers/led/snled27351-simple.h
@@ -22,9 +22,6 @@
 #include "util.h"
 
 // ======== DEPRECATED DEFINES - DO NOT USE ========
-#ifdef DRIVER_COUNT
-#    define SNLED27351_DRIVER_COUNT DRIVER_COUNT
-#endif
 #ifdef CKLED2001_TIMEOUT
 #    define SNLED27351_I2C_TIMEOUT CKLED2001_TIMEOUT
 #endif
@@ -64,6 +61,16 @@
 #    define SNLED27351_LED_COUNT LED_MATRIX_LED_COUNT
 #endif
 
+#if defined(SNLED27351_I2C_ADDRESS_4)
+#    define SNLED27351_DRIVER_COUNT 4
+#elif defined(SNLED27351_I2C_ADDRESS_3)
+#    define SNLED27351_DRIVER_COUNT 3
+#elif defined(SNLED27351_I2C_ADDRESS_2)
+#    define SNLED27351_DRIVER_COUNT 2
+#elif defined(SNLED27351_I2C_ADDRESS_1)
+#    define SNLED27351_DRIVER_COUNT 1
+#endif
+
 typedef struct snled27351_led_t {
     uint8_t driver : 2;
     uint8_t v;
diff --git a/drivers/led/snled27351.h b/drivers/led/snled27351.h
index dd60f59183..77837d36aa 100644
--- a/drivers/led/snled27351.h
+++ b/drivers/led/snled27351.h
@@ -22,9 +22,6 @@
 #include "util.h"
 
 // ======== DEPRECATED DEFINES - DO NOT USE ========
-#ifdef DRIVER_COUNT
-#    define SNLED27351_DRIVER_COUNT DRIVER_COUNT
-#endif
 #ifdef DRIVER_ADDR_1
 #    define SNLED27351_I2C_ADDRESS_1 DRIVER_ADDR_1
 #endif
@@ -76,6 +73,16 @@
 #    define SNLED27351_LED_COUNT RGB_MATRIX_LED_COUNT
 #endif
 
+#if defined(SNLED27351_I2C_ADDRESS_4)
+#    define SNLED27351_DRIVER_COUNT 4
+#elif defined(SNLED27351_I2C_ADDRESS_3)
+#    define SNLED27351_DRIVER_COUNT 3
+#elif defined(SNLED27351_I2C_ADDRESS_2)
+#    define SNLED27351_DRIVER_COUNT 2
+#elif defined(SNLED27351_I2C_ADDRESS_1)
+#    define SNLED27351_DRIVER_COUNT 1
+#endif
+
 typedef struct snled27351_led_t {
     uint8_t driver : 2;
     uint8_t r;