Change check of DDC status. Instead of silently not reading EDID when in "IDLE" state [1]. Always read EDID but add a debug log when DDC controller is in reset. [1] ADV7511 Programming Guide: Table 11: DDCController Status: 0xC8 [3:0] DDC Controller State 0000 In Reset (No Hot Plug Detected) 0001 Reading EDID 0010 IDLE (Waiting for HDCP Requested) 0011 Initializing HDCP 0100 HDCP Enabled 0101 Initializing HDCP Repeater Fixes: 9c8af882bf12 ("drm: Add adv7511 encoder driver") Signed-off-by: Emil Svendsen <emas@xxxxxxxxxxxxxxx> --- v2: - Split into two patches. - Add Fixes tag. - Don't return -EIO when DDC controller is in reset state, only log. v1: https://lore.kernel.org/all/20231026113029.575846-1-emas@xxxxxxxxxxxxxxx/ drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c index 9b6294120516..713ad348dc46 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c @@ -537,6 +537,7 @@ static int adv7511_get_edid_block(void *data, u8 *buf, unsigned int block, size_t len) { struct adv7511 *adv7511 = data; + struct device* dev = &adv7511->i2c_edid->dev; int edid_segment = block / 2; struct i2c_msg xfer[2]; uint8_t offset; @@ -554,15 +555,18 @@ static int adv7511_get_edid_block(void *data, u8 *buf, unsigned int block, if (ret < 0) return ret; - if (status != 2) { - adv7511->edid_read = false; - regmap_write(adv7511->regmap, ADV7511_REG_EDID_SEGMENT, - edid_segment); - ret = adv7511_wait_for_edid(adv7511, 200); - if (ret < 0) - return ret; + if (!(status & 0x0F)) { + dev_dbg(dev, "DDC in reset no hot plug detected %x\n", + status); } + adv7511->edid_read = false; + regmap_write(adv7511->regmap, ADV7511_REG_EDID_SEGMENT, + edid_segment); + ret = adv7511_wait_for_edid(adv7511, 200); + if (ret < 0) + return ret; + /* Break this apart, hopefully more I2C controllers will * support 64 byte transfers than 256 byte transfers */ -- 2.34.1