Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fbe36a7a authored by Ben Skeggs's avatar Ben Skeggs Committed by Dave Airlie
Browse files

drm/nv50: ignore vbios table's claim to the contrary if EDID says >8bpc



Should fix dim panel issues reported on Dell M6400/M6500.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent aeca15e5
Loading
Loading
Loading
Loading
+17 −0
Original line number Original line Diff line number Diff line
@@ -690,9 +690,21 @@ nv50_display_script_select(struct drm_device *dev, struct dcb_entry *dcbent,
			   int pxclk)
			   int pxclk)
{
{
	struct drm_nouveau_private *dev_priv = dev->dev_private;
	struct drm_nouveau_private *dev_priv = dev->dev_private;
	struct nouveau_connector *nv_connector = NULL;
	struct drm_encoder *encoder;
	struct nvbios *bios = &dev_priv->VBIOS;
	struct nvbios *bios = &dev_priv->VBIOS;
	uint32_t mc, script = 0, or;
	uint32_t mc, script = 0, or;


	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
		struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);

		if (nv_encoder->dcb != dcbent)
			continue;

		nv_connector = nouveau_encoder_connector_get(nv_encoder);
		break;
	}

	or = ffs(dcbent->or) - 1;
	or = ffs(dcbent->or) - 1;
	mc = nv50_display_mode_ctrl(dev, dcbent->type != OUTPUT_ANALOG, or);
	mc = nv50_display_mode_ctrl(dev, dcbent->type != OUTPUT_ANALOG, or);
	switch (dcbent->type) {
	switch (dcbent->type) {
@@ -711,6 +723,11 @@ nv50_display_script_select(struct drm_device *dev, struct dcb_entry *dcbent,
			} else
			} else
			if (bios->fp.strapless_is_24bit & 1)
			if (bios->fp.strapless_is_24bit & 1)
				script |= 0x0200;
				script |= 0x0200;

			if (nv_connector && nv_connector->edid &&
			    (nv_connector->edid->revision >= 4) &&
			    (nv_connector->edid->input & 0x70) >= 0x20)
				script |= 0x0200;
		}
		}


		if (nouveau_uscript_lvds >= 0) {
		if (nouveau_uscript_lvds >= 0) {