Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Francisco Jerez and committed by
Ben Skeggs
cd2fb2e9 23357e4d

+7 -11
-3
drivers/gpu/drm/nouveau/nv04_dac.c
··· 345 345 { 346 346 struct drm_encoder_helper_funcs *helper = encoder->helper_private; 347 347 struct drm_device *dev = encoder->dev; 348 - struct drm_nouveau_private *dev_priv = dev->dev_private; 349 348 int head = nouveau_crtc(encoder->crtc)->index; 350 - struct nv04_crtc_reg *crtcstate = dev_priv->mode_reg.crtc_reg; 351 349 352 350 helper->dpms(encoder, DRM_MODE_DPMS_OFF); 353 351 354 352 nv04_dfp_disable(dev, head); 355 - crtcstate[head].CRTC[NV_CIO_CRE_LCD__INDEX] = 0; 356 353 } 357 354 358 355 static void nv04_dac_mode_set(struct drm_encoder *encoder,
+3 -1
drivers/gpu/drm/nouveau/nv04_dfp.c
··· 104 104 } 105 105 /* don't inadvertently turn it on when state written later */ 106 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 111 void nv04_dfp_update_fp_control(struct drm_encoder *encoder, int mode) ··· 255 253 256 254 nv04_dfp_prepare_sel_clk(dev, nv_encoder, head); 257 255 258 - *cr_lcd = 0x3; 256 + *cr_lcd = (*cr_lcd & ~NV_CIO_CRE_LCD_ROUTE_MASK) | 0x3; 259 257 260 258 if (nv_two_heads(dev)) { 261 259 if (nv_encoder->dcb->location == DCB_LOC_ON_CHIP)
+2 -4
drivers/gpu/drm/nouveau/nv04_tv.c
··· 99 99 100 100 state->tv_setup = 0; 101 101 102 - if (bind) { 103 - state->CRTC[NV_CIO_CRE_LCD__INDEX] = 0; 102 + if (bind) 104 103 state->CRTC[NV_CIO_CRE_49] |= 0x10; 105 - } else { 104 + else 106 105 state->CRTC[NV_CIO_CRE_49] &= ~0x10; 107 - } 108 106 109 107 NVWriteVgaCrtc(dev, head, NV_CIO_CRE_LCD__INDEX, 110 108 state->CRTC[NV_CIO_CRE_LCD__INDEX]);
+1 -3
drivers/gpu/drm/nouveau/nv17_tv.c
··· 424 424 } 425 425 426 426 if (tv_norm->kind == CTV_ENC_MODE) 427 - *cr_lcd = 0x1 | (head ? 0x0 : 0x8); 428 - else 429 - *cr_lcd = 0; 427 + *cr_lcd |= 0x1 | (head ? 0x0 : 0x8); 430 428 431 429 /* Set the DACCLK register */ 432 430 dacclk = (NVReadRAMDAC(dev, 0, dacclk_off) & ~0x30) | 0x1;
+1
drivers/gpu/drm/nouveau/nvreg.h
··· 263 263 # define NV_CIO_CRE_HCUR_ADDR1_ADR 7:2 264 264 # define NV_CIO_CRE_LCD__INDEX 0x33 265 265 # define NV_CIO_CRE_LCD_LCD_SELECT 0:0 266 + # define NV_CIO_CRE_LCD_ROUTE_MASK 0x3b 266 267 # define NV_CIO_CRE_DDC0_STATUS__INDEX 0x36 267 268 # define NV_CIO_CRE_DDC0_WR__INDEX 0x37 268 269 # define NV_CIO_CRE_ILACE__INDEX 0x39 /* interlace */