提交 c6ca5b22 编写于 作者: T Tomi Valkeinen

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: NTomi Valkeinen <tomi.valkeinen@ti.com>
上级 0a200126
......@@ -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)
......
......@@ -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;
......
......@@ -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)
......
......@@ -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;
......
......@@ -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)
......
......@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册