Rev 2342 | Rev 3031 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2342 | Rev 2351 | ||
---|---|---|---|
Line 204... | Line 204... | ||
204 | * Thus the strange-looking division by 10 in intel_dp_link_required, to |
204 | * Thus the strange-looking division by 10 in intel_dp_link_required, to |
205 | * get the result in decakilobits instead of kilobits. |
205 | * get the result in decakilobits instead of kilobits. |
206 | */ |
206 | */ |
Line 207... | Line 207... | ||
207 | 207 | ||
208 | static int |
208 | static int |
209 | intel_dp_link_required(struct intel_dp *intel_dp, int pixel_clock, int check_bpp) |
209 | intel_dp_link_required(int pixel_clock, int bpp) |
210 | { |
- | |
211 | struct drm_crtc *crtc = intel_dp->base.base.crtc; |
- | |
212 | struct intel_crtc *intel_crtc = to_intel_crtc(crtc); |
- | |
213 | int bpp = 24; |
- | |
214 | - | ||
215 | if (check_bpp) |
- | |
216 | bpp = check_bpp; |
- | |
217 | else if (intel_crtc) |
- | |
218 | bpp = intel_crtc->bpp; |
- | |
219 | 210 | { |
|
220 | return (pixel_clock * bpp + 9) / 10; |
211 | return (pixel_clock * bpp + 9) / 10; |
Line 221... | Line 212... | ||
221 | } |
212 | } |
222 | 213 | ||
Line 241... | Line 232... | ||
241 | 232 | ||
242 | if (mode->vdisplay > intel_dp->panel_fixed_mode->vdisplay) |
233 | if (mode->vdisplay > intel_dp->panel_fixed_mode->vdisplay) |
243 | return MODE_PANEL; |
234 | return MODE_PANEL; |
Line 244... | Line 235... | ||
244 | } |
235 | } |
245 | 236 | ||
Line 246... | Line 237... | ||
246 | mode_rate = intel_dp_link_required(intel_dp, mode->clock, 0); |
237 | mode_rate = intel_dp_link_required(mode->clock, 24); |
247 | max_rate = intel_dp_max_data_rate(max_link_clock, max_lanes); |
238 | max_rate = intel_dp_max_data_rate(max_link_clock, max_lanes); |
248 | - | ||
249 | if (mode_rate > max_rate) { |
239 | |
250 | mode_rate = intel_dp_link_required(intel_dp, |
240 | if (mode_rate > max_rate) { |
251 | mode->clock, 18); |
241 | mode_rate = intel_dp_link_required(mode->clock, 18); |
252 | if (mode_rate > max_rate) |
242 | if (mode_rate > max_rate) |
253 | return MODE_CLOCK_HIGH; |
243 | return MODE_CLOCK_HIGH; |
Line 679... | Line 669... | ||
679 | struct drm_device *dev = encoder->dev; |
669 | struct drm_device *dev = encoder->dev; |
680 | struct intel_dp *intel_dp = enc_to_intel_dp(encoder); |
670 | struct intel_dp *intel_dp = enc_to_intel_dp(encoder); |
681 | int lane_count, clock; |
671 | int lane_count, clock; |
682 | int max_lane_count = intel_dp_max_lane_count(intel_dp); |
672 | int max_lane_count = intel_dp_max_lane_count(intel_dp); |
683 | int max_clock = intel_dp_max_link_bw(intel_dp) == DP_LINK_BW_2_7 ? 1 : 0; |
673 | int max_clock = intel_dp_max_link_bw(intel_dp) == DP_LINK_BW_2_7 ? 1 : 0; |
684 | int bpp = mode->private_flags & INTEL_MODE_DP_FORCE_6BPC ? 18 : 0; |
674 | int bpp = mode->private_flags & INTEL_MODE_DP_FORCE_6BPC ? 18 : 24; |
685 | static int bws[2] = { DP_LINK_BW_1_62, DP_LINK_BW_2_7 }; |
675 | static int bws[2] = { DP_LINK_BW_1_62, DP_LINK_BW_2_7 }; |
Line 686... | Line 676... | ||
686 | 676 | ||
687 | if (is_edp(intel_dp) && intel_dp->panel_fixed_mode) { |
677 | if (is_edp(intel_dp) && intel_dp->panel_fixed_mode) { |
688 | intel_fixed_panel_mode(intel_dp->panel_fixed_mode, adjusted_mode); |
678 | intel_fixed_panel_mode(intel_dp->panel_fixed_mode, adjusted_mode); |
Line 697... | Line 687... | ||
697 | 687 | ||
698 | for (lane_count = 1; lane_count <= max_lane_count; lane_count <<= 1) { |
688 | for (lane_count = 1; lane_count <= max_lane_count; lane_count <<= 1) { |
699 | for (clock = 0; clock <= max_clock; clock++) { |
689 | for (clock = 0; clock <= max_clock; clock++) { |
Line 700... | Line 690... | ||
700 | int link_avail = intel_dp_max_data_rate(intel_dp_link_clock(bws[clock]), lane_count); |
690 | int link_avail = intel_dp_max_data_rate(intel_dp_link_clock(bws[clock]), lane_count); |
701 | 691 | ||
702 | if (intel_dp_link_required(intel_dp, mode->clock, bpp) |
692 | if (intel_dp_link_required(mode->clock, bpp) |
703 | <= link_avail) { |
693 | <= link_avail) { |
704 | intel_dp->link_bw = bws[clock]; |
694 | intel_dp->link_bw = bws[clock]; |
705 | intel_dp->lane_count = lane_count; |
695 | intel_dp->lane_count = lane_count; |