This patch moves the include of the glue code for platform devices out into a separate file. The ifdefs are moved into the files arch files. Each file provides a register and unregister function. This changes makes it possible to build multiple platform drivers at the same time. Signed-off-by: Sebastian Andrzej Siewior <sebastian@xxxxxxxxxxxxx> --- drivers/usb/host/ehci-ath79.c | 21 +++++ drivers/usb/host/ehci-atmel.c | 21 +++++ drivers/usb/host/ehci-au1xxx.c | 21 +++++ drivers/usb/host/ehci-cns3xxx.c | 21 +++++ drivers/usb/host/ehci-fsl.c | 21 +++++ drivers/usb/host/ehci-grlib.c | 21 +++++ drivers/usb/host/ehci-ixp4xx.c | 21 +++++ drivers/usb/host/ehci-msm.c | 21 +++++ drivers/usb/host/ehci-mxc.c | 21 +++++ drivers/usb/host/ehci-octeon.c | 21 +++++ drivers/usb/host/ehci-omap.c | 21 +++++ drivers/usb/host/ehci-orion.c | 21 +++++ drivers/usb/host/ehci-platform.c | 161 ++++++++++++++++++++++++++++++++++++++ drivers/usb/host/ehci-pmcmsp.c | 21 +++++ drivers/usb/host/ehci-pxa168.c | 21 +++++ drivers/usb/host/ehci-s5p.c | 21 +++++ drivers/usb/host/ehci-sh.c | 21 +++++ drivers/usb/host/ehci-spear.c | 21 +++++ drivers/usb/host/ehci-tegra.c | 21 +++++ drivers/usb/host/ehci-vt8500.c | 21 +++++ drivers/usb/host/ehci-w90x900.c | 21 +++++ drivers/usb/host/ehci-xls.c | 21 +++++ drivers/usb/host/ehci.c | 123 +---------------------------- drivers/usb/host/ehci.h | 3 + 24 files changed, 608 insertions(+), 120 deletions(-) diff --git a/drivers/usb/host/ehci-ath79.c b/drivers/usb/host/ehci-ath79.c index 4d2e88d..0af9637 100644 --- a/drivers/usb/host/ehci-ath79.c +++ b/drivers/usb/host/ehci-ath79.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_USB_EHCI_ATH79 /* * Bus Glue for Atheros AR7XXX/AR9XXX built-in EHCI controller. * @@ -202,3 +203,23 @@ static struct platform_driver ehci_ath79_driver = { }; MODULE_ALIAS(PLATFORM_MODULE_PREFIX "ath79-ehci"); + +static int ehci_register_ehci_ath79_driver(void) +{ + return platform_driver_register(&ehci_ath79_driver); +} + +static void ehci_unregister_ehci_ath79_driver(void) +{ + platform_driver_unregister(&ehci_ath79_driver); +} + +#else + +static int ehci_register_ehci_ath79_driver(void) +{ + return 0; +} + +static void ehci_unregister_ehci_ath79_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-atmel.c b/drivers/usb/host/ehci-atmel.c index a5a3ef1..87f6fc8 100644 --- a/drivers/usb/host/ehci-atmel.c +++ b/drivers/usb/host/ehci-atmel.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_ARCH_AT91 /* * Driver for EHCI UHP on Atmel chips * @@ -231,3 +232,23 @@ static struct platform_driver ehci_atmel_driver = { .shutdown = usb_hcd_platform_shutdown, .driver.name = "atmel-ehci", }; + +static int ehci_register_ehci_atmel_driver(void) +{ + return platform_driver_register(&ehci_atmel_driver); +} + +static void ehci_unregister_ehci_atmel_driver(void) +{ + platform_driver_unregister(&ehci_atmel_driver); +} + +#else + +static int ehci_register_ehci_atmel_driver(void) +{ + return 0; +} + +static void ehci_unregister_ehci_atmel_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-au1xxx.c b/drivers/usb/host/ehci-au1xxx.c index 43f6ff0..36769aa 100644 --- a/drivers/usb/host/ehci-au1xxx.c +++ b/drivers/usb/host/ehci-au1xxx.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_SOC_AU1200 /* * EHCI HCD (Host Controller Driver) for USB. * @@ -291,3 +292,23 @@ static struct platform_driver ehci_hcd_au1xxx_driver = { }; MODULE_ALIAS("platform:au1xxx-ehci"); + +static int ehci_register_ehci_hcd_au1xxx_driver(void) +{ + return platform_driver_register(&ehci_hcd_au1xxx_driver); +} + +static void ehci_unregister_ehci_hcd_au1xxx_driver(void) +{ + platform_driver_unregister(&ehci_hcd_au1xxx_driver); +} + +#else + +static int ehci_register_ehci_hcd_au1xxx_driver(void) +{ + return 0; +} + +static void ehci_unregister_ehci_hcd_au1xxx_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-cns3xxx.c b/drivers/usb/host/ehci-cns3xxx.c index 6536abd..2f07af8 100644 --- a/drivers/usb/host/ehci-cns3xxx.c +++ b/drivers/usb/host/ehci-cns3xxx.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_USB_CNS3XXX_EHCI /* * Copyright 2008 Cavium Networks * @@ -169,3 +170,23 @@ static struct platform_driver cns3xxx_ehci_driver = { .name = "cns3xxx-ehci", }, }; + +static int ehci_register_cns3xxx_ehci_driver(void) +{ + return platform_driver_register(&cns3xxx_ehci_driver); +} + +static void ehci_unregister_cns3xxx_ehci_driver(void) +{ + platform_driver_unregister(&cns3xxx_ehci_driver); +} + +#else + +static int ehci_register_cns3xxx_ehci_driver(void) +{ + return 0; +} + +static void ehci_unregister_cns3xxx_ehci_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c index 3bf9f16..03d0810 100644 --- a/drivers/usb/host/ehci-fsl.c +++ b/drivers/usb/host/ehci-fsl.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_USB_EHCI_FSL /* * Copyright 2005-2009 MontaVista Software, Inc. * Copyright 2008 Freescale Semiconductor, Inc. @@ -684,3 +685,23 @@ static struct platform_driver ehci_fsl_driver = { .pm = EHCI_FSL_PM_OPS, }, }; + +static int ehci_register_ehci_fsl_driver(void) +{ + return platform_driver_register(&ehci_fsl_driver); +} + +static void ehci_unregister_ehci_fsl_driver(void) +{ + platform_driver_unregister(&ehci_fsl_driver); +} + +#else + +static int ehci_register_ehci_fsl_driver(void) +{ + return 0; +} + +static void ehci_unregister_ehci_fsl_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-grlib.c b/drivers/usb/host/ehci-grlib.c index fdfd8c5..8660d03 100644 --- a/drivers/usb/host/ehci-grlib.c +++ b/drivers/usb/host/ehci-grlib.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_SPARC_LEON /* * Driver for Aeroflex Gaisler GRLIB GRUSBHC EHCI host controller * @@ -240,3 +241,23 @@ static struct platform_driver ehci_grlib_driver = { .of_match_table = ehci_hcd_grlib_of_match, }, }; + +static int ehci_register_ehci_grlib_driver(void) +{ + return platform_driver_register(&ehci_grlib_driver); +} + +static void ehci_unregister_ehci_grlib_driver(void) +{ + platform_driver_unregister(&ehci_grlib_driver); +} + +#else + +static int ehci_register_ehci_grlib_driver(void) +{ + return 0; +} + +static void ehci_unregister_ehci_grlib_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-ixp4xx.c b/drivers/usb/host/ehci-ixp4xx.c index c4460f3..b5c67d5 100644 --- a/drivers/usb/host/ehci-ixp4xx.c +++ b/drivers/usb/host/ehci-ixp4xx.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_ARCH_IXP4XX /* * IXP4XX EHCI Host Controller Driver * @@ -154,3 +155,23 @@ static struct platform_driver ixp4xx_ehci_driver = { .name = "ixp4xx-ehci", }, }; + +static int ehci_register_ixp4xx_ehci_driver(void) +{ + return platform_driver_register(&ixp4xx_ehci_driver); +} + +static void ehci_unregister_ixp4xx_ehci_driver(void) +{ + platform_driver_unregister(&ixp4xx_ehci_driver); +} + +#else + +static int ehci_register_ixp4xx_ehci_driver(void) +{ + return 0; +} + +static void ehci_unregister_ixp4xx_ehci_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-msm.c b/drivers/usb/host/ehci-msm.c index 592d5f7..fbfa976 100644 --- a/drivers/usb/host/ehci-msm.c +++ b/drivers/usb/host/ehci-msm.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_USB_EHCI_MSM /* ehci-msm.c - HSUSB Host Controller Driver Implementation * * Copyright (c) 2008-2011, Code Aurora Forum. All rights reserved. @@ -245,3 +246,23 @@ static struct platform_driver ehci_msm_driver = { .pm = &ehci_msm_dev_pm_ops, }, }; + +static int ehci_register_ehci_msm_driver(void) +{ + return platform_driver_register(&ehci_msm_driver); +} + +static void ehci_unregister_ehci_msm_driver(void) +{ + platform_driver_unregister(&ehci_msm_driver); +} + +#else + +static int ehci_register_ehci_msm_driver(void) +{ + return 0; +} + +static void ehci_unregister_ehci_msm_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-mxc.c b/drivers/usb/host/ehci-mxc.c index 555a73c..e2584fc 100644 --- a/drivers/usb/host/ehci-mxc.c +++ b/drivers/usb/host/ehci-mxc.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_USB_EHCI_MXC /* * Copyright (c) 2008 Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>, Pengutronix * Copyright (c) 2009 Daniel Mack <daniel@xxxxxxxx> @@ -340,3 +341,23 @@ static struct platform_driver ehci_mxc_driver = { .name = "mxc-ehci", }, }; + +static int ehci_register_ehci_mxc_driver(void) +{ + return platform_driver_register(&ehci_mxc_driver); +} + +static void ehci_unregister_ehci_mxc_driver(void) +{ + platform_driver_unregister(&ehci_mxc_driver); +} + +#else + +static int ehci_register_ehci_mxc_driver(void) +{ + return 0; +} + +static void ehci_unregister_ehci_mxc_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-octeon.c b/drivers/usb/host/ehci-octeon.c index c3ba3ed..39a4ade 100644 --- a/drivers/usb/host/ehci-octeon.c +++ b/drivers/usb/host/ehci-octeon.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_USB_OCTEON_EHCI /* * EHCI HCD glue for Cavium Octeon II SOCs. * @@ -205,3 +206,23 @@ static struct platform_driver ehci_octeon_driver = { }; MODULE_ALIAS("platform:" OCTEON_EHCI_HCD_NAME); + +static int ehci_register_ehci_octeon_driver(void) +{ + return platform_driver_register(&ehci_octeon_driver); +} + +static void ehci_unregister_ehci_octeon_driver(void) +{ + platform_driver_unregister(&ehci_octeon_driver); +} + +#else + +static int ehci_register_ehci_octeon_driver(void) +{ + return 0; +} + +static void ehci_unregister_ehci_octeon_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c index 4524032..bc0cfbf 100644 --- a/drivers/usb/host/ehci-omap.c +++ b/drivers/usb/host/ehci-omap.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_USB_EHCI_HCD_OMAP /* * ehci-omap.c - driver for USBHOST on OMAP3/4 processors * @@ -341,3 +342,23 @@ MODULE_ALIAS("platform:omap-ehci"); MODULE_AUTHOR("Texas Instruments, Inc."); MODULE_AUTHOR("Felipe Balbi <felipe.balbi@xxxxxxxxx>"); + +static int ehci_register_ehci_hcd_omap_driver(void) +{ + return platform_driver_register(&ehci_hcd_omap_driver); +} + +static void ehci_unregister_ehci_hcd_omap_driver(void) +{ + platform_driver_unregister(&ehci_hcd_omap_driver); +} + +#else + +static int ehci_register_ehci_hcd_omap_driver(void) +{ + return 0; +} + +static void ehci_unregister_ehci_hcd_omap_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-orion.c b/drivers/usb/host/ehci-orion.c index 395bdb0..8f9a4c4 100644 --- a/drivers/usb/host/ehci-orion.c +++ b/drivers/usb/host/ehci-orion.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_PLAT_ORION /* * drivers/usb/host/ehci-orion.c * @@ -316,3 +317,23 @@ static struct platform_driver ehci_orion_driver = { .shutdown = usb_hcd_platform_shutdown, .driver.name = "orion-ehci", }; + +static int ehci_register_ehci_orion_driver(void) +{ + return platform_driver_register(&ehci_orion_driver); +} + +static void ehci_unregister_ehci_orion_driver(void) +{ + platform_driver_unregister(&ehci_orion_driver); +} + +#else + +static int ehci_register_ehci_orion_driver(void) +{ + return 0; +} + +static void ehci_unregister_ehci_orion_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c index d9d3351..696bf8b 100644 --- a/drivers/usb/host/ehci-platform.c +++ b/drivers/usb/host/ehci-platform.c @@ -68,3 +68,164 @@ void ehci_hcd_plat_cleanup(struct platform_device *pdev, struct usb_hcd *hcd) release_mem_region(hcd->rsrc_start, hcd->rsrc_len); usb_put_hcd(hcd); } + +#include "ehci-ath79.c" +#include "ehci-atmel.c" +#include "ehci-au1xxx.c" +#include "ehci-cns3xxx.c" +#include "ehci-fsl.c" +#include "ehci-grlib.c" +#include "ehci-ixp4xx.c" +#include "ehci-msm.c" +#include "ehci-mxc.c" +#include "ehci-octeon.c" +#include "ehci-omap.c" +#include "ehci-orion.c" +#include "ehci-pmcmsp.c" +#include "ehci-pxa168.c" +#include "ehci-s5p.c" +#include "ehci-sh.c" +#include "ehci-spear.c" +#include "ehci-tegra.c" +#include "ehci-vt8500.c" +#include "ehci-w90x900.c" +#include "ehci-xls.c" + +int ehci_register_platforms(void) +{ + int ret; + + ret = ehci_register_ehci_ath79_driver(); + if (ret) + goto err_1; + ret = ehci_register_ehci_atmel_driver(); + if (ret) + goto err_2; + ret = ehci_register_ehci_hcd_au1xxx_driver(); + if (ret) + goto err_3; + ret = ehci_register_cns3xxx_ehci_driver(); + if (ret) + goto err_4; + ret = ehci_register_ehci_fsl_driver(); + if (ret) + goto err_5; + ret = ehci_register_ehci_grlib_driver(); + if (ret) + goto err_6; + ret = ehci_register_ixp4xx_ehci_driver(); + if (ret) + goto err_7; + ret = ehci_register_ehci_msm_driver(); + if (ret) + goto err_8; + ret = ehci_register_ehci_mxc_driver(); + if (ret) + goto err_9; + ret = ehci_register_ehci_octeon_driver(); + if (ret) + goto err_10; + ret = ehci_register_ehci_hcd_omap_driver(); + if (ret) + goto err_11; + ret = ehci_register_ehci_orion_driver(); + if (ret) + goto err_12; + ret = ehci_register_ehci_hcd_msp_driver(); + if (ret) + goto err_13; + ret = ehci_register_ehci_pxa168_driver(); + if (ret) + goto err_14; + ret = ehci_register_s5p_ehci_driver(); + if (ret) + goto err_15; + ret = ehci_register_ehci_hcd_sh_driver(); + if (ret) + goto err_16; + ret = ehci_register_spear_ehci_hcd_driver(); + if (ret) + goto err_17; + ret = ehci_register_tegra_ehci_driver(); + if (ret) + goto err_18; + ret = ehci_register_vt8500_ehci_driver(); + if (ret) + goto err_19; + ret = ehci_register_ehci_hcd_w90x900_driver(); + if (ret) + goto err_20; + ret = ehci_register_ehci_xls_driver(); + if (ret) + goto err_21; + return ret; + + ehci_unregister_ehci_xls_driver(); +err_21: + ehci_unregister_ehci_hcd_w90x900_driver(); +err_20: + ehci_unregister_vt8500_ehci_driver(); +err_19: + ehci_unregister_tegra_ehci_driver(); +err_18: + ehci_unregister_spear_ehci_hcd_driver(); +err_17: + ehci_unregister_ehci_hcd_sh_driver(); +err_16: + ehci_unregister_s5p_ehci_driver(); +err_15: + ehci_unregister_ehci_pxa168_driver(); +err_14: + ehci_unregister_ehci_hcd_msp_driver(); +err_13: + ehci_unregister_ehci_orion_driver(); +err_12: + ehci_unregister_ehci_hcd_omap_driver(); +err_11: + ehci_unregister_ehci_octeon_driver(); +err_10: + ehci_unregister_ehci_mxc_driver(); +err_9: + ehci_unregister_ehci_msm_driver(); +err_8: + ehci_unregister_ixp4xx_ehci_driver(); +err_7: + ehci_unregister_ehci_grlib_driver(); +err_6: + ehci_unregister_ehci_fsl_driver(); +err_5: + ehci_unregister_cns3xxx_ehci_driver(); +err_4: + ehci_unregister_ehci_hcd_au1xxx_driver(); +err_3: + ehci_unregister_ehci_atmel_driver(); +err_2: + ehci_unregister_ehci_ath79_driver(); +err_1: + return ret; +} + +void ehci_unregister_platforms(void) +{ + ehci_unregister_ehci_xls_driver(); + ehci_unregister_ehci_hcd_w90x900_driver(); + ehci_unregister_vt8500_ehci_driver(); + ehci_unregister_tegra_ehci_driver(); + ehci_unregister_spear_ehci_hcd_driver(); + ehci_unregister_ehci_hcd_sh_driver(); + ehci_unregister_s5p_ehci_driver(); + ehci_unregister_ehci_pxa168_driver(); + ehci_unregister_ehci_hcd_msp_driver(); + ehci_unregister_ehci_orion_driver(); + ehci_unregister_ehci_hcd_omap_driver(); + ehci_unregister_ehci_octeon_driver(); + ehci_unregister_ehci_mxc_driver(); + ehci_unregister_ehci_msm_driver(); + ehci_unregister_ixp4xx_ehci_driver(); + ehci_unregister_ehci_grlib_driver(); + ehci_unregister_ehci_fsl_driver(); + ehci_unregister_cns3xxx_ehci_driver(); + ehci_unregister_ehci_hcd_au1xxx_driver(); + ehci_unregister_ehci_atmel_driver(); + ehci_unregister_ehci_ath79_driver(); +} diff --git a/drivers/usb/host/ehci-pmcmsp.c b/drivers/usb/host/ehci-pmcmsp.c index e8d54de..7b3bc25 100644 --- a/drivers/usb/host/ehci-pmcmsp.c +++ b/drivers/usb/host/ehci-pmcmsp.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_USB_EHCI_HCD_PMC_MSP /* * PMC MSP EHCI (Host Controller Driver) for USB. * @@ -381,3 +382,23 @@ static struct platform_driver ehci_hcd_msp_driver = { .owner = THIS_MODULE, }, }; + +static int ehci_register_ehci_hcd_msp_driver(void) +{ + return platform_driver_register(&ehci_hcd_msp_driver); +} + +static void ehci_unregister_ehci_hcd_msp_driver(void) +{ + platform_driver_unregister(&ehci_hcd_msp_driver); +} + +#else + +static int ehci_register_ehci_hcd_msp_driver(void) +{ + return 0; +} + +static void ehci_unregister_ehci_hcd_msp_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-pxa168.c b/drivers/usb/host/ehci-pxa168.c index ac0c16e..08a4f69 100644 --- a/drivers/usb/host/ehci-pxa168.c +++ b/drivers/usb/host/ehci-pxa168.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_USB_PXA168_EHCI /* * drivers/usb/host/ehci-pxa168.c * @@ -361,3 +362,23 @@ static struct platform_driver ehci_pxa168_driver = { .shutdown = usb_hcd_platform_shutdown, .driver.name = "pxa168-ehci", }; + +static int ehci_register_ehci_pxa168_driver(void) +{ + return platform_driver_register(&ehci_pxa168_driver); +} + +static void ehci_unregister_ehci_pxa168_driver(void) +{ + platform_driver_unregister(&ehci_pxa168_driver); +} + +#else + +static int ehci_register_ehci_pxa168_driver(void) +{ + return 0; +} + +static void ehci_unregister_ehci_pxa168_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-s5p.c b/drivers/usb/host/ehci-s5p.c index 64bcf66..e6a7fc2 100644 --- a/drivers/usb/host/ehci-s5p.c +++ b/drivers/usb/host/ehci-s5p.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_USB_EHCI_S5P /* * SAMSUNG S5P USB HOST EHCI Controller * @@ -296,3 +297,23 @@ static struct platform_driver s5p_ehci_driver = { }; MODULE_ALIAS("platform:s5p-ehci"); + +static int ehci_register_s5p_ehci_driver(void) +{ + return platform_driver_register(&s5p_ehci_driver); +} + +static void ehci_unregister_s5p_ehci_driver(void) +{ + platform_driver_unregister(&s5p_ehci_driver); +} + +#else + +static int ehci_register_s5p_ehci_driver(void) +{ + return 0; +} + +static void ehci_unregister_s5p_ehci_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-sh.c b/drivers/usb/host/ehci-sh.c index 937988a..74aed47 100644 --- a/drivers/usb/host/ehci-sh.c +++ b/drivers/usb/host/ehci-sh.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_USB_EHCI_SH /* * SuperH EHCI host controller driver * @@ -181,3 +182,23 @@ static struct platform_driver ehci_hcd_sh_driver = { }; MODULE_ALIAS("platform:sh_ehci"); + +static int ehci_register_ehci_hcd_sh_driver(void) +{ + return platform_driver_register(&ehci_hcd_sh_driver); +} + +static void ehci_unregister_ehci_hcd_sh_driver(void) +{ + platform_driver_unregister(&ehci_hcd_sh_driver); +} + +#else + +static int ehci_register_ehci_hcd_sh_driver(void) +{ + return 0; +} + +static void ehci_unregister_ehci_hcd_sh_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-spear.c b/drivers/usb/host/ehci-spear.c index c3a2d06..a71e50f 100644 --- a/drivers/usb/host/ehci-spear.c +++ b/drivers/usb/host/ehci-spear.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_PLAT_SPEAR /* * Driver for EHCI HCD on SPEAR SOC * @@ -146,3 +147,23 @@ static struct platform_driver spear_ehci_hcd_driver = { }; MODULE_ALIAS("platform:spear-ehci"); + +static int ehci_register_spear_ehci_hcd_driver(void) +{ + return platform_driver_register(&spear_ehci_hcd_driver); +} + +static void ehci_unregister_spear_ehci_hcd_driver(void) +{ + platform_driver_unregister(&spear_ehci_hcd_driver); +} + +#else + +static int ehci_register_spear_ehci_hcd_driver(void) +{ + return 0; +} + +static void ehci_unregister_spear_ehci_hcd_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c index 02b2bfd..f752e4c 100644 --- a/drivers/usb/host/ehci-tegra.c +++ b/drivers/usb/host/ehci-tegra.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_USB_EHCI_TEGRA /* * EHCI-compliant USB host controller driver for NVIDIA Tegra SoCs * @@ -785,3 +786,23 @@ static struct platform_driver tegra_ehci_driver = { .name = "tegra-ehci", } }; + +static int ehci_register_tegra_ehci_driver(void) +{ + return platform_driver_register(&tegra_ehci_driver); +} + +static void ehci_unregister_tegra_ehci_driver(void) +{ + platform_driver_unregister(&tegra_ehci_driver); +} + +#else + +static int ehci_register_tegra_ehci_driver(void) +{ + return 0; +} + +static void ehci_unregister_tegra_ehci_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-vt8500.c b/drivers/usb/host/ehci-vt8500.c index 47d7496..103d6ad 100644 --- a/drivers/usb/host/ehci-vt8500.c +++ b/drivers/usb/host/ehci-vt8500.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_ARCH_VT8500 /* * drivers/usb/host/ehci-vt8500.c * @@ -171,3 +172,23 @@ static struct platform_driver vt8500_ehci_driver = { }; MODULE_ALIAS("platform:vt8500-ehci"); + +static int ehci_register_vt8500_ehci_driver(void) +{ + return platform_driver_register(&vt8500_ehci_driver); +} + +static void ehci_unregister_vt8500_ehci_driver(void) +{ + platform_driver_unregister(&vt8500_ehci_driver); +} + +#else + +static int ehci_register_vt8500_ehci_driver(void) +{ + return 0; +} + +static void ehci_unregister_vt8500_ehci_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-w90x900.c b/drivers/usb/host/ehci-w90x900.c index d661cf7..44e292f 100644 --- a/drivers/usb/host/ehci-w90x900.c +++ b/drivers/usb/host/ehci-w90x900.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_USB_W90X900_EHCI /* * linux/driver/usb/host/ehci-w90x900.c * @@ -182,3 +183,23 @@ MODULE_AUTHOR("Wan ZongShun <mcuos.com@xxxxxxxxx>"); MODULE_DESCRIPTION("w90p910 usb ehci driver!"); MODULE_LICENSE("GPL"); MODULE_ALIAS("platform:w90p910-ehci"); + +static int ehci_register_ehci_hcd_w90x900_driver(void) +{ + return platform_driver_register(&ehci_hcd_w90x900_driver); +} + +static void ehci_unregister_ehci_hcd_w90x900_driver(void) +{ + platform_driver_unregister(&ehci_hcd_w90x900_driver); +} + +#else + +static int ehci_register_ehci_hcd_w90x900_driver(void) +{ + return 0; +} + +static void ehci_unregister_ehci_hcd_w90x900_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci-xls.c b/drivers/usb/host/ehci-xls.c index fe74bd6..9e048a0 100644 --- a/drivers/usb/host/ehci-xls.c +++ b/drivers/usb/host/ehci-xls.c @@ -1,3 +1,4 @@ +#ifdef CONFIG_NLM_XLR /* * EHCI HCD for Netlogic XLS processors. * @@ -159,3 +160,23 @@ static struct platform_driver ehci_xls_driver = { .name = "ehci-xls", }, }; + +static int ehci_register_ehci_xls_driver(void) +{ + return platform_driver_register(&ehci_xls_driver); +} + +static void ehci_unregister_ehci_xls_driver(void) +{ + platform_driver_unregister(&ehci_xls_driver); +} + +#else + +static int ehci_register_ehci_xls_driver(void) +{ + return 0; +} + +static void ehci_unregister_ehci_xls_driver(void) {} +#endif diff --git a/drivers/usb/host/ehci.c b/drivers/usb/host/ehci.c index 42c02a5..2e91434 100644 --- a/drivers/usb/host/ehci.c +++ b/drivers/usb/host/ehci.c @@ -1166,117 +1166,6 @@ MODULE_DESCRIPTION(DRIVER_DESC); MODULE_AUTHOR (DRIVER_AUTHOR); MODULE_LICENSE ("GPL"); -#ifdef CONFIG_USB_EHCI_FSL -#include "ehci-fsl.c" -#define PLATFORM_DRIVER ehci_fsl_driver -#endif - -#ifdef CONFIG_USB_EHCI_MXC -#include "ehci-mxc.c" -#define PLATFORM_DRIVER ehci_mxc_driver -#endif - -#ifdef CONFIG_USB_EHCI_SH -#include "ehci-sh.c" -#define PLATFORM_DRIVER ehci_hcd_sh_driver -#endif - -#ifdef CONFIG_SOC_AU1200 -#include "ehci-au1xxx.c" -#define PLATFORM_DRIVER ehci_hcd_au1xxx_driver -#endif - -#ifdef CONFIG_USB_EHCI_HCD_OMAP -#include "ehci-omap.c" -#define PLATFORM_DRIVER ehci_hcd_omap_driver -#endif - -#ifdef CONFIG_PLAT_ORION -#include "ehci-orion.c" -#define PLATFORM_DRIVER ehci_orion_driver -#endif - -#ifdef CONFIG_ARCH_IXP4XX -#include "ehci-ixp4xx.c" -#define PLATFORM_DRIVER ixp4xx_ehci_driver -#endif - -#ifdef CONFIG_USB_W90X900_EHCI -#include "ehci-w90x900.c" -#define PLATFORM_DRIVER ehci_hcd_w90x900_driver -#endif - -#ifdef CONFIG_ARCH_AT91 -#include "ehci-atmel.c" -#define PLATFORM_DRIVER ehci_atmel_driver -#endif - -#ifdef CONFIG_USB_OCTEON_EHCI -#include "ehci-octeon.c" -#define PLATFORM_DRIVER ehci_octeon_driver -#endif - -#ifdef CONFIG_USB_CNS3XXX_EHCI -#include "ehci-cns3xxx.c" -#define PLATFORM_DRIVER cns3xxx_ehci_driver -#endif - -#ifdef CONFIG_ARCH_VT8500 -#include "ehci-vt8500.c" -#define PLATFORM_DRIVER vt8500_ehci_driver -#endif - -#ifdef CONFIG_PLAT_SPEAR -#include "ehci-spear.c" -#define PLATFORM_DRIVER spear_ehci_hcd_driver -#endif - -#ifdef CONFIG_USB_EHCI_MSM -#include "ehci-msm.c" -#define PLATFORM_DRIVER ehci_msm_driver -#endif - -#ifdef CONFIG_USB_EHCI_HCD_PMC_MSP -#include "ehci-pmcmsp.c" -#define PLATFORM_DRIVER ehci_hcd_msp_driver -#endif - -#ifdef CONFIG_USB_EHCI_TEGRA -#include "ehci-tegra.c" -#define PLATFORM_DRIVER tegra_ehci_driver -#endif - -#ifdef CONFIG_USB_EHCI_S5P -#include "ehci-s5p.c" -#define PLATFORM_DRIVER s5p_ehci_driver -#endif - -#ifdef CONFIG_USB_EHCI_ATH79 -#include "ehci-ath79.c" -#define PLATFORM_DRIVER ehci_ath79_driver -#endif - -#ifdef CONFIG_SPARC_LEON -#include "ehci-grlib.c" -#define PLATFORM_DRIVER ehci_grlib_driver -#endif - -#ifdef CONFIG_USB_PXA168_EHCI -#include "ehci-pxa168.c" -#define PLATFORM_DRIVER ehci_pxa168_driver -#endif - -#ifdef CONFIG_NLM_XLR -#include "ehci-xls.c" -#define PLATFORM_DRIVER ehci_xls_driver -#endif - -#if !defined(CONFIG_PCI) && !defined(PLATFORM_DRIVER) && \ - !defined(CONFIG_PPC_PS3) && !defined(CONFIG_USB_EHCI_HCD_PPC_OF) && \ - !defined(CONFIG_XPS_USB_HCD_XILINX) -#error "missing bus glue for ehci-hcd" -#endif - static int __init ehci_hcd_init(void) { int retval = 0; @@ -1304,11 +1193,9 @@ static int __init ehci_hcd_init(void) } #endif -#ifdef PLATFORM_DRIVER - retval = platform_driver_register(&PLATFORM_DRIVER); + retval = ehci_register_platforms(); if (retval < 0) goto clean0; -#endif retval = ehci_register_pci(); if (retval < 0) @@ -1335,10 +1222,8 @@ clean3: clean2: ehci_unregister_pci(); clean1: -#ifdef PLATFORM_DRIVER - platform_driver_unregister(&PLATFORM_DRIVER); + ehci_unregister_platforms(); clean0: -#endif #ifdef DEBUG debugfs_remove(ehci_debug_root); ehci_debug_root = NULL; @@ -1353,9 +1238,7 @@ static void __exit ehci_hcd_cleanup(void) { ehci_xilinx_of_unregister(); ehci_ppc_of_unregister(); -#ifdef PLATFORM_DRIVER - platform_driver_unregister(&PLATFORM_DRIVER); -#endif + ehci_unregister_platforms(); ehci_unregister_pci(); ehci_ps3_unregister(); #ifdef DEBUG diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h index bde996d..50cc09d 100644 --- a/drivers/usb/host/ehci.h +++ b/drivers/usb/host/ehci.h @@ -825,6 +825,9 @@ static inline int ehci_xilinx_of_register(void) { return 0; } static inline void ehci_xilinx_of_unregister(void) {}; #endif +int ehci_register_platforms(void); +void ehci_unregister_platforms(void); + /*-------------------------------------------------------------------------*/ #ifndef DEBUG -- 1.7.5.4 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html