On Tuesday 12 December 2006 10:11 am, Sylvain Munaut wrote: > The previous model had the module_init & module_exit function in the > bus glue .c files themselves. That's a problem if several glues need > to be selected at once and the driver is built has module. This case > is quite common in embedded system where you want to handle both the > integrated ohci controller and some extra controller on PCI. > > The ohci-hcd.c file now provide the module_init & module_exit and > appropriate driver registering/unregistering is done conditionally, > using #ifdefs. > > Signed-off-by: Sylvain Munaut <[EMAIL PROTECTED]> Acked-by: David Brownell <[EMAIL PROTECTED]>
> --- > drivers/usb/host/ohci-at91.c | 15 ------- > drivers/usb/host/ohci-au1xxx.c | 16 ------- > drivers/usb/host/ohci-ep93xx.c | 12 ----- > drivers/usb/host/ohci-hcd.c | 90 > ++++++++++++++++++++++++++++++++++----- > drivers/usb/host/ohci-lh7a404.c | 16 ------- > drivers/usb/host/ohci-omap.c | 19 -------- > drivers/usb/host/ohci-pci.c | 20 --------- > drivers/usb/host/ohci-pnx4008.c | 12 ----- > drivers/usb/host/ohci-ppc-soc.c | 16 ------- > drivers/usb/host/ohci-pxa27x.c | 16 ------- > drivers/usb/host/ohci-s3c2410.c | 12 ----- > drivers/usb/host/ohci-sa1111.c | 16 ------- > 12 files changed, 78 insertions(+), 182 deletions(-) > > diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c > index b466581..d014efc 100644 > --- a/drivers/usb/host/ohci-at91.c > +++ b/drivers/usb/host/ohci-at91.c > @@ -321,18 +321,3 @@ static struct platform_driver ohci_hcd_a > }, > }; > > -static int __init ohci_hcd_at91_init (void) > -{ > - if (usb_disabled()) > - return -ENODEV; > - > - return platform_driver_register(&ohci_hcd_at91_driver); > -} > - > -static void __exit ohci_hcd_at91_cleanup (void) > -{ > - platform_driver_unregister(&ohci_hcd_at91_driver); > -} > - > -module_init (ohci_hcd_at91_init); > -module_exit (ohci_hcd_at91_cleanup); > diff --git a/drivers/usb/host/ohci-au1xxx.c b/drivers/usb/host/ohci-au1xxx.c > index 24e23c5..07ed1d5 100644 > --- a/drivers/usb/host/ohci-au1xxx.c > +++ b/drivers/usb/host/ohci-au1xxx.c > @@ -345,19 +345,3 @@ static struct platform_driver ohci_hcd_a > }, > }; > > -static int __init ohci_hcd_au1xxx_init (void) > -{ > - pr_debug (DRIVER_INFO " (Au1xxx)"); > - pr_debug ("block sizes: ed %d td %d\n", > - sizeof (struct ed), sizeof (struct td)); > - > - return platform_driver_register(&ohci_hcd_au1xxx_driver); > -} > - > -static void __exit ohci_hcd_au1xxx_cleanup (void) > -{ > - platform_driver_unregister(&ohci_hcd_au1xxx_driver); > -} > - > -module_init (ohci_hcd_au1xxx_init); > -module_exit (ohci_hcd_au1xxx_cleanup); > diff --git a/drivers/usb/host/ohci-ep93xx.c b/drivers/usb/host/ohci-ep93xx.c > index 1bf5e7a..a64c5c0 100644 > --- a/drivers/usb/host/ohci-ep93xx.c > +++ b/drivers/usb/host/ohci-ep93xx.c > @@ -214,15 +214,3 @@ #endif > }, > }; > > -static int __init ohci_hcd_ep93xx_init(void) > -{ > - return platform_driver_register(&ohci_hcd_ep93xx_driver); > -} > - > -static void __exit ohci_hcd_ep93xx_cleanup(void) > -{ > - platform_driver_unregister(&ohci_hcd_ep93xx_driver); > -} > - > -module_init(ohci_hcd_ep93xx_init); > -module_exit(ohci_hcd_ep93xx_cleanup); > diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c > index b28a9b6..d052041 100644 > --- a/drivers/usb/host/ohci-hcd.c > +++ b/drivers/usb/host/ohci-hcd.c > @@ -911,59 +911,125 @@ MODULE_LICENSE ("GPL"); > > #ifdef CONFIG_PCI > #include "ohci-pci.c" > +#define PCI_DRIVER ohci_pci_driver > #endif > > #ifdef CONFIG_SA1111 > #include "ohci-sa1111.c" > +#define SA1111_DRIVER ohci_hcd_sa1111_driver > #endif > > #ifdef CONFIG_ARCH_S3C2410 > #include "ohci-s3c2410.c" > +#define PLATFORM_DRIVER ohci_hcd_s3c2410_driver > #endif > > #ifdef CONFIG_ARCH_OMAP > #include "ohci-omap.c" > +#define PLATFORM_DRIVER ohci_hcd_omap_driver > #endif > > #ifdef CONFIG_ARCH_LH7A404 > #include "ohci-lh7a404.c" > +#define PLATFORM_DRIVER ohci_hcd_lh7a404_driver > #endif > > #ifdef CONFIG_PXA27x > #include "ohci-pxa27x.c" > +#define PLATFORM_DRIVER ohci_hcd_pxa27x_driver > #endif > > #ifdef CONFIG_ARCH_EP93XX > #include "ohci-ep93xx.c" > +#define PLATFORM_DRIVER ohci_hcd_ep93xx_driver > #endif > > #ifdef CONFIG_SOC_AU1X00 > #include "ohci-au1xxx.c" > +#define PLATFORM_DRIVER ohci_hcd_au1xxx_driver > #endif > > #ifdef CONFIG_USB_OHCI_HCD_PPC_SOC > #include "ohci-ppc-soc.c" > +#define PLATFORM_DRIVER ohci_hcd_ppc_soc_driver > #endif > > #ifdef CONFIG_ARCH_AT91 > #include "ohci-at91.c" > +#define PLATFORM_DRIVER ohci_hcd_at91_driver > #endif > > #ifdef CONFIG_ARCH_PNX4008 > #include "ohci-pnx4008.c" > +#define PLATFORM_DRIVER usb_hcd_pnx4008_driver > #endif > > -#if !(defined(CONFIG_PCI) \ > - || defined(CONFIG_SA1111) \ > - || defined(CONFIG_ARCH_S3C2410) \ > - || defined(CONFIG_ARCH_OMAP) \ > - || defined (CONFIG_ARCH_LH7A404) \ > - || defined (CONFIG_PXA27x) \ > - || defined (CONFIG_ARCH_EP93XX) \ > - || defined (CONFIG_SOC_AU1X00) \ > - || defined (CONFIG_USB_OHCI_HCD_PPC_SOC) \ > - || defined (CONFIG_ARCH_AT91) \ > - || defined (CONFIG_ARCH_PNX4008) \ > - ) > +#if !defined(PCI_DRIVER) && \ > + !defined(PLATFORM_DRIVER) && \ > + !defined(SA1111_DRIVER) > #error "missing bus glue for ohci-hcd" > #endif > + > +static int __init ohci_hcd_mod_init(void) > +{ > + int retval = 0; > + int ls = 0; > + > + if (usb_disabled()) > + return -ENODEV; > + > + printk (KERN_DEBUG "%s: " DRIVER_INFO "\n", hcd_name); > + pr_debug ("%s: block sizes: ed %Zd td %Zd\n", hcd_name, > + sizeof (struct ed), sizeof (struct td)); > + > +#ifdef PLATFORM_DRIVER > + retval = platform_driver_register(&PLATFORM_DRIVER); > + if (retval < 0) > + return retval; > + ls++; > +#endif > + > +#ifdef SA1111_DRIVER > + retval = sa1111_driver_register(&SA1111_DRIVER); > + if (retval < 0) > + goto error; > + ls++; > +#endif > + > +#ifdef PCI_DRIVER > + retval = pci_register_driver(&PCI_DRIVER); > + if (retval < 0) > + goto error; > + ls++; > +#endif > + > + return retval; > + > + /* Error path */ > +error: > +#ifdef PLATFORM_DRIVER > + if (ls--) > + platform_driver_unregister(&PLATFORM_DRIVER); > +#endif > +#ifdef SA1111_DRIVER > + if (ls--) > + sa1111_driver_unregister(&SA1111_DRIVER); > +#endif > + return retval; > +} > +module_init(ohci_hcd_mod_init); > + > +static void __exit ohci_hcd_mod_exit(void) > +{ > +#ifdef PCI_DRIVER > + pci_unregister_driver(&PCI_DRIVER); > +#endif > +#ifdef SA1111_DRIVER > + sa1111_driver_unregister(&SA1111_DRIVER); > +#endif > +#ifdef PLATFORM_DRIVER > + platform_driver_unregister(&PLATFORM_DRIVER); > +#endif > +} > +module_exit(ohci_hcd_mod_exit); > + > diff --git a/drivers/usb/host/ohci-lh7a404.c b/drivers/usb/host/ohci-lh7a404.c > index e121d97..e989ba8 100644 > --- a/drivers/usb/host/ohci-lh7a404.c > +++ b/drivers/usb/host/ohci-lh7a404.c > @@ -251,19 +251,3 @@ static struct platform_driver ohci_hcd_l > }, > }; > > -static int __init ohci_hcd_lh7a404_init (void) > -{ > - pr_debug (DRIVER_INFO " (LH7A404)"); > - pr_debug ("block sizes: ed %d td %d\n", > - sizeof (struct ed), sizeof (struct td)); > - > - return platform_driver_register(&ohci_hcd_lh7a404_driver); > -} > - > -static void __exit ohci_hcd_lh7a404_cleanup (void) > -{ > - platform_driver_unregister(&ohci_hcd_lh7a404_driver); > -} > - > -module_init (ohci_hcd_lh7a404_init); > -module_exit (ohci_hcd_lh7a404_cleanup); > diff --git a/drivers/usb/host/ohci-omap.c b/drivers/usb/host/ohci-omap.c > index 9c02177..6bb0398 100644 > --- a/drivers/usb/host/ohci-omap.c > +++ b/drivers/usb/host/ohci-omap.c > @@ -544,22 +544,3 @@ #endif > }, > }; > > -static int __init ohci_hcd_omap_init (void) > -{ > - printk (KERN_DEBUG "%s: " DRIVER_INFO " (OMAP)\n", hcd_name); > - if (usb_disabled()) > - return -ENODEV; > - > - pr_debug("%s: block sizes: ed %Zd td %Zd\n", hcd_name, > - sizeof (struct ed), sizeof (struct td)); > - > - return platform_driver_register(&ohci_hcd_omap_driver); > -} > - > -static void __exit ohci_hcd_omap_cleanup (void) > -{ > - platform_driver_unregister(&ohci_hcd_omap_driver); > -} > - > -module_init (ohci_hcd_omap_init); > -module_exit (ohci_hcd_omap_cleanup); > diff --git a/drivers/usb/host/ohci-pci.c b/drivers/usb/host/ohci-pci.c > index 54eca32..afae892 100644 > --- a/drivers/usb/host/ohci-pci.c > +++ b/drivers/usb/host/ohci-pci.c > @@ -310,23 +310,3 @@ #endif > .shutdown = usb_hcd_pci_shutdown, > }; > > - > -static int __init ohci_hcd_pci_init (void) > -{ > - printk (KERN_DEBUG "%s: " DRIVER_INFO " (PCI)\n", hcd_name); > - if (usb_disabled()) > - return -ENODEV; > - > - pr_debug ("%s: block sizes: ed %Zd td %Zd\n", hcd_name, > - sizeof (struct ed), sizeof (struct td)); > - return pci_register_driver (&ohci_pci_driver); > -} > -module_init (ohci_hcd_pci_init); > - > -/*-------------------------------------------------------------------------*/ > - > -static void __exit ohci_hcd_pci_cleanup (void) > -{ > - pci_unregister_driver (&ohci_pci_driver); > -} > -module_exit (ohci_hcd_pci_cleanup); > diff --git a/drivers/usb/host/ohci-pnx4008.c b/drivers/usb/host/ohci-pnx4008.c > index 7f26f9b..05b6495 100644 > --- a/drivers/usb/host/ohci-pnx4008.c > +++ b/drivers/usb/host/ohci-pnx4008.c > @@ -465,15 +465,3 @@ static struct platform_driver usb_hcd_pn > .remove = usb_hcd_pnx4008_remove, > }; > > -static int __init usb_hcd_pnx4008_init(void) > -{ > - return platform_driver_register(&usb_hcd_pnx4008_driver); > -} > - > -static void __exit usb_hcd_pnx4008_cleanup(void) > -{ > - return platform_driver_unregister(&usb_hcd_pnx4008_driver); > -} > - > -module_init(usb_hcd_pnx4008_init); > -module_exit(usb_hcd_pnx4008_cleanup); > diff --git a/drivers/usb/host/ohci-ppc-soc.c b/drivers/usb/host/ohci-ppc-soc.c > index 9a6f617..483897c 100644 > --- a/drivers/usb/host/ohci-ppc-soc.c > +++ b/drivers/usb/host/ohci-ppc-soc.c > @@ -208,19 +208,3 @@ #endif > }, > }; > > -static int __init ohci_hcd_ppc_soc_init(void) > -{ > - pr_debug(DRIVER_INFO " (PPC SOC)\n"); > - pr_debug("block sizes: ed %d td %d\n", sizeof(struct ed), > - sizeof(struct td)); > - > - return platform_driver_register(&ohci_hcd_ppc_soc_driver); > -} > - > -static void __exit ohci_hcd_ppc_soc_cleanup(void) > -{ > - platform_driver_unregister(&ohci_hcd_ppc_soc_driver); > -} > - > -module_init(ohci_hcd_ppc_soc_init); > -module_exit(ohci_hcd_ppc_soc_cleanup); > diff --git a/drivers/usb/host/ohci-pxa27x.c b/drivers/usb/host/ohci-pxa27x.c > index e176b04..12b0b48 100644 > --- a/drivers/usb/host/ohci-pxa27x.c > +++ b/drivers/usb/host/ohci-pxa27x.c > @@ -369,19 +369,3 @@ #endif > }, > }; > > -static int __init ohci_hcd_pxa27x_init (void) > -{ > - pr_debug (DRIVER_INFO " (pxa27x)"); > - pr_debug ("block sizes: ed %d td %d\n", > - sizeof (struct ed), sizeof (struct td)); > - > - return platform_driver_register(&ohci_hcd_pxa27x_driver); > -} > - > -static void __exit ohci_hcd_pxa27x_cleanup (void) > -{ > - platform_driver_unregister(&ohci_hcd_pxa27x_driver); > -} > - > -module_init (ohci_hcd_pxa27x_init); > -module_exit (ohci_hcd_pxa27x_cleanup); > diff --git a/drivers/usb/host/ohci-s3c2410.c b/drivers/usb/host/ohci-s3c2410.c > index 59e4364..7d57441 100644 > --- a/drivers/usb/host/ohci-s3c2410.c > +++ b/drivers/usb/host/ohci-s3c2410.c > @@ -501,15 +501,3 @@ static struct platform_driver ohci_hcd_s > }, > }; > > -static int __init ohci_hcd_s3c2410_init (void) > -{ > - return platform_driver_register(&ohci_hcd_s3c2410_driver); > -} > - > -static void __exit ohci_hcd_s3c2410_cleanup (void) > -{ > - platform_driver_unregister(&ohci_hcd_s3c2410_driver); > -} > - > -module_init (ohci_hcd_s3c2410_init); > -module_exit (ohci_hcd_s3c2410_cleanup); > diff --git a/drivers/usb/host/ohci-sa1111.c b/drivers/usb/host/ohci-sa1111.c > index 71371de..0002e4c 100644 > --- a/drivers/usb/host/ohci-sa1111.c > +++ b/drivers/usb/host/ohci-sa1111.c > @@ -269,19 +269,3 @@ static struct sa1111_driver ohci_hcd_sa1 > .remove = ohci_hcd_sa1111_drv_remove, > }; > > -static int __init ohci_hcd_sa1111_init (void) > -{ > - dbg (DRIVER_INFO " (SA-1111)"); > - dbg ("block sizes: ed %d td %d", > - sizeof (struct ed), sizeof (struct td)); > - > - return sa1111_driver_register(&ohci_hcd_sa1111_driver); > -} > - > -static void __exit ohci_hcd_sa1111_cleanup (void) > -{ > - sa1111_driver_unregister(&ohci_hcd_sa1111_driver); > -} > - > -module_init (ohci_hcd_sa1111_init); > -module_exit (ohci_hcd_sa1111_cleanup); > -- > 1.4.2 > ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel