summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--board/atlas/usb_pd_policy.c2
-rw-r--r--board/flapjack/board.c2
-rw-r--r--board/kakadu/board.c4
-rw-r--r--board/kodama/board.c4
-rw-r--r--board/kukui/board.c4
-rw-r--r--board/oak/board.c2
-rw-r--r--board/scarlet/board.c2
-rw-r--r--common/mock/tcpc_mock.c4
-rw-r--r--common/usb_common.c13
-rw-r--r--driver/bc12/max14637.c2
-rw-r--r--driver/tcpm/anx7447.c2
-rw-r--r--driver/tcpm/anx74xx.c4
-rw-r--r--driver/tcpm/anx7688.c4
-rw-r--r--driver/tcpm/fusb302.c9
-rw-r--r--driver/tcpm/mt6370.c2
-rw-r--r--driver/tcpm/nct38xx.c2
-rw-r--r--driver/tcpm/ps8xxx.c2
-rw-r--r--driver/tcpm/raa489000.c2
-rw-r--r--driver/tcpm/tcpci.c13
-rw-r--r--driver/tcpm/tcpci.h2
-rw-r--r--driver/tcpm/tcpm.h11
-rw-r--r--driver/tcpm/tusb422.c2
-rw-r--r--fuzz/usb_pd_fuzz.c2
-rw-r--r--include/usb_pd.h10
-rw-r--r--include/usb_pd_tcpm.h14
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, &reg);
+ 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.