1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 3 #ifndef _DRM_VBLANK_HELPER_H_ 4 #define _DRM_VBLANK_HELPER_H_ 5 6 #include <linux/hrtimer_types.h> 7 #include <linux/types.h> 8 9 struct drm_atomic_state; 10 struct drm_crtc; 11 12 /* 13 * VBLANK helpers 14 */ 15 16 void drm_crtc_vblank_atomic_flush(struct drm_crtc *crtc, 17 struct drm_atomic_state *state); 18 void drm_crtc_vblank_atomic_enable(struct drm_crtc *crtc, 19 struct drm_atomic_state *state); 20 void drm_crtc_vblank_atomic_disable(struct drm_crtc *crtc, 21 struct drm_atomic_state *crtc_state); 22 23 /** 24 * DRM_CRTC_HELPER_VBLANK_FUNCS - Default implementation for VBLANK helpers 25 * 26 * This macro initializes struct &drm_crtc_helper_funcs to default helpers 27 * for VBLANK handling. 28 */ 29 #define DRM_CRTC_HELPER_VBLANK_FUNCS \ 30 .atomic_flush = drm_crtc_vblank_atomic_flush, \ 31 .atomic_enable = drm_crtc_vblank_atomic_enable, \ 32 .atomic_disable = drm_crtc_vblank_atomic_disable 33 34 /* 35 * VBLANK timer 36 */ 37 38 int drm_crtc_vblank_helper_enable_vblank_timer(struct drm_crtc *crtc); 39 void drm_crtc_vblank_helper_disable_vblank_timer(struct drm_crtc *crtc); 40 bool drm_crtc_vblank_helper_get_vblank_timestamp_from_timer(struct drm_crtc *crtc, 41 int *max_error, 42 ktime_t *vblank_time, 43 bool in_vblank_irq); 44 45 /** 46 * DRM_CRTC_VBLANK_TIMER_FUNCS - Default implementation for VBLANK timers 47 * 48 * This macro initializes struct &drm_crtc_funcs to default helpers for 49 * VBLANK timers. 50 */ 51 #define DRM_CRTC_VBLANK_TIMER_FUNCS \ 52 .enable_vblank = drm_crtc_vblank_helper_enable_vblank_timer, \ 53 .disable_vblank = drm_crtc_vblank_helper_disable_vblank_timer, \ 54 .get_vblank_timestamp = drm_crtc_vblank_helper_get_vblank_timestamp_from_timer 55 56 #endif 57