Since we introduce -EPROBE_DEFER for udc driver, it will be
probed at late_initcall if it is defered. When the gadget
is built in, it will return "couldn't find an available UDC"
at such case. That's the problem we met at below link:
http://marc.info/?l=linux-usb&m=
137706435611447&w=2
We have no driver's probe at gadget driver, so we can't return
-EPROBE_DEFER. And it is also not suitable to defer udc_bind_to_driver
if the udc is not found temporarily, since it is hard to decide the
return value for usb_gadget_probe_driver.
Due to above reasons, mark gadget's init as late_initcall may be a
moderate solution.
Signed-off-by: Peter Chen <peter.chen@freescale.com>
{
return usb_composite_probe(&acm_ms_driver);
}
-module_init(init);
+late_initcall(init);
static void __exit cleanup(void)
{
{
return usb_composite_probe(&audio_driver);
}
-module_init(init);
+late_initcall(init);
static void __exit cleanup(void)
{
{
return usb_composite_probe(&cdc_driver);
}
-module_init(init);
+late_initcall(init);
static void __exit cleanup(void)
{
{
return usb_composite_probe(ð_driver);
}
-module_init(init);
+late_initcall(init);
static void __exit cleanup(void)
{
{
return usb_composite_probe(&midi_driver);
}
-module_init(midi_init);
+late_initcall(midi_init);
static void __exit midi_cleanup(void)
{
return status;
}
-module_init(hidg_init);
+late_initcall(hidg_init);
static void __exit hidg_cleanup(void)
{
{
return usb_composite_probe(&multi_driver);
}
-module_init(multi_init);
+late_initcall(multi_init);
static void __exit multi_exit(void)
{
{
return usb_composite_probe(&ncm_driver);
}
-module_init(init);
+late_initcall(init);
static void __exit cleanup(void)
{
{
return usb_composite_probe(&nokia_driver);
}
-module_init(nokia_init);
+late_initcall(nokia_init);
static void __exit nokia_cleanup(void)
{
return status;
}
-module_init(init);
+late_initcall(init);
static void __exit
cleanup(void)
return usb_composite_probe(&gserial_driver);
}
-module_init(init);
+late_initcall(init);
static void __exit cleanup(void)
{
usb_composite_unregister(&webcam_driver);
}
-module_init(webcam_init);
+late_initcall(webcam_init);
module_exit(webcam_cleanup);
MODULE_AUTHOR("Laurent Pinchart");
{
return usb_composite_probe(&zero_driver);
}
-module_init(init);
+late_initcall(init);
static void __exit cleanup(void)
{