drm/omap: Remove connection checks from display .enable() and .remove()
The displays (connectors, panels and encoders) return an error from their .enable() handler when the dss device is not connected. They also disconnect the dss device explicitly from their .remove() handler if it is still connected. Those safety checks are not needed: - The .enable() handler is called from code paths that access the dss devices chain from the display device, which is set to NULL when the device isn't connected. - The .remove() handler can only be called when unloading the module as the driver has the suppress_bind_attrs attribute set, and a reference to the module is taken when constructing the dss devices chain, so the module can only be unloaded when the dss device is disconnected. Remove the safety checks. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com> Tested-by: Sebastian Reichel <sebastian.reichel@collabora.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
parent
f8a8eabb27
commit
b49a2139ba
|
@ -49,9 +49,6 @@ static int opa362_enable(struct omap_dss_device *dssdev)
|
||||||
|
|
||||||
dev_dbg(dssdev->dev, "enable\n");
|
dev_dbg(dssdev->dev, "enable\n");
|
||||||
|
|
||||||
if (!omapdss_device_is_connected(dssdev))
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
if (omapdss_device_is_enabled(dssdev))
|
if (omapdss_device_is_enabled(dssdev))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -145,10 +142,6 @@ static int __exit opa362_remove(struct platform_device *pdev)
|
||||||
if (omapdss_device_is_enabled(dssdev))
|
if (omapdss_device_is_enabled(dssdev))
|
||||||
opa362_disable(dssdev);
|
opa362_disable(dssdev);
|
||||||
|
|
||||||
WARN_ON(omapdss_device_is_connected(dssdev));
|
|
||||||
if (omapdss_device_is_connected(dssdev))
|
|
||||||
omapdss_device_disconnect(NULL, dssdev);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,9 +42,6 @@ static int tfp410_enable(struct omap_dss_device *dssdev)
|
||||||
struct omap_dss_device *src = dssdev->src;
|
struct omap_dss_device *src = dssdev->src;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (!omapdss_device_is_connected(dssdev))
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
if (omapdss_device_is_enabled(dssdev))
|
if (omapdss_device_is_enabled(dssdev))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -139,10 +136,6 @@ static int __exit tfp410_remove(struct platform_device *pdev)
|
||||||
if (omapdss_device_is_enabled(dssdev))
|
if (omapdss_device_is_enabled(dssdev))
|
||||||
tfp410_disable(dssdev);
|
tfp410_disable(dssdev);
|
||||||
|
|
||||||
WARN_ON(omapdss_device_is_connected(dssdev));
|
|
||||||
if (omapdss_device_is_connected(dssdev))
|
|
||||||
omapdss_device_disconnect(NULL, dssdev);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -229,10 +229,6 @@ static int __exit tpd_remove(struct platform_device *pdev)
|
||||||
if (omapdss_device_is_enabled(dssdev))
|
if (omapdss_device_is_enabled(dssdev))
|
||||||
tpd_disable(dssdev);
|
tpd_disable(dssdev);
|
||||||
|
|
||||||
WARN_ON(omapdss_device_is_connected(dssdev));
|
|
||||||
if (omapdss_device_is_connected(dssdev))
|
|
||||||
omapdss_device_disconnect(NULL, dssdev);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -185,6 +185,11 @@ struct omap_dss_device *omapdss_device_get_next(struct omap_dss_device *from,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(omapdss_device_get_next);
|
EXPORT_SYMBOL(omapdss_device_get_next);
|
||||||
|
|
||||||
|
static bool omapdss_device_is_connected(struct omap_dss_device *dssdev)
|
||||||
|
{
|
||||||
|
return dssdev->src;
|
||||||
|
}
|
||||||
|
|
||||||
int omapdss_device_connect(struct dss_device *dss,
|
int omapdss_device_connect(struct dss_device *dss,
|
||||||
struct omap_dss_device *src,
|
struct omap_dss_device *src,
|
||||||
struct omap_dss_device *dst)
|
struct omap_dss_device *dst)
|
||||||
|
|
|
@ -505,11 +505,6 @@ int omap_dispc_unregister_isr(omap_dispc_isr_t isr, void *arg, u32 mask);
|
||||||
int omapdss_compat_init(void);
|
int omapdss_compat_init(void);
|
||||||
void omapdss_compat_uninit(void);
|
void omapdss_compat_uninit(void);
|
||||||
|
|
||||||
static inline bool omapdss_device_is_connected(struct omap_dss_device *dssdev)
|
|
||||||
{
|
|
||||||
return dssdev->src;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool omapdss_device_is_enabled(struct omap_dss_device *dssdev)
|
static inline bool omapdss_device_is_enabled(struct omap_dss_device *dssdev)
|
||||||
{
|
{
|
||||||
return dssdev->state == OMAP_DSS_DISPLAY_ACTIVE;
|
return dssdev->state == OMAP_DSS_DISPLAY_ACTIVE;
|
||||||
|
|
|
@ -168,24 +168,17 @@ static void omap_encoder_enable(struct drm_encoder *encoder)
|
||||||
|
|
||||||
dev_dbg(dev->dev, "enable(%s)\n", dssdev->name);
|
dev_dbg(dev->dev, "enable(%s)\n", dssdev->name);
|
||||||
|
|
||||||
if (!omapdss_device_is_connected(dssdev)) {
|
|
||||||
r = -ENODEV;
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (omapdss_device_is_enabled(dssdev))
|
if (omapdss_device_is_enabled(dssdev))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
r = dssdev->ops->enable(dssdev);
|
r = dssdev->ops->enable(dssdev);
|
||||||
if (r)
|
if (r) {
|
||||||
goto error;
|
dev_err(dev->dev, "Failed to enable display '%s': %d\n",
|
||||||
|
dssdev->name, r);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
|
dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
|
||||||
return;
|
|
||||||
|
|
||||||
error:
|
|
||||||
dev_err(dev->dev, "Failed to enable display '%s': %d\n",
|
|
||||||
dssdev->name, r);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int omap_encoder_atomic_check(struct drm_encoder *encoder,
|
static int omap_encoder_atomic_check(struct drm_encoder *encoder,
|
||||||
|
|
Loading…
Reference in New Issue