usb gadget: don't save bind callback in struct usb_composite_driver
The bind function is most of the time only called at init time so there is no need to save a pointer to it in the composite driver structure. This fixes many section mismatches reported by modpost. Signed-off-by: Michał Nazarewicz <m.nazarewicz@samsung.com> Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
b0fca50f5a
commit
07a18bd716
@@ -40,6 +40,7 @@
|
||||
#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 identifers
|
||||
* published in the device descriptor, either numbers or strings or both.
|
||||
@@ -1115,7 +1116,7 @@ static int composite_bind(struct usb_gadget *gadget)
|
||||
* serial number), register function drivers, potentially update
|
||||
* power state and consumption, etc
|
||||
*/
|
||||
status = composite->bind(cdev);
|
||||
status = composite_gadget_bind(cdev);
|
||||
if (status < 0)
|
||||
goto fail;
|
||||
|
||||
@@ -1227,8 +1228,12 @@ static struct usb_gadget_driver composite_driver = {
|
||||
};
|
||||
|
||||
/**
|
||||
* usb_composite_register() - register a composite driver
|
||||
* usb_composite_probe() - register a composite driver
|
||||
* @driver: the driver to register
|
||||
* @bind: the callback 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.
|
||||
* Context: single threaded during gadget setup
|
||||
*
|
||||
* This function is used to register drivers using the composite driver
|
||||
@@ -1241,9 +1246,10 @@ static struct usb_gadget_driver composite_driver = {
|
||||
* while it was binding. That would usually be done in order to wait for
|
||||
* some userspace participation.
|
||||
*/
|
||||
int usb_composite_register(struct usb_composite_driver *driver)
|
||||
extern int usb_composite_probe(struct usb_composite_driver *driver,
|
||||
int (*bind)(struct usb_composite_dev *cdev))
|
||||
{
|
||||
if (!driver || !driver->dev || !driver->bind || composite)
|
||||
if (!driver || !driver->dev || !bind || composite)
|
||||
return -EINVAL;
|
||||
|
||||
if (!driver->iProduct)
|
||||
@@ -1253,6 +1259,7 @@ int usb_composite_register(struct usb_composite_driver *driver)
|
||||
composite_driver.function = (char *) driver->name;
|
||||
composite_driver.driver.name = driver->name;
|
||||
composite = driver;
|
||||
composite_gadget_bind = bind;
|
||||
|
||||
return usb_gadget_probe_driver(&composite_driver, composite_bind);
|
||||
}
|
||||
|
Reference in New Issue
Block a user