From d66c36a3ee79747e300ac68276ca1496b567df68 Mon Sep 17 00:00:00 2001 From: "Andrew F. Davis" Date: Tue, 5 Dec 2017 14:29:32 -0600 Subject: [PATCH] drm: omapdrm: Simplify platform registration 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 --- drivers/gpu/drm/omapdrm/dss/core.c | 53 ++++++++--------------------- drivers/gpu/drm/omapdrm/dss/dispc.c | 12 +------ drivers/gpu/drm/omapdrm/dss/dsi.c | 12 +------ drivers/gpu/drm/omapdrm/dss/dss.c | 12 +------ drivers/gpu/drm/omapdrm/dss/dss.h | 35 ++++++++----------- drivers/gpu/drm/omapdrm/dss/hdmi4.c | 12 +------ drivers/gpu/drm/omapdrm/dss/hdmi5.c | 12 +------ drivers/gpu/drm/omapdrm/dss/venc.c | 12 +------ 8 files changed, 36 insertions(+), 124 deletions(-) diff --git a/drivers/gpu/drm/omapdrm/dss/core.c b/drivers/gpu/drm/omapdrm/dss/core.c index 8b8477813864..acef7ece5783 100644 --- a/drivers/gpu/drm/omapdrm/dss/core.c +++ b/drivers/gpu/drm/omapdrm/dss/core.c @@ -28,52 +28,33 @@ #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); diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/drm/omapdrm/dss/dispc.c index 34b4555d1223..4e8f68efd169 100644 --- a/drivers/gpu/drm/omapdrm/dss/dispc.c +++ b/drivers/gpu/drm/omapdrm/dss/dispc.c @@ -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); -} diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c index e13d2d2d7e61..80f1f3679a3c 100644 --- a/drivers/gpu/drm/omapdrm/dss/dsi.c +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c @@ -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); -} diff --git a/drivers/gpu/drm/omapdrm/dss/dss.c b/drivers/gpu/drm/omapdrm/dss/dss.c index 2290792e1adc..04300b2da1b1 100644 --- a/drivers/gpu/drm/omapdrm/dss/dss.c +++ b/drivers/gpu/drm/omapdrm/dss/dss.c @@ -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); -} diff --git a/drivers/gpu/drm/omapdrm/dss/dss.h b/drivers/gpu/drm/omapdrm/dss/dss.h index 9bed809bd15c..6374e57ed9da 100644 --- a/drivers/gpu/drm/omapdrm/dss/dss.h +++ b/drivers/gpu/drm/omapdrm/dss/dss.h @@ -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 diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c index 1f10123400d5..bf914f2ac99e 100644 --- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c @@ -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); -} diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c index 7091197da940..689cda41858b 100644 --- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c +++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c @@ -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); -} diff --git a/drivers/gpu/drm/omapdrm/dss/venc.c b/drivers/gpu/drm/omapdrm/dss/venc.c index b3e0e5fba24d..6de9d734ddb9 100644 --- a/drivers/gpu/drm/omapdrm/dss/venc.c +++ b/drivers/gpu/drm/omapdrm/dss/venc.c @@ -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); -} -- 2.30.2