diff options
Diffstat (limited to 'driver')
29 files changed, 84 insertions, 37 deletions
diff --git a/driver/battery/smart.c b/driver/battery/smart.c index b3d1787338..4d64c29efa 100644 --- a/driver/battery/smart.c +++ b/driver/battery/smart.c @@ -590,14 +590,25 @@ int battery_wait_for_stable(void) BATTERY_NO_RESPONSE_TIMEOUT); while (get_time().val < wait_timeout) { /* Starting pinging battery */ - if (battery_status(&status) == EC_SUCCESS) { - /* Battery is stable */ - CPRINTS("battery responded with status %x", status); - return EC_SUCCESS; + if (battery_status(&status) != EC_SUCCESS) { + msleep(25); /* clock stretching could hold 25ms */ + continue; + } + +#ifdef CONFIG_BATTERY_STBL_STAT + if (((status & CONFIG_BATT_ALARM_MASK1) == + CONFIG_BATT_ALARM_MASK1) || + ((status & CONFIG_BATT_ALARM_MASK2) == + CONFIG_BATT_ALARM_MASK2)) { + msleep(25); + continue; } - msleep(25); /* clock stretching could hold 25ms */ +#endif + /* Battery is stable */ + CPRINTS("battery responded with status %x", status); + return EC_SUCCESS; } - CPRINTS("battery not responding"); + CPRINTS("battery not responding with status %x", status); return EC_ERROR_NOT_POWERED; } diff --git a/driver/ppc/ktu1125.c b/driver/ppc/ktu1125.c index 647512d801..24b03e8538 100644 --- a/driver/ppc/ktu1125.c +++ b/driver/ppc/ktu1125.c @@ -348,11 +348,15 @@ static int ktu1125_set_vconn(int port, int enable) polarity = polarity_rm_dts(pd_get_polarity(port)); if (enable) { - flags |= polarity ? KTU1125_CC2S_VCONN : KTU1125_CC1S_VCONN; - status = set_flags(port, KTU1125_SET_SW_CFG, flags); + /* + * If polarity is CC1, then apply VCONN on CC2. + * else if polarity is CC2, then apply VCONN on CC1 + */ + flags |= polarity ? KTU1125_CC1S_VCONN : KTU1125_CC2S_VCONN; + status = set_flags(port, KTU1125_CTRL_SW_CFG, flags); } else { flags |= KTU1125_CC1S_VCONN | KTU1125_CC2S_VCONN; - status = clr_flags(port, KTU1125_SET_SW_CFG, flags); + status = clr_flags(port, KTU1125_CTRL_SW_CFG, flags); } return status; diff --git a/driver/ppc/rt1739.c b/driver/ppc/rt1739.c index ffd7760986..4679290b67 100644 --- a/driver/ppc/rt1739.c +++ b/driver/ppc/rt1739.c @@ -273,7 +273,7 @@ static int rt1739_set_vbus_source_current_limit(int port, enum tcpc_rp_value rp) return write_reg(port, RT1739_REG_VBUS_OC_SETTING, reg); } -static int rt1739_init(int port) +int rt1739_init(int port) { int device_id, oc_setting, sys_ctrl, vbus_switch_ctrl; bool batt_connected = false; diff --git a/driver/ppc/rt1739.h b/driver/ppc/rt1739.h index f4c5e44354..48256da202 100644 --- a/driver/ppc/rt1739.h +++ b/driver/ppc/rt1739.h @@ -134,4 +134,6 @@ extern const struct bc12_drv rt1739_bc12_drv; void rt1739_interrupt(int port); +int rt1739_init(int port); + #endif /* defined(__CROS_EC_PPC_RT1739_H) */ diff --git a/driver/retimer/anx7483.c b/driver/retimer/anx7483.c index 4b07848b9e..b4532ee12c 100644 --- a/driver/retimer/anx7483.c +++ b/driver/retimer/anx7483.c @@ -232,7 +232,7 @@ test_export_static int anx7483_set(const struct usb_mux *me, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; /* diff --git a/driver/retimer/nb7v904m.c b/driver/retimer/nb7v904m.c index 2990a906b5..18fdf3b2ba 100644 --- a/driver/retimer/nb7v904m.c +++ b/driver/retimer/nb7v904m.c @@ -154,7 +154,7 @@ static int nb7v904m_set_mux(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; /* Turn off redriver if it's not needed at all. */ diff --git a/driver/retimer/pi3dpx1207.c b/driver/retimer/pi3dpx1207.c index e40f269e3b..4a4c180f8c 100644 --- a/driver/retimer/pi3dpx1207.c +++ b/driver/retimer/pi3dpx1207.c @@ -102,7 +102,7 @@ static int pi3dpx1207_set_mux(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; /* USB */ diff --git a/driver/retimer/ps8802.c b/driver/retimer/ps8802.c index e2d93a25b4..24ad0f290f 100644 --- a/driver/retimer/ps8802.c +++ b/driver/retimer/ps8802.c @@ -189,7 +189,7 @@ static int ps8802_set_mux(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; if (chipset_in_state(CHIPSET_STATE_HARD_OFF)) diff --git a/driver/retimer/ps8818.c b/driver/retimer/ps8818.c index dff1b33a64..1f17146476 100644 --- a/driver/retimer/ps8818.c +++ b/driver/retimer/ps8818.c @@ -90,7 +90,7 @@ static int ps8818_set_mux(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; if (chipset_in_state(CHIPSET_STATE_HARD_OFF)) diff --git a/driver/retimer/tusb544.c b/driver/retimer/tusb544.c index c2d617c3be..8bac6cedd6 100644 --- a/driver/retimer/tusb544.c +++ b/driver/retimer/tusb544.c @@ -61,7 +61,7 @@ static int tusb544_set_mux(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; if (mux_state == USB_PD_MUX_NONE) diff --git a/driver/tcpm/anx7447.c b/driver/tcpm/anx7447.c index 79f08ee655..4760596eae 100644 --- a/driver/tcpm/anx7447.c +++ b/driver/tcpm/anx7447.c @@ -664,7 +664,7 @@ static int anx7447_mux_set(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; cc_direction = mux_state & USB_PD_MUX_POLARITY_INVERTED; diff --git a/driver/tcpm/anx74xx.c b/driver/tcpm/anx74xx.c index e6ad23c25a..9e3a975754 100644 --- a/driver/tcpm/anx74xx.c +++ b/driver/tcpm/anx74xx.c @@ -400,7 +400,7 @@ static int anx74xx_tcpm_mux_set(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; if (!(mux_state & ~USB_PD_MUX_POLARITY_INVERTED)) { diff --git a/driver/tcpm/anx7688.c b/driver/tcpm/anx7688.c index 6ad8a16ff4..277edd0217 100644 --- a/driver/tcpm/anx7688.c +++ b/driver/tcpm/anx7688.c @@ -154,7 +154,7 @@ static int anx7688_mux_set(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; rv = mux_read(me, TCPC_REG_CONFIG_STD_OUTPUT, ®); diff --git a/driver/tcpm/ps8xxx.c b/driver/tcpm/ps8xxx.c index 9eb3b40b2b..0818b328bf 100644 --- a/driver/tcpm/ps8xxx.c +++ b/driver/tcpm/ps8xxx.c @@ -1118,7 +1118,7 @@ static int ps8xxx_mux_set(const struct usb_mux *me, mux_state_t mux_state, bool *ack_required) { /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; if (product_id[me->usb_port] == PS8751_PRODUCT_ID && diff --git a/driver/tcpm/rt1718s.c b/driver/tcpm/rt1718s.c index e8ee85368a..a1cdf06c9a 100644 --- a/driver/tcpm/rt1718s.c +++ b/driver/tcpm/rt1718s.c @@ -551,15 +551,37 @@ __overridable int board_rt1718s_set_snk_enable(int port, int enable) return EC_SUCCESS; } +__overridable int board_rt1718s_set_src_enable(int port, int enable) +{ + return EC_SUCCESS; +} + static int rt1718s_tcpm_set_snk_ctrl(int port, int enable) { int rv; - rv = board_rt1718s_set_snk_enable(port, enable); + /* The order matters. Board hook should run after the tcpm call to + * prevent the GPIO config auto-reload overwriting a wrong value. + */ + rv = tcpci_tcpm_set_snk_ctrl(port, enable); + if (rv) + return rv; + + return board_rt1718s_set_snk_enable(port, enable); +} + +static int rt1718s_tcpm_set_src_ctrl(int port, int enable) +{ + int rv; + + /* The order matters. Board hook should run after the tcpm call to + * prevent the GPIO config auto-reload overwriting a wrong value. + */ + rv = tcpci_tcpm_set_src_ctrl(port, enable); if (rv) return rv; - return tcpci_tcpm_set_snk_ctrl(port, enable); + return board_rt1718s_set_src_enable(port, enable); } static void rt1718s_alert(int port) @@ -806,7 +828,7 @@ const struct tcpm_drv rt1718s_tcpm_drv = { #endif .get_chip_info = &tcpci_get_chip_info, .set_snk_ctrl = &rt1718s_tcpm_set_snk_ctrl, - .set_src_ctrl = &tcpci_tcpm_set_src_ctrl, + .set_src_ctrl = &rt1718s_tcpm_set_src_ctrl, #ifdef CONFIG_USB_PD_TCPC_LOW_POWER .enter_low_power_mode = &rt1718s_enter_low_power_mode, #endif diff --git a/driver/tcpm/rt1718s.h b/driver/tcpm/rt1718s.h index d14e2bd498..d036c6901a 100644 --- a/driver/tcpm/rt1718s.h +++ b/driver/tcpm/rt1718s.h @@ -274,4 +274,13 @@ int rt1718s_sw_reset(int port); * @return EC_SUCCESS if success, EC_ERROR_UNKNOWN otherwise. */ __override_proto int board_rt1718s_set_snk_enable(int port, int enable); + +/** + * Board hook for rt1718s_set_src_enable + * + * @param port USB-C port + * @param enable enable/disable source + * @return EC_SUCCESS if success, EC_ERROR_UNKNOWN otherwise. + */ +__override_proto int board_rt1718s_set_src_enable(int port, int enable); #endif /* __CROS_EC_USB_PD_TCPM_MT6370_H */ diff --git a/driver/tcpm/tcpci.c b/driver/tcpm/tcpci.c index b78cfbb74c..ffadcab8c0 100644 --- a/driver/tcpm/tcpci.c +++ b/driver/tcpm/tcpci.c @@ -1635,7 +1635,7 @@ int tcpci_tcpm_mux_set(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; /* Parameter is port only */ diff --git a/driver/usb_mux/amd_fp5.c b/driver/usb_mux/amd_fp5.c index ca042b0fa0..b5aa6d2669 100644 --- a/driver/usb_mux/amd_fp5.c +++ b/driver/usb_mux/amd_fp5.c @@ -50,7 +50,7 @@ static int amd_fp5_set_mux(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; saved_mux_state[me->usb_port] = mux_state; diff --git a/driver/usb_mux/amd_fp6.c b/driver/usb_mux/amd_fp6.c index a776a696f7..ff3b6eacb8 100644 --- a/driver/usb_mux/amd_fp6.c +++ b/driver/usb_mux/amd_fp6.c @@ -142,7 +142,7 @@ static int amd_fp6_set_mux(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; if (mux_state == USB_PD_MUX_NONE) diff --git a/driver/usb_mux/anx3443.c b/driver/usb_mux/anx3443.c index f3b0b08afd..e8c2621a54 100644 --- a/driver/usb_mux/anx3443.c +++ b/driver/usb_mux/anx3443.c @@ -97,7 +97,7 @@ static int anx3443_set_mux(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; saved_mux_state[me->usb_port].mux_state = mux_state; diff --git a/driver/usb_mux/anx7440.c b/driver/usb_mux/anx7440.c index 456eaaa407..5a80487e05 100644 --- a/driver/usb_mux/anx7440.c +++ b/driver/usb_mux/anx7440.c @@ -69,7 +69,7 @@ static int anx7440_set_mux(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; res = anx7440_read(me, ANX7440_REG_CHIP_CTRL, ®); diff --git a/driver/usb_mux/anx7451.c b/driver/usb_mux/anx7451.c index b974128740..127f0b8e67 100644 --- a/driver/usb_mux/anx7451.c +++ b/driver/usb_mux/anx7451.c @@ -97,7 +97,7 @@ static int anx7451_set_mux(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; /* diff --git a/driver/usb_mux/it5205.c b/driver/usb_mux/it5205.c index de3d950c86..a773a51d0e 100644 --- a/driver/usb_mux/it5205.c +++ b/driver/usb_mux/it5205.c @@ -100,7 +100,7 @@ static int it5205_set_mux(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; switch (mux_state & MUX_STATE_DP_USB_MASK) { diff --git a/driver/usb_mux/pi3usb3x532.c b/driver/usb_mux/pi3usb3x532.c index 54eff928b7..42d13ca835 100644 --- a/driver/usb_mux/pi3usb3x532.c +++ b/driver/usb_mux/pi3usb3x532.c @@ -89,7 +89,7 @@ static int pi3usb3x532_set_mux(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; if (mux_state & USB_PD_MUX_USB_ENABLED) diff --git a/driver/usb_mux/ps8740.c b/driver/usb_mux/ps8740.c index 557c4f1976..2b412ac35a 100644 --- a/driver/usb_mux/ps8740.c +++ b/driver/usb_mux/ps8740.c @@ -77,7 +77,7 @@ static int ps8740_set_mux(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; if (mux_state & USB_PD_MUX_USB_ENABLED) diff --git a/driver/usb_mux/ps8743.c b/driver/usb_mux/ps8743.c index 86f0a7f9b2..6c123bb50c 100644 --- a/driver/usb_mux/ps8743.c +++ b/driver/usb_mux/ps8743.c @@ -126,7 +126,7 @@ static int ps8743_set_mux(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; if (mux_state & USB_PD_MUX_USB_ENABLED) diff --git a/driver/usb_mux/ps8822.c b/driver/usb_mux/ps8822.c index d3ea76965d..97d1158f99 100644 --- a/driver/usb_mux/ps8822.c +++ b/driver/usb_mux/ps8822.c @@ -84,7 +84,7 @@ static int ps8822_set_mux(const struct usb_mux *me, mux_state_t mux_state, *ack_required = false; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; rv = ps8822_read(me, PS8822_REG_PAGE0, PS8822_REG_MODE, ®); diff --git a/driver/usb_mux/tusb1064.c b/driver/usb_mux/tusb1064.c index 9dc25d0d01..266e36a2eb 100644 --- a/driver/usb_mux/tusb1064.c +++ b/driver/usb_mux/tusb1064.c @@ -97,7 +97,7 @@ int tusb1064_set_mux(const struct usb_mux *me, mux_state_t mux_state, int mask; /* This driver treats safe mode as none */ - if (mux_state == USB_PD_MUX_SAFE_MODE) + if (mux_state & USB_PD_MUX_SAFE_MODE) mux_state = USB_PD_MUX_NONE; rv = tusb1064_read(me, TUSB1064_REG_GENERAL, ®); diff --git a/driver/usb_mux/usb_mux.c b/driver/usb_mux/usb_mux.c index 334b7f2f2d..ceabe7f8c8 100644 --- a/driver/usb_mux/usb_mux.c +++ b/driver/usb_mux/usb_mux.c @@ -514,8 +514,7 @@ static void perform_mux_set(int port, int index, mux_state_t mux_mode, return; /* Configure superspeed lanes */ - mux_state = ((mux_mode != USB_PD_MUX_NONE) && - (mux_mode != USB_PD_MUX_SAFE_MODE) && polarity) ? + mux_state = ((mux_mode != USB_PD_MUX_NONE) && polarity) ? mux_mode | USB_PD_MUX_POLARITY_INVERTED : mux_mode; |