diff options
Diffstat (limited to 'board/blipper/usb_pd_policy.c')
-rw-r--r-- | board/blipper/usb_pd_policy.c | 53 |
1 files changed, 17 insertions, 36 deletions
diff --git a/board/blipper/usb_pd_policy.c b/board/blipper/usb_pd_policy.c index 3ff7152541..3a4fb4f543 100644 --- a/board/blipper/usb_pd_policy.c +++ b/board/blipper/usb_pd_policy.c @@ -9,7 +9,6 @@ #include "chipset.h" #include "common.h" #include "console.h" -#include "driver/charger/sm5803.h" #include "driver/tcpm/tcpci.h" #include "usb_pd.h" @@ -24,19 +23,11 @@ int pd_check_vconn_swap(int port) void pd_power_supply_reset(int port) { - int prev_en; - - if (port < 0 || port >= board_get_usb_pd_port_count()) + if (port != 0) return; - prev_en = charger_is_sourcing_otg_power(port); - - /* Disable Vbus */ - charger_enable_otg_power(port, 0); - - /* Discharge Vbus if previously enabled */ - if (prev_en) - sm5803_set_vbus_disch(port, 1); + /* Disable VBUS */ + tcpc_write(port, TCPC_REG_COMMAND, TCPC_REG_COMMAND_SRC_CTRL_LOW); /* Notify host of power info change. */ pd_send_host_event(PD_EVENT_POWER_CHANGE); @@ -44,18 +35,24 @@ void pd_power_supply_reset(int port) int pd_set_power_supply_ready(int port) { - enum ec_error_list rv; + int rv; - /* Disable sinking */ - rv = sm5803_vbus_sink_enable(port, 0); + if (port != 0) + return EC_ERROR_INVAL; + + /* Disable charging. */ + rv = tcpc_write(port, TCPC_REG_COMMAND, TCPC_REG_COMMAND_SNK_CTRL_LOW); if (rv) return rv; - /* Disable Vbus discharge */ - sm5803_set_vbus_disch(port, 0); + /* Our policy is not to source VBUS when the AP is off. */ + if (chipset_in_state(CHIPSET_STATE_ANY_OFF)) + return EC_ERROR_NOT_POWERED; - /* Provide Vbus */ - charger_enable_otg_power(port, 1); + /* Provide Vbus. */ + rv = tcpc_write(port, TCPC_REG_COMMAND, TCPC_REG_COMMAND_SRC_CTRL_HIGH); + if (rv) + return rv; /* Notify host of power info change. */ pd_send_host_event(PD_EVENT_POWER_CHANGE); @@ -63,23 +60,7 @@ int pd_set_power_supply_ready(int port) return EC_SUCCESS; } -__override bool pd_check_vbus_level(int port, enum vbus_level level) -{ - int vbus_voltage; - - /* If we're unable to speak to the charger, best to guess false */ - if (charger_get_vbus_voltage(port, &vbus_voltage)) - return false; - - if (level == VBUS_SAFE0V) - return vbus_voltage < PD_V_SAFE0V_MAX; - else if (level == VBUS_PRESENT) - return vbus_voltage > PD_V_SAFE5V_MIN; - else - return vbus_voltage < PD_V_SINK_DISCONNECT_MAX; -} - int pd_snk_is_vbus_provided(int port) { - return sm5803_is_vbus_present(port); + return pd_check_vbus_level(port, VBUS_PRESENT); } |