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

Commit ffe0b335 authored by Sebastian Andrzej Siewior's avatar Sebastian Andrzej Siewior Committed by Felipe Balbi
Browse files

usb: gadget: remove global variable composite in composite.c



This patch removes the global variable composite in composite.c.
The private data which was saved there is now passed via an additional
argument to the bind() function in struct usb_gadget_driver.

Only the "old-style" UDC drivers have to be touched here, new style are
doing it right because this change is made in udc-core.

Acked-by: default avatarMichal Nazarewicz <mina86@mina86.com>
Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent e220ff75
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1422,7 +1422,8 @@ static u8 override_id(struct usb_composite_dev *cdev, u8 *desc)
	return *desc;
}

static int composite_bind(struct usb_gadget *gadget)
static int composite_bind(struct usb_gadget *gadget,
		struct usb_gadget_driver *driver)
{
	struct usb_composite_dev	*cdev;
	int				status = -ENOMEM;
+3 −3
Original line number Diff line number Diff line
@@ -1401,7 +1401,7 @@ static int udc_wakeup(struct usb_gadget *gadget)
}

static int amd5536_start(struct usb_gadget_driver *driver,
		int (*bind)(struct usb_gadget *));
		int (*bind)(struct usb_gadget *, struct usb_gadget_driver *));
