Currently, there is a look-up-table to describe all the clock options the HDMI PHY
can use. Some of these entries in the LUT are using a fractional divider which does
not have a well documented algorithm for determinging values, but the the integer
divider can use an algorithm to calculate the integer divder values dynamically
beyond those listed in the LUT and also duplicates some of the entries.
The first two patches do not do anything functionally other than simplify
some of the register accesses and de-duplicates some of the register look-ups.
The third patch adds support for the integer divider and uses it whenever the
clock request is an exact match. Otherwise, it will use the LUT as before.
The rouding is still based on the LUT if the integer clock isn't an exact match.
The forth patch updates thes set_rate and round_rate functions to use either
the fractional clock LUT or the the integer divder mechanism to determine
which ever clock rate might be closest match.
The last patch removes the integer divider entries from the LUT since by then
it'll be comparing both the integer divider calculator and the closest value
in the LUT.
In my testing with a AOC 4K monitor, I was able to add 4 entries in my modetest
table. I do not have an HDMI analyzer, so I just used my monitor to determine
if this series worked.
Adam Ford (5):
phy: freescale: fsl-samsung-hdmi: Replace register defines with macro
phy: freescale: fsl-samsung-hdmi: Simplify REG21_PMS_S_MASK lookup
xphy: freescale: fsl-samsung-hdmi: Support dynamic integer
phy: freescale: fsl-samsung-hdmi: Use closest divider
phy: freescale: fsl-samsung-hdmi: Remove unnecessary LUT entries
drivers/phy/freescale/phy-fsl-samsung-hdmi.c | 596 ++++++++++---------
1 file changed, 318 insertions(+), 278 deletions(-)
--
2.43.0