• Home
  • Raw
  • Download

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

2  * LP5562 LED driver
20 #include <linux/platform_data/leds-lp55xx.h>
23 #include "leds-lp55xx-common.h"
117 static void lp5562_set_led_current(struct lp55xx_led *led, u8 led_current) in lp5562_set_led_current() argument
126 led->led_current = led_current; in lp5562_set_led_current()
127 lp55xx_write(led->chip, addr[led->chan_nr], led_current); in lp5562_set_led_current()
132 enum lp55xx_engine_index idx = chip->engine_idx; in lp5562_load_engine()
212 enum lp55xx_engine_index idx = chip->engine_idx; in lp5562_update_firmware()
213 u8 pattern[LP5562_PROGRAM_LENGTH] = {0}; in lp5562_update_firmware() local
232 while ((offset < size - 1) && (i < LP5562_PROGRAM_LENGTH)) { in lp5562_update_firmware()
242 pattern[i] = (u8)cmd; in lp5562_update_firmware()
253 lp55xx_write(chip, addr[idx] + i, pattern[i]); in lp5562_update_firmware()
258 dev_err(&chip->cl->dev, "wrong pattern format\n"); in lp5562_update_firmware()
259 return -EINVAL; in lp5562_update_firmware()
264 const struct firmware *fw = chip->fw; in lp5562_firmware_loaded()
270 if (fw->size > (LP5562_PROGRAM_LENGTH * 2)) { in lp5562_firmware_loaded()
271 dev_err(&chip->cl->dev, "firmware data size overflow: %zu\n", in lp5562_firmware_loaded()
272 fw->size); in lp5562_firmware_loaded()
283 lp5562_update_firmware(chip, fw->data, fw->size); in lp5562_firmware_loaded()
306 /* Initialize all channels PWM to zero -> leds off */ in lp5562_post_init_device()
312 /* Set LED map as register PWM by default */ in lp5562_post_init_device()
318 static int lp5562_led_brightness(struct lp55xx_led *led) in lp5562_led_brightness() argument
320 struct lp55xx_chip *chip = led->chip; in lp5562_led_brightness()
329 mutex_lock(&chip->lock); in lp5562_led_brightness()
330 ret = lp55xx_write(chip, addr[led->chan_nr], led->brightness); in lp5562_led_brightness()
331 mutex_unlock(&chip->lock); in lp5562_led_brightness()
354 return ptn->size_r >= LP5562_PROGRAM_LENGTH || in _is_pc_overflow()
355 ptn->size_g >= LP5562_PROGRAM_LENGTH || in _is_pc_overflow()
356 ptn->size_b >= LP5562_PROGRAM_LENGTH; in _is_pc_overflow()
369 ptn = chip->pdata->patterns + (mode - 1); in lp5562_run_predef_led_pattern()
371 dev_err(&chip->cl->dev, "invalid pattern data\n"); in lp5562_run_predef_led_pattern()
372 return -EINVAL; in lp5562_run_predef_led_pattern()
377 /* Set LED map as RGB */ in lp5562_run_predef_led_pattern()
382 chip->engine_idx = i; in lp5562_run_predef_led_pattern()
396 ptn->r, ptn->size_r); in lp5562_run_predef_led_pattern()
398 ptn->g, ptn->size_g); in lp5562_run_predef_led_pattern()
400 ptn->b, ptn->size_b); in lp5562_run_predef_led_pattern()
412 struct lp55xx_led *led = i2c_get_clientdata(to_i2c_client(dev)); in lp5562_store_pattern() local
413 struct lp55xx_chip *chip = led->chip; in lp5562_store_pattern()
414 struct lp55xx_predef_pattern *ptn = chip->pdata->patterns; in lp5562_store_pattern()
415 int num_patterns = chip->pdata->num_patterns; in lp5562_store_pattern()
424 return -EINVAL; in lp5562_store_pattern()
426 mutex_lock(&chip->lock); in lp5562_store_pattern()
428 mutex_unlock(&chip->lock); in lp5562_store_pattern()
440 struct lp55xx_led *led = i2c_get_clientdata(to_i2c_client(dev)); in lp5562_store_engine_mux() local
441 struct lp55xx_chip *chip = led->chip; in lp5562_store_engine_mux()
445 /* LED map in lp5562_store_engine_mux()
456 enum lp55xx_engine_index idx = chip->engine_idx; in lp5562_store_engine_mux()
470 return -EINVAL; in lp5562_store_engine_mux()
475 return -EINVAL; in lp5562_store_engine_mux()
478 mutex_lock(&chip->lock); in lp5562_store_engine_mux()
480 mutex_unlock(&chip->lock); in lp5562_store_engine_mux()
522 struct lp55xx_led *led; in lp5562_probe() local
523 struct lp55xx_platform_data *pdata = dev_get_platdata(&client->dev); in lp5562_probe()
524 struct device_node *np = client->dev.of_node; in lp5562_probe()
528 pdata = lp55xx_of_populate_pdata(&client->dev, np); in lp5562_probe()
532 dev_err(&client->dev, "no platform data\n"); in lp5562_probe()
533 return -EINVAL; in lp5562_probe()
537 chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL); in lp5562_probe()
539 return -ENOMEM; in lp5562_probe()
541 led = devm_kcalloc(&client->dev, in lp5562_probe()
542 pdata->num_channels, sizeof(*led), GFP_KERNEL); in lp5562_probe()
543 if (!led) in lp5562_probe()
544 return -ENOMEM; in lp5562_probe()
546 chip->cl = client; in lp5562_probe()
547 chip->pdata = pdata; in lp5562_probe()
548 chip->cfg = &lp5562_cfg; in lp5562_probe()
550 mutex_init(&chip->lock); in lp5562_probe()
552 i2c_set_clientdata(client, led); in lp5562_probe()
558 ret = lp55xx_register_leds(led, chip); in lp5562_probe()
564 dev_err(&client->dev, "registering sysfs failed\n"); in lp5562_probe()
571 lp55xx_unregister_leds(led, chip); in lp5562_probe()
580 struct lp55xx_led *led = i2c_get_clientdata(client); in lp5562_remove() local
581 struct lp55xx_chip *chip = led->chip; in lp5562_remove()
586 lp55xx_unregister_leds(led, chip); in lp5562_remove()
619 MODULE_DESCRIPTION("Texas Instruments LP5562 LED Driver");