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>
This commit is contained in:
parent
23357e4da0
commit
cd2fb2e9e0
|
@ -345,14 +345,11 @@ static void nv04_dac_prepare(struct drm_encoder *encoder)
|
||||||
{
|
{
|
||||||
struct drm_encoder_helper_funcs *helper = encoder->helper_private;
|
struct drm_encoder_helper_funcs *helper = encoder->helper_private;
|
||||||
struct drm_device *dev = encoder->dev;
|
struct drm_device *dev = encoder->dev;
|
||||||
struct drm_nouveau_private *dev_priv = dev->dev_private;
|
|
||||||
int head = nouveau_crtc(encoder->crtc)->index;
|
int head = nouveau_crtc(encoder->crtc)->index;
|
||||||
struct nv04_crtc_reg *crtcstate = dev_priv->mode_reg.crtc_reg;
|
|
||||||
|
|
||||||
helper->dpms(encoder, DRM_MODE_DPMS_OFF);
|
helper->dpms(encoder, DRM_MODE_DPMS_OFF);
|
||||||
|
|
||||||
nv04_dfp_disable(dev, head);
|
nv04_dfp_disable(dev, head);
|
||||||
crtcstate[head].CRTC[NV_CIO_CRE_LCD__INDEX] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void nv04_dac_mode_set(struct drm_encoder *encoder,
|
static void nv04_dac_mode_set(struct drm_encoder *encoder,
|
||||||
|
|
|
@ -104,6 +104,8 @@ void nv04_dfp_disable(struct drm_device *dev, int head)
|
||||||
}
|
}
|
||||||
/* don't inadvertently turn it on when state written later */
|
/* don't inadvertently turn it on when state written later */
|
||||||
crtcstate[head].fp_control = FP_TG_CONTROL_OFF;
|
crtcstate[head].fp_control = FP_TG_CONTROL_OFF;
|
||||||
|
crtcstate[head].CRTC[NV_CIO_CRE_LCD__INDEX] &=
|
||||||
|
~NV_CIO_CRE_LCD_ROUTE_MASK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void nv04_dfp_update_fp_control(struct drm_encoder *encoder, int mode)
|
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)
|
||||||
|
|
||||||
nv04_dfp_prepare_sel_clk(dev, nv_encoder, head);
|
nv04_dfp_prepare_sel_clk(dev, nv_encoder, head);
|
||||||
|
|
||||||
*cr_lcd = 0x3;
|
*cr_lcd = (*cr_lcd & ~NV_CIO_CRE_LCD_ROUTE_MASK) | 0x3;
|
||||||
|
|
||||||
if (nv_two_heads(dev)) {
|
if (nv_two_heads(dev)) {
|
||||||
if (nv_encoder->dcb->location == DCB_LOC_ON_CHIP)
|
if (nv_encoder->dcb->location == DCB_LOC_ON_CHIP)
|
||||||
|
|
|
@ -99,12 +99,10 @@ static void nv04_tv_bind(struct drm_device *dev, int head, bool bind)
|
||||||
|
|
||||||
state->tv_setup = 0;
|
state->tv_setup = 0;
|
||||||
|
|
||||||
if (bind) {
|
if (bind)
|
||||||
state->CRTC[NV_CIO_CRE_LCD__INDEX] = 0;
|
|
||||||
state->CRTC[NV_CIO_CRE_49] |= 0x10;
|
state->CRTC[NV_CIO_CRE_49] |= 0x10;
|
||||||
} else {
|
else
|
||||||
state->CRTC[NV_CIO_CRE_49] &= ~0x10;
|
state->CRTC[NV_CIO_CRE_49] &= ~0x10;
|
||||||
}
|
|
||||||
|
|
||||||
NVWriteVgaCrtc(dev, head, NV_CIO_CRE_LCD__INDEX,
|
NVWriteVgaCrtc(dev, head, NV_CIO_CRE_LCD__INDEX,
|
||||||
state->CRTC[NV_CIO_CRE_LCD__INDEX]);
|
state->CRTC[NV_CIO_CRE_LCD__INDEX]);
|
||||||
|
|
|
@ -424,9 +424,7 @@ static void nv17_tv_prepare(struct drm_encoder *encoder)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tv_norm->kind == CTV_ENC_MODE)
|
if (tv_norm->kind == CTV_ENC_MODE)
|
||||||
*cr_lcd = 0x1 | (head ? 0x0 : 0x8);
|
*cr_lcd |= 0x1 | (head ? 0x0 : 0x8);
|
||||||
else
|
|
||||||
*cr_lcd = 0;
|
|
||||||
|
|
||||||
/* Set the DACCLK register */
|
/* Set the DACCLK register */
|
||||||
dacclk = (NVReadRAMDAC(dev, 0, dacclk_off) & ~0x30) | 0x1;
|
dacclk = (NVReadRAMDAC(dev, 0, dacclk_off) & ~0x30) | 0x1;
|
||||||
|
|
|
@ -263,6 +263,7 @@
|
||||||
# define NV_CIO_CRE_HCUR_ADDR1_ADR 7:2
|
# define NV_CIO_CRE_HCUR_ADDR1_ADR 7:2
|
||||||
# define NV_CIO_CRE_LCD__INDEX 0x33
|
# define NV_CIO_CRE_LCD__INDEX 0x33
|
||||||
# define NV_CIO_CRE_LCD_LCD_SELECT 0:0
|
# define NV_CIO_CRE_LCD_LCD_SELECT 0:0
|
||||||
|
# define NV_CIO_CRE_LCD_ROUTE_MASK 0x3b
|
||||||
# define NV_CIO_CRE_DDC0_STATUS__INDEX 0x36
|
# define NV_CIO_CRE_DDC0_STATUS__INDEX 0x36
|
||||||
# define NV_CIO_CRE_DDC0_WR__INDEX 0x37
|
# define NV_CIO_CRE_DDC0_WR__INDEX 0x37
|
||||||
# define NV_CIO_CRE_ILACE__INDEX 0x39 /* interlace */
|
# define NV_CIO_CRE_ILACE__INDEX 0x39 /* interlace */
|
||||||
|
|
Loading…
Reference in New Issue