]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
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)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 26 Aug 2010 23:44:00 +0000 (16:44 -0700)
commit 5786e2c5a3f519647c50bbc276e45d36a704415a upstream.

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>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/gpu/drm/radeon/radeon_i2c.c

index 5def6f5dff38c1f7dfb0357aa5f9f8cc2583576a..0cd2704e9a486ee1886ffd041237c8175558149c 100644 (file)
@@ -95,6 +95,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);