Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Relocate LED driver init code #22365

Merged
merged 8 commits into from
Nov 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion drivers/led/aw20216s.c
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,15 @@ 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_drivers(void) {
spi_init();

aw20216s_init(AW20216S_CS_PIN_1, AW20216S_EN_PIN_1);
#if defined(AW20216S_CS_PIN_2)
aw20216s_init(AW20216S_CS_PIN_2, AW20216S_EN_PIN_2);
#endif
}

void aw20216s_init(pin_t cs_pin, pin_t en_pin) {
setPinOutput(en_pin);
writePinHigh(en_pin);
Expand Down Expand Up @@ -155,7 +164,7 @@ 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) {
for (uint8_t i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
for (uint8_t i = 0; i < AW20216S_LED_COUNT; i++) {
aw20216s_set_color(i, red, green, blue);
}
}
Expand Down
3 changes: 2 additions & 1 deletion drivers/led/aw20216s.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,9 @@ typedef struct aw20216s_led_t {
uint8_t b;
} aw20216s_led_t;

extern const aw20216s_led_t PROGMEM g_aw20216s_leds[RGB_MATRIX_LED_COUNT];
extern const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT];

void aw20216s_init_drivers(void);
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);
Expand Down
12 changes: 10 additions & 2 deletions drivers/led/issi/is31fl3218-simple.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ void is31fl3218_write_pwm_buffer(uint8_t *pwm_buffer) {
}

void is31fl3218_init(void) {
i2c_init();

// In case we ever want to reinitialize (?)
is31fl3218_write_register(IS31FL3218_REG_RESET, 0x00);

Expand All @@ -86,11 +88,17 @@ void is31fl3218_init(void) {

// Load PWM registers and LED Control register data
is31fl3218_write_register(IS31FL3218_REG_UPDATE, 0x01);

for (int i = 0; i < IS31FL3218_LED_COUNT; i++) {
is31fl3218_set_led_control_register(i, true);
}

is31fl3218_update_led_control_registers();
}

void is31fl3218_set_value(int index, uint8_t value) {
is31fl3218_led_t led;
if (index >= 0 && index < LED_MATRIX_LED_COUNT) {
if (index >= 0 && index < IS31FL3218_LED_COUNT) {
memcpy_P(&led, (&g_is31fl3218_leds[index]), sizeof(led));
}
if (g_pwm_buffer[led.v - IS31FL3218_REG_PWM] == value) {
Expand All @@ -101,7 +109,7 @@ void is31fl3218_set_value(int index, uint8_t value) {
}

void is31fl3218_set_value_all(uint8_t value) {
for (int i = 0; i < LED_MATRIX_LED_COUNT; i++) {
for (int i = 0; i < IS31FL3218_LED_COUNT; i++) {
is31fl3218_set_value(i, value);
}
}
Expand Down
2 changes: 1 addition & 1 deletion drivers/led/issi/is31fl3218-simple.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ typedef struct is31fl3218_led_t {
uint8_t v;
} __attribute__((packed)) is31fl3218_led_t;

extern const is31fl3218_led_t PROGMEM g_is31fl3218_leds[LED_MATRIX_LED_COUNT];
extern const is31fl3218_led_t PROGMEM g_is31fl3218_leds[IS31FL3218_LED_COUNT];

void is31fl3218_init(void);

Expand Down
12 changes: 10 additions & 2 deletions drivers/led/issi/is31fl3218.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ void is31fl3218_write_pwm_buffer(uint8_t *pwm_buffer) {
}

void is31fl3218_init(void) {
i2c_init();

// In case we ever want to reinitialize (?)
is31fl3218_write_register(IS31FL3218_REG_RESET, 0x00);

Expand All @@ -86,11 +88,17 @@ void is31fl3218_init(void) {

// Load PWM registers and LED Control register data
is31fl3218_write_register(IS31FL3218_REG_UPDATE, 0x01);

for (int i = 0; i < IS31FL3218_LED_COUNT; i++) {
is31fl3218_set_led_control_register(i, true, true, true);
}

is31fl3218_update_led_control_registers();
}

void is31fl3218_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
is31fl3218_led_t led;
if (index >= 0 && index < RGB_MATRIX_LED_COUNT) {
if (index >= 0 && index < IS31FL3218_LED_COUNT) {
memcpy_P(&led, (&g_is31fl3218_leds[index]), sizeof(led));
}
if (g_pwm_buffer[led.r - IS31FL3218_REG_PWM] == red && g_pwm_buffer[led.g - IS31FL3218_REG_PWM] == green && g_pwm_buffer[led.b - IS31FL3218_REG_PWM] == blue) {
Expand All @@ -103,7 +111,7 @@ void is31fl3218_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
}

void is31fl3218_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
for (int i = 0; i < IS31FL3218_LED_COUNT; i++) {
is31fl3218_set_color(i, red, green, blue);
}
}
Expand Down
2 changes: 1 addition & 1 deletion drivers/led/issi/is31fl3218.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ typedef struct is31fl3218_led_t {
uint8_t b;
} __attribute__((packed)) is31fl3218_led_t;

extern const is31fl3218_led_t PROGMEM g_is31fl3218_leds[RGB_MATRIX_LED_COUNT];
extern const is31fl3218_led_t PROGMEM g_is31fl3218_leds[IS31FL3218_LED_COUNT];

void is31fl3218_init(void);

Expand Down
34 changes: 32 additions & 2 deletions drivers/led/issi/is31fl3731-simple.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,36 @@ void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
}
}

void is31fl3731_init_drivers(void) {
i2c_init();

is31fl3731_init(IS31FL3731_I2C_ADDRESS_1);
#if defined(IS31FL3731_I2C_ADDRESS_2)
is31fl3731_init(IS31FL3731_I2C_ADDRESS_2);
# if defined(IS31FL3731_I2C_ADDRESS_3)
is31fl3731_init(IS31FL3731_I2C_ADDRESS_3);
# if defined(IS31FL3731_I2C_ADDRESS_4)
is31fl3731_init(IS31FL3731_I2C_ADDRESS_4);
# endif
# endif
#endif

for (int i = 0; i < IS31FL3731_LED_COUNT; i++) {
is31fl3731_set_led_control_register(i, true);
}

is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_1, 0);
#if defined(IS31FL3731_I2C_ADDRESS_2)
is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_2, 1);
# if defined(IS31FL3731_I2C_ADDRESS_3)
is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_3, 2);
# if defined(IS31FL3731_I2C_ADDRESS_4)
is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_4, 3);
# endif
# endif
#endif
}

