Lines Matching +full:led +full:- +full:pattern

1 // SPDX-License-Identifier: GPL-2.0-only
3 * TI LP8501 9 channel LED Driver
18 #include <linux/platform_data/leds-lp55xx.h>
21 #include "leds-lp55xx-common.h"
83 static void lp8501_set_led_current(struct lp55xx_led *led, u8 led_current) in lp8501_set_led_current() argument
85 led->led_current = led_current; in lp8501_set_led_current()
86 lp55xx_write(led->chip, LP8501_REG_LED_CURRENT_BASE + led->chan_nr, in lp8501_set_led_current()
99 /* Chip startup time is 500 us, 1 - 2 ms gives some margin */ in lp8501_post_init_device()
102 if (chip->pdata->clock_mode != LP55XX_CLOCK_EXT) in lp8501_post_init_device()
105 val |= (chip->pdata->charge_pump_mode << LP8501_CP_MODE_SHIFT) & LP8501_CP_MODE_MASK; in lp8501_post_init_device()
113 LP8501_PWR_CONFIG_M, chip->pdata->pwr_sel); in lp8501_post_init_device()
118 enum lp55xx_engine_index idx = chip->engine_idx; in lp8501_load_engine()
209 u8 pattern[LP8501_PROGRAM_LENGTH] = {0}; in lp8501_update_program_memory() local
223 while ((offset < size - 1) && (i < LP8501_PROGRAM_LENGTH)) { in lp8501_update_program_memory()
233 pattern[i] = (u8)cmd; in lp8501_update_program_memory()
244 lp55xx_write(chip, LP8501_REG_PROG_MEM + i, pattern[i]); in lp8501_update_program_memory()
249 dev_err(&chip->cl->dev, "wrong pattern format\n"); in lp8501_update_program_memory()
250 return -EINVAL; in lp8501_update_program_memory()
255 const struct firmware *fw = chip->fw; in lp8501_firmware_loaded()
257 if (fw->size > LP8501_PROGRAM_LENGTH) { in lp8501_firmware_loaded()
258 dev_err(&chip->cl->dev, "firmware data size overflow: %zu\n", in lp8501_firmware_loaded()
259 fw->size); in lp8501_firmware_loaded()
270 lp8501_update_program_memory(chip, fw->data, fw->size); in lp8501_firmware_loaded()
273 static int lp8501_led_brightness(struct lp55xx_led *led) in lp8501_led_brightness() argument
275 struct lp55xx_chip *chip = led->chip; in lp8501_led_brightness()
278 mutex_lock(&chip->lock); in lp8501_led_brightness()
279 ret = lp55xx_write(chip, LP8501_REG_LED_PWM_BASE + led->chan_nr, in lp8501_led_brightness()
280 led->brightness); in lp8501_led_brightness()
281 mutex_unlock(&chip->lock); in lp8501_led_brightness()
309 struct lp55xx_led *led; in lp8501_probe() local
310 struct lp55xx_platform_data *pdata = dev_get_platdata(&client->dev); in lp8501_probe()
311 struct device_node *np = dev_of_node(&client->dev); in lp8501_probe()
313 chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL); in lp8501_probe()
315 return -ENOMEM; in lp8501_probe()
317 chip->cfg = &lp8501_cfg; in lp8501_probe()
321 pdata = lp55xx_of_populate_pdata(&client->dev, np, in lp8501_probe()
326 dev_err(&client->dev, "no platform data\n"); in lp8501_probe()
327 return -EINVAL; in lp8501_probe()
331 led = devm_kcalloc(&client->dev, in lp8501_probe()
332 pdata->num_channels, sizeof(*led), GFP_KERNEL); in lp8501_probe()
333 if (!led) in lp8501_probe()
334 return -ENOMEM; in lp8501_probe()
336 chip->cl = client; in lp8501_probe()
337 chip->pdata = pdata; in lp8501_probe()
339 mutex_init(&chip->lock); in lp8501_probe()
341 i2c_set_clientdata(client, led); in lp8501_probe()
347 dev_info(&client->dev, "%s Programmable led chip found\n", id->name); in lp8501_probe()
349 ret = lp55xx_register_leds(led, chip); in lp8501_probe()
355 dev_err(&client->dev, "registering sysfs failed\n"); in lp8501_probe()
369 struct lp55xx_led *led = i2c_get_clientdata(client); in lp8501_remove() local
370 struct lp55xx_chip *chip = led->chip; in lp8501_remove()
402 MODULE_DESCRIPTION("Texas Instruments LP8501 LED driver");