diff options
author | Francisco Jerez <currojerez@riseup.net> | 2010-09-28 14:47:58 -0400 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2010-10-04 19:58:43 -0400 |
commit | cd2fb2e9e0a6a3273d353b18e4bdd21cc0482724 (patch) | |
tree | 8f356e8abe542f9f873d84a7e4d7845fd0cb2307 /drivers/gpu/drm | |
parent | 23357e4da0e1b39c9dfd64a1db0deafc6d70b554 (diff) |
drm/nv0x-nv4x: Leave the 0x40 bit untouched when changing CRE_LCD.
It's an unrelated PLL filtering control bit, leave it alone when
changing the CRTC-encoder binding.
Signed-off-by: Francisco Jerez <currojerez@riseup.net>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r-- | drivers/gpu/drm/nouveau/nv04_dac.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nv04_dfp.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nv04_tv.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nv17_tv.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nvreg.h | 1 |
5 files changed, 7 insertions, 11 deletions
diff --git a/drivers/gpu/drm/nouveau/nv04_dac.c b/drivers/gpu/drm/nouveau/nv04_dac.c index 9cc560c792a4..ba6423f2ffcc 100644 --- a/drivers/gpu/drm/nouveau/nv04_dac.c +++ b/drivers/gpu/drm/nouveau/nv04_dac.c | |||
@@ -345,14 +345,11 @@ static void nv04_dac_prepare(struct drm_encoder *encoder) | |||
345 | { | 345 | { |
346 | struct drm_encoder_helper_funcs *helper = encoder->helper_private; | 346 | struct drm_encoder_helper_funcs *helper = encoder->helper_private; |
347 | struct drm_device *dev = encoder->dev; | 347 | struct drm_device *dev = encoder->dev; |
348 | struct drm_nouveau_private *dev_priv = dev->dev_private; | ||
349 | int head = nouveau_crtc(encoder->crtc)->index; | 348 | int head = nouveau_crtc(encoder->crtc)->index; |
350 | struct nv04_crtc_reg *crtcstate = dev_priv->mode_reg.crtc_reg; | ||
351 | 349 | ||
352 | helper->dpms(encoder, DRM_MODE_DPMS_OFF); | 350 | helper->dpms(encoder, DRM_MODE_DPMS_OFF); |
353 | 351 | ||
354 | nv04_dfp_disable(dev, head); | 352 | nv04_dfp_disable(dev, head); |
355 | crtcstate[head].CRTC[NV_CIO_CRE_LCD__INDEX] = 0; | ||
356 | } | 353 | } |
357 | 354 | ||
358 | static void nv04_dac_mode_set(struct drm_encoder *encoder, | 355 | static void nv04_dac_mode_set(struct drm_encoder *encoder, |
diff --git a/drivers/gpu/drm/nouveau/nv04_dfp.c b/drivers/gpu/drm/nouveau/nv04_dfp.c index 4b4f9aabde70..c936403b26e2 100644 --- a/drivers/gpu/drm/nouveau/nv04_dfp.c +++ b/drivers/gpu/drm/nouveau/nv04_dfp.c | |||
@@ -104,6 +104,8 @@ void nv04_dfp_disable(struct drm_device *dev, int head) | |||
104 | } | 104 | } |
105 | /* don't inadvertently turn it on when state written later */ | 105 | /* don't inadvertently turn it on when state written later */ |
106 | crtcstate[head].fp_control = FP_TG_CONTROL_OFF; | 106 | crtcstate[head].fp_control = FP_TG_CONTROL_OFF; |
107 | crtcstate[head].CRTC[NV_CIO_CRE_LCD__INDEX] &= | ||
108 | ~NV_CIO_CRE_LCD_ROUTE_MASK; | ||
107 | } | 109 | } |
108 | 110 | ||
109 | void nv04_dfp_update_fp_control(struct drm_encoder *encoder, int mode) | 111 | void nv04_dfp_update_fp_control(struct drm_encoder *encoder, int mode) |
@@ -253,7 +255,7 @@ static void nv04_dfp_prepare(struct drm_encoder *encoder) | |||
253 | 255 | ||
254 | nv04_dfp_prepare_sel_clk(dev, nv_encoder, head); | 256 | nv04_dfp_prepare_sel_clk(dev, nv_encoder, head); |
255 | 257 | ||
256 | *cr_lcd = 0x3; | 258 | *cr_lcd = (*cr_lcd & ~NV_CIO_CRE_LCD_ROUTE_MASK) | 0x3; |
257 | 259 | ||
258 | if (nv_two_heads(dev)) { | 260 | if (nv_two_heads(dev)) { |
259 | if (nv_encoder->dcb->location == DCB_LOC_ON_CHIP) | 261 | if (nv_encoder->dcb->location == DCB_LOC_ON_CHIP) |
diff --git a/drivers/gpu/drm/nouveau/nv04_tv.c b/drivers/gpu/drm/nouveau/nv04_tv.c index c8dc8a376ad9..3eb605ddfd03 100644 --- a/drivers/gpu/drm/nouveau/nv04_tv.c +++ b/drivers/gpu/drm/nouveau/nv04_tv.c | |||
@@ -99,12 +99,10 @@ static void nv04_tv_bind(struct drm_device *dev, int head, bool bind) | |||
99 | 99 | ||
100 | state->tv_setup = 0; | 100 | state->tv_setup = 0; |
101 | 101 | ||
102 | if (bind) { | 102 | if (bind) |
103 | state->CRTC[NV_CIO_CRE_LCD__INDEX] = 0; | ||
104 | state->CRTC[NV_CIO_CRE_49] |= 0x10; | 103 | state->CRTC[NV_CIO_CRE_49] |= 0x10; |
105 | } else { | 104 | else |
106 | state->CRTC[NV_CIO_CRE_49] &= ~0x10; | 105 | state->CRTC[NV_CIO_CRE_49] &= ~0x10; |
107 | } | ||
108 | 106 | ||
109 | NVWriteVgaCrtc(dev, head, NV_CIO_CRE_LCD__INDEX, | 107 | NVWriteVgaCrtc(dev, head, NV_CIO_CRE_LCD__INDEX, |
110 | state->CRTC[NV_CIO_CRE_LCD__INDEX]); | 108 | state->CRTC[NV_CIO_CRE_LCD__INDEX]); |
diff --git a/drivers/gpu/drm/nouveau/nv17_tv.c b/drivers/gpu/drm/nouveau/nv17_tv.c index a3b886166302..28119fd19d03 100644 --- a/drivers/gpu/drm/nouveau/nv17_tv.c +++ b/drivers/gpu/drm/nouveau/nv17_tv.c | |||
@@ -424,9 +424,7 @@ static void nv17_tv_prepare(struct drm_encoder *encoder) | |||
424 | } | 424 | } |
425 | 425 | ||
426 | if (tv_norm->kind == CTV_ENC_MODE) | 426 | if (tv_norm->kind == CTV_ENC_MODE) |
427 | *cr_lcd = 0x1 | (head ? 0x0 : 0x8); | 427 | *cr_lcd |= 0x1 | (head ? 0x0 : 0x8); |
428 | else | ||
429 | *cr_lcd = 0; | ||
430 | 428 | ||
431 | /* Set the DACCLK register */ | 429 | /* Set the DACCLK register */ |
432 | dacclk = (NVReadRAMDAC(dev, 0, dacclk_off) & ~0x30) | 0x1; | 430 | dacclk = (NVReadRAMDAC(dev, 0, dacclk_off) & ~0x30) | 0x1; |
diff --git a/drivers/gpu/drm/nouveau/nvreg.h b/drivers/gpu/drm/nouveau/nvreg.h index ad64673ace1f..881f8a585613 100644 --- a/drivers/gpu/drm/nouveau/nvreg.h +++ b/drivers/gpu/drm/nouveau/nvreg.h | |||
@@ -263,6 +263,7 @@ | |||
263 | # define NV_CIO_CRE_HCUR_ADDR1_ADR 7:2 | 263 | # define NV_CIO_CRE_HCUR_ADDR1_ADR 7:2 |
264 | # define NV_CIO_CRE_LCD__INDEX 0x33 | 264 | # define NV_CIO_CRE_LCD__INDEX 0x33 |
265 | # define NV_CIO_CRE_LCD_LCD_SELECT 0:0 | 265 | # define NV_CIO_CRE_LCD_LCD_SELECT 0:0 |
266 | # define NV_CIO_CRE_LCD_ROUTE_MASK 0x3b | ||
266 | # define NV_CIO_CRE_DDC0_STATUS__INDEX 0x36 | 267 | # define NV_CIO_CRE_DDC0_STATUS__INDEX 0x36 |
267 | # define NV_CIO_CRE_DDC0_WR__INDEX 0x37 | 268 | # define NV_CIO_CRE_DDC0_WR__INDEX 0x37 |
268 | # define NV_CIO_CRE_ILACE__INDEX 0x39 /* interlace */ | 269 | # define NV_CIO_CRE_ILACE__INDEX 0x39 /* interlace */ |