Re: [PATCHv3 1/5] usb: gadget: bind UDC by name passed via usb_gadget_driver structure

2015-03-10 Thread Ruslan Bilovol
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

2015-03-10 Thread Ruslan Bilovol
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

2015-02-18 Thread Sergei Shtylyov

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

2015-02-18 Thread Sergei Shtylyov

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/