summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiana Z <dzigterman@chromium.org>2020-01-22 12:07:04 -0700
committerCommit Bot <commit-bot@chromium.org>2020-01-28 20:22:26 +0000
commit1b4ce5849d520b67447bdc5b94e346432eac2126 (patch)
treea640609b5c024c0020ccb48e121b496fa686f1c2
parentf1e626bf81bc511d713fd306395d00e857764c09 (diff)
downloadchrome-ec-1b4ce5849d520b67447bdc5b94e346432eac2126.tar.gz
Charger: change get_vbus_voltage to return EC error
The other driver structure members return an ec_error_list value and fill in parameters to return data. This commit changes the get_vbus_voltage call to follow that model. BRANCH=None BUG=b:147672225 TEST=builds Change-Id: I7308502a9734274dd308b830762493c4d70d147a Signed-off-by: Diana Z <dzigterman@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2015340 Reviewed-by: Jett Rink <jettrink@chromium.org>
-rw-r--r--board/coral/board.c7
-rw-r--r--board/eve/board.c7
-rw-r--r--board/kodama/board.c6
-rw-r--r--board/kukui/board.c6
-rw-r--r--board/reef/board.c7
-rw-r--r--board/reef_it8320/board.c7
-rw-r--r--board/reef_mchp/board.c7
-rw-r--r--common/charge_manager.c7
-rw-r--r--common/charger.c5
-rw-r--r--driver/charger/bd9995x.c8
-rw-r--r--driver/charger/bq25710.c10
-rw-r--r--driver/charger/isl923x.c8
-rw-r--r--driver/charger/isl9241.c6
-rw-r--r--driver/charger/rt946x.c17
-rw-r--r--include/charger.h5
15 files changed, 82 insertions, 31 deletions
diff --git a/board/coral/board.c b/board/coral/board.c
index 04cb86ec33..426926fd7f 100644
--- a/board/coral/board.c
+++ b/board/coral/board.c
@@ -559,7 +559,12 @@ void board_set_charge_limit(int port, int supplier, int charge_ma,
*/
int board_is_vbus_too_low(int port, enum chg_ramp_vbus_state ramp_state)
{
- return charger_get_vbus_voltage(port) < BD9995X_BC12_MIN_VOLTAGE;
+ int voltage;
+
+ if (charger_get_vbus_voltage(port, &voltage))
+ voltage = 0;
+
+ return voltage < BD9995X_BC12_MIN_VOLTAGE;
}
static void enable_input_devices(void)
diff --git a/board/eve/board.c b/board/eve/board.c
index 42ff73643f..a3d6e47460 100644
--- a/board/eve/board.c
+++ b/board/eve/board.c
@@ -583,7 +583,12 @@ void board_set_charge_limit(int port, int supplier, int charge_ma,
*/
int board_is_vbus_too_low(int port, enum chg_ramp_vbus_state ramp_state)
{
- return charger_get_vbus_voltage(port) < BD9995X_BC12_MIN_VOLTAGE;
+ int voltage;
+
+ if (charger_get_vbus_voltage(port, &voltage))
+ voltage = 0;
+
+ return voltage < BD9995X_BC12_MIN_VOLTAGE;
}
/* Clear pending interrupts and enable DSP for wake */
diff --git a/board/kodama/board.c b/board/kodama/board.c
index 8839c77a54..aa02750980 100644
--- a/board/kodama/board.c
+++ b/board/kodama/board.c
@@ -356,6 +356,7 @@ void usb_charger_set_switches(int port, enum usb_switch setting)
*/
int board_is_vbus_too_low(int port, enum chg_ramp_vbus_state ramp_state)
{
+ int voltage;
/*
* Though we have a more tolerant range (3.9V~13.4V), setting 4400 to
* prevent from a bad charger crashed.
@@ -366,7 +367,10 @@ int board_is_vbus_too_low(int port, enum chg_ramp_vbus_state ramp_state)
* try to raise this value to 4600. (when it says it read 4400, it is
* actually close to 4600)
*/
- return charger_get_vbus_voltage(port) < 4400;
+ if (charger_get_vbus_voltage(port, &voltage))
+ voltage = 0;
+
+ return voltage < 4400;
}
__override int board_charge_port_is_sink(int port)
diff --git a/board/kukui/board.c b/board/kukui/board.c
index 4b9516eb7a..91b989aec8 100644
--- a/board/kukui/board.c
+++ b/board/kukui/board.c
@@ -566,6 +566,7 @@ void usb_charger_set_switches(int port, enum usb_switch setting)
*/
int board_is_vbus_too_low(int port, enum chg_ramp_vbus_state ramp_state)
{
+ int voltage;
/*
* Though we have a more tolerant range (3.9V~13.4V), setting 4400 to
* prevent from a bad charger crashed.
@@ -576,7 +577,10 @@ int board_is_vbus_too_low(int port, enum chg_ramp_vbus_state ramp_state)
* try to raise this value to 4600. (when it says it read 4400, it is
* actually close to 4600)
*/
- return charger_get_vbus_voltage(port) < 4400;
+ if (charger_get_vbus_voltage(port, &voltage))
+ voltage = 0;
+
+ return voltage < 4400;
}
__override int board_charge_port_is_sink(int port)
diff --git a/board/reef/board.c b/board/reef/board.c
index 10516d6e62..dd16d6e26c 100644
--- a/board/reef/board.c
+++ b/board/reef/board.c
@@ -545,7 +545,12 @@ void board_set_charge_limit(int port, int supplier, int charge_ma,
*/
int board_is_vbus_too_low(int port, enum chg_ramp_vbus_state ramp_state)
{
- return charger_get_vbus_voltage(port) < BD9995X_BC12_MIN_VOLTAGE;
+ int voltage;
+
+ if (charger_get_vbus_voltage(port, &voltage))
+ voltage = 0;
+
+ return voltage < BD9995X_BC12_MIN_VOLTAGE;
}
static void enable_input_devices(void)
diff --git a/board/reef_it8320/board.c b/board/reef_it8320/board.c
index 0a513c63a4..a6ac274f93 100644
--- a/board/reef_it8320/board.c
+++ b/board/reef_it8320/board.c
@@ -336,7 +336,12 @@ void board_set_charge_limit(int port, int supplier, int charge_ma,
*/
int board_is_vbus_too_low(int port, enum chg_ramp_vbus_state ramp_state)
{
- return charger_get_vbus_voltage(port) < BD9995X_BC12_MIN_VOLTAGE;
+ int voltage;
+
+ if (charger_get_vbus_voltage(port, &voltage))
+ voltage = 0;
+
+ return voltage < BD9995X_BC12_MIN_VOLTAGE;
}
/* Called on AP S5 -> S3 transition */
diff --git a/board/reef_mchp/board.c b/board/reef_mchp/board.c
index d020d407bc..d06e8f719c 100644
--- a/board/reef_mchp/board.c
+++ b/board/reef_mchp/board.c
@@ -781,7 +781,12 @@ int board_is_consuming_full_charge(void)
*/
int board_is_vbus_too_low(int port, enum chg_ramp_vbus_state ramp_state)
{
- return charger_get_vbus_voltage(port) < BD9995X_BC12_MIN_VOLTAGE;
+ int voltage;
+
+ if (charger_get_vbus_voltage(port, &voltage))
+ voltage = 0;
+
+ return voltage < BD9995X_BC12_MIN_VOLTAGE;
}
static void enable_input_devices(void)
diff --git a/common/charge_manager.c b/common/charge_manager.c
index f9c6d8060c..9f2ee4132f 100644
--- a/common/charge_manager.c
+++ b/common/charge_manager.c
@@ -459,7 +459,12 @@ static void charge_manager_fill_power_info(int port,
r->meas.voltage_now = 5000;
else {
#if defined(CONFIG_USB_PD_VBUS_MEASURE_CHARGER)
- r->meas.voltage_now = charger_get_vbus_voltage(port);
+ int voltage;
+
+ if (charger_get_vbus_voltage(port, &voltage))
+ r->meas.voltage_now = 0;
+ else
+ r->meas.voltage_now = voltage;
#elif defined(CONFIG_USB_PD_VBUS_MEASURE_TCPC)
r->meas.voltage_now = tcpc_get_vbus_voltage(port);
#elif defined(CONFIG_USB_PD_VBUS_MEASURE_ADC_EACH_PORT)
diff --git a/common/charger.c b/common/charger.c
index e2f6112ed7..0f198b2635 100644
--- a/common/charger.c
+++ b/common/charger.c
@@ -455,7 +455,7 @@ enum ec_error_list charger_discharge_on_ac(int enable)
return rv;
}
-int charger_get_vbus_voltage(int port)
+enum ec_error_list charger_get_vbus_voltage(int port, int *voltage)
{
int chgnum = 0;
int rv = 0;
@@ -466,7 +466,8 @@ int charger_get_vbus_voltage(int port)
}
if (chg_chips[chgnum].drv->get_vbus_voltage)
- rv = chg_chips[chgnum].drv->get_vbus_voltage(chgnum, port);
+ rv = chg_chips[chgnum].drv->get_vbus_voltage(chgnum, port,
+ voltage);
return rv;
}
diff --git a/driver/charger/bd9995x.c b/driver/charger/bd9995x.c
index 9c78ba7709..d2d3c96751 100644
--- a/driver/charger/bd9995x.c
+++ b/driver/charger/bd9995x.c
@@ -1063,16 +1063,16 @@ static enum ec_error_list bd9995x_discharge_on_ac(int chgnum, int enable)
BD9995X_EXTENDED_COMMAND);
}
-static int bd9995x_get_vbus_voltage(int chgnum, int port)
+static enum ec_error_list bd9995x_get_vbus_voltage(int chgnum, int port,
+ int *voltage)
{
uint8_t read_reg;
- int voltage;
read_reg = (port == BD9995X_CHARGE_PORT_VBUS) ? BD9995X_CMD_VBUS_VAL :
BD9995X_CMD_VCC_VAL;
- return ch_raw_read16(chgnum, read_reg, &voltage,
- BD9995X_EXTENDED_COMMAND) ? 0 : voltage;
+ return ch_raw_read16(chgnum, read_reg, voltage,
+ BD9995X_EXTENDED_COMMAND);
}
/*** Non-standard interface functions ***/
diff --git a/driver/charger/bq25710.c b/driver/charger/bq25710.c
index d355db8c7e..a9e58a7f51 100644
--- a/driver/charger/bq25710.c
+++ b/driver/charger/bq25710.c
@@ -421,7 +421,8 @@ static enum ec_error_list bq25710_device_id(int chgnum, int *id)
}
#ifdef CONFIG_USB_PD_VBUS_MEASURE_CHARGER
-static int bq25710_get_vbus_voltage(int chgnum, int port)
+static enum ec_error_list bq25710_get_vbus_voltage(int chgnum, int port,
+ int *voltage)
{
int reg, rv;
@@ -439,12 +440,13 @@ static int bq25710_get_vbus_voltage(int chgnum, int port)
* LSB => 64mV.
* Return 0 when VBUS <= 3.2V as ADC can't measure it.
*/
- return reg ?
+ *voltage = reg ?
(reg * BQ25710_ADC_VBUS_STEP_MV + BQ25710_ADC_VBUS_BASE_MV) : 0;
error:
- CPRINTF("Could not read VBUS ADC! Error: %d\n", rv);
- return 0;
+ if (rv)
+ CPRINTF("Could not read VBUS ADC! Error: %d\n", rv);
+ return rv;
}
#endif
diff --git a/driver/charger/isl923x.c b/driver/charger/isl923x.c
index 594ce698a1..6336b4acaf 100644
--- a/driver/charger/isl923x.c
+++ b/driver/charger/isl923x.c
@@ -801,21 +801,23 @@ DECLARE_CONSOLE_COMMAND(charger_dump, command_isl923x_dump,
"charger_dump <chgnum>", "Dumps ISL923x registers");
#endif /* CONFIG_CMD_CHARGER_DUMP */
-static int isl923x_get_vbus_voltage(int chgnum, int port)
+static enum ec_error_list isl923x_get_vbus_voltage(int chgnum, int port,
+ int *voltage)
{
int val;
int rv;
rv = raw_read16(chgnum, RAA489000_REG_ADC_VBUS, &val);
if (rv)
- return 0;
+ return rv;
/* The VBUS voltage is returned in bits 13:6. The LSB is 96mV. */
val &= GENMASK(13, 6);
val = val >> 6;
val *= 96;
+ *voltage = val;
- return val;
+ return EC_SUCCESS;
}
const struct charger_drv isl923x_drv = {
diff --git a/driver/charger/isl9241.c b/driver/charger/isl9241.c
index b21048fb84..d21e438edb 100644
--- a/driver/charger/isl9241.c
+++ b/driver/charger/isl9241.c
@@ -251,7 +251,8 @@ static enum ec_error_list isl9241_set_voltage(int chgnum, int voltage)
return isl9241_write(chgnum, ISL9241_REG_MAX_SYSTEM_VOLTAGE, voltage);
}
-static int isl9241_get_vbus_voltage(int chgnum, int port)
+static enum ec_error_list isl9241_get_vbus_voltage(int chgnum, int port,
+ int *voltage)
{
int adc_val = 0;
int ctl3_val;
@@ -284,6 +285,7 @@ static int isl9241_get_vbus_voltage(int chgnum, int port)
*/
adc_val >>= ISL9241_VIN_ADC_BIT_OFFSET;
adc_val *= ISL9241_VIN_ADC_STEP_MV;
+ *voltage = adc_val;
error_restore_ctl3:
/* Restore Control3 value */
@@ -294,7 +296,7 @@ error:
if (rv)
CPRINTF("Could not read VBUS ADC! Error: %d\n", rv);
- return adc_val;
+ return rv;
}
static enum ec_error_list isl9241_post_init(int chgnum)
diff --git a/driver/charger/rt946x.c b/driver/charger/rt946x.c
index 1a2c8dedba..6e9304c522 100644
--- a/driver/charger/rt946x.c
+++ b/driver/charger/rt946x.c
@@ -1387,12 +1387,16 @@ out:
return rv;
}
-static int rt946x_get_vbus_voltage(int chgnum, int port)
+static enum ec_error_list rt946x_get_vbus_voltage(int chgnum, int port,
+ int *voltage)
{
- static int vbus_mv;
+ int vbus_mv;
+ int rv;
+
+ rv = rt946x_get_adc(RT946X_ADC_VBUS_DIV5, &vbus_mv);
+ *voltage = vbus_mv;
- rt946x_get_adc(RT946X_ADC_VBUS_DIV5, &vbus_mv);
- return vbus_mv;
+ return rv;
}
#ifdef CONFIG_CHARGER_MT6370
@@ -1517,6 +1521,7 @@ void usb_charger_task(void *u)
int reg = 0;
int bc12_cnt = 0;
const int max_bc12_cnt = 3;
+ int voltage;
chg.voltage = USB_CHARGER_VOLTAGE_MV;
while (1) {
@@ -1528,8 +1533,8 @@ void usb_charger_task(void *u)
/* VBUS attach event */
if (reg & RT946X_MASK_DPDMIRQ_ATTACH) {
- CPRINTS("VBUS attached: %dmV",
- charger_get_vbus_voltage(0));
+ charger_get_vbus_voltage(0, &voltage);
+ CPRINTS("VBUS attached: %dmV", voltage);
if (IS_ENABLED(CONFIG_CHARGER_MT6370)) {
chg_type =
mt6370_get_charger_type(CHARGER_SOLO);
diff --git a/include/charger.h b/include/charger.h
index 6aebf3b94c..2c7a7ce8a8 100644
--- a/include/charger.h
+++ b/include/charger.h
@@ -82,7 +82,8 @@ struct charger_drv {
enum ec_error_list (*discharge_on_ac)(int chgnum, int enable);
/* Get the VBUS voltage (mV) from the charger */
- int (*get_vbus_voltage)(int chgnum, int port);
+ enum ec_error_list (*get_vbus_voltage)(int chgnum, int port,
+ int *voltage);
/* Set desired input current value */
enum ec_error_list (*set_input_current)(int chgnum, int input_current);
@@ -214,7 +215,7 @@ enum ec_error_list charger_set_voltage(int voltage);
enum ec_error_list charger_discharge_on_ac(int enable);
/* Get the VBUS voltage (mV) from the charger */
-int charger_get_vbus_voltage(int port);
+enum ec_error_list charger_get_vbus_voltage(int port, int *voltage);
/* Custom board function to discharge battery when on AC power */
int board_discharge_on_ac(int enable);