| From 2e96206c4f952295e11c311fbb2a7aa2105024af Mon Sep 17 00:00:00 2001 |
| From: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> |
| Date: Wed, 18 Feb 2015 15:19:33 +0200 |
| Subject: drm: adv7511: Fix DDC error interrupt handling |
| |
| From: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> |
| |
| commit 2e96206c4f952295e11c311fbb2a7aa2105024af upstream. |
| |
| The DDC error interrupt bit is located in REG_INT1, not REG_INT0. Update |
| both the interrupt wait code and the interrupt sources reset code |
| accordingly. |
| |
| Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/i2c/adv7511.c | 14 ++++++++++---- |
| 1 file changed, 10 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/gpu/drm/i2c/adv7511.c |
| +++ b/drivers/gpu/drm/i2c/adv7511.c |
| @@ -467,14 +467,16 @@ static int adv7511_get_edid_block(void * |
| block); |
| ret = adv7511_wait_for_interrupt(adv7511, |
| ADV7511_INT0_EDID_READY | |
| - ADV7511_INT1_DDC_ERROR, 200); |
| + (ADV7511_INT1_DDC_ERROR << 8), 200); |
| |
| if (!(ret & ADV7511_INT0_EDID_READY)) |
| return -EIO; |
| } |
| |
| regmap_write(adv7511->regmap, ADV7511_REG_INT(0), |
| - ADV7511_INT0_EDID_READY | ADV7511_INT1_DDC_ERROR); |
| + ADV7511_INT0_EDID_READY); |
| + regmap_write(adv7511->regmap, ADV7511_REG_INT(1), |
| + ADV7511_INT1_DDC_ERROR); |
| |
| /* Break this apart, hopefully more I2C controllers will |
| * support 64 byte transfers than 256 byte transfers |
| @@ -528,7 +530,9 @@ static int adv7511_get_modes(struct drm_ |
| /* Reading the EDID only works if the device is powered */ |
| if (adv7511->dpms_mode != DRM_MODE_DPMS_ON) { |
| regmap_write(adv7511->regmap, ADV7511_REG_INT(0), |
| - ADV7511_INT0_EDID_READY | ADV7511_INT1_DDC_ERROR); |
| + 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); |
| adv7511->current_edid_segment = -1; |
| @@ -563,7 +567,9 @@ static void adv7511_encoder_dpms(struct |
| adv7511->current_edid_segment = -1; |
| |
| regmap_write(adv7511->regmap, ADV7511_REG_INT(0), |
| - ADV7511_INT0_EDID_READY | ADV7511_INT1_DDC_ERROR); |
| + 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); |
| /* |