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()
111 LP8501_PWR_CONFIG_M, chip->pdata->pwr_sel); in lp8501_post_init_device()
116 enum lp55xx_engine_index idx = chip->engine_idx; in lp8501_load_engine()
207 u8 pattern[LP8501_PROGRAM_LENGTH] = {0}; in lp8501_update_program_memory() local
221 while ((offset < size - 1) && (i < LP8501_PROGRAM_LENGTH)) { in lp8501_update_program_memory()
231 pattern[i] = (u8)cmd; in lp8501_update_program_memory()
242 lp55xx_write(chip, LP8501_REG_PROG_MEM + i, pattern[i]); in lp8501_update_program_memory()
247 dev_err(&chip->cl->dev, "wrong pattern format\n"); in lp8501_update_program_memory()
248 return -EINVAL; in lp8501_update_program_memory()
253 const struct firmware *fw = chip->fw; in lp8501_firmware_loaded()
255 if (fw->size > LP8501_PROGRAM_LENGTH) { in lp8501_firmware_loaded()
256 dev_err(&chip->cl->dev, "firmware data size overflow: %zu\n", in lp8501_firmware_loaded()
257 fw->size); in lp8501_firmware_loaded()
268 lp8501_update_program_memory(chip, fw->data, fw->size); in lp8501_firmware_loaded()
271 static int lp8501_led_brightness(struct lp55xx_led *led) in lp8501_led_brightness() argument
273 struct lp55xx_chip *chip = led->chip; in lp8501_led_brightness()
276 mutex_lock(&chip->lock); in lp8501_led_brightness()
277 ret = lp55xx_write(chip, LP8501_REG_LED_PWM_BASE + led->chan_nr, in lp8501_led_brightness()
278 led->brightness); in lp8501_led_brightness()
279 mutex_unlock(&chip->lock); in lp8501_led_brightness()
307 struct lp55xx_led *led; in lp8501_probe() local
308 struct lp55xx_platform_data *pdata = dev_get_platdata(&client->dev); in lp8501_probe()
309 struct device_node *np = dev_of_node(&client->dev); in lp8501_probe()
311 chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL); in lp8501_probe()
313 return -ENOMEM; in lp8501_probe()
315 chip->cfg = &lp8501_cfg; in lp8501_probe()
319 pdata = lp55xx_of_populate_pdata(&client->dev, np, in lp8501_probe()
324 dev_err(&client->dev, "no platform data\n"); in lp8501_probe()
325 return -EINVAL; in lp8501_probe()
329 led = devm_kcalloc(&client->dev, in lp8501_probe()
330 pdata->num_channels, sizeof(*led), GFP_KERNEL); in lp8501_probe()
331 if (!led) in lp8501_probe()
332 return -ENOMEM; in lp8501_probe()
334 chip->cl = client; in lp8501_probe()
335 chip->pdata = pdata; in lp8501_probe()
337 mutex_init(&chip->lock); in lp8501_probe()
339 i2c_set_clientdata(client, led); in lp8501_probe()
345 dev_info(&client->dev, "%s Programmable led chip found\n", id->name); in lp8501_probe()
347 ret = lp55xx_register_leds(led, chip); in lp8501_probe()
353 dev_err(&client->dev, "registering sysfs failed\n"); in lp8501_probe()
367 struct lp55xx_led *led = i2c_get_clientdata(client); in lp8501_remove() local
368 struct lp55xx_chip *chip = led->chip; in lp8501_remove()
402 MODULE_DESCRIPTION("Texas Instruments LP8501 LED driver");