RE: [PATCH v3 10/18] usb: typec: hd3ss3220: Give the connector fwnode to the port device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Guenter,

> -----Original Message-----
> From: Guenter Roeck <groeck7@xxxxxxxxx> On Behalf Of Guenter Roeck
> Sent: Saturday, November 2, 2019 4:11 PM
> To: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>; Greg Kroah-Hartman
> <gregkh@xxxxxxxxxxxxxxxxxxx>
> Cc: Ajay Gupta <ajayg@xxxxxxxxxx>; linux-usb@xxxxxxxxxxxxxxx; Biju Das
> <biju.das@xxxxxxxxxxxxxx>
> Subject: Re: [PATCH v3 10/18] usb: typec: hd3ss3220: Give the connector
> fwnode to the port device
> 
> On 10/25/19 1:23 AM, Heikki Krogerus wrote:
> > The driver already finds the node in order to get reference to the USB
> > role switch.
> >
> > Signed-off-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>
> > Tested-by: Biju Das <biju.das@xxxxxxxxxxxxxx>
> 
> The fusb302 driver retains the fwnode and calls fwnode_handle_put() in the
> remove function. Assuming this isn't necessary here,

It is not required. The purpose is  to get the role switch handle associated with the connecter node.
Once you get the role switch handle,  you don't need the connector handle any more. 

Cheers,
Biju

> Reviewed-by: Guenter Roeck <linux@xxxxxxxxxxxx>
> 
> > ---
> >   drivers/usb/typec/hd3ss3220.c | 12 +++++++++---
> >   1 file changed, 9 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/usb/typec/hd3ss3220.c
> > b/drivers/usb/typec/hd3ss3220.c index db09fa0d85f2..323dfa8160ab
> > 100644
> > --- a/drivers/usb/typec/hd3ss3220.c
> > +++ b/drivers/usb/typec/hd3ss3220.c
> > @@ -178,15 +178,17 @@ static int hd3ss3220_probe(struct i2c_client
> *client,
> >   		return -ENODEV;
> >
> >   	hd3ss3220->role_sw = fwnode_usb_role_switch_get(connector);
> > -	fwnode_handle_put(connector);
> > -	if (IS_ERR(hd3ss3220->role_sw))
> > -		return PTR_ERR(hd3ss3220->role_sw);
> > +	if (IS_ERR(hd3ss3220->role_sw)) {
> > +		ret = PTR_ERR(hd3ss3220->role_sw);
> > +		goto err_put_fwnode;
> > +	}
> >
> >   	typec_cap.prefer_role = TYPEC_NO_PREFERRED_ROLE;
> >   	typec_cap.driver_data = hd3ss3220;
> >   	typec_cap.type = TYPEC_PORT_DRP;
> >   	typec_cap.data = TYPEC_PORT_DRD;
> >   	typec_cap.ops = &hd3ss3220_ops;
> > +	typec_cap.fwnode = connector;
> >
> >   	hd3ss3220->port = typec_register_port(&client->dev, &typec_cap);
> >   	if (IS_ERR(hd3ss3220->port)) {
> > @@ -220,6 +222,8 @@ static int hd3ss3220_probe(struct i2c_client *client,
> >   	if (ret < 0)
> >   		goto err_unreg_port;
> >
> > +	fwnode_handle_put(connector);
> > +
> >   	dev_info(&client->dev, "probed revision=0x%x\n", ret);
> >
> >   	return 0;
> > @@ -227,6 +231,8 @@ static int hd3ss3220_probe(struct i2c_client *client,
> >   	typec_unregister_port(hd3ss3220->port);
> >   err_put_role:
> >   	usb_role_switch_put(hd3ss3220->role_sw);
> > +err_put_fwnode:
> > +	fwnode_handle_put(connector);
> >
> >   	return ret;
> >   }
> >





[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux