drm: bridge/dw-hdmi: fix 4 block edid read error
authorNickey Yang <nickey.yang@rock-chips.com>
Tue, 25 Apr 2017 07:09:08 +0000 (15:09 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Fri, 28 Apr 2017 09:49:57 +0000 (17:49 +0800)
msgs[0].addr will be 0x30 when read edid with more than 2 block.
but still a read edid operation with write DDC_ADDR to
HDMI_I2CM_SLAVE register.So fix it.

Change-Id: I5f0cd9172acd4a68d5b54eaf99f17b45385a4263
Signed-off-by: Nickey Yang <nickey.yang@rock-chips.com>
drivers/gpu/drm/bridge/dw-hdmi.c

index e33e5c34b298e5a6580c9f07c307d20d4fc1ca4b..135cdbd8dfaf7e07894e410de3196a9a8b798a18 100644 (file)
@@ -512,6 +512,8 @@ static int dw_hdmi_i2c_xfer(struct i2c_adapter *adap,
        hdmi_writeb(hdmi, 0x00, HDMI_IH_MUTE_I2CM_STAT0);
 
        /* Set slave device address taken from the first I2C message */
+       if (addr == DDC_SEGMENT_ADDR && msgs[0].len == 1)
+               addr = DDC_ADDR;
        hdmi_writeb(hdmi, addr, HDMI_I2CM_SLAVE);
 
        /* Set slave device register address on transfer */