summaryrefslogtreecommitdiff
path: root/board/asurada/usb_pd_policy.c
diff options
context:
space:
mode:
authorEric Yilun Lin <yllin@chromium.org>2020-05-12 11:46:37 +0800
committerCommit Bot <commit-bot@chromium.org>2020-05-15 07:39:55 +0000
commit7e70fc5301b425ce8e0265b6e7ebb3cf9e7109bb (patch)
tree35599948ab8bb041e00dac000cb96e649c8a4d4c /board/asurada/usb_pd_policy.c
parent55fc09f4be1c6a245c89e3be9816fb26d069f66c (diff)
downloadchrome-ec-stabilize-13099.110.B-master.tar.gz
Enable PPC on C0 and C1, where C1 port is optional and dependent to the daughter board connected. BUG=b:152562604 TEST=ensure C0/C1 can sink and source power. BRANCH=master Signed-off-by: Ting Shen <phoenixshen@google.com> Signed-off-by: Eric Yilun Lin <yllin@chromium.org> Change-Id: I2fabe59562ffbe63e91b60f36b726d63fefdc83b Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2195721 Reviewed-by: Ting Shen <phoenixshen@chromium.org> Commit-Queue: Ting Shen <phoenixshen@chromium.org>
Diffstat (limited to 'board/asurada/usb_pd_policy.c')
-rw-r--r--board/asurada/usb_pd_policy.c57
1 files changed, 55 insertions, 2 deletions
diff --git a/board/asurada/usb_pd_policy.c b/board/asurada/usb_pd_policy.c
index 33c659708f..ed10dd11db 100644
--- a/board/asurada/usb_pd_policy.c
+++ b/board/asurada/usb_pd_policy.c
@@ -2,23 +2,76 @@
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
+#include "charge_manager.h"
#include "usb_pd.h"
+#include "usbc_ppc.h"
+
+#ifndef CONFIG_USB_PD_MAX_SINGLE_SOURCE_CURRENT
+#error Asurada reference must define CONFIG_USB_PD_MAX_SINGLE_SOURCE_CURRENT
+#endif
int pd_snk_is_vbus_provided(int port)
{
- return 0;
+ return ppc_is_vbus_present(port);
}
void pd_power_supply_reset(int port)
{
+ int prev_en;
+
+ prev_en = ppc_is_sourcing_vbus(port);
+
+ /* Disable VBUS. */
+ ppc_vbus_source_enable(port, 0);
+
+ /* Enable discharge if we were previously sourcing 5V */
+ if (prev_en)
+ pd_set_vbus_discharge(port, 1);
+
+#ifdef CONFIG_USB_PD_MAX_SINGLE_SOURCE_CURRENT
+ /* Give back the current quota we are no longer using */
+ charge_manager_source_port(port, 0);
+#endif /* defined(CONFIG_USB_PD_MAX_SINGLE_SOURCE_CURRENT) */
+
+ /* Notify host of power info change. */
+ pd_send_host_event(PD_EVENT_POWER_CHANGE);
}
int pd_check_vconn_swap(int port)
{
+ /* TODO: Only allow vconn swap if PP4200_G rail is enabled , s3/s0 on */
return 0;
}
int pd_set_power_supply_ready(int port)
{
- return 0;
+ int rv;
+
+ /* Disable charging. */
+ rv = ppc_vbus_sink_enable(port, 0);
+ if (rv)
+ return rv;
+
+ pd_set_vbus_discharge(port, 0);
+
+ /* Provide Vbus. */
+ rv = ppc_vbus_source_enable(port, 1);
+ if (rv)
+ return rv;
+
+#ifdef CONFIG_USB_PD_MAX_SINGLE_SOURCE_CURRENT
+ /* Ensure we advertise the proper available current quota */
+ charge_manager_source_port(port, 1);
+#endif /* defined(CONFIG_USB_PD_MAX_SINGLE_SOURCE_CURRENT) */
+
+ /* Notify host of power info change. */
+ pd_send_host_event(PD_EVENT_POWER_CHANGE);
+
+ return EC_SUCCESS;
}
+
+int board_vbus_source_enabled(int port)
+{
+ return ppc_is_sourcing_vbus(port);
+}
+