[PATCH 2/4] drm/exynos: implement display-mode-check callback in mixer driver
Rahul Sharma
rahul.sharma at samsung.com
Thu Dec 27 03:38:46 PST 2012
This patch adds the implementation of check_mode callback in the mixer
driver. Based on the mixer version, correct set of restrictions will be
exposed by the mixer driver. A resolution will be acceptable only if passes
the criteria set by mixer and hdmi IPs.
Signed-off-by: Rahul Sharma <rahul.sharma at samsung.com>
Signed-off-by: Sean Paul <seanpaul at chromium.org>
---
drivers/gpu/drm/exynos/exynos_mixer.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c
index 21db895..093b374 100644
--- a/drivers/gpu/drm/exynos/exynos_mixer.c
+++ b/drivers/gpu/drm/exynos/exynos_mixer.c
@@ -810,6 +810,33 @@ static void mixer_win_disable(void *ctx, int win)
mixer_ctx->win_data[win].enabled = false;
}
+int mixer_check_mode(void *ctx, void *mode)
+{
+ struct mixer_context *mixer_ctx = ctx;
+ struct fb_videomode *check_mode = mode;
+ unsigned int w, h;
+
+ w = check_mode->xres;
+ h = check_mode->yres;
+
+ DRM_DEBUG_KMS("%s : xres=%d, yres=%d, refresh=%d, intl=%d\n",
+ __func__, check_mode->xres, check_mode->yres,
+ check_mode->refresh, (check_mode->vmode &
+ FB_VMODE_INTERLACED) ? true : false);
+
+ if (mixer_ctx->mxr_ver == MXR_VER_16_0_33_0) {
+ 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;
+ } else {
+ return 0;
+ }
+
+ return -EINVAL;
+}
static void mixer_wait_for_vblank(void *ctx)
{
struct mixer_context *mixer_ctx = ctx;
@@ -947,6 +974,9 @@ static struct exynos_mixer_ops mixer_ops = {
.win_mode_set = mixer_win_mode_set,
.win_commit = mixer_win_commit,
.win_disable = mixer_win_disable,
+
+ /* display */
+ .check_mode = mixer_check_mode,
};
/* for pageflip event */
--
1.8.0
More information about the dri-devel
mailing list