diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk index 094eda6fef..18f8b0bbfc 100644 --- a/builddefs/common_features.mk +++ b/builddefs/common_features.mk @@ -416,7 +416,7 @@ endif RGB_MATRIX_ENABLE ?= no -VALID_RGB_MATRIX_TYPES := aw20216 is31fl3731 is31fl3733 is31fl3736 is31fl3737 is31fl3741 is31fl3742a is31fl3743a is31fl3745 is31fl3746a ckled2001 ws2812 custom +VALID_RGB_MATRIX_TYPES := aw20216s is31fl3731 is31fl3733 is31fl3736 is31fl3737 is31fl3741 is31fl3742a is31fl3743a is31fl3745 is31fl3746a ckled2001 ws2812 custom ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) ifeq ($(filter $(RGB_MATRIX_DRIVER),$(VALID_RGB_MATRIX_TYPES)),) $(call CATASTROPHIC_ERROR,Invalid RGB_MATRIX_DRIVER,RGB_MATRIX_DRIVER="$(RGB_MATRIX_DRIVER)" is not a valid matrix type) @@ -437,10 +437,10 @@ endif CIE1931_CURVE := yes RGB_KEYCODES_ENABLE := yes - ifeq ($(strip $(RGB_MATRIX_DRIVER)), aw20216) - OPT_DEFS += -DAW20216 -DSTM32_SPI -DHAL_USE_SPI=TRUE + ifeq ($(strip $(RGB_MATRIX_DRIVER)), aw20216s) + OPT_DEFS += -DAW20216S -DSTM32_SPI -DHAL_USE_SPI=TRUE COMMON_VPATH += $(DRIVER_PATH)/led - SRC += aw20216.c + SRC += aw20216s.c QUANTUM_LIB_SRC += spi_master.c endif diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index 44899d70d9..5cc498a9ed 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md @@ -465,41 +465,41 @@ Configure the hardware via your `config.h`: ``` --- -### AW20216 :id=aw20216 -There is basic support for addressable RGB matrix lighting with the SPI AW20216 RGB controller. To enable it, add this to your `rules.mk`: +### AW20216S :id=aw20216s +There is basic support for addressable RGB matrix lighting with the SPI AW20216S RGB controller. To enable it, add this to your `rules.mk`: ```make RGB_MATRIX_ENABLE = yes -RGB_MATRIX_DRIVER = aw20216 +RGB_MATRIX_DRIVER = aw20216s ``` -You can use up to 2 AW20216 IC's. Do not specify `DRIVER__xxx` defines for IC's that are not present on your keyboard. You can define the following items in `config.h`: +You can use up to 2 AW20216S IC's. Do not specify `DRIVER__xxx` defines for IC's that are not present on your keyboard. You can define the following items in `config.h`: | Variable | Description | Default | |----------|-------------|---------| -| `DRIVER_1_CS` | (Required) MCU pin connected to first RGB driver chip select line | B13 | -| `DRIVER_2_CS` | (Optional) MCU pin connected to second RGB driver chip select line | | -| `DRIVER_1_EN` | (Required) MCU pin connected to first RGB driver hardware enable line | C13 | -| `DRIVER_2_EN` | (Optional) MCU pin connected to second RGB driver hardware enable line | | +| `AW20216S_DRIVER_1_CS` | (Required) MCU pin connected to first RGB driver chip select line | B13 | +| `AW20216S_DRIVER_2_CS` | (Optional) MCU pin connected to second RGB driver chip select line | | +| `AW20216S_DRIVER_1_EN` | (Required) MCU pin connected to first RGB driver hardware enable line | C13 | +| `AW20216S_DRIVER_2_EN` | (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 | | -| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | | +| `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 | | -| `AW_SCALING_MAX` | (Optional) LED current scaling value (0-255, higher values mean LED is brighter at full PWM) | 150 | -| `AW_GLOBAL_CURRENT_MAX` | (Optional) Driver global current limit (0-255, higher values means the driver may consume more power) | 150 | -| `AW_SPI_MODE` | (Optional) Mode for SPI communication (0-3, defines polarity and phase of the clock) | 3 | -| `AW_SPI_DIVISOR` | (Optional) Clock divisor for SPI communication (powers of 2, smaller numbers means faster communication, should not be less than 4) | 4 | +| `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 | +| `AW20216S_SPI_MODE` | (Optional) Mode for SPI communication (0-3, defines polarity and phase of the clock) | 3 | +| `AW20216S_SPI_DIVISOR` | (Optional) Clock divisor for SPI communication (powers of 2, smaller numbers means faster communication, should not be less than 4) | 4 | Here is an example using 2 drivers. ```c -#define DRIVER_1_CS B13 -#define DRIVER_2_CS B14 +#define AW20216S_DRIVER_1_CS B13 +#define AW20216S_DRIVER_2_CS B14 // Hardware enable lines may be connected to the same pin -#define DRIVER_1_EN C13 -#define DRIVER_2_EN C13 +#define AW20216S_DRIVER_1_EN C13 +#define AW20216S_DRIVER_2_EN C13 -#define DRIVER_COUNT 2 +#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) @@ -510,10 +510,10 @@ Here is an example using 2 drivers. Define these arrays listing all the LEDs in your `.c`: ```c -const aw_led PROGMEM g_aw_leds[RGB_MATRIX_LED_COUNT] = { -/* Each AW20216 channel is controlled by a register at some offset between 0x00 +const aw20216s_led PROGMEM g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { +/* Each AW20216S channel is controlled by a register at some offset between 0x00 * and 0xD7 inclusive. - * See drivers/awinic/aw20216.h for the mapping between register offsets and + * See drivers/led/aw20216s.h for the mapping between register offsets and * driver pin locations. * driver * | R location diff --git a/docs/reference_info_json.md b/docs/reference_info_json.md index b81aacb43c..9030c99aa6 100644 --- a/docs/reference_info_json.md +++ b/docs/reference_info_json.md @@ -530,7 +530,7 @@ Configures the [RGB Matrix](feature_rgb_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 `aw20216`, `ckled2001`, `custom`, `is31fl3731`, `is31fl3733`, `is31fl3736`, `is31fl3737`, `is31fl3741`, `is31fl3742a`, `is31fl3743a`, `is31fl3745`, `is31fl3746a`, `ws2812`. + * The driver to use. Must be one of `aw20216s`, `ckled2001`, `custom`, `is31fl3731`, `is31fl3733`, `is31fl3736`, `is31fl3737`, `is31fl3741`, `is31fl3742a`, `is31fl3743a`, `is31fl3745`, `is31fl3746a`, `ws2812`. * `hue_steps` * The number of hue adjustment steps. * Default: `8` diff --git a/drivers/led/aw20216.c b/drivers/led/aw20216.c deleted file mode 100644 index 479643add4..0000000000 --- a/drivers/led/aw20216.c +++ /dev/null @@ -1,168 +0,0 @@ -/* Copyright 2021 Jasper Chan - * 2023 Huckies - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "aw20216.h" -#include "wait.h" -#include "spi_master.h" - -/* The AW20216 appears to be somewhat similar to the IS31FL743, although quite - * a few things are different, such as the command byte format and page ordering. - * The LED addresses start from 0x00 instead of 0x01. - */ -#define AWINIC_ID 0b1010 << 4 - -#define AW_PAGE_FUNCTION 0x00 << 1 // PG0, Function registers -#define AW_PAGE_PWM 0x01 << 1 // PG1, LED PWM control -#define AW_PAGE_SCALING 0x02 << 1 // PG2, LED current scaling control -#define AW_PAGE_PATCHOICE 0x03 << 1 // PG3, Pattern choice? -#define AW_PAGE_PWMSCALING 0x04 << 1 // PG4, LED PWM + Scaling control? - -#define AW_WRITE 0 -#define AW_READ 1 - -#define AW_REG_CONFIGURATION 0x00 // PG0 -#define AW_REG_GLOBALCURRENT 0x01 // PG0 -#define AW_REG_RESET 0x2F // PG0 -#define AW_REG_MIXFUNCTION 0x46 // PG0 - -// Default value of AW_REG_CONFIGURATION -// D7:D4 = 1011, SWSEL (SW1~SW12 active) -// D3 = 0?, reserved (apparently this should be 1 but it doesn't seem to matter) -// D2:D1 = 00, OSDE (open/short detection enable) -// D0 = 0, CHIPEN (write 1 to enable LEDs when hardware enable pulled high) -#define AW_CONFIG_DEFAULT 0b10110000 -#define AW_MIXCR_DEFAULT 0b00000000 -#define AW_RESET_CMD 0xAE -#define AW_CHIPEN 1 -#define AW_LPEN (0x01 << 1) - -#define AW_PWM_REGISTER_COUNT 216 - -#ifndef AW_SCALING_MAX -# define AW_SCALING_MAX 150 -#endif - -#ifndef AW_GLOBAL_CURRENT_MAX -# define AW_GLOBAL_CURRENT_MAX 150 -#endif - -#ifndef AW_SPI_MODE -# define AW_SPI_MODE 0 -#endif - -#ifndef AW_SPI_DIVISOR -# define AW_SPI_DIVISOR 4 -#endif - -uint8_t g_pwm_buffer[DRIVER_COUNT][AW_PWM_REGISTER_COUNT]; -bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false}; - -bool aw20216_write(pin_t cs_pin, uint8_t page, uint8_t reg, uint8_t* data, uint8_t len) { - static uint8_t s_spi_transfer_buffer[2] = {0}; - - if (!spi_start(cs_pin, false, AW_SPI_MODE, AW_SPI_DIVISOR)) { - spi_stop(); - return false; - } - - s_spi_transfer_buffer[0] = (AWINIC_ID | page | AW_WRITE); - s_spi_transfer_buffer[1] = reg; - - if (spi_transmit(s_spi_transfer_buffer, 2) != SPI_STATUS_SUCCESS) { - spi_stop(); - return false; - } - - if (spi_transmit(data, len) != SPI_STATUS_SUCCESS) { - spi_stop(); - return false; - } - - spi_stop(); - return true; -} - -static inline bool aw20216_write_register(pin_t cs_pin, uint8_t page, uint8_t reg, uint8_t value) { - // Little wrapper so callers need not care about sending a buffer - return aw20216_write(cs_pin, page, reg, &value, 1); -} - -void aw20216_soft_reset(pin_t cs_pin) { - aw20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_RESET, AW_RESET_CMD); -} - -static void aw20216_init_scaling(pin_t cs_pin) { - // Set constant current to the max, control brightness with PWM - for (uint8_t i = 0; i < AW_PWM_REGISTER_COUNT; i++) { - aw20216_write_register(cs_pin, AW_PAGE_SCALING, i, AW_SCALING_MAX); - } -} - -static inline void aw20216_init_current_limit(pin_t cs_pin) { - // Push config - aw20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_GLOBALCURRENT, AW_GLOBAL_CURRENT_MAX); -} - -static inline void aw20216_soft_enable(pin_t cs_pin) { - // Push config - aw20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_CONFIGURATION, AW_CONFIG_DEFAULT | AW_CHIPEN); -} - -static inline void aw20216_auto_lowpower(pin_t cs_pin) { - aw20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_MIXFUNCTION, AW_MIXCR_DEFAULT | AW_LPEN); -} - -void aw20216_init(pin_t cs_pin, pin_t en_pin) { - setPinOutput(en_pin); - writePinHigh(en_pin); - - aw20216_soft_reset(cs_pin); - wait_ms(2); - - // Drivers should start with all scaling and PWM registers as off - aw20216_init_current_limit(cs_pin); - aw20216_init_scaling(cs_pin); - - aw20216_soft_enable(cs_pin); - aw20216_auto_lowpower(cs_pin); -} - -void aw20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { - aw_led led; - memcpy_P(&led, (&g_aw_leds[index]), sizeof(led)); - - if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) { - return; - } - g_pwm_buffer[led.driver][led.r] = red; - g_pwm_buffer[led.driver][led.g] = green; - g_pwm_buffer[led.driver][led.b] = blue; - g_pwm_buffer_update_required[led.driver] = true; -} - -void aw20216_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { - for (uint8_t i = 0; i < RGB_MATRIX_LED_COUNT; i++) { - aw20216_set_color(i, red, green, blue); - } -} - -void aw20216_update_pwm_buffers(pin_t cs_pin, uint8_t index) { - if (g_pwm_buffer_update_required[index]) { - aw20216_write(cs_pin, AW_PAGE_PWM, 0, g_pwm_buffer[index], AW_PWM_REGISTER_COUNT); - } - g_pwm_buffer_update_required[index] = false; -} diff --git a/drivers/led/aw20216s.c b/drivers/led/aw20216s.c new file mode 100644 index 0000000000..1b7861a1ec --- /dev/null +++ b/drivers/led/aw20216s.c @@ -0,0 +1,168 @@ +/* Copyright 2021 Jasper Chan + * 2023 Huckies + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "aw20216s.h" +#include "wait.h" +#include "spi_master.h" + +/* The AW20216S appears to be somewhat similar to the IS31FL743, although quite + * a few things are different, such as the command byte format and page ordering. + * The LED addresses start from 0x00 instead of 0x01. + */ +#define AW20216S_ID 0b1010 << 4 + +#define AW20216S_PAGE_FUNCTION 0x00 << 1 // PG0, Function registers +#define AW20216S_PAGE_PWM 0x01 << 1 // PG1, LED PWM control +#define AW20216S_PAGE_SCALING 0x02 << 1 // PG2, LED current scaling control +#define AW20216S_PAGE_PATCHOICE 0x03 << 1 // PG3, Pattern choice? +#define AW20216S_PAGE_PWMSCALING 0x04 << 1 // PG4, LED PWM + Scaling control? + +#define AW20216S_WRITE 0 +#define AW20216S_READ 1 + +#define AW20216S_REG_CONFIGURATION 0x00 // PG0 +#define AW20216S_REG_GLOBALCURRENT 0x01 // PG0 +#define AW20216S_REG_RESET 0x2F // PG0 +#define AW20216S_REG_MIXFUNCTION 0x46 // PG0 + +// Default value of AW20216S_REG_CONFIGURATION +// D7:D4 = 1011, SWSEL (SW1~SW12 active) +// D3 = 0?, reserved (apparently this should be 1 but it doesn't seem to matter) +// D2:D1 = 00, OSDE (open/short detection enable) +// D0 = 0, CHIPEN (write 1 to enable LEDs when hardware enable pulled high) +#define AW20216S_CONFIG_DEFAULT 0b10110000 +#define AW20216S_MIXCR_DEFAULT 0b00000000 +#define AW20216S_RESET_CMD 0xAE +#define AW20216S_CHIPEN 1 +#define AW20216S_LPEN (0x01 << 1) + +#define AW20216S_PWM_REGISTER_COUNT 216 + +#ifndef AW20216S_SCALING_MAX +# define AW20216S_SCALING_MAX 150 +#endif + +#ifndef AW20216S_GLOBAL_CURRENT_MAX +# define AW20216S_GLOBAL_CURRENT_MAX 150 +#endif + +#ifndef AW20216S_SPI_MODE +# define AW20216S_SPI_MODE 0 +#endif + +#ifndef AW20216S_SPI_DIVISOR +# define AW20216S_SPI_DIVISOR 4 +#endif + +uint8_t g_pwm_buffer[AW20216S_DRIVER_COUNT][AW20216S_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[AW20216S_DRIVER_COUNT] = {false}; + +bool aw20216s_write(pin_t cs_pin, uint8_t page, uint8_t reg, uint8_t* data, uint8_t len) { + static uint8_t s_spi_transfer_buffer[2] = {0}; + + if (!spi_start(cs_pin, false, AW20216S_SPI_MODE, AW20216S_SPI_DIVISOR)) { + spi_stop(); + return false; + } + + s_spi_transfer_buffer[0] = (AW20216S_ID | page | AW20216S_WRITE); + s_spi_transfer_buffer[1] = reg; + + if (spi_transmit(s_spi_transfer_buffer, 2) != SPI_STATUS_SUCCESS) { + spi_stop(); + return false; + } + + if (spi_transmit(data, len) != SPI_STATUS_SUCCESS) { + spi_stop(); + return false; + } + + spi_stop(); + return true; +} + +static inline bool aw20216s_write_register(pin_t cs_pin, uint8_t page, uint8_t reg, uint8_t value) { + // Little wrapper so callers need not care about sending a buffer + return aw20216s_write(cs_pin, page, reg, &value, 1); +} + +void aw20216s_soft_reset(pin_t cs_pin) { + aw20216s_write_register(cs_pin, AW20216S_PAGE_FUNCTION, AW20216S_REG_RESET, AW20216S_RESET_CMD); +} + +static void aw20216s_init_scaling(pin_t cs_pin) { + // Set constant current to the max, control brightness with PWM + for (uint8_t i = 0; i < AW20216S_PWM_REGISTER_COUNT; i++) { + aw20216s_write_register(cs_pin, AW20216S_PAGE_SCALING, i, AW20216S_SCALING_MAX); + } +} + +static inline void aw20216s_init_current_limit(pin_t cs_pin) { + // Push config + aw20216s_write_register(cs_pin, AW20216S_PAGE_FUNCTION, AW20216S_REG_GLOBALCURRENT, AW20216S_GLOBAL_CURRENT_MAX); +} + +static inline void aw20216s_soft_enable(pin_t cs_pin) { + // Push config + aw20216s_write_register(cs_pin, AW20216S_PAGE_FUNCTION, AW20216S_REG_CONFIGURATION, AW20216S_CONFIG_DEFAULT | AW20216S_CHIPEN); +} + +static inline void aw20216s_auto_lowpower(pin_t cs_pin) { + aw20216s_write_register(cs_pin, AW20216S_PAGE_FUNCTION, AW20216S_REG_MIXFUNCTION, AW20216S_MIXCR_DEFAULT | AW20216S_LPEN); +} + +void aw20216s_init(pin_t cs_pin, pin_t en_pin) { + setPinOutput(en_pin); + writePinHigh(en_pin); + + aw20216s_soft_reset(cs_pin); + wait_ms(2); + + // Drivers should start with all scaling and PWM registers as off + aw20216s_init_current_limit(cs_pin); + aw20216s_init_scaling(cs_pin); + + aw20216s_soft_enable(cs_pin); + aw20216s_auto_lowpower(cs_pin); +} + +void aw20216s_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { + aw20216s_led led; + memcpy_P(&led, (&g_aw20216s_leds[index]), sizeof(led)); + + if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) { + return; + } + g_pwm_buffer[led.driver][led.r] = red; + g_pwm_buffer[led.driver][led.g] = green; + g_pwm_buffer[led.driver][led.b] = blue; + g_pwm_buffer_update_required[led.driver] = true; +} + +void aw20216s_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { + for (uint8_t i = 0; i < RGB_MATRIX_LED_COUNT; i++) { + aw20216s_set_color(i, red, green, blue); + } +} + +void aw20216s_update_pwm_buffers(pin_t cs_pin, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + aw20216s_write(cs_pin, AW20216S_PAGE_PWM, 0, g_pwm_buffer[index], AW20216S_PWM_REGISTER_COUNT); + } + g_pwm_buffer_update_required[index] = false; +} diff --git a/drivers/led/aw20216.h b/drivers/led/aw20216s.h similarity index 83% rename from drivers/led/aw20216.h rename to drivers/led/aw20216s.h index e342cb6bac..49b0a8e0ad 100644 --- a/drivers/led/aw20216.h +++ b/drivers/led/aw20216s.h @@ -21,19 +21,49 @@ #include "progmem.h" #include "gpio.h" -typedef struct aw_led { +// ======== 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 +#ifdef AW_GLOBAL_CURRENT_MAX +# define AW20216S_GLOBAL_CURRENT_MAX AW_GLOBAL_CURRENT_MAX +#endif +#ifdef AW_SPI_MODE +# define AW20216S_SPI_MODE AW_SPI_MODE +#endif +#ifdef AW_SPI_DIVISOR +# define AW20216S_SPI_DIVISOR AW_SPI_DIVISOR +#endif +#ifdef DRIVER_1_CS +# define AW20216S_DRIVER_1_CS DRIVER_1_CS +#endif +#ifdef DRIVER_2_CS +# define AW20216S_DRIVER_2_CS DRIVER_2_CS +#endif +#ifdef DRIVER_1_EN +# define AW20216S_DRIVER_1_EN DRIVER_1_EN +#endif +#ifdef DRIVER_2_EN +# define AW20216S_DRIVER_2_EN DRIVER_2_EN +#endif +// ======== + +typedef struct aw20216s_led { uint8_t driver : 2; uint8_t r; uint8_t g; uint8_t b; -} aw_led; +} aw20216s_led; -extern const aw_led PROGMEM g_aw_leds[RGB_MATRIX_LED_COUNT]; +extern const aw20216s_led PROGMEM g_aw20216s_leds[RGB_MATRIX_LED_COUNT]; -void aw20216_init(pin_t cs_pin, pin_t en_pin); -void aw20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue); -void aw20216_set_color_all(uint8_t red, uint8_t green, uint8_t blue); -void aw20216_update_pwm_buffers(pin_t cs_pin, uint8_t index); +void aw20216s_init(pin_t cs_pin, pin_t en_pin); +void aw20216s_set_color(int index, uint8_t red, uint8_t green, uint8_t blue); +void aw20216s_set_color_all(uint8_t red, uint8_t green, uint8_t blue); +void aw20216s_update_pwm_buffers(pin_t cs_pin, uint8_t index); #define CS1_SW1 0x00 #define CS2_SW1 0x01 diff --git a/keyboards/gmmk/gmmk2/p65/ansi/ansi.c b/keyboards/gmmk/gmmk2/p65/ansi/ansi.c index 2ed8874491..6230e76472 100644 --- a/keyboards/gmmk/gmmk2/p65/ansi/ansi.c +++ b/keyboards/gmmk/gmmk2/p65/ansi/ansi.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/gmmk/gmmk2/p65/ansi/info.json b/keyboards/gmmk/gmmk2/p65/ansi/info.json index 902d1b6b5d..cd9296b81a 100644 --- a/keyboards/gmmk/gmmk2/p65/ansi/info.json +++ b/keyboards/gmmk/gmmk2/p65/ansi/info.json @@ -12,7 +12,7 @@ "tap_keycode_delay": 10 }, "rgb_matrix": { - "driver": "aw20216" + "driver": "aw20216s" }, "matrix_pins": { "cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"], diff --git a/keyboards/gmmk/gmmk2/p65/config.h b/keyboards/gmmk/gmmk2/p65/config.h index 3c6a2fd906..37cf430a56 100644 --- a/keyboards/gmmk/gmmk2/p65/config.h +++ b/keyboards/gmmk/gmmk2/p65/config.h @@ -29,12 +29,12 @@ #define SPI_MOSI_PIN B15 #define SPI_MISO_PIN B14 -#define DRIVER_1_CS A15 -#define DRIVER_2_CS B9 -#define DRIVER_1_EN C13 -#define DRIVER_2_EN C13 +#define AW20216S_DRIVER_1_CS A15 +#define AW20216S_DRIVER_2_CS B9 +#define AW20216S_DRIVER_1_EN C13 +#define AW20216S_DRIVER_2_EN C13 -#define DRIVER_COUNT 2 +#define AW20216S_DRIVER_COUNT 2 #define DRIVER_1_LED_TOTAL 54 #define DRIVER_2_LED_TOTAL 34 #define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) diff --git a/keyboards/gmmk/gmmk2/p65/iso/info.json b/keyboards/gmmk/gmmk2/p65/iso/info.json index 90609dc911..a266ce2b4f 100644 --- a/keyboards/gmmk/gmmk2/p65/iso/info.json +++ b/keyboards/gmmk/gmmk2/p65/iso/info.json @@ -12,7 +12,7 @@ "tap_keycode_delay": 10 }, "rgb_matrix": { - "driver": "aw20216" + "driver": "aw20216s" }, "matrix_pins": { "cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"], diff --git a/keyboards/gmmk/gmmk2/p65/iso/iso.c b/keyboards/gmmk/gmmk2/p65/iso/iso.c index a296844f44..234fe71975 100644 --- a/keyboards/gmmk/gmmk2/p65/iso/iso.c +++ b/keyboards/gmmk/gmmk2/p65/iso/iso.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/gmmk/gmmk2/p96/ansi/ansi.c b/keyboards/gmmk/gmmk2/p96/ansi/ansi.c index 467765e435..11cad9fd55 100644 --- a/keyboards/gmmk/gmmk2/p96/ansi/ansi.c +++ b/keyboards/gmmk/gmmk2/p96/ansi/ansi.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/gmmk/gmmk2/p96/ansi/info.json b/keyboards/gmmk/gmmk2/p96/ansi/info.json index 67c08e95a9..b80e334e0a 100644 --- a/keyboards/gmmk/gmmk2/p96/ansi/info.json +++ b/keyboards/gmmk/gmmk2/p96/ansi/info.json @@ -12,7 +12,7 @@ "tap_keycode_delay": 10 }, "rgb_matrix": { - "driver": "aw20216" + "driver": "aw20216s" }, "matrix_pins": { "cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"], diff --git a/keyboards/gmmk/gmmk2/p96/config.h b/keyboards/gmmk/gmmk2/p96/config.h index e3b5cdcfa1..4200bae922 100644 --- a/keyboards/gmmk/gmmk2/p96/config.h +++ b/keyboards/gmmk/gmmk2/p96/config.h @@ -33,12 +33,12 @@ #define SPI_MOSI_PIN A7 #define SPI_MISO_PIN A6 -#define DRIVER_1_CS A15 -#define DRIVER_2_CS B15 -#define DRIVER_1_EN C13 -#define DRIVER_2_EN C13 +#define AW20216S_DRIVER_1_CS A15 +#define AW20216S_DRIVER_2_CS B15 +#define AW20216S_DRIVER_1_EN C13 +#define AW20216S_DRIVER_2_EN C13 -#define DRIVER_COUNT 2 +#define AW20216S_DRIVER_COUNT 2 #define DRIVER_1_LED_TOTAL 66 #define DRIVER_2_LED_TOTAL 54 #define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) diff --git a/keyboards/gmmk/gmmk2/p96/iso/info.json b/keyboards/gmmk/gmmk2/p96/iso/info.json index 672bdb4e49..ee59bfd4ff 100644 --- a/keyboards/gmmk/gmmk2/p96/iso/info.json +++ b/keyboards/gmmk/gmmk2/p96/iso/info.json @@ -12,7 +12,7 @@ "tap_keycode_delay": 10 }, "rgb_matrix": { - "driver": "aw20216" + "driver": "aw20216s" }, "matrix_pins": { "cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"], diff --git a/keyboards/gmmk/gmmk2/p96/iso/iso.c b/keyboards/gmmk/gmmk2/p96/iso/iso.c index 40d28818b0..4bab8e60ec 100644 --- a/keyboards/gmmk/gmmk2/p96/iso/iso.c +++ b/keyboards/gmmk/gmmk2/p96/iso/iso.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/gmmk/numpad/config.h b/keyboards/gmmk/numpad/config.h index 6aa0a6c016..9096ce1d56 100644 --- a/keyboards/gmmk/numpad/config.h +++ b/keyboards/gmmk/numpad/config.h @@ -28,11 +28,11 @@ #define SPI_MOSI_PIN B5 #define SPI_MISO_PIN B4 -#define DRIVER_1_CS B12 -#define DRIVER_1_EN A15 -#define DRIVER_1_PW_EN B13 +#define AW20216S_DRIVER_1_CS B12 +#define AW20216S_DRIVER_1_EN A15 +#define AW20216S_DRIVER_1_PW_EN B13 -#define DRIVER_COUNT 1 +#define AW20216S_DRIVER_COUNT 1 #define RGB_MATRIX_LED_COUNT 31 diff --git a/keyboards/gmmk/numpad/info.json b/keyboards/gmmk/numpad/info.json index 66aead113e..406f22603a 100644 --- a/keyboards/gmmk/numpad/info.json +++ b/keyboards/gmmk/numpad/info.json @@ -20,7 +20,7 @@ ] }, "rgb_matrix": { - "driver": "aw20216" + "driver": "aw20216s" }, "processor": "WB32F3G71", "bootloader": "wb32-dfu", diff --git a/keyboards/gmmk/numpad/numpad.c b/keyboards/gmmk/numpad/numpad.c index f1a46170fd..377dde810b 100644 --- a/keyboards/gmmk/numpad/numpad.c +++ b/keyboards/gmmk/numpad/numpad.c @@ -19,10 +19,10 @@ #ifdef RGB_MATRIX_ENABLE -const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = { -/* Each AW20216 channel is controlled by a register at some offset between 0x00 +const aw20216s_led g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { +/* Each AW20216S channel is controlled by a register at some offset between 0x00 * and 0xD7 inclusive. - * See drivers/awinic/aw20216.h for the mapping between register offsets and + * See drivers/led/aw20216s.h for the mapping between register offsets and * driver pin locations. * driver * | R location @@ -110,12 +110,12 @@ led_config_t g_led_config = {{ 2, 2, 2, 2, 2, 2, 2 } }; -# ifdef DRIVER_1_PW_EN +# ifdef AW20216S_DRIVER_1_PW_EN void keyboard_pre_init_user(void) { wait_ms(2000); - setPinOutput(DRIVER_1_PW_EN); - writePinHigh(DRIVER_1_PW_EN); + setPinOutput(AW20216S_DRIVER_1_PW_EN); + writePinHigh(AW20216S_DRIVER_1_PW_EN); } # endif diff --git a/keyboards/gmmk/pro/config.h b/keyboards/gmmk/pro/config.h index 069823663e..6b62241839 100644 --- a/keyboards/gmmk/pro/config.h +++ b/keyboards/gmmk/pro/config.h @@ -26,12 +26,12 @@ #define SPI_MOSI_PIN A6 #define SPI_MISO_PIN A7 -#define DRIVER_1_CS B13 -#define DRIVER_2_CS B14 -#define DRIVER_1_EN C13 -#define DRIVER_2_EN C13 +#define AW20216S_DRIVER_1_CS B13 +#define AW20216S_DRIVER_2_CS B14 +#define AW20216S_DRIVER_1_EN C13 +#define AW20216S_DRIVER_2_EN C13 -#define DRIVER_COUNT 2 +#define AW20216S_DRIVER_COUNT 2 #define RGB_DISABLE_WHEN_USB_SUSPENDED diff --git a/keyboards/gmmk/pro/rev1/ansi/ansi.c b/keyboards/gmmk/pro/rev1/ansi/ansi.c index 9cd6a3739c..faaa6335a0 100644 --- a/keyboards/gmmk/pro/rev1/ansi/ansi.c +++ b/keyboards/gmmk/pro/rev1/ansi/ansi.c @@ -136,7 +136,7 @@ led_config_t g_led_config = {{ 4, 2, 2, 4, 4, 2, 2, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 4, 4, 4 }}; -const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { {0, CS1_SW1, CS2_SW1, CS3_SW1}, // 0, ESC, k13 {0, CS4_SW1, CS5_SW1, CS6_SW1}, // 1, ~, k16 {0, CS7_SW1, CS8_SW1, CS9_SW1}, // 2, Tab, k11 diff --git a/keyboards/gmmk/pro/rev1/ansi/info.json b/keyboards/gmmk/pro/rev1/ansi/info.json index 7e0adbdb05..fc2197a0d7 100644 --- a/keyboards/gmmk/pro/rev1/ansi/info.json +++ b/keyboards/gmmk/pro/rev1/ansi/info.json @@ -9,7 +9,7 @@ "device_version": "0.0.1" }, "rgb_matrix": { - "driver": "aw20216" + "driver": "aw20216s" }, "matrix_pins": { "cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"], diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/mattgauf/ansi.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/mattgauf/ansi.c index a7ab0c9cc3..b56d237552 100644 --- a/keyboards/gmmk/pro/rev1/ansi/keymaps/mattgauf/ansi.c +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mattgauf/ansi.c @@ -136,7 +136,7 @@ led_config_t PROGMEM g_led_config = {{ 4, 2, 2, 4, 4, 2, 2, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 4, 4, 4 }}; -const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { {0, CS1_SW1, CS2_SW1, CS3_SW1}, // 0, ESC, k13 {0, CS4_SW1, CS5_SW1, CS6_SW1}, // 1, ~, k16 {0, CS7_SW1, CS8_SW1, CS9_SW1}, // 2, Tab, k11 diff --git a/keyboards/gmmk/pro/rev1/iso/info.json b/keyboards/gmmk/pro/rev1/iso/info.json index 52ea4538c8..492a5cf486 100644 --- a/keyboards/gmmk/pro/rev1/iso/info.json +++ b/keyboards/gmmk/pro/rev1/iso/info.json @@ -9,7 +9,7 @@ "device_version": "0.0.1" }, "rgb_matrix": { - "driver": "aw20216" + "driver": "aw20216s" }, "matrix_pins": { "cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"], diff --git a/keyboards/gmmk/pro/rev1/iso/iso.c b/keyboards/gmmk/pro/rev1/iso/iso.c index 0ded23162f..f7d97585c2 100644 --- a/keyboards/gmmk/pro/rev1/iso/iso.c +++ b/keyboards/gmmk/pro/rev1/iso/iso.c @@ -137,7 +137,7 @@ led_config_t g_led_config = {{ 2, 4, 2, 2, 4, 4, 2, 2, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 4, 4, 4 }}; -const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { {0, CS1_SW1, CS2_SW1, CS3_SW1}, // 0, ESC, k13 {0, CS4_SW1, CS5_SW1, CS6_SW1}, // 1, ~, k16 {0, CS7_SW1, CS8_SW1, CS9_SW1}, // 2, Tab, k11 diff --git a/keyboards/gmmk/pro/rev2/ansi/ansi.c b/keyboards/gmmk/pro/rev2/ansi/ansi.c index ccdcd42726..5d8955d808 100644 --- a/keyboards/gmmk/pro/rev2/ansi/ansi.c +++ b/keyboards/gmmk/pro/rev2/ansi/ansi.c @@ -136,7 +136,7 @@ led_config_t g_led_config = {{ 4, 2, 2, 4, 4, 2, 2, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 4, 4, 4 }}; -const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { {0, CS1_SW1, CS2_SW1, CS3_SW1}, // 0, ESC, k13 {0, CS4_SW1, CS5_SW1, CS6_SW1}, // 1, ~, k16 {0, CS7_SW1, CS8_SW1, CS9_SW1}, // 2, Tab, k11 diff --git a/keyboards/gmmk/pro/rev2/ansi/info.json b/keyboards/gmmk/pro/rev2/ansi/info.json index 44151f874a..968a1952ee 100644 --- a/keyboards/gmmk/pro/rev2/ansi/info.json +++ b/keyboards/gmmk/pro/rev2/ansi/info.json @@ -9,7 +9,7 @@ "device_version": "0.0.2" }, "rgb_matrix": { - "driver": "aw20216" + "driver": "aw20216s" }, "matrix_pins": { "cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"], diff --git a/keyboards/gmmk/pro/rev2/iso/info.json b/keyboards/gmmk/pro/rev2/iso/info.json index bb76da4493..54ebc2d2f7 100644 --- a/keyboards/gmmk/pro/rev2/iso/info.json +++ b/keyboards/gmmk/pro/rev2/iso/info.json @@ -9,7 +9,7 @@ "device_version": "0.0.2" }, "rgb_matrix": { - "driver": "aw20216" + "driver": "aw20216s" }, "matrix_pins": { "cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"], diff --git a/keyboards/gmmk/pro/rev2/iso/iso.c b/keyboards/gmmk/pro/rev2/iso/iso.c index e056ff6c12..3a723c7f0c 100644 --- a/keyboards/gmmk/pro/rev2/iso/iso.c +++ b/keyboards/gmmk/pro/rev2/iso/iso.c @@ -137,7 +137,7 @@ led_config_t g_led_config = {{ 2, 4, 2, 2, 4, 4, 2, 2, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 4, 4, 4 }}; -const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { {0, CS1_SW1, CS2_SW1, CS3_SW1}, // 0, ESC, k13 {0, CS4_SW1, CS5_SW1, CS6_SW1}, // 1, ~, k16 {0, CS7_SW1, CS8_SW1, CS9_SW1}, // 2, Tab, k11 diff --git a/keyboards/projectd/65/projectd_65_ansi/config.h b/keyboards/projectd/65/projectd_65_ansi/config.h index 312a72979f..64e4595e1b 100644 --- a/keyboards/projectd/65/projectd_65_ansi/config.h +++ b/keyboards/projectd/65/projectd_65_ansi/config.h @@ -33,10 +33,10 @@ #define SPI_MOSI_PIN A7 #define SPI_MISO_PIN A6 -#define DRIVER_1_CS A15 -#define DRIVER_2_CS B15 -#define DRIVER_1_EN C13 -#define DRIVER_2_EN C13 +#define AW20216S_DRIVER_1_CS A15 +#define AW20216S_DRIVER_2_CS B15 +#define AW20216S_DRIVER_1_EN C13 +#define AW20216S_DRIVER_2_EN C13 -#define DRIVER_COUNT 1 +#define AW20216S_DRIVER_COUNT 1 #define RGB_MATRIX_LED_COUNT 71 diff --git a/keyboards/projectd/65/projectd_65_ansi/info.json b/keyboards/projectd/65/projectd_65_ansi/info.json index 3d4041db17..c385f00ed1 100644 --- a/keyboards/projectd/65/projectd_65_ansi/info.json +++ b/keyboards/projectd/65/projectd_65_ansi/info.json @@ -80,7 +80,7 @@ "solid_multisplash": true }, "center_point": [76, 25], - "driver": "aw20216", + "driver": "aw20216s", "layout": [ { "flags": 4, "matrix": [1, 3], "x": 0, "y": 0 }, { "flags": 4, "matrix": [1, 7], "x": 10, "y": 0 }, diff --git a/keyboards/projectd/65/projectd_65_ansi/projectd_65_ansi.c b/keyboards/projectd/65/projectd_65_ansi/projectd_65_ansi.c index 6027128a96..a945e8020e 100644 --- a/keyboards/projectd/65/projectd_65_ansi/projectd_65_ansi.c +++ b/keyboards/projectd/65/projectd_65_ansi/projectd_65_ansi.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/quantum/rgb_matrix/rgb_matrix.h b/quantum/rgb_matrix/rgb_matrix.h index 38040fb0cc..ab5184fe18 100644 --- a/quantum/rgb_matrix/rgb_matrix.h +++ b/quantum/rgb_matrix/rgb_matrix.h @@ -38,8 +38,8 @@ # include "is31flcommon.h" #elif defined(CKLED2001) # include "ckled2001.h" -#elif defined(AW20216) -# include "aw20216.h" +#elif defined(AW20216S) +# include "aw20216s.h" #elif defined(WS2812) # include "ws2812.h" #endif diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c index cd0e80cc24..67330434ed 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c @@ -393,30 +393,30 @@ const rgb_matrix_driver_t rgb_matrix_driver = { }; # endif -#elif defined(AW20216) +#elif defined(AW20216S) # include "spi_master.h" static void init(void) { spi_init(); - aw20216_init(DRIVER_1_CS, DRIVER_1_EN); -# if defined(DRIVER_2_CS) - aw20216_init(DRIVER_2_CS, DRIVER_2_EN); + aw20216s_init(AW20216S_DRIVER_1_CS, AW20216S_DRIVER_1_EN); +# if defined(AW20216S_DRIVER_2_CS) + aw20216s_init(AW20216S_DRIVER_2_CS, AW20216S_DRIVER_2_EN); # endif } static void flush(void) { - aw20216_update_pwm_buffers(DRIVER_1_CS, 0); -# if defined(DRIVER_2_CS) - aw20216_update_pwm_buffers(DRIVER_2_CS, 1); + aw20216s_update_pwm_buffers(AW20216S_DRIVER_1_CS, 0); +# if defined(AW20216S_DRIVER_2_CS) + aw20216s_update_pwm_buffers(AW20216S_DRIVER_2_CS, 1); # endif } const rgb_matrix_driver_t rgb_matrix_driver = { .init = init, .flush = flush, - .set_color = aw20216_set_color, - .set_color_all = aw20216_set_color_all, + .set_color = aw20216s_set_color, + .set_color_all = aw20216s_set_color_all, }; #elif defined(WS2812)