diff options
author | Vijay Hiremath <vijay.p.hiremath@intel.com> | 2016-10-26 17:40:57 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-10-27 19:28:53 -0700 |
commit | 799c272e282a4727da949940828d815f11c526db (patch) | |
tree | ce54acaa1222a08ed6e761636122087e8eef5e53 /driver | |
parent | b6937caeeb3f4642cfdc0bca52a890b30b81e9a4 (diff) | |
download | chrome-ec-799c272e282a4727da949940828d815f11c526db.tar.gz |
BD9995X: Disable input to port when sourcing
POR has both VCC & VBUS enabled. If the port is sourcing VBUS it will
also act as sync and AC_OK pin gets enabled. Hence disable the input
to the port when sourcing.
BUG=chrome-os-partner:59020
BRANCH=none
TEST=Manually verified on Reef. Connected HoHo and AC_OK is not
enabled.
Change-Id: Ic51b81f45759d7dddb2c9744d1c24dbafd1e1293
Signed-off-by: Vijay Hiremath <vijay.p.hiremath@intel.com>
Reviewed-on: https://chromium-review.googlesource.com/404168
Commit-Ready: Vijay P Hiremath <vijay.p.hiremath@intel.com>
Tested-by: Vijay P Hiremath <vijay.p.hiremath@intel.com>
Reviewed-by: Shawn N <shawnn@chromium.org>
Diffstat (limited to 'driver')
-rw-r--r-- | driver/charger/bd9995x.c | 41 | ||||
-rw-r--r-- | driver/charger/bd9995x.h | 5 |
2 files changed, 27 insertions, 19 deletions
diff --git a/driver/charger/bd9995x.c b/driver/charger/bd9995x.c index 65e7483772..675afafe90 100644 --- a/driver/charger/bd9995x.c +++ b/driver/charger/bd9995x.c @@ -798,7 +798,7 @@ int bd9995x_is_vbus_provided(int port) return !!reg; } -int bd9995x_select_input_port(enum bd9995x_charge_port port) +int bd9995x_select_input_port(enum bd9995x_charge_port port, int select) { int rv; int reg; @@ -808,22 +808,31 @@ int bd9995x_select_input_port(enum bd9995x_charge_port port) if (rv) return rv; - if (port == BD9995X_CHARGE_PORT_NONE) { - reg &= ~(BD9995X_CMD_VIN_CTRL_SET_VBUS_EN | - BD9995X_CMD_VIN_CTRL_SET_VCC_EN); - } else if (port == BD9995X_CHARGE_PORT_VBUS) { - reg |= BD9995X_CMD_VIN_CTRL_SET_VBUS_EN; - reg &= ~BD9995X_CMD_VIN_CTRL_SET_VCC_EN; - } else if (port == BD9995X_CHARGE_PORT_VCC) { - reg |= BD9995X_CMD_VIN_CTRL_SET_VCC_EN; - reg &= ~BD9995X_CMD_VIN_CTRL_SET_VBUS_EN; - } else if (port == BD9995X_CHARGE_PORT_BOTH) { - /* Enable both the ports for PG3 */ - reg |= BD9995X_CMD_VIN_CTRL_SET_VBUS_EN | - BD9995X_CMD_VIN_CTRL_SET_VCC_EN; + if (select) { + if (port == BD9995X_CHARGE_PORT_VBUS) { + reg |= BD9995X_CMD_VIN_CTRL_SET_VBUS_EN; + reg &= ~BD9995X_CMD_VIN_CTRL_SET_VCC_EN; + } else if (port == BD9995X_CHARGE_PORT_VCC) { + reg |= BD9995X_CMD_VIN_CTRL_SET_VCC_EN; + reg &= ~BD9995X_CMD_VIN_CTRL_SET_VBUS_EN; + } else if (port == BD9995X_CHARGE_PORT_BOTH) { + /* Enable both the ports for PG3 */ + reg |= BD9995X_CMD_VIN_CTRL_SET_VBUS_EN | + BD9995X_CMD_VIN_CTRL_SET_VCC_EN; + } else { + /* Invalid charge port */ + panic("Invalid charge port"); + } } else { - /* Invalid charge port */ - panic("Invalid charge port"); + if (port == BD9995X_CHARGE_PORT_VBUS) + reg &= ~BD9995X_CMD_VIN_CTRL_SET_VBUS_EN; + else if (port == BD9995X_CHARGE_PORT_VCC) + reg &= ~BD9995X_CMD_VIN_CTRL_SET_VCC_EN; + if (port == BD9995X_CHARGE_PORT_BOTH) + reg &= ~(BD9995X_CMD_VIN_CTRL_SET_VBUS_EN | + BD9995X_CMD_VIN_CTRL_SET_VCC_EN); + else + panic("Invalid charge port"); } return ch_raw_write16(BD9995X_CMD_VIN_CTRL_SET, reg, diff --git a/driver/charger/bd9995x.h b/driver/charger/bd9995x.h index baef184d09..ea27b88715 100644 --- a/driver/charger/bd9995x.h +++ b/driver/charger/bd9995x.h @@ -31,7 +31,6 @@ enum bd9995x_charge_port { BD9995X_CHARGE_PORT_VBUS, BD9995X_CHARGE_PORT_VCC, BD9995X_CHARGE_PORT_BOTH, - BD9995X_CHARGE_PORT_NONE, }; /* Charger parameters */ @@ -348,8 +347,8 @@ static inline enum bd9995x_charge_port bd9995x_pd_port_to_chg_port(int port) /* Is VBUS provided or external power present */ int bd9995x_is_vbus_provided(int port); -/* Select input port from {VCC, VBUS, VCC&VBUS, NONE}. */ -int bd9995x_select_input_port(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); /* Get input current limit for BC1.2 suppliers */ int bd9995x_get_bc12_ilim(int charge_supplier); /* Enable/Disable charging triggered by BC1.2 */ |