]> err.no Git - linux-2.6/blobdiff - drivers/usb/gadget/dummy_hcd.c
USB: gadget: dummy_hcd.c: fix nested switch statements
[linux-2.6] / drivers / usb / gadget / dummy_hcd.c
index 58e4d720880519520ca5f98257f0b44fdd475f63..433f8c47cce5936607f18170754ef4f55e740fd9 100644 (file)
@@ -46,7 +46,7 @@
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
 #include <linux/usb.h>
-#include <linux/usb_gadget.h>
+#include <linux/usb/gadget.h>
 
 #include <asm/byteorder.h>
 #include <asm/io.h>
@@ -61,6 +61,8 @@
 #define DRIVER_DESC    "USB Host+Gadget Emulator"
 #define DRIVER_VERSION "02 May 2005"
 
+#define POWER_BUDGET   500     /* in mA; use 8 for low-power port testing */
+
 static const char      driver_name [] = "dummy_hcd";
 static const char      driver_desc [] = "USB Host+Gadget Emulator";
 
@@ -363,16 +365,14 @@ dummy_enable (struct usb_ep *_ep, const struct usb_endpoint_descriptor *desc)
                case USB_SPEED_HIGH:
                        if (max == 512)
                                break;
-                       /* conserve return statements */
-               default:
-                       switch (max) {
-                       case 8: case 16: case 32: case 64:
+                       goto done;
+               case USB_SPEED_FULL:
+                       if (max == 8 || max == 16 || max == 32 || max == 64)
                                /* we'll fake any legal size */
                                break;
-                       default:
-               case USB_SPEED_LOW:
-                               goto done;
-                       }
+                       /* save a return statement */
+               default:
+                       goto done;
                }
                break;
        case USB_ENDPOINT_XFER_INT:
@@ -772,18 +772,17 @@ usb_gadget_register_driver (struct usb_gadget_driver *driver)
        list_del_init (&dum->ep [0].ep.ep_list);
        INIT_LIST_HEAD(&dum->fifo_req.queue);
 
+       driver->driver.bus = NULL;
        dum->driver = driver;
        dum->gadget.dev.driver = &driver->driver;
        dev_dbg (udc_dev(dum), "binding gadget driver '%s'\n",
                        driver->driver.name);
-       if ((retval = driver->bind (&dum->gadget)) != 0)
-               goto err_bind_gadget;
-
-       driver->driver.bus = dum->gadget.dev.parent->bus;
-       if ((retval = driver_register (&driver->driver)) != 0)
-               goto err_register;
-       if ((retval = device_bind_driver (&dum->gadget.dev)) != 0)
-               goto err_bind_driver;
+       retval = driver->bind(&dum->gadget);
+       if (retval) {
+               dum->driver = NULL;
+               dum->gadget.dev.driver = NULL;
+               return retval;
+       }
 
        /* khubd will enumerate this in a while */
        spin_lock_irq (&dum->lock);
@@ -793,20 +792,6 @@ usb_gadget_register_driver (struct usb_gadget_driver *driver)
 
        usb_hcd_poll_rh_status (dummy_to_hcd (dum));
        return 0;
-
-err_bind_driver:
-       driver_unregister (&driver->driver);
-err_register:
-       if (driver->unbind)
-               driver->unbind (&dum->gadget);
-       spin_lock_irq (&dum->lock);
-       dum->pullup = 0;
-       set_link_state (dum);
-       spin_unlock_irq (&dum->lock);
-err_bind_gadget:
-       dum->driver = NULL;
-       dum->gadget.dev.driver = NULL;
-       return retval;
 }
 EXPORT_SYMBOL (usb_gadget_register_driver);
 
@@ -830,11 +815,9 @@ usb_gadget_unregister_driver (struct usb_gadget_driver *driver)
        spin_unlock_irqrestore (&dum->lock, flags);
 
        driver->unbind (&dum->gadget);
+       dum->gadget.dev.driver = NULL;
        dum->driver = NULL;
 
-       device_release_driver (&dum->gadget.dev);
-       driver_unregister (&driver->driver);
-
        spin_lock_irqsave (&dum->lock, flags);
        dum->pullup = 0;
        set_link_state (dum);
@@ -915,7 +898,6 @@ static int dummy_udc_suspend (struct platform_device *pdev, pm_message_t state)
        set_link_state (dum);
        spin_unlock_irq (&dum->lock);
 
-       pdev->dev.power.power_state = state;
        usb_hcd_poll_rh_status (dummy_to_hcd (dum));
        return 0;
 }
@@ -930,7 +912,6 @@ static int dummy_udc_resume (struct platform_device *pdev)
        set_link_state (dum);
        spin_unlock_irq (&dum->lock);
 
-       pdev->dev.power.power_state = PMSG_ON;
        usb_hcd_poll_rh_status (dummy_to_hcd (dum));
        return 0;
 }
@@ -1001,8 +982,8 @@ static int dummy_urb_enqueue (
        if (!timer_pending (&dum->timer))
                mod_timer (&dum->timer, jiffies + 1);
 
-       spin_unlock_irqrestore (&dum->lock, flags);
  done:
+       spin_unlock_irqrestore(&dum->lock, flags);
        return rc;
 }
 
@@ -1827,8 +1808,7 @@ static int dummy_start (struct usb_hcd *hcd)
 
        INIT_LIST_HEAD (&dum->urbp_list);
 
-       /* only show a low-power port: just 8mA */
-       hcd->power_budget = 8;
+       hcd->power_budget = POWER_BUDGET;
        hcd->state = HC_STATE_RUNNING;
        hcd->uses_new_polling = 1;