linux/include/drm/drm_vblank_helper.h
Thomas Zimmermann d54dbb5963 drm/vblank: Add CRTC helpers for simple use cases
Implement atomic_flush, atomic_enable and atomic_disable of struct
drm_crtc_helper_funcs for vblank handling. Driver with no further
requirements can use these functions instead of adding their own.
Also simplifies the use of vblank timers.

The code has been adopted from vkms, which added the funtionality
in commit 3a0709928b ("drm/vkms: Add vblank events simulated by
hrtimers").

v3:
- mention vkms (Javier)
v2:
- fix docs

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Tested-by: Michael Kelley <mhklinux@outlook.com>
Link: https://lore.kernel.org/r/20250916083816.30275-3-tzimmermann@suse.de
2025-10-01 08:32:00 +02:00

56 lines
1.6 KiB
C

/* SPDX-License-Identifier: GPL-2.0+ */
#ifndef _DRM_VBLANK_HELPER_H_
#define _DRM_VBLANK_HELPER_H_
#include <linux/hrtimer_types.h>
#include <linux/types.h>
struct drm_atomic_state;
struct drm_crtc;
/*
* VBLANK helpers
*/
void drm_crtc_vblank_atomic_flush(struct drm_crtc *crtc,
struct drm_atomic_state *state);
void drm_crtc_vblank_atomic_enable(struct drm_crtc *crtc,
struct drm_atomic_state *state);
void drm_crtc_vblank_atomic_disable(struct drm_crtc *crtc,
struct drm_atomic_state *crtc_state);
/**
* DRM_CRTC_HELPER_VBLANK_FUNCS - Default implementation for VBLANK helpers
*
* This macro initializes struct &drm_crtc_helper_funcs to default helpers
* for VBLANK handling.
*/
#define DRM_CRTC_HELPER_VBLANK_FUNCS \
.atomic_flush = drm_crtc_vblank_atomic_flush, \
.atomic_enable = drm_crtc_vblank_atomic_enable, \
.atomic_disable = drm_crtc_vblank_atomic_disable
/*
* VBLANK timer
*/
int drm_crtc_vblank_helper_enable_vblank_timer(struct drm_crtc *crtc);
void drm_crtc_vblank_helper_disable_vblank_timer(struct drm_crtc *crtc);
bool drm_crtc_vblank_helper_get_vblank_timestamp_from_timer(struct drm_crtc *crtc,
int *max_error,
ktime_t *vblank_time,
bool in_vblank_irq);
/**
* DRM_CRTC_VBLANK_TIMER_FUNCS - Default implementation for VBLANK timers
*
* This macro initializes struct &drm_crtc_funcs to default helpers for
* VBLANK timers.
*/
#define DRM_CRTC_VBLANK_TIMER_FUNCS \
.enable_vblank = drm_crtc_vblank_helper_enable_vblank_timer, \
.disable_vblank = drm_crtc_vblank_helper_disable_vblank_timer, \
.get_vblank_timestamp = drm_crtc_vblank_helper_get_vblank_timestamp_from_timer
#endif