Commit 96f8db6a authored by Felipe Balbi's avatar Felipe Balbi

usb: gadget: net2272: convert to new style

with this patch we can finally remove the global
"the controller" pointer.
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 2c7f0989
...@@ -1172,17 +1172,18 @@ net2272_pullup(struct usb_gadget *_gadget, int is_on) ...@@ -1172,17 +1172,18 @@ net2272_pullup(struct usb_gadget *_gadget, int is_on)
return 0; return 0;
} }
static int net2272_start(struct usb_gadget_driver *driver, static int net2272_start(struct usb_gadget *_gadget,
int (*bind)(struct usb_gadget *)); struct usb_gadget_driver *driver);
static int net2272_stop(struct usb_gadget_driver *driver); static int net2272_stop(struct usb_gadget *_gadget,
struct usb_gadget_driver *driver);
static const struct usb_gadget_ops net2272_ops = { static const struct usb_gadget_ops net2272_ops = {
.get_frame = net2272_get_frame, .get_frame = net2272_get_frame,
.wakeup = net2272_wakeup, .wakeup = net2272_wakeup,
.set_selfpowered = net2272_set_selfpowered, .set_selfpowered = net2272_set_selfpowered,
.pullup = net2272_pullup, .pullup = net2272_pullup,
.start = net2272_start, .udc_start = net2272_start,
.stop = net2272_stop, .udc_stop = net2272_stop,
}; };
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
...@@ -1356,8 +1357,6 @@ net2272_set_fifo_mode(struct net2272 *dev, int mode) ...@@ -1356,8 +1357,6 @@ net2272_set_fifo_mode(struct net2272 *dev, int mode)
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
static struct net2272 *the_controller;
static void static void
net2272_usb_reset(struct net2272 *dev) net2272_usb_reset(struct net2272 *dev)
{ {
...@@ -1453,20 +1452,17 @@ net2272_ep0_start(struct net2272 *dev) ...@@ -1453,20 +1452,17 @@ net2272_ep0_start(struct net2272 *dev)
* disconnect is reported. then a host may connect again, or * disconnect is reported. then a host may connect again, or
* the driver might get unbound. * the driver might get unbound.
*/ */
static int net2272_start(struct usb_gadget_driver *driver, static int net2272_start(struct usb_gadget *_gadget,
int (*bind)(struct usb_gadget *)) struct usb_gadget_driver *driver)
{ {
struct net2272 *dev = the_controller; struct net2272 *dev;
int ret;
unsigned i; unsigned i;
if (!driver || !bind || !driver->unbind || !driver->setup || if (!driver || !driver->unbind || !driver->setup ||
driver->speed != USB_SPEED_HIGH) driver->speed != USB_SPEED_HIGH)
return -EINVAL; return -EINVAL;
if (!dev)
return -ENODEV; dev = container_of(_gadget, struct net2272, gadget);
if (dev->driver)
return -EBUSY;
for (i = 0; i < 4; ++i) for (i = 0; i < 4; ++i)
dev->ep[i].irqs = 0; dev->ep[i].irqs = 0;
...@@ -1475,14 +1471,6 @@ static int net2272_start(struct usb_gadget_driver *driver, ...@@ -1475,14 +1471,6 @@ static int net2272_start(struct usb_gadget_driver *driver,
driver->driver.bus = NULL; driver->driver.bus = NULL;
dev->driver = driver; dev->driver = driver;
dev->gadget.dev.driver = &driver->driver; dev->gadget.dev.driver = &driver->driver;
ret = bind(&dev->gadget);
if (ret) {
dev_dbg(dev->dev, "bind to driver %s --> %d\n",
driver->driver.name, ret);
dev->driver = NULL;
dev->gadget.dev.driver = NULL;
return ret;
}
/* ... then enable host detection and ep0; and we're ready /* ... then enable host detection and ep0; and we're ready
* for set_configuration as well as eventual disconnect. * for set_configuration as well as eventual disconnect.
...@@ -1510,33 +1498,21 @@ stop_activity(struct net2272 *dev, struct usb_gadget_driver *driver) ...@@ -1510,33 +1498,21 @@ stop_activity(struct net2272 *dev, struct usb_gadget_driver *driver)
for (i = 0; i < 4; ++i) for (i = 0; i < 4; ++i)
net2272_dequeue_all(&dev->ep[i]); net2272_dequeue_all(&dev->ep[i]);
/* report disconnect; the driver is already quiesced */
if (driver) {
spin_unlock(&dev->lock);
driver->disconnect(&dev->gadget);
spin_lock(&dev->lock);
}
net2272_usb_reinit(dev); net2272_usb_reinit(dev);
} }
static int net2272_stop(struct usb_gadget_driver *driver) static int net2272_stop(struct usb_gadget *_gadget,
struct usb_gadget_driver *driver)
{ {
struct net2272 *dev = the_controller; struct net2272 *dev;
unsigned long flags; unsigned long flags;
if (!dev) dev = container_of(_gadget, struct net2272, gadget);
return -ENODEV;
if (!driver || driver != dev->driver)
return -EINVAL;
spin_lock_irqsave(&dev->lock, flags); spin_lock_irqsave(&dev->lock, flags);
stop_activity(dev, driver); stop_activity(dev, driver);
spin_unlock_irqrestore(&dev->lock, flags); spin_unlock_irqrestore(&dev->lock, flags);
net2272_pullup(&dev->gadget, 0);
driver->unbind(&dev->gadget);
dev->gadget.dev.driver = NULL; dev->gadget.dev.driver = NULL;
dev->driver = NULL; dev->driver = NULL;
...@@ -2238,7 +2214,6 @@ net2272_remove(struct net2272 *dev) ...@@ -2238,7 +2214,6 @@ net2272_remove(struct net2272 *dev)
device_remove_file(dev->dev, &dev_attr_registers); device_remove_file(dev->dev, &dev_attr_registers);
dev_info(dev->dev, "unbind\n"); dev_info(dev->dev, "unbind\n");
the_controller = NULL;
} }
static struct net2272 * __devinit static struct net2272 * __devinit
...@@ -2246,11 +2221,6 @@ net2272_probe_init(struct device *dev, unsigned int irq) ...@@ -2246,11 +2221,6 @@ net2272_probe_init(struct device *dev, unsigned int irq)
{ {
struct net2272 *ret; struct net2272 *ret;
if (the_controller) {
dev_warn(dev, "ignoring\n");
return ERR_PTR(-EBUSY);
}
if (!irq) { if (!irq) {
dev_dbg(dev, "No IRQ!\n"); dev_dbg(dev, "No IRQ!\n");
return ERR_PTR(-ENODEV); return ERR_PTR(-ENODEV);
...@@ -2307,8 +2277,6 @@ net2272_probe_fin(struct net2272 *dev, unsigned int irqflags) ...@@ -2307,8 +2277,6 @@ net2272_probe_fin(struct net2272 *dev, unsigned int irqflags)
dma_mode_string()); dma_mode_string());
dev_info(dev->dev, "version: %s\n", driver_vers); dev_info(dev->dev, "version: %s\n", driver_vers);
the_controller = dev;
ret = device_register(&dev->gadget.dev); ret = device_register(&dev->gadget.dev);
if (ret) if (ret)
goto err_irq; goto err_irq;
...@@ -2684,8 +2652,6 @@ net2272_plat_probe(struct platform_device *pdev) ...@@ -2684,8 +2652,6 @@ net2272_plat_probe(struct platform_device *pdev)
dev_info(&pdev->dev, "running in 16-bit, %sbyte swap local bus mode\n", dev_info(&pdev->dev, "running in 16-bit, %sbyte swap local bus mode\n",
(net2272_read(dev, LOCCTL) & (1 << BYTE_SWAP)) ? "" : "no "); (net2272_read(dev, LOCCTL) & (1 << BYTE_SWAP)) ? "" : "no ");
the_controller = dev;
return 0; return 0;
err_io: err_io:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment