[Intel-gfx] [RFC 09/30] drm/i915: add DP support to intel_ddi_pll_mode_set
Paulo Zanoni
przanoni at gmail.com
Wed Aug 29 00:06:40 CEST 2012
From: Paulo Zanoni <paulo.r.zanoni at intel.com>
Signed-off-by: Paulo Zanoni <paulo.r.zanoni at intel.com>
---
drivers/gpu/drm/i915/intel_ddi.c | 39 ++++++++++++++++++++++++++++++++++-----
1 file changed, 34 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 33b3a75..dd28e35 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -642,18 +642,23 @@ bool intel_ddi_pll_mode_set(struct drm_crtc *crtc)
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_encoder *intel_encoder;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
- bool is_hdmi = false, is_crt = false;
- int port, i, to_use, num_encoders = 0;
+ bool is_hdmi = false, is_crt = false, is_dp = false;
+ int port = I915_MAX_PORTS, i, to_use, num_encoders = 0;
bool wrpll_used[] = {false, false};
bool spll_used = false;
uint32_t wrpll_reg[] = {WRPLL_CTL1, WRPLL_CTL2};
uint32_t wrpll_sel[] = {PORT_CLK_SEL_WRPLL1, PORT_CLK_SEL_WRPLL2};
uint32_t temp;
+ struct intel_dp *intel_dp = NULL;
+ struct intel_hdmi *intel_hdmi = NULL;
for_each_encoder_on_crtc(dev, crtc, intel_encoder) {
- struct intel_hdmi *intel_hdmi;
-
switch (intel_encoder->type) {
+ case INTEL_OUTPUT_DISPLAYPORT:
+ is_dp = true;
+ intel_dp = enc_to_intel_dp(&intel_encoder->base);
+ port = intel_dp->port;
+ break;
case INTEL_OUTPUT_HDMI:
is_hdmi = true;
intel_hdmi = enc_to_intel_hdmi(&intel_encoder->base);
@@ -678,6 +683,11 @@ bool intel_ddi_pll_mode_set(struct drm_crtc *crtc)
return false;
}
+ if (port == I915_MAX_PORTS) {
+ WARN(1, "No port selected\n");
+ return false;
+ }
+
for (i = PORT_A; i <= PORT_E; i++) {
if (i == port)
continue;
@@ -695,7 +705,26 @@ bool intel_ddi_pll_mode_set(struct drm_crtc *crtc)
}
}
- if (is_hdmi) {
+ if (is_dp) {
+ switch (intel_dp->link_bw) {
+ case DP_LINK_BW_1_62:
+ temp = PORT_CLK_SEL_LCPLL_810;
+ break;
+ case DP_LINK_BW_2_7:
+ temp = PORT_CLK_SEL_LCPLL_1350;
+ break;
+ case DP_LINK_BW_5_4:
+ temp = PORT_CLK_SEL_LCPLL_2700;
+ break;
+ default:
+ DRM_ERROR("Link bandwidth %d unsupported\n",
+ intel_dp->link_bw);
+ return false;
+ }
+
+ I915_WRITE(PORT_CLK_SEL(port), temp);
+
+ } else if (is_hdmi) {
int p, n2, r2;
for (i = 0; i < ARRAY_SIZE(wrpll_reg); i++)
--
1.7.11.2
More information about the Intel-gfx
mailing list