|
@@ -1538,9 +1538,10 @@ static int s3c2410_vbus_draw(struct usb_gadget *_gadget, unsigned ma)
|
|
|
return -ENOTSUPP;
|
|
|
}
|
|
|
|
|
|
-static int s3c2410_udc_start(struct usb_gadget_driver *driver,
|
|
|
- int (*bind)(struct usb_gadget *, struct usb_gadget_driver *));
|
|
|
-static int s3c2410_udc_stop(struct usb_gadget_driver *driver);
|
|
|
+static int s3c2410_udc_start(struct usb_gadget *g,
|
|
|
+ struct usb_gadget_driver *driver);
|
|
|
+static int s3c2410_udc_stop(struct usb_gadget *g,
|
|
|
+ struct usb_gadget_driver *driver);
|
|
|
|
|
|
static const struct usb_gadget_ops s3c2410_ops = {
|
|
|
.get_frame = s3c2410_udc_get_frame,
|
|
@@ -1549,8 +1550,8 @@ static const struct usb_gadget_ops s3c2410_ops = {
|
|
|
.pullup = s3c2410_udc_pullup,
|
|
|
.vbus_session = s3c2410_udc_vbus_session,
|
|
|
.vbus_draw = s3c2410_vbus_draw,
|
|
|
- .start = s3c2410_udc_start,
|
|
|
- .stop = s3c2410_udc_stop,
|
|
|
+ .udc_start = s3c2410_udc_start,
|
|
|
+ .udc_stop = s3c2410_udc_stop,
|
|
|
};
|
|
|
|
|
|
static void s3c2410_udc_command(enum s3c2410_udc_cmd_e cmd)
|
|
@@ -1664,33 +1665,14 @@ static void s3c2410_udc_enable(struct s3c2410_udc *dev)
|
|
|
s3c2410_udc_command(S3C2410_UDC_P_ENABLE);
|
|
|
}
|
|
|
|
|
|
-static int s3c2410_udc_start(struct usb_gadget_driver *driver,
|
|
|
- int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
|
|
|
+static int s3c2410_udc_start(struct usb_gadget *g,
|
|
|
+ struct usb_gadget_driver *driver)
|
|
|
{
|
|
|
- struct s3c2410_udc *udc = the_controller;
|
|
|
+ struct s3c2410_udc *udc = to_s3c2410(g)
|
|
|
int retval;
|
|
|
|
|
|
dprintk(DEBUG_NORMAL, "%s() '%s'\n", __func__, driver->driver.name);
|
|
|
|
|
|
- /* Sanity checks */
|
|
|
- if (!udc)
|
|
|
- return -ENODEV;
|
|
|
-
|
|
|
- if (udc->driver)
|
|
|
- return -EBUSY;
|
|
|
-
|
|
|
- if (!bind || !driver->setup || driver->max_speed < USB_SPEED_FULL) {
|
|
|
- dev_err(&udc->gadget.dev, "Invalid driver: bind %p setup %p speed %d\n",
|
|
|
- bind, driver->setup, driver->max_speed);
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
-#if defined(MODULE)
|
|
|
- if (!driver->unbind) {
|
|
|
- dev_err(&udc->gadget.dev, "Invalid driver: no unbind method\n");
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
-#endif
|
|
|
-
|
|
|
/* Hook the driver */
|
|
|
udc->driver = driver;
|
|
|
udc->gadget.dev.driver = &driver->driver;
|
|
@@ -1702,15 +1684,6 @@ static int s3c2410_udc_start(struct usb_gadget_driver *driver,
|
|
|
goto register_error;
|
|
|
}
|
|
|
|
|
|
- dprintk(DEBUG_NORMAL, "binding gadget driver '%s'\n",
|
|
|
- driver->driver.name);
|
|
|
-
|
|
|
- retval = bind(&udc->gadget, driver);
|
|
|
- if (retval) {
|
|
|
- device_del(&udc->gadget.dev);
|
|
|
- goto register_error;
|
|
|
- }
|
|
|
-
|
|
|
/* Enable udc */
|
|
|
s3c2410_udc_enable(udc);
|
|
|
|
|
@@ -1722,24 +1695,10 @@ register_error:
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
-static int s3c2410_udc_stop(struct usb_gadget_driver *driver)
|
|
|
+static int s3c2410_udc_stop(struct usb_gadget *g,
|
|
|
+ struct usb_gadget_driver *driver)
|
|
|
{
|
|
|
- struct s3c2410_udc *udc = the_controller;
|
|
|
-
|
|
|
- if (!udc)
|
|
|
- return -ENODEV;
|
|
|
-
|
|
|
- if (!driver || driver != udc->driver || !driver->unbind)
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
- dprintk(DEBUG_NORMAL, "usb_gadget_unregister_driver() '%s'\n",
|
|
|
- driver->driver.name);
|
|
|
-
|
|
|
- /* report disconnect */
|
|
|
- if (driver->disconnect)
|
|
|
- driver->disconnect(&udc->gadget);
|
|
|
-
|
|
|
- driver->unbind(&udc->gadget);
|
|
|
+ struct s3c2410_udc *udc = to_s3c2410(g);
|
|
|
|
|
|
device_del(&udc->gadget.dev);
|
|
|
udc->driver = NULL;
|