diff options
author | Pavel <pavel@ucw.cz> | 2018-10-28 13:16:47 +0100 |
---|---|---|
committer | Pavel <pavel@ucw.cz> | 2019-01-07 11:22:07 +0100 |
commit | 8780c5158b1ebd4b952943041f25cba6a419c00a (patch) | |
tree | 9cfe28ddd15158de2bcf86113b915c4df6bf3356 | |
parent | 347e0cd3da949ba484e93eb65cfafe3d1dcce4e6 (diff) | |
download | linux-k-8780c5158b1ebd4b952943041f25cba6a419c00a.tar.gz |
leds: rgb: lp5523 support
-rw-r--r-- | drivers/leds/leds-lp5523.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/drivers/leds/leds-lp5523.c b/drivers/leds/leds-lp5523.c index a2e74feee2b2fa..7b14c2f843cb1a 100644 --- a/drivers/leds/leds-lp5523.c +++ b/drivers/leds/leds-lp5523.c @@ -185,7 +185,7 @@ static void lp5523_load_engine(struct lp55xx_chip *chip) lp5523_wait_opmode_done(); } -static void lp5523_load_engine_and_select_page(struct lp55xx_chip *chip) +void lp5523_load_engine_and_select_page(struct lp55xx_chip *chip) { enum lp55xx_engine_index idx = chip->engine_idx; static const u8 page_sel[] = { @@ -380,6 +380,7 @@ static void lp5523_firmware_loaded(struct lp55xx_chip *chip) { const struct firmware *fw = chip->fw; + /* FIXME: is this correct? fw->size is for ascii-encoded firmware... */ if (fw->size > LP5523_PROGRAM_LENGTH) { dev_err(&chip->cl->dev, "firmware data size overflow: %zu\n", fw->size); @@ -802,6 +803,26 @@ leave: return ret; } +int lp5523_rgb_brightness(struct lp55xx_led *led, struct led_rgb r) +{ + struct lp55xx_chip *chip = led->chip; + int ret; + + mutex_lock(&chip->lock); + r.red >>= 24; + r.green >>= 24; + r.blue >>= 24; + //printk("RGB brightness %d %d %d\n", r.red, r.green, r.blue); + ret = lp55xx_write(chip, LP5523_REG_LED_PWM_BASE + led->chan_nr, r.red); + if (!ret) + lp55xx_write(chip, LP5523_REG_LED_PWM_BASE + led->chan_nr - 1, r.green); + if (!ret) + lp55xx_write(chip, LP5523_REG_LED_PWM_BASE + led->chan_nr - 2, r.blue); + mutex_unlock(&chip->lock); + return ret; + +} + static int lp5523_led_brightness(struct lp55xx_led *led) { struct lp55xx_chip *chip = led->chip; |