summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRong Chang <rongchang@chromium.org>2012-07-02 17:59:03 +0800
committerGerrit <chrome-bot@google.com>2012-07-02 21:10:25 -0700
commit10873682a880af91b9da9a07ee7f9d264fb33c8f (patch)
tree7fa8b3c026cfa279eebe450520c96c67998b77a3
parent3ed21ca42cee24b08e54f10aeb96a60e6e49f0d5 (diff)
downloadchrome-ec-10873682a880af91b9da9a07ee7f9d264fb33c8f.tar.gz
Retry to update power led after 1wire error
Signed-off-by: Rong Chang <rongchang@chromium.org> BUG=chrome-os-partner:10779 TEST=manual plug/unplug ac power and check powerled Change-Id: I1f75a67aa20fd076f1c367d7086bfc54fb050dc9 Reviewed-on: https://gerrit.chromium.org/gerrit/26564 Reviewed-by: Vic Yang <victoryang@chromium.org> Commit-Ready: Rong Chang <rongchang@chromium.org> Tested-by: Rong Chang <rongchang@chromium.org>
-rw-r--r--common/charge_state.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/common/charge_state.c b/common/charge_state.c
index 39648695cd..338e2f873e 100644
--- a/common/charge_state.c
+++ b/common/charge_state.c
@@ -464,6 +464,8 @@ void charge_state_machine_task(void)
int sleep_usec = POLL_PERIOD_SHORT, diff_usec, sleep_next;
enum power_state new_state;
uint8_t batt_flags;
+ enum powerled_color led_color = POWERLED_OFF;
+ int rv_setled = 0;
ctx.prev.state = PWR_STATE_INIT;
ctx.curr.state = PWR_STATE_INIT;
@@ -523,7 +525,8 @@ void charge_state_machine_task(void)
*ctx.memmap_batt_flags = batt_flags;
/* Charge done */
- powerled_set(POWERLED_GREEN);
+ led_color = POWERLED_GREEN;
+ rv_setled = powerled_set(POWERLED_GREEN);
sleep_usec = POLL_PERIOD_LONG;
break;
@@ -541,18 +544,22 @@ void charge_state_machine_task(void)
*ctx.memmap_batt_flags = batt_flags;
/* Charging */
- powerled_set(POWERLED_YELLOW);
+ led_color = POWERLED_YELLOW;
+ rv_setled = powerled_set(POWERLED_YELLOW);
sleep_usec = POLL_PERIOD_CHARGE;
break;
case PWR_STATE_ERROR:
/* Error */
- powerled_set(POWERLED_RED);
+ led_color = POWERLED_RED;
+ rv_setled = powerled_set(POWERLED_RED);
sleep_usec = POLL_PERIOD_CHARGE;
break;
case PWR_STATE_UNCHANGE:
/* Don't change sleep duration */
+ if (rv_setled)
+ rv_setled = powerled_set(led_color);
break;
default:
/* Other state; poll quickly and hope it goes away */