RE: [PATCH 2/2] usb: typec: mux: Remove requirement for the "orientation-switch" device property

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

 



Hi
> -----Original Message-----
> From: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>
> Sent: Monday, May 31, 2021 4:26 PM
> To: Jun Li <jun.li@xxxxxxx>; Greg Kroah-Hartman
> <gregkh@xxxxxxxxxxxxxxxxxxx>
> Cc: Hans de Goede <hdegoede@xxxxxxxxxx>; linux-usb@xxxxxxxxxxxxxxx;
> linux-kernel@xxxxxxxxxxxxxxx
> Subject: Re: [PATCH 2/2] usb: typec: mux: Remove requirement for the
> "orientation-switch" device property
> 
> On Mon, May 31, 2021 at 10:57:04AM +0300, Heikki Krogerus wrote:
> > On Mon, May 31, 2021 at 10:24:35AM +0300, Heikki Krogerus wrote:
> > > On Fri, May 28, 2021 at 07:26:43AM +0000, Jun Li wrote:
> > > > Hi,
> > > > > -----Original Message-----
> > > > > From: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>
> > > > > Sent: Wednesday, May 26, 2021 11:36 PM
> > > > > To: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>; Hans de
> > > > > Goede <hdegoede@xxxxxxxxxx>; Jun Li <jun.li@xxxxxxx>
> > > > > Cc: linux-usb@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
> > > > > Subject: [PATCH 2/2] usb: typec: mux: Remove requirement for the
> > > > > "orientation-switch" device property
> > > > >
> > > > > The additional boolean device property "orientation-switch"
> > > > > is not needed when the connection is described with device
> > > > > graph, so removing the check and the requirement for it.
> > > > >
> > > > > Signed-off-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>
> > > > > ---
> > > > >  drivers/usb/typec/mux.c | 3 ---
> > > > >  1 file changed, 3 deletions(-)
> > > > >
> > > > > diff --git a/drivers/usb/typec/mux.c b/drivers/usb/typec/mux.c
> > > > > index e40a555724fb6..603f3e698cc0b 100644
> > > > > --- a/drivers/usb/typec/mux.c
> > > > > +++ b/drivers/usb/typec/mux.c
> > > > > @@ -30,9 +30,6 @@ static void *typec_switch_match(struct
> > > > > fwnode_handle *fwnode, const char *id,  {
> > > > >  	struct device *dev;
> > > > >
> > > > > -	if (id && !fwnode_property_present(fwnode, id))
> > > > > -		return NULL;
> > > > > -
> > > >
> > > > May this change the result of fwnode_connection_find_match() if
> > > > there are multiple remote-endpoint node?
> > > >
> > > > After the 2 patches change, typec_switch_match() will never return
> > > > NULL, so
> > > >
> > > >   17 static void *
> > > >   18 fwnode_graph_devcon_match(struct fwnode_handle *fwnode, const
> char *con_id,
> > > >   19                           void *data, devcon_match_fn_t match)
> > > >   20 {
> > > >   21         struct fwnode_handle *node;
> > > >   22         struct fwnode_handle *ep;
> > > >   23         void *ret;
> > > >   24
> > > >   25         fwnode_graph_for_each_endpoint(fwnode, ep) {
> > > >   26                 node = fwnode_graph_get_remote_port_parent(ep);
> > > >   27                 if (!fwnode_device_is_available(node))
> > > >   28                         continue;
> > > >   29
> > > >   30                 ret = match(node, con_id, data);// ret can't be
> NULL;
> > > >   31                 fwnode_handle_put(node);
> > > >   32                 if (ret) {
> > > > 							 /*
> > > > 							  * So loop will go to here and stop
> > > > 							  * checking next ep, even this ep
> > > > 							  * actually is not for typec_switch
> > > > 							  */
> > > >   33                         fwnode_handle_put(ep);
> > > >   34                         return ret;
> > > >   35                 }
> > > >   36         }
> > > >   37         return NULL;
> > > >   38 }
> > > >
> > > > fwnode_graph_devcon_match() Will return ERR_PTR(-EPROBE_DEFER)
> > > > even this ep's remote parent already probed but it's not for
> > > > typec_switch.
> > >
> > > You are correct. With device graph I guess we really always need the
> > > extra device property after all.
> > >
> > > So let's forget about this one.
> >
> > Oh no. This patch just landed into Greg's usb-next. I'll prepare the
> > revert. I'm sorry about this.
> 
> Actually, if we always need that extra (boolean) device property to identify
> the device class when OF graph is used, 

Looks like yes, as we need a way to know if the current fwnode
is for the target device we are looking for, to return probe
defer correctly.

> shouldn't we just do that always
> in fwnode_graph_devcon_match()?

This depends on if we want to limit this to be a boolean property
(to mark this is the target fwnode), or make it to be more generic
so user can define it in its ->match().

Now there are only 2 users of it, role switch and typec mux, both work
as a boolean property for con_id.

Li Jun
> 
> diff --git a/drivers/base/property.c b/drivers/base/property.c index
> 1421e9548857b..238da64375bb1 100644
> --- a/drivers/base/property.c
> +++ b/drivers/base/property.c
> @@ -1263,6 +1263,13 @@ fwnode_graph_devcon_match(struct fwnode_handle
> *fwnode, const char *con_id,
>                 if (!fwnode_device_is_available(node))
>                         continue;
> 
> +               /*
> +                * With device graph @con_id is expected to be the name of
> the
> +                * "device class" of the fwnode.
> +                */
> +               if (con_id && !fwnode_property_present(node, con_id))
> +                       continue;
> +
>                 ret = match(node, con_id, data);
>                 fwnode_handle_put(node);
>                 if (ret) {
> 
> thanks,
> 
> --
> heikki




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

  Powered by Linux