static int amd5536_stop(struct usb_gadget_driver *driver);
/* gadget operations */
static const struct usb_gadget_ops udc_ops = {
@@ -1914,7 +1914,7 @@ static int setup_ep0(struct udc *dev)

/* Called by gadget driver to register itself */
static int amd5536_start(struct usb_gadget_driver *driver,
		int (*bind)(struct usb_gadget *))
		int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
{
	struct udc		*dev = udc;
	int			retval;
@@ -1932,7 +1932,7 @@ static int amd5536_start(struct usb_gadget_driver *driver,
	dev->driver = driver;
	dev->gadget.dev.driver = &driver->driver;

	retval = bind(&dev->gadget);
	retval = bind(&dev->gadget, driver);

	/* Some gadget drivers use both ep0 directions.
	 * NOTE: to gadget driver, ep0 is just one endpoint...
+30 −22
Original line number Diff line number Diff line
@@ -31,8 +31,6 @@
/* big enough to hold our biggest descriptor */
#define USB_BUFSIZ	1024

static struct usb_composite_driver *composite;

/* Some systems will need runtime overrides for the  product identifiers
 * published in the device descriptor, either numbers or strings or both.
 * String parameters are in UTF-8 (superset of ASCII's 7 bit characters).
@@ -889,6 +887,7 @@ static int lookup_string(
static int get_string(struct usb_composite_dev *cdev,
		void *buf, u16 language, int id)
{
	struct usb_composite_driver	*composite = cdev->driver;
	struct usb_configuration	*c;
	struct usb_function		*f;
	int				len;
@@ -1359,8 +1358,8 @@ static void composite_disconnect(struct usb_gadget *gadget)
	spin_lock_irqsave(&cdev->lock, flags);
	if (cdev->config)
		reset_config(cdev);
	if (composite->disconnect)
		composite->disconnect(cdev);
	if (cdev->driver->disconnect)
		cdev->driver->disconnect(cdev);
	spin_unlock_irqrestore(&cdev->lock, flags);
}

@@ -1396,8 +1395,8 @@ composite_unbind(struct usb_gadget *gadget)
				struct usb_configuration, list);
		remove_config(cdev, c);
	}
	if (composite->unbind)
		composite->unbind(cdev);
	if (cdev->driver->unbind)
		cdev->driver->unbind(cdev);

	if (cdev->req) {
		kfree(cdev->req->buf);
@@ -1406,7 +1405,6 @@ composite_unbind(struct usb_gadget *gadget)
	device_remove_file(&gadget->dev, &dev_attr_suspended);
	kfree(cdev);
	set_gadget_data(gadget, NULL);
	composite = NULL;
}

static u8 override_id(struct usb_composite_dev *cdev, u8 *desc)
@@ -1422,9 +1420,16 @@ static u8 override_id(struct usb_composite_dev *cdev, u8 *desc)
	return *desc;
}

static int composite_bind(struct usb_gadget *gadget)
static struct usb_composite_driver *to_cdriver(struct usb_gadget_driver *gdrv)
{
	return container_of(gdrv, struct usb_composite_driver, gadget_driver);
}

static int composite_bind(struct usb_gadget *gadget,
		struct usb_gadget_driver *gdriver)
{
	struct usb_composite_dev	*cdev;
	struct usb_composite_driver	*composite = to_cdriver(gdriver);
	int				status = -ENOMEM;

	cdev = kzalloc(sizeof *cdev, GFP_KERNEL);
@@ -1546,8 +1551,8 @@ composite_suspend(struct usb_gadget *gadget)
				f->suspend(f);
		}
	}
	if (composite->suspend)
		composite->suspend(cdev);
	if (cdev->driver->suspend)
		cdev->driver->suspend(cdev);

	cdev->suspended = 1;

@@ -1565,8 +1570,8 @@ composite_resume(struct usb_gadget *gadget)
	 * suspend/resume callbacks?
	 */
	DBG(cdev, "resume\n");
	if (composite->resume)
		composite->resume(cdev);
	if (cdev->driver->resume)
		cdev->driver->resume(cdev);
	if (cdev->config) {
		list_for_each_entry(f, &cdev->config->functions, list) {
			if (f->resume)
@@ -1584,7 +1589,7 @@ composite_resume(struct usb_gadget *gadget)

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

static struct usb_gadget_driver composite_driver = {
static const struct usb_gadget_driver composite_driver_template = {
	.bind		= composite_bind,
	.unbind		= composite_unbind,

@@ -1620,19 +1625,24 @@ static struct usb_gadget_driver composite_driver = {
 */
int usb_composite_probe(struct usb_composite_driver *driver)
{
	if (!driver || !driver->dev || composite || !driver->bind)
	struct usb_gadget_driver *gadget_driver;

	if (!driver || !driver->dev || !driver->bind)
		return -EINVAL;

	if (!driver->name)
		driver->name = "composite";
	if (!driver->iProduct)
		driver->iProduct = driver->name;
	composite_driver.function =  (char *) driver->name;
	composite_driver.driver.name = driver->name;
	composite_driver.max_speed = driver->max_speed;
	composite = driver;

	return usb_gadget_probe_driver(&composite_driver);
	driver->gadget_driver = composite_driver_template;
	gadget_driver = &driver->gadget_driver;

	gadget_driver->function =  (char *) driver->name;
	gadget_driver->driver.name = driver->name;
	gadget_driver->max_speed = driver->max_speed;

	return usb_gadget_probe_driver(gadget_driver);
}

/**
@@ -1644,9 +1654,7 @@ int usb_composite_probe(struct usb_composite_driver *driver)
 */
void usb_composite_unregister(struct usb_composite_driver *driver)
{
	if (composite != driver)
		return;
	usb_gadget_unregister_driver(&composite_driver);
	usb_gadget_unregister_driver(&driver->gadget_driver);
}

/**
+2 −1
Original line number Diff line number Diff line
@@ -292,7 +292,8 @@ fail_1:
	return -ENODEV;
}

static int __init dbgp_bind(struct usb_gadget *gadget)
static int __init dbgp_bind(struct usb_gadget *gadget,
		struct usb_gadget_driver *driver)
{
	int err, stp;

+2 −1
Original line number Diff line number Diff line
@@ -3331,7 +3331,8 @@ static int __init check_parameters(struct fsg_dev *fsg)
}


static int __init fsg_bind(struct usb_gadget *gadget)
static int __init fsg_bind(struct usb_gadget *gadget,
		struct usb_gadget_driver *driver)
{
	struct fsg_dev		*fsg = the_fsg;
	int			rc;
Loading