Lines Matching +full:led +full:- +full:pattern
2 * TI LP8501 9 channel LED Driver
22 #include <linux/platform_data/leds-lp55xx.h>
25 #include "leds-lp55xx-common.h"
87 static void lp8501_set_led_current(struct lp55xx_led *led, u8 led_current) in lp8501_set_led_current() argument
89 led->led_current = led_current; in lp8501_set_led_current()
90 lp55xx_write(led->chip, LP8501_REG_LED_CURRENT_BASE + led->chan_nr, in lp8501_set_led_current()
103 /* Chip startup time is 500 us, 1 - 2 ms gives some margin */ in lp8501_post_init_device()
106 if (chip->pdata->clock_mode != LP55XX_CLOCK_EXT) in lp8501_post_init_device()
115 LP8501_PWR_CONFIG_M, chip->pdata->pwr_sel); in lp8501_post_init_device()
120 enum lp55xx_engine_index idx = chip->engine_idx; in lp8501_load_engine()
211 u8 pattern[LP8501_PROGRAM_LENGTH] = {0}; in lp8501_update_program_memory() local
225 while ((offset < size - 1) && (i < LP8501_PROGRAM_LENGTH)) { in lp8501_update_program_memory()
235 pattern[i] = (u8)cmd; in lp8501_update_program_memory()
246 lp55xx_write(chip, LP8501_REG_PROG_MEM + i, pattern[i]); in lp8501_update_program_memory()
251 dev_err(&chip->cl->dev, "wrong pattern format\n"); in lp8501_update_program_memory()
252 return -EINVAL; in lp8501_update_program_memory()
257 const struct firmware *fw = chip->fw; in lp8501_firmware_loaded()
259 if (fw->size > LP8501_PROGRAM_LENGTH) { in lp8501_firmware_loaded()
260 dev_err(&chip->cl->dev, "firmware data size overflow: %zu\n", in lp8501_firmware_loaded()
261 fw->size); in lp8501_firmware_loaded()
272 lp8501_update_program_memory(chip, fw->data, fw->size); in lp8501_firmware_loaded()
275 static int lp8501_led_brightness(struct lp55xx_led *led) in lp8501_led_brightness() argument
277 struct lp55xx_chip *chip = led->chip; in lp8501_led_brightness()
280 mutex_lock(&chip->lock); in lp8501_led_brightness()
281 ret = lp55xx_write(chip, LP8501_REG_LED_PWM_BASE + led->chan_nr, in lp8501_led_brightness()
282 led->brightness); in lp8501_led_brightness()
283 mutex_unlock(&chip->lock); in lp8501_led_brightness()
311 struct lp55xx_led *led; in lp8501_probe() local
312 struct lp55xx_platform_data *pdata = dev_get_platdata(&client->dev); in lp8501_probe()
313 struct device_node *np = client->dev.of_node; in lp8501_probe()
317 pdata = lp55xx_of_populate_pdata(&client->dev, np); in lp8501_probe()
321 dev_err(&client->dev, "no platform data\n"); in lp8501_probe()
322 return -EINVAL; in lp8501_probe()
326 chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL); in lp8501_probe()
328 return -ENOMEM; in lp8501_probe()
330 led = devm_kcalloc(&client->dev, in lp8501_probe()
331 pdata->num_channels, sizeof(*led), GFP_KERNEL); in lp8501_probe()
332 if (!led) in lp8501_probe()
333 return -ENOMEM; in lp8501_probe()
335 chip->cl = client; in lp8501_probe()
336 chip->pdata = pdata; in lp8501_probe()
337 chip->cfg = &lp8501_cfg; 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()
362 lp55xx_unregister_leds(led, chip); in lp8501_probe()
371 struct lp55xx_led *led = i2c_get_clientdata(client); in lp8501_remove() local
372 struct lp55xx_chip *chip = led->chip; in lp8501_remove()
376 lp55xx_unregister_leds(led, chip); in lp8501_remove()
409 MODULE_DESCRIPTION("Texas Instruments LP8501 LED driver");