Unverified Commit 68e4a69a authored by Maxime Ripard's avatar Maxime Ripard
Browse files

drm/vc4: crtc: Create vblank reporting function



We'll need that code in the HVS driver, so let's create a shared function
to reuse it.

Acked-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
Link: https://lore.kernel.org/r/20220711173939.1132294-15-maxime@cerno.tech
parent 4a955123
Loading
Loading
Loading
Loading
+15 −8
Original line number Original line Diff line number Diff line
@@ -544,6 +544,20 @@ int vc4_crtc_disable_at_boot(struct drm_crtc *crtc)
	return 0;
	return 0;
}
}


void vc4_crtc_send_vblank(struct drm_crtc *crtc)
{
	struct drm_device *dev = crtc->dev;
	unsigned long flags;

	if (!crtc->state || !crtc->state->event)
		return;

	spin_lock_irqsave(&dev->event_lock, flags);
	drm_crtc_send_vblank_event(crtc, crtc->state->event);
	crtc->state->event = NULL;
	spin_unlock_irqrestore(&dev->event_lock, flags);
}

static void vc4_crtc_atomic_disable(struct drm_crtc *crtc,
static void vc4_crtc_atomic_disable(struct drm_crtc *crtc,
				    struct drm_atomic_state *state)
				    struct drm_atomic_state *state)
{
{
@@ -567,14 +581,7 @@ static void vc4_crtc_atomic_disable(struct drm_crtc *crtc,
	 * Make sure we issue a vblank event after disabling the CRTC if
	 * Make sure we issue a vblank event after disabling the CRTC if
	 * someone was waiting it.
	 * someone was waiting it.
	 */
	 */
	if (crtc->state->event) {
	vc4_crtc_send_vblank(crtc);
		unsigned long flags;

		spin_lock_irqsave(&dev->event_lock, flags);
		drm_crtc_send_vblank_event(crtc, crtc->state->event);
		crtc->state->event = NULL;
		spin_unlock_irqrestore(&dev->event_lock, flags);
	}
}
}


static void vc4_crtc_atomic_enable(struct drm_crtc *crtc,
static void vc4_crtc_atomic_enable(struct drm_crtc *crtc,
+1 −0
Original line number Original line Diff line number Diff line
@@ -862,6 +862,7 @@ void vc4_crtc_destroy_state(struct drm_crtc *crtc,
			    struct drm_crtc_state *state);
			    struct drm_crtc_state *state);
void vc4_crtc_reset(struct drm_crtc *crtc);
void vc4_crtc_reset(struct drm_crtc *crtc);
void vc4_crtc_handle_vblank(struct vc4_crtc *crtc);
void vc4_crtc_handle_vblank(struct vc4_crtc *crtc);
void vc4_crtc_send_vblank(struct drm_crtc *crtc);
void vc4_crtc_get_margins(struct drm_crtc_state *state,
void vc4_crtc_get_margins(struct drm_crtc_state *state,
			  unsigned int *left, unsigned int *right,
			  unsigned int *left, unsigned int *right,
			  unsigned int *top, unsigned int *bottom);
			  unsigned int *top, unsigned int *bottom);