--- /dev/null
+From 3587c856675c45809010c2cee5b21096f6e8e938 Mon Sep 17 00:00:00 2001
+From: John Stultz <john.stultz@linaro.org>
+Date: Mon, 16 Jan 2017 16:52:52 -0800
+Subject: drm/bridge: adv7511: Re-write the i2c address before EDID probing
+
+From: John Stultz <john.stultz@linaro.org>
+
+commit 3587c856675c45809010c2cee5b21096f6e8e938 upstream.
+
+I've found that by just turning the chip on and off via the
+POWER_DOWN register, I end up getting i2c_transfer errors on
+HiKey.
+
+Investigating further, it turns out that some of the register
+state in hardware is getting lost, as the device registers are
+reset when the chip is powered down.
+
+Thus this patch simply re-writes the i2c address to the
+ADV7511_REG_EDID_I2C_ADDR register to ensure its properly set
+before we try to read the EDID data.
+
+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
+Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Tested-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+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-7-git-send-email-john.stultz@linaro.org
+Signed-off-by: Nhan Nguyen <nhan.nguyen.yb@renesas.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
++++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+@@ -573,9 +573,17 @@ static int adv7511_get_modes(struct adv7
+ unsigned int count;
+
+ /* Reading the EDID only works if the device is powered */
+- if (!adv7511->powered)
++ if (!adv7511->powered) {
++ unsigned int edid_i2c_addr =
++ (adv7511->i2c_main->addr << 1) + 4;
++
+ __adv7511_power_on(adv7511);
+
++ /* Reset the EDID_I2C_ADDR register as it might be cleared */
++ regmap_write(adv7511->regmap, ADV7511_REG_EDID_I2C_ADDR,
++ edid_i2c_addr);
++ }
++
+ edid = drm_do_get_edid(connector, adv7511_get_edid_block, adv7511);
+
+ if (!adv7511->powered)
--- /dev/null
+From 4226d9b127cf4758ba0e07931b3f0d59f1b1a50c Mon Sep 17 00:00:00 2001
+From: John Stultz <john.stultz@linaro.org>
+Date: Mon, 16 Jan 2017 16:52:51 -0800
+Subject: drm/bridge: adv7511: Reuse __adv7511_power_on/off() when probing EDID
+
+From: John Stultz <john.stultz@linaro.org>
+
+commit 4226d9b127cf4758ba0e07931b3f0d59f1b1a50c upstream.
+
+Thus this patch changes the EDID probing logic so that we
+re-use the __adv7511_power_on/off() calls instead of duplciating
+logic.
+
+This does change behavior slightly as it adds the HPD signal
+pulse to the EDID probe path, but Archit has had a patch to
+add HPD signal pulse to the EDID probe path before, so this
+should address the cases where that helped. Another difference
+is that regcache_mark_dirty() is also called in the power off
+path once EDID is probed.
+
+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
+Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Tested-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+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-6-git-send-email-john.stultz@linaro.org
+Signed-off-by: Nhan Nguyen <nhan.nguyen.yb@renesas.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 17 +++--------------
+ 1 file changed, 3 insertions(+), 14 deletions(-)
+
+--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
++++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+@@ -573,24 +573,13 @@ static int adv7511_get_modes(struct adv7
+ unsigned int count;
+
+ /* Reading the EDID only works if the device is powered */
+- if (!adv7511->powered) {
+- regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER,
+- ADV7511_POWER_POWER_DOWN, 0);
+- if (adv7511->i2c_main->irq) {
+- regmap_write(adv7511->regmap, ADV7511_REG_INT_ENABLE(0),
+- ADV7511_INT0_EDID_READY);
+- regmap_write(adv7511->regmap, ADV7511_REG_INT_ENABLE(1),
+- ADV7511_INT1_DDC_ERROR);
+- }
+- adv7511->current_edid_segment = -1;
+- }
++ if (!adv7511->powered)
++ __adv7511_power_on(adv7511);
+
+ edid = drm_do_get_edid(connector, adv7511_get_edid_block, adv7511);
+
+ if (!adv7511->powered)
+- regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER,
+- ADV7511_POWER_POWER_DOWN,
+- ADV7511_POWER_POWER_DOWN);
++ __adv7511_power_off(adv7511);
+
+ kfree(adv7511->edid);
+ adv7511->edid = edid;
--- /dev/null
+From 651e4769ba2a9f20c4b8a823ae2727bf7fa9c9f0 Mon Sep 17 00:00:00 2001
+From: John Stultz <john.stultz@linaro.org>
+Date: Mon, 16 Jan 2017 16:52:50 -0800
+Subject: drm/bridge: adv7511: Rework adv7511_power_on/off() so they can be reused internally
+
+From: John Stultz <john.stultz@linaro.org>
+
+commit 651e4769ba2a9f20c4b8a823ae2727bf7fa9c9f0 upstream.
+
+In chasing down issues with EDID probing, I found some
+duplicated but incomplete logic used to power the chip on and
+off.
+
+This patch refactors the adv7511_power_on/off functions, so
+they can be used for internal needs.
+
+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
+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-5-git-send-email-john.stultz@linaro.org
+Signed-off-by: Nhan Nguyen <nhan.nguyen.yb@renesas.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 15 +++++++++++----
+ 1 file changed, 11 insertions(+), 4 deletions(-)
+
+--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
++++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+@@ -325,7 +325,7 @@ static void adv7511_set_link_config(stru
+ adv7511->rgb = config->input_colorspace == HDMI_COLORSPACE_RGB;
+ }
+
+-static void adv7511_power_on(struct adv7511 *adv7511)
++static void __adv7511_power_on(struct adv7511 *adv7511)
+ {
+ adv7511->current_edid_segment = -1;
+
+@@ -354,6 +354,11 @@ static void adv7511_power_on(struct adv7
+ regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2,
+ ADV7511_REG_POWER2_HPD_SRC_MASK,
+ ADV7511_REG_POWER2_HPD_SRC_NONE);
++}
++
++static void adv7511_power_on(struct adv7511 *adv7511)
++{
++ __adv7511_power_on(adv7511);
+
+ /*
+ * Most of the registers are reset during power down or when HPD is low.
+@@ -362,21 +367,23 @@ static void adv7511_power_on(struct adv7
+
+ if (adv7511->type == ADV7533)
+ adv7533_dsi_power_on(adv7511);
+-
+ adv7511->powered = true;
+ }
+
+-static void adv7511_power_off(struct adv7511 *adv7511)
++static void __adv7511_power_off(struct adv7511 *adv7511)
+ {
+ /* TODO: setup additional power down modes */
+ regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER,
+ ADV7511_POWER_POWER_DOWN,
+ ADV7511_POWER_POWER_DOWN);
+ regcache_mark_dirty(adv7511->regmap);
++}
+
++static void adv7511_power_off(struct adv7511 *adv7511)
++{
++ __adv7511_power_off(adv7511);
+ if (adv7511->type == ADV7533)
+ adv7533_dsi_power_off(adv7511);
+-
+ adv7511->powered = false;
+ }
+
input-elan_i2c-add-elan060c-to-the-acpi-table.patch
rbd-use-gfp_noio-for-parent-stat-and-data-requests.patch
drm-vmwgfx-fix-ubuntu-17.10-wayland-black-screen-issue.patch
+drm-bridge-adv7511-rework-adv7511_power_on-off-so-they-can-be-reused-internally.patch
+drm-bridge-adv7511-reuse-__adv7511_power_on-off-when-probing-edid.patch
+drm-bridge-adv7511-re-write-the-i2c-address-before-edid-probing.patch