]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
OMAPDSS: HDMI: fix hdmi_wait_for_bit_change
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 28 Oct 2013 09:47:30 +0000 (11:47 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 13 Jan 2014 10:19:52 +0000 (12:19 +0200)
hdmi_wait_for_bit_change() has two issues:

The register index was passed as u16, even if the register index may be
u32. Fix the index to u32.

The function was copied from wait_for_bit_change() which waits for a
single bit to change, but the hdmi version was changed to wait for a bit
field. This change was not done correctly.

The function is supposed to return the (last) value of the bit field,
but it returned !val in case of timeout. This was correct for the single
bit version, but not for the hdmi version. Fix the function to return
the actual value in the register.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/video/omap2/dss/hdmi.h

index b0493768a5d7f409af60f0994223e7b6c9d68b3b..855b6b0f250ec377cb72cbab81db60cb10edff72 100644 (file)
@@ -378,15 +378,15 @@ static inline u32 hdmi_read_reg(void __iomem *base_addr, const u16 idx)
        FLD_GET(hdmi_read_reg(base, idx), start, end)
 
 static inline int hdmi_wait_for_bit_change(void __iomem *base_addr,
-               const u16 idx, int b2, int b1, u32 val)
+               const u32 idx, int b2, int b1, u32 val)
 {
-       u32 t = 0;
-       while (val != REG_GET(base_addr, idx, b2, b1)) {
-               udelay(1);
+       u32 t = 0, v;
+       while (val != (v = REG_GET(base_addr, idx, b2, b1))) {
                if (t++ > 10000)
-                       return !val;
+                       return v;
+               udelay(1);
        }
-       return val;
+       return v;
 }
 
 /* HDMI wrapper funcs */