Lines Matching refs:led

150 static int lp8860_unlock_eeprom(struct lp8860_led *led, int lock)  in lp8860_unlock_eeprom()  argument
154 mutex_lock(&led->lock); in lp8860_unlock_eeprom()
157 ret = regmap_write(led->regmap, in lp8860_unlock_eeprom()
161 dev_err(&led->client->dev, "EEPROM Unlock failed\n"); in lp8860_unlock_eeprom()
165 ret = regmap_write(led->regmap, in lp8860_unlock_eeprom()
169 dev_err(&led->client->dev, "EEPROM Unlock failed\n"); in lp8860_unlock_eeprom()
172 ret = regmap_write(led->regmap, in lp8860_unlock_eeprom()
176 dev_err(&led->client->dev, "EEPROM Unlock failed\n"); in lp8860_unlock_eeprom()
180 ret = regmap_write(led->regmap, in lp8860_unlock_eeprom()
186 mutex_unlock(&led->lock); in lp8860_unlock_eeprom()
190 static int lp8860_fault_check(struct lp8860_led *led) in lp8860_fault_check() argument
195 ret = regmap_read(led->regmap, LP8860_LED_FAULT, &read_buf); in lp8860_fault_check()
201 ret = regmap_read(led->regmap, LP8860_FAULT, &read_buf); in lp8860_fault_check()
209 ret = regmap_write(led->regmap, LP8860_FAULT_CLEAR, in lp8860_fault_check()
217 struct lp8860_led *led = container_of(work, struct lp8860_led, work); in lp8860_led_brightness_work() local
219 int disp_brightness = led->brightness * 255; in lp8860_led_brightness_work()
221 mutex_lock(&led->lock); in lp8860_led_brightness_work()
223 ret = lp8860_fault_check(led); in lp8860_led_brightness_work()
225 dev_err(&led->client->dev, "Cannot read/clear faults\n"); in lp8860_led_brightness_work()
229 ret = regmap_write(led->regmap, LP8860_DISP_CL1_BRT_MSB, in lp8860_led_brightness_work()
232 dev_err(&led->client->dev, "Cannot write CL1 MSB\n"); in lp8860_led_brightness_work()
236 ret = regmap_write(led->regmap, LP8860_DISP_CL1_BRT_LSB, in lp8860_led_brightness_work()
239 dev_err(&led->client->dev, "Cannot write CL1 LSB\n"); in lp8860_led_brightness_work()
243 mutex_unlock(&led->lock); in lp8860_led_brightness_work()
249 struct lp8860_led *led = in lp8860_brightness_set() local
252 led->brightness = brt_val; in lp8860_brightness_set()
253 schedule_work(&led->work); in lp8860_brightness_set()
256 static int lp8860_init(struct lp8860_led *led) in lp8860_init() argument
261 if (led->enable_gpio) in lp8860_init()
262 gpiod_direction_output(led->enable_gpio, 1); in lp8860_init()
264 ret = lp8860_fault_check(led); in lp8860_init()
268 ret = regmap_read(led->regmap, LP8860_STATUS, &read_buf); in lp8860_init()
272 ret = lp8860_unlock_eeprom(led, LP8860_UNLOCK_EEPROM); in lp8860_init()
274 dev_err(&led->client->dev, "Failed unlocking EEPROM\n"); in lp8860_init()
280 ret = regmap_write(led->eeprom_regmap, in lp8860_init()
284 dev_err(&led->client->dev, "Failed writing EEPROM\n"); in lp8860_init()
289 ret = lp8860_unlock_eeprom(led, LP8860_LOCK_EEPROM); in lp8860_init()
293 ret = regmap_write(led->regmap, in lp8860_init()
297 dev_err(&led->client->dev, "Failed programming EEPROM\n"); in lp8860_init()
300 if (led->enable_gpio) in lp8860_init()
301 gpiod_direction_output(led->enable_gpio, 0); in lp8860_init()
377 struct lp8860_led *led; in lp8860_probe() local
380 led = devm_kzalloc(&client->dev, sizeof(*led), GFP_KERNEL); in lp8860_probe()
381 if (!led) in lp8860_probe()
384 led->label = LP8860_DISP_LED_NAME; in lp8860_probe()
387 ret = of_property_read_string(np, "label", &led->label); in lp8860_probe()
394 led->enable_gpio = devm_gpiod_get_optional(&client->dev, in lp8860_probe()
396 if (IS_ERR(led->enable_gpio)) { in lp8860_probe()
397 ret = PTR_ERR(led->enable_gpio); in lp8860_probe()
402 led->regulator = devm_regulator_get(&client->dev, "vled"); in lp8860_probe()
403 if (IS_ERR(led->regulator)) in lp8860_probe()
404 led->regulator = NULL; in lp8860_probe()
406 led->client = client; in lp8860_probe()
407 led->led_dev.name = led->label; in lp8860_probe()
408 led->led_dev.max_brightness = LED_FULL; in lp8860_probe()
409 led->led_dev.brightness_set = lp8860_brightness_set; in lp8860_probe()
411 mutex_init(&led->lock); in lp8860_probe()
412 INIT_WORK(&led->work, lp8860_led_brightness_work); in lp8860_probe()
414 i2c_set_clientdata(client, led); in lp8860_probe()
416 led->regmap = devm_regmap_init_i2c(client, &lp8860_regmap_config); in lp8860_probe()
417 if (IS_ERR(led->regmap)) { in lp8860_probe()
418 ret = PTR_ERR(led->regmap); in lp8860_probe()
424 led->eeprom_regmap = devm_regmap_init_i2c(client, &lp8860_eeprom_regmap_config); in lp8860_probe()
425 if (IS_ERR(led->eeprom_regmap)) { in lp8860_probe()
426 ret = PTR_ERR(led->eeprom_regmap); in lp8860_probe()
432 ret = lp8860_init(led); in lp8860_probe()
436 ret = led_classdev_register(&client->dev, &led->led_dev); in lp8860_probe()
447 struct lp8860_led *led = i2c_get_clientdata(client); in lp8860_remove() local
450 led_classdev_unregister(&led->led_dev); in lp8860_remove()
451 cancel_work_sync(&led->work); in lp8860_remove()
453 if (led->enable_gpio) in lp8860_remove()
454 gpiod_direction_output(led->enable_gpio, 0); in lp8860_remove()
456 if (led->regulator) { in lp8860_remove()
457 ret = regulator_disable(led->regulator); in lp8860_remove()
459 dev_err(&led->client->dev, in lp8860_remove()