aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2012-06-04 12:39:19 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2012-06-04 15:27:47 -0400
commit94bf2cedbc22f8952ebbbaa085620d7d0328fced (patch)
treeea1029486ceb8d3f515c178b9c80aa93816a4d92 /drivers/gpu
parent30dfebf34b9930277d83b25ec740510007cc4c6d (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.c16
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c12
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h2
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
155int
156intel_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
155static int 167static int
156intel_dp_max_lane_count(struct intel_dp *intel_dp) 168intel_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);
360extern bool intel_dpd_is_edp(struct drm_device *dev); 360extern bool intel_dpd_is_edp(struct drm_device *dev);
361extern void intel_edp_link_config(struct intel_encoder *, int *, int *); 361extern void intel_edp_link_config(struct intel_encoder *, int *, int *);
362extern int intel_edp_target_clock(struct intel_encoder *,
363 struct drm_display_mode *mode);
362extern bool intel_encoder_is_pch_edp(struct drm_encoder *encoder); 364extern bool intel_encoder_is_pch_edp(struct drm_encoder *encoder);
363extern int intel_plane_init(struct drm_device *dev, enum pipe pipe); 365extern int intel_plane_init(struct drm_device *dev, enum pipe pipe);
364extern void intel_flush_display_plane(struct drm_i915_private *dev_priv, 366extern void intel_flush_display_plane(struct drm_i915_private *dev_priv,