void is31fl3731_init(uint8_t addr) {
// In order to avoid the LEDs being driven with garbage data
// in the LED driver's PWM registers, first enable software shutdown,
Expand Down Expand Up @@ -161,7 +191,7 @@ void is31fl3731_init(uint8_t addr) {

void is31fl3731_set_value(int index, uint8_t value) {
is31fl3731_led_t led;
if (index >= 0 && index < LED_MATRIX_LED_COUNT) {
if (index >= 0 && index < IS31FL3731_LED_COUNT) {
memcpy_P(&led, (&g_is31fl3731_leds[index]), sizeof(led));

// Subtract 0x24 to get the second index of g_pwm_buffer
Expand All @@ -175,7 +205,7 @@ void is31fl3731_set_value(int index, uint8_t value) {
}

void is31fl3731_set_value_all(uint8_t value) {
for (int i = 0; i < LED_MATRIX_LED_COUNT; i++) {
for (int i = 0; i < IS31FL3731_LED_COUNT; i++) {
is31fl3731_set_value(i, value);
}
}
Expand Down
3 changes: 2 additions & 1 deletion drivers/led/issi/is31fl3731-simple.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,9 @@ typedef struct is31fl3731_led_t {
uint8_t v;
} __attribute__((packed)) is31fl3731_led_t;

extern const is31fl3731_led_t PROGMEM g_is31fl3731_leds[LED_MATRIX_LED_COUNT];
extern const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT];

void is31fl3731_init_drivers(void);
void is31fl3731_init(uint8_t addr);
void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data);
void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
Expand Down
34 changes: 32 additions & 2 deletions drivers/led/issi/is31fl3731.c
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,36 @@ void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
}
}

void is31fl3731_init_drivers(void) {
i2c_init();

is31fl3731_init(IS31FL3731_I2C_ADDRESS_1);
#if defined(IS31FL3731_I2C_ADDRESS_2)
is31fl3731_init(IS31FL3731_I2C_ADDRESS_2);
# if defined(IS31FL3731_I2C_ADDRESS_3)
is31fl3731_init(IS31FL3731_I2C_ADDRESS_3);
# if defined(IS31FL3731_I2C_ADDRESS_4)
is31fl3731_init(IS31FL3731_I2C_ADDRESS_4);
# endif
# endif
#endif

for (int i = 0; i < IS31FL3731_LED_COUNT; i++) {
is31fl3731_set_led_control_register(i, true, true, true);
}

is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_1, 0);
#if defined(IS31FL3731_I2C_ADDRESS_2)
is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_2, 1);
# if defined(IS31FL3731_I2C_ADDRESS_3)
is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_3, 2);
# if defined(IS31FL3731_I2C_ADDRESS_4)
is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_4, 3);
# endif
# endif
#endif
}

void is31fl3731_init(uint8_t addr) {
// In order to avoid the LEDs being driven with garbage data
// in the LED driver's PWM registers, first enable software shutdown,
Expand Down Expand Up @@ -158,7 +188,7 @@ void is31fl3731_init(uint8_t addr) {

void is31fl3731_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
is31fl3731_led_t led;
if (index >= 0 && index < RGB_MATRIX_LED_COUNT) {
if (index >= 0 && index < IS31FL3731_LED_COUNT) {
memcpy_P(&led, (&g_is31fl3731_leds[index]), sizeof(led));

// Subtract 0x24 to get the second index of g_pwm_buffer
Expand All @@ -173,7 +203,7 @@ void is31fl3731_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
}

void is31fl3731_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
for (int i = 0; i < IS31FL3731_LED_COUNT; i++) {
is31fl3731_set_color(i, red, green, blue);
}
}
Expand Down
3 changes: 2 additions & 1 deletion drivers/led/issi/is31fl3731.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,9 @@ typedef struct is31fl3731_led_t {
uint8_t b;
} __attribute__((packed)) is31fl3731_led_t;

extern const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT];
extern const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT];

