diff options
Diffstat (limited to 'board/asurada/usb_pd_policy.c')
-rw-r--r-- | board/asurada/usb_pd_policy.c | 57 |
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); +} + |