summaryrefslogtreecommitdiff
path: root/common/charger.c
diff options
context:
space:
mode:
authorDiana Z <dzigterman@chromium.org>2020-06-30 14:14:22 -0600
committerCommit Bot <commit-bot@chromium.org>2020-07-11 06:05:19 +0000
commit7e50f69303fc74562dfede6c7a3f61713814a82c (patch)
tree8ff03665ed8ca13665668d660590c3b79f28bdfe /common/charger.c
parent834aa957e6c3d3eb30e7760ef14ef722cf8009bd (diff)
downloadchrome-ec-7e50f69303fc74562dfede6c7a3f61713814a82c.tar.gz
Charger: Add dynamic charger chip count
Different DB options may cause different numbers of charger chips to be present on the system. Remove constant count for charger chips, and instead always call into the overridable function to query the count. BRANCH=None BUG=b:155963446 TEST=make -j buildall Signed-off-by: Diana Z <dzigterman@chromium.org> Change-Id: I0e65b8af351ecabe6f7b823e0e56f1932cc280a6 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2277833 Commit-Queue: Aseda Aboagye <aaboagye@chromium.org> Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Diffstat (limited to 'common/charger.c')
-rw-r--r--common/charger.c60
1 files changed, 35 insertions, 25 deletions
diff --git a/common/charger.c b/common/charger.c
index 3a980d99df..68f8f71ced 100644
--- a/common/charger.c
+++ b/common/charger.c
@@ -41,6 +41,15 @@ static void dptf_disable_hook(void)
DECLARE_HOOK(HOOK_CHIPSET_SUSPEND, dptf_disable_hook, HOOK_PRIO_DEFAULT);
DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, dptf_disable_hook, HOOK_PRIO_DEFAULT);
+/*
+ * Boards should override this function if their count may vary during run-time
+ * due to different DB options.
+ */
+__overridable uint8_t board_get_charger_chip_count(void)
+{
+ return CHARGER_NUM;
+}
+
int charger_closest_voltage(int voltage)
{
const struct charger_info *info = charger_get_info();
@@ -236,7 +245,7 @@ static void charger_chips_init(void)
{
int chip;
- for (chip = 0; chip < chg_cnt; chip++) {
+ for (chip = 0; chip < board_get_charger_chip_count(); chip++) {
if (chg_chips[chip].drv->init)
chg_chips[chip].drv->init(chip);
}
@@ -248,7 +257,7 @@ enum ec_error_list charger_post_init(void)
int chgnum = 0;
int rv = EC_ERROR_UNIMPLEMENTED;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return EC_ERROR_INVAL;
}
@@ -264,7 +273,7 @@ const struct charger_info *charger_get_info(void)
int chgnum = 0;
const struct charger_info *ret = NULL;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return NULL;
}
@@ -280,7 +289,7 @@ enum ec_error_list charger_get_status(int *status)
int chgnum = 0;
int rv = EC_ERROR_UNIMPLEMENTED;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return EC_ERROR_INVAL;
}
@@ -296,7 +305,7 @@ enum ec_error_list charger_set_mode(int mode)
int chgnum = 0;
int rv = EC_ERROR_UNIMPLEMENTED;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return EC_ERROR_INVAL;
}
@@ -312,7 +321,7 @@ enum ec_error_list charger_enable_otg_power(int enabled)
int chgnum = 0;
int rv = EC_ERROR_UNIMPLEMENTED;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return EC_ERROR_INVAL;
}
@@ -329,7 +338,7 @@ enum ec_error_list charger_set_otg_current_voltage(int output_current,
int chgnum = 0;
int rv = EC_ERROR_UNIMPLEMENTED;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return EC_ERROR_INVAL;
}
@@ -346,7 +355,7 @@ int charger_is_sourcing_otg_power(int port)
int chgnum = 0;
int rv = 0;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return 0;
}
@@ -361,10 +370,11 @@ enum ec_error_list charger_get_current(int chgnum, int *current)
{
int rv = EC_ERROR_UNIMPLEMENTED;
+ /* Note: chgnum may be -1 if no active port is selected */
if (chgnum < 0)
return EC_ERROR_INVAL;
- if (chgnum >= chg_cnt) {
+ if (chgnum >= board_get_charger_chip_count()) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return EC_ERROR_INVAL;
}
@@ -379,7 +389,7 @@ enum ec_error_list charger_set_current(int chgnum, int current)
{
int rv = EC_ERROR_UNIMPLEMENTED;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return EC_ERROR_INVAL;
}
@@ -397,7 +407,7 @@ enum ec_error_list charger_get_voltage(int chgnum, int *voltage)
if (chgnum < 0)
return EC_ERROR_INVAL;
- if (chgnum >= chg_cnt) {
+ if (chgnum >= board_get_charger_chip_count()) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return EC_ERROR_INVAL;
}
@@ -412,7 +422,7 @@ enum ec_error_list charger_set_voltage(int chgnum, int voltage)
{
int rv = EC_ERROR_UNIMPLEMENTED;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return EC_ERROR_INVAL;
}
@@ -428,7 +438,7 @@ enum ec_error_list charger_discharge_on_ac(int enable)
int chgnum = 0;
int rv = EC_ERROR_UNIMPLEMENTED;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return EC_ERROR_INVAL;
}
@@ -448,7 +458,7 @@ enum ec_error_list charger_get_vbus_voltage(int port, int *voltage)
if (!IS_ENABLED(CONFIG_CHARGER_SINGLE_CHIP))
chgnum = port;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return 0;
}
@@ -464,7 +474,7 @@ enum ec_error_list charger_set_input_current(int chgnum, int input_current)
{
int rv = EC_ERROR_UNIMPLEMENTED;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return EC_ERROR_INVAL;
}
@@ -483,7 +493,7 @@ enum ec_error_list charger_get_input_current(int chgnum, int *input_current)
if (chgnum < 0)
return EC_ERROR_INVAL;
- if (chgnum >= chg_cnt) {
+ if (chgnum >= board_get_charger_chip_count()) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return EC_ERROR_INVAL;
}
@@ -500,7 +510,7 @@ enum ec_error_list charger_manufacturer_id(int *id)
int chgnum = 0;
int rv = EC_ERROR_UNIMPLEMENTED;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return EC_ERROR_INVAL;
}
@@ -516,7 +526,7 @@ enum ec_error_list charger_device_id(int *id)
int chgnum = 0;
int rv = EC_ERROR_UNIMPLEMENTED;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return EC_ERROR_INVAL;
}
@@ -532,7 +542,7 @@ enum ec_error_list charger_get_option(int *option)
int chgnum = 0;
int rv = EC_ERROR_UNIMPLEMENTED;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return EC_ERROR_INVAL;
}
@@ -548,7 +558,7 @@ enum ec_error_list charger_set_option(int option)
int chgnum = 0;
int rv = EC_ERROR_UNIMPLEMENTED;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return EC_ERROR_INVAL;
}
@@ -564,7 +574,7 @@ enum ec_error_list charger_set_hw_ramp(int enable)
int chgnum = 0;
int rv = EC_ERROR_UNIMPLEMENTED;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return EC_ERROR_INVAL;
}
@@ -581,7 +591,7 @@ int chg_ramp_is_stable(void)
int chgnum = 0;
int rv = 0;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return 0;
}
@@ -597,7 +607,7 @@ int chg_ramp_is_detected(void)
int chgnum = 0;
int rv = 0;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return 0;
}
@@ -613,7 +623,7 @@ int chg_ramp_get_current_limit(void)
int chgnum = 0;
int rv = 0;
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return 0;
}
@@ -630,7 +640,7 @@ enum ec_error_list charger_set_vsys_compensation(int chgnum,
int current_ma,
int voltage_mv)
{
- if ((chgnum < 0) || (chgnum >= chg_cnt)) {
+ if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
CPRINTS("%s(%d) Invalid charger!", __func__, chgnum);
return EC_ERROR_INVAL;
}