Lines Matching +full:led +full:- +full:sources
1 // SPDX-License-Identifier: GPL-2.0-only
63 rval = regmap_read(pchip->regmap, reg, ®_val); in lm3630a_read()
72 return regmap_write(pchip->regmap, reg, data); in lm3630a_write()
79 return regmap_update_bits(pchip->regmap, reg, mask, data); in lm3630a_update()
86 struct lm3630a_platform_data *pdata = pchip->pdata; in lm3630a_chip_init()
92 rval |= lm3630a_update(pchip, REG_CONFIG, 0x07, pdata->pwm_ctrl); in lm3630a_chip_init()
100 rval |= lm3630a_update(pchip, REG_CTRL, 0x14, pdata->leda_ctrl); in lm3630a_chip_init()
101 rval |= lm3630a_update(pchip, REG_CTRL, 0x0B, pdata->ledb_ctrl); in lm3630a_chip_init()
104 rval |= lm3630a_write(pchip, REG_BRT_A, pdata->leda_init_brt); in lm3630a_chip_init()
105 rval |= lm3630a_write(pchip, REG_BRT_B, pdata->ledb_init_brt); in lm3630a_chip_init()
108 dev_err(pchip->dev, "i2c failed to access register\n"); in lm3630a_chip_init()
122 dev_err(pchip->dev, in lm3630a_delayed_func()
127 dev_info(pchip->dev, "REG_INT_STATUS Register is 0x%x\n", rval); in lm3630a_delayed_func()
136 queue_delayed_work(pchip->irqthread, &pchip->work, delay); in lm3630a_isr_func()
140 dev_err(pchip->dev, "i2c failed to access register\n"); in lm3630a_isr_func()
154 INIT_DELAYED_WORK(&pchip->work, lm3630a_delayed_func); in lm3630a_intr_config()
155 pchip->irqthread = create_singlethread_workqueue("lm3630a-irqthd"); in lm3630a_intr_config()
156 if (!pchip->irqthread) { in lm3630a_intr_config()
157 dev_err(pchip->dev, "create irq thread fail\n"); in lm3630a_intr_config()
158 return -ENOMEM; in lm3630a_intr_config()
161 (pchip->irq, NULL, lm3630a_isr_func, in lm3630a_intr_config()
163 dev_err(pchip->dev, "request threaded irq fail\n"); in lm3630a_intr_config()
164 destroy_workqueue(pchip->irqthread); in lm3630a_intr_config()
165 return -ENOMEM; in lm3630a_intr_config()
172 unsigned int period = pchip->pdata->pwm_period; in lm3630a_pwm_ctrl()
175 pwm_config(pchip->pwmd, duty, period); in lm3630a_pwm_ctrl()
177 pwm_enable(pchip->pwmd); in lm3630a_pwm_ctrl()
179 pwm_disable(pchip->pwmd); in lm3630a_pwm_ctrl()
187 enum lm3630a_pwm_ctrl pwm_ctrl = pchip->pdata->pwm_ctrl; in lm3630a_bank_a_update_status()
191 lm3630a_pwm_ctrl(pchip, bl->props.brightness, in lm3630a_bank_a_update_status()
192 bl->props.max_brightness); in lm3630a_bank_a_update_status()
193 return bl->props.brightness; in lm3630a_bank_a_update_status()
202 ret = lm3630a_write(pchip, REG_BRT_A, bl->props.brightness); in lm3630a_bank_a_update_status()
203 if (bl->props.brightness < 0x4) in lm3630a_bank_a_update_status()
213 dev_err(pchip->dev, "i2c failed to access\n"); in lm3630a_bank_a_update_status()
214 return bl->props.brightness; in lm3630a_bank_a_update_status()
221 enum lm3630a_pwm_ctrl pwm_ctrl = pchip->pdata->pwm_ctrl; in lm3630a_bank_a_get_brightness()
246 bl->props.brightness = brightness; in lm3630a_bank_a_get_brightness()
247 return bl->props.brightness; in lm3630a_bank_a_get_brightness()
249 dev_err(pchip->dev, "i2c failed to access register\n"); in lm3630a_bank_a_get_brightness()
264 enum lm3630a_pwm_ctrl pwm_ctrl = pchip->pdata->pwm_ctrl; in lm3630a_bank_b_update_status()
268 lm3630a_pwm_ctrl(pchip, bl->props.brightness, in lm3630a_bank_b_update_status()
269 bl->props.max_brightness); in lm3630a_bank_b_update_status()
270 return bl->props.brightness; in lm3630a_bank_b_update_status()
279 ret = lm3630a_write(pchip, REG_BRT_B, bl->props.brightness); in lm3630a_bank_b_update_status()
280 if (bl->props.brightness < 0x4) in lm3630a_bank_b_update_status()
290 dev_err(pchip->dev, "i2c failed to access REG_CTRL\n"); in lm3630a_bank_b_update_status()
291 return bl->props.brightness; in lm3630a_bank_b_update_status()
298 enum lm3630a_pwm_ctrl pwm_ctrl = pchip->pdata->pwm_ctrl; in lm3630a_bank_b_get_brightness()
323 bl->props.brightness = brightness; in lm3630a_bank_b_get_brightness()
324 return bl->props.brightness; in lm3630a_bank_b_get_brightness()
326 dev_err(pchip->dev, "i2c failed to access register\n"); in lm3630a_bank_b_get_brightness()
338 struct lm3630a_platform_data *pdata = pchip->pdata; in lm3630a_backlight_register()
343 if (pdata->leda_ctrl != LM3630A_LEDA_DISABLE) { in lm3630a_backlight_register()
344 props.brightness = pdata->leda_init_brt; in lm3630a_backlight_register()
345 props.max_brightness = pdata->leda_max_brt; in lm3630a_backlight_register()
346 label = pdata->leda_label ? pdata->leda_label : "lm3630a_leda"; in lm3630a_backlight_register()
347 pchip->bleda = in lm3630a_backlight_register()
348 devm_backlight_device_register(pchip->dev, label, in lm3630a_backlight_register()
349 pchip->dev, pchip, in lm3630a_backlight_register()
351 if (IS_ERR(pchip->bleda)) in lm3630a_backlight_register()
352 return PTR_ERR(pchip->bleda); in lm3630a_backlight_register()
355 if ((pdata->ledb_ctrl != LM3630A_LEDB_DISABLE) && in lm3630a_backlight_register()
356 (pdata->ledb_ctrl != LM3630A_LEDB_ON_A)) { in lm3630a_backlight_register()
357 props.brightness = pdata->ledb_init_brt; in lm3630a_backlight_register()
358 props.max_brightness = pdata->ledb_max_brt; in lm3630a_backlight_register()
359 label = pdata->ledb_label ? pdata->ledb_label : "lm3630a_ledb"; in lm3630a_backlight_register()
360 pchip->bledb = in lm3630a_backlight_register()
361 devm_backlight_device_register(pchip->dev, label, in lm3630a_backlight_register()
362 pchip->dev, pchip, in lm3630a_backlight_register()
364 if (IS_ERR(pchip->bledb)) in lm3630a_backlight_register()
365 return PTR_ERR(pchip->bledb); in lm3630a_backlight_register()
379 u32 sources[LM3630A_NUM_SINKS]; in lm3630a_parse_led_sources() local
382 num_sources = fwnode_property_count_u32(node, "led-sources"); in lm3630a_parse_led_sources()
385 else if (num_sources > ARRAY_SIZE(sources)) in lm3630a_parse_led_sources()
386 return -EINVAL; in lm3630a_parse_led_sources()
388 ret = fwnode_property_read_u32_array(node, "led-sources", sources, in lm3630a_parse_led_sources()
394 if (sources[i] != LM3630A_SINK_0 && sources[i] != LM3630A_SINK_1) in lm3630a_parse_led_sources()
395 return -EINVAL; in lm3630a_parse_led_sources()
397 ret |= BIT(sources[i]); in lm3630a_parse_led_sources()
416 return -EINVAL; in lm3630a_parse_bank()
423 return -EINVAL; in lm3630a_parse_bank()
428 "ti,linear-mapping-mode"); in lm3630a_parse_bank()
432 return -EINVAL; in lm3630a_parse_bank()
434 pdata->ledb_ctrl = linear ? in lm3630a_parse_bank()
439 return -EINVAL; in lm3630a_parse_bank()
441 pdata->leda_ctrl = linear ? in lm3630a_parse_bank()
446 pdata->ledb_ctrl = LM3630A_LEDB_ON_A; in lm3630a_parse_bank()
452 pdata->ledb_label = label; in lm3630a_parse_bank()
454 pdata->leda_label = label; in lm3630a_parse_bank()
457 ret = fwnode_property_read_u32(node, "default-brightness", in lm3630a_parse_bank()
461 pdata->ledb_init_brt = val; in lm3630a_parse_bank()
463 pdata->leda_init_brt = val; in lm3630a_parse_bank()
466 ret = fwnode_property_read_u32(node, "max-brightness", &val); in lm3630a_parse_bank()
469 pdata->ledb_max_brt = val; in lm3630a_parse_bank()
471 pdata->leda_max_brt = val; in lm3630a_parse_bank()
480 int ret = -ENODEV, seen_led_sources = 0; in lm3630a_parse_node()
483 device_for_each_child_node(pchip->dev, node) { in lm3630a_parse_node()
495 struct lm3630a_platform_data *pdata = dev_get_platdata(&client->dev); in lm3630a_probe()
499 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { in lm3630a_probe()
500 dev_err(&client->dev, "fail : i2c functionality check\n"); in lm3630a_probe()
501 return -EOPNOTSUPP; in lm3630a_probe()
504 pchip = devm_kzalloc(&client->dev, sizeof(struct lm3630a_chip), in lm3630a_probe()
507 return -ENOMEM; in lm3630a_probe()
508 pchip->dev = &client->dev; in lm3630a_probe()
510 pchip->regmap = devm_regmap_init_i2c(client, &lm3630a_regmap); in lm3630a_probe()
511 if (IS_ERR(pchip->regmap)) { in lm3630a_probe()
512 rval = PTR_ERR(pchip->regmap); in lm3630a_probe()
513 dev_err(&client->dev, "fail : allocate reg. map: %d\n", rval); in lm3630a_probe()
519 pdata = devm_kzalloc(pchip->dev, in lm3630a_probe()
523 return -ENOMEM; in lm3630a_probe()
526 pdata->leda_max_brt = LM3630A_MAX_BRIGHTNESS; in lm3630a_probe()
527 pdata->ledb_max_brt = LM3630A_MAX_BRIGHTNESS; in lm3630a_probe()
528 pdata->leda_init_brt = LM3630A_MAX_BRIGHTNESS; in lm3630a_probe()
529 pdata->ledb_init_brt = LM3630A_MAX_BRIGHTNESS; in lm3630a_probe()
533 dev_err(&client->dev, "fail : parse node\n"); in lm3630a_probe()
537 pchip->pdata = pdata; in lm3630a_probe()
539 pchip->enable_gpio = devm_gpiod_get_optional(&client->dev, "enable", in lm3630a_probe()
541 if (IS_ERR(pchip->enable_gpio)) { in lm3630a_probe()
542 rval = PTR_ERR(pchip->enable_gpio); in lm3630a_probe()
549 dev_err(&client->dev, "fail : init chip\n"); in lm3630a_probe()
555 dev_err(&client->dev, "fail : backlight register.\n"); in lm3630a_probe()
559 if (pdata->pwm_ctrl != LM3630A_PWM_DISABLE) { in lm3630a_probe()
560 pchip->pwmd = devm_pwm_get(pchip->dev, "lm3630a-pwm"); in lm3630a_probe()
561 if (IS_ERR(pchip->pwmd)) { in lm3630a_probe()
562 dev_err(&client->dev, "fail : get pwm device\n"); in lm3630a_probe()
563 return PTR_ERR(pchip->pwmd); in lm3630a_probe()
570 pwm_apply_args(pchip->pwmd); in lm3630a_probe()
574 pchip->irq = client->irq; in lm3630a_probe()
575 if (pchip->irq) { in lm3630a_probe()
580 dev_info(&client->dev, "LM3630A backlight register OK.\n"); in lm3630a_probe()
591 dev_err(pchip->dev, "i2c failed to access register\n"); in lm3630a_remove()
595 dev_err(pchip->dev, "i2c failed to access register\n"); in lm3630a_remove()
597 if (pchip->irq) { in lm3630a_remove()
598 free_irq(pchip->irq, pchip); in lm3630a_remove()
599 flush_workqueue(pchip->irqthread); in lm3630a_remove()
600 destroy_workqueue(pchip->irqthread); in lm3630a_remove()
633 MODULE_AUTHOR("LDD MLP <ldd-mlp@list.ti.com>");