summaryrefslogtreecommitdiff
path: root/board/servo_v4/usb_pd_policy.c
diff options
context:
space:
mode:
Diffstat (limited to 'board/servo_v4/usb_pd_policy.c')
-rw-r--r--board/servo_v4/usb_pd_policy.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/board/servo_v4/usb_pd_policy.c b/board/servo_v4/usb_pd_policy.c
index 9ba5356791..b6c395a860 100644
--- a/board/servo_v4/usb_pd_policy.c
+++ b/board/servo_v4/usb_pd_policy.c
@@ -58,6 +58,19 @@ static struct vbus_prop vbus[CONFIG_USB_PD_PORT_COUNT];
static struct vbus_prop vbus_pend;
static uint8_t vbus_rp = TYPEC_RP_RESERVED;
+/* Voltage thresholds for no connect */
+static int pd_src_vnc[TYPEC_RP_RESERVED][2] = {
+ {PD_SRC_3_0_VNC_MV, PD_SRC_1_5_VNC_MV},
+ {PD_SRC_1_5_VNC_MV, PD_SRC_DEF_VNC_MV},
+ {PD_SRC_3_0_VNC_MV, PD_SRC_DEF_VNC_MV},
+};
+/* Voltage thresholds for Ra attach */
+static int pd_src_rd_threshold[TYPEC_RP_RESERVED][2] = {
+ {PD_SRC_3_0_RD_THRESH_MV, PD_SRC_1_5_RD_THRESH_MV},
+ {PD_SRC_1_5_RD_THRESH_MV, PD_SRC_DEF_RD_THRESH_MV},
+ {PD_SRC_3_0_RD_THRESH_MV, PD_SRC_DEF_RD_THRESH_MV},
+};
+
static void board_manage_dut_port(void)
{
int rp;
@@ -165,6 +178,38 @@ static void board_update_chg_vbus(int max_ma, int vbus_mv)
hook_call_deferred(&board_manage_chg_port_data, 0);
}
+int pd_tcpc_cc_nc(int port, int cc_volt, int cc_sel)
+{
+ int rp_index;
+
+ /* Can never be called from CHG port as it's sink only */
+ if (port == CHG)
+ return 0;
+
+ rp_index = vbus_rp;
+ /* Ensure that rp_index doens't exceed the array size */
+ if (rp_index >= TYPEC_RP_RESERVED)
+ rp_index = 0;
+
+ return cc_volt >= pd_src_vnc[rp_index][cc_sel];
+}
+
+int pd_tcpc_cc_ra(int port, int cc_volt, int cc_sel)
+{
+ int rp_index;
+
+ /* Can never be called from CHG port as it's sink only */
+ if (port == CHG)
+ return 0;
+
+ rp_index = vbus_rp;
+ /* Ensure that rp_index doens't exceed the array size */
+ if (rp_index >= TYPEC_RP_RESERVED)
+ rp_index = 0;
+
+ return cc_volt < pd_src_rd_threshold[rp_index][cc_sel];
+}
+
int board_select_rp_value(int port, int rp)
{
return pd_set_rp_rd(port, TYPEC_CC_RP, rp);