diff options
author | YH Lin <yueherngl@google.com> | 2019-03-26 06:06:01 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2019-03-30 20:59:37 -0700 |
commit | 89bfde44d99ad345a686998b344aac35051ebdff (patch) | |
tree | 6a8a7135d30e9d06fcb824cab459fb25fc60dbc3 | |
parent | 592919bd01f8a20c16a6e2907c273b94bc9962c4 (diff) | |
download | chrome-ec-89bfde44d99ad345a686998b344aac35051ebdff.tar.gz |
flapjack: base on the adc to determine battery type
Use the ADC reading to match the battery in the table.
BUG=b:126770302
BRANCH=None
TEST=Check the console with matching "Battery Type:" value.
Change-Id: Ibdc9a96b7f15506deda6e87fec49270a7afe3441
Signed-off-by: YH Lin <yueherngl@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1507320
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
-rw-r--r-- | board/flapjack/battery.c | 56 | ||||
-rw-r--r-- | board/flapjack/board.c | 2 |
2 files changed, 46 insertions, 12 deletions
diff --git a/board/flapjack/battery.c b/board/flapjack/battery.c index 1e088f32d9..6ba167b3fe 100644 --- a/board/flapjack/battery.c +++ b/board/flapjack/battery.c @@ -19,9 +19,12 @@ #include "usb_pd.h" #include "util.h" #include "board.h" +#include "adc.h" +#include "adc_chip.h" +#include "math_util.h" -/* We have only one battery now. */ -#define BATT_ID BATTERY_C18_ATL +#define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) +#define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args) #define BAT_LEVEL_PD_LIMIT 85 @@ -147,19 +150,52 @@ static const struct { }, }; +static struct { + enum battery_type type; + int expect_mv; +} const batteries[] = { + { BATTERY_C18_ATL, 900 }, /* 100K */ + { BATTERY_C19_ATL, 576 }, /* 47K */ +}; +BUILD_ASSERT(ARRAY_SIZE(batteries) < BATTERY_COUNT); + +#define MARGIN_MV 56 /* Simply assume 1800/16/2 */ + +static enum battery_type batt_type = BATTERY_UNKNOWN; + +static void board_get_battery_type(void) +{ + int mv; + int i; + + mv = adc_read_channel(ADC_BATT_ID); + if (mv == ADC_READ_ERROR) + mv = adc_read_channel(ADC_BATT_ID); + + for (i = 0; i < ARRAY_SIZE(batteries); i++) { + if (ABS(mv - batteries[i].expect_mv) < MARGIN_MV) { + batt_type = batteries[i].type; + break; + } + } + + CPRINTS("Battery Type: %d", batt_type); +} +DECLARE_HOOK(HOOK_INIT, board_get_battery_type, HOOK_PRIO_FIRST); + const struct battery_info *battery_get_info(void) { - return &info[BATT_ID]; + return &info[batt_type]; } const struct max17055_batt_profile *max17055_get_batt_profile(void) { - return &batt_profile[BATT_ID]; + return &batt_profile[batt_type]; } const struct max17055_alert_profile *max17055_get_alert_profile(void) { - return &alert_profile[BATT_ID]; + return &alert_profile[batt_type]; } int board_cut_off_battery(void) @@ -188,14 +224,14 @@ int charger_profile_override(struct charge_state_data *curr) return 0; if ((curr->batt.flags & BATT_FLAG_BAD_TEMPERATURE) || - (bat_temp_c < temp_zones[BATT_ID][0].temp_min) || - (bat_temp_c >= temp_zones[BATT_ID][TEMP_ZONE_COUNT - 1].temp_max)) + (bat_temp_c < temp_zones[batt_type][0].temp_min) || + (bat_temp_c >= temp_zones[batt_type][TEMP_ZONE_COUNT - 1].temp_max)) temp_zone = TEMP_OUT_OF_RANGE; else { for (temp_zone = TEMP_ZONE_0; temp_zone < TEMP_ZONE_COUNT; temp_zone++) { if (bat_temp_c < - temp_zones[BATT_ID][temp_zone].temp_max) + temp_zones[batt_type][temp_zone].temp_max) break; } } @@ -206,9 +242,9 @@ int charger_profile_override(struct charge_state_data *curr) curr->state = ST_IDLE; } else { curr->requested_current = - temp_zones[BATT_ID][temp_zone].desired_current; + temp_zones[batt_type][temp_zone].desired_current; curr->requested_voltage = - temp_zones[BATT_ID][temp_zone].desired_voltage; + temp_zones[batt_type][temp_zone].desired_voltage; } /* diff --git a/board/flapjack/board.c b/board/flapjack/board.c index bcf1dbe98e..9c32886ffb 100644 --- a/board/flapjack/board.c +++ b/board/flapjack/board.c @@ -285,8 +285,6 @@ void board_config_pre_init(void) (3 << 20) | (3 << 24); } -#define THRESHOLD_MV 56 /* Simply assume 1800/16/2 */ - /* Motion sensors */ /* Mutexes */ #ifdef SECTION_IS_RW |