[PATCH 28/31] drm: omapdrm: Remove omap_plane enabled field
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Wed Apr 15 15:09:45 PDT 2015
The field tracks the plane state to avoid double-enable or -disable.
This isn't required anymore, as
- the DRM atomic core guarantees that the plane atomic_update and
atomic_disable functions will never be called on an enabled/disabled
plane
- the CRTC enable/disable operations that enable/disable the plane are
already guarded against double enable/disable
We can thus remove the enabled field completely. The
omap_plane_set_enable() function then becomes a wrapper around
omap_plane_setup() which can be called directly.
Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
drivers/gpu/drm/omapdrm/omap_crtc.c | 11 +++++----
drivers/gpu/drm/omapdrm/omap_drv.h | 2 +-
drivers/gpu/drm/omapdrm/omap_plane.c | 45 +++++++-----------------------------
3 files changed, 16 insertions(+), 42 deletions(-)
diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
index d02b54d..5d0356f 100644
--- a/drivers/gpu/drm/omapdrm/omap_crtc.c
+++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
@@ -453,19 +453,21 @@ static void omap_crtc_enable(struct drm_crtc *crtc)
DBG("%s", omap_crtc->name);
+ dispc_runtime_get();
+
/* Enable all planes associated with the CRTC. */
for (i = 0; i < priv->num_planes; i++) {
struct drm_plane *plane = priv->planes[i];
if (plane->crtc == crtc)
- WARN_ON(omap_plane_set_enable(plane, true));
+ WARN_ON(omap_plane_setup(plane));
}
omap_crtc_encoder_setup(crtc, true);
omap_crtc_flush(crtc);
- dispc_runtime_get();
drm_crtc_vblank_on(crtc);
+
dispc_runtime_put();
}
@@ -480,18 +482,19 @@ static void omap_crtc_disable(struct drm_crtc *crtc)
omap_crtc_wait_page_flip(crtc);
dispc_runtime_get();
drm_crtc_vblank_off(crtc);
- dispc_runtime_put();
/* Disable all planes associated with the CRTC. */
for (i = 0; i < priv->num_planes; i++) {
struct drm_plane *plane = priv->planes[i];
if (plane->crtc == crtc)
- WARN_ON(omap_plane_set_enable(plane, false));
+ WARN_ON(omap_plane_setup(plane));
}
omap_crtc_encoder_setup(crtc, false);
omap_crtc_flush(crtc);
+
+ dispc_runtime_put();
}
static void omap_crtc_mode_set_nofb(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.h b/drivers/gpu/drm/omapdrm/omap_drv.h
index bef3002..56b8ee6 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.h
+++ b/drivers/gpu/drm/omapdrm/omap_drv.h
@@ -150,7 +150,7 @@ struct drm_crtc *omap_crtc_init(struct drm_device *dev,
struct drm_plane *omap_plane_init(struct drm_device *dev,
int id, enum drm_plane_type type);
-int omap_plane_set_enable(struct drm_plane *plane, bool enable);
+int omap_plane_setup(struct drm_plane *plane);
void omap_plane_install_properties(struct drm_plane *plane,
struct drm_mode_object *obj);
diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c b/drivers/gpu/drm/omapdrm/omap_plane.c
index ac6b72c..a3c5d1f 100644
--- a/drivers/gpu/drm/omapdrm/omap_plane.c
+++ b/drivers/gpu/drm/omapdrm/omap_plane.c
@@ -40,8 +40,6 @@ struct omap_plane {
int id; /* TODO rename omap_plane -> omap_plane_id in omapdss so I can use the enum */
const char *name;
- bool enabled;
-
uint32_t nformats;
uint32_t formats[32];
@@ -60,18 +58,19 @@ to_omap_plane_state(struct drm_plane_state *state)
return container_of(state, struct omap_plane_state, base);
}
-static int omap_plane_setup(struct omap_plane *omap_plane)
+int omap_plane_setup(struct drm_plane *plane)
{
- struct drm_plane_state *state = omap_plane->base.state;
+ struct omap_plane *omap_plane = to_omap_plane(plane);
+ struct drm_plane_state *state = plane->state;
struct omap_plane_state *omap_state = to_omap_plane_state(state);
- struct drm_device *dev = omap_plane->base.dev;
+ struct drm_device *dev = plane->dev;
struct omap_overlay_info info;
struct omap_drm_window win;
int ret;
- DBG("%s, enabled=%d", omap_plane->name, omap_plane->enabled);
+ DBG("%s, crtc=%p fb=%p", omap_plane->name, state->crtc, state->fb);
- if (!omap_plane->enabled) {
+ if (!state->crtc) {
dispc_ovl_enable(omap_plane->id, false);
return 0;
}
@@ -134,23 +133,6 @@ static int omap_plane_setup(struct omap_plane *omap_plane)
return 0;
}
-int omap_plane_set_enable(struct drm_plane *plane, bool enable)
-{
- struct omap_plane *omap_plane = to_omap_plane(plane);
- int ret;
-
- if (enable == omap_plane->enabled)
- return 0;
-
- omap_plane->enabled = enable;
-
- dispc_runtime_get();
- ret = omap_plane_setup(omap_plane);
- dispc_runtime_put();
-
- return ret;
-}
-
static int omap_plane_prepare_fb(struct drm_plane *plane,
struct drm_framebuffer *fb,
const struct drm_plane_state *new_state)
@@ -168,14 +150,7 @@ static void omap_plane_cleanup_fb(struct drm_plane *plane,
static void omap_plane_atomic_update(struct drm_plane *plane,
struct drm_plane_state *old_state)
{
- struct omap_plane *omap_plane = to_omap_plane(plane);
- struct drm_plane_state *state = plane->state;
-
- if (!state->fb || !state->crtc)
- return;
-
- omap_plane->enabled = true;
- omap_plane_setup(omap_plane);
+ omap_plane_setup(plane);
}
static void omap_plane_atomic_disable(struct drm_plane *plane,
@@ -188,11 +163,7 @@ static void omap_plane_atomic_disable(struct drm_plane *plane,
omap_state->zorder = plane->type == DRM_PLANE_TYPE_PRIMARY
? 0 : omap_plane->id;
- if (!omap_plane->enabled)
- return;
-
- omap_plane->enabled = false;
- omap_plane_setup(omap_plane);
+ omap_plane_setup(plane);
}
static const struct drm_plane_helper_funcs omap_plane_helper_funcs = {
--
2.0.5
More information about the dri-devel
mailing list