summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Deucher <alexdeucher@gmail.com>2010-08-19 17:04:35 -0400
committerAlex Deucher <alexdeucher@gmail.com>2010-08-19 17:04:35 -0400
commitad8ea1f6e5fcb4f163622cf5eab953ea812b5829 (patch)
treea31d15d7374793a2ca888bab9bdab0fa08878fb7
parentfd686668289258ffaf6b81057545e50612aac6a8 (diff)
DCE3+: switch pads to ddc mode when doing i2c
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>
-rw-r--r--src/radeon_output.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/radeon_output.c b/src/radeon_output.c
index a0a682f8..121be75b 100644
--- a/src/radeon_output.c
+++ b/src/radeon_output.c
@@ -1874,6 +1874,13 @@ RADEONI2CDoLock(xf86OutputPtr output, I2CBusPtr b, int lock_state)
R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3)));
}
+ /* set the pad in ddc mode */
+ if (IS_DCE3_VARIANT) {
+ temp = INREG(pRADEONI2CBus->mask_clk_reg);
+ temp &= ~(1 << 16);
+ OUTREG(pRADEONI2CBus->mask_clk_reg, temp);
+ }
+
temp = INREG(pRADEONI2CBus->a_clk_reg);
temp &= ~(pRADEONI2CBus->a_clk_mask);
OUTREG(pRADEONI2CBus->a_clk_reg, temp);