void is31fl3731_init_drivers(void);
void is31fl3731_init(uint8_t addr);
void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data);
void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
Expand Down
47 changes: 45 additions & 2 deletions drivers/led/issi/is31fl3733-simple.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,19 @@
# define IS31FL3733_GLOBALCURRENT 0xFF
#endif

#ifndef IS31FL3733_SYNC_1
# define IS31FL3733_SYNC_1 IS31FL3733_SYNC_NONE
#endif
#ifndef IS31FL3733_SYNC_2
# define IS31FL3733_SYNC_2 IS31FL3733_SYNC_NONE
#endif
#ifndef IS31FL3733_SYNC_3
# define IS31FL3733_SYNC_3 IS31FL3733_SYNC_NONE
#endif
#ifndef IS31FL3733_SYNC_4
# define IS31FL3733_SYNC_4 IS31FL3733_SYNC_NONE
#endif

// Transfer buffer for TWITransmitData()
uint8_t g_twi_transfer_buffer[20];

Expand Down Expand Up @@ -126,6 +139,36 @@ bool is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
return true;
}

void is31fl3733_init_drivers(void) {
i2c_init();

is31fl3733_init(IS31FL3733_I2C_ADDRESS_1, IS31FL3733_SYNC_1);
#if defined(IS31FL3733_I2C_ADDRESS_2)
is31fl3733_init(IS31FL3733_I2C_ADDRESS_2, IS31FL3733_SYNC_2);
# if defined(IS31FL3733_I2C_ADDRESS_3)
is31fl3733_init(IS31FL3733_I2C_ADDRESS_3, IS31FL3733_SYNC_3);
# if defined(IS31FL3733_I2C_ADDRESS_4)
is31fl3733_init(IS31FL3733_I2C_ADDRESS_4, IS31FL3733_SYNC_4);
# endif
# endif
#endif

for (int i = 0; i < IS31FL3733_LED_COUNT; i++) {
is31fl3733_set_led_control_register(i, true);
}

is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_1, 0);
#if defined(IS31FL3733_I2C_ADDRESS_2)
is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_2, 1);
# if defined(IS31FL3733_I2C_ADDRESS_3)
is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_3, 2);
# if defined(IS31FL3733_I2C_ADDRESS_4)
is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_4, 3);
# endif
# endif
#endif
}

void is31fl3733_init(uint8_t addr, uint8_t sync) {
// In order to avoid the LEDs being driven with garbage data
// in the LED driver's PWM registers, shutdown is enabled last.
Expand Down Expand Up @@ -174,7 +217,7 @@ void is31fl3733_init(uint8_t addr, uint8_t sync) {

void is31fl3733_set_value(int index, uint8_t value) {
is31fl3733_led_t led;
if (index >= 0 && index < LED_MATRIX_LED_COUNT) {
if (index >= 0 && index < IS31FL3733_LED_COUNT) {
memcpy_P(&led, (&g_is31fl3733_leds[index]), sizeof(led));

if (g_pwm_buffer[led.driver][led.v] == value) {
Expand All @@ -186,7 +229,7 @@ void is31fl3733_set_value(int index, uint8_t value) {
}

void is31fl3733_set_value_all(uint8_t value) {
for (int i = 0; i < LED_MATRIX_LED_COUNT; i++) {
for (int i = 0; i < IS31FL3733_LED_COUNT; i++) {
is31fl3733_set_value(i, value);
}
}
Expand Down
7 changes: 6 additions & 1 deletion drivers/led/issi/is31fl3733-simple.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,9 @@ typedef struct is31fl3733_led_t {
uint8_t v;
} __attribute__((packed)) is31fl3733_led_t;

extern const is31fl3733_led_t PROGMEM g_is31fl3733_leds[LED_MATRIX_LED_COUNT];
extern const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT];

void is31fl3733_init_drivers(void);
void is31fl3733_init(uint8_t addr, uint8_t sync);
bool is31fl3733_write_register(uint8_t addr, uint8_t reg, uint8_t data);
bool is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
Expand Down Expand Up @@ -119,6 +120,10 @@ void is31fl3733_flush(void);
#define IS31FL3733_PWM_FREQUENCY_2K1_HZ 0b011
#define IS31FL3733_PWM_FREQUENCY_1K05_HZ 0b100

#define IS31FL3733_SYNC_NONE 0b00
#define IS31FL3733_SYNC_MASTER 0b01
#define IS31FL3733_SYNC_SLAVE 0b10

#define A_1 0x00
#define A_2 0x01
#define A_3 0x02
Expand Down
Loading
Loading