drm: omapdrm: Simplify platform registration
authorAndrew F. Davis <afd@ti.com>
Tue, 5 Dec 2017 20:29:32 +0000 (14:29 -0600)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 19 Dec 2017 09:21:32 +0000 (11:21 +0200)
Currently, calls into each file are used to register the various
platform drivers. Change this to a table of pointers to platform_driver
structs to allow using platform_register_drivers.

Signed-off-by: Andrew F. Davis <afd@ti.com>
drivers/gpu/drm/omapdrm/dss/core.c
drivers/gpu/drm/omapdrm/dss/dispc.c
drivers/gpu/drm/omapdrm/dss/dsi.c
drivers/gpu/drm/omapdrm/dss/dss.c
drivers/gpu/drm/omapdrm/dss/dss.h
drivers/gpu/drm/omapdrm/dss/hdmi4.c
drivers/gpu/drm/omapdrm/dss/hdmi5.c
drivers/gpu/drm/omapdrm/dss/venc.c

index 8b84778138642d06adf121f9408b611f19f729d1..acef7ece5783367f8fe5ae40592e5787645e6447 100644 (file)
 #include "dss.h"
 
 /* INIT */
-static int (*dss_output_drv_reg_funcs[])(void) __initdata = {
-       dss_init_platform_driver,
-       dispc_init_platform_driver,
+static struct platform_driver * const omap_dss_drivers[] = {
+       &omap_dsshw_driver,
+       &omap_dispchw_driver,
 #ifdef CONFIG_OMAP2_DSS_DSI
-       dsi_init_platform_driver,
+       &omap_dsihw_driver,
 #endif
 #ifdef CONFIG_OMAP2_DSS_VENC
-       venc_init_platform_driver,
+       &omap_venchw_driver,
 #endif
 #ifdef CONFIG_OMAP4_DSS_HDMI
-       hdmi4_init_platform_driver,
+       &omapdss_hdmi4hw_driver,
 #endif
 #ifdef CONFIG_OMAP5_DSS_HDMI
-       hdmi5_init_platform_driver,
+       &omapdss_hdmi5hw_driver,
 #endif
 };
 
-static void (*dss_output_drv_unreg_funcs[])(void) = {
-#ifdef CONFIG_OMAP5_DSS_HDMI
-       hdmi5_uninit_platform_driver,
-#endif
-#ifdef CONFIG_OMAP4_DSS_HDMI
-       hdmi4_uninit_platform_driver,
-#endif
-#ifdef CONFIG_OMAP2_DSS_VENC
-       venc_uninit_platform_driver,
-#endif
-#ifdef CONFIG_OMAP2_DSS_DSI
-       dsi_uninit_platform_driver,
-#endif
-       dispc_uninit_platform_driver,
-       dss_uninit_platform_driver,
-};
-
 static struct platform_device *omap_drm_device;
 
 static int __init omap_dss_init(void)
 {
        int r;
-       int i;
 
-       for (i = 0; i < ARRAY_SIZE(dss_output_drv_reg_funcs); ++i) {
-               r = dss_output_drv_reg_funcs[i]();
-               if (r)
-                       goto err_reg;
-       }
+       r = platform_register_drivers(omap_dss_drivers,
+                                     ARRAY_SIZE(omap_dss_drivers));
+       if (r)
+               goto err_reg;
 
        omap_drm_device = platform_device_register_simple("omapdrm", 0, NULL, 0);
        if (IS_ERR(omap_drm_device)) {
@@ -84,22 +65,18 @@ static int __init omap_dss_init(void)
        return 0;
 
 err_reg:
-       for (i = ARRAY_SIZE(dss_output_drv_reg_funcs) - i;
-                       i < ARRAY_SIZE(dss_output_drv_reg_funcs);
-                       ++i)
-               dss_output_drv_unreg_funcs[i]();
+       platform_unregister_drivers(omap_dss_drivers,
+                                   ARRAY_SIZE(omap_dss_drivers));
 
        return r;
 }
 
 static void __exit omap_dss_exit(void)
 {
-       int i;
-
        platform_device_unregister(omap_drm_device);
 
-       for (i = 0; i < ARRAY_SIZE(dss_output_drv_unreg_funcs); ++i)
-               dss_output_drv_unreg_funcs[i]();
+       platform_unregister_drivers(omap_dss_drivers,
+                                   ARRAY_SIZE(omap_dss_drivers));
 }
 
 module_init(omap_dss_init);
index 34b4555d1223fd147a7d7e8a4d651a01380b8d3a..4e8f68efd169ee1d24649a38d662c2619cdce392 100644 (file)
@@ -4696,7 +4696,7 @@ static const struct dev_pm_ops dispc_pm_ops = {
        .runtime_resume = dispc_runtime_resume,
 };
 
-static struct platform_driver omap_dispchw_driver = {
+struct platform_driver omap_dispchw_driver = {
        .probe          = dispc_probe,
        .remove         = dispc_remove,
        .driver         = {
@@ -4706,13 +4706,3 @@ static struct platform_driver omap_dispchw_driver = {
                .suppress_bind_attrs = true,
        },
 };
-
-int __init dispc_init_platform_driver(void)
-{
-       return platform_driver_register(&omap_dispchw_driver);
-}
-
-void dispc_uninit_platform_driver(void)
-{
-       platform_driver_unregister(&omap_dispchw_driver);
-}
index e13d2d2d7e613503129238e6e9bb6760ea3810a7..80f1f3679a3c1a3278be74924e6644979a68a01d 100644 (file)
@@ -5658,7 +5658,7 @@ static const struct dev_pm_ops dsi_pm_ops = {
        .runtime_resume = dsi_runtime_resume,
 };
 
-static struct platform_driver omap_dsihw_driver = {
+struct platform_driver omap_dsihw_driver = {
        .probe          = dsi_probe,
        .remove         = dsi_remove,
        .driver         = {
@@ -5668,13 +5668,3 @@ static struct platform_driver omap_dsihw_driver = {
                .suppress_bind_attrs = true,
        },
 };
-
-int __init dsi_init_platform_driver(void)
-{
-       return platform_driver_register(&omap_dsihw_driver);
-}
-
-void dsi_uninit_platform_driver(void)
-{
-       platform_driver_unregister(&omap_dsihw_driver);
-}
index 2290792e1adc13c9971da659dcef91defbdc9033..04300b2da1b16e2af35b80217de103793c54c49d 100644 (file)
@@ -1534,7 +1534,7 @@ static const struct dev_pm_ops dss_pm_ops = {
        .runtime_resume = dss_runtime_resume,
 };
 
-static struct platform_driver omap_dsshw_driver = {
+struct platform_driver omap_dsshw_driver = {
        .probe          = dss_probe,
        .remove         = dss_remove,
        .shutdown       = dss_shutdown,
@@ -1545,13 +1545,3 @@ static struct platform_driver omap_dsshw_driver = {
                .suppress_bind_attrs = true,
        },
 };
-
-int __init dss_init_platform_driver(void)
-{
-       return platform_driver_register(&omap_dsshw_driver);
-}
-
-void dss_uninit_platform_driver(void)
-{
-       platform_driver_unregister(&omap_dsshw_driver);
-}
index 9bed809bd15c370ed04f7aae3793bbd209f34a68..6374e57ed9daa332bdb7b55d781813a076985580 100644 (file)
@@ -262,9 +262,6 @@ static inline int dss_debugfs_create_file(const char *name,
 }
 #endif /* CONFIG_OMAP2_DSS_DEBUGFS */
 
-int dss_init_platform_driver(void) __init;
-void dss_uninit_platform_driver(void);
-
 int dss_runtime_get(void);
 void dss_runtime_put(void);
 
@@ -326,9 +323,6 @@ static inline void sdi_uninit_port(struct device_node *port)
 struct dentry;
 struct file_operations;
 
-int dsi_init_platform_driver(void) __init;
-void dsi_uninit_platform_driver(void);
-
 void dsi_dump_clocks(struct seq_file *s);
 
 void dsi_irq_handler(void);
@@ -352,8 +346,6 @@ static inline void dpi_uninit_port(struct device_node *port)
 #endif
 
 /* DISPC */
-int dispc_init_platform_driver(void) __init;
-void dispc_uninit_platform_driver(void);
 void dispc_dump_clocks(struct seq_file *s);
 
 int dispc_runtime_get(void);
@@ -397,18 +389,6 @@ void dispc_wb_set_channel_in(enum dss_writeback_channel channel);
 int dispc_wb_setup(const struct omap_dss_writeback_info *wi,
                bool mem_to_mem, const struct videomode *vm);
 
-/* VENC */
-int venc_init_platform_driver(void) __init;
-void venc_uninit_platform_driver(void);
-
-/* HDMI */
-int hdmi4_init_platform_driver(void) __init;
-void hdmi4_uninit_platform_driver(void);
-
-int hdmi5_init_platform_driver(void) __init;
-void hdmi5_uninit_platform_driver(void);
-
-
 #ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS
 static inline void dss_collect_irq_stats(u32 irqstatus, unsigned *irq_arr)
 {
@@ -452,4 +432,19 @@ int dss_pll_write_config_type_b(struct dss_pll *pll,
                const struct dss_pll_clock_info *cinfo);
 int dss_pll_wait_reset_done(struct dss_pll *pll);
 
+extern struct platform_driver omap_dsshw_driver;
+extern struct platform_driver omap_dispchw_driver;
+#ifdef CONFIG_OMAP2_DSS_DSI
+extern struct platform_driver omap_dsihw_driver;
+#endif
+#ifdef CONFIG_OMAP2_DSS_VENC
+extern struct platform_driver omap_venchw_driver;
+#endif
+#ifdef CONFIG_OMAP4_DSS_HDMI
+extern struct platform_driver omapdss_hdmi4hw_driver;
+#endif
+#ifdef CONFIG_OMAP5_DSS_HDMI
+extern struct platform_driver omapdss_hdmi5hw_driver;
+#endif
+
 #endif
index 1f10123400d57a30f9744a850d56975b2b0e21a6..bf914f2ac99e7ee8be454e40a95c7316963bd67e 100644 (file)
@@ -845,7 +845,7 @@ static const struct of_device_id hdmi_of_match[] = {
        {},
 };
 
-static struct platform_driver omapdss_hdmihw_driver = {
+struct platform_driver omapdss_hdmi4hw_driver = {
        .probe          = hdmi4_probe,
        .remove         = hdmi4_remove,
        .driver         = {
@@ -855,13 +855,3 @@ static struct platform_driver omapdss_hdmihw_driver = {
                .suppress_bind_attrs = true,
        },
 };
-
-int __init hdmi4_init_platform_driver(void)
-{
-       return platform_driver_register(&omapdss_hdmihw_driver);
-}
-
-void hdmi4_uninit_platform_driver(void)
-{
-       platform_driver_unregister(&omapdss_hdmihw_driver);
-}
index 7091197da940be0804cf674ebf7acfd22c905581..689cda41858b61a6a663cde779452d1cbcd7980f 100644 (file)
@@ -841,7 +841,7 @@ static const struct of_device_id hdmi_of_match[] = {
        {},
 };
 
-static struct platform_driver omapdss_hdmihw_driver = {
+struct platform_driver omapdss_hdmi5hw_driver = {
        .probe          = hdmi5_probe,
        .remove         = hdmi5_remove,
        .driver         = {
@@ -851,13 +851,3 @@ static struct platform_driver omapdss_hdmihw_driver = {
                .suppress_bind_attrs = true,
        },
 };
-
-int __init hdmi5_init_platform_driver(void)
-{
-       return platform_driver_register(&omapdss_hdmihw_driver);
-}
-
-void hdmi5_uninit_platform_driver(void)
-{
-       platform_driver_unregister(&omapdss_hdmihw_driver);
-}
index b3e0e5fba24de7d462bece8d9ec01a1b5eb8e03e..6de9d734ddb98f235e16f18564596cb868823713 100644 (file)
@@ -984,7 +984,7 @@ static const struct of_device_id venc_of_match[] = {
        {},
 };
 
-static struct platform_driver omap_venchw_driver = {
+struct platform_driver omap_venchw_driver = {
        .probe          = venc_probe,
        .remove         = venc_remove,
        .driver         = {
@@ -994,13 +994,3 @@ static struct platform_driver omap_venchw_driver = {
                .suppress_bind_attrs = true,
        },
 };
-
-int __init venc_init_platform_driver(void)
-{
-       return platform_driver_register(&omap_venchw_driver);
-}
-
-void venc_uninit_platform_driver(void)
-{
-       platform_driver_unregister(&omap_venchw_driver);
-}