aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorFrancisco Jerez <currojerez@riseup.net>2010-09-28 14:47:58 -0400
committerBen Skeggs <bskeggs@redhat.com>2010-10-04 19:58:43 -0400
commitcd2fb2e9e0a6a3273d353b18e4bdd21cc0482724 (patch)
tree8f356e8abe542f9f873d84a7e4d7845fd0cb2307 /drivers/gpu/drm
parent23357e4da0e1b39c9dfd64a1db0deafc6d70b554 (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.c3
-rw-r--r--drivers/gpu/drm/nouveau/nv04_dfp.c4
-rw-r--r--drivers/gpu/drm/nouveau/nv04_tv.c6
-rw-r--r--drivers/gpu/drm/nouveau/nv17_tv.c4
-rw-r--r--drivers/gpu/drm/nouveau/nvreg.h1
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
358static void nv04_dac_mode_set(struct drm_encoder *encoder, 355static 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
109void nv04_dfp_update_fp_control(struct drm_encoder *encoder, int mode) 111void 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 */