From cad8fea56739f0050272426b7481db79cae07d73 Mon Sep 17 00:00:00 2001 From: Yilun Lin Date: Tue, 9 Oct 2018 18:01:17 +0800 Subject: kukui: Enable gauge_interrupt. Kukui has a pin out from battery pack to MAX17055 to sense battery temperature. If the temp is over the limit, MAX17055 sends alert to trigger charger task in time to prevent a damaged battery. TEST=manually set temperature upper limit to 30 Celcius degree, and see that when the battery temperature reaches 30 C, GAUGE_INT_ODL is asserted, and charger_task is woken up. BUG=b:111378620 BRANCH=None Change-Id: Id0718e210c8082bb280c62545a5ec75b3db8c6c2 Signed-off-by: Yilun Lin Reviewed-on: https://chromium-review.googlesource.com/1270403 Commit-Ready: Yilun Lin Tested-by: Yilun Lin Reviewed-by: Nicolas Boichat --- board/kukui/battery.c | 28 +++++++++++++++++++++++++--- board/kukui/board.c | 6 +++++- board/kukui/board.h | 1 + 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/board/kukui/battery.c b/board/kukui/battery.c index b030845e1a..0c875d0032 100644 --- a/board/kukui/battery.c +++ b/board/kukui/battery.c @@ -22,6 +22,9 @@ /* We have only one battery now. */ #define BATT_ID 0 +#define BATTERY_SIMPLO_CHARGE_MIN_TEMP 0 +#define BATTERY_SIMPLO_CHARGE_MAX_TEMP 60 + enum battery_type { BATTERY_SIMPLO = 0, BATTERY_COUNT @@ -51,6 +54,17 @@ static const struct max17055_batt_profile batt_profile[] = { }, }; +static const struct max17055_alert_profile alert_profile[] = { + [BATTERY_SIMPLO] = { + .v_alert_mxmn = VALRT_DISABLE, + .t_alert_mxmn = MAX17055_TALRTTH_REG( + BATTERY_SIMPLO_CHARGE_MAX_TEMP, + BATTERY_SIMPLO_CHARGE_MIN_TEMP), + .s_alert_mxmn = SALRT_DISABLE, + .i_alert_mxmn = IALRT_DISABLE, + }, +}; + const struct battery_info *battery_get_info(void) { return &info[BATT_ID]; @@ -61,6 +75,11 @@ const struct max17055_batt_profile *max17055_get_batt_profile(void) return &batt_profile[BATT_ID]; } +const struct max17055_alert_profile *max17055_get_alert_profile(void) +{ + return &alert_profile[BATT_ID]; +} + int board_cut_off_battery(void) { return rt946x_cutoff_battery(); @@ -99,9 +118,12 @@ int charger_profile_override(struct charge_state_data *curr) int desired_voltage; /* mV */ } temp_zones[BATTERY_COUNT][TEMP_ZONE_COUNT] = { [BATTERY_SIMPLO] = { - {0, 150, 1772, 4400}, /* TEMP_ZONE_0 */ - {150, 450, 4020, 4400}, /* TEMP_ZONE_1 */ - {450, 600, 3350, 4300}, /* TEMP_ZONE_2 */ + /* TEMP_ZONE_0 */ + {BATTERY_SIMPLO_CHARGE_MIN_TEMP * 10, 150, 1772, 4400}, + /* TEMP_ZONE_1 */ + {150, 450, 4020, 4400}, + /* TEMP_ZONE_2 */ + {450, BATTERY_SIMPLO_CHARGE_MAX_TEMP * 10, 3350, 4300}, }, }; BUILD_ASSERT(ARRAY_SIZE(temp_zones[0]) == TEMP_ZONE_COUNT); diff --git a/board/kukui/board.c b/board/kukui/board.c index 15acdee112..a059b8ade6 100644 --- a/board/kukui/board.c +++ b/board/kukui/board.c @@ -14,6 +14,7 @@ #include "common.h" #include "console.h" #include "driver/accelgyro_bmi160.h" +#include "driver/battery/max17055.h" #include "driver/charger/rt946x.h" #include "driver/sync.h" #include "driver/tcpm/mt6370.h" @@ -62,7 +63,7 @@ static void hall_interrupt(enum gpio_signal signal) static void gauge_interrupt(enum gpio_signal signal) { - /* TODO(b/111378620): Impelement gauge_interrupt */ + task_wake(TASK_ID_CHARGER); } #endif @@ -222,6 +223,9 @@ static void board_init(void) /* Enable interrupt from PMIC. */ gpio_enable_interrupt(GPIO_PMIC_EC_RESETB); + + /* Enable gauge interrupt from max17055 */ + gpio_enable_interrupt(GPIO_GAUGE_INT_ODL); } DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); diff --git a/board/kukui/board.h b/board/kukui/board.h index a8e386588a..48974df59c 100644 --- a/board/kukui/board.h +++ b/board/kukui/board.h @@ -134,6 +134,7 @@ #define CONFIG_BATTERY_PRESENT_CUSTOM #define CONFIG_BATTERY_REVIVE_DISCONNECT #define CONFIG_BATTERY_MAX17055 +#define CONFIG_BATTERY_MAX17055_ALERT /* Battery parameters for max17055 ModelGauge m5 algorithm. */ #define BATTERY_MAX17055_RSENSE 5 /* m-ohm */ -- cgit v1.2.1