diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/i915/intel_ddi.c | 35 |
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 | ||
75 | static 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 | |||
75 | static const u32 bdw_ddi_translations_dp[] = { | 88 | static 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++) { |