Commit 79ddb2f0 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Tomi Valkeinen

drm/omap: dss: Move connection checks to omapdss_device_(dis)connect

When a DSS output is (dis)connected the omapdss_output_(un)set_device()
function performs a sanity check to ensure that the output isn't already
(dis)connected. The check is unnecessary as those situations should
never happen, but can nonetheless be useful to catch driver bugs. To
prepare for removal of the omapdss_output_(un)set_device() functions
move the connection check to the omapdss_device_connect() function. The
omapdss_device_disconnect() already contains a corresponding check.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarSebastian Reichel <sebastian.reichel@collabora.co.uk>
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent 511afb44
...@@ -208,6 +208,7 @@ int omapdss_device_connect(struct dss_device *dss, ...@@ -208,6 +208,7 @@ int omapdss_device_connect(struct dss_device *dss,
} }
if (src) { if (src) {
WARN_ON(src->dst);
dst->src = src; dst->src = src;
src->dst = dst; src->dst = dst;
} }
......
...@@ -29,61 +29,36 @@ static DEFINE_MUTEX(output_lock); ...@@ -29,61 +29,36 @@ static DEFINE_MUTEX(output_lock);
int omapdss_output_set_device(struct omap_dss_device *out, int omapdss_output_set_device(struct omap_dss_device *out,
struct omap_dss_device *dssdev) struct omap_dss_device *dssdev)
{ {
int r; int r = 0;
mutex_lock(&output_lock); mutex_lock(&output_lock);
if (out->dst) {
dev_err(out->dev,
"output already has device %s connected to it\n",
out->dst->name);
r = -EINVAL;
goto err;
}
if (out->output_type != dssdev->type) { if (out->output_type != dssdev->type) {
dev_err(out->dev, "output type and display type don't match\n"); dev_err(out->dev, "output type and display type don't match\n");
r = -EINVAL; r = -EINVAL;
goto err;
} }
mutex_unlock(&output_lock); mutex_unlock(&output_lock);
return 0;
err:
mutex_unlock(&output_lock);
return r; return r;
} }
EXPORT_SYMBOL(omapdss_output_set_device); EXPORT_SYMBOL(omapdss_output_set_device);
int omapdss_output_unset_device(struct omap_dss_device *out) int omapdss_output_unset_device(struct omap_dss_device *out)
{ {
int r; int r = 0;
mutex_lock(&output_lock); mutex_lock(&output_lock);
if (!out->dst) {
dev_err(out->dev,
"output doesn't have a device connected to it\n");
r = -EINVAL;
goto err;
}
if (out->dst->state != OMAP_DSS_DISPLAY_DISABLED) { if (out->dst->state != OMAP_DSS_DISPLAY_DISABLED) {
dev_err(out->dev, dev_err(out->dev,
"device %s is not disabled, cannot unset device\n", "device %s is not disabled, cannot unset device\n",
out->dst->name); out->dst->name);
r = -EINVAL; r = -EINVAL;
goto err;
} }
mutex_unlock(&output_lock); mutex_unlock(&output_lock);
return 0;
err:
mutex_unlock(&output_lock);
return r; return r;
} }
EXPORT_SYMBOL(omapdss_output_unset_device); EXPORT_SYMBOL(omapdss_output_unset_device);
......
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