usb: gadget: dummy_hcd: convert to new-style udc-probe
[pandora-kernel.git] / drivers / usb / gadget / dummy_hcd.c
index f5c0d8f..e755a9d 100644 (file)
@@ -857,17 +857,18 @@ static int dummy_pullup (struct usb_gadget *_gadget, int value)
        return 0;
 }
 
-static int dummy_udc_start(struct usb_gadget_driver *driver,
-               int (*bind)(struct usb_gadget *));
-static int dummy_udc_stop(struct usb_gadget_driver *driver);
+static int dummy_udc_start(struct usb_gadget *g,
+               struct usb_gadget_driver *driver);
+static int dummy_udc_stop(struct usb_gadget *g,
+               struct usb_gadget_driver *driver);
 
 static const struct usb_gadget_ops dummy_ops = {
        .get_frame      = dummy_g_get_frame,
        .wakeup         = dummy_wakeup,
        .set_selfpowered = dummy_set_selfpowered,
        .pullup         = dummy_pullup,
-       .start          = dummy_udc_start,
-       .stop           = dummy_udc_stop,
+       .udc_start      = dummy_udc_start,
+       .udc_stop       = dummy_udc_stop,
 };
 
 /*-------------------------------------------------------------------------*/
@@ -900,17 +901,13 @@ static DEVICE_ATTR (function, S_IRUGO, show_function, NULL);
  * for each driver that registers:  just add to a big root hub.
  */
 
-static int dummy_udc_start(struct usb_gadget_driver *driver,
-               int (*bind)(struct usb_gadget *))
+static int dummy_udc_start(struct usb_gadget *g,
+               struct usb_gadget_driver *driver)
 {
-       struct dummy    *dum = &the_controller;
-       int             retval;
+       struct dummy_hcd        *dum_hcd = gadget_to_dummy_hcd(g);
+       struct dummy            *dum = dum_hcd->dum;
 
-       if (!dum)
-               return -EINVAL;
-       if (dum->driver)
-               return -EBUSY;
-       if (!bind || !driver->setup || driver->speed == USB_SPEED_UNKNOWN)
+       if (driver->speed == USB_SPEED_UNKNOWN)
                return -EINVAL;
 
        /*
@@ -921,37 +918,20 @@ static int dummy_udc_start(struct usb_gadget_driver *driver,
        dum->devstatus = 0;
 
        dum->driver = driver;
-       dum->gadget.dev.driver = &driver->driver;
        dev_dbg (udc_dev(dum), "binding gadget driver '%s'\n",
                        driver->driver.name);
-       retval = bind(&dum->gadget);
-       if (retval) {
-               dum->driver = NULL;
-               dum->gadget.dev.driver = NULL;
-               return retval;
-       }
-
-       /* khubd will enumerate this in a while */
-       dummy_pullup(&dum->gadget, 1);
        return 0;
 }
 
-static int dummy_udc_stop(struct usb_gadget_driver *driver)
+static int dummy_udc_stop(struct usb_gadget *g,
+               struct usb_gadget_driver *driver)
 {
-       struct dummy    *dum = &the_controller;
-
-       if (!dum)
-               return -ENODEV;
-       if (!driver || driver != dum->driver || !driver->unbind)
-               return -EINVAL;
+       struct dummy_hcd        *dum_hcd = gadget_to_dummy_hcd(g);
+       struct dummy            *dum = dum_hcd->dum;
 
        dev_dbg (udc_dev(dum), "unregister gadget driver '%s'\n",
                        driver->driver.name);
 
-       dummy_pullup(&dum->gadget, 0);
-
-       driver->unbind (&dum->gadget);
-       dum->gadget.dev.driver = NULL;
        dum->driver = NULL;
 
        dummy_pullup(&dum->gadget, 0);