summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEgbert Eich <eich@freedesktop.org>2009-11-06 13:15:04 +0100
committerEgbert Eich <eich@freedesktop.org>2009-11-06 13:15:04 +0100
commitaf5f1e1abc11a2182705527421c30ad99b7dc60e (patch)
tree56d54391bff895091a539d98d774c0b8e11b3180
parenta76cee0a96f25ef229fb0d6fbf6dbe535845e6f8 (diff)
I2C: Fix I2C readout.
The Radeon driver attempts to save/restore the hw scaler registers by reading/writing the range of registers which address the video scaler. While doing so it also touches the TAP Control index/data registers. Uncontrolled touching of the data register seems to have an adverse effect on the ability to run HW supported I2C read out. This running RadeonHD after running the Radeon driver results in no DDC data. The reason for this has not been understood however it has been found experimentally that reading back the scaler data register is able to 'fix' this issue. We put this hacky workaround in the code until we obtain a better understanding of the issue.
-rw-r--r--src/rhd_i2c.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/rhd_i2c.c b/src/rhd_i2c.c
index b59f3d4..0d3553b 100644
--- a/src/rhd_i2c.c
+++ b/src/rhd_i2c.c
@@ -1365,6 +1365,13 @@ rhdInitI2C(int scrnIndex)
}
I2CList[i] = I2CPtr;
}
+ /*
+ * This magic is needed to pry loose the scaler which appears to affect hardware controlled
+ * I2C readout ?!? after the radeon driver has erronously tried to restore this multi tap data
+ * register. I put this here for now before I find a better place for it.
+ */
+ RHDRegRead(rhdPtr, 0x657C);
+
return I2CList;
error:
rhdTearDownI2C(I2CList);