Commit 05e1d606 authored by Tomi Valkeinen's avatar Tomi Valkeinen

OMAP: DSS2: check for manager when enabling display

None of the DSS interface drivers check if an overlay manager is
connected to the display when the display is being enabled. This leads
to null pointer crash if the display has no manager.

This patch checks for the manager and returns an error if it is null.
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent 79e4424f
...@@ -176,6 +176,11 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev) ...@@ -176,6 +176,11 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
{ {
int r; int r;
if (dssdev->manager == NULL) {
DSSERR("failed to enable display: no manager\n");
return -ENODEV;
}
r = omap_dss_start_device(dssdev); r = omap_dss_start_device(dssdev);
if (r) { if (r) {
DSSERR("failed to start device\n"); DSSERR("failed to start device\n");
......
...@@ -4211,6 +4211,12 @@ int omapdss_dsi_display_enable(struct omap_dss_device *dssdev) ...@@ -4211,6 +4211,12 @@ int omapdss_dsi_display_enable(struct omap_dss_device *dssdev)
mutex_lock(&dsi->lock); mutex_lock(&dsi->lock);
if (dssdev->manager == NULL) {
DSSERR("failed to enable display: no manager\n");
r = -ENODEV;
goto err_start_dev;
}
r = omap_dss_start_device(dssdev); r = omap_dss_start_device(dssdev);
if (r) { if (r) {
DSSERR("failed to start device\n"); DSSERR("failed to start device\n");
......
...@@ -1231,6 +1231,12 @@ int omapdss_hdmi_display_enable(struct omap_dss_device *dssdev) ...@@ -1231,6 +1231,12 @@ int omapdss_hdmi_display_enable(struct omap_dss_device *dssdev)
mutex_lock(&hdmi.lock); mutex_lock(&hdmi.lock);
if (dssdev->manager == NULL) {
DSSERR("failed to enable display: no manager\n");
r = -ENODEV;
goto err0;
}
r = omap_dss_start_device(dssdev); r = omap_dss_start_device(dssdev);
if (r) { if (r) {
DSSERR("failed to start device\n"); DSSERR("failed to start device\n");
......
...@@ -860,6 +860,11 @@ int omapdss_rfbi_display_enable(struct omap_dss_device *dssdev) ...@@ -860,6 +860,11 @@ int omapdss_rfbi_display_enable(struct omap_dss_device *dssdev)
{ {
int r; int r;
if (dssdev->manager == NULL) {
DSSERR("failed to enable display: no manager\n");
return -ENODEV;
}
r = rfbi_runtime_get(); r = rfbi_runtime_get();
if (r) if (r)
return r; return r;
......
...@@ -55,6 +55,11 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev) ...@@ -55,6 +55,11 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
unsigned long pck; unsigned long pck;
int r; int r;
if (dssdev->manager == NULL) {
DSSERR("failed to enable display: no manager\n");
return -ENODEV;
}
r = omap_dss_start_device(dssdev); r = omap_dss_start_device(dssdev);
if (r) { if (r) {
DSSERR("failed to start device\n"); DSSERR("failed to start device\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment