led: toggle LED on initial SW blink
We currently init the LED OFF when SW blink is triggered when on_state_change() is called. This can be problematic for very short period as the ON/OFF blink might never trigger. Toggle the LED (ON if OFF, OFF if ON) on initial SW blink to handle this corner case and better display a LED blink from the user. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Michael Trimarchi <michael@amarulasolutions.com>
This commit is contained in:
committed by
Tom Rini
parent
136b7b6d2e
commit
9e3d83301e
@@ -103,8 +103,21 @@ bool led_sw_on_state_change(struct udevice *dev, enum led_state_t state)
|
||||
return false;
|
||||
|
||||
if (state == LEDST_BLINK) {
|
||||
/* start blinking on next led_sw_blink() call */
|
||||
sw_blink->state = LED_SW_BLINK_ST_OFF;
|
||||
struct led_ops *ops = led_get_ops(dev);
|
||||
|
||||
/*
|
||||
* toggle LED initially and start blinking on next
|
||||
* led_sw_blink() call.
|
||||
*/
|
||||
switch (ops->get_state(dev)) {
|
||||
case LEDST_ON:
|
||||
ops->set_state(dev, LEDST_OFF);
|
||||
sw_blink->state = LED_SW_BLINK_ST_OFF;
|
||||
default:
|
||||
ops->set_state(dev, LEDST_ON);
|
||||
sw_blink->state = LED_SW_BLINK_ST_ON;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user