diff options
-rw-r--r-- | common/usb_pd_host_cmd.c | 22 | ||||
-rw-r--r-- | common/usb_pd_policy.c | 26 | ||||
-rw-r--r-- | common/usbc/usb_pe_drp_sm.c | 26 | ||||
-rw-r--r-- | include/usb_pd.h | 8 |
4 files changed, 39 insertions, 43 deletions
diff --git a/common/usb_pd_host_cmd.c b/common/usb_pd_host_cmd.c index d93dad714d..0a4f756e58 100644 --- a/common/usb_pd_host_cmd.c +++ b/common/usb_pd_host_cmd.c @@ -136,6 +136,28 @@ static enum ec_status hc_remote_pd_set_amode(struct host_cmd_handler_args *args) DECLARE_HOST_COMMAND(EC_CMD_USB_PD_SET_AMODE, hc_remote_pd_set_amode, EC_VER_MASK(0)); + +static enum ec_status hc_remote_pd_discovery(struct host_cmd_handler_args *args) +{ + const uint8_t *port = args->params; + struct ec_params_usb_pd_discovery_entry *r = args->response; + + if (*port >= board_get_usb_pd_port_count()) + return EC_RES_INVALID_PARAM; + + r->vid = pd_get_identity_vid(*port); + r->ptype = pd_get_product_type(*port); + + /* pid only included if vid is assigned */ + if (r->vid) + r->pid = pd_get_identity_pid(*port); + + args->response_size = sizeof(*r); + return EC_RES_SUCCESS; +} +DECLARE_HOST_COMMAND(EC_CMD_USB_PD_DISCOVERY, + hc_remote_pd_discovery, + EC_VER_MASK(0)); #endif /* CONFIG_USB_PD_ALT_MODE_DFP */ #ifdef CONFIG_COMMON_RUNTIME diff --git a/common/usb_pd_policy.c b/common/usb_pd_policy.c index f220293434..fbe7910442 100644 --- a/common/usb_pd_policy.c +++ b/common/usb_pd_policy.c @@ -782,6 +782,11 @@ uint16_t pd_get_identity_pid(int port) return PD_PRODUCT_PID(pe[port].identity[2]); } +uint8_t pd_get_product_type(int port) +{ + return PD_IDH_PTYPE(pe[port].identity[0]); +} + #ifdef CONFIG_CMD_USB_PD_PE static void dump_pe(int port) { @@ -1314,27 +1319,6 @@ static void pd_usb_billboard_deferred(void) DECLARE_DEFERRED(pd_usb_billboard_deferred); #ifdef CONFIG_USB_PD_ALT_MODE_DFP -static enum ec_status hc_remote_pd_discovery(struct host_cmd_handler_args *args) -{ - const uint8_t *port = args->params; - struct ec_params_usb_pd_discovery_entry *r = args->response; - - if (*port >= board_get_usb_pd_port_count()) - return EC_RES_INVALID_PARAM; - - r->vid = pd_get_identity_vid(*port); - r->ptype = PD_IDH_PTYPE(pe[*port].identity[0]); - /* pid only included if vid is assigned */ - if (r->vid) - r->pid = PD_PRODUCT_PID(pe[*port].identity[2]); - - args->response_size = sizeof(*r); - return EC_RES_SUCCESS; -} -DECLARE_HOST_COMMAND(EC_CMD_USB_PD_DISCOVERY, - hc_remote_pd_discovery, - EC_VER_MASK(0)); - static enum ec_status hc_remote_pd_get_amode(struct host_cmd_handler_args *args) { struct svdm_amode_data *modep; diff --git a/common/usbc/usb_pe_drp_sm.c b/common/usbc/usb_pe_drp_sm.c index fb20f952f5..e5208f4269 100644 --- a/common/usbc/usb_pe_drp_sm.c +++ b/common/usbc/usb_pe_drp_sm.c @@ -4941,6 +4941,10 @@ uint16_t pd_get_identity_pid(int port) return PD_PRODUCT_PID(pe[port].am_policy.identity[2]); } +uint8_t pd_get_product_type(int port) +{ + return PD_IDH_PTYPE(pe[port].am_policy.identity[0]); +} #ifdef CONFIG_CMD_USB_PD_PE static void dump_pe(int port) @@ -5016,28 +5020,6 @@ DECLARE_CONSOLE_COMMAND(pe, command_pe, "USB PE"); #endif /* CONFIG_CMD_USB_PD_PE */ -static enum ec_status hc_remote_pd_discovery(struct host_cmd_handler_args *args) -{ - const uint8_t *port = args->params; - struct ec_params_usb_pd_discovery_entry *r = args->response; - - if (*port >= board_get_usb_pd_port_count()) - return EC_RES_INVALID_PARAM; - - r->vid = pd_get_identity_vid(*port); - r->ptype = PD_IDH_PTYPE(pe[*port].am_policy.identity[0]); - - /* pid only included if vid is assigned */ - if (r->vid) - r->pid = PD_PRODUCT_PID(pe[*port].am_policy.identity[2]); - - args->response_size = sizeof(*r); - return EC_RES_SUCCESS; -} -DECLARE_HOST_COMMAND(EC_CMD_USB_PD_DISCOVERY, - hc_remote_pd_discovery, - EC_VER_MASK(0)); - static enum ec_status hc_remote_pd_get_amode(struct host_cmd_handler_args *args) { struct svdm_amode_data *modep; diff --git a/include/usb_pd.h b/include/usb_pd.h index 094de8f2a4..c27310484e 100644 --- a/include/usb_pd.h +++ b/include/usb_pd.h @@ -1555,6 +1555,14 @@ uint16_t pd_get_identity_vid(int port); uint16_t pd_get_identity_pid(int port); /** + * Return the product type connected to a specified port + * + * @param port USB-C port number + * @return USB-C product type (hub,periph,cable,ama) + */ +uint8_t pd_get_product_type(int port); + +/** * Returns the status of cable flag - CABLE_FLAGS_SOP_PRIME_ENABLE * * @param port USB-C port number |