Subversion Repositories Kolibri OS

Rev

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;