summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorScott Collyer <scollyer@google.com>2021-06-22 12:33:32 -0700
committerCommit Bot <commit-bot@chromium.org>2021-07-08 21:39:39 +0000
commit42f5279c008f451db480716162d8cc5a657bc93a (patch)
treedb7a6b7502afc22ad13868ad0a44fb10296c42e2 /common
parent77efdefdc384225861a83c3b1539339c103cd3b9 (diff)
downloadchrome-ec-42f5279c008f451db480716162d8cc5a657bc93a.tar.gz
TCPMv2: Add new override function for getting default Rp
This CL addes a new overridable function typec_get_default_current_limit_rp() which is used in place of CONFIG_USB_PD_PULLUP to retrieve the correct Rp value to reflect the current limit. This functionality is required for boards which are not per port symmetric. Unless this function if overridden in a board/basebard specific file, there is no change in functionality from present design. BUG=b:191793195 BRANCH=quiche TEST=verfied on Gingerbread that Rp = 3.0A is selected for C0 and Rp = 1.5A is selected for port C1. Signed-off-by: Scott Collyer <scollyer@google.com> Change-Id: I9ec9daa563f6b4f551b4890ae7a56767f7c26764 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2980435 Commit-Queue: Scott Collyer <scollyer@chromium.org> Tested-by: Scott Collyer <scollyer@chromium.org> Reviewed-by: Diana Z <dzigterman@chromium.org> Reviewed-by: Abe Levkoy <alevkoy@chromium.org>
Diffstat (limited to 'common')
-rw-r--r--common/usbc/usb_pd_dpm.c9
-rw-r--r--common/usbc/usb_tc_drp_acc_trysrc_sm.c17
2 files changed, 18 insertions, 8 deletions
diff --git a/common/usbc/usb_pd_dpm.c b/common/usbc/usb_pd_dpm.c
index c630d543da..734ad4e95d 100644
--- a/common/usbc/usb_pd_dpm.c
+++ b/common/usbc/usb_pd_dpm.c
@@ -498,7 +498,7 @@ static void balance_source_ports(void)
int rem_non_pd = LOWEST_PORT(non_pd_sink_max_requested &
max_current_claimed);
typec_select_src_current_limit_rp(rem_non_pd,
- CONFIG_USB_PD_PULLUP);
+ typec_get_default_current_limit_rp(rem_non_pd));
max_current_claimed &= ~BIT(rem_non_pd);
/* Wait tSinkAdj before using current */
@@ -539,7 +539,7 @@ static void balance_source_ports(void)
int rem_non_pd = LOWEST_PORT(non_pd_sink_max_requested &
max_current_claimed);
typec_select_src_current_limit_rp(rem_non_pd,
- CONFIG_USB_PD_PULLUP);
+ typec_get_default_current_limit_rp(rem_non_pd));
max_current_claimed &= ~BIT(rem_non_pd);
/* Wait tSinkAdj before using current */
@@ -647,7 +647,8 @@ void dpm_remove_sink(int port)
atomic_clear_bits(&non_pd_sink_max_requested, BIT(port));
/* Restore selected default Rp on the port */
- typec_select_src_current_limit_rp(port, CONFIG_USB_PD_PULLUP);
+ typec_select_src_current_limit_rp(port,
+ typec_get_default_current_limit_rp(port));
balance_source_ports();
}
@@ -694,7 +695,7 @@ int dpm_get_source_current(const int port)
if (max_current_claimed & BIT(port))
return 3000;
- else if (CONFIG_USB_PD_PULLUP == TYPEC_RP_1A5)
+ else if (typec_get_default_current_limit_rp(port) == TYPEC_RP_1A5)
return 1500;
else
return 500;
diff --git a/common/usbc/usb_tc_drp_acc_trysrc_sm.c b/common/usbc/usb_tc_drp_acc_trysrc_sm.c
index 25dbf55657..d03bd35aae 100644
--- a/common/usbc/usb_tc_drp_acc_trysrc_sm.c
+++ b/common/usbc/usb_tc_drp_acc_trysrc_sm.c
@@ -1250,6 +1250,10 @@ void typec_select_src_current_limit_rp(int port, enum tcpc_rp_value rp)
if (IS_ATTACHED_SRC(port))
TC_SET_FLAG(port, TC_FLAGS_UPDATE_CURRENT);
}
+__overridable int typec_get_default_current_limit_rp(int port)
+{
+ return CONFIG_USB_PD_PULLUP;
+}
void typec_select_src_collision_rp(int port, enum tcpc_rp_value rp)
{
tc[port].select_collision_rp = rp;
@@ -1450,7 +1454,8 @@ static void restart_tc_sm(int port, enum usb_tc_state start_state)
* Update the Rp Value. We don't need to update CC lines though as that
* happens in below set_state transition.
*/
- typec_select_src_current_limit_rp(port, CONFIG_USB_PD_PULLUP);
+ typec_select_src_current_limit_rp(port,
+ typec_get_default_current_limit_rp(port));
/* Disable if restart failed, otherwise start in default state. */
set_state_tc(port, res ? TC_DISABLED : start_state);
@@ -2192,7 +2197,8 @@ static void tc_unattached_snk_entry(const int port)
*/
tcpm_debug_detach(port);
typec_select_pull(port, TYPEC_CC_RD);
- typec_select_src_current_limit_rp(port, CONFIG_USB_PD_PULLUP);
+ typec_select_src_current_limit_rp(port,
+ typec_get_default_current_limit_rp(port));
typec_update_cc(port);
@@ -2752,7 +2758,8 @@ static void tc_unattached_src_entry(const int port)
*/
tcpm_debug_detach(port);
typec_select_pull(port, TYPEC_CC_RP);
- typec_select_src_current_limit_rp(port, CONFIG_USB_PD_PULLUP);
+ typec_select_src_current_limit_rp(port,
+ typec_get_default_current_limit_rp(port));
typec_update_cc(port);
prev_data_role = tc[port].data_role;
@@ -3429,7 +3436,9 @@ static void tc_try_src_entry(const int port)
* ground through Rp.
*/
typec_select_pull(port, TYPEC_CC_RP);
- typec_select_src_current_limit_rp(port, CONFIG_USB_PD_PULLUP);
+
+ typec_select_src_current_limit_rp(port,
+ typec_get_default_current_limit_rp(port));
/* Apply Rp */
typec_update_cc(port);