aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915
diff options
context:
space:
mode:
authorPaulo Zanoni <paulo.r.zanoni@intel.com>2013-11-03 00:07:42 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-11-08 12:09:57 -0500
commit300644c7dc4699fe9afb61b280aa5ed7109a4d93 (patch)
tree4ceda05aac58d005a970ec5a0fedb20381edabe8 /drivers/gpu/drm/i915
parente58623cb65dfa40f0ed9f6f9ddbca91aee3c9bd2 (diff)
drm/i915/bdw: add BDW DDI buf translations for eDP
Broadwell has different DDI buffer translations for eDP and DP, so add support for the missing eDP and keep Haswell the same. A future patch addresses the suggestion from Art to check for eDP on port D and use the eDP values there, too. v2: Make checkpatch happy. Reviewed-by: Art Runyan <arthur.j.runyan@intel.com> Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> (v1) Reviewed-by: Ben Widawsky <ben@bwidawsk.net> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915')
-rw-r--r--drivers/gpu/drm/i915/intel_ddi.c35
1 files changed, 32 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index bebc17730a42..87c55c7cb096 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -72,6 +72,19 @@ static const u32 hsw_ddi_translations_hdmi[] = {
72 0x80FFFFFF, 0x00030002, /* 11: 1000 1000 0 */ 72 0x80FFFFFF, 0x00030002, /* 11: 1000 1000 0 */
73}; 73};
74 74
75static const u32 bdw_ddi_translations_edp[] = {
76 0x00FFFFFF, 0x00000012, /* DP parameters */
77 0x00EBAFFF, 0x00020011,
78 0x00C71FFF, 0x0006000F,
79 0x00FFFFFF, 0x00020011,
80 0x00DB6FFF, 0x0005000F,
81 0x00BEEFFF, 0x000A000C,
82 0x00FFFFFF, 0x0005000F,
83 0x00DB6FFF, 0x000A000C,
84 0x00FFFFFF, 0x000A000C,
85 0x00FFFFFF, 0x00140006 /* HDMI parameters 800mV 0dB*/
86};
87
75static const u32 bdw_ddi_translations_dp[] = { 88static const u32 bdw_ddi_translations_dp[] = {
76 0x00FFFFFF, 0x0007000E, /* DP parameters */ 89 0x00FFFFFF, 0x0007000E, /* DP parameters */
77 0x00D75FFF, 0x000E000A, 90 0x00D75FFF, 0x000E000A,
@@ -133,23 +146,39 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port)
133 int hdmi_level = dev_priv->vbt.ddi_port_info[port].hdmi_level_shift; 146 int hdmi_level = dev_priv->vbt.ddi_port_info[port].hdmi_level_shift;
134 const u32 *ddi_translations_fdi; 147 const u32 *ddi_translations_fdi;
135 const u32 *ddi_translations_dp; 148 const u32 *ddi_translations_dp;
149 const u32 *ddi_translations_edp;
136 const u32 *ddi_translations; 150 const u32 *ddi_translations;
137 151
138 if (IS_BROADWELL(dev)) { 152 if (IS_BROADWELL(dev)) {
139 ddi_translations_fdi = bdw_ddi_translations_fdi; 153 ddi_translations_fdi = bdw_ddi_translations_fdi;
140 ddi_translations_dp = bdw_ddi_translations_dp; 154 ddi_translations_dp = bdw_ddi_translations_dp;
155 ddi_translations_edp = bdw_ddi_translations_edp;
141 } else if (IS_HASWELL(dev)) { 156 } else if (IS_HASWELL(dev)) {
142 ddi_translations_fdi = hsw_ddi_translations_fdi; 157 ddi_translations_fdi = hsw_ddi_translations_fdi;
143 ddi_translations_dp = hsw_ddi_translations_dp; 158 ddi_translations_dp = hsw_ddi_translations_dp;
159 ddi_translations_edp = hsw_ddi_translations_dp;
144 } else { 160 } else {
145 WARN(1, "ddi translation table missing\n"); 161 WARN(1, "ddi translation table missing\n");
162 ddi_translations_edp = bdw_ddi_translations_dp;
146 ddi_translations_fdi = bdw_ddi_translations_fdi; 163 ddi_translations_fdi = bdw_ddi_translations_fdi;
147 ddi_translations_dp = bdw_ddi_translations_dp; 164 ddi_translations_dp = bdw_ddi_translations_dp;
148 } 165 }
149 166
150 ddi_translations = ((port == PORT_E) ? 167 switch (port) {
151 ddi_translations_fdi : 168 case PORT_A:
152 ddi_translations_dp); 169 ddi_translations = ddi_translations_edp;
170 break;
171 case PORT_B:
172 case PORT_C:
173 case PORT_D:
174 ddi_translations = ddi_translations_dp;
175 break;
176 case PORT_E:
177 ddi_translations = ddi_translations_fdi;
178 break;
179 default:
180 BUG();
181 }
153 182
154 for (i = 0, reg = DDI_BUF_TRANS(port); 183 for (i = 0, reg = DDI_BUF_TRANS(port);
155 i < ARRAY_SIZE(hsw_ddi_translations_fdi); i++) { 184 i < ARRAY_SIZE(hsw_ddi_translations_fdi); i++) {