diff mbox series

[1/3] usb: typec: tcpm: allow to use sink in accessory mode

Message ID 20250404-ml-topic-tcpm-v1-1-b99f44badce8@pengutronix.de
State New
Headers show
Series usb: typec: tcpm: sink (ufp) accessory mode support | expand

Commit Message

Michael Grzeschik April 3, 2025, 10:43 p.m. UTC
Since the function tcpm_acc_attach is not setting the data and role for
for the sink case we extend it to check for it first.

Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
---
 drivers/usb/typec/tcpm/tcpm.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

Comments

Heikki Krogerus April 7, 2025, 1:46 p.m. UTC | #1
+Badhri

On Fri, Apr 04, 2025 at 12:43:04AM +0200, Michael Grzeschik wrote:
> Since the function tcpm_acc_attach is not setting the data and role for
> for the sink case we extend it to check for it first.
> 
> Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>

Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

> ---
>  drivers/usb/typec/tcpm/tcpm.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
> index a99db4e025cd0..839697c14265e 100644
> --- a/drivers/usb/typec/tcpm/tcpm.c
> +++ b/drivers/usb/typec/tcpm/tcpm.c
> @@ -4551,12 +4551,17 @@ static void tcpm_snk_detach(struct tcpm_port *port)
>  static int tcpm_acc_attach(struct tcpm_port *port)
>  {
>  	int ret;
> +	enum typec_role role;
> +	enum typec_data_role data;
>  
>  	if (port->attached)
>  		return 0;
>  
> -	ret = tcpm_set_roles(port, true, TYPEC_SOURCE,
> -			     tcpm_data_role_for_source(port));
> +	role = tcpm_port_is_sink(port) ? TYPEC_SINK : TYPEC_SOURCE;
> +	data = tcpm_port_is_sink(port) ? tcpm_data_role_for_sink(port)
> +				       : tcpm_data_role_for_source(port);
> +
> +	ret = tcpm_set_roles(port, true, role, data);
>  	if (ret < 0)
>  		return ret;
>
diff mbox series

Patch

diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
index a99db4e025cd0..839697c14265e 100644
--- a/drivers/usb/typec/tcpm/tcpm.c
+++ b/drivers/usb/typec/tcpm/tcpm.c
@@ -4551,12 +4551,17 @@  static void tcpm_snk_detach(struct tcpm_port *port)
 static int tcpm_acc_attach(struct tcpm_port *port)
 {
 	int ret;
+	enum typec_role role;
+	enum typec_data_role data;
 
 	if (port->attached)
 		return 0;
 
-	ret = tcpm_set_roles(port, true, TYPEC_SOURCE,
-			     tcpm_data_role_for_source(port));
+	role = tcpm_port_is_sink(port) ? TYPEC_SINK : TYPEC_SOURCE;
+	data = tcpm_port_is_sink(port) ? tcpm_data_role_for_sink(port)
+				       : tcpm_data_role_for_source(port);
+
+	ret = tcpm_set_roles(port, true, role, data);
 	if (ret < 0)
 		return ret;