usb: gadget: dummy_hcd: convert to new-style udc-probe

bind() and pull is moved to udc core, call callbacks are verified by the
upper layer.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Sebastian Andrzej Siewior 2011-06-23 14:26:17 +02:00 committed by Greg Kroah-Hartman
parent e71eb392c2
commit aa07473943

View file

@ -857,17 +857,18 @@ static int dummy_pullup (struct usb_gadget *_gadget, int value)
return 0; return 0;
} }
static int dummy_udc_start(struct usb_gadget_driver *driver, static int dummy_udc_start(struct usb_gadget *g,
int (*bind)(struct usb_gadget *)); struct usb_gadget_driver *driver);
static int dummy_udc_stop(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 = { static const struct usb_gadget_ops dummy_ops = {
.get_frame = dummy_g_get_frame, .get_frame = dummy_g_get_frame,
.wakeup = dummy_wakeup, .wakeup = dummy_wakeup,
.set_selfpowered = dummy_set_selfpowered, .set_selfpowered = dummy_set_selfpowered,
.pullup = dummy_pullup, .pullup = dummy_pullup,
.start = dummy_udc_start, .udc_start = dummy_udc_start,
.stop = dummy_udc_stop, .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. * for each driver that registers: just add to a big root hub.
*/ */
static int dummy_udc_start(struct usb_gadget_driver *driver, static int dummy_udc_start(struct usb_gadget *g,
int (*bind)(struct usb_gadget *)) struct usb_gadget_driver *driver)
{ {
struct dummy *dum = &the_controller; struct dummy_hcd *dum_hcd = gadget_to_dummy_hcd(g);
int retval; struct dummy *dum = dum_hcd->dum;
if (!dum) if (driver->speed == USB_SPEED_UNKNOWN)
return -EINVAL;
if (dum->driver)
return -EBUSY;
if (!bind || !driver->setup || driver->speed == USB_SPEED_UNKNOWN)
return -EINVAL; return -EINVAL;
/* /*
@ -921,37 +918,20 @@ static int dummy_udc_start(struct usb_gadget_driver *driver,
dum->devstatus = 0; dum->devstatus = 0;
dum->driver = driver; dum->driver = driver;
dum->gadget.dev.driver = &driver->driver;
dev_dbg (udc_dev(dum), "binding gadget driver '%s'\n", dev_dbg (udc_dev(dum), "binding gadget driver '%s'\n",
driver->driver.name); 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; 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; struct dummy_hcd *dum_hcd = gadget_to_dummy_hcd(g);
struct dummy *dum = dum_hcd->dum;
if (!dum)
return -ENODEV;
if (!driver || driver != dum->driver || !driver->unbind)
return -EINVAL;
dev_dbg (udc_dev(dum), "unregister gadget driver '%s'\n", dev_dbg (udc_dev(dum), "unregister gadget driver '%s'\n",
driver->driver.name); driver->driver.name);
dummy_pullup(&dum->gadget, 0);
driver->unbind (&dum->gadget);
dum->gadget.dev.driver = NULL;
dum->driver = NULL; dum->driver = NULL;
dummy_pullup(&dum->gadget, 0); dummy_pullup(&dum->gadget, 0);