summaryrefslogtreecommitdiff
path: root/baseboard/intelrvp/chg_usb_pd.c
diff options
context:
space:
mode:
Diffstat (limited to 'baseboard/intelrvp/chg_usb_pd.c')
-rw-r--r--baseboard/intelrvp/chg_usb_pd.c41
1 files changed, 32 insertions, 9 deletions
diff --git a/baseboard/intelrvp/chg_usb_pd.c b/baseboard/intelrvp/chg_usb_pd.c
index ac3cdd78f3..59fcbaf41b 100644
--- a/baseboard/intelrvp/chg_usb_pd.c
+++ b/baseboard/intelrvp/chg_usb_pd.c
@@ -15,17 +15,40 @@
#define CPRINTF(format, args...) cprintf(CC_USBPD, format, ## args)
#define CPRINTS(format, args...) cprints(CC_USBPD, format, ## args)
-static int board_charger_port_is_sourcing_vbus(int port)
+static inline int is_typec_port(int port)
{
- int src_en;
+ return !(port == DEDICATED_CHARGE_PORT || port == CHARGE_PORT_NONE);
+}
+
+
+int board_vbus_source_enabled(int port)
+{
+ int src_en = 0;
- /* DC Jack can't source VBUS */
- if (port == DEDICATED_CHARGE_PORT || port == CHARGE_PORT_NONE)
- return 0;
+ /* Only Type-C ports can source VBUS */
+ if (is_typec_port(port)) {
+ src_en = gpio_get_level(tcpc_gpios[port].src.pin);
- src_en = gpio_get_level(tcpc_gpios[port].src.pin);
+ src_en = tcpc_gpios[port].src.pin_pol ? src_en : !src_en;
+ }
- return tcpc_gpios[port].src.pin_pol ? src_en : !src_en;
+ return src_en;
+}
+
+void board_set_vbus_source_current_limit(int port, int rp)
+{
+ int ilim_en;
+
+ /* Only Type-C ports can source VBUS */
+ if (is_typec_port(port)) {
+ /* Enable SRC ILIM if rp is MAX single source current */
+ ilim_en = (rp == CONFIG_USB_PD_MAX_SINGLE_SOURCE_CURRENT &&
+ board_vbus_source_enabled(port));
+
+ gpio_set_level(tcpc_gpios[port].src_ilim.pin,
+ tcpc_gpios[port].src_ilim.pin_pol ?
+ ilim_en : !ilim_en);
+ }
}
void board_charging_enable(int port, int enable)
@@ -129,7 +152,7 @@ int board_set_active_charge_port(int port)
int is_real_port = (port >= 0 &&
port < CHARGE_PORT_COUNT);
/* check if we are source vbus on that port */
- int source = board_charger_port_is_sourcing_vbus(port);
+ int source = board_vbus_source_enabled(port);
if (is_real_port && source) {
CPRINTS("Skip enable p%d", port);
@@ -155,7 +178,7 @@ int board_set_active_charge_port(int port)
}
/* Enable charging port */
- if (port != DEDICATED_CHARGE_PORT && port != CHARGE_PORT_NONE)
+ if (is_typec_port(port))
board_charging_enable(port, 1);
CPRINTS("New chg p%d", port);