summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTommy Chung <tommy.chung@quanta.corp-partner.google.com>2021-10-14 09:15:15 +0800
committerCommit Bot <commit-bot@chromium.org>2021-10-28 00:55:53 +0000
commitdb63fb74ee0e4bc7c611033851759b41f44642fd (patch)
tree6276721df14d5b7466d7e4aae1de4f8a2c8c929e
parentaa800465e8aa894086369cfc6df87341b179ce7d (diff)
downloadchrome-ec-db63fb74ee0e4bc7c611033851759b41f44642fd.tar.gz
battery: Move battery get/set vendor param to common/battery.c
Since the functions are copied by many boards, move them to common. The specific param regs are defined in each specific boards. BUG=b:203031618 BRANCH=none TEST=make BOARD=burnet/coachz/eve/homestar/kappa/mrbland/quackingstick/ wormdingler. Signed-off-by: Tommy Chung <tommy.chung@quanta.corp-partner.google.com> Change-Id: I77c070663ad3e800ec484bd21865c5d911a2c48b Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3220718 Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
-rw-r--r--board/burnet/battery.c6
-rw-r--r--board/burnet/board.c22
-rw-r--r--board/burnet/board.h2
-rw-r--r--board/coachz/battery.c4
-rw-r--r--board/coachz/board.c22
-rw-r--r--board/eve/battery.c4
-rw-r--r--board/homestar/battery.c6
-rw-r--r--board/homestar/board.c22
-rw-r--r--board/kappa/battery.c2
-rw-r--r--board/kappa/board.c22
-rw-r--r--board/kappa/board.h2
-rw-r--r--board/mrbland/battery.c3
-rw-r--r--board/mrbland/board.c22
-rw-r--r--board/mrbland/board.h3
-rw-r--r--board/quackingstick/battery.c2
-rw-r--r--board/quackingstick/board.c22
-rw-r--r--board/wormdingler/battery.c2
-rw-r--r--board/wormdingler/board.c22
-rw-r--r--board/wormdingler/board.h3
-rw-r--r--common/battery.c32
-rw-r--r--include/battery.h10
21 files changed, 71 insertions, 164 deletions
diff --git a/board/burnet/battery.c b/board/burnet/battery.c
index 35a2ebc7df..2a465df227 100644
--- a/board/burnet/battery.c
+++ b/board/burnet/battery.c
@@ -34,6 +34,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 45,
.discharging_min_c = -10,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
/* Dynapack CosMX Battery Information */
@@ -62,6 +63,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 45,
.discharging_min_c = -10,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
/* Simplo CosMX Battery Information */
@@ -90,6 +92,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 45,
.discharging_min_c = -10,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
/* Simplo HIGHPOWER Battery Information */
@@ -118,6 +121,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 45,
.discharging_min_c = -10,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
/* Samsung SDI Battery Information */
@@ -146,6 +150,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 45,
.discharging_min_c = -10,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
/* CosMX Battery Information */
@@ -174,6 +179,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 45,
.discharging_min_c = -10,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
};
diff --git a/board/burnet/board.c b/board/burnet/board.c
index d932624b0a..f98955a19d 100644
--- a/board/burnet/board.c
+++ b/board/burnet/board.c
@@ -567,25 +567,3 @@ static void board_chipset_shutdown(void)
gpio_set_level(GPIO_EN_USBA_5V, 0);
}
DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, board_chipset_shutdown, HOOK_PRIO_DEFAULT);
-
-int battery_get_vendor_param(uint32_t param, uint32_t *value)
-{
- int rv;
- uint8_t data[16] = {};
-
- /* only allow reading 0x70~0x7F, 16 byte data */
- if (param < 0x70 || param >= 0x80)
- return EC_ERROR_ACCESS_DENIED;
-
- rv = sb_read_string(0x70, data, sizeof(data));
- if (rv)
- return rv;
-
- *value = data[param - 0x70];
- return EC_SUCCESS;
-}
-
-int battery_set_vendor_param(uint32_t param, uint32_t value)
-{
- return EC_ERROR_UNIMPLEMENTED;
-}
diff --git a/board/burnet/board.h b/board/burnet/board.h
index 009da83ac5..e1235fc4ac 100644
--- a/board/burnet/board.h
+++ b/board/burnet/board.h
@@ -24,6 +24,8 @@
#define CONFIG_BATTERY_HW_PRESENT_CUSTOM
#define CONFIG_BATTERY_VENDOR_PARAM
+#define CONFIG_BATTERY_V2
+#define CONFIG_BATTERY_COUNT 1
#define CONFIG_CHARGER_PSYS
diff --git a/board/coachz/battery.c b/board/coachz/battery.c
index 56c89b655b..a5be64df0f 100644
--- a/board/coachz/battery.c
+++ b/board/coachz/battery.c
@@ -60,6 +60,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 45,
.discharging_min_c = -10,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
/* COSMX GH02047XL */
@@ -89,6 +90,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 45,
.discharging_min_c = -10,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
/* COSMX DS02032XL */
@@ -118,6 +120,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 45,
.discharging_min_c = -10,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
/* SMP DS02032XL */
@@ -147,6 +150,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 45,
.discharging_min_c = -10,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
};
diff --git a/board/coachz/board.c b/board/coachz/board.c
index d1f31a64c3..81a749c1d1 100644
--- a/board/coachz/board.c
+++ b/board/coachz/board.c
@@ -718,25 +718,3 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-
-int battery_get_vendor_param(uint32_t param, uint32_t *value)
-{
- int rv;
- uint8_t data[16] = {};
-
- /* only allow reading 0x70~0x7F, 16 byte data */
- if (param < 0x70 || param >= 0x80)
- return EC_ERROR_ACCESS_DENIED;
-
- rv = sb_read_string(0x70, data, sizeof(data));
- if (rv)
- return rv;
-
- *value = data[param - 0x70];
- return EC_SUCCESS;
-}
-
-int battery_set_vendor_param(uint32_t param, uint32_t value)
-{
- return EC_ERROR_UNIMPLEMENTED;
-}
diff --git a/board/eve/battery.c b/board/eve/battery.c
index b5fb949ffe..2a505b80ec 100644
--- a/board/eve/battery.c
+++ b/board/eve/battery.c
@@ -607,7 +607,7 @@ static int board_battery_fix_otd_recovery_temp(uint32_t value)
return EC_SUCCESS;
}
-int battery_get_vendor_param(uint32_t param, uint32_t *value)
+__override int battery_get_vendor_param(uint32_t param, uint32_t *value)
{
/*
* These registers can't be read directly because the flash area
@@ -638,7 +638,7 @@ int battery_get_vendor_param(uint32_t param, uint32_t *value)
return EC_RES_ERROR;
}
-int battery_set_vendor_param(uint32_t param, uint32_t value)
+__override int battery_set_vendor_param(uint32_t param, uint32_t value)
{
switch (param) {
case SB_VENDOR_PARAM_CTO_DISABLE:
diff --git a/board/homestar/battery.c b/board/homestar/battery.c
index b1a05809f0..a4e8f793ae 100644
--- a/board/homestar/battery.c
+++ b/board/homestar/battery.c
@@ -60,6 +60,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 45,
.discharging_min_c = -10,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
/* COSMX GH02047XL */
@@ -89,6 +90,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 45,
.discharging_min_c = -10,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
/* COSMX DS02032XL */
@@ -118,6 +120,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 45,
.discharging_min_c = -10,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
/* SMP DS02032XL */
@@ -147,6 +150,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 45,
.discharging_min_c = -10,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
/* Sunwoda L21D4PG0 */
@@ -176,6 +180,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 60,
.discharging_min_c = -20,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
/* SMP L21M4PG0 */
@@ -205,6 +210,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 60,
.discharging_min_c = -20,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
};
diff --git a/board/homestar/board.c b/board/homestar/board.c
index 22f940eec2..47ac34af2c 100644
--- a/board/homestar/board.c
+++ b/board/homestar/board.c
@@ -674,25 +674,3 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-
-int battery_get_vendor_param(uint32_t param, uint32_t *value)
-{
- int rv;
- uint8_t data[16] = {};
-
- /* only allow reading 0x70~0x7F, 16 byte data */
- if (param < 0x70 || param >= 0x80)
- return EC_ERROR_ACCESS_DENIED;
-
- rv = sb_read_string(0x70, data, sizeof(data));
- if (rv)
- return rv;
-
- *value = data[param - 0x70];
- return EC_SUCCESS;
-}
-
-int battery_set_vendor_param(uint32_t param, uint32_t value)
-{
- return EC_ERROR_UNIMPLEMENTED;
-}
diff --git a/board/kappa/battery.c b/board/kappa/battery.c
index 5ae6dc9b91..7a82ed029e 100644
--- a/board/kappa/battery.c
+++ b/board/kappa/battery.c
@@ -34,6 +34,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 45,
.discharging_min_c = -10,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
/* Dynapack CosMX DAK124960-W0P0707HT Battery Information */
@@ -62,6 +63,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 45,
.discharging_min_c = -10,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
};
diff --git a/board/kappa/board.c b/board/kappa/board.c
index a0d7cf6a4e..963ade7430 100644
--- a/board/kappa/board.c
+++ b/board/kappa/board.c
@@ -271,25 +271,3 @@ static void board_chipset_shutdown(void)
gpio_set_level(GPIO_EN_USBA_5V, 0);
}
DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, board_chipset_shutdown, HOOK_PRIO_DEFAULT);
-
-int battery_get_vendor_param(uint32_t param, uint32_t *value)
-{
- int rv;
- uint8_t data[16] = {};
-
- /* only allow reading 0x70~0x7F, 16 byte data */
- if (param < 0x70 || param >= 0x80)
- return EC_ERROR_ACCESS_DENIED;
-
- rv = sb_read_string(0x70, data, sizeof(data));
- if (rv)
- return rv;
-
- *value = data[param - 0x70];
- return EC_SUCCESS;
-}
-
-int battery_set_vendor_param(uint32_t param, uint32_t value)
-{
- return EC_ERROR_UNIMPLEMENTED;
-}
diff --git a/board/kappa/board.h b/board/kappa/board.h
index 287f22416e..4fd76cf965 100644
--- a/board/kappa/board.h
+++ b/board/kappa/board.h
@@ -22,6 +22,8 @@
#define CONFIG_BATTERY_HW_PRESENT_CUSTOM
#define CONFIG_BATTERY_VENDOR_PARAM
+#define CONFIG_BATTERY_V2
+#define CONFIG_BATTERY_COUNT 1
#define CONFIG_CHARGER_PSYS
diff --git a/board/mrbland/battery.c b/board/mrbland/battery.c
index a99d71e7f4..ee58ff70bb 100644
--- a/board/mrbland/battery.c
+++ b/board/mrbland/battery.c
@@ -60,6 +60,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 60,
.discharging_min_c = -20,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
/* Sunwoda L21D2PG1 */
@@ -89,6 +90,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 63,
.discharging_min_c = -20,
.discharging_max_c = 63,
+ .vendor_param_start = 0x70,
},
},
/* SMP L21M2PG1 */
@@ -118,6 +120,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 60,
.discharging_min_c = -20,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
};
diff --git a/board/mrbland/board.c b/board/mrbland/board.c
index fc48888a55..d367b82521 100644
--- a/board/mrbland/board.c
+++ b/board/mrbland/board.c
@@ -626,25 +626,3 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-
-int battery_get_vendor_param(uint32_t param, uint32_t *value)
-{
- int rv;
- uint8_t data[16] = {};
-
- /* only allow reading 0x70~0x7F, 16 byte data */
- if (param < 0x70 || param >= 0x80)
- return EC_ERROR_ACCESS_DENIED;
-
- rv = sb_read_string(0x70, data, sizeof(data));
- if (rv)
- return rv;
-
- *value = data[param - 0x70];
- return EC_SUCCESS;
-}
-
-int battery_set_vendor_param(uint32_t param, uint32_t value)
-{
- return EC_ERROR_UNIMPLEMENTED;
-}
diff --git a/board/mrbland/board.h b/board/mrbland/board.h
index f4cb398c50..fe2c298d1a 100644
--- a/board/mrbland/board.h
+++ b/board/mrbland/board.h
@@ -31,9 +31,6 @@
#define CONFIG_BATTERY_REVIVE_DISCONNECT
#define CONFIG_BATTERY_FUEL_GAUGE
#define CONFIG_BATTERY_VENDOR_PARAM
-#define CONFIG_BATTERY_V2
-#define CONFIG_BATTERY_COUNT 1
-#define CONFIG_HOSTCMD_BATTERY_V2
/* Enable PD3.0 */
#define CONFIG_USB_PD_REV30
diff --git a/board/quackingstick/battery.c b/board/quackingstick/battery.c
index 4f97f9eeb3..43cd8b9d8b 100644
--- a/board/quackingstick/battery.c
+++ b/board/quackingstick/battery.c
@@ -59,6 +59,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 60,
.discharging_min_c = -20,
.discharging_max_c = 75,
+ .vendor_param_start = 0x70,
},
},
/* COSMX AP21CBI Battery information */
@@ -87,6 +88,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 60,
.discharging_min_c = -20,
.discharging_max_c = 75,
+ .vendor_param_start = 0x70,
},
},
};
diff --git a/board/quackingstick/board.c b/board/quackingstick/board.c
index 0e8b745d97..77de13e85d 100644
--- a/board/quackingstick/board.c
+++ b/board/quackingstick/board.c
@@ -591,25 +591,3 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-
-int battery_get_vendor_param(uint32_t param, uint32_t *value)
-{
- int rv;
- uint8_t data[16] = {};
-
- /* only allow reading 0x70~0x7F, 16 byte data */
- if (param < 0x70 || param >= 0x80)
- return EC_ERROR_ACCESS_DENIED;
-
- rv = sb_read_string(0x70, data, sizeof(data));
- if (rv)
- return rv;
-
- *value = data[param - 0x70];
- return EC_SUCCESS;
-}
-
-int battery_set_vendor_param(uint32_t param, uint32_t value)
-{
- return EC_ERROR_UNIMPLEMENTED;
-}
diff --git a/board/wormdingler/battery.c b/board/wormdingler/battery.c
index c76bb48031..bb444e59ee 100644
--- a/board/wormdingler/battery.c
+++ b/board/wormdingler/battery.c
@@ -60,6 +60,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 63,
.discharging_min_c = -20,
.discharging_max_c = 63,
+ .vendor_param_start = 0x70,
},
},
/* BYD L21B2PG2 */
@@ -89,6 +90,7 @@ const struct board_batt_params board_battery_info[] = {
.charging_max_c = 60,
.discharging_min_c = -20,
.discharging_max_c = 60,
+ .vendor_param_start = 0x70,
},
},
};
diff --git a/board/wormdingler/board.c b/board/wormdingler/board.c
index 796409cb80..d8bc04e4fd 100644
--- a/board/wormdingler/board.c
+++ b/board/wormdingler/board.c
@@ -668,25 +668,3 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-
-int battery_get_vendor_param(uint32_t param, uint32_t *value)
-{
- int rv;
- uint8_t data[16] = {};
-
- /* only allow reading 0x70~0x7F, 16 byte data */
- if (param < 0x70 || param >= 0x80)
- return EC_ERROR_ACCESS_DENIED;
-
- rv = sb_read_string(0x70, data, sizeof(data));
- if (rv)
- return rv;
-
- *value = data[param - 0x70];
- return EC_SUCCESS;
-}
-
-int battery_set_vendor_param(uint32_t param, uint32_t value)
-{
- return EC_ERROR_UNIMPLEMENTED;
-}
diff --git a/board/wormdingler/board.h b/board/wormdingler/board.h
index af0b5ee80d..ee24d0db8d 100644
--- a/board/wormdingler/board.h
+++ b/board/wormdingler/board.h
@@ -31,9 +31,6 @@
#define CONFIG_BATTERY_REVIVE_DISCONNECT
#define CONFIG_BATTERY_FUEL_GAUGE
#define CONFIG_BATTERY_VENDOR_PARAM
-#define CONFIG_BATTERY_V2
-#define CONFIG_BATTERY_COUNT 1
-#define CONFIG_HOSTCMD_BATTERY_V2
/* Enable PD3.0 */
#define CONFIG_USB_PD_REV30
diff --git a/common/battery.c b/common/battery.c
index 6339573d2e..01478d5b52 100644
--- a/common/battery.c
+++ b/common/battery.c
@@ -395,6 +395,38 @@ int battery_is_cut_off(void)
#endif /* CONFIG_BATTERY_CUT_OFF */
#ifdef CONFIG_BATTERY_VENDOR_PARAM
+__overridable int battery_get_vendor_param(uint32_t param, uint32_t *value)
+{
+ const struct battery_info *bi = battery_get_info();
+ struct battery_static_info *bs = &battery_static[BATT_IDX_MAIN];
+ uint8_t *data = bs->vendor_param;
+ int rv;
+
+ if (param < bi->vendor_param_start)
+ return EC_ERROR_ACCESS_DENIED;
+
+ /* Skip read if cache is valid. */
+ if (!data[0]) {
+ rv = sb_read_string(bi->vendor_param_start, data,
+ sizeof(bs->vendor_param));
+ if (rv) {
+ data[0] = 0;
+ return rv;
+ }
+ }
+
+ if (param > bi->vendor_param_start + strlen(data))
+ return EC_ERROR_INVAL;
+
+ *value = data[param - bi->vendor_param_start];
+ return EC_SUCCESS;
+}
+
+__overridable int battery_set_vendor_param(uint32_t param, uint32_t value)
+{
+ return EC_ERROR_UNIMPLEMENTED;
+}
+
static int console_command_battery_vendor_param(int argc, char **argv)
{
uint32_t param;
diff --git a/include/battery.h b/include/battery.h
index 38ca2da91e..27e678c0ba 100644
--- a/include/battery.h
+++ b/include/battery.h
@@ -89,6 +89,9 @@ struct battery_static_info {
char model_ext[32]; /* SB_DEVICE_NAME */
char serial_ext[32]; /* SB_SERIAL_NUMBER */
char type_ext[32]; /* SB_DEVICE_CHEMISTRY */
+#ifdef CONFIG_BATTERY_VENDOR_PARAM
+ uint8_t vendor_param[32];
+#endif
};
extern struct battery_static_info battery_static[];
@@ -165,6 +168,9 @@ struct battery_info {
int8_t charging_max_c;
int8_t discharging_min_c;
int8_t discharging_max_c;
+#ifdef CONFIG_BATTERY_VENDOR_PARAM
+ uint8_t vendor_param_start;
+#endif
};
/**
@@ -415,7 +421,7 @@ int battery_is_cut_off(void);
* @param value Location to store retrieved value.
* @return non-zero if error.
*/
-int battery_get_vendor_param(uint32_t param, uint32_t *value);
+__override_proto int battery_get_vendor_param(uint32_t param, uint32_t *value);
/**
* Write battery vendor parameter.
@@ -426,7 +432,7 @@ int battery_get_vendor_param(uint32_t param, uint32_t *value);
* @param value Value to write to the battery.
* @return non-zero if error.
*/
-int battery_set_vendor_param(uint32_t param, uint32_t value);
+__override_proto int battery_set_vendor_param(uint32_t param, uint32_t value);
/**
* Wait for battery stable.