On Thu, Sep 06 2012, Sebastian Andrzej Siewior wrote:
> This patch removes the global variable composite in composite.c.
> The private data which was saved there is now passed via an additional
> argument to the bind() function in struct usb_gadget_driver.
>
> Only the "old-style" UDC drivers have to be touched here, new style are
> doing it right because this change is made in udc-core.
>
> Signed-off-by: Sebastian Andrzej Siewior <bige...@linutronix.de>

Acked-by: Michal Nazarewicz <min...@mina86.com>

Two comments inline:

> diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
> index 2a345f2..5615675 100644
> --- a/drivers/usb/gadget/composite.c
> +++ b/drivers/usb/gadget/composite.c
> @@ -31,8 +31,6 @@
>  /* big enough to hold our biggest descriptor */
>  #define USB_BUFSIZ   1024
>  
> -static struct usb_composite_driver *composite;
> -
>  /* Some systems will need runtime overrides for the  product identifiers
>   * published in the device descriptor, either numbers or strings or both.
>   * String parameters are in UTF-8 (superset of ASCII's 7 bit characters).
> @@ -889,6 +887,7 @@ static int lookup_string(
>  static int get_string(struct usb_composite_dev *cdev,
>               void *buf, u16 language, int id)
>  {
> +     struct usb_composite_driver     *cdriver = cdev->driver;

I still think you should use “composite” for the variable name as this
would get rid of a lot of the following hunks:

>       struct usb_configuration        *c;
>       struct usb_function             *f;
>       int                             len;
> @@ -907,7 +906,7 @@ static int get_string(struct usb_composite_dev *cdev,
>               memset(s, 0, 256);
>               s->bDescriptorType = USB_DT_STRING;
>  
> -             sp = composite->strings;
> +             sp = cdriver->strings;
>               if (sp)
>                       collect_langs(sp, s->wData);
>  
> @@ -936,12 +935,12 @@ static int get_string(struct usb_composite_dev *cdev,
>        * check if the string has not been overridden.
>        */
>       if (cdev->manufacturer_override == id)
> -             str = iManufacturer ?: composite->iManufacturer ?:
> +             str = iManufacturer ?: cdriver->iManufacturer ?:
>                       composite_manufacturer;
>       else if (cdev->product_override == id)
> -             str = iProduct ?: composite->iProduct;
> +             str = iProduct ?: cdriver->iProduct;
>       else if (cdev->serial_override == id)
> -             str = iSerialNumber ?: composite->iSerialNumber;
> +             str = iSerialNumber ?: cdriver->iSerialNumber;
>       else
>               str = NULL;
>       if (str) {
> @@ -956,8 +955,8 @@ static int get_string(struct usb_composite_dev *cdev,
>        * table we're told about.  These lookups are infrequent;
>        * simpler-is-better here.
>        */
> -     if (composite->strings) {
> -             len = lookup_string(composite->strings, buf, language, id);
> +     if (cdriver->strings) {
> +             len = lookup_string(cdriver->strings, buf, language, id);
>               if (len > 0)
>                       return len;
>       }
> @@ -1359,8 +1358,8 @@ static void composite_disconnect(struct usb_gadget 
> *gadget)
>       spin_lock_irqsave(&cdev->lock, flags);
>       if (cdev->config)
>               reset_config(cdev);
> -     if (composite->disconnect)
> -             composite->disconnect(cdev);
> +     if (cdev->driver->disconnect)
> +             cdev->driver->disconnect(cdev);
>       spin_unlock_irqrestore(&cdev->lock, flags);
>  }
>  
> @@ -1396,8 +1395,8 @@ composite_unbind(struct usb_gadget *gadget)
>                               struct usb_configuration, list);
>               remove_config(cdev, c);
>       }
> -     if (composite->unbind)
> -             composite->unbind(cdev);
> +     if (cdev->driver->unbind)
> +             cdev->driver->unbind(cdev);
>  
>       if (cdev->req) {
>               kfree(cdev->req->buf);
> @@ -1406,7 +1405,6 @@ composite_unbind(struct usb_gadget *gadget)
>       device_remove_file(&gadget->dev, &dev_attr_suspended);
>       kfree(cdev);
>       set_gadget_data(gadget, NULL);
> -     composite = NULL;
>  }
>  
>  static u8 override_id(struct usb_composite_dev *cdev, u8 *desc)
> @@ -1422,9 +1420,16 @@ static u8 override_id(struct usb_composite_dev *cdev, 
> u8 *desc)
>       return *desc;
>  }
>  
> -static int composite_bind(struct usb_gadget *gadget)
> +static struct usb_composite_driver *to_cdriver(struct usb_gadget_driver 
> *gdrv)
> +{
> +     return container_of(gdrv, struct usb_composite_driver, gadget_driver);
> +}
> +
> +static int composite_bind(struct usb_gadget *gadget,
> +             struct usb_gadget_driver *gdriver)
>  {
>       struct usb_composite_dev        *cdev;
> +     struct usb_composite_driver     *cdriver = to_cdriver(gdriver);

Same here.

>       int                             status = -ENOMEM;
>  
>       cdev = kzalloc(sizeof *cdev, GFP_KERNEL);
> @@ -1447,7 +1452,7 @@ static int composite_bind(struct usb_gadget *gadget)
>       gadget->ep0->driver_data = cdev;
>  
>       cdev->bufsiz = USB_BUFSIZ;
> -     cdev->driver = composite;
> +     cdev->driver = cdriver;
>  
>       /*
>        * As per USB compliance update, a device that is actively drawing
> @@ -1467,11 +1472,11 @@ static int composite_bind(struct usb_gadget *gadget)
>        * serial number), register function drivers, potentially update
>        * power state and consumption, etc
>        */
> -     status = composite->bind(cdev);
> +     status = cdriver->bind(cdev);
>       if (status < 0)
>               goto fail;
>  
> -     cdev->desc = *composite->dev;
> +     cdev->desc = *cdriver->dev;
>  
>       /* standardized runtime overrides for device ID data */
>       if (idVendor)
> @@ -1489,7 +1494,7 @@ static int composite_bind(struct usb_gadget *gadget)
>  
>       /* string overrides */
>       if (iManufacturer || !cdev->desc.iManufacturer) {
> -             if (!iManufacturer && !composite->iManufacturer &&
> +             if (!iManufacturer && !cdriver->iManufacturer &&
>                   !*composite_manufacturer)
>                       snprintf(composite_manufacturer,
>                                sizeof composite_manufacturer,
> @@ -1502,17 +1507,17 @@ static int composite_bind(struct usb_gadget *gadget)
>                       override_id(cdev, &cdev->desc.iManufacturer);
>       }
>  
> -     if (iProduct || (!cdev->desc.iProduct && composite->iProduct))
> +     if (iProduct || (!cdev->desc.iProduct && cdriver->iProduct))
>               cdev->product_override =
>                       override_id(cdev, &cdev->desc.iProduct);
>  
>       if (iSerialNumber ||
> -         (!cdev->desc.iSerialNumber && composite->iSerialNumber))
> +         (!cdev->desc.iSerialNumber && cdriver->iSerialNumber))
>               cdev->serial_override =
>                       override_id(cdev, &cdev->desc.iSerialNumber);
>  
>       /* has userspace failed to provide a serial number? */
> -     if (composite->needs_serial && !cdev->desc.iSerialNumber)
> +     if (cdriver->needs_serial && !cdev->desc.iSerialNumber)
>               WARNING(cdev, "userspace failed to provide iSerialNumber\n");
>  
>       /* finish up */
> @@ -1520,7 +1525,7 @@ static int composite_bind(struct usb_gadget *gadget)
>       if (status)
>               goto fail;
>  
> -     INFO(cdev, "%s ready\n", composite->name);
> +     INFO(cdev, "%s ready\n", cdriver->name);
>       return 0;
>  
>  fail:
> @@ -1546,8 +1551,8 @@ composite_suspend(struct usb_gadget *gadget)
>                               f->suspend(f);
>               }
>       }
> -     if (composite->suspend)
> -             composite->suspend(cdev);
> +     if (cdev->driver->suspend)
> +             cdev->driver->suspend(cdev);
>  
>       cdev->suspended = 1;
>  
> @@ -1565,8 +1570,8 @@ composite_resume(struct usb_gadget *gadget)
>        * suspend/resume callbacks?
>        */
>       DBG(cdev, "resume\n");
> -     if (composite->resume)
> -             composite->resume(cdev);
> +     if (cdev->driver->resume)
> +             cdev->driver->resume(cdev);
>       if (cdev->config) {
>               list_for_each_entry(f, &cdev->config->functions, list) {
>                       if (f->resume)

-- 
Best regards,                                         _     _
.o. | Liege of Serenely Enlightened Majesty of      o' \,=./ `o
..o | Computer Science,  Michał “mina86” Nazarewicz    (o o)
ooo +----<email/xmpp: m...@google.com>--------------ooO--(_)--Ooo--

Attachment: pgphYkaPmHnD5.pgp
Description: PGP signature

Reply via email to