Patch "drm: adv7511: really enable interrupts for EDID detection" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
drm: adv7511: really enable interrupts for EDID detection
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
drm-adv7511-really-enable-interrupts-for-edid-detection.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
d0be8584b01160eb6f49e77f8e9c1da286bb4ffbMon Sep 17 00:00:00 2001
From: Wolfram Sang <[email protected]>
Date: Mon, 4 Jan 2016 03:33:45 +0100
Subject: drm: adv7511: really enable interrupts for EDID detection
From: Wolfram Sang <[email protected]>
commit d0be8584b01160eb6f49e77f8e9c1da286bb4ffb upstream.
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 also remove clearing the interrupt flags, they are cleared in POWER_DOWN mode anyhow (unlike the interrupt enable flags) according to docs and my tests.
--- drivers/gpu/drm/i2c/adv7511.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-)
drivers/gpu/drm/i2c/adv7511.c +17 -8
@@ -362,12 +362,19 @@ static void adv7511_power_on(struct adv7 { 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 7511w preserved the bits, however. +* Still, let's be safe and 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_/* 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 ; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/drm-bridge-adv7511-use-work_struct-to-defer-hotplug-handing-to-out-of-irq-context.patch queue-4.4/drm-bridge-adv7511-re-write-the-i2c-address-before-edid-probing.patch queue-4.4/drm-adv7511-really-enable-interrupts-for-edid-detection.patch queue-4.4/drm-bridge-adv7511-switch-to-using-drm_kms_helper_hotplug_event.patch