Message ID | 20190130160259.46919-8-heikki.krogerus@linux.intel.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | device connection: Add support for device graphs | expand |
On Wed, Jan 30, 2019 at 6:03 PM Heikki Krogerus <heikki.krogerus@linux.intel.com> wrote: > > When the connections are defined in firmware, struct > device_connection will have the fwnode member pointing to > the device node (struct fwnode_handle) of the requested > device, and the endpoint will not be used at all in that > case. > + /* > + * FIXME: Check does the fwnode supports the requested SVID. If it does > + * we need to return ERR_PTR(-PROBE_DEFER) when there is no device. > + */ > + if (con->fwnode) > + return class_find_device(typec_class, NULL, con->fwnode, > + typec_port_fwnode_match); > + > + dev = class_find_device(typec_class, NULL, con->endpoint[ep], > + typec_port_name_match); > + > + return dev ? dev : ERR_PTR(-EPROBE_DEFER); Just to be clear, this one takes a reference on dev. Is it taken into account?
On Wed, Jan 30, 2019 at 06:51:56PM +0200, Andy Shevchenko wrote: > On Wed, Jan 30, 2019 at 6:03 PM Heikki Krogerus > <heikki.krogerus@linux.intel.com> wrote: > > > > When the connections are defined in firmware, struct > > device_connection will have the fwnode member pointing to > > the device node (struct fwnode_handle) of the requested > > device, and the endpoint will not be used at all in that > > case. > > > + /* > > + * FIXME: Check does the fwnode supports the requested SVID. If it does > > + * we need to return ERR_PTR(-PROBE_DEFER) when there is no device. > > + */ > > + if (con->fwnode) > > + return class_find_device(typec_class, NULL, con->fwnode, > > + typec_port_fwnode_match); > > + > > + dev = class_find_device(typec_class, NULL, con->endpoint[ep], > > + typec_port_name_match); > > + > > + return dev ? dev : ERR_PTR(-EPROBE_DEFER); > > Just to be clear, this one takes a reference on dev. Is it taken into account? Yes. That is what we want it to do. thanks,
Hi Andy, On Thu, Jan 31, 2019 at 03:35:37PM +0200, Heikki Krogerus wrote: > On Wed, Jan 30, 2019 at 06:51:56PM +0200, Andy Shevchenko wrote: > > On Wed, Jan 30, 2019 at 6:03 PM Heikki Krogerus > > <heikki.krogerus@linux.intel.com> wrote: > > > > > > When the connections are defined in firmware, struct > > > device_connection will have the fwnode member pointing to > > > the device node (struct fwnode_handle) of the requested > > > device, and the endpoint will not be used at all in that > > > case. > > > > > + /* > > > + * FIXME: Check does the fwnode supports the requested SVID. If it does > > > + * we need to return ERR_PTR(-PROBE_DEFER) when there is no device. > > > + */ > > > + if (con->fwnode) > > > + return class_find_device(typec_class, NULL, con->fwnode, > > > + typec_port_fwnode_match); > > > + > > > + dev = class_find_device(typec_class, NULL, con->endpoint[ep], > > > + typec_port_name_match); > > > + > > > + return dev ? dev : ERR_PTR(-EPROBE_DEFER); > > > > Just to be clear, this one takes a reference on dev. Is it taken into account? > > Yes. That is what we want it to do. Gentle ping. Is the series OK? thanks,
On Mon, Feb 11, 2019 at 10:39 AM Heikki Krogerus <heikki.krogerus@linux.intel.com> wrote: > On Thu, Jan 31, 2019 at 03:35:37PM +0200, Heikki Krogerus wrote: > > On Wed, Jan 30, 2019 at 06:51:56PM +0200, Andy Shevchenko wrote: > > > On Wed, Jan 30, 2019 at 6:03 PM Heikki Krogerus > > > <heikki.krogerus@linux.intel.com> wrote: > > > > > > > > When the connections are defined in firmware, struct > > > > device_connection will have the fwnode member pointing to > > > > the device node (struct fwnode_handle) of the requested > > > > device, and the endpoint will not be used at all in that > > > > case. > > > > > > > + /* > > > > + * FIXME: Check does the fwnode supports the requested SVID. If it does > > > > + * we need to return ERR_PTR(-PROBE_DEFER) when there is no device. > > > > + */ > > > > + if (con->fwnode) > > > > + return class_find_device(typec_class, NULL, con->fwnode, > > > > + typec_port_fwnode_match); > > > > + > > > > + dev = class_find_device(typec_class, NULL, con->endpoint[ep], > > > > + typec_port_name_match); > > > > + > > > > + return dev ? dev : ERR_PTR(-EPROBE_DEFER); > > > > > > Just to be clear, this one takes a reference on dev. Is it taken into account? > > > > Yes. That is what we want it to do. > > Gentle ping. Is the series OK? From my prospective it's okay, so, FWIW Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c index f50278dbef59..88adf0eaad34 100644 --- a/drivers/usb/typec/class.c +++ b/drivers/usb/typec/class.c @@ -9,6 +9,7 @@ #include <linux/device.h> #include <linux/module.h> #include <linux/mutex.h> +#include <linux/property.h> #include <linux/slab.h> #include "bus.h" @@ -204,15 +205,32 @@ static void typec_altmode_put_partner(struct altmode *altmode) put_device(&adev->dev); } -static int __typec_port_match(struct device *dev, const void *name) +static int typec_port_fwnode_match(struct device *dev, const void *fwnode) +{ + return dev_fwnode(dev) == fwnode; +} + +static int typec_port_name_match(struct device *dev, const void *name) { return !strcmp((const char *)name, dev_name(dev)); } static void *typec_port_match(struct device_connection *con, int ep, void *data) { - return class_find_device(typec_class, NULL, con->endpoint[ep], - __typec_port_match); + struct device *dev; + + /* + * FIXME: Check does the fwnode supports the requested SVID. If it does + * we need to return ERR_PTR(-PROBE_DEFER) when there is no device. + */ + if (con->fwnode) + return class_find_device(typec_class, NULL, con->fwnode, + typec_port_fwnode_match); + + dev = class_find_device(typec_class, NULL, con->endpoint[ep], + typec_port_name_match); + + return dev ? dev : ERR_PTR(-EPROBE_DEFER); } struct typec_altmode *
When the connections are defined in firmware, struct device_connection will have the fwnode member pointing to the device node (struct fwnode_handle) of the requested device, and the endpoint will not be used at all in that case. Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> --- drivers/usb/typec/class.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-)