Commit fecfdb2d authored by Russell King's avatar Russell King

drm/armada: factor out retirement of old fb

We have two identical places in the overlay code which retire the drm
framebuffer.  Factor these out into a common function.
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 28a2aebe
...@@ -71,21 +71,27 @@ armada_ovl_update_attr(struct armada_ovl_plane_properties *prop, ...@@ -71,21 +71,27 @@ armada_ovl_update_attr(struct armada_ovl_plane_properties *prop,
spin_unlock_irq(&dcrtc->irq_lock); spin_unlock_irq(&dcrtc->irq_lock);
} }
static void armada_ovl_retire_fb(struct armada_ovl_plane *dplane,
struct drm_framebuffer *fb)
{
struct drm_framebuffer *old_fb;
spin_lock(&dplane->lock);
old_fb = dplane->old_fb;
dplane->old_fb = fb;
spin_unlock(&dplane->lock);
if (old_fb)
armada_drm_queue_unref_work(dplane->base.dev, old_fb);
}
/* === Plane support === */ /* === Plane support === */
static void armada_ovl_plane_vbl(struct armada_crtc *dcrtc, void *data) static void armada_ovl_plane_vbl(struct armada_crtc *dcrtc, void *data)
{ {
struct armada_ovl_plane *dplane = data; struct armada_ovl_plane *dplane = data;
struct drm_framebuffer *fb;
armada_drm_crtc_update_regs(dcrtc, dplane->vbl.regs); armada_drm_crtc_update_regs(dcrtc, dplane->vbl.regs);
armada_ovl_retire_fb(dplane, NULL);
spin_lock(&dplane->lock);
fb = dplane->old_fb;
dplane->old_fb = NULL;
spin_unlock(&dplane->lock);
if (fb)
armada_drm_queue_unref_work(dcrtc->crtc.dev, fb);
wake_up(&dplane->vbl.wait); wake_up(&dplane->vbl.wait);
} }
...@@ -175,17 +181,8 @@ armada_ovl_plane_update(struct drm_plane *plane, struct drm_crtc *crtc, ...@@ -175,17 +181,8 @@ armada_ovl_plane_update(struct drm_plane *plane, struct drm_crtc *crtc,
*/ */
drm_framebuffer_reference(fb); drm_framebuffer_reference(fb);
if (plane->fb) { if (plane->fb)
struct drm_framebuffer *older_fb; armada_ovl_retire_fb(dplane, plane->fb);
spin_lock_irq(&dplane->lock);
older_fb = dplane->old_fb;
dplane->old_fb = plane->fb;
spin_unlock_irq(&dplane->lock);
if (older_fb)
armada_drm_queue_unref_work(dcrtc->crtc.dev,
older_fb);
}
src_y = src.y1 >> 16; src_y = src.y1 >> 16;
src_x = src.x1 >> 16; src_x = src.x1 >> 16;
......
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