aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2015-07-22 10:35:41 +0100
committerRussell King <rmk+kernel@arm.linux.org.uk>2015-10-09 17:17:32 +0100
commitd0c96d168021a60555c692d860334814cc694d8b (patch)
tree4a96ebe82ea94f3c8f78e99f99cf922ac8942d08
parentdrm: bridge/dw_hdmi-ahb-audio: allow larger buffer sizes (diff)
downloadlinux-dev-d0c96d168021a60555c692d860334814cc694d8b.tar.xz
linux-dev-d0c96d168021a60555c692d860334814cc694d8b.zip
drm: bridge/dw_hdmi: avoid being recursive in N calculation
There's no need to be recursive when computing the N value for the ACR packet - we can instead calculate the multiplier prior to our switch() based lookup, and multiply the N value appropriately afterwards. Tested-by: Fabio Estevam <fabio.estevam@freescale.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r--drivers/gpu/drm/bridge/dw_hdmi.c25
1 files changed, 9 insertions, 16 deletions
diff --git a/drivers/gpu/drm/bridge/dw_hdmi.c b/drivers/gpu/drm/bridge/dw_hdmi.c
index 70e7a938a37b..e5ee92370f49 100644
--- a/drivers/gpu/drm/bridge/dw_hdmi.c
+++ b/drivers/gpu/drm/bridge/dw_hdmi.c
@@ -221,6 +221,12 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk,
unsigned int ratio)
{
unsigned int n = (128 * freq) / 1000;
+ unsigned int mult = 1;
+
+ while (freq > 48000) {
+ mult *= 2;
+ freq /= 2;
+ }
switch (freq) {
case 32000:
@@ -232,6 +238,7 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk,
n = 11648;
else
n = 4096;
+ n *= mult;
break;
case 44100:
@@ -243,6 +250,7 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk,
n = (ratio == 150) ? 17836 : 8918;
else
n = 6272;
+ n *= mult;
break;
case 48000:
@@ -256,22 +264,7 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk,
n = (ratio == 150) ? 11648 : 5824;
else
n = 6144;
- break;
-
- case 88200:
- n = hdmi_compute_n(44100, pixel_clk, ratio) * 2;
- break;
-
- case 96000:
- n = hdmi_compute_n(48000, pixel_clk, ratio) * 2;
- break;
-
- case 176400:
- n = hdmi_compute_n(44100, pixel_clk, ratio) * 4;
- break;
-
- case 192000:
- n = hdmi_compute_n(48000, pixel_clk, ratio) * 4;
+ n *= mult;
break;
default: