From 1832f11f682cd90f12de21b2383beb0051fd1077 Mon Sep 17 00:00:00 2001 From: Koji Matsuoka Date: Wed, 10 Dec 2014 11:53:05 +0900 Subject: [PATCH] drm: rcar-du: Add max resolution support Change-Id: I88997563d45f4f0c06ea0df746c0b8abf518f310 Signed-off-by: Koji Matsuoka Signed-off-by: Damian Hobson-Garcia --- drivers/gpu/drm/i2c/adv7511.c | 3 --- drivers/gpu/drm/rcar-du/rcar_du_drv.c | 8 ++++++++ drivers/gpu/drm/rcar-du/rcar_du_drv.h | 4 ++++ drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c | 14 ++++++++++++++ 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/i2c/adv7511.c b/drivers/gpu/drm/i2c/adv7511.c index faf1c0c..fa140e0 100644 --- a/drivers/gpu/drm/i2c/adv7511.c +++ b/drivers/gpu/drm/i2c/adv7511.c @@ -644,9 +644,6 @@ static int adv7511_encoder_mode_valid(struct drm_encoder *encoder, if (mode->clock > 165000) return MODE_CLOCK_HIGH; - if (mode->flags & DRM_MODE_FLAG_INTERLACE) - return MODE_NO_INTERLACE; - return MODE_OK; } diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c index ca3ef6a..fcee2b0 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c @@ -80,6 +80,10 @@ static const struct rcar_du_device_info rcar_du_r8a7790_info = { }, }, .num_lvds = 2, + .drgbs_bit = 0, + .max_xres = 1920, + .max_yres = 1080, + .interlace = false, }; static const struct rcar_du_device_info rcar_du_r8a7791_info = { @@ -101,6 +105,10 @@ static const struct rcar_du_device_info rcar_du_r8a7791_info = { }, }, .num_lvds = 1, + .drgbs_bit = 1, + .max_xres = 1920, + .max_yres = 1080, + .interlace = true, }; static const struct platform_device_id rcar_du_id_table[] = { diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.h b/drivers/gpu/drm/rcar-du/rcar_du_drv.h index fdd645b..f9a0eb0 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.h +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.h @@ -63,6 +63,10 @@ struct rcar_du_device_info { unsigned int num_crtcs; struct rcar_du_output_routing routes[RCAR_DU_OUTPUT_MAX]; unsigned int num_lvds; + unsigned int drgbs_bit; + unsigned int max_xres; + unsigned int max_yres; + bool interlace; }; struct rcar_du_device { diff --git a/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c b/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c index 1678a31..61ca841 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c @@ -41,6 +41,20 @@ static int rcar_du_hdmi_connector_mode_valid(struct drm_connector *connector, struct rcar_du_connector *con = to_rcar_connector(connector); struct drm_encoder *encoder = rcar_encoder_to_drm_encoder(con->encoder); struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder); + struct rcar_du_device *rcdu = connector->dev->dev_private; + unsigned int max_width, max_height; + bool laced; + + max_width = rcdu->info->max_xres; + max_height = rcdu->info->max_yres; + laced = rcdu->info->interlace; + + if ((mode->hdisplay * mode->vdisplay) > (max_width * max_height)) + return MODE_BAD_WIDTH; + + if (((mode->hdisplay * mode->vdisplay) == (max_width * max_height)) + && (laced) && (!(mode->flags & DRM_MODE_FLAG_INTERLACE))) + return MODE_BAD; if (sfuncs->mode_valid == NULL) return MODE_OK; -- 2.7.4