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;
|
return false;
|
||||||
|
|
||||||
if (state == LEDST_BLINK) {
|
if (state == LEDST_BLINK) {
|
||||||
/* start blinking on next led_sw_blink() call */
|
struct led_ops *ops = led_get_ops(dev);
|
||||||
sw_blink->state = LED_SW_BLINK_ST_OFF;
|
|
||||||
|
/*
|
||||||
|
* 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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user