drm/bridge: adv7511: Enable HPD interrupts to support hotplug and improve monitor...
authorArchit Taneja <architt@codeaurora.org>
Tue, 17 Jan 2017 00:52:49 +0000 (16:52 -0800)
committerArchit Taneja <architt@codeaurora.org>
Thu, 19 Jan 2017 03:36:14 +0000 (09:06 +0530)
On some adv7511 implementations, we can get some spurious
disconnect signals which can cause monitor probing to fail.

This patch enables HPD (hot plug detect) interrupt support
which allows the monitor to be properly re-initialized when
the spurious disconnect signal goes away.

This also enables proper hotplug support.

Cc: David Airlie <airlied@linux.ie>
Cc: Archit Taneja <architt@codeaurora.org>
Cc: Wolfram Sang <wsa+renesas@sang-engineering.com>
Cc: Lars-Peter Clausen <lars@metafoo.de>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: dri-devel@lists.freedesktop.org
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Tested-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Originally-by: Archit Taneja <architt@codeaurora.org>
[jstultz: Added proper commit message]
Signed-off-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Archit Taneja <architt@codeaurora.org>
Link: http://patchwork.freedesktop.org/patch/msgid/1484614372-15342-4-git-send-email-john.stultz@linaro.org
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c

index 60773387fcdfa6976192e75ebe357d4eab1c6813..72939d429da6899aa72501533f878da2f0c59b02 100644 (file)
@@ -338,7 +338,7 @@ static void adv7511_power_on(struct adv7511 *adv7511)
                 * Still, let's be safe and stick to the documentation.
                 */
                regmap_write(adv7511->regmap, ADV7511_REG_INT_ENABLE(0),
-                            ADV7511_INT0_EDID_READY);
+                            ADV7511_INT0_EDID_READY | ADV7511_INT0_HPD);
                regmap_write(adv7511->regmap, ADV7511_REG_INT_ENABLE(1),
                             ADV7511_INT1_DDC_ERROR);
        }
@@ -846,6 +846,10 @@ static int adv7511_bridge_attach(struct drm_bridge *bridge)
        if (adv->type == ADV7533)
                ret = adv7533_attach_dsi(adv);
 
+       if (adv->i2c_main->irq)
+               regmap_write(adv->regmap, ADV7511_REG_INT_ENABLE(0),
+                            ADV7511_INT0_HPD);
+
        return ret;
 }