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

Commit 3f7c447f authored by Paulo Zanoni's avatar Paulo Zanoni Committed by Daniel Vetter
Browse files

drm/i915: fix pipe DDI mode select



Mask the value before changing it and also select DVI when needed.

DVI was working in cases where the BIOS was setting the correct value
because we were not masking the value before changing it.

Signed-off-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent c96ea64e
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -4302,6 +4302,7 @@
/* Those bits are ignored by pipe EDP since it can only connect to DDI A */
/* Those bits are ignored by pipe EDP since it can only connect to DDI A */
#define  PIPE_DDI_PORT_MASK			(7<<28)
#define  PIPE_DDI_PORT_MASK			(7<<28)
#define  PIPE_DDI_SELECT_PORT(x)		((x)<<28)
#define  PIPE_DDI_SELECT_PORT(x)		((x)<<28)
#define  PIPE_DDI_MODE_SELECT_MASK		(7<<24)
#define  PIPE_DDI_MODE_SELECT_HDMI		(0<<24)
#define  PIPE_DDI_MODE_SELECT_HDMI		(0<<24)
#define  PIPE_DDI_MODE_SELECT_DVI		(1<<24)
#define  PIPE_DDI_MODE_SELECT_DVI		(1<<24)
#define  PIPE_DDI_MODE_SELECT_DP_SST	(2<<24)
#define  PIPE_DDI_MODE_SELECT_DP_SST	(2<<24)
+6 −1
Original line number Original line Diff line number Diff line
@@ -726,13 +726,18 @@ void intel_ddi_mode_set(struct drm_encoder *encoder,
	temp = I915_READ(DDI_FUNC_CTL(pipe));
	temp = I915_READ(DDI_FUNC_CTL(pipe));
	temp &= ~PIPE_DDI_PORT_MASK;
	temp &= ~PIPE_DDI_PORT_MASK;
	temp &= ~PIPE_DDI_BPC_12;
	temp &= ~PIPE_DDI_BPC_12;
	temp &= ~PIPE_DDI_MODE_SELECT_MASK;
	temp |= PIPE_DDI_SELECT_PORT(port) |
	temp |= PIPE_DDI_SELECT_PORT(port) |
			PIPE_DDI_MODE_SELECT_HDMI |
			((intel_crtc->bpp > 24) ?
			((intel_crtc->bpp > 24) ?
				PIPE_DDI_BPC_12 :
				PIPE_DDI_BPC_12 :
				PIPE_DDI_BPC_8) |
				PIPE_DDI_BPC_8) |
			PIPE_DDI_FUNC_ENABLE;
			PIPE_DDI_FUNC_ENABLE;


	if (intel_hdmi->has_hdmi_sink)
		temp |= PIPE_DDI_MODE_SELECT_HDMI;
	else
		temp |= PIPE_DDI_MODE_SELECT_DVI;

	I915_WRITE(DDI_FUNC_CTL(pipe), temp);
	I915_WRITE(DDI_FUNC_CTL(pipe), temp);


	intel_hdmi->set_infoframes(encoder, adjusted_mode);
	intel_hdmi->set_infoframes(encoder, adjusted_mode);