summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/omapdrm/omap_crtc.c32
1 files changed, 9 insertions, 23 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
index 430bf64521f0..e93ed34dea33 100644
--- a/drivers/gpu/drm/omapdrm/omap_crtc.c
+++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
@@ -46,7 +46,6 @@ struct omap_crtc {
struct omap_overlay_manager *mgr;
struct omap_video_timings timings;
- bool enabled;
struct omap_drm_irq vblank_irq;
struct omap_drm_irq error_irq;
@@ -126,7 +125,7 @@ static void omap_crtc_dss_start_update(struct omap_overlay_manager *mgr)
{
}
-/* Called only from omap_crtc_setup and suspend/resume handlers. */
+/* Called only from omap_crtc_encoder_setup and suspend/resume handlers. */
static void omap_crtc_set_enabled(struct drm_crtc *crtc, bool enable)
{
struct drm_device *dev = crtc->dev;
@@ -385,14 +384,14 @@ int omap_crtc_flush(struct drm_crtc *crtc)
return 0;
}
-static void omap_crtc_setup(struct drm_crtc *crtc)
+static void omap_crtc_encoder_setup(struct drm_crtc *crtc, bool enable)
{
struct omap_crtc *omap_crtc = to_omap_crtc(crtc);
struct omap_drm_private *priv = crtc->dev->dev_private;
struct drm_encoder *encoder = NULL;
unsigned int i;
- DBG("%s: enabled=%d", omap_crtc->name, omap_crtc->enabled);
+ DBG("%s: enable=%d", omap_crtc->name, enable);
dispc_runtime_get();
@@ -408,14 +407,11 @@ static void omap_crtc_setup(struct drm_crtc *crtc)
omap_crtc->current_encoder = encoder;
- if (!omap_crtc->enabled) {
- if (encoder)
- omap_encoder_set_enabled(encoder, false);
- } else {
- if (encoder) {
- omap_encoder_set_enabled(encoder, false);
+ if (encoder) {
+ omap_encoder_set_enabled(encoder, false);
+ if (enable) {
omap_encoder_update(encoder, omap_crtc->mgr,
- &omap_crtc->timings);
+ &omap_crtc->timings);
omap_encoder_set_enabled(encoder, true);
}
}
@@ -456,9 +452,6 @@ static void omap_crtc_enable(struct drm_crtc *crtc)
DBG("%s", omap_crtc->name);
- if (omap_crtc->enabled)
- return;
-
/* Enable all planes associated with the CRTC. */
for (i = 0; i < priv->num_planes; i++) {
struct drm_plane *plane = priv->planes[i];
@@ -467,9 +460,7 @@ static void omap_crtc_enable(struct drm_crtc *crtc)
WARN_ON(omap_plane_set_enable(plane, true));
}
- omap_crtc->enabled = true;
-
- omap_crtc_setup(crtc);
+ omap_crtc_encoder_setup(crtc, true);
omap_crtc_flush(crtc);
dispc_runtime_get();
@@ -485,9 +476,6 @@ static void omap_crtc_disable(struct drm_crtc *crtc)
DBG("%s", omap_crtc->name);
- if (!omap_crtc->enabled)
- return;
-
omap_crtc_wait_page_flip(crtc);
dispc_runtime_get();
drm_crtc_vblank_off(crtc);
@@ -501,9 +489,7 @@ static void omap_crtc_disable(struct drm_crtc *crtc)
WARN_ON(omap_plane_set_enable(plane, false));
}
- omap_crtc->enabled = false;
-
- omap_crtc_setup(crtc);
+ omap_crtc_encoder_setup(crtc, false);
omap_crtc_flush(crtc);
}