~ruther/qmk_firmware

1ea01765e19bf84b9a09954443b7d64be2bec0c7 — Gigahawk 4 years ago 531f34d
Allow settable SPI divisor for AW20216 driver, set default to 4 (#13309)

2 files changed, 6 insertions(+), 1 deletions(-)

M docs/feature_rgb_matrix.md
M drivers/awinic/aw20216.c
M docs/feature_rgb_matrix.md => docs/feature_rgb_matrix.md +1 -0
@@ 250,6 250,7 @@ You can use up to 2 AW20216 IC's. Do not specify `DRIVER_<N>_xxx` defines for IC
| `DRIVER_LED_TOTAL` | (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_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.


M drivers/awinic/aw20216.c => drivers/awinic/aw20216.c +5 -1
@@ 59,13 59,17 @@
#    define DRIVER_1_EN C13
#endif

#ifndef AW_SPI_DIVISOR
#    define AW_SPI_DIVISOR 4
#endif

uint8_t g_spi_transfer_buffer[20] = {0};
aw_led  g_pwm_buffer[DRIVER_LED_TOTAL];
bool    g_pwm_buffer_update_required[DRIVER_LED_TOTAL];

bool AW20216_write_register(pin_t slave_pin, uint8_t page, uint8_t reg, uint8_t data) {
    // Do we need to call spi_stop() if this fails?
    if (!spi_start(slave_pin, false, 0, 16)) {
    if (!spi_start(slave_pin, false, 0, AW_SPI_DIVISOR)) {
        return false;
    }