usb: gadget: constify all struct usb_gadget_ops
[linux-2.6-block.git] / drivers / usb / gadget / m66592-udc.c
index b6401f1b56ce216226c9b5decfa97035ff24b684..34a0cb9382dc63921ac394e94d581eff7916ae80 100644 (file)
@@ -1463,42 +1463,16 @@ static struct usb_ep_ops m66592_ep_ops = {
 };
 
 /*-------------------------------------------------------------------------*/
-static struct m66592 *the_controller;
-
-static int m66592_start(struct usb_gadget_driver *driver,
-               int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
+static int m66592_udc_start(struct usb_gadget *g,
+               struct usb_gadget_driver *driver)
 {
-       struct m66592 *m66592 = the_controller;
-       int retval;
-
-       if (!driver
-                       || driver->max_speed < USB_SPEED_HIGH
-                       || !bind
-                       || !driver->setup)
-               return -EINVAL;
-       if (!m66592)
-               return -ENODEV;
-       if (m66592->driver)
-               return -EBUSY;
+       struct m66592 *m66592 = to_m66592(g);
 
        /* hook up the driver */
        driver->driver.bus = NULL;
        m66592->driver = driver;
        m66592->gadget.dev.driver = &driver->driver;
 
-       retval = device_add(&m66592->gadget.dev);
-       if (retval) {
-               pr_err("device_add error (%d)\n", retval);
-               goto error;
-       }
-
-       retval = bind(&m66592->gadget, driver);
-       if (retval) {
-               pr_err("bind to driver error (%d)\n", retval);
-               device_del(&m66592->gadget.dev);
-               goto error;
-       }
-
        m66592_bset(m66592, M66592_VBSE | M66592_URST, M66592_INTENB0);
        if (m66592_read(m66592, M66592_INTSTS0) & M66592_VBSTS) {
                m66592_start_xclock(m66592);
@@ -1510,26 +1484,12 @@ static int m66592_start(struct usb_gadget_driver *driver,
        }
 
        return 0;
-
-error:
-       m66592->driver = NULL;
-       m66592->gadget.dev.driver = NULL;
-
-       return retval;
 }
 
-static int m66592_stop(struct usb_gadget_driver *driver)
+static int m66592_udc_stop(struct usb_gadget *g,
+               struct usb_gadget_driver *driver)
 {
-       struct m66592 *m66592 = the_controller;
-       unsigned long flags;
-
-       if (driver != m66592->driver || !driver->unbind)
-               return -EINVAL;
-
-       spin_lock_irqsave(&m66592->lock, flags);
-       if (m66592->gadget.speed != USB_SPEED_UNKNOWN)
-               m66592_usb_disconnect(m66592);
-       spin_unlock_irqrestore(&m66592->lock, flags);
+       struct m66592 *m66592 = to_m66592(g);
 
        m66592_bclr(m66592, M66592_VBSE | M66592_URST, M66592_INTENB0);
 
@@ -1539,8 +1499,8 @@ static int m66592_stop(struct usb_gadget_driver *driver)
        init_controller(m66592);
        disable_controller(m66592);
 
-       device_del(&m66592->gadget.dev);
        m66592->driver = NULL;
+
        return 0;
 }
 
@@ -1566,10 +1526,10 @@ static int m66592_pullup(struct usb_gadget *gadget, int is_on)
        return 0;
 }
 
-static struct usb_gadget_ops m66592_gadget_ops = {
+static const struct usb_gadget_ops m66592_gadget_ops = {
        .get_frame              = m66592_get_frame,
-       .start                  = m66592_start,
-       .stop                   = m66592_stop,
+       .udc_start              = m66592_udc_start,
+       .udc_stop               = m66592_udc_stop,
        .pullup                 = m66592_pullup,
 };
 
@@ -1578,6 +1538,7 @@ static int __exit m66592_remove(struct platform_device *pdev)
        struct m66592           *m66592 = dev_get_drvdata(&pdev->dev);
 
        usb_del_gadget_udc(&m66592->gadget);
+       device_del(&m66592->gadget.dev);
 
        del_timer_sync(&m66592->timer);
        iounmap(m66592->reg);
@@ -1706,8 +1667,6 @@ static int __init m66592_probe(struct platform_device *pdev)
        m66592->pipenum2ep[0] = &m66592->ep[0];
        m66592->epaddr2ep[0] = &m66592->ep[0];
 
-       the_controller = m66592;
-
        m66592->ep0_req = m66592_alloc_request(&m66592->ep[0].ep, GFP_KERNEL);
        if (m66592->ep0_req == NULL)
                goto clean_up3;
@@ -1715,6 +1674,12 @@ static int __init m66592_probe(struct platform_device *pdev)
 
        init_controller(m66592);
 
+       ret = device_add(&m66592->gadget.dev);
+       if (ret) {
+               pr_err("device_add error (%d)\n", ret);
+               goto err_device_add;
+       }
+
        ret = usb_add_gadget_udc(&pdev->dev, &m66592->gadget);
        if (ret)
                goto err_add_udc;
@@ -1723,6 +1688,9 @@ static int __init m66592_probe(struct platform_device *pdev)
        return 0;
 
 err_add_udc:
+       device_del(&m66592->gadget.dev);
+
+err_device_add:
        m66592_free_request(&m66592->ep[0].ep, m66592->ep0_req);
 
 clean_up3: