drm/radeon/kms/DCE3+: switch pads to ddc mode when going i2c
authorAlex Deucher <alexdeucher@gmail.com>
Thu, 19 Aug 2010 15:19:31 +0000 (11:19 -0400)
committerDave Airlie <airlied@redhat.com>
Thu, 19 Aug 2010 22:46:46 +0000 (08:46 +1000)
The pins for ddc and aux are shared so you need to switch the
mode when doing ddc.  The ProcessAuxChannel table already sets
the pin mode to DP.  This should fix unreliable ddc issues
on DP ports using non-DP monitors.

Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Cc: stable@kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/radeon/radeon_i2c.c

index bfd2ce5f53728dd322767ec186cda77993215f24..0416804d8f3010f7d0451e17e5c2428eecba3d51 100644 (file)
@@ -99,6 +99,13 @@ static void radeon_i2c_do_lock(struct radeon_i2c_chan *i2c, int lock_state)
                }
        }
 
+       /* switch the pads to ddc mode */
+       if (ASIC_IS_DCE3(rdev) && rec->hw_capable) {
+               temp = RREG32(rec->mask_clk_reg);
+               temp &= ~(1 << 16);
+               WREG32(rec->mask_clk_reg, temp);
+       }
+
        /* clear the output pin values */
        temp = RREG32(rec->a_clk_reg) & ~rec->a_clk_mask;
        WREG32(rec->a_clk_reg, temp);