Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+19 −53
Original line number Diff line number Diff line
@@ -1172,17 +1172,18 @@ net2272_pullup(struct usb_gadget *_gadget, int is_on)
	return 0;
}

static int net2272_start(struct usb_gadget_driver *driver,
		int (*bind)(struct usb_gadget *));
static int net2272_stop(struct usb_gadget_driver *driver);
static int net2272_start(struct usb_gadget *_gadget,
		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 = {
	.get_frame	= net2272_get_frame,
	.wakeup		= net2272_wakeup,
	.set_selfpowered = net2272_set_selfpowered,
	.pullup		= net2272_pullup,
	.start			= net2272_start,
	.stop			= net2272_stop,
	.udc_start	= net2272_start,
	.udc_stop	= net2272_stop,
};

/*---------------------------------------------------------------------------*/
@@ -1356,8 +1357,6 @@ net2272_set_fifo_mode(struct net2272 *dev, int mode)

/*---------------------------------------------------------------------------*/

static struct net2272 *the_controller;

static void
net2272_usb_reset(struct net2272 *dev)
{
@@ -1453,20 +1452,17 @@ net2272_ep0_start(struct net2272 *dev)
 * disconnect is reported.  then a host may connect again, or
 * the driver might get unbound.
 */
static int net2272_start(struct usb_gadget_driver *driver,
	int (*bind)(struct usb_gadget *))
static int net2272_start(struct usb_gadget *_gadget,
		struct usb_gadget_driver *driver)
{
	struct net2272 *dev = the_controller;
	int ret;
	struct net2272 *dev;
	unsigned i;

	if (!driver || !bind || !driver->unbind || !driver->setup ||
	if (!driver || !driver->unbind || !driver->setup ||
	    driver->speed != USB_SPEED_HIGH)
		return -EINVAL;
	if (!dev)
		return -ENODEV;
	if (dev->driver)
		return -EBUSY;

	dev = container_of(_gadget, struct net2272, gadget);

	for (i = 0; i < 4; ++i)
		dev->ep[i].irqs = 0;
@@ -1475,14 +1471,6 @@ static int net2272_start(struct usb_gadget_driver *driver,
	driver->driver.bus = NULL;
	dev->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
	 * for set_configuration as well as eventual disconnect.
@@ -1510,33 +1498,21 @@ stop_activity(struct net2272 *dev, struct usb_gadget_driver *driver)
	for (i = 0; i < 4; ++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);
}

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;

	if (!dev)
		return -ENODEV;
	if (!driver || driver != dev->driver)
		return -EINVAL;
	dev = container_of(_gadget, struct net2272, gadget);

	spin_lock_irqsave(&dev->lock, flags);
	stop_activity(dev, driver);
	spin_unlock_irqrestore(&dev->lock, flags);

	net2272_pullup(&dev->gadget, 0);

	driver->unbind(&dev->gadget);
	dev->gadget.dev.driver = NULL;
	dev->driver = NULL;

@@ -2238,7 +2214,6 @@ net2272_remove(struct net2272 *dev)
	device_remove_file(dev->dev, &dev_attr_registers);

	dev_info(dev->dev, "unbind\n");
	the_controller = NULL;
}

static struct net2272 * __devinit
@@ -2246,11 +2221,6 @@ net2272_probe_init(struct device *dev, unsigned int irq)
{
	struct net2272 *ret;

	if (the_controller) {
		dev_warn(dev, "ignoring\n");
		return ERR_PTR(-EBUSY);
	}

	if (!irq) {
		dev_dbg(dev, "No IRQ!\n");
		return ERR_PTR(-ENODEV);
@@ -2307,8 +2277,6 @@ net2272_probe_fin(struct net2272 *dev, unsigned int irqflags)
		dma_mode_string());
	dev_info(dev->dev, "version: %s\n", driver_vers);

	the_controller = dev;

	ret = device_register(&dev->gadget.dev);
	if (ret)
		goto err_irq;
@@ -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",
		(net2272_read(dev, LOCCTL) & (1 << BYTE_SWAP)) ? "" : "no ");

	the_controller = dev;

	return 0;

 err_io: