diff options
author | Nicolas Boichat <drinkcat@chromium.org> | 2018-02-05 16:35:20 +0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-02-07 11:55:58 -0800 |
commit | 824351c839001019214ad907fd2c027fad98db95 (patch) | |
tree | 484e08e205201a88db20c6bbc6b887cc33233f87 /common/charge_state_v2.c | |
parent | ad286a050ea566ebd89cb53f5118c91b04a0980c (diff) | |
download | chrome-ec-824351c839001019214ad907fd2c027fad98db95.tar.gz |
charge_state_v2: Separate update_base_battery_info
Indentation in charger_task is getting out of control, let's move
the logic to a new function.
BRANCH=none
BUG=b:71881017
TEST=Flash lux and wand, battery algorithm works as expected.
Change-Id: Ife008370218f0d9eb0f96088ec144b0aba40716f
Signed-off-by: Nicolas Boichat <drinkcat@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/901442
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Reviewed-by: Furquan Shaikh <furquan@chromium.org>
Diffstat (limited to 'common/charge_state_v2.c')
-rw-r--r-- | common/charge_state_v2.c | 60 |
1 files changed, 30 insertions, 30 deletions
diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c index 608e1e92e9..787e16d856 100644 --- a/common/charge_state_v2.c +++ b/common/charge_state_v2.c @@ -217,19 +217,39 @@ static const struct dual_battery_policy db_policy = { (total_power) -= val_capped; \ } while (0) -static int charge_get_base_percent(void) +static void update_base_battery_info(void) { - const struct ec_response_battery_dynamic_info *const bd = + struct ec_response_battery_dynamic_info *const bd = &battery_dynamic[BATT_IDX_BASE]; - if (bd->flags & (BATT_FLAG_BAD_FULL_CAPACITY | - BATT_FLAG_BAD_REMAINING_CAPACITY)) - return -1; - - if (bd->full_capacity > 0) - return 100 * bd->remaining_capacity / bd->full_capacity; + base_connected = board_is_base_connected(); - return 0; + if (!base_connected) { + /* Invalidate static/dynamic information */ + bd->flags = EC_BATT_FLAG_INVALID_DATA; + charge_base = -1; + base_responsive = 0; + prev_current_base = 0; + prev_allow_charge_base = 0; + } else if (base_responsive) { + int old_flags = bd->flags; + + ec_ec_master_base_get_dynamic_info(); + + /* Fetch static information when flags change. */ + if (old_flags != bd->flags) + ec_ec_master_base_get_static_info(); + + /* Update charge_base */ + if (bd->flags & (BATT_FLAG_BAD_FULL_CAPACITY | + BATT_FLAG_BAD_REMAINING_CAPACITY)) + charge_base = -1; + else if (bd->full_capacity > 0) + charge_base = 100 * bd->remaining_capacity + / bd->full_capacity; + else + charge_base = 0; + } } /** @@ -1299,27 +1319,7 @@ void charger_task(void *u) } #ifdef CONFIG_EC_EC_COMM_BATTERY_MASTER - base_connected = board_is_base_connected(); - - if (!base_connected) { - /* Invalidate static/dynamic information */ - battery_dynamic[BATT_IDX_BASE].flags = - EC_BATT_FLAG_INVALID_DATA; - charge_base = -1; - base_responsive = 0; - prev_current_base = 0; - prev_allow_charge_base = 0; - } else if (base_responsive) { - int old_flags = battery_dynamic[BATT_IDX_BASE].flags; - - ec_ec_master_base_get_dynamic_info(); - - /* Fetch static information when flags change. */ - if (old_flags != battery_dynamic[BATT_IDX_BASE].flags) - ec_ec_master_base_get_static_info(); - - charge_base = charge_get_base_percent(); - } + update_base_battery_info(); #endif charger_get_params(&curr.chg); |