diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c index db45e6abe311..77fbd99295dc 100644 --- a/drivers/video/omap2/dss/core.c +++ b/drivers/video/omap2/dss/core.c @@ -536,6 +536,18 @@ static int __init omap_dss_register_drivers(void) goto err_dispc; } + r = dpi_init_platform_driver(); + if (r) { + DSSERR("Failed to initialize dpi platform driver\n"); + goto err_dpi; + } + + r = sdi_init_platform_driver(); + if (r) { + DSSERR("Failed to initialize sdi platform driver\n"); + goto err_sdi; + } + r = rfbi_init_platform_driver(); if (r) { DSSERR("Failed to initialize rfbi platform driver\n"); @@ -569,6 +581,10 @@ err_dsi: err_venc: rfbi_uninit_platform_driver(); err_rfbi: + sdi_uninit_platform_driver(); +err_sdi: + dpi_uninit_platform_driver(); +err_dpi: dispc_uninit_platform_driver(); err_dispc: dss_uninit_platform_driver(); @@ -584,6 +600,8 @@ static void __exit omap_dss_unregister_drivers(void) dsi_uninit_platform_driver(); venc_uninit_platform_driver(); rfbi_uninit_platform_driver(); + sdi_uninit_platform_driver(); + dpi_uninit_platform_driver(); dispc_uninit_platform_driver(); dss_uninit_platform_driver(); diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c index d6e8fe776152..79d242a42607 100644 --- a/drivers/video/omap2/dss/dpi.c +++ b/drivers/video/omap2/dss/dpi.c @@ -379,12 +379,31 @@ int dpi_init_display(struct omap_dss_device *dssdev) return 0; } -int dpi_init(void) +static int omap_dpi_probe(struct platform_device *pdev) { return 0; } -void dpi_exit(void) +static int omap_dpi_remove(struct platform_device *pdev) { + return 0; } +static struct platform_driver omap_dpi_driver = { + .probe = omap_dpi_probe, + .remove = omap_dpi_remove, + .driver = { + .name = "omapdss_dpi", + .owner = THIS_MODULE, + }, +}; + +int dpi_init_platform_driver(void) +{ + return platform_driver_register(&omap_dpi_driver); +} + +void dpi_uninit_platform_driver(void) +{ + platform_driver_unregister(&omap_dpi_driver); +} diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c index c849d8bd5256..7a7ddd8fbf5e 100644 --- a/drivers/video/omap2/dss/dss.c +++ b/drivers/video/omap2/dss/dss.c @@ -786,18 +786,6 @@ static int omap_dsshw_probe(struct platform_device *pdev) dss.lcd_clk_source[0] = OMAP_DSS_CLK_SRC_FCK; dss.lcd_clk_source[1] = OMAP_DSS_CLK_SRC_FCK; - r = dpi_init(); - if (r) { - DSSERR("Failed to initialize DPI\n"); - goto err_dpi; - } - - r = sdi_init(); - if (r) { - DSSERR("Failed to initialize SDI\n"); - goto err_sdi; - } - rev = dss_read_reg(DSS_REVISION); printk(KERN_INFO "OMAP DSS rev %d.%d\n", FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0)); @@ -805,10 +793,7 @@ static int omap_dsshw_probe(struct platform_device *pdev) dss_runtime_put(); return 0; -err_sdi: - dpi_exit(); -err_dpi: - dss_runtime_put(); + err_runtime_get: pm_runtime_disable(&pdev->dev); dss_put_clocks(); @@ -817,9 +802,6 @@ err_runtime_get: static int omap_dsshw_remove(struct platform_device *pdev) { - dpi_exit(); - sdi_exit(); - pm_runtime_disable(&pdev->dev); dss_put_clocks(); diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h index 848fc9cd65d4..5496134c280b 100644 --- a/drivers/video/omap2/dss/dss.h +++ b/drivers/video/omap2/dss/dss.h @@ -272,17 +272,12 @@ int dss_calc_clock_div(bool is_tft, unsigned long req_pck, /* SDI */ #ifdef CONFIG_OMAP2_DSS_SDI -int sdi_init(void); -void sdi_exit(void); +int sdi_init_platform_driver(void); +void sdi_uninit_platform_driver(void); int sdi_init_display(struct omap_dss_device *display); #else -static inline int sdi_init(void) -{ - return 0; -} -static inline void sdi_exit(void) -{ -} +static inline int sdi_init_platform_driver(void) { return 0; } +static inline void sdi_uninit_platform_driver(void) { } #endif /* DSI */ @@ -384,17 +379,12 @@ static inline struct platform_device *dsi_get_dsidev_from_id(int module) /* DPI */ #ifdef CONFIG_OMAP2_DSS_DPI -int dpi_init(void); -void dpi_exit(void); +int dpi_init_platform_driver(void); +void dpi_uninit_platform_driver(void); int dpi_init_display(struct omap_dss_device *dssdev); #else -static inline int dpi_init(void) -{ - return 0; -} -static inline void dpi_exit(void) -{ -} +static inline int dpi_init_platform_driver(void) { return 0; } +static inline void dpi_uninit_platform_driver(void) { } #endif /* DISPC */ diff --git a/drivers/video/omap2/dss/sdi.c b/drivers/video/omap2/dss/sdi.c index 67fbe7cee412..4ae2d8f55048 100644 --- a/drivers/video/omap2/dss/sdi.c +++ b/drivers/video/omap2/dss/sdi.c @@ -24,6 +24,7 @@ #include #include #include +#include #include