summaryrefslogtreecommitdiffstats
path: root/drivers/led/issi/is31fl3218.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/led/issi/is31fl3218.c')
-rw-r--r--drivers/led/issi/is31fl3218.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/drivers/led/issi/is31fl3218.c b/drivers/led/issi/is31fl3218.c
index c2300ebe89..970e9a0be9 100644
--- a/drivers/led/issi/is31fl3218.c
+++ b/drivers/led/issi/is31fl3218.c
@@ -37,58 +37,61 @@ uint8_t g_twi_transfer_buffer[20];
uint8_t g_pwm_buffer[18];
bool g_pwm_buffer_update_required = false;
-void IS31FL3218_write_register(uint8_t reg, uint8_t data) {
+void is31fl3218_write_register(uint8_t reg, uint8_t data) {
g_twi_transfer_buffer[0] = reg;
g_twi_transfer_buffer[1] = data;
i2c_transmit(ISSI_ADDRESS, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
}
-void IS31FL3218_write_pwm_buffer(uint8_t *pwm_buffer) {
+void is31fl3218_write_pwm_buffer(uint8_t *pwm_buffer) {
g_twi_transfer_buffer[0] = ISSI_REG_PWM;
memcpy(g_twi_transfer_buffer + 1, pwm_buffer, 18);
i2c_transmit(ISSI_ADDRESS, g_twi_transfer_buffer, 19, ISSI_TIMEOUT);
}
-void IS31FL3218_init(void) {
+void is31fl3218_init(void) {
// In case we ever want to reinitialize (?)
- IS31FL3218_write_register(ISSI_REG_RESET, 0x00);
+ is31fl3218_write_register(ISSI_REG_RESET, 0x00);
// Turn off software shutdown
- IS31FL3218_write_register(ISSI_REG_SHUTDOWN, 0x01);
+ is31fl3218_write_register(ISSI_REG_SHUTDOWN, 0x01);
// Set all PWM values to zero
for (uint8_t i = 0; i < 18; i++) {
- IS31FL3218_write_register(ISSI_REG_PWM + i, 0x00);
+ is31fl3218_write_register(ISSI_REG_PWM + i, 0x00);
}
// Enable all channels
for (uint8_t i = 0; i < 3; i++) {
- IS31FL3218_write_register(ISSI_REG_CONTROL + i, 0b00111111);
+ is31fl3218_write_register(ISSI_REG_CONTROL + i, 0b00111111);
}
// Load PWM registers and LED Control register data
- IS31FL3218_write_register(ISSI_REG_UPDATE, 0x01);
+ is31fl3218_write_register(ISSI_REG_UPDATE, 0x01);
}
-void IS31FL3218_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
+void is31fl3218_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
+ if (g_pwm_buffer[index * 3 + 0] == red && g_pwm_buffer[index * 3 + 1] == green && g_pwm_buffer[index * 3 + 2] == blue) {
+ return;
+ }
g_pwm_buffer[index * 3 + 0] = red;
g_pwm_buffer[index * 3 + 1] = green;
g_pwm_buffer[index * 3 + 2] = blue;
g_pwm_buffer_update_required = true;
}
-void IS31FL3218_set_color_all(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 < 6; i++) {
- IS31FL3218_set_color(i, red, green, blue);
+ is31fl3218_set_color(i, red, green, blue);
}
}
-void IS31FL3218_update_pwm_buffers(void) {
+void is31fl3218_update_pwm_buffers(void) {
if (g_pwm_buffer_update_required) {
- IS31FL3218_write_pwm_buffer(g_pwm_buffer);
+ is31fl3218_write_pwm_buffer(g_pwm_buffer);
// Load PWM registers and LED Control register data
- IS31FL3218_write_register(ISSI_REG_UPDATE, 0x01);
+ is31fl3218_write_register(ISSI_REG_UPDATE, 0x01);
}
g_pwm_buffer_update_required = false;
}