Hi Krzysztof, On 28/03/2022 16:11, Krzysztof Kozlowski wrote: > On 28/03/2022 13:13, Roger Quadros wrote: >> Allow OMAP_GPMC to be built as a module. >> >> Remove redundant of_match_node() call before >> of_platform_default_populate() as the latter takes >> care of matching with of_default_bus_match_table. > > Split this part to separate commit, please. It does not look related to > making it a module. Actually it is related. Without that change build fails as it cannot find symbol 'of_default_bus_match_table' Maybe I'll mention it in commit log. > >> >> Move compatible match table to the end where it is usually expected. >> >> Signed-off-by: Roger Quadros <rogerq@xxxxxxxxxx> >> --- >> drivers/memory/Kconfig | 2 +- >> drivers/memory/omap-gpmc.c | 44 +++++++++++++++++++++----------------- >> 2 files changed, 25 insertions(+), 21 deletions(-) >> >> diff --git a/drivers/memory/Kconfig b/drivers/memory/Kconfig >> index da2af9c38fe3..4debd4b2c8da 100644 >> --- a/drivers/memory/Kconfig >> +++ b/drivers/memory/Kconfig >> @@ -103,7 +103,7 @@ config TI_EMIF >> temperature changes >> >> config OMAP_GPMC >> - bool "Texas Instruments OMAP SoC GPMC driver" >> + tristate "Texas Instruments OMAP SoC GPMC driver" >> depends on OF_ADDRESS || COMPILE_TEST >> select GPIOLIB >> help >> diff --git a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c >> index ed11887c1b7c..6fdb76cc3bc9 100644 >> --- a/drivers/memory/omap-gpmc.c >> +++ b/drivers/memory/omap-gpmc.c >> @@ -12,6 +12,7 @@ >> #include <linux/cpu_pm.h> >> #include <linux/irq.h> >> #include <linux/kernel.h> >> +#include <linux/module.h> >> #include <linux/init.h> >> #include <linux/err.h> >> #include <linux/clk.h> >> @@ -1889,16 +1890,6 @@ int gpmc_cs_program_settings(int cs, struct gpmc_settings *p) >> } >> >> #ifdef CONFIG_OF >> -static const struct of_device_id gpmc_dt_ids[] = { >> - { .compatible = "ti,omap2420-gpmc" }, >> - { .compatible = "ti,omap2430-gpmc" }, >> - { .compatible = "ti,omap3430-gpmc" }, /* omap3430 & omap3630 */ >> - { .compatible = "ti,omap4430-gpmc" }, /* omap4430 & omap4460 & omap543x */ >> - { .compatible = "ti,am3352-gpmc" }, /* am335x devices */ >> - { .compatible = "ti,am64-gpmc" }, >> - { } >> -}; >> - >> static void gpmc_cs_set_name(int cs, const char *name) >> { >> struct gpmc_cs_data *gpmc = &gpmc_cs[cs]; >> @@ -2257,11 +2248,9 @@ static int gpmc_probe_generic_child(struct platform_device *pdev, >> if (!of_platform_device_create(child, NULL, &pdev->dev)) >> goto err_child_fail; >> >> - /* is child a common bus? */ >> - if (of_match_node(of_default_bus_match_table, child)) >> - /* create children and other common bus children */ >> - if (of_platform_default_populate(child, NULL, &pdev->dev)) >> - goto err_child_fail; >> + /* create children and other common bus children */ >> + if (of_platform_default_populate(child, NULL, &pdev->dev)) >> + goto err_child_fail; >> >> return 0; >> >> @@ -2278,6 +2267,8 @@ static int gpmc_probe_generic_child(struct platform_device *pdev, >> return ret; >> } >> >> +static const struct of_device_id gpmc_dt_ids[]; >> + >> static int gpmc_probe_dt(struct platform_device *pdev) >> { >> int ret; >> @@ -2644,6 +2635,19 @@ static int gpmc_resume(struct device *dev) >> >> static SIMPLE_DEV_PM_OPS(gpmc_pm_ops, gpmc_suspend, gpmc_resume); >> >> +#ifdef CONFIG_OF >> +static const struct of_device_id gpmc_dt_ids[] = { >> + { .compatible = "ti,omap2420-gpmc" }, >> + { .compatible = "ti,omap2430-gpmc" }, >> + { .compatible = "ti,omap3430-gpmc" }, /* omap3430 & omap3630 */ >> + { .compatible = "ti,omap4430-gpmc" }, /* omap4430 & omap4460 & omap543x */ >> + { .compatible = "ti,am3352-gpmc" }, /* am335x devices */ >> + { .compatible = "ti,am64-gpmc" }, >> + { } >> +}; >> +MODULE_DEVICE_TABLE(of, gpmc_dt_ids); >> +#endif >> + >> static struct platform_driver gpmc_driver = { >> .probe = gpmc_probe, >> .remove = gpmc_remove, >> @@ -2654,8 +2658,8 @@ static struct platform_driver gpmc_driver = { >> }, >> }; >> >> -static __init int gpmc_init(void) >> -{ >> - return platform_driver_register(&gpmc_driver); >> -} >> -postcore_initcall(gpmc_init); >> +module_platform_driver(gpmc_driver); >> + >> +MODULE_DESCRIPTION("Texas Instruments GPMC driver"); >> +MODULE_ALIAS("platform:" DEVICE_NAME); > > Why do you need this alias? Not required. I'll remove it. > >> +MODULE_LICENSE("GPL v2"); > > > Best regards, > Krzysztof -- cheers, -roger