| /* 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_commit; | |
| struct drm_crtc; | |
| /* | |
| * VBLANK helpers | |
| */ | |
| void drm_crtc_vblank_atomic_flush(struct drm_crtc *crtc, | |
| struct drm_atomic_commit *state); | |
| void drm_crtc_vblank_atomic_enable(struct drm_crtc *crtc, | |
| struct drm_atomic_commit *state); | |
| void drm_crtc_vblank_atomic_disable(struct drm_crtc *crtc, | |
| struct drm_atomic_commit *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 |