diff options
Diffstat (limited to 'zephyr/program/corsola/src/kingler/usb_pd_policy.c')
-rw-r--r-- | zephyr/program/corsola/src/kingler/usb_pd_policy.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/zephyr/program/corsola/src/kingler/usb_pd_policy.c b/zephyr/program/corsola/src/kingler/usb_pd_policy.c new file mode 100644 index 0000000000..c9e26f6681 --- /dev/null +++ b/zephyr/program/corsola/src/kingler/usb_pd_policy.c @@ -0,0 +1,73 @@ +/* Copyright 2022 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "baseboard_usbc_config.h" +#include "charge_manager.h" +#include "console.h" +#include "driver/ppc/rt1718s.h" +#include "system.h" +#include "usb_mux.h" +#include "usb_pd.h" +#include "usbc_ppc.h" +#include "util.h" + +#define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ##args) +#define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ##args) + +void pd_power_supply_reset(int port) +{ + int prev_en; + + prev_en = ppc_is_sourcing_vbus(port); + + if (port == USBC_PORT_C1) { + rt1718s_gpio_set_level(port, GPIO_EN_USB_C1_SOURCE, 0); + } + + /* 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); + } + + /* Notify host of power info change. */ + pd_send_host_event(PD_EVENT_POWER_CHANGE); +} + +int pd_set_power_supply_ready(int port) +{ + int rv; + + /* Disable charging. */ + rv = ppc_vbus_sink_enable(port, 0); + if (rv) { + return rv; + } + + pd_set_vbus_discharge(port, 0); + + /* Provide Vbus. */ + if (port == USBC_PORT_C1) { + rt1718s_gpio_set_level(port, GPIO_EN_USB_C1_SOURCE, 1); + } + + rv = ppc_vbus_source_enable(port, 1); + if (rv) { + return rv; + } + + /* Notify host of power info change. */ + pd_send_host_event(PD_EVENT_POWER_CHANGE); + + return EC_SUCCESS; +} + +int pd_snk_is_vbus_provided(int port) +{ + /* TODO: use ADC? */ + return tcpm_check_vbus_level(port, VBUS_PRESENT); +} |