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

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

usb: gadget: move bind callback into driver struct usb_composite_driver



It was moved to be an argument in 07a18bd7 ("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: 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 e4730931
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@
#define USB_BUFSIZ	1024

static struct usb_composite_driver *composite;
static int (*composite_gadget_bind)(struct usb_composite_dev *cdev);

/* Some systems will need runtime overrides for the  product identifiers
 * published in the device descriptor, either numbers or strings or both.
@@ -1468,7 +1467,7 @@ static int composite_bind(struct usb_gadget *gadget)
	 * serial number), register function drivers, potentially update
	 * power state and consumption, etc
	 */
	status = composite_gadget_bind(cdev);
	status = composite->bind(cdev);
	if (status < 0)
		goto fail;

@@ -1621,7 +1620,9 @@ static struct usb_gadget_driver composite_driver = {
int usb_composite_probe(struct usb_composite_driver *driver,
			       int (*bind)(struct usb_composite_dev *cdev))
{
	if (!driver || !driver->dev || !bind || composite)
	if (!driver || !driver->dev || composite)
		return -EINVAL;
	if (!bind && !driver->bind)
		return -EINVAL;

	if (!driver->name)
@@ -1632,7 +1633,8 @@ int usb_composite_probe(struct usb_composite_driver *driver,
	composite_driver.driver.name = driver->name;
	composite_driver.max_speed = driver->max_speed;
	composite = driver;
	composite_gadget_bind = bind;
	if (!driver->bind)
		driver->bind = bind;

	return usb_gadget_probe_driver(&composite_driver, composite_bind);
}
+9 −4
Original line number Diff line number Diff line
@@ -257,12 +257,16 @@ void usb_remove_config(struct usb_composite_dev *,
 *	not set.
 * @dev: Template descriptor for the device, including default device
 *	identifiers.
 * @strings: tables of strings, keyed by identifiers assigned during bind()
 * @strings: tables of strings, keyed by identifiers assigned during @bind
 *	and language IDs provided in control requests
 * @max_speed: Highest speed the driver supports.
 * @needs_serial: set to 1 if the gadget needs userspace to provide
 * 	a serial number.  If one is not provided, warning will be printed.
 * @unbind: Reverses bind; called as a side effect of unregistering
 * @bind: (REQUIRED) Used to allocate resources that are shared across the
 *	whole device, such as string IDs, and add its configurations using
 *	@usb_add_config(). This may fail by returning a negative errno
 *	value; it should return zero on successful initialization.
 * @unbind: Reverses @bind; called as a side effect of unregistering
 *	this driver.
 * @disconnect: optional driver disconnect method
 * @suspend: Notifies when the host stops sending USB traffic,
@@ -271,9 +275,9 @@ void usb_remove_config(struct usb_composite_dev *,
 *	before function notifications
 *
 * Devices default to reporting self powered operation.  Devices which rely
 * on bus powered operation should report this in their @bind() method.
 * on bus powered operation should report this in their @bind method.
 *
 * Before returning from bind, various fields in the template descriptor
 * Before returning from @bind, various fields in the template descriptor
 * may be overridden.  These include the idVendor/idProduct/bcdDevice values
 * normally to bind the appropriate host side driver, and the three strings
 * (iManufacturer, iProduct, iSerialNumber) normally used to provide user
@@ -291,6 +295,7 @@ struct usb_composite_driver {
	enum usb_device_speed			max_speed;
	unsigned		needs_serial:1;

	int			(*bind)(struct usb_composite_dev *cdev);
	int			(*unbind)(struct usb_composite_dev *);

	void			(*disconnect)(struct usb_composite_dev *);