1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
diff --git a/src/i830_display.c b/src/i830_display.c
index 95ce51e..2c49b43 100644
--- a/src/i830_display.c
+++ b/src/i830_display.c
@@ -376,7 +376,7 @@ void
i830WaitForVblank(ScrnInfoPtr pScreen)
{
/* Wait for 20ms, i.e. one cycle at 50hz. */
- usleep(30000);
+ usleep(21000);
}
void
diff --git a/src/i830_driver.c b/src/i830_driver.c
index 6cd30b2..223967f 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -2303,7 +2303,7 @@ SaveHWState(ScrnInfoPtr pScrn)
static void
i830_dpll_settle(void)
{
- usleep(10000); /* 10 ms *should* be plenty */
+ usleep(150); /* 10 ms *should* be plenty */
}
static Bool
@@ -2325,14 +2325,12 @@ RestoreHWState(ScrnInfoPtr pScrn)
xf86OutputPtr output = xf86_config->output[i];
output->funcs->dpms(output, DPMSModeOff);
}
- i830WaitForVblank(pScrn);
/* Disable pipes */
for (i = 0; i < xf86_config->num_crtc; i++) {
xf86CrtcPtr crtc = xf86_config->crtc[i];
crtc->funcs->dpms(crtc, DPMSModeOff);
}
- i830WaitForVblank(pScrn);
if (IS_MOBILE(pI830) && !IS_I830(pI830))
OUTREG(LVDS, pI830->saveLVDS);
@@ -2422,13 +2420,11 @@ RestoreHWState(ScrnInfoPtr pScrn)
DISPPLANE_SEL_PIPE_A) {
OUTREG(DSPACNTR, pI830->saveDSPACNTR);
OUTREG(DSPABASE, INREG(DSPABASE));
- i830WaitForVblank(pScrn);
}
if ((pI830->saveDSPBCNTR & DISPPLANE_SEL_PIPE_MASK) ==
DISPPLANE_SEL_PIPE_A) {
OUTREG(DSPBCNTR, pI830->saveDSPBCNTR);
OUTREG(DSPBBASE, INREG(DSPBBASE));
- i830WaitForVblank(pScrn);
}
/* See note about pipe programming above */
@@ -2484,13 +2480,11 @@ RestoreHWState(ScrnInfoPtr pScrn)
DISPPLANE_SEL_PIPE_B) {
OUTREG(DSPACNTR, pI830->saveDSPACNTR);
OUTREG(DSPABASE, INREG(DSPABASE));
- i830WaitForVblank(pScrn);
}
if ((pI830->saveDSPBCNTR & DISPPLANE_SEL_PIPE_MASK) ==
DISPPLANE_SEL_PIPE_B) {
OUTREG(DSPBCNTR, pI830->saveDSPBCNTR);
OUTREG(DSPBBASE, INREG(DSPBBASE));
- i830WaitForVblank(pScrn);
}
}
|