aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_hdmi.c
diff options
context:
space:
mode:
authorChon Ming Lee <chon.ming.lee@intel.com>2013-09-05 08:41:49 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-09-05 09:04:36 -0400
commit5e69f97fb39ea660075e6b65a1de33247b53f9d4 (patch)
treed1fc135073c4fd4336c5ae5fd7ece4022246e447 /drivers/gpu/drm/i915/intel_hdmi.c
parent3c0e234c847318304c12f9e7fffac7e1cf3db3ff (diff)
drm/i915: Add additional pipe parameter for vlv_dpio_read and vlv_dpio_write. v2
The patch doesn't contain functional change, but is to prepare for future platform which has different DPIO phy. The additional pipe parameter will use to select which phy to target for. v2: Update the commit message and add static for the new function. (Jani/Ville) Signed-off-by: Chon Ming Lee <chon.ming.lee@intel.com> Reviewed-by: Jani Nikula <jani.nikula@intel.com> Acked-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_hdmi.c')
-rw-r--r--drivers/gpu/drm/i915/intel_hdmi.c48
1 files changed, 27 insertions, 21 deletions
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 4148cc85bf7f..70c716ed8350 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -1079,35 +1079,35 @@ static void intel_hdmi_pre_enable(struct intel_encoder *encoder)
1079 1079
1080 /* Enable clock channels for this port */ 1080 /* Enable clock channels for this port */
1081 mutex_lock(&dev_priv->dpio_lock); 1081 mutex_lock(&dev_priv->dpio_lock);
1082 val = vlv_dpio_read(dev_priv, DPIO_DATA_LANE_A(port)); 1082 val = vlv_dpio_read(dev_priv, pipe, DPIO_DATA_LANE_A(port));
1083 val = 0; 1083 val = 0;
1084 if (pipe) 1084 if (pipe)
1085 val |= (1<<21); 1085 val |= (1<<21);
1086 else 1086 else
1087 val &= ~(1<<21); 1087 val &= ~(1<<21);
1088 val |= 0x001000c4; 1088 val |= 0x001000c4;
1089 vlv_dpio_write(dev_priv, DPIO_DATA_CHANNEL(port), val); 1089 vlv_dpio_write(dev_priv, pipe, DPIO_DATA_CHANNEL(port), val);
1090 1090
1091 /* HDMI 1.0V-2dB */ 1091 /* HDMI 1.0V-2dB */
1092 vlv_dpio_write(dev_priv, DPIO_TX_OCALINIT(port), 0); 1092 vlv_dpio_write(dev_priv, pipe, DPIO_TX_OCALINIT(port), 0);
1093 vlv_dpio_write(dev_priv, DPIO_TX_SWING_CTL4(port), 1093 vlv_dpio_write(dev_priv, pipe, DPIO_TX_SWING_CTL4(port),
1094 0x2b245f5f); 1094 0x2b245f5f);
1095 vlv_dpio_write(dev_priv, DPIO_TX_SWING_CTL2(port), 1095 vlv_dpio_write(dev_priv, pipe, DPIO_TX_SWING_CTL2(port),
1096 0x5578b83a); 1096 0x5578b83a);
1097 vlv_dpio_write(dev_priv, DPIO_TX_SWING_CTL3(port), 1097 vlv_dpio_write(dev_priv, pipe, DPIO_TX_SWING_CTL3(port),
1098 0x0c782040); 1098 0x0c782040);
1099 vlv_dpio_write(dev_priv, DPIO_TX3_SWING_CTL4(port), 1099 vlv_dpio_write(dev_priv, pipe, DPIO_TX3_SWING_CTL4(port),
1100 0x2b247878); 1100 0x2b247878);
1101 vlv_dpio_write(dev_priv, DPIO_PCS_STAGGER0(port), 0x00030000); 1101 vlv_dpio_write(dev_priv, pipe, DPIO_PCS_STAGGER0(port), 0x00030000);
1102 vlv_dpio_write(dev_priv, DPIO_PCS_CTL_OVER1(port), 1102 vlv_dpio_write(dev_priv, pipe, DPIO_PCS_CTL_OVER1(port),
1103 0x00002000); 1103 0x00002000);
1104 vlv_dpio_write(dev_priv, DPIO_TX_OCALINIT(port), 1104 vlv_dpio_write(dev_priv, pipe, DPIO_TX_OCALINIT(port),
1105 DPIO_TX_OCALINIT_EN); 1105 DPIO_TX_OCALINIT_EN);
1106 1106
1107 /* Program lane clock */ 1107 /* Program lane clock */
1108 vlv_dpio_write(dev_priv, DPIO_PCS_CLOCKBUF0(port), 1108 vlv_dpio_write(dev_priv, pipe, DPIO_PCS_CLOCKBUF0(port),
1109 0x00760018); 1109 0x00760018);
1110 vlv_dpio_write(dev_priv, DPIO_PCS_CLOCKBUF8(port), 1110 vlv_dpio_write(dev_priv, pipe, DPIO_PCS_CLOCKBUF8(port),
1111 0x00400888); 1111 0x00400888);
1112 mutex_unlock(&dev_priv->dpio_lock); 1112 mutex_unlock(&dev_priv->dpio_lock);
1113 1113
@@ -1121,30 +1121,33 @@ static void intel_hdmi_pre_pll_enable(struct intel_encoder *encoder)
1121 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); 1121 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
1122 struct drm_device *dev = encoder->base.dev; 1122 struct drm_device *dev = encoder->base.dev;
1123 struct drm_i915_private *dev_priv = dev->dev_private; 1123 struct drm_i915_private *dev_priv = dev->dev_private;
1124 struct intel_crtc *intel_crtc =
1125 to_intel_crtc(encoder->base.crtc);
1124 int port = vlv_dport_to_channel(dport); 1126 int port = vlv_dport_to_channel(dport);
1127 int pipe = intel_crtc->pipe;
1125 1128
1126 if (!IS_VALLEYVIEW(dev)) 1129 if (!IS_VALLEYVIEW(dev))
1127 return; 1130 return;
1128 1131
1129 /* Program Tx lane resets to default */ 1132 /* Program Tx lane resets to default */
1130 mutex_lock(&dev_priv->dpio_lock); 1133 mutex_lock(&dev_priv->dpio_lock);
1131 vlv_dpio_write(dev_priv, DPIO_PCS_TX(port), 1134 vlv_dpio_write(dev_priv, pipe, DPIO_PCS_TX(port),
1132 DPIO_PCS_TX_LANE2_RESET | 1135 DPIO_PCS_TX_LANE2_RESET |
1133 DPIO_PCS_TX_LANE1_RESET); 1136 DPIO_PCS_TX_LANE1_RESET);
1134 vlv_dpio_write(dev_priv, DPIO_PCS_CLK(port), 1137 vlv_dpio_write(dev_priv, pipe, DPIO_PCS_CLK(port),
1135 DPIO_PCS_CLK_CRI_RXEB_EIOS_EN | 1138 DPIO_PCS_CLK_CRI_RXEB_EIOS_EN |
1136 DPIO_PCS_CLK_CRI_RXDIGFILTSG_EN | 1139 DPIO_PCS_CLK_CRI_RXDIGFILTSG_EN |
1137 (1<<DPIO_PCS_CLK_DATAWIDTH_SHIFT) | 1140 (1<<DPIO_PCS_CLK_DATAWIDTH_SHIFT) |
1138 DPIO_PCS_CLK_SOFT_RESET); 1141 DPIO_PCS_CLK_SOFT_RESET);
1139 1142
1140 /* Fix up inter-pair skew failure */ 1143 /* Fix up inter-pair skew failure */
1141 vlv_dpio_write(dev_priv, DPIO_PCS_STAGGER1(port), 0x00750f00); 1144 vlv_dpio_write(dev_priv, pipe, DPIO_PCS_STAGGER1(port), 0x00750f00);
1142 vlv_dpio_write(dev_priv, DPIO_TX_CTL(port), 0x00001500); 1145 vlv_dpio_write(dev_priv, pipe, DPIO_TX_CTL(port), 0x00001500);
1143 vlv_dpio_write(dev_priv, DPIO_TX_LANE(port), 0x40400000); 1146 vlv_dpio_write(dev_priv, pipe, DPIO_TX_LANE(port), 0x40400000);
1144 1147
1145 vlv_dpio_write(dev_priv, DPIO_PCS_CTL_OVER1(port), 1148 vlv_dpio_write(dev_priv, pipe, DPIO_PCS_CTL_OVER1(port),
1146 0x00002000); 1149 0x00002000);
1147 vlv_dpio_write(dev_priv, DPIO_TX_OCALINIT(port), 1150 vlv_dpio_write(dev_priv, pipe, DPIO_TX_OCALINIT(port),
1148 DPIO_TX_OCALINIT_EN); 1151 DPIO_TX_OCALINIT_EN);
1149 mutex_unlock(&dev_priv->dpio_lock); 1152 mutex_unlock(&dev_priv->dpio_lock);
1150} 1153}
@@ -1153,12 +1156,15 @@ static void intel_hdmi_post_disable(struct intel_encoder *encoder)
1153{ 1156{
1154 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); 1157 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
1155 struct drm_i915_private *dev_priv = encoder->base.dev->dev_private; 1158 struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
1159 struct intel_crtc *intel_crtc =
1160 to_intel_crtc(encoder->base.crtc);
1156 int port = vlv_dport_to_channel(dport); 1161 int port = vlv_dport_to_channel(dport);
1162 int pipe = intel_crtc->pipe;
1157 1163
1158 /* Reset lanes to avoid HDMI flicker (VLV w/a) */ 1164 /* Reset lanes to avoid HDMI flicker (VLV w/a) */
1159 mutex_lock(&dev_priv->dpio_lock); 1165 mutex_lock(&dev_priv->dpio_lock);
1160 vlv_dpio_write(dev_priv, DPIO_PCS_TX(port), 0x00000000); 1166 vlv_dpio_write(dev_priv, pipe, DPIO_PCS_TX(port), 0x00000000);
1161 vlv_dpio_write(dev_priv, DPIO_PCS_CLK(port), 0x00e00060); 1167 vlv_dpio_write(dev_priv, pipe, DPIO_PCS_CLK(port), 0x00e00060);
1162 mutex_unlock(&dev_priv->dpio_lock); 1168 mutex_unlock(&dev_priv->dpio_lock);
1163} 1169}
1164 1170