--- linux-3.3/drivers/gpu/drm/i915/intel_hdmi.c-original-broken 2012-04-01 15:05:32.916957387 +0200 +++ linux-3.2.5/drivers/gpu/drm/i915/intel_hdmi.c 2012-02-07 10:24:34.626153154 +0100 @@ -69,7 +69,8 @@ frame->checksum = 0; frame->ecc = 0; - for (i = 0; i < frame->len + DIP_HEADER_SIZE; i++) + /* Header isn't part of the checksum */ + for (i = 5; i < frame->len; i++) sum += data[i]; frame->checksum = 0x100 - sum; @@ -103,7 +104,7 @@ flags |= VIDEO_DIP_ENABLE_AVI | VIDEO_DIP_FREQ_VSYNC; break; case DIP_TYPE_SPD: - flags |= VIDEO_DIP_ENABLE_SPD | VIDEO_DIP_FREQ_VSYNC; + flags |= VIDEO_DIP_ENABLE_SPD | VIDEO_DIP_FREQ_2VSYNC; break; default: DRM_DEBUG_DRIVER("unknown info frame type %d\n", frame->type); @@ -164,9 +165,9 @@ flags = intel_infoframe_index(frame); - val &= ~(VIDEO_DIP_SELECT_MASK | 0xf); /* clear DIP data offset */ + val &= ~VIDEO_DIP_SELECT_MASK; - I915_WRITE(reg, VIDEO_DIP_ENABLE | val | flags); + I915_WRITE(reg, val | flags); for (i = 0; i < len; i += 4) { I915_WRITE(TVIDEO_DIP_DATA(intel_crtc->pipe), *data); @@ -269,10 +270,6 @@ struct drm_i915_private *dev_priv = dev->dev_private; struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); u32 temp; - u32 enable_bits = SDVO_ENABLE; - - if (intel_hdmi->has_audio) - enable_bits |= SDVO_AUDIO_ENABLE; temp = I915_READ(intel_hdmi->sdvox_reg); @@ -285,9 +282,9 @@ } if (mode != DRM_MODE_DPMS_ON) { - temp &= ~enable_bits; + temp &= ~SDVO_ENABLE; } else { - temp |= enable_bits; + temp |= SDVO_ENABLE; } I915_WRITE(intel_hdmi->sdvox_reg, temp); @@ -490,7 +487,6 @@ struct intel_encoder *intel_encoder; struct intel_connector *intel_connector; struct intel_hdmi *intel_hdmi; - int i; intel_hdmi = kzalloc(sizeof(struct intel_hdmi), GFP_KERNEL); if (!intel_hdmi) @@ -543,14 +539,10 @@ intel_hdmi->sdvox_reg = sdvox_reg; - if (!HAS_PCH_SPLIT(dev)) { + if (!HAS_PCH_SPLIT(dev)) intel_hdmi->write_infoframe = i9xx_write_infoframe; - I915_WRITE(VIDEO_DIP_CTL, 0); - } else { + else intel_hdmi->write_infoframe = ironlake_write_infoframe; - for_each_pipe(i) - I915_WRITE(TVIDEO_DIP_CTL(i), 0); - } drm_encoder_helper_add(&intel_encoder->base, &intel_hdmi_helper_funcs);