lkml.org 
[lkml]   [2015]   [Feb]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [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.bilovol@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



    \
     
     \ /
      Last update: 2015-02-18 13:21    [W:4.196 / U:0.360 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site