summaryrefslogtreecommitdiff
path: root/board/flapjack/battery.c
diff options
context:
space:
mode:
Diffstat (limited to 'board/flapjack/battery.c')
-rw-r--r--board/flapjack/battery.c56
1 files changed, 52 insertions, 4 deletions
diff --git a/board/flapjack/battery.c b/board/flapjack/battery.c
index faa1c8d21f..506ea593c3 100644
--- a/board/flapjack/battery.c
+++ b/board/flapjack/battery.c
@@ -34,6 +34,46 @@
#define BATTERY_SUNWODA_CHARGE_MIN_TEMP 0
#define BATTERY_SUNWODA_CHARGE_MAX_TEMP 60
+static const uint16_t full_model_ocv_table[][MAX17055_OCV_TABLE_SIZE] = {
+ [BATTERY_C18_ATL] = {
+ 0x8fc0, 0xb6c0, 0xb910, 0xbb30, 0xbcb0, 0xbdd0, 0xbef0, 0xc050,
+ 0xc1a0, 0xc460, 0xc750, 0xca40, 0xcd10, 0xd070, 0xd560, 0xda20,
+ 0x0060, 0x0f20, 0x0f40, 0x16c0, 0x17f0, 0x15c0, 0x1050, 0x10e0,
+ 0x09f0, 0x0850, 0x0730, 0x07a0, 0x0730, 0x0700, 0x0710, 0x0710,
+ 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800,
+ 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800,
+ },
+ [BATTERY_C19_ATL] = {
+ 0xa260, 0xb5d0, 0xb840, 0xb940, 0xbbb0, 0xbcb0, 0xbdb0, 0xbf80,
+ 0xc0a0, 0xc1e0, 0xc520, 0xc840, 0xcdb0, 0xd150, 0xd590, 0xd9e0,
+ 0x0030, 0x0cd0, 0x1100, 0x0f30, 0x19e0, 0x19f0, 0x14f0, 0x1160,
+ 0x0dc0, 0x0980, 0x0850, 0x0780, 0x0730, 0x0700, 0x0710, 0x0710,
+ 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800,
+ 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800,
+ },
+ [BATTERY_C18_SUNWODA] = {
+ 0x9d70, 0xaf80, 0xb6b0, 0xb830, 0xb990, 0xbc00, 0xbcd0, 0xbea0,
+ 0xc080, 0xc2e0, 0xc5f0, 0xc890, 0xcb90, 0xcf10, 0xd270, 0xd9e0,
+ 0x0060, 0x0240, 0x0b20, 0x1210, 0x0f20, 0x2200, 0x1650, 0x14f0,
+ 0x0980, 0x09c0, 0x07b0, 0x07f0, 0x06f0, 0x07e0, 0x05c0, 0x05c0,
+ 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
+ 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
+ },
+ [BATTERY_C19_SUNWODA] = {
+ 0x8590, 0xb1d0, 0xb810, 0xbae0, 0xbc30, 0xbd70, 0xbeb0, 0xbfa0,
+ 0xc0f0, 0xc330, 0xc640, 0xc890, 0xcb50, 0xce20, 0xd370, 0xd950,
+ 0x0020, 0x0520, 0x0d80, 0x1860, 0x1910, 0x2040, 0x0be0, 0x0dd0,
+ 0x0cb0, 0x07b0, 0x08f0, 0x07c0, 0x0790, 0x06e0, 0x0620, 0x0620,
+ 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
+ 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
+ },
+};
+BUILD_ASSERT(ARRAY_SIZE(full_model_ocv_table) == BATTERY_COUNT);
+
+/*
+ * TODO: Only precharge_current is different. We should consolidate these
+ * and apply 294 or 327 at run-time.when we need more rom space later.
+ */
static const struct battery_info info[] = {
[BATTERY_C18_ATL] = {
.voltage_max = 4400,
@@ -90,7 +130,7 @@ static const struct max17055_batt_profile batt_profile[] = {
[BATTERY_C18_ATL] = {
.is_ez_config = 0,
.design_cap = 0x2e78, /* 5948mAh */
- .ichg_term = 0x02ec, /* 117 mA */
+ .ichg_term = 0x03c0, /* 150 mA */
/* Empty voltage = 3400mV, Recovery voltage = 4000mV */
.v_empty_detect = 0xaa64,
.learn_cfg = 0x4402,
@@ -101,11 +141,12 @@ static const struct max17055_batt_profile batt_profile[] = {
.qr_table10 = 0x2980,
.qr_table20 = 0x1100,
.qr_table30 = 0x1000,
+ .ocv_table = full_model_ocv_table[BATTERY_C18_ATL],
},
[BATTERY_C19_ATL] = {
.is_ez_config = 0,
.design_cap = 0x3407, /* 6659mAh */
- .ichg_term = 0x0340, /* 130mA */
+ .ichg_term = 0x03c0, /* 150 mA */
/* Empty voltage = 3400mV, Recovery voltage = 4000mV */
.v_empty_detect = 0xaa64,
.learn_cfg = 0x4402,
@@ -116,6 +157,7 @@ static const struct max17055_batt_profile batt_profile[] = {
.qr_table10 = 0x2680,
.qr_table20 = 0x0d00,
.qr_table30 = 0x0b00,
+ .ocv_table = full_model_ocv_table[BATTERY_C19_ATL],
},
[BATTERY_C18_SUNWODA] = {
.is_ez_config = 0,
@@ -131,6 +173,7 @@ static const struct max17055_batt_profile batt_profile[] = {
.qr_table10 = 0x4480,
.qr_table20 = 0x1600,
.qr_table30 = 0x1400,
+ .ocv_table = full_model_ocv_table[BATTERY_C18_SUNWODA],
},
[BATTERY_C19_SUNWODA] = {
.is_ez_config = 0,
@@ -146,6 +189,7 @@ static const struct max17055_batt_profile batt_profile[] = {
.qr_table10 = 0x3d00,
.qr_table20 = 0x1200,
.qr_table30 = 0x1002,
+ .ocv_table = full_model_ocv_table[BATTERY_C19_SUNWODA],
},
};
BUILD_ASSERT(ARRAY_SIZE(batt_profile) == BATTERY_COUNT);
@@ -196,6 +240,10 @@ enum temp_zone {
TEMP_OUT_OF_RANGE = TEMP_ZONE_COUNT,
};
+/*
+ * TODO: Many value in temp_zones are pretty similar, we should consolidate
+ * these and modify the value when we need more rom space later.
+ */
static const struct {
int temp_min; /* 0.1 deg C */
int temp_max; /* 0.1 deg C */
@@ -203,13 +251,13 @@ static const struct {
int desired_voltage; /* mV */
} temp_zones[BATTERY_COUNT][TEMP_ZONE_COUNT] = {
[BATTERY_C18_ATL] = {
- {BATTERY_ATL_CHARGE_MIN_TEMP * 10, 10, 1170, 4400},
+ {BATTERY_ATL_CHARGE_MIN_TEMP * 10, 100, 1170, 4400},
{100, 200, 1755, 4400},
{200, 450, 2925, 4400},
{450, BATTERY_ATL_CHARGE_MAX_TEMP * 10, 2925, 4100},
},
[BATTERY_C19_ATL] = {
- {BATTERY_ATL_CHARGE_MIN_TEMP * 10, 10, 1300, 4400},
+ {BATTERY_ATL_CHARGE_MIN_TEMP * 10, 100, 1300, 4400},
{100, 200, 1950, 4400},
{200, 450, 3250, 4400},
{450, BATTERY_ATL_CHARGE_MAX_TEMP * 10, 3250, 4100},