| From 7742ef3f3c05272aa9016765c8ddb36429ff4a88 Mon Sep 17 00:00:00 2001 |
| From: Daniel Vetter <daniel.vetter@ffwll.ch> |
| Date: Tue, 3 Sep 2013 20:40:36 +0200 |
| Subject: drm/i915: handle sdvo input pixel multiplier correctly again |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| The sdvo input timing needs to be the actual mode, the sdvo |
| encoder automatically adjusts for the need of pixel doubling or |
| quadrupling. This was lost in pipe config conversion of the |
| pixel multiplier in |
| |
| commit 6cc5f341b5830541a1b6945435ca90c69b1b8b21 |
| Author: Daniel Vetter <daniel.vetter@ffwll.ch> |
| Date: Wed Mar 27 00:44:53 2013 +0100 |
| |
| drm/i915: add pipe_config->pixel_multiplier |
| |
| While at it ditch the intel_ prefix from the crtc in |
| intel_sdvo_mode_set. |
| |
| Cc: Jesse Barnes <jbarnes@virtuousgeek.org> |
| Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit eeb4793779060e0ae27fc8a85b8dac2ab3620934) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/intel_sdvo.c | 17 +++++++++-------- |
| 1 file changed, 9 insertions(+), 8 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c |
| index 317e058fb3cf..85037b9d4934 100644 |
| --- a/drivers/gpu/drm/i915/intel_sdvo.c |
| +++ b/drivers/gpu/drm/i915/intel_sdvo.c |
| @@ -1151,11 +1151,10 @@ static void intel_sdvo_mode_set(struct intel_encoder *intel_encoder) |
| { |
| struct drm_device *dev = intel_encoder->base.dev; |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| - struct drm_crtc *crtc = intel_encoder->base.crtc; |
| - struct intel_crtc *intel_crtc = to_intel_crtc(crtc); |
| + struct intel_crtc *crtc = to_intel_crtc(intel_encoder->base.crtc); |
| struct drm_display_mode *adjusted_mode = |
| - &intel_crtc->config.adjusted_mode; |
| - struct drm_display_mode *mode = &intel_crtc->config.requested_mode; |
| + &crtc->config.adjusted_mode; |
| + struct drm_display_mode *mode = &crtc->config.requested_mode; |
| struct intel_sdvo *intel_sdvo = to_sdvo(intel_encoder); |
| u32 sdvox; |
| struct intel_sdvo_in_out_map in_out; |
| @@ -1213,13 +1212,15 @@ static void intel_sdvo_mode_set(struct intel_encoder *intel_encoder) |
| * adjusted_mode. |
| */ |
| intel_sdvo_get_dtd_from_mode(&input_dtd, adjusted_mode); |
| + input_dtd.part1.clock /= crtc->config.pixel_multiplier; |
| + |
| if (intel_sdvo->is_tv || intel_sdvo->is_lvds) |
| input_dtd.part2.sdvo_flags = intel_sdvo->dtd_sdvo_flags; |
| if (!intel_sdvo_set_input_timing(intel_sdvo, &input_dtd)) |
| DRM_INFO("Setting input timings on %s failed\n", |
| SDVO_NAME(intel_sdvo)); |
| |
| - switch (intel_crtc->config.pixel_multiplier) { |
| + switch (crtc->config.pixel_multiplier) { |
| default: |
| WARN(1, "unknown pixel mutlipler specified\n"); |
| case 1: rate = SDVO_CLOCK_RATE_MULT_1X; break; |
| @@ -1252,9 +1253,9 @@ static void intel_sdvo_mode_set(struct intel_encoder *intel_encoder) |
| } |
| |
| if (INTEL_PCH_TYPE(dev) >= PCH_CPT) |
| - sdvox |= SDVO_PIPE_SEL_CPT(intel_crtc->pipe); |
| + sdvox |= SDVO_PIPE_SEL_CPT(crtc->pipe); |
| else |
| - sdvox |= SDVO_PIPE_SEL(intel_crtc->pipe); |
| + sdvox |= SDVO_PIPE_SEL(crtc->pipe); |
| |
| if (intel_sdvo->has_hdmi_audio) |
| sdvox |= SDVO_AUDIO_ENABLE; |
| @@ -1264,7 +1265,7 @@ static void intel_sdvo_mode_set(struct intel_encoder *intel_encoder) |
| } else if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev)) { |
| /* done in crtc_mode_set as it lives inside the dpll register */ |
| } else { |
| - sdvox |= (intel_crtc->config.pixel_multiplier - 1) |
| + sdvox |= (crtc->config.pixel_multiplier - 1) |
| << SDVO_PORT_MULTIPLY_SHIFT; |
| } |
| |
| -- |
| 1.8.5.rc3 |
| |