]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 11 Nov 2017 13:01:27 +0000 (14:01 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 11 Nov 2017 13:01:27 +0000 (14:01 +0100)
added patches:
drm-bridge-adv7511-re-write-the-i2c-address-before-edid-probing.patch
drm-bridge-adv7511-reuse-__adv7511_power_on-off-when-probing-edid.patch
drm-bridge-adv7511-rework-adv7511_power_on-off-so-they-can-be-reused-internally.patch

queue-4.9/drm-bridge-adv7511-re-write-the-i2c-address-before-edid-probing.patch [new file with mode: 0644]
queue-4.9/drm-bridge-adv7511-reuse-__adv7511_power_on-off-when-probing-edid.patch [new file with mode: 0644]
queue-4.9/drm-bridge-adv7511-rework-adv7511_power_on-off-so-they-can-be-reused-internally.patch [new file with mode: 0644]
queue-4.9/series

diff --git a/queue-4.9/drm-bridge-adv7511-re-write-the-i2c-address-before-edid-probing.patch b/queue-4.9/drm-bridge-adv7511-re-write-the-i2c-address-before-edid-probing.patch
new file mode 100644 (file)
index 0000000..066d62f
--- /dev/null
@@ -0,0 +1,60 @@
+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)
diff --git a/queue-4.9/drm-bridge-adv7511-reuse-__adv7511_power_on-off-when-probing-edid.patch b/queue-4.9/drm-bridge-adv7511-reuse-__adv7511_power_on-off-when-probing-edid.patch
new file mode 100644 (file)
index 0000000..746443e
--- /dev/null
@@ -0,0 +1,68 @@
+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;
diff --git a/queue-4.9/drm-bridge-adv7511-rework-adv7511_power_on-off-so-they-can-be-reused-internally.patch b/queue-4.9/drm-bridge-adv7511-rework-adv7511_power_on-off-so-they-can-be-reused-internally.patch
new file mode 100644 (file)
index 0000000..d8ed38e
--- /dev/null
@@ -0,0 +1,82 @@
+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;
+ }
index d234309e15424242626dbedb6b20c1401b743420..64b72d32ea149c45c59ce3f312535e78a031199d 100644 (file)
@@ -77,3 +77,6 @@ mips-ar7-ensure-that-serial-ports-are-properly-set-up.patch
 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