OMAPDSS: only probe pdata if there's one

omapdss output drivers always read the platform data. This crashes when
there's no platform data when using DT.

Add a check to read the platform data only if it exists.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
Tomi Valkeinen 2013-03-14 15:47:29 +02:00
parent 0a20012605
commit c6ca5b2201
6 changed files with 46 additions and 31 deletions

View File

@ -706,13 +706,17 @@ static int omap_dpi_probe(struct platform_device *pdev)
dpi_init_output(pdev);
r = dpi_probe_pdata(pdev);
if (r) {
dpi_uninit_output(pdev);
return r;
if (pdev->dev.platform_data) {
r = dpi_probe_pdata(pdev);
if (r)
goto err_probe;
}
return 0;
err_probe:
dpi_uninit_output(pdev);
return r;
}
static int __exit omap_dpi_remove(struct platform_device *pdev)

View File

@ -5563,12 +5563,10 @@ static int omap_dsihw_probe(struct platform_device *dsidev)
dsi_init_output(dsidev);
r = dsi_probe_pdata(dsidev);
if (r) {
dsi_runtime_put(dsidev);
dsi_uninit_output(dsidev);
pm_runtime_disable(&dsidev->dev);
return r;
if (dsidev->dev.platform_data) {
r = dsi_probe_pdata(dsidev);
if (r)
goto err_probe;
}
dsi_runtime_put(dsidev);
@ -5586,6 +5584,9 @@ static int omap_dsihw_probe(struct platform_device *dsidev)
#endif
return 0;
err_probe:
dsi_runtime_put(dsidev);
dsi_uninit_output(dsidev);
err_runtime_get:
pm_runtime_disable(&dsidev->dev);
return r;

View File

@ -1094,15 +1094,19 @@ static int omapdss_hdmihw_probe(struct platform_device *pdev)
dss_debugfs_create_file("hdmi", hdmi_dump_regs);
r = hdmi_probe_pdata(pdev);
if (r) {
hdmi_panel_exit();
hdmi_uninit_output(pdev);
pm_runtime_disable(&pdev->dev);
return r;
if (pdev->dev.platform_data) {
r = hdmi_probe_pdata(pdev);
if (r)
goto err_probe;
}
return 0;
err_probe:
hdmi_panel_exit();
hdmi_uninit_output(pdev);
pm_runtime_disable(&pdev->dev);
return r;
}
static int __exit hdmi_remove_child(struct device *dev, void *data)

View File

@ -1093,15 +1093,16 @@ static int omap_rfbihw_probe(struct platform_device *pdev)
rfbi_init_output(pdev);
r = rfbi_probe_pdata(pdev);
if (r) {
rfbi_uninit_output(pdev);
pm_runtime_disable(&pdev->dev);
return r;
if (pdev->dev.platform_data) {
r = rfbi_probe_pdata(pdev);
if (r)
goto err_probe;
}
return 0;
err_probe:
rfbi_uninit_output(pdev);
err_runtime_get:
pm_runtime_disable(&pdev->dev);
return r;

View File

@ -365,13 +365,17 @@ static int omap_sdi_probe(struct platform_device *pdev)
sdi_init_output(pdev);
r = sdi_probe_pdata(pdev);
if (r) {
sdi_uninit_output(pdev);
return r;
if (pdev->dev.platform_data) {
r = sdi_probe_pdata(pdev);
if (r)
goto err_probe;
}
return 0;
err_probe:
sdi_uninit_output(pdev);
return r;
}
static int __exit omap_sdi_remove(struct platform_device *pdev)

View File

@ -866,16 +866,17 @@ static int omap_venchw_probe(struct platform_device *pdev)
venc_init_output(pdev);
r = venc_probe_pdata(pdev);
if (r) {
venc_panel_exit();
venc_uninit_output(pdev);
pm_runtime_disable(&pdev->dev);
return r;
if (pdev->dev.platform_data) {
r = venc_probe_pdata(pdev);
if (r)
goto err_probe;
}
return 0;
err_probe:
venc_panel_exit();
venc_uninit_output(pdev);
err_panel_init:
err_runtime_get:
pm_runtime_disable(&pdev->dev);