summaryrefslogtreecommitdiff
path: root/common/usb_pd_policy.c
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2016-08-31 15:32:40 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-09-13 22:21:31 -0700
commit9229c795b0c4c262092c754620bf1b2bf8a9f8d7 (patch)
treee7ce284eb81e91b79fd7e922d5d3e2be14320a21 /common/usb_pd_policy.c
parenta04a2cb9af4c71773cfa0ea1b7aa9528cc1dc62f (diff)
downloadchrome-ec-9229c795b0c4c262092c754620bf1b2bf8a9f8d7.tar.gz
charger: bd99955: Enable VBUS discharge when appropriate
Use a custom VBUS threshold of 3.9V for enable / disable of our VBUS discharge circuit. BUG=chrome-os-partner:55584 BRANCH=None TEST=Plug Apple charge-thru accessory into kevin, plug zinger into accessory, verify charging occurs at PD-negotiated current / voltage. Change-Id: I25f6f68cfe55e8bae2071cda39618b2bfadcb355 Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/379475 Commit-Ready: Aseda Aboagye <aaboagye@chromium.org> Tested-by: Vijay P Hiremath <vijay.p.hiremath@intel.com> Tested-by: Aseda Aboagye <aaboagye@chromium.org> Reviewed-by: Vijay P Hiremath <vijay.p.hiremath@intel.com> Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Diffstat (limited to 'common/usb_pd_policy.c')
-rw-r--r--common/usb_pd_policy.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/common/usb_pd_policy.c b/common/usb_pd_policy.c
index 57b4b64340..d9d803e398 100644
--- a/common/usb_pd_policy.c
+++ b/common/usb_pd_policy.c
@@ -952,3 +952,23 @@ int pd_custom_flash_vdm(int port, int cnt, uint32_t *payload)
}
return rsize;
}
+
+#ifdef CONFIG_USB_PD_DISCHARGE
+void pd_set_vbus_discharge(int port, int enable)
+{
+ static struct mutex discharge_lock[CONFIG_USB_PD_PORT_COUNT];
+
+ mutex_lock(&discharge_lock[port]);
+#ifdef CONFIG_USB_PD_DISCHARGE_GPIO
+ enable &= !gpio_get_level(port ? GPIO_USB_C1_5V_EN :
+ GPIO_USB_C0_5V_EN);
+
+ gpio_set_level(port ? GPIO_USB_C1_DISCHARGE :
+ GPIO_USB_C0_DISCHARGE, enable);
+#else
+/* TODO: Add support for TCPC-controlled discharge */
+#error "PD discharge implementation not defined"
+#endif
+ mutex_unlock(&discharge_lock[port]);
+}
+#endif /* CONFIG_USB_PD_DISCHARGE */