drm: bridge/dw_hdmi: replace CTS calculation for the ACR
authorRussell King <rmk+kernel@arm.linux.org.uk>
Wed, 22 Jul 2015 15:54:37 +0000 (16:54 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 9 Oct 2015 16:21:21 +0000 (17:21 +0100)
commitdfbdaf50460479446a258ef781683e7d7d6349d7
tree67ada3df9e4736c00eaa0cc9038b2ca26728c04f
parentb195fbdbdf5f6712beec09bb9009f99ff9ecd912
drm: bridge/dw_hdmi: replace CTS calculation for the ACR

Given the TDMS clock, audio sample rate, and the N parameter, we can
calculate the CTS value for the audio clock regenerator (ACR) using the
following calculation given in the HDMI specification:

CTS = ftdms * N / (128 * fs)

The specification says that the CTS value is an average value, which is
true if the source hardware measures it.  Where source hardware needs it
to be programmed, it is particularly difficult to alternate between two
values correctly to ensure that we achieve a correct "average"
fractional value at the sink.

Also, there's the problem that our "ftdms" is not a fully accurate
value; it is rounded to a kHz value.  This introduces an unnecessary
(and harmless) fractional value into the above equation for combinations
like 148.5MHz/1.001 for 44100Hz - we still calculate the correct CTS
value.

Tested-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/gpu/drm/bridge/dw_hdmi.c