summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Deucher <alexdeucher@gmail.com>2009-11-20 16:38:43 -0500
committerAlex Deucher <alexdeucher@gmail.com>2009-11-20 16:38:43 -0500
commit543338842ba7fe7da4902947d386ea1cabd1cdf0 (patch)
tree3f6bedd7e44596798c1019a1f1c77e5393ea3aa6
parentdf35d40d4ec260cdab57a9b36e4e96b2a6c2a827 (diff)
dp fix timing
aux channel atom command table delay is 10 usec units this gets the link training working, but alas, no image.
-rw-r--r--src/atombios_output.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/atombios_output.c b/src/atombios_output.c
index 726b647d..9c2cb92a 100644
--- a/src/atombios_output.c
+++ b/src/atombios_output.c
@@ -1890,7 +1890,7 @@ RADEONProcessAuxCH(xf86OutputPtr output, uint8_t *req_bytes, uint8_t num_bytes,
args.lpDataOut = 16;
args.ucDataOutLen = 0;
args.ucChannelID = radeon_output->ucI2cId;
- args.ucDelay = delay;
+ args.ucDelay = delay / 10; /* 10 usec */
data.exec.index = GetIndexIntoMasterTable(COMMAND, ProcessAuxChannelTransaction);
data.exec.dataSpace = (void *)&space;
@@ -2498,6 +2498,13 @@ static void do_displayport_dance(xf86OutputPtr output, DisplayModePtr mode, Disp
int i;
Bool channel_eq;
+ /* see if the link is trained */
+ if (atom_dp_get_link_status(output, link_status)) {
+ ErrorF("XXXXXXXXXXXXXXXXXX\n");
+ if (dp_channel_eq_ok(link_status, radeon_output->dp_lane_count))
+ return;
+ }
+
ErrorF("Doing displayport DANCE lanes:%d %d\n", num_lane, dp_clock);
ret = radeon_dp_mode_fixup(output, mode, adjusted_mode);
@@ -2551,7 +2558,7 @@ static void do_displayport_dance(xf86OutputPtr output, DisplayModePtr mode, Disp
for (;;) {
usleep(100);
ErrorF("atom_dp_get_link_status\n");
- if (atom_dp_get_link_status(output, link_status))
+ if (!atom_dp_get_link_status(output, link_status))
break;
ErrorF("dp_clock_recovery_ok\n");