diff options
| author | Paulo Zanoni <paulo.r.zanoni@intel.com> | 2012-05-04 16:18:26 -0400 |
|---|---|---|
| committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-05-08 08:26:45 -0400 |
| commit | 4e89ee174bb2da341bf90a84321c7008a3c9210d (patch) | |
| tree | 67c036d5c839d3a900191737162f0440f748c2c3 /drivers/gpu | |
| parent | 4dc20c0d185132077522dd92a72db79274e13f65 (diff) | |
drm/i915: set the DIP port on ibx_write_infoframe
Just like Gen 4, IBX has a "Port Select" field on the DIP register,
but the ports are different.
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_hdmi.c | 16 |
2 files changed, 17 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index ce6e64dd00ff..4a97db25cd34 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
| @@ -1700,6 +1700,7 @@ | |||
| 1700 | #define VIDEO_DIP_ENABLE (1 << 31) | 1700 | #define VIDEO_DIP_ENABLE (1 << 31) |
| 1701 | #define VIDEO_DIP_PORT_B (1 << 29) | 1701 | #define VIDEO_DIP_PORT_B (1 << 29) |
| 1702 | #define VIDEO_DIP_PORT_C (2 << 29) | 1702 | #define VIDEO_DIP_PORT_C (2 << 29) |
| 1703 | #define VIDEO_DIP_PORT_D (3 << 29) | ||
| 1703 | #define VIDEO_DIP_PORT_MASK (3 << 29) | 1704 | #define VIDEO_DIP_PORT_MASK (3 << 29) |
| 1704 | #define VIDEO_DIP_ENABLE_AVI (1 << 21) | 1705 | #define VIDEO_DIP_ENABLE_AVI (1 << 21) |
| 1705 | #define VIDEO_DIP_ENABLE_VENDOR (2 << 21) | 1706 | #define VIDEO_DIP_ENABLE_VENDOR (2 << 21) |
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index 539073ec56bd..9902904de2ce 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c | |||
| @@ -178,10 +178,26 @@ static void ibx_write_infoframe(struct drm_encoder *encoder, | |||
| 178 | struct drm_i915_private *dev_priv = dev->dev_private; | 178 | struct drm_i915_private *dev_priv = dev->dev_private; |
| 179 | struct drm_crtc *crtc = encoder->crtc; | 179 | struct drm_crtc *crtc = encoder->crtc; |
| 180 | struct intel_crtc *intel_crtc = to_intel_crtc(crtc); | 180 | struct intel_crtc *intel_crtc = to_intel_crtc(crtc); |
| 181 | struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); | ||
| 181 | int reg = TVIDEO_DIP_CTL(intel_crtc->pipe); | 182 | int reg = TVIDEO_DIP_CTL(intel_crtc->pipe); |
| 182 | unsigned i, len = DIP_HEADER_SIZE + frame->len; | 183 | unsigned i, len = DIP_HEADER_SIZE + frame->len; |
| 183 | u32 val = I915_READ(reg); | 184 | u32 val = I915_READ(reg); |
| 184 | 185 | ||
| 186 | val &= ~VIDEO_DIP_PORT_MASK; | ||
| 187 | switch (intel_hdmi->sdvox_reg) { | ||
| 188 | case HDMIB: | ||
| 189 | val |= VIDEO_DIP_PORT_B; | ||
| 190 | break; | ||
| 191 | case HDMIC: | ||
| 192 | val |= VIDEO_DIP_PORT_C; | ||
| 193 | break; | ||
| 194 | case HDMID: | ||
| 195 | val |= VIDEO_DIP_PORT_D; | ||
| 196 | break; | ||
| 197 | default: | ||
| 198 | return; | ||
| 199 | } | ||
| 200 | |||
| 185 | intel_wait_for_vblank(dev, intel_crtc->pipe); | 201 | intel_wait_for_vblank(dev, intel_crtc->pipe); |
| 186 | 202 | ||
| 187 | val &= ~(VIDEO_DIP_SELECT_MASK | 0xf); /* clear DIP data offset */ | 203 | val &= ~(VIDEO_DIP_SELECT_MASK | 0xf); /* clear DIP data offset */ |
