aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>2012-09-06 14:11:01 -0400
committerFelipe Balbi <balbi@ti.com>2012-09-10 08:32:58 -0400
commitfac3a43e0ab20dbf5e845c6221ead0d073984f41 (patch)
treea735712fb538d90bf87ecebb982df19b1b93649e
parente4730931143398ec32088af32e985ec413739c10 (diff)
usb: gadget: move bind callback into driver struct usb_composite_driver
It was moved to be an argument in 07a18bd716ed5 ("usb gadget: don't save bind callback in struct usb_composite_driver"). The reason was to avoid the section missmatch. The warning was shown because ->bind is marked as __init becuase it is a one time init. The warning can be also suppresed by whitelisting the variable i.e. rename it to lets say _probe. Acked-by: Michal Nazarewicz <mina86@mina86.com> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Felipe Balbi <balbi@ti.com>
-rw-r--r--drivers/usb/gadget/composite.c10
-rw-r--r--include/linux/usb/composite.h13
2 files changed, 15 insertions, 8 deletions
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index 91411a6d741b..402e5bd8b3e5 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -32,7 +32,6 @@
32#define USB_BUFSIZ 1024 32#define USB_BUFSIZ 1024
33 33
34static struct usb_composite_driver *composite; 34static struct usb_composite_driver *composite;
35static int (*composite_gadget_bind)(struct usb_composite_dev *cdev);
36 35
37/* Some systems will need runtime overrides for the product identifiers 36/* Some systems will need runtime overrides for the product identifiers
38 * published in the device descriptor, either numbers or strings or both. 37 * published in the device descriptor, either numbers or strings or both.
@@ -1468,7 +1467,7 @@ static int composite_bind(struct usb_gadget *gadget)
1468 * serial number), register function drivers, potentially update 1467 * serial number), register function drivers, potentially update
1469 * power state and consumption, etc 1468 * power state and consumption, etc
1470 */ 1469 */
1471 status = composite_gadget_bind(cdev); 1470 status = composite->bind(cdev);
1472 if (status < 0) 1471 if (status < 0)
1473 goto fail; 1472 goto fail;
1474 1473
@@ -1621,7 +1620,9 @@ static struct usb_gadget_driver composite_driver = {
1621int usb_composite_probe(struct usb_composite_driver *driver, 1620int usb_composite_probe(struct usb_composite_driver *driver,
1622 int (*bind)(struct usb_composite_dev *cdev)) 1621 int (*bind)(struct usb_composite_dev *cdev))
1623{ 1622{
1624 if (!driver || !driver->dev || !bind || composite) 1623 if (!driver || !driver->dev || composite)
1624 return -EINVAL;
1625 if (!bind && !driver->bind)
1625 return -EINVAL; 1626 return -EINVAL;
1626 1627
1627 if (!driver->name) 1628 if (!driver->name)
@@ -1632,7 +1633,8 @@ int usb_composite_probe(struct usb_composite_driver *driver,
1632 composite_driver.driver.name = driver->name; 1633 composite_driver.driver.name = driver->name;
1633 composite_driver.max_speed = driver->max_speed; 1634 composite_driver.max_speed = driver->max_speed;
1634 composite = driver; 1635 composite = driver;
1635 composite_gadget_bind = bind; 1636 if (!driver->bind)
1637 driver->bind = bind;
1636 1638
1637 return usb_gadget_probe_driver(&composite_driver, composite_bind); 1639 return usb_gadget_probe_driver(&composite_driver, composite_bind);
1638} 1640}
diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h
index 9d8c3b634493..3153f73ae083 100644
--- a/include/linux/usb/composite.h
+++ b/include/linux/usb/composite.h
@@ -257,12 +257,16 @@ void usb_remove_config(struct usb_composite_dev *,
257 * not set. 257 * not set.
258 * @dev: Template descriptor for the device, including default device 258 * @dev: Template descriptor for the device, including default device
259 * identifiers. 259 * identifiers.
260 * @strings: tables of strings, keyed by identifiers assigned during bind() 260 * @strings: tables of strings, keyed by identifiers assigned during @bind
261 * and language IDs provided in control requests 261 * and language IDs provided in control requests
262 * @max_speed: Highest speed the driver supports. 262 * @max_speed: Highest speed the driver supports.
263 * @needs_serial: set to 1 if the gadget needs userspace to provide 263 * @needs_serial: set to 1 if the gadget needs userspace to provide
264 * a serial number. If one is not provided, warning will be printed. 264 * a serial number. If one is not provided, warning will be printed.
265 * @unbind: Reverses bind; called as a side effect of unregistering 265 * @bind: (REQUIRED) Used to allocate resources that are shared across the
266 * whole device, such as string IDs, and add its configurations using
267 * @usb_add_config(). This may fail by returning a negative errno
268 * value; it should return zero on successful initialization.
269 * @unbind: Reverses @bind; called as a side effect of unregistering
266 * this driver. 270 * this driver.
267 * @disconnect: optional driver disconnect method 271 * @disconnect: optional driver disconnect method
268 * @suspend: Notifies when the host stops sending USB traffic, 272 * @suspend: Notifies when the host stops sending USB traffic,
@@ -271,9 +275,9 @@ void usb_remove_config(struct usb_composite_dev *,
271 * before function notifications 275 * before function notifications
272 * 276 *
273 * Devices default to reporting self powered operation. Devices which rely 277 * Devices default to reporting self powered operation. Devices which rely
274 * on bus powered operation should report this in their @bind() method. 278 * on bus powered operation should report this in their @bind method.
275 * 279 *
276 * Before returning from bind, various fields in the template descriptor 280 * Before returning from @bind, various fields in the template descriptor
277 * may be overridden. These include the idVendor/idProduct/bcdDevice values 281 * may be overridden. These include the idVendor/idProduct/bcdDevice values
278 * normally to bind the appropriate host side driver, and the three strings 282 * normally to bind the appropriate host side driver, and the three strings
279 * (iManufacturer, iProduct, iSerialNumber) normally used to provide user 283 * (iManufacturer, iProduct, iSerialNumber) normally used to provide user
@@ -291,6 +295,7 @@ struct usb_composite_driver {
291 enum usb_device_speed max_speed; 295 enum usb_device_speed max_speed;
292 unsigned needs_serial:1; 296 unsigned needs_serial:1;
293 297
298 int (*bind)(struct usb_composite_dev *cdev);
294 int (*unbind)(struct usb_composite_dev *); 299 int (*unbind)(struct usb_composite_dev *);
295 300
296 void (*disconnect)(struct usb_composite_dev *); 301 void (*disconnect)(struct usb_composite_dev *);