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. > > 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? > +MODULE_LICENSE("GPL v2"); Best regards, Krzysztof