mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-15 21:23:23 +00:00
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: Michal Nazarewicz <mina86@mina86.com> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
c2ec75c251
commit
03e42bd593
@ -1162,6 +1162,7 @@ static int ccg_usb_unbind(struct usb_composite_dev *cdev)
|
||||
static struct usb_composite_driver ccg_usb_driver = {
|
||||
.name = "configurable_usb",
|
||||
.dev = &device_desc,
|
||||
.bind = ccg_bind,
|
||||
.unbind = ccg_usb_unbind,
|
||||
.needs_serial = true,
|
||||
.iManufacturer = "Linux Foundation",
|
||||
@ -1275,7 +1276,7 @@ static int __init init(void)
|
||||
composite_driver.setup = ccg_setup;
|
||||
composite_driver.disconnect = ccg_disconnect;
|
||||
|
||||
err = usb_composite_probe(&ccg_usb_driver, ccg_bind);
|
||||
err = usb_composite_probe(&ccg_usb_driver);
|
||||
if (err) {
|
||||
class_destroy(ccg_class);
|
||||
kfree(dev);
|
||||
|
@ -237,6 +237,7 @@ static __refdata struct usb_composite_driver acm_ms_driver = {
|
||||
.dev = &device_desc,
|
||||
.max_speed = USB_SPEED_SUPER,
|
||||
.strings = dev_strings,
|
||||
.bind = acm_ms_bind,
|
||||
.unbind = __exit_p(acm_ms_unbind),
|
||||
};
|
||||
|
||||
@ -246,7 +247,7 @@ MODULE_LICENSE("GPL v2");
|
||||
|
||||
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);
|
||||
|
||||
|
@ -203,12 +203,13 @@ static __refdata struct usb_composite_driver audio_driver = {
|
||||
.dev = &device_desc,
|
||||
.strings = audio_strings,
|
||||
.max_speed = USB_SPEED_HIGH,
|
||||
.bind = audio_bind,
|
||||
.unbind = __exit_p(audio_unbind),
|
||||
};
|
||||
|
||||
static int __init init(void)
|
||||
{
|
||||
return usb_composite_probe(&audio_driver, audio_bind);
|
||||
return usb_composite_probe(&audio_driver);
|
||||
}
|
||||
module_init(init);
|
||||
|
||||
|
@ -237,6 +237,7 @@ static __refdata struct usb_composite_driver cdc_driver = {
|
||||
.dev = &device_desc,
|
||||
.strings = dev_strings,
|
||||
.max_speed = USB_SPEED_HIGH,
|
||||
.bind = cdc_bind,
|
||||
.unbind = __exit_p(cdc_unbind),
|
||||
};
|
||||
|
||||
@ -246,7 +247,7 @@ MODULE_LICENSE("GPL");
|
||||
|
||||
static int __init init(void)
|
||||
{
|
||||
return usb_composite_probe(&cdc_driver, cdc_bind);
|
||||
return usb_composite_probe(&cdc_driver);
|
||||
}
|
||||
module_init(init);
|
||||
|
||||
|
@ -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
|
||||
* some userspace participation.
|
||||
*/
|
||||
int usb_composite_probe(struct usb_composite_driver *driver,
|
||||
int (*bind)(struct usb_composite_dev *cdev))
|
||||
int usb_composite_probe(struct usb_composite_driver *driver)
|
||||
{
|
||||
if (!driver || !driver->dev || composite)
|
||||
return -EINVAL;
|
||||
if (!bind && !driver->bind)
|
||||
if (!driver || !driver->dev || composite || !driver->bind)
|
||||
return -EINVAL;
|
||||
|
||||
if (!driver->name)
|
||||
@ -1633,8 +1630,6 @@ int usb_composite_probe(struct usb_composite_driver *driver,
|
||||
composite_driver.driver.name = driver->name;
|
||||
composite_driver.max_speed = driver->max_speed;
|
||||
composite = driver;
|
||||
if (!driver->bind)
|
||||
driver->bind = bind;
|
||||
|
||||
return usb_gadget_probe_driver(&composite_driver, composite_bind);
|
||||
}
|
||||
|
@ -393,6 +393,7 @@ static __refdata struct usb_composite_driver eth_driver = {
|
||||
.dev = &device_desc,
|
||||
.strings = dev_strings,
|
||||
.max_speed = USB_SPEED_SUPER,
|
||||
.bind = eth_bind,
|
||||
.unbind = __exit_p(eth_unbind),
|
||||
};
|
||||
|
||||
@ -402,7 +403,7 @@ MODULE_LICENSE("GPL");
|
||||
|
||||
static int __init init(void)
|
||||
{
|
||||
return usb_composite_probe(ð_driver, eth_bind);
|
||||
return usb_composite_probe(ð_driver);
|
||||
}
|
||||
module_init(init);
|
||||
|
||||
|
@ -168,6 +168,7 @@ static __refdata struct usb_composite_driver gfs_driver = {
|
||||
.dev = &gfs_dev_desc,
|
||||
.strings = gfs_dev_strings,
|
||||
.max_speed = USB_SPEED_HIGH,
|
||||
.bind = gfs_bind,
|
||||
.unbind = gfs_unbind,
|
||||
.iProduct = DRIVER_DESC,
|
||||
};
|
||||
@ -268,7 +269,7 @@ static int functionfs_ready_callback(struct ffs_data *ffs)
|
||||
}
|
||||
gfs_registered = true;
|
||||
|
||||
ret = usb_composite_probe(&gfs_driver, gfs_bind);
|
||||
ret = usb_composite_probe(&gfs_driver);
|
||||
if (unlikely(ret < 0))
|
||||
gfs_registered = false;
|
||||
|
||||
|
@ -189,12 +189,13 @@ static __refdata struct usb_composite_driver midi_driver = {
|
||||
.dev = &device_desc,
|
||||
.strings = dev_strings,
|
||||
.max_speed = USB_SPEED_HIGH,
|
||||
.bind = midi_bind,
|
||||
.unbind = __exit_p(midi_unbind),
|
||||
};
|
||||
|
||||
static int __init midi_init(void)
|
||||
{
|
||||
return usb_composite_probe(&midi_driver, midi_bind);
|
||||
return usb_composite_probe(&midi_driver);
|
||||
}
|
||||
module_init(midi_init);
|
||||
|
||||
|
@ -247,6 +247,7 @@ static __refdata struct usb_composite_driver hidg_driver = {
|
||||
.dev = &device_desc,
|
||||
.strings = dev_strings,
|
||||
.max_speed = USB_SPEED_HIGH,
|
||||
.bind = hid_bind,
|
||||
.unbind = __exit_p(hid_unbind),
|
||||
};
|
||||
|
||||
@ -272,7 +273,7 @@ static int __init hidg_init(void)
|
||||
if (status < 0)
|
||||
return status;
|
||||
|
||||
status = usb_composite_probe(&hidg_driver, hid_bind);
|
||||
status = usb_composite_probe(&hidg_driver);
|
||||
if (status < 0)
|
||||
platform_driver_unregister(&hidg_plat_driver);
|
||||
|
||||
|
@ -162,6 +162,7 @@ static __refdata struct usb_composite_driver msg_driver = {
|
||||
.iProduct = DRIVER_DESC,
|
||||
.max_speed = USB_SPEED_SUPER,
|
||||
.needs_serial = 1,
|
||||
.bind = msg_bind,
|
||||
};
|
||||
|
||||
MODULE_DESCRIPTION(DRIVER_DESC);
|
||||
@ -170,7 +171,7 @@ MODULE_LICENSE("GPL");
|
||||
|
||||
static int __init msg_init(void)
|
||||
{
|
||||
return usb_composite_probe(&msg_driver, msg_bind);
|
||||
return usb_composite_probe(&msg_driver);
|
||||
}
|
||||
module_init(msg_init);
|
||||
|
||||
|
@ -343,6 +343,7 @@ static __refdata struct usb_composite_driver multi_driver = {
|
||||
.dev = &device_desc,
|
||||
.strings = dev_strings,
|
||||
.max_speed = USB_SPEED_HIGH,
|
||||
.bind = multi_bind,
|
||||
.unbind = __exit_p(multi_unbind),
|
||||
.iProduct = DRIVER_DESC,
|
||||
.needs_serial = 1,
|
||||
@ -351,7 +352,7 @@ static __refdata struct usb_composite_driver multi_driver = {
|
||||
|
||||
static int __init multi_init(void)
|
||||
{
|
||||
return usb_composite_probe(&multi_driver, multi_bind);
|
||||
return usb_composite_probe(&multi_driver);
|
||||
}
|
||||
module_init(multi_init);
|
||||
|
||||
|
@ -220,6 +220,7 @@ static __refdata struct usb_composite_driver ncm_driver = {
|
||||
.dev = &device_desc,
|
||||
.strings = dev_strings,
|
||||
.max_speed = USB_SPEED_HIGH,
|
||||
.bind = gncm_bind,
|
||||
.unbind = __exit_p(gncm_unbind),
|
||||
};
|
||||
|
||||
@ -229,7 +230,7 @@ MODULE_LICENSE("GPL");
|
||||
|
||||
static int __init init(void)
|
||||
{
|
||||
return usb_composite_probe(&ncm_driver, gncm_bind);
|
||||
return usb_composite_probe(&ncm_driver);
|
||||
}
|
||||
module_init(init);
|
||||
|
||||
|
@ -242,12 +242,13 @@ static __refdata struct usb_composite_driver nokia_driver = {
|
||||
.dev = &device_desc,
|
||||
.strings = dev_strings,
|
||||
.max_speed = USB_SPEED_HIGH,
|
||||
.bind = nokia_bind,
|
||||
.unbind = __exit_p(nokia_unbind),
|
||||
};
|
||||
|
||||
static int __init nokia_init(void)
|
||||
{
|
||||
return usb_composite_probe(&nokia_driver, nokia_bind);
|
||||
return usb_composite_probe(&nokia_driver);
|
||||
}
|
||||
module_init(nokia_init);
|
||||
|
||||
|
@ -1274,6 +1274,7 @@ static __refdata struct usb_composite_driver printer_driver = {
|
||||
.dev = &device_desc,
|
||||
.strings = dev_strings,
|
||||
.max_speed = USB_SPEED_HIGH,
|
||||
.bind = printer_bind,
|
||||
.unbind = printer_unbind,
|
||||
};
|
||||
|
||||
@ -1297,7 +1298,7 @@ init(void)
|
||||
return status;
|
||||
}
|
||||
|
||||
status = usb_composite_probe(&printer_driver, printer_bind);
|
||||
status = usb_composite_probe(&printer_driver);
|
||||
if (status) {
|
||||
class_destroy(usb_gadget_class);
|
||||
unregister_chrdev_region(g_printer_devno, 1);
|
||||
|
@ -243,6 +243,7 @@ static __refdata struct usb_composite_driver gserial_driver = {
|
||||
.dev = &device_desc,
|
||||
.strings = dev_strings,
|
||||
.max_speed = USB_SPEED_SUPER,
|
||||
.bind = gs_bind,
|
||||
};
|
||||
|
||||
static int __init init(void)
|
||||
@ -271,7 +272,7 @@ static int __init init(void)
|
||||
}
|
||||
strings_dev[STRING_DESCRIPTION_IDX].s = serial_config_driver.label;
|
||||
|
||||
return usb_composite_probe(&gserial_driver, gs_bind);
|
||||
return usb_composite_probe(&gserial_driver);
|
||||
}
|
||||
module_init(init);
|
||||
|
||||
|
@ -2441,12 +2441,13 @@ static __refdata struct usb_composite_driver usbg_driver = {
|
||||
.dev = &usbg_device_desc,
|
||||
.strings = usbg_strings,
|
||||
.max_speed = USB_SPEED_SUPER,
|
||||
.bind = usb_target_bind,
|
||||
.unbind = guas_unbind,
|
||||
};
|
||||
|
||||
static int usbg_attach(struct usbg_tpg *tpg)
|
||||
{
|
||||
return usb_composite_probe(&usbg_driver, usb_target_bind);
|
||||
return usb_composite_probe(&usbg_driver);
|
||||
}
|
||||
|
||||
static void usbg_detach(struct usbg_tpg *tpg)
|
||||
|
@ -395,13 +395,14 @@ static __refdata struct usb_composite_driver webcam_driver = {
|
||||
.dev = &webcam_device_descriptor,
|
||||
.strings = webcam_device_strings,
|
||||
.max_speed = USB_SPEED_SUPER,
|
||||
.bind = webcam_bind,
|
||||
.unbind = webcam_unbind,
|
||||
};
|
||||
|
||||
static int __init
|
||||
webcam_init(void)
|
||||
{
|
||||
return usb_composite_probe(&webcam_driver, webcam_bind);
|
||||
return usb_composite_probe(&webcam_driver);
|
||||
}
|
||||
|
||||
static void __exit
|
||||
|
@ -339,6 +339,7 @@ static __refdata struct usb_composite_driver zero_driver = {
|
||||
.dev = &device_desc,
|
||||
.strings = dev_strings,
|
||||
.max_speed = USB_SPEED_SUPER,
|
||||
.bind = zero_bind,
|
||||
.unbind = zero_unbind,
|
||||
.suspend = zero_suspend,
|
||||
.resume = zero_resume,
|
||||
@ -349,7 +350,7 @@ MODULE_LICENSE("GPL");
|
||||
|
||||
static int __init init(void)
|
||||
{
|
||||
return usb_composite_probe(&zero_driver, zero_bind);
|
||||
return usb_composite_probe(&zero_driver);
|
||||
}
|
||||
module_init(init);
|
||||
|
||||
|
@ -305,8 +305,7 @@ struct usb_composite_driver {
|
||||
void (*resume)(struct usb_composite_dev *);
|
||||
};
|
||||
|
||||
extern int usb_composite_probe(struct usb_composite_driver *driver,
|
||||
int (*bind)(struct usb_composite_dev *cdev));
|
||||
extern int usb_composite_probe(struct usb_composite_driver *driver);
|
||||
extern void usb_composite_unregister(struct usb_composite_driver *driver);
|
||||
extern void usb_composite_setup_continue(struct usb_composite_dev *cdev);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user