diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-06-04 12:39:19 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-06-04 15:27:47 -0400 |
commit | 94bf2cedbc22f8952ebbbaa085620d7d0328fced (patch) | |
tree | ea1029486ceb8d3f515c178b9c80aa93816a4d92 /drivers/gpu | |
parent | 30dfebf34b9930277d83b25ec740510007cc4c6d (diff) |
drm/i915: compute the target_clock for edp directly
... instead of abusing mode->clock by storing it in there - we
shouldn't touch that one at all. This patch is the first prep step to
constify the mode argument of the intel_dp_mode_fixup function.
The next patch will stop us from modifying mode->clock.
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 16 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 12 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 2 |
3 files changed, 22 insertions, 8 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 9f5148acf73c..0161d947ab81 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -4416,16 +4416,8 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc, | |||
4416 | /* CPU eDP doesn't require FDI link, so just set DP M/N | 4416 | /* CPU eDP doesn't require FDI link, so just set DP M/N |
4417 | according to current link config */ | 4417 | according to current link config */ |
4418 | if (is_cpu_edp) { | 4418 | if (is_cpu_edp) { |
4419 | target_clock = mode->clock; | ||
4420 | intel_edp_link_config(edp_encoder, &lane, &link_bw); | 4419 | intel_edp_link_config(edp_encoder, &lane, &link_bw); |
4421 | } else { | 4420 | } else { |
4422 | /* [e]DP over FDI requires target mode clock | ||
4423 | instead of link clock */ | ||
4424 | if (is_dp) | ||
4425 | target_clock = mode->clock; | ||
4426 | else | ||
4427 | target_clock = adjusted_mode->clock; | ||
4428 | |||
4429 | /* FDI is a binary signal running at ~2.7GHz, encoding | 4421 | /* FDI is a binary signal running at ~2.7GHz, encoding |
4430 | * each output octet as 10 bits. The actual frequency | 4422 | * each output octet as 10 bits. The actual frequency |
4431 | * is stored as a divider into a 100MHz clock, and the | 4423 | * is stored as a divider into a 100MHz clock, and the |
@@ -4436,6 +4428,14 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc, | |||
4436 | link_bw = intel_fdi_link_freq(dev) * MHz(100)/KHz(1)/10; | 4428 | link_bw = intel_fdi_link_freq(dev) * MHz(100)/KHz(1)/10; |
4437 | } | 4429 | } |
4438 | 4430 | ||
4431 | /* [e]DP over FDI requires target mode clock instead of link clock. */ | ||
4432 | if (edp_encoder) | ||
4433 | target_clock = intel_edp_target_clock(edp_encoder, mode); | ||
4434 | else if (is_dp) | ||
4435 | target_clock = mode->clock; | ||
4436 | else | ||
4437 | target_clock = adjusted_mode->clock; | ||
4438 | |||
4439 | /* determine panel color depth */ | 4439 | /* determine panel color depth */ |
4440 | temp = I915_READ(PIPECONF(pipe)); | 4440 | temp = I915_READ(PIPECONF(pipe)); |
4441 | temp &= ~PIPE_BPC_MASK; | 4441 | temp &= ~PIPE_BPC_MASK; |
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index ade98e0bca84..ae7c62340129 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
@@ -152,6 +152,18 @@ intel_edp_link_config(struct intel_encoder *intel_encoder, | |||
152 | *link_bw = 270000; | 152 | *link_bw = 270000; |
153 | } | 153 | } |
154 | 154 | ||
155 | int | ||
156 | intel_edp_target_clock(struct intel_encoder *intel_encoder, | ||
157 | struct drm_display_mode *mode) | ||
158 | { | ||
159 | struct intel_dp *intel_dp = container_of(intel_encoder, struct intel_dp, base); | ||
160 | |||
161 | if (intel_dp->panel_fixed_mode) | ||
162 | return intel_dp->panel_fixed_mode->clock; | ||
163 | else | ||
164 | return mode->clock; | ||
165 | } | ||
166 | |||
155 | static int | 167 | static int |
156 | intel_dp_max_lane_count(struct intel_dp *intel_dp) | 168 | intel_dp_max_lane_count(struct intel_dp *intel_dp) |
157 | { | 169 | { |
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 39d7b07c1e8b..6a2ae30ee519 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
@@ -359,6 +359,8 @@ intel_dp_set_m_n(struct drm_crtc *crtc, struct drm_display_mode *mode, | |||
359 | struct drm_display_mode *adjusted_mode); | 359 | struct drm_display_mode *adjusted_mode); |
360 | extern bool intel_dpd_is_edp(struct drm_device *dev); | 360 | extern bool intel_dpd_is_edp(struct drm_device *dev); |
361 | extern void intel_edp_link_config(struct intel_encoder *, int *, int *); | 361 | extern void intel_edp_link_config(struct intel_encoder *, int *, int *); |
362 | extern int intel_edp_target_clock(struct intel_encoder *, | ||
363 | struct drm_display_mode *mode); | ||
362 | extern bool intel_encoder_is_pch_edp(struct drm_encoder *encoder); | 364 | extern bool intel_encoder_is_pch_edp(struct drm_encoder *encoder); |
363 | extern int intel_plane_init(struct drm_device *dev, enum pipe pipe); | 365 | extern int intel_plane_init(struct drm_device *dev, enum pipe pipe); |
364 | extern void intel_flush_display_plane(struct drm_i915_private *dev_priv, | 366 | extern void intel_flush_display_plane(struct drm_i915_private *dev_priv, |