diff options
-rw-r--r-- | board/atlas/usb_pd_policy.c | 2 | ||||
-rw-r--r-- | board/flapjack/board.c | 2 | ||||
-rw-r--r-- | board/kakadu/board.c | 4 | ||||
-rw-r--r-- | board/kodama/board.c | 4 | ||||
-rw-r--r-- | board/kukui/board.c | 4 | ||||
-rw-r--r-- | board/oak/board.c | 2 | ||||
-rw-r--r-- | board/scarlet/board.c | 2 | ||||
-rw-r--r-- | common/mock/tcpc_mock.c | 4 | ||||
-rw-r--r-- | common/usb_common.c | 13 | ||||
-rw-r--r-- | driver/bc12/max14637.c | 2 | ||||
-rw-r--r-- | driver/tcpm/anx7447.c | 2 | ||||
-rw-r--r-- | driver/tcpm/anx74xx.c | 4 | ||||
-rw-r--r-- | driver/tcpm/anx7688.c | 4 | ||||
-rw-r--r-- | driver/tcpm/fusb302.c | 9 | ||||
-rw-r--r-- | driver/tcpm/mt6370.c | 2 | ||||
-rw-r--r-- | driver/tcpm/nct38xx.c | 2 | ||||
-rw-r--r-- | driver/tcpm/ps8xxx.c | 2 | ||||
-rw-r--r-- | driver/tcpm/raa489000.c | 2 | ||||
-rw-r--r-- | driver/tcpm/tcpci.c | 13 | ||||
-rw-r--r-- | driver/tcpm/tcpci.h | 2 | ||||
-rw-r--r-- | driver/tcpm/tcpm.h | 11 | ||||
-rw-r--r-- | driver/tcpm/tusb422.c | 2 | ||||
-rw-r--r-- | fuzz/usb_pd_fuzz.c | 2 | ||||
-rw-r--r-- | include/usb_pd.h | 10 | ||||
-rw-r--r-- | include/usb_pd_tcpm.h | 14 |
25 files changed, 76 insertions, 44 deletions
diff --git a/board/atlas/usb_pd_policy.c b/board/atlas/usb_pd_policy.c index ffaa2cc04e..cb9a460330 100644 --- a/board/atlas/usb_pd_policy.c +++ b/board/atlas/usb_pd_policy.c @@ -61,7 +61,7 @@ void typec_set_source_current_limit(int port, enum tcpc_rp_value rp) int pd_snk_is_vbus_provided(int port) { - return tcpci_tcpm_get_vbus_level(port); + return tcpci_tcpm_check_vbus_level(port, VBUS_PRESENT); } int pd_set_power_supply_ready(int port) diff --git a/board/flapjack/board.c b/board/flapjack/board.c index fc214278ac..4474442b9f 100644 --- a/board/flapjack/board.c +++ b/board/flapjack/board.c @@ -366,7 +366,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int extpower_is_present(void) { - return tcpm_get_vbus_level(0); + return tcpm_check_vbus_level(0, VBUS_PRESENT); } int pd_snk_is_vbus_provided(int port) diff --git a/board/kakadu/board.c b/board/kakadu/board.c index 6a362b9a36..3237449495 100644 --- a/board/kakadu/board.c +++ b/board/kakadu/board.c @@ -226,7 +226,9 @@ int extpower_is_present(void) if (board_vbus_source_enabled(CHARGE_PORT_USB_C)) usb_c_extpower_present = 0; else - usb_c_extpower_present = tcpm_get_vbus_level(CHARGE_PORT_USB_C); + usb_c_extpower_present = tcpm_check_vbus_level( + CHARGE_PORT_USB_C, + VBUS_PRESENT); return usb_c_extpower_present; } diff --git a/board/kodama/board.c b/board/kodama/board.c index fdb40d32b8..2fab43d3ac 100644 --- a/board/kodama/board.c +++ b/board/kodama/board.c @@ -216,7 +216,9 @@ int extpower_is_present(void) if (board_vbus_source_enabled(CHARGE_PORT_USB_C)) usb_c_extpower_present = 0; else - usb_c_extpower_present = tcpm_get_vbus_level(CHARGE_PORT_USB_C); + usb_c_extpower_present = tcpm_check_vbus_level( + CHARGE_PORT_USB_C, + VBUS_PRESENT); return usb_c_extpower_present; } diff --git a/board/kukui/board.c b/board/kukui/board.c index 57ba1e82f7..68edc00d3a 100644 --- a/board/kukui/board.c +++ b/board/kukui/board.c @@ -247,7 +247,9 @@ int extpower_is_present(void) if (board_vbus_source_enabled(CHARGE_PORT_USB_C)) usb_c_extpower_present = 0; else - usb_c_extpower_present = tcpm_get_vbus_level(CHARGE_PORT_USB_C); + usb_c_extpower_present = tcpm_check_vbus_level( + CHARGE_PORT_USB_C, + VBUS_PRESENT); return usb_c_extpower_present || kukui_pogo_extpower_present(); } diff --git a/board/oak/board.c b/board/oak/board.c index 05f030f89e..b282daf2a3 100644 --- a/board/oak/board.c +++ b/board/oak/board.c @@ -511,7 +511,7 @@ void vbus_task(void *u) vbus = !gpio_get_level(port ? GPIO_USB_C1_VBUS_WAKE_L : GPIO_USB_C0_VBUS_WAKE_L); #else - vbus = tcpm_get_vbus_level(port); + vbus = tcpm_check_vbus_level(port, VBUS_PRESENT); #endif /* check if VBUS changed */ if (((bc12[port].vbus >> port) & 1) == vbus) diff --git a/board/scarlet/board.c b/board/scarlet/board.c index 97c6f61e10..cb70a7c163 100644 --- a/board/scarlet/board.c +++ b/board/scarlet/board.c @@ -218,7 +218,7 @@ int extpower_is_present(void) if (board_vbus_source_enabled(0)) return 0; else - return tcpm_get_vbus_level(0); + return tcpm_check_vbus_level(0, VBUS_PRESENT); } int pd_snk_is_vbus_provided(int port) diff --git a/common/mock/tcpc_mock.c b/common/mock/tcpc_mock.c index 45b748f895..c67ce8a040 100644 --- a/common/mock/tcpc_mock.c +++ b/common/mock/tcpc_mock.c @@ -42,7 +42,7 @@ static int mock_get_cc(int port, enum tcpc_cc_voltage_status *cc1, return EC_SUCCESS; } -static int mock_get_vbus_level(int port) +static bool mock_check_vbus_level(int port, enum vbus_level level) { return mock_tcpc.vbus_level; } @@ -167,7 +167,7 @@ const struct tcpm_drv mock_tcpc_driver = { .init = &mock_init, .release = &mock_release, .get_cc = &mock_get_cc, - .get_vbus_level = &mock_get_vbus_level, + .check_vbus_level = &mock_check_vbus_level, .select_rp_value = &mock_select_rp_value, .set_cc = &mock_set_cc, .set_polarity = &mock_set_polarity, diff --git a/common/usb_common.c b/common/usb_common.c index 91f0ad5a97..f3607f7aa5 100644 --- a/common/usb_common.c +++ b/common/usb_common.c @@ -713,10 +713,17 @@ void pd_deferred_resume(int port) } #endif /* CONFIG_USB_PD_TCPM_TCPCI */ -int pd_is_vbus_present(int port) +bool pd_check_vbus_level(int port, enum vbus_level level) { if (IS_ENABLED(CONFIG_USB_PD_VBUS_DETECT_TCPC)) - return tcpm_get_vbus_level(port); - else + return tcpm_check_vbus_level(port, level); + else if (level == VBUS_PRESENT) return pd_snk_is_vbus_provided(port); + else + return !pd_snk_is_vbus_provided(port); +} + +int pd_is_vbus_present(int port) +{ + return pd_check_vbus_level(port, VBUS_PRESENT); } diff --git a/driver/bc12/max14637.c b/driver/bc12/max14637.c index ea5dfa126f..2aab525f00 100644 --- a/driver/bc12/max14637.c +++ b/driver/bc12/max14637.c @@ -129,7 +129,7 @@ static void detect_or_power_down_ic(const int port) int vbus_present; #ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC - vbus_present = tcpm_get_vbus_level(port); + vbus_present = tcpm_check_vbus_level(port, VBUS_PRESENT); #else vbus_present = pd_snk_is_vbus_provided(port); #endif /* !defined(CONFIG_USB_PD_VBUS_DETECT_TCPC) */ diff --git a/driver/tcpm/anx7447.c b/driver/tcpm/anx7447.c index 0d4be2c477..aee839936d 100644 --- a/driver/tcpm/anx7447.c +++ b/driver/tcpm/anx7447.c @@ -751,7 +751,7 @@ const struct tcpm_drv anx7447_tcpm_drv = { .release = &anx7447_release, .get_cc = &tcpci_tcpm_get_cc, #ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC - .get_vbus_level = &tcpci_tcpm_get_vbus_level, + .check_vbus_level = &tcpci_tcpm_check_vbus_level, #endif .select_rp_value = &tcpci_tcpm_select_rp_value, .set_cc = &anx7447_set_cc, diff --git a/driver/tcpm/anx74xx.c b/driver/tcpm/anx74xx.c index f8b12fe43d..c40c65e312 100644 --- a/driver/tcpm/anx74xx.c +++ b/driver/tcpm/anx74xx.c @@ -860,7 +860,7 @@ static int anx74xx_tcpm_set_rx_enable(int port, int enable) } #ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC -static int anx74xx_tcpm_get_vbus_level(int port) +static bool anx74xx_tcpm_check_vbus_level(int port, enum vbus_level level) { int reg = 0; @@ -1155,7 +1155,7 @@ const struct tcpm_drv anx74xx_tcpm_drv = { .release = &anx74xx_tcpm_release, .get_cc = &anx74xx_tcpm_get_cc, #ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC - .get_vbus_level = &anx74xx_tcpm_get_vbus_level, + .check_vbus_level = &anx74xx_tcpm_check_vbus_level, #endif .select_rp_value = &anx74xx_tcpm_select_rp_value, .set_cc = &anx74xx_tcpm_set_cc, diff --git a/driver/tcpm/anx7688.c b/driver/tcpm/anx7688.c index 8b5a70cf73..a4baad42c3 100644 --- a/driver/tcpm/anx7688.c +++ b/driver/tcpm/anx7688.c @@ -171,7 +171,7 @@ static int anx7688_mux_set(const struct usb_mux *me, mux_state_t mux_state) } #ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC -static int anx7688_tcpm_get_vbus_level(int port) +static bool anx7688_tcpm_check_vbus_level(int port, enum vbus_level level) { int reg = 0; @@ -191,7 +191,7 @@ const struct tcpm_drv anx7688_tcpm_drv = { .release = &anx7688_release, .get_cc = &tcpci_tcpm_get_cc, #ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC - .get_vbus_level = &anx7688_tcpm_get_vbus_level, + .check_vbus_level = &anx7688_tcpm_check_vbus_level, #endif .select_rp_value = &tcpci_tcpm_select_rp_value, .set_cc = &tcpci_tcpm_set_cc, diff --git a/driver/tcpm/fusb302.c b/driver/tcpm/fusb302.c index 61a5623fb9..67121cba28 100644 --- a/driver/tcpm/fusb302.c +++ b/driver/tcpm/fusb302.c @@ -904,7 +904,7 @@ static int fusb302_tcpm_transmit(int port, enum tcpm_transmit_type type, } #ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC -static int fusb302_tcpm_get_vbus_level(int port) +static bool fusb302_tcpm_check_vbus_level(int port, enum vbus_level level) { int reg; @@ -950,9 +950,10 @@ void fusb302_tcpc_alert(int port) /* VBUS crossed threshold */ #ifdef CONFIG_USB_CHARGER usb_charger_vbus_change(port, - fusb302_tcpm_get_vbus_level(port)); + fusb302_tcpm_check_vbus_level(port, + VBUS_PRESENT)); #else - if (!fusb302_tcpm_get_vbus_level(port)) + if (!fusb302_tcpm_check_vbus_level(port, VBUS_PRESENT)) pd_vbus_low(port); #endif task_wake(PD_PORT_TO_TASK_ID(port)); @@ -1147,7 +1148,7 @@ const struct tcpm_drv fusb302_tcpm_drv = { .release = &fusb302_tcpm_release, .get_cc = &fusb302_tcpm_get_cc, #ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC - .get_vbus_level = &fusb302_tcpm_get_vbus_level, + .check_vbus_level = &fusb302_tcpm_check_vbus_level, #endif .select_rp_value = &fusb302_tcpm_select_rp_value, .set_cc = &fusb302_tcpm_set_cc, diff --git a/driver/tcpm/mt6370.c b/driver/tcpm/mt6370.c index 84ebd0a91e..af11bcb11d 100644 --- a/driver/tcpm/mt6370.c +++ b/driver/tcpm/mt6370.c @@ -190,7 +190,7 @@ const struct tcpm_drv mt6370_tcpm_drv = { .release = &tcpci_tcpm_release, .get_cc = &mt6370_get_cc, #ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC - .get_vbus_level = &tcpci_tcpm_get_vbus_level, + .check_vbus_level = &tcpci_tcpm_check_vbus_level, #endif .select_rp_value = &tcpci_tcpm_select_rp_value, .set_cc = &mt6370_set_cc, diff --git a/driver/tcpm/nct38xx.c b/driver/tcpm/nct38xx.c index 4f9aa6efd7..bf803bf8bb 100644 --- a/driver/tcpm/nct38xx.c +++ b/driver/tcpm/nct38xx.c @@ -185,7 +185,7 @@ const struct tcpm_drv nct38xx_tcpm_drv = { .release = &tcpci_tcpm_release, .get_cc = &tcpci_tcpm_get_cc, #ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC - .get_vbus_level = &tcpci_tcpm_get_vbus_level, + .check_vbus_level = &tcpci_tcpm_check_vbus_level, #endif .select_rp_value = &tcpci_tcpm_select_rp_value, .set_cc = &tcpci_tcpm_set_cc, diff --git a/driver/tcpm/ps8xxx.c b/driver/tcpm/ps8xxx.c index 37371b55ea..78996ba2ca 100644 --- a/driver/tcpm/ps8xxx.c +++ b/driver/tcpm/ps8xxx.c @@ -353,7 +353,7 @@ const struct tcpm_drv ps8xxx_tcpm_drv = { .get_cc = &tcpci_tcpm_get_cc, #endif #ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC - .get_vbus_level = &tcpci_tcpm_get_vbus_level, + .check_vbus_level = &tcpci_tcpm_check_vbus_level, #endif .select_rp_value = &tcpci_tcpm_select_rp_value, .set_cc = &tcpci_tcpm_set_cc, diff --git a/driver/tcpm/raa489000.c b/driver/tcpm/raa489000.c index 21265c17d2..19e94ee7dc 100644 --- a/driver/tcpm/raa489000.c +++ b/driver/tcpm/raa489000.c @@ -177,7 +177,7 @@ const struct tcpm_drv raa489000_tcpm_drv = { .release = &tcpci_tcpm_release, .get_cc = &tcpci_tcpm_get_cc, #ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC - .get_vbus_level = &tcpci_tcpm_get_vbus_level, + .check_vbus_level = &tcpci_tcpm_check_vbus_level, #endif .select_rp_value = &tcpci_tcpm_select_rp_value, .set_cc = &raa489000_tcpm_set_cc, diff --git a/driver/tcpm/tcpci.c b/driver/tcpm/tcpci.c index 97840516a7..742f9c0d37 100644 --- a/driver/tcpm/tcpci.c +++ b/driver/tcpm/tcpci.c @@ -634,7 +634,7 @@ void tcpci_tcpc_fast_role_swap_enable(int port, int enable) #endif #ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC -int tcpci_tcpm_get_vbus_level(int port) +bool tcpci_tcpm_check_vbus_level(int port, enum vbus_level level) { return tcpc_vbus[port]; } @@ -1051,18 +1051,19 @@ void tcpci_tcpc_alert(int port) } } if (alert & TCPC_REG_ALERT_POWER_STATUS) { - int reg = 0; + int pwr_status = 0; + /* Read Power Status register */ - tcpci_tcpm_get_power_status(port, ®); + tcpci_tcpm_get_power_status(port, &pwr_status); /* Update VBUS status */ - tcpc_vbus[port] = reg & + tcpc_vbus[port] = pwr_status & TCPC_REG_POWER_STATUS_VBUS_PRES ? 1 : 0; #if defined(CONFIG_USB_PD_VBUS_DETECT_TCPC) && defined(CONFIG_USB_CHARGER) /* Update charge manager with new VBUS state */ usb_charger_vbus_change(port, tcpc_vbus[port]); pd_event |= TASK_EVENT_WAKE; #endif /* CONFIG_USB_PD_VBUS_DETECT_TCPC && CONFIG_USB_CHARGER */ - if (reg & TCPC_REG_POWER_STATUS_VBUS_DET) + if (pwr_status & TCPC_REG_POWER_STATUS_VBUS_DET) board_vbus_present_change(); } @@ -1451,7 +1452,7 @@ const struct tcpm_drv tcpci_tcpm_drv = { .release = &tcpci_tcpm_release, .get_cc = &tcpci_tcpm_get_cc, #ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC - .get_vbus_level = &tcpci_tcpm_get_vbus_level, + .check_vbus_level = &tcpci_tcpm_check_vbus_level, #endif .select_rp_value = &tcpci_tcpm_select_rp_value, .set_cc = &tcpci_tcpm_set_cc, diff --git a/driver/tcpm/tcpci.h b/driver/tcpm/tcpci.h index c3ee70e982..6a05b1aaca 100644 --- a/driver/tcpm/tcpci.h +++ b/driver/tcpm/tcpci.h @@ -208,7 +208,7 @@ void tcpci_tcpc_alert(int port); int tcpci_tcpm_init(int port); int tcpci_tcpm_get_cc(int port, enum tcpc_cc_voltage_status *cc1, enum tcpc_cc_voltage_status *cc2); -int tcpci_tcpm_get_vbus_level(int port); +bool tcpci_tcpm_check_vbus_level(int port, enum vbus_level level); int tcpci_tcpm_select_rp_value(int port, int rp); int tcpci_tcpm_set_cc(int port, int pull); int tcpci_tcpm_set_polarity(int port, enum tcpc_cc_polarity polarity); diff --git a/driver/tcpm/tcpm.h b/driver/tcpm/tcpm.h index e360811155..c62235eec9 100644 --- a/driver/tcpm/tcpm.h +++ b/driver/tcpm/tcpm.h @@ -163,9 +163,9 @@ static inline int tcpm_get_cc(int port, enum tcpc_cc_voltage_status *cc1, return tcpc_config[port].drv->get_cc(port, cc1, cc2); } -static inline int tcpm_get_vbus_level(int port) +static inline bool tcpm_check_vbus_level(int port, enum vbus_level level) { - return tcpc_config[port].drv->get_vbus_level(port); + return tcpc_config[port].drv->check_vbus_level(port, level); } static inline int tcpm_select_rp_value(int port, int rp) @@ -328,13 +328,14 @@ int tcpm_get_cc(int port, enum tcpc_cc_voltage_status *cc1, enum tcpc_cc_voltage_status *cc2); /** - * Read VBUS + * Check VBUS level * * @param port Type-C port number + * @param level safe level voltage to check against * - * @return 0 => VBUS not detected, 1 => VBUS detected + * @return False => VBUS not at level, True => VBUS at level */ -int tcpm_get_vbus_level(int port); +bool tcpm_check_vbus_level(int port, enum vbus_level level); /** * Set the value of the CC pull-up used when we are a source. diff --git a/driver/tcpm/tusb422.c b/driver/tcpm/tusb422.c index db8a9f7c0b..6c26646384 100644 --- a/driver/tcpm/tusb422.c +++ b/driver/tcpm/tusb422.c @@ -55,7 +55,7 @@ const struct tcpm_drv tusb422_tcpm_drv = { .release = &tcpci_tcpm_release, .get_cc = &tcpci_tcpm_get_cc, #ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC - .get_vbus_level = &tcpci_tcpm_get_vbus_level, + .check_vbus_level = &tcpci_tcpm_check_vbus_level, #endif .select_rp_value = &tcpci_tcpm_select_rp_value, .set_cc = &tcpci_tcpm_set_cc, diff --git a/fuzz/usb_pd_fuzz.c b/fuzz/usb_pd_fuzz.c index 7b7b9bfc5a..22c856ccff 100644 --- a/fuzz/usb_pd_fuzz.c +++ b/fuzz/usb_pd_fuzz.c @@ -126,7 +126,7 @@ static const struct tcpm_drv mock_tcpm_drv = { .release = &mock_tcpm_release, .get_cc = &mock_tcpm_get_cc, #ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC - .get_vbus_level = &mock_tcpm_get_vbus_level, + .check_vbus_level = &mock_tcpm_check_vbus_level, #endif .select_rp_value = &mock_tcpm_select_rp_value, .set_cc = &mock_tcpm_set_cc, diff --git a/include/usb_pd.h b/include/usb_pd.h index 436b217a9a..229811b4f8 100644 --- a/include/usb_pd.h +++ b/include/usb_pd.h @@ -2594,7 +2594,15 @@ bool pd_get_partner_usb_comm_capable(int port); bool pd_is_disconnected(int port); /** - * Return true if vbus is present on the specified port. + * Return true if vbus is at level on the specified port. + * + * @param port USB-C port number + * @param level vbus_level to check against + */ +bool pd_check_vbus_level(int port, enum vbus_level level); + +/** + * Return true if vbus is at Safe5V on the specified port. * * @param port USB-C port number */ diff --git a/include/usb_pd_tcpm.h b/include/usb_pd_tcpm.h index a98d8e3000..5b160b46b5 100644 --- a/include/usb_pd_tcpm.h +++ b/include/usb_pd_tcpm.h @@ -8,6 +8,7 @@ #ifndef __CROS_EC_USB_PD_TCPM_H #define __CROS_EC_USB_PD_TCPM_H +#include <stdbool.h> #include "ec_commands.h" #include "i2c.h" @@ -106,6 +107,12 @@ enum tcpc_transmit_complete { TCPC_TX_COMPLETE_FAILED = 2, }; +/* USB-C PD Vbus levels */ +enum vbus_level { + VBUS_SAFE0V, + VBUS_PRESENT, +}; + /** * Returns whether the sink has detected a Rp resistor on the other side. */ @@ -202,13 +209,14 @@ struct tcpm_drv { enum tcpc_cc_voltage_status *cc2); /** - * Read VBUS + * Check VBUS level * * @param port Type-C port number + * @param level safe level voltage to check against * - * @return 0 => VBUS not detected, 1 => VBUS detected + * @return False => VBUS not at level, True => VBUS at level */ - int (*get_vbus_level)(int port); + bool (*check_vbus_level)(int port, enum vbus_level level); /** * Set the value of the CC pull-up used when we are a source. |