usb: gadget: move bind() callback back to struct usb_composite_driver
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Thu, 6 Sep 2012 18:11:04 +0000 (20:11 +0200)
committerFelipe Balbi <balbi@ti.com>
Mon, 10 Sep 2012 12:34:48 +0000 (15:34 +0300)
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>
19 files changed:
drivers/staging/ccg/ccg.c
drivers/usb/gadget/acm_ms.c
drivers/usb/gadget/audio.c
drivers/usb/gadget/cdc2.c
drivers/usb/gadget/composite.c
drivers/usb/gadget/ether.c
drivers/usb/gadget/g_ffs.c
drivers/usb/gadget/gmidi.c
drivers/usb/gadget/hid.c
drivers/usb/gadget/mass_storage.c
drivers/usb/gadget/multi.c
drivers/usb/gadget/ncm.c
drivers/usb/gadget/nokia.c
drivers/usb/gadget/printer.c
drivers/usb/gadget/serial.c
drivers/usb/gadget/tcm_usb_gadget.c
drivers/usb/gadget/webcam.c
drivers/usb/gadget/zero.c
include/linux/usb/composite.h

index 6a7aab8d9bf5bdaed15f4d9164795f5dbb59e9c9..eadda5574b2a540b6d7da6387f951025b41432f9 100644 (file)
@@ -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);
index dc5cd51de7d434aab542dcc2f68dfcc33553b2c0..65a2f3cbcde39e197de5d18b1fab7e716b1450a0 100644 (file)
@@ -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);
 
index e539490e7733846da9ebf8ac9a379d3d38789d9e..dd339bc5b40c747e12979c7e9cbe758746b9da81 100644 (file)
@@ -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);
 
index 00b65ac7a2ef398bba26e4ba6417fed2cc89e7fb..b7d984b54ca9928473eff1b6950fc91fe7652270 100644 (file)
@@ -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);
 
index 402e5bd8b3e59fcc879c81ef317ead9cec70827f..071d15c44116024c52a33adfea1f1d70ebff9bb7 100644 (file)
@@ -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);
 }
index 49a7dac06b1dc587c4d6a0aa6e69935daccfe603..4580ec09cc539bc10f85db29c253830a4f12e7b4 100644 (file)
@@ -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(&eth_driver, eth_bind);
+       return usb_composite_probe(&eth_driver);
 }
 module_init(init);
 
index d1312c404afa401b42f67f207816c8c32057d8ba..da9809f55cb559a4a942f4f2492321f24edc5d9a 100644 (file)
@@ -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;
 
index ae46f69b718ae8d2abd7f1bd3874b5f82a98e7ea..1e3cd378a2d7e8d804fe88199da6b2ebcbffd825 100644 (file)
@@ -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);
 
index 34e139e700b4cfa9588ee41f4b2699c48320efd8..8502e56d73bc0f42850f923065e4b35764ea83c5 100644 (file)
@@ -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);
 
index 5df117e3f78d36afeeb54ab8ee2cb921fff339d6..480edbc368e59ea3238bbdc6d1ee3391d87aa44a 100644 (file)
@@ -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);
 
index 7e5852a28a937297c8d1611d9226ac3c0c9879cc..13db7ccb95717f97e651020a0580368af173ff62 100644 (file)
@@ -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);
 
index 5079bf659e31fd70d4e7c424c4021822c772d3a2..9a20057896cd5500a1cdb373be33d70ee7521873 100644 (file)
@@ -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);
 
index 936d0afc4527b0f64c4cb4fd1d43f865a2016b1e..a5b5e7162fef721dddc35ac86b0fa71ff03c2a2a 100644 (file)
@@ -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);
 
index 0aab51766ce62152f0a4bf4ea755057658d6ec4f..33c0c07493e86bc408a840205fa51385c557452d 100644 (file)
@@ -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);
index 7b0b6f40ed07a9b5268feedf324b7032dbfabdf8..ea3f8e9344ae6d064acab6b1d323342f040d334e 100644 (file)
@@ -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);
 
index 28fef844a06a2b2efbf4adeeb803cf08d45050ba..35ca09af9b4afe4c288acd5e60ece17a8257ba8a 100644 (file)
@@ -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)
index d946f19482e86b1bd7a835d3fdf5fa16098db324..2a617c3f5a4036080c7a67e29dd7ca5f7671ba79 100644 (file)
@@ -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
index 5db33cbe755bfc4fa25f1a045950876954af940f..90df613cccc0f2c7a1a44a353fa0f45dc4894f84 100644 (file)
@@ -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);
 
index 3153f73ae083d1699461c3ee0c10b9ef4b0e4086..19a5adf18bf430d5d3c30662e1bac5deab8e0a42 100644 (file)
@@ -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);