Lines Matching refs:led
72 struct led_state led[2]; member
107 static inline int bd2802_is_rgb_off(struct bd2802_led *led, enum led_ids id, in bd2802_is_rgb_off() argument
112 return !led->led[id].r; in bd2802_is_rgb_off()
114 return !led->led[id].g; in bd2802_is_rgb_off()
116 return !led->led[id].b; in bd2802_is_rgb_off()
118 dev_err(&led->client->dev, "%s: Invalid color\n", __func__); in bd2802_is_rgb_off()
123 static inline int bd2802_is_led_off(struct bd2802_led *led, enum led_ids id) in bd2802_is_led_off() argument
125 if (led->led[id].r || led->led[id].g || led->led[id].b) in bd2802_is_led_off()
131 static inline int bd2802_is_all_off(struct bd2802_led *led) in bd2802_is_all_off() argument
136 if (!bd2802_is_led_off(led, i)) in bd2802_is_all_off()
170 static void bd2802_update_state(struct bd2802_led *led, enum led_ids id, in bd2802_update_state() argument
180 led->led[i].r = led_bit; in bd2802_update_state()
183 led->led[i].g = led_bit; in bd2802_update_state()
186 led->led[i].b = led_bit; in bd2802_update_state()
189 dev_err(&led->client->dev, in bd2802_update_state()
199 if (!bd2802_is_led_off(led, id)) in bd2802_update_state()
202 if (bd2802_is_all_off(led) && !led->adf_on) { in bd2802_update_state()
203 gpio_set_value(led->pdata->reset_gpio, 0); in bd2802_update_state()
212 bd2802_write_byte(led->client, BD2802_REG_CONTROL, value); in bd2802_update_state()
215 static void bd2802_configure(struct bd2802_led *led) in bd2802_configure() argument
217 struct bd2802_led_platform_data *pdata = led->pdata; in bd2802_configure()
221 bd2802_write_byte(led->client, reg, pdata->rgb_time); in bd2802_configure()
224 bd2802_write_byte(led->client, reg, pdata->rgb_time); in bd2802_configure()
227 static void bd2802_reset_cancel(struct bd2802_led *led) in bd2802_reset_cancel() argument
229 gpio_set_value(led->pdata->reset_gpio, 1); in bd2802_reset_cancel()
231 bd2802_configure(led); in bd2802_reset_cancel()
234 static void bd2802_enable(struct bd2802_led *led, enum led_ids id) in bd2802_enable() argument
239 other_led_on = !bd2802_is_led_off(led, other_led); in bd2802_enable()
245 bd2802_write_byte(led->client, BD2802_REG_CONTROL, value); in bd2802_enable()
248 static void bd2802_set_on(struct bd2802_led *led, enum led_ids id, in bd2802_set_on() argument
253 if (bd2802_is_all_off(led) && !led->adf_on) in bd2802_set_on()
254 bd2802_reset_cancel(led); in bd2802_set_on()
257 bd2802_write_byte(led->client, reg, led->rgb_current); in bd2802_set_on()
259 bd2802_write_byte(led->client, reg, BD2802_CURRENT_000); in bd2802_set_on()
261 bd2802_write_byte(led->client, reg, BD2802_PATTERN_FULL); in bd2802_set_on()
263 bd2802_enable(led, id); in bd2802_set_on()
264 bd2802_update_state(led, id, color, BD2802_ON); in bd2802_set_on()
267 static void bd2802_set_blink(struct bd2802_led *led, enum led_ids id, in bd2802_set_blink() argument
272 if (bd2802_is_all_off(led) && !led->adf_on) in bd2802_set_blink()
273 bd2802_reset_cancel(led); in bd2802_set_blink()
276 bd2802_write_byte(led->client, reg, BD2802_CURRENT_000); in bd2802_set_blink()
278 bd2802_write_byte(led->client, reg, led->rgb_current); in bd2802_set_blink()
280 bd2802_write_byte(led->client, reg, led->wave_pattern); in bd2802_set_blink()
282 bd2802_enable(led, id); in bd2802_set_blink()
283 bd2802_update_state(led, id, color, BD2802_BLINK); in bd2802_set_blink()
286 static void bd2802_turn_on(struct bd2802_led *led, enum led_ids id, in bd2802_turn_on() argument
290 dev_err(&led->client->dev, in bd2802_turn_on()
296 bd2802_set_blink(led, id, color); in bd2802_turn_on()
298 bd2802_set_on(led, id, color); in bd2802_turn_on()
301 static void bd2802_turn_off(struct bd2802_led *led, enum led_ids id, in bd2802_turn_off() argument
306 if (bd2802_is_rgb_off(led, id, color)) in bd2802_turn_off()
310 bd2802_write_byte(led->client, reg, BD2802_CURRENT_000); in bd2802_turn_off()
312 bd2802_write_byte(led->client, reg, BD2802_CURRENT_000); in bd2802_turn_off()
314 bd2802_update_state(led, id, color, BD2802_OFF); in bd2802_turn_off()
321 struct bd2802_led *led = i2c_get_clientdata(to_i2c_client(dev));\
329 down_write(&led->rwsem); \
330 bd2802_write_byte(led->client, reg_addr, (u8) val); \
331 up_write(&led->rwsem); \
387 static void bd2802_enable_adv_conf(struct bd2802_led *led) in bd2802_enable_adv_conf() argument
392 ret = device_create_file(&led->client->dev, in bd2802_enable_adv_conf()
395 dev_err(&led->client->dev, "failed: sysfs file %s\n", in bd2802_enable_adv_conf()
401 if (bd2802_is_all_off(led)) in bd2802_enable_adv_conf()
402 bd2802_reset_cancel(led); in bd2802_enable_adv_conf()
404 led->adf_on = 1; in bd2802_enable_adv_conf()
410 device_remove_file(&led->client->dev, in bd2802_enable_adv_conf()
414 static void bd2802_disable_adv_conf(struct bd2802_led *led) in bd2802_disable_adv_conf() argument
419 device_remove_file(&led->client->dev, in bd2802_disable_adv_conf()
422 if (bd2802_is_all_off(led)) in bd2802_disable_adv_conf()
423 gpio_set_value(led->pdata->reset_gpio, 0); in bd2802_disable_adv_conf()
425 led->adf_on = 0; in bd2802_disable_adv_conf()
431 struct bd2802_led *led = i2c_get_clientdata(to_i2c_client(dev)); in bd2802_show_adv_conf() local
434 down_read(&led->rwsem); in bd2802_show_adv_conf()
435 if (led->adf_on) in bd2802_show_adv_conf()
439 up_read(&led->rwsem); in bd2802_show_adv_conf()
447 struct bd2802_led *led = i2c_get_clientdata(to_i2c_client(dev)); in bd2802_store_adv_conf() local
452 down_write(&led->rwsem); in bd2802_store_adv_conf()
453 if (!led->adf_on && !strncmp(buf, "on", 2)) in bd2802_store_adv_conf()
454 bd2802_enable_adv_conf(led); in bd2802_store_adv_conf()
455 else if (led->adf_on && !strncmp(buf, "off", 3)) in bd2802_store_adv_conf()
456 bd2802_disable_adv_conf(led); in bd2802_store_adv_conf()
457 up_write(&led->rwsem); in bd2802_store_adv_conf()
475 struct bd2802_led *led = i2c_get_clientdata(to_i2c_client(dev));\
477 down_read(&led->rwsem); \
478 ret = sprintf(buf, "0x%02x\n", led->attr_name); \
479 up_read(&led->rwsem); \
485 struct bd2802_led *led = i2c_get_clientdata(to_i2c_client(dev));\
493 down_write(&led->rwsem); \
494 led->attr_name = val; \
495 up_write(&led->rwsem); \
520 struct bd2802_led *led = \
522 led->led_id = id; \
523 led->color = clr; \
525 led->state = BD2802_OFF; \
526 bd2802_turn_off(led, led->led_id, led->color); \
528 led->state = BD2802_ON; \
529 bd2802_turn_on(led, led->led_id, led->color, BD2802_ON);\
536 struct bd2802_led *led = \
540 led->led_id = id; \
541 led->color = clr; \
542 led->state = BD2802_BLINK; \
543 bd2802_turn_on(led, led->led_id, led->color, BD2802_BLINK); \
554 static int bd2802_register_led_classdev(struct bd2802_led *led) in bd2802_register_led_classdev() argument
558 led->cdev_led1r.name = "led1_R"; in bd2802_register_led_classdev()
559 led->cdev_led1r.brightness = LED_OFF; in bd2802_register_led_classdev()
560 led->cdev_led1r.brightness_set_blocking = bd2802_set_led1r_brightness; in bd2802_register_led_classdev()
561 led->cdev_led1r.blink_set = bd2802_set_led1r_blink; in bd2802_register_led_classdev()
563 ret = led_classdev_register(&led->client->dev, &led->cdev_led1r); in bd2802_register_led_classdev()
565 dev_err(&led->client->dev, "couldn't register LED %s\n", in bd2802_register_led_classdev()
566 led->cdev_led1r.name); in bd2802_register_led_classdev()
570 led->cdev_led1g.name = "led1_G"; in bd2802_register_led_classdev()
571 led->cdev_led1g.brightness = LED_OFF; in bd2802_register_led_classdev()
572 led->cdev_led1g.brightness_set_blocking = bd2802_set_led1g_brightness; in bd2802_register_led_classdev()
573 led->cdev_led1g.blink_set = bd2802_set_led1g_blink; in bd2802_register_led_classdev()
575 ret = led_classdev_register(&led->client->dev, &led->cdev_led1g); in bd2802_register_led_classdev()
577 dev_err(&led->client->dev, "couldn't register LED %s\n", in bd2802_register_led_classdev()
578 led->cdev_led1g.name); in bd2802_register_led_classdev()
582 led->cdev_led1b.name = "led1_B"; in bd2802_register_led_classdev()
583 led->cdev_led1b.brightness = LED_OFF; in bd2802_register_led_classdev()
584 led->cdev_led1b.brightness_set_blocking = bd2802_set_led1b_brightness; in bd2802_register_led_classdev()
585 led->cdev_led1b.blink_set = bd2802_set_led1b_blink; in bd2802_register_led_classdev()
587 ret = led_classdev_register(&led->client->dev, &led->cdev_led1b); in bd2802_register_led_classdev()
589 dev_err(&led->client->dev, "couldn't register LED %s\n", in bd2802_register_led_classdev()
590 led->cdev_led1b.name); in bd2802_register_led_classdev()
594 led->cdev_led2r.name = "led2_R"; in bd2802_register_led_classdev()
595 led->cdev_led2r.brightness = LED_OFF; in bd2802_register_led_classdev()
596 led->cdev_led2r.brightness_set_blocking = bd2802_set_led2r_brightness; in bd2802_register_led_classdev()
597 led->cdev_led2r.blink_set = bd2802_set_led2r_blink; in bd2802_register_led_classdev()
599 ret = led_classdev_register(&led->client->dev, &led->cdev_led2r); in bd2802_register_led_classdev()
601 dev_err(&led->client->dev, "couldn't register LED %s\n", in bd2802_register_led_classdev()
602 led->cdev_led2r.name); in bd2802_register_led_classdev()
606 led->cdev_led2g.name = "led2_G"; in bd2802_register_led_classdev()
607 led->cdev_led2g.brightness = LED_OFF; in bd2802_register_led_classdev()
608 led->cdev_led2g.brightness_set_blocking = bd2802_set_led2g_brightness; in bd2802_register_led_classdev()
609 led->cdev_led2g.blink_set = bd2802_set_led2g_blink; in bd2802_register_led_classdev()
611 ret = led_classdev_register(&led->client->dev, &led->cdev_led2g); in bd2802_register_led_classdev()
613 dev_err(&led->client->dev, "couldn't register LED %s\n", in bd2802_register_led_classdev()
614 led->cdev_led2g.name); in bd2802_register_led_classdev()
618 led->cdev_led2b.name = "led2_B"; in bd2802_register_led_classdev()
619 led->cdev_led2b.brightness = LED_OFF; in bd2802_register_led_classdev()
620 led->cdev_led2b.brightness_set_blocking = bd2802_set_led2b_brightness; in bd2802_register_led_classdev()
621 led->cdev_led2b.blink_set = bd2802_set_led2b_blink; in bd2802_register_led_classdev()
622 led->cdev_led2b.flags |= LED_CORE_SUSPENDRESUME; in bd2802_register_led_classdev()
624 ret = led_classdev_register(&led->client->dev, &led->cdev_led2b); in bd2802_register_led_classdev()
626 dev_err(&led->client->dev, "couldn't register LED %s\n", in bd2802_register_led_classdev()
627 led->cdev_led2b.name); in bd2802_register_led_classdev()
634 led_classdev_unregister(&led->cdev_led2g); in bd2802_register_led_classdev()
636 led_classdev_unregister(&led->cdev_led2r); in bd2802_register_led_classdev()
638 led_classdev_unregister(&led->cdev_led1b); in bd2802_register_led_classdev()
640 led_classdev_unregister(&led->cdev_led1g); in bd2802_register_led_classdev()
642 led_classdev_unregister(&led->cdev_led1r); in bd2802_register_led_classdev()
648 static void bd2802_unregister_led_classdev(struct bd2802_led *led) in bd2802_unregister_led_classdev() argument
650 led_classdev_unregister(&led->cdev_led2b); in bd2802_unregister_led_classdev()
651 led_classdev_unregister(&led->cdev_led2g); in bd2802_unregister_led_classdev()
652 led_classdev_unregister(&led->cdev_led2r); in bd2802_unregister_led_classdev()
653 led_classdev_unregister(&led->cdev_led1b); in bd2802_unregister_led_classdev()
654 led_classdev_unregister(&led->cdev_led1g); in bd2802_unregister_led_classdev()
655 led_classdev_unregister(&led->cdev_led1r); in bd2802_unregister_led_classdev()
661 struct bd2802_led *led; in bd2802_probe() local
665 led = devm_kzalloc(&client->dev, sizeof(struct bd2802_led), GFP_KERNEL); in bd2802_probe()
666 if (!led) in bd2802_probe()
669 led->client = client; in bd2802_probe()
670 pdata = led->pdata = dev_get_platdata(&client->dev); in bd2802_probe()
671 i2c_set_clientdata(client, led); in bd2802_probe()
688 gpio_set_value(led->pdata->reset_gpio, 0); in bd2802_probe()
691 led->wave_pattern = BD2802_PATTERN_HALF; in bd2802_probe()
692 led->rgb_current = BD2802_CURRENT_032; in bd2802_probe()
694 init_rwsem(&led->rwsem); in bd2802_probe()
697 ret = device_create_file(&led->client->dev, in bd2802_probe()
700 dev_err(&led->client->dev, "failed: sysfs file %s\n", in bd2802_probe()
706 ret = bd2802_register_led_classdev(led); in bd2802_probe()
714 device_remove_file(&led->client->dev, bd2802_attributes[i]); in bd2802_probe()
720 struct bd2802_led *led = i2c_get_clientdata(client); in bd2802_remove() local
723 gpio_set_value(led->pdata->reset_gpio, 0); in bd2802_remove()
724 bd2802_unregister_led_classdev(led); in bd2802_remove()
725 if (led->adf_on) in bd2802_remove()
726 bd2802_disable_adv_conf(led); in bd2802_remove()
728 device_remove_file(&led->client->dev, bd2802_attributes[i]); in bd2802_remove()
734 static void bd2802_restore_state(struct bd2802_led *led) in bd2802_restore_state() argument
739 if (led->led[i].r) in bd2802_restore_state()
740 bd2802_turn_on(led, i, RED, led->led[i].r); in bd2802_restore_state()
741 if (led->led[i].g) in bd2802_restore_state()
742 bd2802_turn_on(led, i, GREEN, led->led[i].g); in bd2802_restore_state()
743 if (led->led[i].b) in bd2802_restore_state()
744 bd2802_turn_on(led, i, BLUE, led->led[i].b); in bd2802_restore_state()
751 struct bd2802_led *led = i2c_get_clientdata(client); in bd2802_suspend() local
753 gpio_set_value(led->pdata->reset_gpio, 0); in bd2802_suspend()
761 struct bd2802_led *led = i2c_get_clientdata(client); in bd2802_resume() local
763 if (!bd2802_is_all_off(led) || led->adf_on) { in bd2802_resume()
764 bd2802_reset_cancel(led); in bd2802_resume()
765 bd2802_restore_state(led); in bd2802_resume()