]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
drm/exynos: add mode_valid callback to exynos_drm
authorAndrzej Hajda <a.hajda@samsung.com>
Thu, 24 Aug 2017 13:33:56 +0000 (15:33 +0200)
committerInki Dae <inki.dae@samsung.com>
Fri, 25 Aug 2017 02:58:07 +0000 (11:58 +0900)
crtc::mode_valid callback is required to implement proper pipeline
validation for command/video modes. Since Exynos uses private
framework such callback should be added to it.

Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
drivers/gpu/drm/exynos/exynos_drm_crtc.c
drivers/gpu/drm/exynos/exynos_drm_drv.h

index ac544de73c828434ebb27498d6cc807c1941c36a..6ce0821590dfcfac52e935d7b67cd273d69a299e 100644 (file)
@@ -84,7 +84,19 @@ static void exynos_crtc_atomic_flush(struct drm_crtc *crtc,
                exynos_crtc->ops->atomic_flush(exynos_crtc);
 }
 
+static enum drm_mode_status exynos_crtc_mode_valid(struct drm_crtc *crtc,
+       const struct drm_display_mode *mode)
+{
+       struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc);
+
+       if (exynos_crtc->ops->mode_valid)
+               return exynos_crtc->ops->mode_valid(exynos_crtc, mode);
+
+       return MODE_OK;
+}
+
 static const struct drm_crtc_helper_funcs exynos_crtc_helper_funcs = {
+       .mode_valid     = exynos_crtc_mode_valid,
        .atomic_check   = exynos_crtc_atomic_check,
        .atomic_begin   = exynos_crtc_atomic_begin,
        .atomic_flush   = exynos_crtc_atomic_flush,
index 9e77809135f076e48b4db2303a24702ae13d41b9..d53435b68ae6ea88923446ebcbf0893b9962169b 100644 (file)
@@ -117,6 +117,7 @@ struct exynos_drm_plane_config {
  * @disable: disable the device
  * @enable_vblank: specific driver callback for enabling vblank interrupt.
  * @disable_vblank: specific driver callback for disabling vblank interrupt.
+ * @mode_valid: specific driver callback for mode validation
  * @atomic_check: validate state
  * @atomic_begin: prepare device to receive an update
  * @atomic_flush: mark the end of device update
@@ -132,6 +133,8 @@ struct exynos_drm_crtc_ops {
        int (*enable_vblank)(struct exynos_drm_crtc *crtc);
        void (*disable_vblank)(struct exynos_drm_crtc *crtc);
        u32 (*get_vblank_counter)(struct exynos_drm_crtc *crtc);
+       enum drm_mode_status (*mode_valid)(struct exynos_drm_crtc *crtc,
+               const struct drm_display_mode *mode);
        int (*atomic_check)(struct exynos_drm_crtc *crtc,
                            struct drm_crtc_state *state);
        void (*atomic_begin)(struct exynos_drm_crtc *crtc);