return 0;
 }
 
-static int amd5536_start(struct usb_gadget_driver *driver,
-               int (*bind)(struct usb_gadget *, struct usb_gadget_driver *));
-static int amd5536_stop(struct usb_gadget_driver *driver);
+static int amd5536_udc_start(struct usb_gadget *g,
+               struct usb_gadget_driver *driver);
+static int amd5536_udc_stop(struct usb_gadget *g,
+               struct usb_gadget_driver *driver);
 /* gadget operations */
 static const struct usb_gadget_ops udc_ops = {
        .wakeup         = udc_wakeup,
        .get_frame      = udc_get_frame,
-       .start          = amd5536_start,
-       .stop           = amd5536_stop,
+       .udc_start      = amd5536_udc_start,
+       .udc_stop       = amd5536_udc_stop,
 };
 
 /* Setups endpoint parameters, adds endpoints to linked list */
 }
 
 /* Called by gadget driver to register itself */
-static int amd5536_start(struct usb_gadget_driver *driver,
-               int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
+static int amd5536_udc_start(struct usb_gadget *g,
+               struct usb_gadget_driver *driver)
 {
-       struct udc              *dev = udc;
-       int                     retval;
+       struct udc *dev = to_amd5536_udc(g);
        u32 tmp;
 
-       if (!driver || !bind || !driver->setup
-                       || driver->max_speed < USB_SPEED_HIGH)
-               return -EINVAL;
-       if (!dev)
-               return -ENODEV;
-       if (dev->driver)
-               return -EBUSY;
-
        driver->driver.bus = NULL;
        dev->driver = driver;
        dev->gadget.dev.driver = &driver->driver;
 
-       retval = bind(&dev->gadget, driver);
-
        /* Some gadget drivers use both ep0 directions.
         * NOTE: to gadget driver, ep0 is just one endpoint...
         */
        dev->ep[UDC_EP0OUT_IX].ep.driver_data =
                dev->ep[UDC_EP0IN_IX].ep.driver_data;
 
-       if (retval) {
-               DBG(dev, "binding to %s returning %d\n",
-                               driver->driver.name, retval);
-               dev->driver = NULL;
-               dev->gadget.dev.driver = NULL;
-               return retval;
-       }
-
        /* get ready for ep0 traffic */
        setup_ep0(dev);
 
 {
        int tmp;
 
-       if (dev->gadget.speed != USB_SPEED_UNKNOWN) {
-               spin_unlock(&dev->lock);
-               driver->disconnect(&dev->gadget);
-               spin_lock(&dev->lock);
-       }
-
        /* empty queues and init hardware */
        udc_basic_init(dev);
+
        for (tmp = 0; tmp < UDC_EP_NUM; tmp++)
                empty_req_queue(&dev->ep[tmp]);
 
 }
 
 /* Called by gadget driver to unregister itself */
-static int amd5536_stop(struct usb_gadget_driver *driver)
+static int amd5536_udc_stop(struct usb_gadget *g,
+               struct usb_gadget_driver *driver)
 {
-       struct udc      *dev = udc;
-       unsigned long   flags;
+       struct udc *dev = to_amd5536_udc(g);
+       unsigned long flags;
        u32 tmp;
 
-       if (!dev)
-               return -ENODEV;
-       if (!driver || driver != dev->driver || !driver->unbind)
-               return -EINVAL;
-
        spin_lock_irqsave(&dev->lock, flags);
        udc_mask_unused_interrupts(dev);
        shutdown(dev, driver);
        spin_unlock_irqrestore(&dev->lock, flags);
 
-       driver->unbind(&dev->gadget);
        dev->gadget.dev.driver = NULL;
        dev->driver = NULL;
 
        tmp |= AMD_BIT(UDC_DEVCTL_SD);
        writel(tmp, &dev->regs->ctl);
 
-
-       DBG(dev, "%s: unregistered\n", driver->driver.name);
-
        return 0;
 }