/* SPDX-License-Identifier: GPL-2.0+ */ #ifndef _DRM_VBLANK_HELPER_H_ #define _DRM_VBLANK_HELPER_H_ #include #include 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