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

Reply via email to