drm/exynos/mixer: fix mode validation code
authorAndrzej Hajda <a.hajda@samsung.com>
Fri, 29 Sep 2017 10:05:35 +0000 (12:05 +0200)
committerJunghoon Kim <jhoon20.kim@samsung.com>
Thu, 14 Feb 2019 05:56:04 +0000 (14:56 +0900)
Mode limitation checked in mixer driver affects only older HW.
Mixer in Exynos542x has no such limitations. While at it patch changes
validation callback to recently introduced mode_valid which is more
suitable for the check. Additionally little cleanup is performed.

Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
Reviewed-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
drivers/gpu/drm/exynos/exynos_mixer.c

index a87f60b..fba1203 100644 (file)
@@ -1040,26 +1040,24 @@ static void mixer_disable(struct exynos_drm_crtc *crtc)
        clear_bit(MXR_BIT_POWERED, &ctx->flags);
 }
 
-/* Only valid for Mixer version 16.0.33.0 */
-static int mixer_atomic_check(struct exynos_drm_crtc *crtc,
-                      struct drm_crtc_state *state)
+static int mixer_mode_valid(struct exynos_drm_crtc *crtc,
+               const struct drm_display_mode *mode)
 {
-       struct drm_display_mode *mode = &state->adjusted_mode;
-       u32 w, h;
+       struct mixer_context *ctx = crtc->ctx;
+       u32 w = mode->hdisplay, h = mode->vdisplay;
 
-       w = mode->hdisplay;
-       h = mode->vdisplay;
+       DRM_DEBUG_KMS("xres=%d, yres=%d, refresh=%d, intl=%d\n", w, h,
+               mode->vrefresh, !!(mode->flags & DRM_MODE_FLAG_INTERLACE));
 
-       DRM_DEBUG_KMS("xres=%d, yres=%d, refresh=%d, intl=%d\n",
-               mode->hdisplay, mode->vdisplay, mode->vrefresh,
-               (mode->flags & DRM_MODE_FLAG_INTERLACE) ? 1 : 0);
+       if (ctx->mxr_ver == MXR_VER_128_0_0_184)
+               return MODE_OK;
 
        if ((w >= 464 && w <= 720 && h >= 261 && h <= 576) ||
-               (w >= 1024 && w <= 1280 && h >= 576 && h <= 720) ||
-               (w >= 1664 && w <= 1920 && h >= 936 && h <= 1080))
-               return 0;
+           (w >= 1024 && w <= 1280 && h >= 576 && h <= 720) ||
+           (w >= 1664 && w <= 1920 && h >= 936 && h <= 1080))
+               return MODE_OK;
 
-       return -EINVAL;
+       return MODE_BAD;
 }
 
 static const struct exynos_drm_crtc_ops mixer_crtc_ops = {
@@ -1071,7 +1069,7 @@ static const struct exynos_drm_crtc_ops mixer_crtc_ops = {
        .update_plane           = mixer_update_plane,
        .disable_plane          = mixer_disable_plane,
        .atomic_flush           = mixer_atomic_flush,
-       .atomic_check           = mixer_atomic_check,
+       .mode_valid             = mixer_mode_valid,
 };
 
 static const struct mixer_drv_data exynos5420_mxr_drv_data = {