Re: [PATCHv3 1/5] usb: gadget: bind UDC by name passed via usb_gadget_driver structure
Hi Sergei, On Wed, Feb 18, 2015 at 2:05 PM, Sergei Shtylyov wrote: > Hello. > > On 2/18/2015 12:17 AM, Ruslan Bilovol wrote: > >> Introduce new 'udc_name' member to usb_gadget_driver structure. >> The 'udc_name' is a name of UDC that usb_gadget_driver should >> be bound to. If udc_name is NULL, it will be bound to any >> available UDC. > > >> Signed-off-by: Ruslan Bilovol >> --- >> drivers/usb/gadget/udc/udc-core.c | 25 - >> include/linux/usb/gadget.h| 4 >> 2 files changed, 24 insertions(+), 5 deletions(-) > > >> diff --git a/drivers/usb/gadget/udc/udc-core.c >> b/drivers/usb/gadget/udc/udc-core.c >> index 5a81cb0..e1079e08 100644 >> --- a/drivers/usb/gadget/udc/udc-core.c >> +++ b/drivers/usb/gadget/udc/udc-core.c >> @@ -440,21 +440,36 @@ EXPORT_SYMBOL_GPL(usb_udc_attach_driver); >> int usb_gadget_probe_driver(struct usb_gadget_driver *driver) >> { >> struct usb_udc *udc = NULL; >> - int ret; >> + int ret = -ENODEV; >> >> if (!driver || !driver->bind || !driver->setup) >> return -EINVAL; >> >> mutex_lock(_lock); >> - list_for_each_entry(udc, _list, list) { >> - /* For now we take the first one */ >> - if (!udc->driver) >> + if (driver->udc_name) { >> + list_for_each_entry(udc, _list, list) { >> + ret = strcmp(driver->udc_name, >> dev_name(>dev)); >> + if (!ret) >> + break; >> + } >> + if (ret) >> + ret = -ENODEV; >> + else if (udc->driver) >> + ret = -EBUSY; >> + else >> goto found; >> + } else { >> + list_for_each_entry(udc, _list, list) { >> + /* For now we take the first one */ >> + if (!udc->driver) >> + goto found; >> + } >> + ret = -ENODEV; > > >Already assigned the same value by the initializer. Thanks for pointing to this, will be fixed in next patch version > >> } >> >> pr_debug("couldn't find an available UDC\n"); >> mutex_unlock(_lock); >> - return -ENODEV; >> + return ret; >> found: >> ret = udc_bind_to_driver(udc, driver); >> mutex_unlock(_lock); > > [...] > > WBR, Sergei > Best regards, Ruslan -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCHv3 1/5] usb: gadget: bind UDC by name passed via usb_gadget_driver structure
Hi Sergei, On Wed, Feb 18, 2015 at 2:05 PM, Sergei Shtylyov sergei.shtyl...@cogentembedded.com wrote: Hello. On 2/18/2015 12:17 AM, Ruslan Bilovol wrote: Introduce new 'udc_name' member to usb_gadget_driver structure. The 'udc_name' is a name of UDC that usb_gadget_driver should be bound to. If udc_name is NULL, it will be bound to any available UDC. Signed-off-by: Ruslan Bilovol ruslan.bilo...@gmail.com --- drivers/usb/gadget/udc/udc-core.c | 25 - include/linux/usb/gadget.h| 4 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c index 5a81cb0..e1079e08 100644 --- a/drivers/usb/gadget/udc/udc-core.c +++ b/drivers/usb/gadget/udc/udc-core.c @@ -440,21 +440,36 @@ EXPORT_SYMBOL_GPL(usb_udc_attach_driver); int usb_gadget_probe_driver(struct usb_gadget_driver *driver) { struct usb_udc *udc = NULL; - int ret; + int ret = -ENODEV; if (!driver || !driver-bind || !driver-setup) return -EINVAL; mutex_lock(udc_lock); - list_for_each_entry(udc, udc_list, list) { - /* For now we take the first one */ - if (!udc-driver) + if (driver-udc_name) { + list_for_each_entry(udc, udc_list, list) { + ret = strcmp(driver-udc_name, dev_name(udc-dev)); + if (!ret) + break; + } + if (ret) + ret = -ENODEV; + else if (udc-driver) + ret = -EBUSY; + else goto found; + } else { + list_for_each_entry(udc, udc_list, list) { + /* For now we take the first one */ + if (!udc-driver) + goto found; + } + ret = -ENODEV; Already assigned the same value by the initializer. Thanks for pointing to this, will be fixed in next patch version } pr_debug(couldn't find an available UDC\n); mutex_unlock(udc_lock); - return -ENODEV; + return ret; found: ret = udc_bind_to_driver(udc, driver); mutex_unlock(udc_lock); [...] WBR, Sergei Best regards, Ruslan -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCHv3 1/5] usb: gadget: bind UDC by name passed via usb_gadget_driver structure
Hello. On 2/18/2015 12:17 AM, Ruslan Bilovol wrote: Introduce new 'udc_name' member to usb_gadget_driver structure. The 'udc_name' is a name of UDC that usb_gadget_driver should be bound to. If udc_name is NULL, it will be bound to any available UDC. Signed-off-by: Ruslan Bilovol --- drivers/usb/gadget/udc/udc-core.c | 25 - include/linux/usb/gadget.h| 4 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c index 5a81cb0..e1079e08 100644 --- a/drivers/usb/gadget/udc/udc-core.c +++ b/drivers/usb/gadget/udc/udc-core.c @@ -440,21 +440,36 @@ EXPORT_SYMBOL_GPL(usb_udc_attach_driver); int usb_gadget_probe_driver(struct usb_gadget_driver *driver) { struct usb_udc *udc = NULL; - int ret; + int ret = -ENODEV; if (!driver || !driver->bind || !driver->setup) return -EINVAL; mutex_lock(_lock); - list_for_each_entry(udc, _list, list) { - /* For now we take the first one */ - if (!udc->driver) + if (driver->udc_name) { + list_for_each_entry(udc, _list, list) { + ret = strcmp(driver->udc_name, dev_name(>dev)); + if (!ret) + break; + } + if (ret) + ret = -ENODEV; + else if (udc->driver) + ret = -EBUSY; + else goto found; + } else { + list_for_each_entry(udc, _list, list) { + /* For now we take the first one */ + if (!udc->driver) + goto found; + } + ret = -ENODEV; Already assigned the same value by the initializer. } pr_debug("couldn't find an available UDC\n"); mutex_unlock(_lock); - return -ENODEV; + return ret; found: ret = udc_bind_to_driver(udc, driver); mutex_unlock(_lock); [...] WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCHv3 1/5] usb: gadget: bind UDC by name passed via usb_gadget_driver structure
Hello. On 2/18/2015 12:17 AM, Ruslan Bilovol wrote: Introduce new 'udc_name' member to usb_gadget_driver structure. The 'udc_name' is a name of UDC that usb_gadget_driver should be bound to. If udc_name is NULL, it will be bound to any available UDC. Signed-off-by: Ruslan Bilovol ruslan.bilo...@gmail.com --- drivers/usb/gadget/udc/udc-core.c | 25 - include/linux/usb/gadget.h| 4 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c index 5a81cb0..e1079e08 100644 --- a/drivers/usb/gadget/udc/udc-core.c +++ b/drivers/usb/gadget/udc/udc-core.c @@ -440,21 +440,36 @@ EXPORT_SYMBOL_GPL(usb_udc_attach_driver); int usb_gadget_probe_driver(struct usb_gadget_driver *driver) { struct usb_udc *udc = NULL; - int ret; + int ret = -ENODEV; if (!driver || !driver-bind || !driver-setup) return -EINVAL; mutex_lock(udc_lock); - list_for_each_entry(udc, udc_list, list) { - /* For now we take the first one */ - if (!udc-driver) + if (driver-udc_name) { + list_for_each_entry(udc, udc_list, list) { + ret = strcmp(driver-udc_name, dev_name(udc-dev)); + if (!ret) + break; + } + if (ret) + ret = -ENODEV; + else if (udc-driver) + ret = -EBUSY; + else goto found; + } else { + list_for_each_entry(udc, udc_list, list) { + /* For now we take the first one */ + if (!udc-driver) + goto found; + } + ret = -ENODEV; Already assigned the same value by the initializer. } pr_debug(couldn't find an available UDC\n); mutex_unlock(udc_lock); - return -ENODEV; + return ret; found: ret = udc_bind_to_driver(udc, driver); mutex_unlock(udc_lock); [...] WBR, Sergei -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/