|
@@ -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 = {
|