Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fecfdb2d authored by Russell King's avatar Russell King
Browse files

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
Loading
Loading
Loading
Loading
+17 −20
Original line number Diff line number Diff line
@@ -71,21 +71,27 @@ armada_ovl_update_attr(struct armada_ovl_plane_properties *prop,
	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 === */
static void armada_ovl_plane_vbl(struct armada_crtc *dcrtc, void *data)
{
	struct armada_ovl_plane *dplane = data;
	struct drm_framebuffer *fb;

	armada_drm_crtc_update_regs(dcrtc, dplane->vbl.regs);

	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);
	armada_ovl_retire_fb(dplane, NULL);

	wake_up(&dplane->vbl.wait);
}
@@ -175,17 +181,8 @@ armada_ovl_plane_update(struct drm_plane *plane, struct drm_crtc *crtc,
		 */
		drm_framebuffer_reference(fb);

		if (plane->fb) {
			struct drm_framebuffer *older_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);
		}
		if (plane->fb)
			armada_ovl_retire_fb(dplane, plane->fb);

		src_y = src.y1 >> 16;
		src_x = src.x1 >> 16;