On 03/21/2012 12:39 PM, Tomi Valkeinen wrote: > From 849c07b1fd3d9f23e8ed94436b6221f8652462c0 Mon Sep 17 00:00:00 2001 > From: Tomi Valkeinen <tomi.valkeinen@xxxxxx> > Date: Mon, 19 Mar 2012 15:05:02 +0200 > Subject: [PATCH] OMAPDSS: register dss drivers in module init > > We do the dss driver registration in a rather strange way: we have the > higher level omapdss driver, and we use that driver's probe function to > register the drivers for the rest of the dss devices. > > There doesn't seem to be any reason for that, and additionally the > soon-to-be-merged patch "ARM: OMAP: omap_device: remove > omap_device_parent" will break omapdss initialization with the current > registration model. > > This patch changes the registration for all drivers to happen at the > same place, in the init of the module. > > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@xxxxxx> Applied. Thanks, Florian Tobias Schandinat > --- > drivers/video/omap2/dss/core.c | 135 +++++++++++++++++++++++----------------- > 1 files changed, 77 insertions(+), 58 deletions(-) > > diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c > index 8613f86..e8a1207 100644 > --- a/drivers/video/omap2/dss/core.c > +++ b/drivers/video/omap2/dss/core.c > @@ -183,42 +183,6 @@ static int omap_dss_probe(struct platform_device *pdev) > dss_init_overlay_managers(pdev); > dss_init_overlays(pdev); > > - r = dss_init_platform_driver(); > - if (r) { > - DSSERR("Failed to initialize DSS platform driver\n"); > - goto err_dss; > - } > - > - r = dispc_init_platform_driver(); > - if (r) { > - DSSERR("Failed to initialize dispc platform driver\n"); > - goto err_dispc; > - } > - > - r = rfbi_init_platform_driver(); > - if (r) { > - DSSERR("Failed to initialize rfbi platform driver\n"); > - goto err_rfbi; > - } > - > - r = venc_init_platform_driver(); > - if (r) { > - DSSERR("Failed to initialize venc platform driver\n"); > - goto err_venc; > - } > - > - r = dsi_init_platform_driver(); > - if (r) { > - DSSERR("Failed to initialize DSI platform driver\n"); > - goto err_dsi; > - } > - > - r = hdmi_init_platform_driver(); > - if (r) { > - DSSERR("Failed to initialize hdmi\n"); > - goto err_hdmi; > - } > - > r = dss_initialize_debugfs(); > if (r) > goto err_debugfs; > @@ -246,18 +210,6 @@ static int omap_dss_probe(struct platform_device *pdev) > err_register: > dss_uninitialize_debugfs(); > err_debugfs: > - hdmi_uninit_platform_driver(); > -err_hdmi: > - dsi_uninit_platform_driver(); > -err_dsi: > - venc_uninit_platform_driver(); > -err_venc: > - dispc_uninit_platform_driver(); > -err_dispc: > - rfbi_uninit_platform_driver(); > -err_rfbi: > - dss_uninit_platform_driver(); > -err_dss: > > return r; > } > @@ -269,13 +221,6 @@ static int omap_dss_remove(struct platform_device *pdev) > > dss_uninitialize_debugfs(); > > - hdmi_uninit_platform_driver(); > - dsi_uninit_platform_driver(); > - venc_uninit_platform_driver(); > - rfbi_uninit_platform_driver(); > - dispc_uninit_platform_driver(); > - dss_uninit_platform_driver(); > - > dss_uninit_overlays(pdev); > dss_uninit_overlay_managers(pdev); > > @@ -525,6 +470,80 @@ static int omap_dss_bus_register(void) > > /* INIT */ > > +static int __init omap_dss_register_drivers(void) > +{ > + int r; > + > + r = platform_driver_register(&omap_dss_driver); > + if (r) > + return r; > + > + r = dss_init_platform_driver(); > + if (r) { > + DSSERR("Failed to initialize DSS platform driver\n"); > + goto err_dss; > + } > + > + r = dispc_init_platform_driver(); > + if (r) { > + DSSERR("Failed to initialize dispc platform driver\n"); > + goto err_dispc; > + } > + > + r = rfbi_init_platform_driver(); > + if (r) { > + DSSERR("Failed to initialize rfbi platform driver\n"); > + goto err_rfbi; > + } > + > + r = venc_init_platform_driver(); > + if (r) { > + DSSERR("Failed to initialize venc platform driver\n"); > + goto err_venc; > + } > + > + r = dsi_init_platform_driver(); > + if (r) { > + DSSERR("Failed to initialize DSI platform driver\n"); > + goto err_dsi; > + } > + > + r = hdmi_init_platform_driver(); > + if (r) { > + DSSERR("Failed to initialize hdmi\n"); > + goto err_hdmi; > + } > + > + return 0; > + > +err_hdmi: > + dsi_uninit_platform_driver(); > +err_dsi: > + venc_uninit_platform_driver(); > +err_venc: > + rfbi_uninit_platform_driver(); > +err_rfbi: > + dispc_uninit_platform_driver(); > +err_dispc: > + dss_uninit_platform_driver(); > +err_dss: > + platform_driver_unregister(&omap_dss_driver); > + > + return r; > +} > + > +static void __exit omap_dss_unregister_drivers(void) > +{ > + hdmi_uninit_platform_driver(); > + dsi_uninit_platform_driver(); > + venc_uninit_platform_driver(); > + rfbi_uninit_platform_driver(); > + dispc_uninit_platform_driver(); > + dss_uninit_platform_driver(); > + > + platform_driver_unregister(&omap_dss_driver); > +} > + > #ifdef CONFIG_OMAP2_DSS_MODULE > static void omap_dss_bus_unregister(void) > { > @@ -541,7 +560,7 @@ static int __init omap_dss_init(void) > if (r) > return r; > > - r = platform_driver_register(&omap_dss_driver); > + r = omap_dss_register_drivers(); > if (r) { > omap_dss_bus_unregister(); > return r; > @@ -562,7 +581,7 @@ static void __exit omap_dss_exit(void) > core.vdds_sdi_reg = NULL; > } > > - platform_driver_unregister(&omap_dss_driver); > + omap_dss_unregister_drivers(); > > omap_dss_bus_unregister(); > } > @@ -577,7 +596,7 @@ static int __init omap_dss_init(void) > > static int __init omap_dss_init2(void) > { > - return platform_driver_register(&omap_dss_driver); > + return omap_dss_register_drivers(); > } > > core_initcall(omap_dss_init); -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html