forked from Minki/linux
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: Paulo Zanoni <paulo.r.zanoni@intel.com> Reviewed-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
c96ea64ebb
commit
3f7c447faa
@ -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)
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user