All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH RESEND 1/3] drm: adv7511: really enable interrupts for EDID detection
@ 2016-01-04  2:33 ` Wolfram Sang
  0 siblings, 0 replies; 22+ messages in thread
From: Wolfram Sang @ 2016-01-04  2:33 UTC (permalink / raw)
  To: dri-devel, Laurent Pinchart
  Cc: linux-sh, Magnus Damm, Simon Horman, Geert Uytterhoeven,
	Wolfram Sang, Daniel Vetter, Lars-Peter Clausen,
	Kuninori Morimoto

From: Wolfram Sang <wsa+renesas@sang-engineering.com>

The interrupts for EDID_READY or DDC_ERROR were never enabled in this
driver, so reading EDID always timed out when chip was powered down and
interrupts were used. Fix this and remove clearing the interrupt flags,
they are cleared in POWER_DOWN mode anyhow (according to docs and my
tests).

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
---
 drivers/gpu/drm/i2c/adv7511.c | 25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i2c/adv7511.c b/drivers/gpu/drm/i2c/adv7511.c
index 00416f23b5cb5f..85e994796d96a4 100644
--- a/drivers/gpu/drm/i2c/adv7511.c
+++ b/drivers/gpu/drm/i2c/adv7511.c
@@ -362,12 +362,19 @@ static void adv7511_power_on(struct adv7511 *adv7511)
 {
 	adv7511->current_edid_segment = -1;
 
-	regmap_write(adv7511->regmap, ADV7511_REG_INT(0),
-		     ADV7511_INT0_EDID_READY);
-	regmap_write(adv7511->regmap, ADV7511_REG_INT(1),
-		     ADV7511_INT1_DDC_ERROR);
 	regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER,
 			   ADV7511_POWER_POWER_DOWN, 0);
+	if (adv7511->i2c_main->irq) {
+		/*
+		 * Documentation says the INT_ENABLE registers are reset in
+		 * POWER_DOWN mode. My tests with a 7511w show something else
+		 * but let's stick to the documentation.
+		 */
+		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);
+	}
 
 	/*
 	 * Per spec it is allowed to pulse the HDP signal to indicate that the
@@ -567,12 +574,14 @@ static int adv7511_get_modes(struct drm_encoder *encoder,
 
 	/* Reading the EDID only works if the device is powered */
 	if (!adv7511->powered) {
-		regmap_write(adv7511->regmap, ADV7511_REG_INT(0),
-			     ADV7511_INT0_EDID_READY);
-		regmap_write(adv7511->regmap, ADV7511_REG_INT(1),
-			     ADV7511_INT1_DDC_ERROR);
 		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;
 	}
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2016-01-04 16:11 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-01-04  2:33 [PATCH RESEND 1/3] drm: adv7511: really enable interrupts for EDID detection Wolfram Sang
2016-01-04  2:33 ` Wolfram Sang
2016-01-04  2:33 ` [PATCH RESEND 2/3] drm: adv7511: mark ADV7511_REG_EDID_READ_CTRL volatile Wolfram Sang
2016-01-04  2:33   ` Wolfram Sang
2016-01-04 14:38   ` Laurent Pinchart
2016-01-04 14:38     ` Laurent Pinchart
2016-01-04 16:10     ` Wolfram Sang
2016-01-04 16:10       ` Wolfram Sang
2016-01-04  2:33 ` [PATCH RESEND 3/3] drm: adv7511: it's HPD, not HDP Wolfram Sang
2016-01-04  2:33   ` Wolfram Sang
2016-01-04 14:28   ` Lars-Peter Clausen
2016-01-04 14:28     ` Lars-Peter Clausen
2016-01-04 14:38   ` Laurent Pinchart
2016-01-04 14:38     ` Laurent Pinchart
2016-01-04  6:41 ` [PATCH RESEND 1/3] drm: adv7511: really enable interrupts for EDID detection Archit Taneja
2016-01-04  6:53   ` Archit Taneja
2016-01-04 14:37 ` Laurent Pinchart
2016-01-04 14:37   ` Laurent Pinchart
2016-01-04 14:59   ` Geert Uytterhoeven
2016-01-04 14:59     ` Geert Uytterhoeven
2016-01-04 16:11   ` Wolfram Sang
2016-01-04 16:11     ` Wolfram Sang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.