diff options
author | Vijay Hiremath <vijay.p.hiremath@intel.com> | 2020-02-11 12:48:46 -0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-02-12 20:05:34 +0000 |
commit | 0c2d07061c82d718288dbc287ca56b17da2206f9 (patch) | |
tree | 51529bc2c06549f5c82037809c530fc1aac23d9d | |
parent | b7f0b4cd0cd42319d204ac653224f3661a463237 (diff) | |
download | chrome-ec-0c2d07061c82d718288dbc287ca56b17da2206f9.tar.gz |
TCPMv1/v2: Move pd_process_source_cap() to common file
BUG=b:148528713
BRANCH=none
TEST=make buildall -j
Change-Id: I6bd6b5875a322ca4ba6d77a4cfc96a72630e5f5c
Signed-off-by: Vijay Hiremath <vijay.p.hiremath@intel.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2051220
Reviewed-by: Keith Short <keithshort@chromium.org>
-rw-r--r-- | common/usb_pd_dual_role.c | 20 | ||||
-rw-r--r-- | common/usb_pd_policy.c | 29 | ||||
-rw-r--r-- | common/usbc/usb_pe_drp_sm.c | 24 | ||||
-rw-r--r-- | include/usb_pd.h | 10 | ||||
-rw-r--r-- | test/fake_usbc.c | 14 |
5 files changed, 61 insertions, 36 deletions
diff --git a/common/usb_pd_dual_role.c b/common/usb_pd_dual_role.c index e4702fbeda..b2b6c25aae 100644 --- a/common/usb_pd_dual_role.c +++ b/common/usb_pd_dual_role.c @@ -5,6 +5,7 @@ * Dual Role (Source & Sink) USB-PD module. */ +#include "charge_manager.h" #include "charge_state.h" #include "usb_common.h" #include "usb_pd.h" @@ -281,6 +282,25 @@ void pd_build_request(uint32_t src_cap_cnt, const uint32_t * const src_caps, *rdo |= RDO_NO_SUSPEND; } } + +void pd_process_source_cap(int port, int cnt, uint32_t *src_caps) +{ + pd_set_src_caps(port, cnt, src_caps); + + if (IS_ENABLED(CONFIG_CHARGE_MANAGER)) { + uint32_t ma, mv, pdo; + + /* Get max power info that we could request */ + pd_find_pdo_index(pd_get_src_cap_cnt(port), + pd_get_src_caps(port), + PD_MAX_VOLTAGE_MV, &pdo); + pd_extract_pdo_power(pdo, &ma, &mv); + + /* Set max. limit, but apply 500mA ceiling */ + charge_manager_set_ceil(port, CEIL_REQUESTOR_PD, PD_MIN_MA); + pd_set_input_current_limit(port, ma, mv); + } +} #endif /* defined(PD_MAX_VOLTAGE_MV) && defined(PD_OPERATING_POWER_MW) */ int pd_charge_from_device(uint16_t vid, uint16_t pid) diff --git a/common/usb_pd_policy.c b/common/usb_pd_policy.c index adce64b65f..98ef076953 100644 --- a/common/usb_pd_policy.c +++ b/common/usb_pd_policy.c @@ -60,39 +60,22 @@ static uint8_t pd_src_cap_cnt[CONFIG_USB_PD_PORT_MAX_COUNT]; const uint32_t * const pd_get_src_caps(int port) { - ASSERT(port < CONFIG_USB_PD_PORT_MAX_COUNT); - return pd_src_caps[port]; } -uint8_t pd_get_src_cap_cnt(int port) -{ - ASSERT(port < CONFIG_USB_PD_PORT_MAX_COUNT); - - return pd_src_cap_cnt[port]; -} - -void pd_process_source_cap(int port, int cnt, uint32_t *src_caps) +void pd_set_src_caps(int port, int cnt, uint32_t *src_caps) { -#ifdef CONFIG_CHARGE_MANAGER - uint32_t ma, mv, pdo; -#endif int i; pd_src_cap_cnt[port] = cnt; + for (i = 0; i < cnt; i++) pd_src_caps[port][i] = *src_caps++; +} -#ifdef CONFIG_CHARGE_MANAGER - /* Get max power info that we could request */ - pd_find_pdo_index(pd_get_src_cap_cnt(port), pd_get_src_caps(port), - PD_MAX_VOLTAGE_MV, &pdo); - pd_extract_pdo_power(pdo, &ma, &mv); - - /* Set max. limit, but apply 500mA ceiling */ - charge_manager_set_ceil(port, CEIL_REQUESTOR_PD, PD_MIN_MA); - pd_set_input_current_limit(port, ma, mv); -#endif +uint8_t pd_get_src_cap_cnt(int port) +{ + return pd_src_cap_cnt[port]; } #endif /* CONFIG_USB_PD_DUAL_ROLE */ diff --git a/common/usbc/usb_pe_drp_sm.c b/common/usbc/usb_pe_drp_sm.c index bfd459fd21..1581a26e41 100644 --- a/common/usbc/usb_pe_drp_sm.c +++ b/common/usbc/usb_pe_drp_sm.c @@ -4430,26 +4430,24 @@ static void pe_dr_snk_get_sink_cap_run(int port) set_state_pe(port, PE_SNK_READY); } -void pd_process_source_cap(int port, int cnt, uint32_t *src_caps) +const uint32_t * const pd_get_src_caps(int port) +{ + return pe[port].src_caps; +} + +void pd_set_src_caps(int port, int cnt, uint32_t *src_caps) { -#ifdef CONFIG_CHARGE_MANAGER - uint32_t ma, mv, pdo; -#endif int i; pe[port].src_cap_cnt = cnt; + for (i = 0; i < cnt; i++) pe[port].src_caps[i] = *src_caps++; +} -#ifdef CONFIG_CHARGE_MANAGER - /* Get max power info that we could request */ - pd_find_pdo_index(pe[port].src_cap_cnt, pe[port].src_caps, - PD_MAX_VOLTAGE_MV, &pdo); - pd_extract_pdo_power(pdo, &ma, &mv); - /* Set max. limit, but apply 500mA ceiling */ - charge_manager_set_ceil(port, CEIL_REQUESTOR_PD, PD_MIN_MA); - pd_set_input_current_limit(port, ma, mv); -#endif +uint8_t pd_get_src_cap_cnt(int port) +{ + return pe[port].src_cap_cnt; } void pd_dfp_pe_init(int port) diff --git a/include/usb_pd.h b/include/usb_pd.h index 7e3ad705df..1d75abf638 100644 --- a/include/usb_pd.h +++ b/include/usb_pd.h @@ -2398,6 +2398,16 @@ const uint32_t * const pd_get_src_caps(int port); uint8_t pd_get_src_cap_cnt(int port); /** + * Set the source caps list & count + * + * @param port USB-C port number + * @param cnt Source caps count + * @param src_caps Pointer to source caps + * + */ +void pd_set_src_caps(int port, int cnt, uint32_t *src_caps); + +/** * Return true if partner port is capable of communication over USB data * lines. * diff --git a/test/fake_usbc.c b/test/fake_usbc.c index 36e0d7ca48..d8ed1d42f9 100644 --- a/test/fake_usbc.c +++ b/test/fake_usbc.c @@ -162,6 +162,20 @@ enum idh_ptype get_usb_pd_mux_cable_type(int port) { return IDH_PTYPE_UNDEF; } + +const uint32_t * const pd_get_src_caps(int port) +{ + return NULL; +} + +void pd_set_src_caps(int port, int cnt, uint32_t *src_caps) +{ +} + +uint8_t pd_get_src_cap_cnt(int port) +{ + return 0; +} #endif #ifndef CONFIG_USB_TYPEC_DRP_ACC_TRYSRC |