usb: gadget: replace usb_gadget::is_dualspeed with max_speed
authorMichal Nazarewicz <mina86@mina86.com>
Sat, 19 Nov 2011 17:27:37 +0000 (18:27 +0100)
committerFelipe Balbi <balbi@ti.com>
Mon, 12 Dec 2011 09:45:11 +0000 (11:45 +0200)
This commit replaces usb_gadget's is_dualspeed field with
a max_speed field.

[ balbi@ti.com : Fixed DWC3 driver ]

Signed-off-by: Michal Nazarewicz <mina86@mina86.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
25 files changed:
Documentation/feature-removal-schedule.txt
drivers/usb/dwc3/gadget.c
drivers/usb/gadget/amd5536udc.c
drivers/usb/gadget/atmel_usba_udc.c
drivers/usb/gadget/ci13xxx_udc.c
drivers/usb/gadget/dummy_hcd.c
drivers/usb/gadget/epautoconf.c
drivers/usb/gadget/fsl_udc_core.c
drivers/usb/gadget/fusb300_udc.c
drivers/usb/gadget/goku_udc.c
drivers/usb/gadget/langwell_udc.c
drivers/usb/gadget/m66592-udc.c
drivers/usb/gadget/mv_udc_core.c
drivers/usb/gadget/net2272.c
drivers/usb/gadget/net2280.c
drivers/usb/gadget/omap_udc.c
drivers/usb/gadget/pch_udc.c
drivers/usb/gadget/printer.c
drivers/usb/gadget/r8a66597-udc.c
drivers/usb/gadget/s3c-hsotg.c
drivers/usb/gadget/s3c-hsudc.c
drivers/usb/gadget/udc-core.c
drivers/usb/musb/musb_gadget.c
drivers/usb/renesas_usbhs/mod_gadget.c
include/linux/usb/gadget.h

index 3d849122b5b1bf345eac90465c988ff6bf1a0b68..a7e4ac1202d694d8ce3cf350915b646b2bd45a89 100644 (file)
@@ -535,6 +535,20 @@ Why:    In 3.0, we can now autodetect internal 3G device and already have
        information log when acer-wmi initial.
 Who:    Lee, Chun-Yi <jlee@novell.com>
 
+---------------------------
+
+What:  /sys/devices/platform/_UDC_/udc/_UDC_/is_dualspeed file and
+       is_dualspeed line in /sys/devices/platform/ci13xxx_*/udc/device file.
+When:  3.8
+Why:   The is_dualspeed file is superseded by maximum_speed in the same
+       directory and is_dualspeed line in device file is superseded by
+       max_speed line in the same file.
+
+       The maximum_speed/max_speed specifies maximum speed supported by UDC.
+       To check if dualspeeed is supported, check if the value is >= 3.
+       Various possible speeds are defined in <linux/usb/ch9.h>.
+Who:   Michal Nazarewicz <mina86@mina86.com>
+
 ----------------------------
 
 What:  The XFS nodelaylog mount option
index 25dbd8614e7226ccf915bfa30817226a10272f3c..580272042a33be9125a4dfc729425f81b7ec769f 100644 (file)
@@ -1986,7 +1986,7 @@ int __devinit dwc3_gadget_init(struct dwc3 *dwc)
        dev_set_name(&dwc->gadget.dev, "gadget");
 
        dwc->gadget.ops                 = &dwc3_gadget_ops;
-       dwc->gadget.is_dualspeed        = true;
+       dwc->gadget.max_speed           = USB_SPEED_SUPER;
        dwc->gadget.speed               = USB_SPEED_UNKNOWN;
        dwc->gadget.dev.parent          = dwc->dev;
 
index 45f422ac103fb61678633ee08241b33b7dfe235a..e69cdbca80175c9e319a01d564659220ec2e4b69 100644 (file)
@@ -3349,7 +3349,7 @@ static int udc_probe(struct udc *dev)
        dev_set_name(&dev->gadget.dev, "gadget");
        dev->gadget.dev.release = gadget_release;
        dev->gadget.name = name;
-       dev->gadget.is_dualspeed = 1;
+       dev->gadget.max_speed = USB_SPEED_HIGH;
 
        /* init registers, interrupts, ... */
        startup_registers(dev);
index 271a9d873608478477240547161044abaec6e1ec..e2fb6d583bd91a9b849da93224ef002bbb03f683 100644 (file)
@@ -1038,7 +1038,7 @@ static struct usba_udc the_udc = {
        .gadget = {
                .ops            = &usba_udc_ops,
                .ep_list        = LIST_HEAD_INIT(the_udc.gadget.ep_list),
-               .is_dualspeed   = 1,
+               .max_speed      = USB_SPEED_HIGH,
                .name           = "atmel_usba_udc",
                .dev    = {
                        .init_name      = "gadget",
index 8956a2448b33857aed708194064946581884b36d..9767d9170fbd687f9526084d5f254427a19221e1 100644 (file)
@@ -766,8 +766,11 @@ static ssize_t show_device(struct device *dev, struct device_attribute *attr,
 
        n += scnprintf(buf + n, PAGE_SIZE - n, "speed             = %d\n",
                       gadget->speed);
+       n += scnprintf(buf + n, PAGE_SIZE - n, "max_speed         = %d\n",
+                      gadget->max_speed);
+       /* TODO: Scheduled for removal in 3.8. */
        n += scnprintf(buf + n, PAGE_SIZE - n, "is_dualspeed      = %d\n",
-                      gadget->is_dualspeed);
+                      gadget_is_dualspeed(gadget));
        n += scnprintf(buf + n, PAGE_SIZE - n, "is_otg            = %d\n",
                       gadget->is_otg);
        n += scnprintf(buf + n, PAGE_SIZE - n, "is_a_peripheral   = %d\n",
@@ -2880,7 +2883,7 @@ static int udc_probe(struct ci13xxx_udc_driver *driver, struct device *dev,
 
        udc->gadget.ops          = &usb_gadget_ops;
        udc->gadget.speed        = USB_SPEED_UNKNOWN;
-       udc->gadget.is_dualspeed = 1;
+       udc->gadget.max_speed    = USB_SPEED_HIGH;
        udc->gadget.is_otg       = 0;
        udc->gadget.name         = driver->name;
 
index ab8f1b488d549c10e1eabcda52bc59eaf17979f1..cf235d84d8b700c2bdd2990d2167619ae0e73eaa 100644 (file)
@@ -977,7 +977,7 @@ static int dummy_udc_probe (struct platform_device *pdev)
 
        dum->gadget.name = gadget_name;
        dum->gadget.ops = &dummy_ops;
-       dum->gadget.is_dualspeed = 1;
+       dum->gadget.max_speed = USB_SPEED_SUPER;
 
        dev_set_name(&dum->gadget.dev, "gadget");
        dum->gadget.dev.parent = &pdev->dev;
index 596a0b464e61f069f93c8278a3c8193ab44a7873..38bcbfb91f62a48fbaab6570ca79e8df9a199faa 100644 (file)
@@ -152,7 +152,7 @@ ep_matches (
        switch (type) {
        case USB_ENDPOINT_XFER_INT:
                /* INT:  limit 64 bytes full speed, 1024 high/super speed */
-               if (!gadget->is_dualspeed && max > 64)
+               if (!gadget_is_dualspeed(gadget) && max > 64)
                        return 0;
                /* FALLTHROUGH */
 
@@ -160,12 +160,12 @@ ep_matches (
                /* ISO:  limit 1023 bytes full speed, 1024 high/super speed */
                if (ep->maxpacket < max)
                        return 0;
-               if (!gadget->is_dualspeed && max > 1023)
+               if (!gadget_is_dualspeed(gadget) && max > 1023)
                        return 0;
 
                /* BOTH:  "high bandwidth" works only at high speed */
                if ((desc->wMaxPacketSize & cpu_to_le16(3<<11))) {
-                       if (!gadget->is_dualspeed)
+                       if (!gadget_is_dualspeed(gadget))
                                return 0;
                        /* configure your hardware with enough buffering!! */
                }
index dd28ef3def71f394f281b70f8ee2335b629f42e6..6de8ec75381808829fcec0fff54fcac58939d8a8 100644 (file)
@@ -2525,7 +2525,7 @@ static int __init fsl_udc_probe(struct platform_device *pdev)
 
        /* Setup gadget structure */
        udc_controller->gadget.ops = &fsl_gadget_ops;
-       udc_controller->gadget.is_dualspeed = 1;
+       udc_controller->gadget.max_speed = USB_SPEED_HIGH;
        udc_controller->gadget.ep0 = &udc_controller->eps[0].ep;
        INIT_LIST_HEAD(&udc_controller->gadget.ep_list);
        udc_controller->gadget.speed = USB_SPEED_UNKNOWN;
index 74da206c84060c7226a717a5a4ec76309fddc8d5..6e32a60ab3b7f2ef681dc5b8e5279c70d35e325c 100644 (file)
@@ -1463,7 +1463,7 @@ static int __init fusb300_probe(struct platform_device *pdev)
 
        dev_set_name(&fusb300->gadget.dev, "gadget");
 
-       fusb300->gadget.is_dualspeed = 1;
+       fusb300->gadget.max_speed = USB_SPEED_HIGH;
        fusb300->gadget.dev.parent = &pdev->dev;
        fusb300->gadget.dev.dma_mask = pdev->dev.dma_mask;
        fusb300->gadget.dev.release = pdev->dev.release;
index 7f87805cddc427bb9003c9dcb62a85ab7a153486..ab9c924eee763516ac6c44f68d3da721e24a13bb 100644 (file)
@@ -1796,6 +1796,7 @@ static int goku_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        spin_lock_init(&dev->lock);
        dev->pdev = pdev;
        dev->gadget.ops = &goku_ops;
+       dev->gadget.max_speed = USB_SPEED_FULL;
 
        /* the "gadget" abstracts/virtualizes the controller */
        dev_set_name(&dev->gadget.dev, "gadget");
index c9fa3bf5b37769963ac3e2ccdc1f1b8e6a479369..fa0fcc11263fb8b6a73d21bcdbe7ba3f168e19dc 100644 (file)
@@ -3267,7 +3267,7 @@ static int langwell_udc_probe(struct pci_dev *pdev,
        dev->gadget.ep0 = &dev->ep[0].ep;       /* gadget ep0 */
        INIT_LIST_HEAD(&dev->gadget.ep_list);   /* ep_list */
        dev->gadget.speed = USB_SPEED_UNKNOWN;  /* speed */
-       dev->gadget.is_dualspeed = 1;           /* support dual speed */
+       dev->gadget.max_speed = USB_SPEED_HIGH; /* support dual speed */
 #ifdef OTG_TRANSCEIVER
        dev->gadget.is_otg = 1;                 /* support otg mode */
 #endif
index 9aa1cbbee45b64597ef9bcc44d5ba5ed219b2d6a..a7692c208ea755c11a7c8e7c4c3de9696a972cd2 100644 (file)
@@ -1653,7 +1653,7 @@ static int __init m66592_probe(struct platform_device *pdev)
        m66592->gadget.ops = &m66592_gadget_ops;
        device_initialize(&m66592->gadget.dev);
        dev_set_name(&m66592->gadget.dev, "gadget");
-       m66592->gadget.is_dualspeed = 1;
+       m66592->gadget.max_speed = USB_SPEED_HIGH;
        m66592->gadget.dev.parent = &pdev->dev;
        m66592->gadget.dev.dma_mask = pdev->dev.dma_mask;
        m66592->gadget.dev.release = pdev->dev.release;
index 892412103dd865c05cd5a2b1844f323701784108..9376a7483c9b935cca2523c36903c607224a939d 100644 (file)
@@ -2312,7 +2312,7 @@ static int __devinit mv_udc_probe(struct platform_device *dev)
        udc->gadget.ep0 = &udc->eps[0].ep;      /* gadget ep0 */
        INIT_LIST_HEAD(&udc->gadget.ep_list);   /* ep_list */
        udc->gadget.speed = USB_SPEED_UNKNOWN;  /* speed */
-       udc->gadget.is_dualspeed = 1;           /* support dual speed */
+       udc->gadget.max_speed = USB_SPEED_HIGH; /* support dual speed */
 
        /* the "gadget" abstracts/virtualizes the controller */
        dev_set_name(&udc->gadget.dev, "gadget");
index d1b76368472f86cce2671e7f24b7aab173996c9c..d5050f4e84493310b9e89d4166c1060ee0f92499 100644 (file)
@@ -2235,7 +2235,7 @@ net2272_probe_init(struct device *dev, unsigned int irq)
        ret->irq = irq;
        ret->dev = dev;
        ret->gadget.ops = &net2272_ops;
-       ret->gadget.is_dualspeed = 1;
+       ret->gadget.max_speed = USB_SPEED_HIGH;
 
        /* the "gadget" abstracts/virtualizes the controller */
        dev_set_name(&ret->gadget.dev, "gadget");
index da2b9d0be3ca0d444d9df8ca5f0b7a9800c3d078..9ee36fd5adae0be3ca2907ed1e0d6c3604948377 100644 (file)
@@ -2698,7 +2698,7 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id)
        spin_lock_init (&dev->lock);
        dev->pdev = pdev;
        dev->gadget.ops = &net2280_ops;
-       dev->gadget.is_dualspeed = 1;
+       dev->gadget.max_speed = USB_SPEED_HIGH;
 
        /* the "gadget" abstracts/virtualizes the controller */
        dev_set_name(&dev->gadget.dev, "gadget");
index 788989a10223cbe69d4c5773b6be8a748227a88a..ed01a0f5f119d4fc3997f08b314de998c0eacc62 100644 (file)
@@ -2676,6 +2676,7 @@ omap_udc_setup(struct platform_device *odev, struct otg_transceiver *xceiv)
        INIT_LIST_HEAD(&udc->gadget.ep_list);
        INIT_LIST_HEAD(&udc->iso);
        udc->gadget.speed = USB_SPEED_UNKNOWN;
+       udc->gadget.max_speed = USB_SPEED_FULL;
        udc->gadget.name = driver_name;
 
        device_initialize(&udc->gadget.dev);
index 5048a0c07640a4ed649c848a43ae4b83c5298be4..7f97b4adba3e5f782700e3925a40a1ffd1b51a2e 100644 (file)
@@ -2941,7 +2941,7 @@ static int pch_udc_probe(struct pci_dev *pdev,
        dev->gadget.dev.dma_mask = pdev->dev.dma_mask;
        dev->gadget.dev.release = gadget_release;
        dev->gadget.name = KBUILD_MODNAME;
-       dev->gadget.is_dualspeed = 1;
+       dev->gadget.max_speed = USB_SPEED_HIGH;
 
        retval = device_register(&dev->gadget.dev);
        if (retval)
index 65a8834f274bf70020ed83eb9e340f1c3db544a8..b74f49ac95e5a647298aa2a30ae0bba7f3260603 100644 (file)
@@ -1141,7 +1141,7 @@ printer_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
                                break;
 #ifdef CONFIG_USB_GADGET_DUALSPEED
                        case USB_DT_DEVICE_QUALIFIER:
-                               if (!gadget->is_dualspeed)
+                               if (!gadget_is_dualspeed(gadget))
                                        break;
                                /*
                                 * assumes ep0 uses the same value for both
@@ -1155,7 +1155,7 @@ printer_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
                                break;
 
                        case USB_DT_OTHER_SPEED_CONFIG:
-                               if (!gadget->is_dualspeed)
+                               if (!gadget_is_dualspeed(gadget))
                                        break;
                                /* FALLTHROUGH */
 #endif /* CONFIG_USB_GADGET_DUALSPEED */
index fc719a3f855717b88417aaff8c2e89d9a2723109..3666d7c54e24101223dcf2d229d9adfecc7049da 100644 (file)
@@ -1911,7 +1911,7 @@ static int __init r8a66597_probe(struct platform_device *pdev)
 
        r8a66597->gadget.ops = &r8a66597_gadget_ops;
        dev_set_name(&r8a66597->gadget.dev, "gadget");
-       r8a66597->gadget.is_dualspeed = 1;
+       r8a66597->gadget.max_speed = USB_SPEED_HIGH;
        r8a66597->gadget.dev.parent = &pdev->dev;
        r8a66597->gadget.dev.dma_mask = pdev->dev.dma_mask;
        r8a66597->gadget.dev.release = pdev->dev.release;
index b31448229f0b26c3a38014cf59e3339060253cb3..6bc7ad87c306fc974ad984d0447544e32a0cf0ee 100644 (file)
@@ -3362,7 +3362,7 @@ static int __devinit s3c_hsotg_probe(struct platform_device *pdev)
 
        dev_set_name(&hsotg->gadget.dev, "gadget");
 
-       hsotg->gadget.is_dualspeed = 1;
+       hsotg->gadget.max_speed = USB_SPEED_HIGH;
        hsotg->gadget.ops = &s3c_hsotg_gadget_ops;
        hsotg->gadget.name = dev_name(dev);
 
index 20a553b46aedc1d17ecaeaf033ff62eb8f5f472c..09ea96558b913c6ce51345c59a77740e1f8f8903 100644 (file)
@@ -1310,7 +1310,7 @@ static int s3c_hsudc_probe(struct platform_device *pdev)
        device_initialize(&hsudc->gadget.dev);
        dev_set_name(&hsudc->gadget.dev, "gadget");
 
-       hsudc->gadget.is_dualspeed = 1;
+       hsudc->gadget.max_speed = USB_SPEED_HIGH;
        hsudc->gadget.ops = &s3c_hsudc_gadget_ops;
        hsudc->gadget.name = dev_name(dev);
        hsudc->gadget.dev.parent = dev;
index 6939e17f4580099af82d236c413547fe3660a18d..0b0d12ccc4871967401ab10f7122782a57ee4bf7 100644 (file)
@@ -371,14 +371,28 @@ static ssize_t usb_udc_softconn_store(struct device *dev,
 }
 static DEVICE_ATTR(soft_connect, S_IWUSR, NULL, usb_udc_softconn_store);
 
-static ssize_t usb_udc_speed_show(struct device *dev,
+#define USB_UDC_SPEED_ATTR(name, param)                                        \
+ssize_t usb_udc_##param##_show(struct device *dev,                     \
+               struct device_attribute *attr, char *buf)               \
+{                                                                      \
+       struct usb_udc *udc = container_of(dev, struct usb_udc, dev);   \
+       return snprintf(buf, PAGE_SIZE, "%s\n",                         \
+                       usb_speed_string(udc->gadget->param));          \
+}                                                                      \
+static DEVICE_ATTR(name, S_IRUSR, usb_udc_##param##_show, NULL)
+
+static USB_UDC_SPEED_ATTR(current_speed, speed);
+static USB_UDC_SPEED_ATTR(maximum_speed, max_speed);
+
+/* TODO: Scheduled for removal in 3.8. */
+static ssize_t usb_udc_is_dualspeed_show(struct device *dev,
                struct device_attribute *attr, char *buf)
 {
        struct usb_udc          *udc = container_of(dev, struct usb_udc, dev);
-       return snprintf(buf, PAGE_SIZE, "%s\n",
-                       usb_speed_string(udc->gadget->speed));
+       return snprintf(buf, PAGE_SIZE, "%d\n",
+                       gadget_is_dualspeed(udc->gadget));
 }
-static DEVICE_ATTR(speed, S_IRUGO, usb_udc_speed_show, NULL);
+static DEVICE_ATTR(is_dualspeed, S_IRUSR, usb_udc_is_dualspeed_show, NULL);
 
 #define USB_UDC_ATTR(name)                                     \
 ssize_t usb_udc_##name##_show(struct device *dev,              \
@@ -391,7 +405,6 @@ ssize_t usb_udc_##name##_show(struct device *dev,           \
 }                                                              \
 static DEVICE_ATTR(name, S_IRUGO, usb_udc_##name##_show, NULL)
 
-static USB_UDC_ATTR(is_dualspeed);
 static USB_UDC_ATTR(is_otg);
 static USB_UDC_ATTR(is_a_peripheral);
 static USB_UDC_ATTR(b_hnp_enable);
@@ -401,7 +414,8 @@ static USB_UDC_ATTR(a_alt_hnp_support);
 static struct attribute *usb_udc_attrs[] = {
        &dev_attr_srp.attr,
        &dev_attr_soft_connect.attr,
-       &dev_attr_speed.attr,
+       &dev_attr_current_speed.attr,
+       &dev_attr_maximum_speed.attr,
 
        &dev_attr_is_dualspeed.attr,
        &dev_attr_is_otg.attr,
index 922148ff8d2969de64a808046f7ce06c6115ace1..47a3d1e5b28b60fe170ddf7c10260d26d09b24d7 100644 (file)
@@ -1844,7 +1844,7 @@ int __init musb_gadget_setup(struct musb *musb)
         */
 
        musb->g.ops = &musb_gadget_operations;
-       musb->g.is_dualspeed = 1;
+       musb->g.max_speed = USB_SPEED_HIGH;
        musb->g.speed = USB_SPEED_UNKNOWN;
 
        /* this "gadget" abstracts/virtualizes the controller */
index 8fb9056ff48d724ee2502db7a65e194776c2ff2d..43c67e5cde2600a41647e41fba4f022df9fff35a 100644 (file)
@@ -862,7 +862,7 @@ int usbhs_mod_gadget_probe(struct usbhs_priv *priv)
        gpriv->gadget.dev.parent        = dev;
        gpriv->gadget.name              = "renesas_usbhs_udc";
        gpriv->gadget.ops               = &usbhsg_gadget_ops;
-       gpriv->gadget.is_dualspeed      = 1;
+       gpriv->gadget.max_speed         = USB_SPEED_HIGH;
        ret = device_register(&gpriv->gadget.dev);
        if (ret < 0)
                goto err_add_udc;
index 1d3a67523ffc3bac90c298bf58033a20115956f4..98dc306898b51d98ef6e107783bb72476f32cb53 100644 (file)
@@ -477,8 +477,8 @@ struct usb_gadget_ops {
  *     driver setup() requests
  * @ep_list: List of other endpoints supported by the device.
  * @speed: Speed of current connection to USB host.
- * @is_dualspeed: True if the controller supports both high and full speed
- *     operation.  If it does, the gadget driver must also support both.
+ * @max_speed: Maximal speed the UDC can handle.  UDC must support this
+ *      and all slower speeds.
  * @is_otg: True if the USB device port uses a Mini-AB jack, so that the
  *     gadget driver must provide a USB OTG descriptor.
  * @is_a_peripheral: False unless is_otg, the "A" end of a USB cable
@@ -518,7 +518,7 @@ struct usb_gadget {
        struct usb_ep                   *ep0;
        struct list_head                ep_list;        /* of usb_ep */
        enum usb_device_speed           speed;
-       unsigned                        is_dualspeed:1;
+       enum usb_device_speed           max_speed;
        unsigned                        is_otg:1;
        unsigned                        is_a_peripheral:1;
        unsigned                        b_hnp_enable:1;
@@ -549,7 +549,7 @@ static inline struct usb_gadget *dev_to_usb_gadget(struct device *dev)
 static inline int gadget_is_dualspeed(struct usb_gadget *g)
 {
 #ifdef CONFIG_USB_GADGET_DUALSPEED
-       /* runtime test would check "g->is_dualspeed" ... that might be
+       /* runtime test would check "g->max_speed" ... that might be
         * useful to work around hardware bugs, but is mostly pointless
         */
        return 1;
@@ -567,7 +567,7 @@ static inline int gadget_is_superspeed(struct usb_gadget *g)
 {
 #ifdef CONFIG_USB_GADGET_SUPERSPEED
        /*
-        * runtime test would check "g->is_superspeed" ... that might be
+        * runtime test would check "g->max_speed" ... that might be
         * useful to work around hardware bugs, but is mostly pointless
         */
        return 1;