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

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

usb: gadget: move bind() callback back to struct usb_composite_driver



This partly reverts 07a18bd7 ("usb gadget: don't save bind callback in
struct usb_composite_driver") and fixes new drivers. The section missmatch
problems was solved by whitelisting structs in question via __ref.

Cc: devel@driverdev.osuosl.org
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 c2ec75c2
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -1162,6 +1162,7 @@ static int ccg_usb_unbind(struct usb_composite_dev *cdev)
static struct usb_composite_driver ccg_usb_driver = {
static struct usb_composite_driver ccg_usb_driver = {
	.name		= "configurable_usb",
	.name		= "configurable_usb",
	.dev		= &device_desc,
	.dev		= &device_desc,
	.bind		= ccg_bind,
	.unbind		= ccg_usb_unbind,
	.unbind		= ccg_usb_unbind,
	.needs_serial	= true,
	.needs_serial	= true,
	.iManufacturer	= "Linux Foundation",
	.iManufacturer	= "Linux Foundation",
@@ -1275,7 +1276,7 @@ static int __init init(void)
	composite_driver.setup = ccg_setup;
	composite_driver.setup = ccg_setup;
	composite_driver.disconnect = ccg_disconnect;
	composite_driver.disconnect = ccg_disconnect;


	err = usb_composite_probe(&ccg_usb_driver, ccg_bind);
	err = usb_composite_probe(&ccg_usb_driver);
	if (err) {
	if (err) {
		class_destroy(ccg_class);
		class_destroy(ccg_class);
		kfree(dev);
		kfree(dev);
+2 −1
Original line number Original line Diff line number Diff line
@@ -237,6 +237,7 @@ static __refdata struct usb_composite_driver acm_ms_driver = {
	.dev		= &device_desc,
	.dev		= &device_desc,
	.max_speed	= USB_SPEED_SUPER,
	.max_speed	= USB_SPEED_SUPER,
	.strings	= dev_strings,
	.strings	= dev_strings,
	.bind		= acm_ms_bind,
	.unbind		= __exit_p(acm_ms_unbind),
	.unbind		= __exit_p(acm_ms_unbind),
};
};


@@ -246,7 +247,7 @@ MODULE_LICENSE("GPL v2");


static int __init init(void)
static int __init init(void)
{
{
	return usb_composite_probe(&acm_ms_driver, acm_ms_bind);
	return usb_composite_probe(&acm_ms_driver);
}
}
module_init(init);
module_init(init);


+2 −1
Original line number Original line Diff line number Diff line
@@ -203,12 +203,13 @@ static __refdata struct usb_composite_driver audio_driver = {
	.dev		= &device_desc,
	.dev		= &device_desc,
	.strings	= audio_strings,
	.strings	= audio_strings,
	.max_speed	= USB_SPEED_HIGH,
	.max_speed	= USB_SPEED_HIGH,
	.bind		= audio_bind,
	.unbind		= __exit_p(audio_unbind),
	.unbind		= __exit_p(audio_unbind),
};
};


static int __init init(void)
static int __init init(void)
{
{
	return usb_composite_probe(&audio_driver, audio_bind);
	return usb_composite_probe(&audio_driver);
}
}
module_init(init);
module_init(init);


+2 −1
Original line number Original line Diff line number Diff line
@@ -237,6 +237,7 @@ static __refdata struct usb_composite_driver cdc_driver = {
	.dev		= &device_desc,
	.dev		= &device_desc,
	.strings	= dev_strings,
	.strings	= dev_strings,
	.max_speed	= USB_SPEED_HIGH,
	.max_speed	= USB_SPEED_HIGH,
	.bind		= cdc_bind,
	.unbind		= __exit_p(cdc_unbind),
	.unbind		= __exit_p(cdc_unbind),
};
};


@@ -246,7 +247,7 @@ MODULE_LICENSE("GPL");


static int __init init(void)
static int __init init(void)
{
{
	return usb_composite_probe(&cdc_driver, cdc_bind);
	return usb_composite_probe(&cdc_driver);
}
}
module_init(init);
module_init(init);


+2 −7
Original line number Original line Diff line number Diff line
@@ -1617,12 +1617,9 @@ static struct usb_gadget_driver composite_driver = {
 * while it was binding.  That would usually be done in order to wait for
 * while it was binding.  That would usually be done in order to wait for
 * some userspace participation.
 * some userspace participation.
 */
 */
int usb_composite_probe(struct usb_composite_driver *driver,
int usb_composite_probe(struct usb_composite_driver *driver)
			       int (*bind)(struct usb_composite_dev *cdev))
{
{
	if (!driver || !driver->dev || composite)
	if (!driver || !driver->dev || composite || !driver->bind)
		return -EINVAL;
	if (!bind && !driver->bind)
		return -EINVAL;
		return -EINVAL;


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


	return usb_gadget_probe_driver(&composite_driver, composite_bind);
	return usb_gadget_probe_driver(&composite_driver, composite_bind);
}
}
Loading