Commit 3be0f15b authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Tomi Valkeinen

drm/omap: dss: Merge two disconnection helpers

To simplify the pipeline disconnection handling merge the
omapdss_device_disconnect() and omapdss_output_unset_device() functions.
The device state check is now called for every device in the pipeline,
extending this sanity check coverage.

There is no need to return an error from omapdss_device_disconnect()
when the check fails, as omapdss_output_unset_device() used to do, given
that we can't prevent disconnection due to device unbinding (the return
value of omapdss_output_unset_device() is never checked in the current
code for that reason).
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 71316556
...@@ -235,6 +235,8 @@ void omapdss_device_disconnect(struct omap_dss_device *src, ...@@ -235,6 +235,8 @@ void omapdss_device_disconnect(struct omap_dss_device *src,
src->dst = NULL; src->dst = NULL;
} }
WARN_ON(dst->state != OMAP_DSS_DISPLAY_DISABLED);
if (dst->driver) if (dst->driver)
dst->driver->disconnect(src, dst); dst->driver->disconnect(src, dst);
else else
......
...@@ -633,7 +633,6 @@ static void dpi_disconnect(struct omap_dss_device *src, ...@@ -633,7 +633,6 @@ static void dpi_disconnect(struct omap_dss_device *src,
struct omap_dss_device *dst) struct omap_dss_device *dst)
{ {
omapdss_device_disconnect(dst, dst->next); omapdss_device_disconnect(dst, dst->next);
omapdss_output_unset_device(dst);
dss_mgr_disconnect(dst); dss_mgr_disconnect(dst);
} }
......
...@@ -4903,7 +4903,6 @@ static void dsi_disconnect(struct omap_dss_device *src, ...@@ -4903,7 +4903,6 @@ static void dsi_disconnect(struct omap_dss_device *src,
struct omap_dss_device *dst) struct omap_dss_device *dst)
{ {
omapdss_device_disconnect(dst, dst->next); omapdss_device_disconnect(dst, dst->next);
omapdss_output_unset_device(dst);
dss_mgr_disconnect(dst); dss_mgr_disconnect(dst);
} }
......
...@@ -450,7 +450,6 @@ static void hdmi_disconnect(struct omap_dss_device *src, ...@@ -450,7 +450,6 @@ static void hdmi_disconnect(struct omap_dss_device *src,
struct omap_dss_device *dst) struct omap_dss_device *dst)
{ {
omapdss_device_disconnect(dst, dst->next); omapdss_device_disconnect(dst, dst->next);
omapdss_output_unset_device(dst);
dss_mgr_disconnect(dst); dss_mgr_disconnect(dst);
} }
......
...@@ -455,7 +455,6 @@ static void hdmi_disconnect(struct omap_dss_device *src, ...@@ -455,7 +455,6 @@ static void hdmi_disconnect(struct omap_dss_device *src,
struct omap_dss_device *dst) struct omap_dss_device *dst)
{ {
omapdss_device_disconnect(dst, dst->next); omapdss_device_disconnect(dst, dst->next);
omapdss_output_unset_device(dst);
dss_mgr_disconnect(dst); dss_mgr_disconnect(dst);
} }
......
...@@ -522,7 +522,6 @@ int omap_dss_get_num_overlays(void); ...@@ -522,7 +522,6 @@ int omap_dss_get_num_overlays(void);
#define for_each_dss_output(d) \ #define for_each_dss_output(d) \
while ((d = omapdss_device_get_next(d, OMAP_DSS_DEVICE_TYPE_OUTPUT)) != NULL) while ((d = omapdss_device_get_next(d, OMAP_DSS_DEVICE_TYPE_OUTPUT)) != NULL)
int omapdss_output_validate(struct omap_dss_device *out); int omapdss_output_validate(struct omap_dss_device *out);
int omapdss_output_unset_device(struct omap_dss_device *out);
typedef void (*omap_dispc_isr_t) (void *arg, u32 mask); typedef void (*omap_dispc_isr_t) (void *arg, u32 mask);
int omap_dispc_register_isr(omap_dispc_isr_t isr, void *arg, u32 mask); int omap_dispc_register_isr(omap_dispc_isr_t isr, void *arg, u32 mask);
......
...@@ -24,8 +24,6 @@ ...@@ -24,8 +24,6 @@
#include "dss.h" #include "dss.h"
#include "omapdss.h" #include "omapdss.h"
static DEFINE_MUTEX(output_lock);
int omapdss_output_validate(struct omap_dss_device *out) int omapdss_output_validate(struct omap_dss_device *out)
{ {
if (out->next && out->output_type != out->next->type) { if (out->next && out->output_type != out->next->type) {
...@@ -37,25 +35,6 @@ int omapdss_output_validate(struct omap_dss_device *out) ...@@ -37,25 +35,6 @@ int omapdss_output_validate(struct omap_dss_device *out)
} }
EXPORT_SYMBOL(omapdss_output_validate); EXPORT_SYMBOL(omapdss_output_validate);
int omapdss_output_unset_device(struct omap_dss_device *out)
{
int r = 0;
mutex_lock(&output_lock);
if (out->dst->state != OMAP_DSS_DISPLAY_DISABLED) {
dev_err(out->dev,
"device %s is not disabled, cannot unset device\n",
out->dst->name);
r = -EINVAL;
}
mutex_unlock(&output_lock);
return r;
}
EXPORT_SYMBOL(omapdss_output_unset_device);
int dss_install_mgr_ops(struct dss_device *dss, int dss_install_mgr_ops(struct dss_device *dss,
const struct dss_mgr_ops *mgr_ops, const struct dss_mgr_ops *mgr_ops,
struct omap_drm_private *priv) struct omap_drm_private *priv)
......
...@@ -274,7 +274,6 @@ static void sdi_disconnect(struct omap_dss_device *src, ...@@ -274,7 +274,6 @@ static void sdi_disconnect(struct omap_dss_device *src,
struct omap_dss_device *dst) struct omap_dss_device *dst)
{ {
omapdss_device_disconnect(dst, dst->next); omapdss_device_disconnect(dst, dst->next);
omapdss_output_unset_device(dst);
dss_mgr_disconnect(dst); dss_mgr_disconnect(dst);
} }
......
...@@ -713,7 +713,6 @@ static void venc_disconnect(struct omap_dss_device *src, ...@@ -713,7 +713,6 @@ static void venc_disconnect(struct omap_dss_device *src,
struct omap_dss_device *dst) struct omap_dss_device *dst)
{ {
omapdss_device_disconnect(dst, dst->next); omapdss_device_disconnect(dst, dst->next);
omapdss_output_unset_device(dst);
dss_mgr_disconnect(dst); dss_mgr_disconnect(dst);
} }
......
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