Skip to content
Permalink
Browse files
usb: typec: tcpm: Export partner Source Capabilities
Export a function for other drivers to get the partner Source
Capabilities.

Signed-off-by: Kyle Tso <kyletso@google.com>
  • Loading branch information
kyletsoadl authored and intel-lab-lkp committed Feb 14, 2021
1 parent b5a1254 commit a80af7a2f4fa112b43e7b2b262729a8e1b28c132
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
@@ -5739,6 +5739,40 @@ static int tcpm_fw_get_caps(struct tcpm_port *port,
return 0;
}

/*
* Don't call this function in interrupt context. Caller needs to free the
* memory by calling tcpm_put_partner_src_caps.
*/
int tcpm_get_partner_src_caps(struct tcpm_port *port, u32 **src_pdo)
{
unsigned int nr_pdo;

mutex_lock(&port->lock);
if (port->nr_source_caps == 0) {
mutex_unlock(&port->lock);
return -ENODATA;
}

*src_pdo = kcalloc(port->nr_source_caps, sizeof(u32), GFP_KERNEL);
if (!src_pdo) {
mutex_unlock(&port->lock);
return -ENOMEM;
}

nr_pdo = tcpm_copy_pdos(*src_pdo, port->source_caps,
port->nr_source_caps);
mutex_unlock(&port->lock);
return nr_pdo;
}
EXPORT_SYMBOL_GPL(tcpm_get_partner_src_caps);

void tcpm_put_partner_src_caps(u32 **src_pdo)
{
kfree(*src_pdo);
*src_pdo = NULL;
}
EXPORT_SYMBOL_GPL(tcpm_put_partner_src_caps);

/* Power Supply access to expose source power information */
enum tcpm_psy_online_states {
TCPM_PSY_OFFLINE = 0,
@@ -161,5 +161,7 @@ void tcpm_pd_transmit_complete(struct tcpm_port *port,
enum tcpm_transmit_status status);
void tcpm_pd_hard_reset(struct tcpm_port *port);
void tcpm_tcpc_reset(struct tcpm_port *port);
int tcpm_get_partner_src_caps(struct tcpm_port *port, u32 **pdo);
void tcpm_put_partner_src_caps(u32 **pdo);

#endif /* __LINUX_USB_TCPM_H */

0 comments on commit a80af7a

Please sign in to comment.