summaryrefslogtreecommitdiff
path: root/driver
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2017-11-06 10:07:15 -0800
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2018-02-12 19:49:20 +0000
commita10d039c5498a1b2a3a655a511b443ce5b1707d5 (patch)
treeec7a021ce5d67811087e72b7a3b54e3d679c6354 /driver
parentc9571c5257940a3d3e1b665a968b097d526e499e (diff)
downloadchrome-ec-a10d039c5498a1b2a3a655a511b443ce5b1707d5.tar.gz
bd9995x: Use fixed PD-port-to-VBUS/VCC mapping
The bd9995x driver was written to allow any PD port # to be VBUS or VCC, but the mapping is broken in a few places. Since all boards use VBUS = port 0, remove the conversion entirely. BUG=chromium:781849 BRANCH=kevin TEST=Verify PD and BC1.2 charging still works on kevin. Change-Id: I53162fb6e93e89dd161369302a18fc59e48e5dc8 Signed-off-by: Duncan Laurie <dlaurie@google.com> Original-Commit-Id: f4ee6caa665009ca3306f61706074b82e1e2c347 Original-Change-Id: I3687866835d1684342d9f746d91b3a6079ab5cc4 Original-Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Original-Reviewed-on: https://chromium-review.googlesource.com/755000 Original-Commit-Ready: Shawn N <shawnn@chromium.org> Original-Tested-by: Shawn N <shawnn@chromium.org> Original-Reviewed-by: Aseda Aboagye <aaboagye@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/914643
Diffstat (limited to 'driver')
-rw-r--r--driver/charger/bd9995x.c25
-rw-r--r--driver/charger/bd9995x.h18
2 files changed, 17 insertions, 26 deletions
diff --git a/driver/charger/bd9995x.c b/driver/charger/bd9995x.c
index 6503ea840d..115e9751ef 100644
--- a/driver/charger/bd9995x.c
+++ b/driver/charger/bd9995x.c
@@ -313,7 +313,7 @@ static int bd9995x_get_charger_op_status(int *status)
#ifdef HAS_TASK_USB_CHG
static int bc12_detected_type[CONFIG_USB_PD_PORT_COUNT];
-static int bd9995x_get_bc12_device_type(enum bd9995x_charge_port port)
+static int bd9995x_get_bc12_device_type(int port)
{
int rv;
int reg;
@@ -342,8 +342,7 @@ static int bd9995x_get_bc12_device_type(enum bd9995x_charge_port port)
}
}
-static int bd9995x_enable_usb_switch(enum bd9995x_charge_port port,
- enum usb_switch setting)
+static int bd9995x_enable_usb_switch(int port, enum usb_switch setting)
{
int rv;
int reg;
@@ -368,9 +367,8 @@ static int bd9995x_bc12_check_type(int port)
{
int bc12_type;
struct charge_port_info charge;
- int chg_port = bd9995x_pd_port_to_chg_port(port);
int vbus_provided = bd9995x_is_vbus_provided(port) &&
- !usb_charger_port_is_sourcing_vbus(chg_port);
+ !usb_charger_port_is_sourcing_vbus(port);
/*
* If vbus is no longer provided, then no need to continue. Return 0 so
@@ -480,14 +478,13 @@ static int bd9995x_get_interrupts(int port)
return reg;
}
-static int usb_charger_process(enum bd9995x_charge_port port)
+static int usb_charger_process(int port)
{
- int chg_port = bd9995x_pd_port_to_chg_port(port);
int vbus_provided = bd9995x_is_vbus_provided(port) &&
- !usb_charger_port_is_sourcing_vbus(chg_port);
+ !usb_charger_port_is_sourcing_vbus(port);
/* Inform other modules about VBUS level */
- usb_charger_vbus_change(chg_port, vbus_provided);
+ usb_charger_vbus_change(port, vbus_provided);
/* Do BC1.2 detection */
if (vbus_provided) {
@@ -1007,9 +1004,8 @@ int charger_get_vbus_voltage(int port)
uint8_t read_reg;
int voltage;
- read_reg = (bd9995x_pd_port_to_chg_port(port) ==
- BD9995X_CHARGE_PORT_VBUS) ? BD9995X_CMD_VBUS_VAL :
- BD9995X_CMD_VCC_VAL;
+ read_reg = (port == BD9995X_CHARGE_PORT_VBUS) ? BD9995X_CMD_VBUS_VAL :
+ BD9995X_CMD_VCC_VAL;
return ch_raw_read16(read_reg, &voltage, BD9995X_EXTENDED_COMMAND) ?
0 : voltage;
@@ -1116,7 +1112,7 @@ int bd9995x_get_battery_voltage(void)
}
#ifdef HAS_TASK_USB_CHG
-int bd9995x_bc12_enable_charging(enum bd9995x_charge_port port, int enable)
+int bd9995x_bc12_enable_charging(int port, int enable)
{
int rv;
int reg;
@@ -1219,8 +1215,7 @@ void usb_charger_task(void *u)
voltage = 0;
/* Set discharge accordingly */
- pd_set_vbus_discharge(
- bd9995x_pd_port_to_chg_port(port),
+ pd_set_vbus_discharge(port,
voltage < BD9995X_VBUS_DISCHARGE_TH);
changed = 1;
}
diff --git a/driver/charger/bd9995x.h b/driver/charger/bd9995x.h
index 158494149b..b17fa6a1b5 100644
--- a/driver/charger/bd9995x.h
+++ b/driver/charger/bd9995x.h
@@ -27,6 +27,12 @@ enum bd9995x_command {
BD9995X_INVALID_COMMAND
};
+/*
+ * BD9995X has two external VBUS inputs (named VBUS and VCC) and two sets
+ * of registers / bits for control. This entire driver is written under the
+ * assumption that the physical VBUS port corresponds to PD port 0, and the
+ * physical VCC port corresponds to PD port 1.
+ */
enum bd9995x_charge_port {
BD9995X_CHARGE_PORT_VBUS,
BD9995X_CHARGE_PORT_VCC,
@@ -330,16 +336,6 @@ enum bd9995x_charge_port {
#define BD9995X_PWR_SAVE_MAX 0x6
#define BD9995X_CMD_DEBUG_MODE_SET 0x7F
-/* Map PD port number to charge port number */
-static inline enum bd9995x_charge_port bd9995x_pd_port_to_chg_port(int port)
-{
-#ifdef CONFIG_BD9995X_PRIMARY_CHARGE_PORT_VCC
- return port ? BD9995X_CHARGE_PORT_VBUS : BD9995X_CHARGE_PORT_VCC;
-#else
- return port ? BD9995X_CHARGE_PORT_VCC : BD9995X_CHARGE_PORT_VBUS;
-#endif
-}
-
/*
* Non-standard interface functions - bd9995x integrates additional
* functionality not part of the standard charger interface.
@@ -350,7 +346,7 @@ int bd9995x_is_vbus_provided(enum bd9995x_charge_port port);
/* Select or deselect input port from {VCC, VBUS, VCC&VBUS}. */
int bd9995x_select_input_port(enum bd9995x_charge_port port, int select);
/* Enable/Disable charging triggered by BC1.2 */
-int bd9995x_bc12_enable_charging(enum bd9995x_charge_port port, int enable);
+int bd9995x_bc12_enable_charging(int port, int enable);
/* Interrupt handler for USB charger VBUS */
void bd9995x_vbus_interrupt(enum gpio_signal signal);
/* Read temperature measurement value (in Celsius) */