aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget
diff options
context:
space:
mode:
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>2012-09-07 03:53:17 -0400
committerFelipe Balbi <balbi@ti.com>2012-09-10 08:35:41 -0400
commitffe0b335062505a98d7296dae2c2a197713f87e0 (patch)
treec2fe75a9711026ee65409034dd71579bad64a801 /drivers/usb/gadget
parente220ff75db3c1195814c2ad5ada11f71b011d000 (diff)
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: Michal Nazarewicz <mina86@mina86.com> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/gadget')
-rw-r--r--drivers/usb/gadget/amd5536udc.c6
-rw-r--r--drivers/usb/gadget/composite.c52
-rw-r--r--drivers/usb/gadget/dbgp.c3
-rw-r--r--drivers/usb/gadget/file_storage.c3
-rw-r--r--drivers/usb/gadget/fsl_udc_core.c6
-rw-r--r--drivers/usb/gadget/fusb300_udc.c4
-rw-r--r--drivers/usb/gadget/goku_udc.c6
-rw-r--r--drivers/usb/gadget/inode.c7
-rw-r--r--drivers/usb/gadget/m66592-udc.c4
-rw-r--r--drivers/usb/gadget/mv_udc_core.c6
-rw-r--r--drivers/usb/gadget/omap_udc.c6
-rw-r--r--drivers/usb/gadget/pch_udc.c6
-rw-r--r--drivers/usb/gadget/pxa25x_udc.c6
-rw-r--r--drivers/usb/gadget/pxa27x_udc.c6
-rw-r--r--drivers/usb/gadget/s3c2410_udc.c6
-rw-r--r--drivers/usb/gadget/udc-core.c4
16 files changed, 71 insertions, 60 deletions
diff --git a/drivers/usb/gadget/amd5536udc.c b/drivers/usb/gadget/amd5536udc.c
index 187d21181cd5..fc0ec5e0d58e 100644
--- a/drivers/usb/gadget/amd5536udc.c
+++ b/drivers/usb/gadget/amd5536udc.c
@@ -1401,7 +1401,7 @@ static int udc_wakeup(struct usb_gadget *gadget)
1401} 1401}
1402 1402
1403static int amd5536_start(struct usb_gadget_driver *driver, 1403static int amd5536_start(struct usb_gadget_driver *driver,
1404 int (*bind)(struct usb_gadget *)); 1404 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *));
1405static int amd5536_stop(struct usb_gadget_driver *driver); 1405static int amd5536_stop(struct usb_gadget_driver *driver);
1406/* gadget operations */ 1406/* gadget operations */
1407static const struct usb_gadget_ops udc_ops = { 1407static const struct usb_gadget_ops udc_ops = {
@@ -1914,7 +1914,7 @@ static int setup_ep0(struct udc *dev)
1914 1914
1915/* Called by gadget driver to register itself */ 1915/* Called by gadget driver to register itself */
1916static int amd5536_start(struct usb_gadget_driver *driver, 1916static int amd5536_start(struct usb_gadget_driver *driver,
1917 int (*bind)(struct usb_gadget *)) 1917 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
1918{ 1918{
1919 struct udc *dev = udc; 1919 struct udc *dev = udc;
1920 int retval; 1920 int retval;
@@ -1932,7 +1932,7 @@ static int amd5536_start(struct usb_gadget_driver *driver,
1932 dev->driver = driver; 1932 dev->driver = driver;
1933 dev->gadget.dev.driver = &driver->driver; 1933 dev->gadget.dev.driver = &driver->driver;
1934 1934
1935 retval = bind(&dev->gadget); 1935 retval = bind(&dev->gadget, driver);
1936 1936
1937 /* Some gadget drivers use both ep0 directions. 1937 /* Some gadget drivers use both ep0 directions.
1938 * NOTE: to gadget driver, ep0 is just one endpoint... 1938 * NOTE: to gadget driver, ep0 is just one endpoint...
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index 2a345f28b9ae..0b6ee2012af1 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -31,8 +31,6 @@
31/* big enough to hold our biggest descriptor */ 31/* big enough to hold our biggest descriptor */
32#define USB_BUFSIZ 1024 32#define USB_BUFSIZ 1024
33 33
34static struct usb_composite_driver *composite;
35
36/* Some systems will need runtime overrides for the product identifiers 34/* Some systems will need runtime overrides for the product identifiers
37 * published in the device descriptor, either numbers or strings or both. 35 * published in the device descriptor, either numbers or strings or both.
38 * String parameters are in UTF-8 (superset of ASCII's 7 bit characters). 36 * String parameters are in UTF-8 (superset of ASCII's 7 bit characters).
@@ -889,6 +887,7 @@ static int lookup_string(
889static int get_string(struct usb_composite_dev *cdev, 887static int get_string(struct usb_composite_dev *cdev,
890 void *buf, u16 language, int id) 888 void *buf, u16 language, int id)
891{ 889{
890 struct usb_composite_driver *composite = cdev->driver;
892 struct usb_configuration *c; 891 struct usb_configuration *c;
893 struct usb_function *f; 892 struct usb_function *f;
894 int len; 893 int len;
@@ -1359,8 +1358,8 @@ static void composite_disconnect(struct usb_gadget *gadget)
1359 spin_lock_irqsave(&cdev->lock, flags); 1358 spin_lock_irqsave(&cdev->lock, flags);
1360 if (cdev->config) 1359 if (cdev->config)
1361 reset_config(cdev); 1360 reset_config(cdev);
1362 if (composite->disconnect) 1361 if (cdev->driver->disconnect)
1363 composite->disconnect(cdev); 1362 cdev->driver->disconnect(cdev);
1364 spin_unlock_irqrestore(&cdev->lock, flags); 1363 spin_unlock_irqrestore(&cdev->lock, flags);
1365} 1364}
1366 1365
@@ -1396,8 +1395,8 @@ composite_unbind(struct usb_gadget *gadget)
1396 struct usb_configuration, list); 1395 struct usb_configuration, list);
1397 remove_config(cdev, c); 1396 remove_config(cdev, c);
1398 } 1397 }
1399 if (composite->unbind) 1398 if (cdev->driver->unbind)
1400 composite->unbind(cdev); 1399 cdev->driver->unbind(cdev);
1401 1400
1402 if (cdev->req) { 1401 if (cdev->req) {
1403 kfree(cdev->req->buf); 1402 kfree(cdev->req->buf);
@@ -1406,7 +1405,6 @@ composite_unbind(struct usb_gadget *gadget)
1406 device_remove_file(&gadget->dev, &dev_attr_suspended); 1405 device_remove_file(&gadget->dev, &dev_attr_suspended);
1407 kfree(cdev); 1406 kfree(cdev);
1408 set_gadget_data(gadget, NULL); 1407 set_gadget_data(gadget, NULL);
1409 composite = NULL;
1410} 1408}
1411 1409
1412static u8 override_id(struct usb_composite_dev *cdev, u8 *desc) 1410static 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)
1422 return *desc; 1420 return *desc;
1423} 1421}
1424 1422
1425static int composite_bind(struct usb_gadget *gadget) 1423static struct usb_composite_driver *to_cdriver(struct usb_gadget_driver *gdrv)
1424{
1425 return container_of(gdrv, struct usb_composite_driver, gadget_driver);
1426}
1427
1428static int composite_bind(struct usb_gadget *gadget,
1429 struct usb_gadget_driver *gdriver)
1426{ 1430{
1427 struct usb_composite_dev *cdev; 1431 struct usb_composite_dev *cdev;
1432 struct usb_composite_driver *composite = to_cdriver(gdriver);
1428 int status = -ENOMEM; 1433 int status = -ENOMEM;
1429 1434
1430 cdev = kzalloc(sizeof *cdev, GFP_KERNEL); 1435 cdev = kzalloc(sizeof *cdev, GFP_KERNEL);
@@ -1546,8 +1551,8 @@ composite_suspend(struct usb_gadget *gadget)
1546 f->suspend(f); 1551 f->suspend(f);
1547 } 1552 }
1548 } 1553 }
1549 if (composite->suspend) 1554 if (cdev->driver->suspend)
1550 composite->suspend(cdev); 1555 cdev->driver->suspend(cdev);
1551 1556
1552 cdev->suspended = 1; 1557 cdev->suspended = 1;
1553 1558
@@ -1565,8 +1570,8 @@ composite_resume(struct usb_gadget *gadget)
1565 * suspend/resume callbacks? 1570 * suspend/resume callbacks?
1566 */ 1571 */
1567 DBG(cdev, "resume\n"); 1572 DBG(cdev, "resume\n");
1568 if (composite->resume) 1573 if (cdev->driver->resume)
1569 composite->resume(cdev); 1574 cdev->driver->resume(cdev);
1570 if (cdev->config) { 1575 if (cdev->config) {
1571 list_for_each_entry(f, &cdev->config->functions, list) { 1576 list_for_each_entry(f, &cdev->config->functions, list) {
1572 if (f->resume) 1577 if (f->resume)
@@ -1584,7 +1589,7 @@ composite_resume(struct usb_gadget *gadget)
1584 1589
1585/*-------------------------------------------------------------------------*/ 1590/*-------------------------------------------------------------------------*/
1586 1591
1587static struct usb_gadget_driver composite_driver = { 1592static const struct usb_gadget_driver composite_driver_template = {
1588 .bind = composite_bind, 1593 .bind = composite_bind,
1589 .unbind = composite_unbind, 1594 .unbind = composite_unbind,
1590 1595
@@ -1620,19 +1625,24 @@ static struct usb_gadget_driver composite_driver = {
1620 */ 1625 */
1621int usb_composite_probe(struct usb_composite_driver *driver) 1626int usb_composite_probe(struct usb_composite_driver *driver)
1622{ 1627{
1623 if (!driver || !driver->dev || composite || !driver->bind) 1628 struct usb_gadget_driver *gadget_driver;
1629
1630 if (!driver || !driver->dev || !driver->bind)
1624 return -EINVAL; 1631 return -EINVAL;
1625 1632
1626 if (!driver->name) 1633 if (!driver->name)
1627 driver->name = "composite"; 1634 driver->name = "composite";
1628 if (!driver->iProduct) 1635 if (!driver->iProduct)
1629 driver->iProduct = driver->name; 1636 driver->iProduct = driver->name;
1630 composite_driver.function = (char *) driver->name;
1631 composite_driver.driver.name = driver->name;
1632 composite_driver.max_speed = driver->max_speed;
1633 composite = driver;
1634 1637
1635 return usb_gadget_probe_driver(&composite_driver); 1638 driver->gadget_driver = composite_driver_template;
1639 gadget_driver = &driver->gadget_driver;
1640
1641 gadget_driver->function = (char *) driver->name;
1642 gadget_driver->driver.name = driver->name;
1643 gadget_driver->max_speed = driver->max_speed;
1644
1645 return usb_gadget_probe_driver(gadget_driver);
1636} 1646}
1637 1647
1638/** 1648/**
@@ -1644,9 +1654,7 @@ int usb_composite_probe(struct usb_composite_driver *driver)
1644 */ 1654 */
1645void usb_composite_unregister(struct usb_composite_driver *driver) 1655void usb_composite_unregister(struct usb_composite_driver *driver)
1646{ 1656{
1647 if (composite != driver) 1657 usb_gadget_unregister_driver(&driver->gadget_driver);
1648 return;
1649 usb_gadget_unregister_driver(&composite_driver);
1650} 1658}
1651 1659
1652/** 1660/**
diff --git a/drivers/usb/gadget/dbgp.c b/drivers/usb/gadget/dbgp.c
index df9a0104bdf2..cc1746597aab 100644
--- a/drivers/usb/gadget/dbgp.c
+++ b/drivers/usb/gadget/dbgp.c
@@ -292,7 +292,8 @@ fail_1:
292 return -ENODEV; 292 return -ENODEV;
293} 293}
294 294
295static int __init dbgp_bind(struct usb_gadget *gadget) 295static int __init dbgp_bind(struct usb_gadget *gadget,
296 struct usb_gadget_driver *driver)
296{ 297{
297 int err, stp; 298 int err, stp;
298 299
diff --git a/drivers/usb/gadget/file_storage.c b/drivers/usb/gadget/file_storage.c
index ce186fa7e7b2..cdacae706b70 100644
--- a/drivers/usb/gadget/file_storage.c
+++ b/drivers/usb/gadget/file_storage.c
@@ -3331,7 +3331,8 @@ static int __init check_parameters(struct fsg_dev *fsg)
3331} 3331}
3332 3332
3333 3333
3334static int __init fsg_bind(struct usb_gadget *gadget) 3334static int __init fsg_bind(struct usb_gadget *gadget,
3335 struct usb_gadget_driver *driver)
3335{ 3336{
3336 struct fsg_dev *fsg = the_fsg; 3337 struct fsg_dev *fsg = the_fsg;
3337 int rc; 3338 int rc;
diff --git a/drivers/usb/gadget/fsl_udc_core.c b/drivers/usb/gadget/fsl_udc_core.c
index 3def828f85e7..6ae70cba0c4a 100644
--- a/drivers/usb/gadget/fsl_udc_core.c
+++ b/drivers/usb/gadget/fsl_udc_core.c
@@ -1255,7 +1255,7 @@ static int fsl_pullup(struct usb_gadget *gadget, int is_on)
1255} 1255}
1256 1256
1257static int fsl_start(struct usb_gadget_driver *driver, 1257static int fsl_start(struct usb_gadget_driver *driver,
1258 int (*bind)(struct usb_gadget *)); 1258 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *));
1259static int fsl_stop(struct usb_gadget_driver *driver); 1259static int fsl_stop(struct usb_gadget_driver *driver);
1260/* defined in gadget.h */ 1260/* defined in gadget.h */
1261static struct usb_gadget_ops fsl_gadget_ops = { 1261static struct usb_gadget_ops fsl_gadget_ops = {
@@ -1951,7 +1951,7 @@ static irqreturn_t fsl_udc_irq(int irq, void *_udc)
1951 * Called by initialization code of gadget drivers 1951 * Called by initialization code of gadget drivers
1952*----------------------------------------------------------------*/ 1952*----------------------------------------------------------------*/
1953static int fsl_start(struct usb_gadget_driver *driver, 1953static int fsl_start(struct usb_gadget_driver *driver,
1954 int (*bind)(struct usb_gadget *)) 1954 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
1955{ 1955{
1956 int retval = -ENODEV; 1956 int retval = -ENODEV;
1957 unsigned long flags = 0; 1957 unsigned long flags = 0;
@@ -1976,7 +1976,7 @@ static int fsl_start(struct usb_gadget_driver *driver,
1976 spin_unlock_irqrestore(&udc_controller->lock, flags); 1976 spin_unlock_irqrestore(&udc_controller->lock, flags);
1977 1977
1978 /* bind udc driver to gadget driver */ 1978 /* bind udc driver to gadget driver */
1979 retval = bind(&udc_controller->gadget); 1979 retval = bind(&udc_controller->gadget, driver);
1980 if (retval) { 1980 if (retval) {
1981 VDBG("bind to %s --> %d", driver->driver.name, retval); 1981 VDBG("bind to %s --> %d", driver->driver.name, retval);
1982 udc_controller->gadget.dev.driver = NULL; 1982 udc_controller->gadget.dev.driver = NULL;
diff --git a/drivers/usb/gadget/fusb300_udc.c b/drivers/usb/gadget/fusb300_udc.c
index cdd94540e1cd..72cd5e6719db 100644
--- a/drivers/usb/gadget/fusb300_udc.c
+++ b/drivers/usb/gadget/fusb300_udc.c
@@ -1311,7 +1311,7 @@ static void init_controller(struct fusb300 *fusb300)
1311static struct fusb300 *the_controller; 1311static struct fusb300 *the_controller;
1312 1312
1313static int fusb300_udc_start(struct usb_gadget_driver *driver, 1313static int fusb300_udc_start(struct usb_gadget_driver *driver,
1314 int (*bind)(struct usb_gadget *)) 1314 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
1315{ 1315{
1316 struct fusb300 *fusb300 = the_controller; 1316 struct fusb300 *fusb300 = the_controller;
1317 int retval; 1317 int retval;
@@ -1339,7 +1339,7 @@ static int fusb300_udc_start(struct usb_gadget_driver *driver,
1339 goto error; 1339 goto error;
1340 } 1340 }
1341 1341
1342 retval = bind(&fusb300->gadget); 1342 retval = bind(&fusb300->gadget, driver);
1343 if (retval) { 1343 if (retval) {
1344 pr_err("bind to driver error (%d)\n", retval); 1344 pr_err("bind to driver error (%d)\n", retval);
1345 device_del(&fusb300->gadget.dev); 1345 device_del(&fusb300->gadget.dev);
diff --git a/drivers/usb/gadget/goku_udc.c b/drivers/usb/gadget/goku_udc.c
index 9fd7886cfa9a..51037cb78604 100644
--- a/drivers/usb/gadget/goku_udc.c
+++ b/drivers/usb/gadget/goku_udc.c
@@ -994,7 +994,7 @@ static int goku_get_frame(struct usb_gadget *_gadget)
994} 994}
995 995
996static int goku_start(struct usb_gadget_driver *driver, 996static int goku_start(struct usb_gadget_driver *driver,
997 int (*bind)(struct usb_gadget *)); 997 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *));
998static int goku_stop(struct usb_gadget_driver *driver); 998static int goku_stop(struct usb_gadget_driver *driver);
999 999
1000static const struct usb_gadget_ops goku_ops = { 1000static const struct usb_gadget_ops goku_ops = {
@@ -1348,7 +1348,7 @@ static struct goku_udc *the_controller;
1348 * the driver might get unbound. 1348 * the driver might get unbound.
1349 */ 1349 */
1350static int goku_start(struct usb_gadget_driver *driver, 1350static int goku_start(struct usb_gadget_driver *driver,
1351 int (*bind)(struct usb_gadget *)) 1351 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
1352{ 1352{
1353 struct goku_udc *dev = the_controller; 1353 struct goku_udc *dev = the_controller;
1354 int retval; 1354 int retval;
@@ -1368,7 +1368,7 @@ static int goku_start(struct usb_gadget_driver *driver,
1368 driver->driver.bus = NULL; 1368 driver->driver.bus = NULL;
1369 dev->driver = driver; 1369 dev->driver = driver;
1370 dev->gadget.dev.driver = &driver->driver; 1370 dev->gadget.dev.driver = &driver->driver;
1371 retval = bind(&dev->gadget); 1371 retval = bind(&dev->gadget, driver);
1372 if (retval) { 1372 if (retval) {
1373 DBG(dev, "bind to driver %s --> error %d\n", 1373 DBG(dev, "bind to driver %s --> error %d\n",
1374 driver->driver.name, retval); 1374 driver->driver.name, retval);
diff --git a/drivers/usb/gadget/inode.c b/drivers/usb/gadget/inode.c
index 2521804ba4ee..4bb6d53f2de3 100644
--- a/drivers/usb/gadget/inode.c
+++ b/drivers/usb/gadget/inode.c
@@ -1679,8 +1679,8 @@ gadgetfs_unbind (struct usb_gadget *gadget)
1679 1679
1680static struct dev_data *the_device; 1680static struct dev_data *the_device;
1681 1681
1682static int 1682static int gadgetfs_bind(struct usb_gadget *gadget,
1683gadgetfs_bind (struct usb_gadget *gadget) 1683 struct usb_gadget_driver *driver)
1684{ 1684{
1685 struct dev_data *dev = the_device; 1685 struct dev_data *dev = the_device;
1686 1686
@@ -1773,7 +1773,8 @@ static struct usb_gadget_driver gadgetfs_driver = {
1773 1773
1774static void gadgetfs_nop(struct usb_gadget *arg) { } 1774static void gadgetfs_nop(struct usb_gadget *arg) { }
1775 1775
1776static int gadgetfs_probe (struct usb_gadget *gadget) 1776static int gadgetfs_probe(struct usb_gadget *gadget,
1777 struct usb_gadget_driver *driver)
1777{ 1778{
1778 CHIP = gadget->name; 1779 CHIP = gadget->name;
1779 return -EISNAM; 1780 return -EISNAM;
diff --git a/drivers/usb/gadget/m66592-udc.c b/drivers/usb/gadget/m66592-udc.c
index cf6bd626f3fe..b6401f1b56ce 100644
--- a/drivers/usb/gadget/m66592-udc.c
+++ b/drivers/usb/gadget/m66592-udc.c
@@ -1466,7 +1466,7 @@ static struct usb_ep_ops m66592_ep_ops = {
1466static struct m66592 *the_controller; 1466static struct m66592 *the_controller;
1467 1467
1468static int m66592_start(struct usb_gadget_driver *driver, 1468static int m66592_start(struct usb_gadget_driver *driver,
1469 int (*bind)(struct usb_gadget *)) 1469 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
1470{ 1470{
1471 struct m66592 *m66592 = the_controller; 1471 struct m66592 *m66592 = the_controller;
1472 int retval; 1472 int retval;
@@ -1492,7 +1492,7 @@ static int m66592_start(struct usb_gadget_driver *driver,
1492 goto error; 1492 goto error;
1493 } 1493 }
1494 1494
1495 retval = bind(&m66592->gadget); 1495 retval = bind(&m66592->gadget, driver);
1496 if (retval) { 1496 if (retval) {
1497 pr_err("bind to driver error (%d)\n", retval); 1497 pr_err("bind to driver error (%d)\n", retval);
1498 device_del(&m66592->gadget.dev); 1498 device_del(&m66592->gadget.dev);
diff --git a/drivers/usb/gadget/mv_udc_core.c b/drivers/usb/gadget/mv_udc_core.c
index ad91de4d60d8..ea45224f78c8 100644
--- a/drivers/usb/gadget/mv_udc_core.c
+++ b/drivers/usb/gadget/mv_udc_core.c
@@ -1269,7 +1269,7 @@ static int mv_udc_pullup(struct usb_gadget *gadget, int is_on)
1269} 1269}
1270 1270
1271static int mv_udc_start(struct usb_gadget_driver *driver, 1271static int mv_udc_start(struct usb_gadget_driver *driver,
1272 int (*bind)(struct usb_gadget *)); 1272 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *));
1273static int mv_udc_stop(struct usb_gadget_driver *driver); 1273static int mv_udc_stop(struct usb_gadget_driver *driver);
1274/* device controller usb_gadget_ops structure */ 1274/* device controller usb_gadget_ops structure */
1275static const struct usb_gadget_ops mv_ops = { 1275static const struct usb_gadget_ops mv_ops = {
@@ -1374,7 +1374,7 @@ static void stop_activity(struct mv_udc *udc, struct usb_gadget_driver *driver)
1374} 1374}
1375 1375
1376static int mv_udc_start(struct usb_gadget_driver *driver, 1376static int mv_udc_start(struct usb_gadget_driver *driver,
1377 int (*bind)(struct usb_gadget *)) 1377 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
1378{ 1378{
1379 struct mv_udc *udc = the_controller; 1379 struct mv_udc *udc = the_controller;
1380 int retval = 0; 1380 int retval = 0;
@@ -1399,7 +1399,7 @@ static int mv_udc_start(struct usb_gadget_driver *driver,
1399 1399
1400 spin_unlock_irqrestore(&udc->lock, flags); 1400 spin_unlock_irqrestore(&udc->lock, flags);
1401 1401
1402 retval = bind(&udc->gadget); 1402 retval = bind(&udc->gadget, driver);
1403 if (retval) { 1403 if (retval) {
1404 dev_err(&udc->dev->dev, "bind to driver %s --> %d\n", 1404 dev_err(&udc->dev->dev, "bind to driver %s --> %d\n",
1405 driver->driver.name, retval); 1405 driver->driver.name, retval);
diff --git a/drivers/usb/gadget/omap_udc.c b/drivers/usb/gadget/omap_udc.c
index f9132ada53b5..2a4749c3eb3f 100644
--- a/drivers/usb/gadget/omap_udc.c
+++ b/drivers/usb/gadget/omap_udc.c
@@ -1308,7 +1308,7 @@ static int omap_pullup(struct usb_gadget *gadget, int is_on)
1308} 1308}
1309 1309
1310static int omap_udc_start(struct usb_gadget_driver *driver, 1310static int omap_udc_start(struct usb_gadget_driver *driver,
1311 int (*bind)(struct usb_gadget *)); 1311 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *));
1312static int omap_udc_stop(struct usb_gadget_driver *driver); 1312static int omap_udc_stop(struct usb_gadget_driver *driver);
1313 1313
1314static struct usb_gadget_ops omap_gadget_ops = { 1314static struct usb_gadget_ops omap_gadget_ops = {
@@ -2040,7 +2040,7 @@ static inline int machine_without_vbus_sense(void)
2040} 2040}
2041 2041
2042static int omap_udc_start(struct usb_gadget_driver *driver, 2042static int omap_udc_start(struct usb_gadget_driver *driver,
2043 int (*bind)(struct usb_gadget *)) 2043 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
2044{ 2044{
2045 int status = -ENODEV; 2045 int status = -ENODEV;
2046 struct omap_ep *ep; 2046 struct omap_ep *ep;
@@ -2082,7 +2082,7 @@ static int omap_udc_start(struct usb_gadget_driver *driver,
2082 if (udc->dc_clk != NULL) 2082 if (udc->dc_clk != NULL)
2083 omap_udc_enable_clock(1); 2083 omap_udc_enable_clock(1);
2084 2084
2085 status = bind(&udc->gadget); 2085 status = bind(&udc->gadget, driver);
2086 if (status) { 2086 if (status) {
2087 DBG("bind to %s --> %d\n", driver->driver.name, status); 2087 DBG("bind to %s --> %d\n", driver->driver.name, status);
2088 udc->gadget.dev.driver = NULL; 2088 udc->gadget.dev.driver = NULL;
diff --git a/drivers/usb/gadget/pch_udc.c b/drivers/usb/gadget/pch_udc.c
index f4fb71c9ae08..6490c0040e3a 100644
--- a/drivers/usb/gadget/pch_udc.c
+++ b/drivers/usb/gadget/pch_udc.c
@@ -1236,7 +1236,7 @@ static int pch_udc_pcd_vbus_draw(struct usb_gadget *gadget, unsigned int mA)
1236} 1236}
1237 1237
1238static int pch_udc_start(struct usb_gadget_driver *driver, 1238static int pch_udc_start(struct usb_gadget_driver *driver,
1239 int (*bind)(struct usb_gadget *)); 1239 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *));
1240static int pch_udc_stop(struct usb_gadget_driver *driver); 1240static int pch_udc_stop(struct usb_gadget_driver *driver);
1241static const struct usb_gadget_ops pch_udc_ops = { 1241static const struct usb_gadget_ops pch_udc_ops = {
1242 .get_frame = pch_udc_pcd_get_frame, 1242 .get_frame = pch_udc_pcd_get_frame,
@@ -2982,7 +2982,7 @@ static int init_dma_pools(struct pch_udc_dev *dev)
2982} 2982}
2983 2983
2984static int pch_udc_start(struct usb_gadget_driver *driver, 2984static int pch_udc_start(struct usb_gadget_driver *driver,
2985 int (*bind)(struct usb_gadget *)) 2985 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
2986{ 2986{
2987 struct pch_udc_dev *dev = pch_udc; 2987 struct pch_udc_dev *dev = pch_udc;
2988 int retval; 2988 int retval;
@@ -3006,7 +3006,7 @@ static int pch_udc_start(struct usb_gadget_driver *driver,
3006 dev->gadget.dev.driver = &driver->driver; 3006 dev->gadget.dev.driver = &driver->driver;
3007 3007
3008 /* Invoke the bind routine of the gadget driver */ 3008 /* Invoke the bind routine of the gadget driver */
3009 retval = bind(&dev->gadget); 3009 retval = bind(&dev->gadget, driver);
3010 3010
3011 if (retval) { 3011 if (retval) {
3012 dev_err(&dev->pdev->dev, "%s: binding to %s returning %d\n", 3012 dev_err(&dev->pdev->dev, "%s: binding to %s returning %d\n",
diff --git a/drivers/usb/gadget/pxa25x_udc.c b/drivers/usb/gadget/pxa25x_udc.c
index c246c08a242d..8efbf08c3561 100644
--- a/drivers/usb/gadget/pxa25x_udc.c
+++ b/drivers/usb/gadget/pxa25x_udc.c
@@ -999,7 +999,7 @@ static int pxa25x_udc_vbus_draw(struct usb_gadget *_gadget, unsigned mA)
999} 999}
1000 1000
1001static int pxa25x_start(struct usb_gadget_driver *driver, 1001static int pxa25x_start(struct usb_gadget_driver *driver,
1002 int (*bind)(struct usb_gadget *)); 1002 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *));
1003static int pxa25x_stop(struct usb_gadget_driver *driver); 1003static int pxa25x_stop(struct usb_gadget_driver *driver);
1004 1004
1005static const struct usb_gadget_ops pxa25x_udc_ops = { 1005static const struct usb_gadget_ops pxa25x_udc_ops = {
@@ -1257,7 +1257,7 @@ static void udc_enable (struct pxa25x_udc *dev)
1257 * the driver might get unbound. 1257 * the driver might get unbound.
1258 */ 1258 */
1259static int pxa25x_start(struct usb_gadget_driver *driver, 1259static int pxa25x_start(struct usb_gadget_driver *driver,
1260 int (*bind)(struct usb_gadget *)) 1260 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
1261{ 1261{
1262 struct pxa25x_udc *dev = the_controller; 1262 struct pxa25x_udc *dev = the_controller;
1263 int retval; 1263 int retval;
@@ -1285,7 +1285,7 @@ fail:
1285 dev->gadget.dev.driver = NULL; 1285 dev->gadget.dev.driver = NULL;
1286 return retval; 1286 return retval;
1287 } 1287 }
1288 retval = bind(&dev->gadget); 1288 retval = bind(&dev->gadget, driver);
1289 if (retval) { 1289 if (retval) {
1290 DMSG("bind to driver %s --> error %d\n", 1290 DMSG("bind to driver %s --> error %d\n",
1291 driver->driver.name, retval); 1291 driver->driver.name, retval);
diff --git a/drivers/usb/gadget/pxa27x_udc.c b/drivers/usb/gadget/pxa27x_udc.c
index 644b4305cb99..979ddaddb0f8 100644
--- a/drivers/usb/gadget/pxa27x_udc.c
+++ b/drivers/usb/gadget/pxa27x_udc.c
@@ -1672,7 +1672,7 @@ static int pxa_udc_vbus_draw(struct usb_gadget *_gadget, unsigned mA)
1672} 1672}
1673 1673
1674static int pxa27x_udc_start(struct usb_gadget_driver *driver, 1674static int pxa27x_udc_start(struct usb_gadget_driver *driver,
1675 int (*bind)(struct usb_gadget *)); 1675 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *));
1676static int pxa27x_udc_stop(struct usb_gadget_driver *driver); 1676static int pxa27x_udc_stop(struct usb_gadget_driver *driver);
1677 1677
1678static const struct usb_gadget_ops pxa_udc_ops = { 1678static const struct usb_gadget_ops pxa_udc_ops = {
@@ -1803,7 +1803,7 @@ static void udc_enable(struct pxa_udc *udc)
1803 * Returns 0 if no error, -EINVAL, -ENODEV, -EBUSY otherwise 1803 * Returns 0 if no error, -EINVAL, -ENODEV, -EBUSY otherwise
1804 */ 1804 */
1805static int pxa27x_udc_start(struct usb_gadget_driver *driver, 1805static int pxa27x_udc_start(struct usb_gadget_driver *driver,
1806 int (*bind)(struct usb_gadget *)) 1806 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
1807{ 1807{
1808 struct pxa_udc *udc = the_controller; 1808 struct pxa_udc *udc = the_controller;
1809 int retval; 1809 int retval;
@@ -1826,7 +1826,7 @@ static int pxa27x_udc_start(struct usb_gadget_driver *driver,
1826 dev_err(udc->dev, "device_add error %d\n", retval); 1826 dev_err(udc->dev, "device_add error %d\n", retval);
1827 goto add_fail; 1827 goto add_fail;
1828 } 1828 }
1829 retval = bind(&udc->gadget); 1829 retval = bind(&udc->gadget, driver);
1830 if (retval) { 1830 if (retval) {
1831 dev_err(udc->dev, "bind to driver %s --> error %d\n", 1831 dev_err(udc->dev, "bind to driver %s --> error %d\n",
1832 driver->driver.name, retval); 1832 driver->driver.name, retval);
diff --git a/drivers/usb/gadget/s3c2410_udc.c b/drivers/usb/gadget/s3c2410_udc.c
index b627c9b51fda..c33e942d119c 100644
--- a/drivers/usb/gadget/s3c2410_udc.c
+++ b/drivers/usb/gadget/s3c2410_udc.c
@@ -1539,7 +1539,7 @@ static int s3c2410_vbus_draw(struct usb_gadget *_gadget, unsigned ma)
1539} 1539}
1540 1540
1541static int s3c2410_udc_start(struct usb_gadget_driver *driver, 1541static int s3c2410_udc_start(struct usb_gadget_driver *driver,
1542 int (*bind)(struct usb_gadget *)); 1542 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *));
1543static int s3c2410_udc_stop(struct usb_gadget_driver *driver); 1543static int s3c2410_udc_stop(struct usb_gadget_driver *driver);
1544 1544
1545static const struct usb_gadget_ops s3c2410_ops = { 1545static const struct usb_gadget_ops s3c2410_ops = {
@@ -1665,7 +1665,7 @@ static void s3c2410_udc_enable(struct s3c2410_udc *dev)
1665} 1665}
1666 1666
1667static int s3c2410_udc_start(struct usb_gadget_driver *driver, 1667static int s3c2410_udc_start(struct usb_gadget_driver *driver,
1668 int (*bind)(struct usb_gadget *)) 1668 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
1669{ 1669{
1670 struct s3c2410_udc *udc = the_controller; 1670 struct s3c2410_udc *udc = the_controller;
1671 int retval; 1671 int retval;
@@ -1705,7 +1705,7 @@ static int s3c2410_udc_start(struct usb_gadget_driver *driver,
1705 dprintk(DEBUG_NORMAL, "binding gadget driver '%s'\n", 1705 dprintk(DEBUG_NORMAL, "binding gadget driver '%s'\n",
1706 driver->driver.name); 1706 driver->driver.name);
1707 1707
1708 retval = bind(&udc->gadget); 1708 retval = bind(&udc->gadget, driver);
1709 if (retval) { 1709 if (retval) {
1710 device_del(&udc->gadget.dev); 1710 device_del(&udc->gadget.dev);
1711 goto register_error; 1711 goto register_error;
diff --git a/drivers/usb/gadget/udc-core.c b/drivers/usb/gadget/udc-core.c
index 85e1e2fdd403..f3cd9690b101 100644
--- a/drivers/usb/gadget/udc-core.c
+++ b/drivers/usb/gadget/udc-core.c
@@ -118,7 +118,7 @@ EXPORT_SYMBOL_GPL(usb_gadget_unmap_request);
118 */ 118 */
119static inline int usb_gadget_start(struct usb_gadget *gadget, 119static inline int usb_gadget_start(struct usb_gadget *gadget,
120 struct usb_gadget_driver *driver, 120 struct usb_gadget_driver *driver,
121 int (*bind)(struct usb_gadget *)) 121 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
122{ 122{
123 return gadget->ops->start(driver, bind); 123 return gadget->ops->start(driver, bind);
124} 124}
@@ -338,7 +338,7 @@ found:
338 udc->dev.driver = &driver->driver; 338 udc->dev.driver = &driver->driver;
339 339
340 if (udc_is_newstyle(udc)) { 340 if (udc_is_newstyle(udc)) {
341 ret = driver->bind(udc->gadget); 341 ret = driver->bind(udc->gadget, driver);
342 if (ret) 342 if (ret)
343 goto err1; 343 goto err1;
344 ret = usb_gadget_udc_start(udc->gadget, driver); 344 ret = usb_gadget_udc_start(udc->gadget, driver);