mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
91cd69088e
commit
d0c96d1680
|
@ -221,6 +221,12 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk,
|
||||||
unsigned int ratio)
|
unsigned int ratio)
|
||||||
{
|
{
|
||||||
unsigned int n = (128 * freq) / 1000;
|
unsigned int n = (128 * freq) / 1000;
|
||||||
|
unsigned int mult = 1;
|
||||||
|
|
||||||
|
while (freq > 48000) {
|
||||||
|
mult *= 2;
|
||||||
|
freq /= 2;
|
||||||
|
}
|
||||||
|
|
||||||
switch (freq) {
|
switch (freq) {
|
||||||
case 32000:
|
case 32000:
|
||||||
|
@ -232,6 +238,7 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk,
|
||||||
n = 11648;
|
n = 11648;
|
||||||
else
|
else
|
||||||
n = 4096;
|
n = 4096;
|
||||||
|
n *= mult;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 44100:
|
case 44100:
|
||||||
|
@ -243,6 +250,7 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk,
|
||||||
n = (ratio == 150) ? 17836 : 8918;
|
n = (ratio == 150) ? 17836 : 8918;
|
||||||
else
|
else
|
||||||
n = 6272;
|
n = 6272;
|
||||||
|
n *= mult;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 48000:
|
case 48000:
|
||||||
|
@ -256,22 +264,7 @@ static unsigned int hdmi_compute_n(unsigned int freq, unsigned long pixel_clk,
|
||||||
n = (ratio == 150) ? 11648 : 5824;
|
n = (ratio == 150) ? 11648 : 5824;
|
||||||
else
|
else
|
||||||
n = 6144;
|
n = 6144;
|
||||||
break;
|
n *= mult;
|
||||||
|
|
||||||
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;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue