Move the code which was part of pullup() to the newly introduced
method.

Signed-off-by: Felipe Balbi <felipe.ba...@linux.intel.com>
---
 drivers/usb/gadget/udc/dummy_hcd.c | 57 +++++++++++++++++++++++++++-----------
 1 file changed, 41 insertions(+), 16 deletions(-)

diff --git a/drivers/usb/gadget/udc/dummy_hcd.c 
b/drivers/usb/gadget/udc/dummy_hcd.c
index c79081952ea0..7195a5b21e87 100644
--- a/drivers/usb/gadget/udc/dummy_hcd.c
+++ b/drivers/usb/gadget/udc/dummy_hcd.c
@@ -888,22 +888,6 @@ static int dummy_pullup(struct usb_gadget *_gadget, int 
value)
        unsigned long   flags;
 
        dum = gadget_dev_to_dummy(&_gadget->dev);
-
-       if (value && dum->driver) {
-               if (mod_data.is_super_speed)
-                       dum->gadget.speed = dum->driver->max_speed;
-               else if (mod_data.is_high_speed)
-                       dum->gadget.speed = min_t(u8, USB_SPEED_HIGH,
-                                       dum->driver->max_speed);
-               else
-                       dum->gadget.speed = USB_SPEED_FULL;
-               dummy_udc_update_ep0(dum);
-
-               if (dum->gadget.speed < dum->driver->max_speed)
-                       dev_dbg(udc_dev(dum), "This device can perform faster"
-                               " if you connect it to a %s port...\n",
-                               usb_speed_string(dum->driver->max_speed));
-       }
        dum_hcd = gadget_to_dummy_hcd(_gadget);
 
        spin_lock_irqsave(&dum->lock, flags);
@@ -918,6 +902,8 @@ static int dummy_pullup(struct usb_gadget *_gadget, int 
value)
 static int dummy_udc_start(struct usb_gadget *g,
                struct usb_gadget_driver *driver);
 static int dummy_udc_stop(struct usb_gadget *g);
+static void dummy_udc_set_speed(struct usb_gadget *g,
+               enum usb_device_speed speed);
 
 static const struct usb_gadget_ops dummy_ops = {
        .get_frame      = dummy_g_get_frame,
@@ -926,6 +912,7 @@ static const struct usb_gadget_ops dummy_ops = {
        .pullup         = dummy_pullup,
        .udc_start      = dummy_udc_start,
        .udc_stop       = dummy_udc_stop,
+       .udc_set_speed  = dummy_udc_set_speed,
 };
 
 /*-------------------------------------------------------------------------*/
@@ -988,6 +975,44 @@ static int dummy_udc_stop(struct usb_gadget *g)
        return 0;
 }
 
+static void dummy_udc_set_speed(struct usb_gadget *_gadget,
+               enum usb_device_speed speed)
+{
+       struct dummy    *dum;
+
+       dum = gadget_dev_to_dummy(&_gadget->dev);
+
+       switch (speed) {
+       case USB_SPEED_SUPER:
+               if (mod_data.is_super_speed)
+                       dum->gadget.speed = dum->driver->max_speed;
+               break;
+       case USB_SPEED_HIGH:
+               if (mod_data.is_high_speed)
+                       dum->gadget.speed = min_t(u8, USB_SPEED_HIGH,
+                                       dum->driver->max_speed);
+               break;
+       case USB_SPEED_FULL:
+               dum->gadget.speed = USB_SPEED_FULL;
+               break;
+       default:
+               if (mod_data.is_super_speed)
+                       dum->gadget.speed = USB_SPEED_SUPER;
+               else if (mod_data.is_high_speed)
+                       dum->gadget.speed = USB_SPEED_HIGH;
+               else
+                       dum->gadget.speed = USB_SPEED_FULL;
+               break;
+       }
+
+       dummy_udc_update_ep0(dum);
+
+       if (dum->gadget.speed < dum->driver->max_speed)
+               dev_dbg(udc_dev(dum), "This device can perform faster"
+                       " if you connect it to a %s port...\n",
+                       usb_speed_string(dum->driver->max_speed));
+}
+
 #undef is_enabled
 
 /* The gadget structure is stored inside the hcd structure and will be
-- 
2.11.0.295.gd7dffce1ce

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to