drm_vblank_helper.h 1.6 KB

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