summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorTomasz Stanislawski <t.stanislaws@samsung.com>2013-12-19 16:24:07 +0100
committerChanho Park <chanho61.park@samsung.com>2014-11-18 11:46:59 +0900
commitc64acb223b047da447c2a23b1e8a6e36132cfdbd (patch)
tree4394e9280a85ff2f323ec92c4734560c664e7f9a /drivers
parentd8e5ef5cf864187c9d15a2c71e69da9d75c88553 (diff)
downloadlinux-3.10-c64acb223b047da447c2a23b1e8a6e36132cfdbd.tar.gz
linux-3.10-c64acb223b047da447c2a23b1e8a6e36132cfdbd.tar.bz2
linux-3.10-c64acb223b047da447c2a23b1e8a6e36132cfdbd.zip
drm: exynos: hdmi: add support for pixel clock limitation
Adds support for limitation of maximal pixel clock of HDMI signal. This feature is needed on boards that contains lines or bridges with frequency limitations. Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com> Change-Id: I4cc38e995feeaca77b73e9ea0197d67f99d57715
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/exynos/exynos_hdmi.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
index 87c3f4271e9..a48cf7551a2 100644
--- a/drivers/gpu/drm/exynos/exynos_hdmi.c
+++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
@@ -201,6 +201,7 @@ struct hdmi_context {
struct hdmi_resources res;
int hpd_gpio;
+ u32 max_pixel_clock;
enum hdmi_type type;
};
@@ -801,6 +802,8 @@ static int hdmi_check_mode(void *ctx, struct drm_display_mode *mode)
(mode->flags & DRM_MODE_FLAG_INTERLACE) ? true :
false, mode->clock * 1000);
+ if (mode->clock * 1000 > hdata->max_pixel_clock)
+ return -E2BIG;
ret = hdmi_find_phy_conf(hdata, mode->clock * 1000);
if (ret < 0)
return ret;
@@ -1868,6 +1871,8 @@ static struct s5p_hdmi_platform_data *drm_hdmi_dt_parse_pdata
return NULL;
}
+ of_property_read_u32(np, "max-pixel-clock", &pd->max_pixel_clock);
+
return pd;
}
#else
@@ -1934,6 +1939,11 @@ static int hdmi_probe(struct platform_device *pdev)
return -EINVAL;
}
+ if (!pdata->max_pixel_clock) {
+ DRM_LOG("max-pixel-clock is zero, using INF\n");
+ pdata->max_pixel_clock = ULONG_MAX;
+ }
+
drm_hdmi_ctx = devm_kzalloc(dev, sizeof(*drm_hdmi_ctx),
GFP_KERNEL);
if (!drm_hdmi_ctx)
@@ -1964,6 +1974,7 @@ static int hdmi_probe(struct platform_device *pdev)
}
hdata->hpd_gpio = pdata->hpd_gpio;
+ hdata->max_pixel_clock = pdata->max_pixel_clock;
hdata->dev = dev;
ret = hdmi_resources_init(hdata);