From 1075e74a8e2e65afa89c305bcec1673b66d8f01f Mon Sep 17 00:00:00 2001 From: Ricardo Neri Date: Fri, 23 Mar 2012 15:49:02 -0600 Subject: [PATCH] --- yaml --- r: 310359 b: refs/heads/master c: 25a653597ee63119a477e9bdeb6b41bd7cd56140 h: refs/heads/master i: 310357: d4a7fd1d0a3fa73e4bc97f2329c0924580d0d5ad 310355: f387ba4cc90ffc589c1bda9ee2a46a6646c982f6 310351: 11a05e3eb0a4654e4625e559eec8f8d387255d4c v: v3 --- [refs] | 2 +- trunk/drivers/video/omap2/dss/hdmi.c | 88 +++++++++++++++++++++++----- 2 files changed, 75 insertions(+), 15 deletions(-) diff --git a/[refs] b/[refs] index 6a822c70b51d..2a1e7e6b3a5d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 35547626f3cc527d5e899bbfbac6b9e373f47aa0 +refs/heads/master: 25a653597ee63119a477e9bdeb6b41bd7cd56140 diff --git a/trunk/drivers/video/omap2/dss/hdmi.c b/trunk/drivers/video/omap2/dss/hdmi.c index 0cdb11976091..09fdbf8714ea 100644 --- a/trunk/drivers/video/omap2/dss/hdmi.c +++ b/trunk/drivers/video/omap2/dss/hdmi.c @@ -558,6 +558,7 @@ static void hdmi_put_clocks(void) int hdmi_compute_acr(u32 sample_freq, u32 *n, u32 *cts) { u32 deep_color; + bool deep_color_correct = false; u32 pclk = hdmi.ip_data.cfg.timings.pixel_clock; if (n == NULL || cts == NULL) @@ -566,29 +567,88 @@ int hdmi_compute_acr(u32 sample_freq, u32 *n, u32 *cts) /* TODO: When implemented, query deep color mode here. */ deep_color = 100; + /* + * When using deep color, the default N value (as in the HDMI + * specification) yields to an non-integer CTS. Hence, we + * modify it while keeping the restrictions described in + * section 7.2.1 of the HDMI 1.4a specification. + */ switch (sample_freq) { case 32000: - if ((deep_color == 125) && ((pclk == 54054) || - (pclk == 74250))) - *n = 8192; - else - *n = 4096; + case 48000: + case 96000: + case 192000: + if (deep_color == 125) + if (pclk == 27027 || pclk == 74250) + deep_color_correct = true; + if (deep_color == 150) + if (pclk == 27027) + deep_color_correct = true; break; case 44100: - *n = 6272; - break; - case 48000: - if ((deep_color == 125) && ((pclk == 54054) || - (pclk == 74250))) - *n = 8192; - else - *n = 6144; + case 88200: + case 176400: + if (deep_color == 125) + if (pclk == 27027) + deep_color_correct = true; break; default: - *n = 0; return -EINVAL; } + if (deep_color_correct) { + switch (sample_freq) { + case 32000: + *n = 8192; + break; + case 44100: + *n = 12544; + break; + case 48000: + *n = 8192; + break; + case 88200: + *n = 25088; + break; + case 96000: + *n = 16384; + break; + case 176400: + *n = 50176; + break; + case 192000: + *n = 32768; + break; + default: + return -EINVAL; + } + } else { + switch (sample_freq) { + case 32000: + *n = 4096; + break; + case 44100: + *n = 6272; + break; + case 48000: + *n = 6144; + break; + case 88200: + *n = 12544; + break; + case 96000: + *n = 12288; + break; + case 176400: + *n = 25088; + break; + case 192000: + *n = 24576; + break; + default: + return -EINVAL; + } + } /* Calculate CTS. See HDMI 1.3a or 1.4a specifications */ *cts = pclk * (*n / 128) * deep_color / (sample_freq / 10);