Subversion Repositories Kolibri OS

Rev

Rev 1430 | Rev 1986 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1430 Rev 1963
Line 38... Line 38...
38
extern void
38
extern void
39
radeon_atombios_connected_scratch_regs(struct drm_connector *connector,
39
radeon_atombios_connected_scratch_regs(struct drm_connector *connector,
40
				       struct drm_encoder *encoder,
40
				       struct drm_encoder *encoder,
41
				       bool connected);
41
				       bool connected);
Line -... Line 42...
-
 
42
 
-
 
43
extern void
-
 
44
radeon_legacy_backlight_init(struct radeon_encoder *radeon_encoder,
-
 
45
			     struct drm_connector *drm_connector);
42
 
46
 
43
void radeon_connector_hotplug(struct drm_connector *connector)
47
void radeon_connector_hotplug(struct drm_connector *connector)
44
{
48
{
45
	struct drm_device *dev = connector->dev;
49
	struct drm_device *dev = connector->dev;
46
	struct radeon_device *rdev = dev->dev_private;
50
	struct radeon_device *rdev = dev->dev_private;
Line 47... Line -...
47
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
-
 
48
 
51
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
Line 49... Line -...
49
	if (radeon_connector->hpd.hpd != RADEON_HPD_NONE)
-
 
50
		radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
-
 
51
 
-
 
52
	if ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||
-
 
53
	    (connector->connector_type == DRM_MODE_CONNECTOR_eDP)) {
52
 
54
		if ((radeon_dp_getsinktype(radeon_connector) == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
53
		radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
55
		    (radeon_dp_getsinktype(radeon_connector) == CONNECTOR_OBJECT_ID_eDP)) {
-
 
56
			if (radeon_dp_needs_link_train(radeon_connector)) {
54
 
-
 
55
	/* powering up/down the eDP panel generates hpd events which
57
				if (connector->encoder)
56
	 * can interfere with modesetting.
58
					dp_link_train(connector->encoder, connector);
-
 
Line -... Line 57...
-
 
57
	 */
-
 
58
	if (connector->connector_type == DRM_MODE_CONNECTOR_eDP)
-
 
59
		return;
-
 
60
 
-
 
61
	/* pre-r600 did not always have the hpd pins mapped accurately to connectors */
-
 
62
	if (rdev->family >= CHIP_R600) {
-
 
63
		if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd))
59
			}
64
			drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
Line 60... Line 65...
60
		}
65
		else
61
	}
66
			drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
62
 
67
			}
Line 160... Line 165...
160
					       enum drm_connector_status current_status,
165
					       enum drm_connector_status current_status,
161
					       bool priority)
166
					       bool priority)
162
{
167
{
163
	struct drm_device *dev = connector->dev;
168
	struct drm_device *dev = connector->dev;
164
	struct drm_connector *conflict;
169
	struct drm_connector *conflict;
-
 
170
	struct radeon_connector *radeon_conflict;
165
	int i;
171
	int i;
Line 166... Line 172...
166
 
172
 
167
	list_for_each_entry(conflict, &dev->mode_config.connector_list, head) {
173
	list_for_each_entry(conflict, &dev->mode_config.connector_list, head) {
168
		if (conflict == connector)
174
		if (conflict == connector)
Line -... Line 175...
-
 
175
			continue;
169
			continue;
176
 
170
 
177
		radeon_conflict = to_radeon_connector(conflict);
171
		for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
178
		for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
Line 172... Line 179...
172
			if (conflict->encoder_ids[i] == 0)
179
			if (conflict->encoder_ids[i] == 0)
173
				break;
180
				break;
174
 
181
 
175
			/* if the IDs match */
182
			/* if the IDs match */
Line -... Line 183...
-
 
183
			if (conflict->encoder_ids[i] == encoder->base.id) {
-
 
184
				if (conflict->status != connector_status_connected)
-
 
185
					continue;
176
			if (conflict->encoder_ids[i] == encoder->base.id) {
186
 
177
				if (conflict->status != connector_status_connected)
187
				if (radeon_conflict->use_digital)
178
					continue;
188
					continue;
179
 
189
 
180
				if (priority == true) {
190
				if (priority == true) {
181
					DRM_INFO("1: conflicting encoders switching off %s\n", drm_get_connector_name(conflict));
191
					DRM_DEBUG_KMS("1: conflicting encoders switching off %s\n", drm_get_connector_name(conflict));
182
					DRM_INFO("in favor of %s\n", drm_get_connector_name(connector));
192
					DRM_DEBUG_KMS("in favor of %s\n", drm_get_connector_name(connector));
183
					conflict->status = connector_status_disconnected;
193
					conflict->status = connector_status_disconnected;
184
					radeon_connector_update_scratch_regs(conflict, connector_status_disconnected);
194
					radeon_connector_update_scratch_regs(conflict, connector_status_disconnected);
185
				} else {
195
				} else {
186
					DRM_INFO("2: conflicting encoders switching off %s\n", drm_get_connector_name(connector));
196
					DRM_DEBUG_KMS("2: conflicting encoders switching off %s\n", drm_get_connector_name(connector));
187
					DRM_INFO("in favor of %s\n", drm_get_connector_name(conflict));
197
					DRM_DEBUG_KMS("in favor of %s\n", drm_get_connector_name(conflict));
188
					current_status = connector_status_disconnected;
198
					current_status = connector_status_disconnected;
Line 207... Line 217...
207
	    native_mode->clock != 0) {
217
	    native_mode->clock != 0) {
208
		mode = drm_mode_duplicate(dev, native_mode);
218
		mode = drm_mode_duplicate(dev, native_mode);
209
		mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
219
		mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
210
		drm_mode_set_name(mode);
220
		drm_mode_set_name(mode);
Line 211... Line 221...
211
 
221
 
212
		DRM_DEBUG("Adding native panel mode %s\n", mode->name);
222
		DRM_DEBUG_KMS("Adding native panel mode %s\n", mode->name);
213
	} else if (native_mode->hdisplay != 0 &&
223
	} else if (native_mode->hdisplay != 0 &&
214
		   native_mode->vdisplay != 0) {
224
		   native_mode->vdisplay != 0) {
215
		/* mac laptops without an edid */
225
		/* mac laptops without an edid */
216
		/* Note that this is not necessarily the exact panel mode,
226
		/* Note that this is not necessarily the exact panel mode,
Line 219... Line 229...
219
		 * registers or add a mode table, but this works and is much
229
		 * registers or add a mode table, but this works and is much
220
		 * simpler.
230
		 * simpler.
221
		 */
231
		 */
222
		mode = drm_cvt_mode(dev, native_mode->hdisplay, native_mode->vdisplay, 60, true, false, false);
232
		mode = drm_cvt_mode(dev, native_mode->hdisplay, native_mode->vdisplay, 60, true, false, false);
223
		mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
233
		mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
224
		DRM_DEBUG("Adding cvt approximation of native panel mode %s\n", mode->name);
234
		DRM_DEBUG_KMS("Adding cvt approximation of native panel mode %s\n", mode->name);
225
	}
235
	}
226
	return mode;
236
	return mode;
227
}
237
}
Line 228... Line 238...
228
 
238
 
Line 285... Line 295...
285
	struct drm_encoder *encoder;
295
	struct drm_encoder *encoder;
286
	struct radeon_encoder *radeon_encoder;
296
	struct radeon_encoder *radeon_encoder;
Line 287... Line 297...
287
 
297
 
288
	if (property == rdev->mode_info.coherent_mode_property) {
298
	if (property == rdev->mode_info.coherent_mode_property) {
-
 
299
		struct radeon_encoder_atom_dig *dig;
Line 289... Line 300...
289
		struct radeon_encoder_atom_dig *dig;
300
		bool new_coherent_mode;
290
 
301
 
291
		/* need to find digital encoder on connector */
302
		/* need to find digital encoder on connector */
292
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
303
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
Line 297... Line 308...
297
 
308
 
298
		if (!radeon_encoder->enc_priv)
309
		if (!radeon_encoder->enc_priv)
Line 299... Line 310...
299
			return 0;
310
			return 0;
300
 
311
 
-
 
312
		dig = radeon_encoder->enc_priv;
-
 
313
		new_coherent_mode = val ? true : false;
-
 
314
		if (dig->coherent_mode != new_coherent_mode) {
-
 
315
			dig->coherent_mode = new_coherent_mode;
-
 
316
		radeon_property_change_mode(&radeon_encoder->base);
-
 
317
	}
-
 
318
	}
-
 
319
 
-
 
320
	if (property == rdev->mode_info.underscan_property) {
-
 
321
		/* need to find digital encoder on connector */
-
 
322
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
-
 
323
		if (!encoder)
-
 
324
			return 0;
-
 
325
 
-
 
326
		radeon_encoder = to_radeon_encoder(encoder);
-
 
327
 
-
 
328
		if (radeon_encoder->underscan_type != val) {
-
 
329
			radeon_encoder->underscan_type = val;
-
 
330
			radeon_property_change_mode(&radeon_encoder->base);
-
 
331
		}
-
 
332
	}
-
 
333
 
-
 
334
	if (property == rdev->mode_info.underscan_hborder_property) {
-
 
335
		/* need to find digital encoder on connector */
-
 
336
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
-
 
337
		if (!encoder)
-
 
338
			return 0;
-
 
339
 
-
 
340
		radeon_encoder = to_radeon_encoder(encoder);
-
 
341
 
-
 
342
		if (radeon_encoder->underscan_hborder != val) {
-
 
343
			radeon_encoder->underscan_hborder = val;
-
 
344
			radeon_property_change_mode(&radeon_encoder->base);
-
 
345
		}
-
 
346
	}
-
 
347
 
-
 
348
	if (property == rdev->mode_info.underscan_vborder_property) {
-
 
349
		/* need to find digital encoder on connector */
-
 
350
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
-
 
351
		if (!encoder)
-
 
352
			return 0;
-
 
353
 
-
 
354
		radeon_encoder = to_radeon_encoder(encoder);
-
 
355
 
301
		dig = radeon_encoder->enc_priv;
356
		if (radeon_encoder->underscan_vborder != val) {
302
		dig->coherent_mode = val ? true : false;
357
			radeon_encoder->underscan_vborder = val;
-
 
358
			radeon_property_change_mode(&radeon_encoder->base);
Line 303... Line 359...
303
		radeon_property_change_mode(&radeon_encoder->base);
359
		}
304
	}
360
	}
305
 
361
 
306
	if (property == rdev->mode_info.tv_std_property) {
362
	if (property == rdev->mode_info.tv_std_property) {
Line 313... Line 369...
313
			return 0;
369
			return 0;
Line 314... Line 370...
314
 
370
 
315
		radeon_encoder = to_radeon_encoder(encoder);
371
		radeon_encoder = to_radeon_encoder(encoder);
316
		if (!radeon_encoder->enc_priv)
372
		if (!radeon_encoder->enc_priv)
317
			return 0;
373
			return 0;
318
		if (rdev->is_atom_bios) {
374
		if (ASIC_IS_AVIVO(rdev) || radeon_r4xx_atom) {
319
			struct radeon_encoder_atom_dac *dac_int;
375
			struct radeon_encoder_atom_dac *dac_int;
320
			dac_int = radeon_encoder->enc_priv;
376
			dac_int = radeon_encoder->enc_priv;
321
			dac_int->tv_std = val;
377
			dac_int->tv_std = val;
322
		} else {
378
		} else {
Line 379... Line 435...
379
		list_for_each_entry_safe(mode, t, &connector->probed_modes, head) {
435
		list_for_each_entry_safe(mode, t, &connector->probed_modes, head) {
380
			if (mode->hdisplay == native_mode->hdisplay &&
436
			if (mode->hdisplay == native_mode->hdisplay &&
381
			    mode->vdisplay == native_mode->vdisplay) {
437
			    mode->vdisplay == native_mode->vdisplay) {
382
				*native_mode = *mode;
438
				*native_mode = *mode;
383
				drm_mode_set_crtcinfo(native_mode, CRTC_INTERLACE_HALVE_V);
439
				drm_mode_set_crtcinfo(native_mode, CRTC_INTERLACE_HALVE_V);
384
				DRM_INFO("Determined LVDS native mode details from EDID\n");
440
				DRM_DEBUG_KMS("Determined LVDS native mode details from EDID\n");
385
				break;
441
				break;
386
			}
442
			}
387
		}
443
		}
388
	}
444
	}
389
	if (!native_mode->clock) {
445
	if (!native_mode->clock) {
390
		DRM_INFO("No LVDS native mode details, disabling RMX\n");
446
		DRM_DEBUG_KMS("No LVDS native mode details, disabling RMX\n");
391
		radeon_encoder->rmx_type = RMX_OFF;
447
		radeon_encoder->rmx_type = RMX_OFF;
392
	}
448
	}
393
}
449
}
Line 394... Line 450...
394
 
450
 
Line 419... Line 475...
419
	/* we have no EDID modes */
475
	/* we have no EDID modes */
420
	mode = radeon_fp_native_mode(encoder);
476
	mode = radeon_fp_native_mode(encoder);
421
	if (mode) {
477
	if (mode) {
422
		ret = 1;
478
		ret = 1;
423
		drm_mode_probed_add(connector, mode);
479
		drm_mode_probed_add(connector, mode);
-
 
480
		/* add the width/height from vbios tables if available */
-
 
481
		connector->display_info.width_mm = mode->width_mm;
-
 
482
		connector->display_info.height_mm = mode->height_mm;
424
		/* add scaled modes */
483
		/* add scaled modes */
425
		radeon_add_common_modes(encoder, connector);
484
		radeon_add_common_modes(encoder, connector);
426
	}
485
	}
Line 427... Line 486...
427
 
486
 
Line 456... Line 515...
456
	}
515
	}
Line 457... Line 516...
457
 
516
 
458
	return MODE_OK;
517
	return MODE_OK;
Line -... Line 518...
-
 
518
}
459
}
519
 
460
 
520
static enum drm_connector_status
461
static enum drm_connector_status radeon_lvds_detect(struct drm_connector *connector)
521
radeon_lvds_detect(struct drm_connector *connector, bool force)
462
{
522
{
463
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
523
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
Line 493... Line 553...
493
 
553
 
494
static void radeon_connector_destroy(struct drm_connector *connector)
554
static void radeon_connector_destroy(struct drm_connector *connector)
495
{
555
{
Line 496... Line -...
496
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
-
 
497
 
-
 
498
	if (radeon_connector->ddc_bus)
556
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
499
		radeon_i2c_destroy(radeon_connector->ddc_bus);
557
 
500
	if (radeon_connector->edid)
558
	if (radeon_connector->edid)
501
		kfree(radeon_connector->edid);
559
		kfree(radeon_connector->edid);
502
	kfree(radeon_connector->con_priv);
560
	kfree(radeon_connector->con_priv);
Line 511... Line 569...
511
{
569
{
512
	struct drm_device *dev = connector->dev;
570
	struct drm_device *dev = connector->dev;
513
	struct radeon_encoder *radeon_encoder;
571
	struct radeon_encoder *radeon_encoder;
514
	enum radeon_rmx_type rmx_type;
572
	enum radeon_rmx_type rmx_type;
Line 515... Line 573...
515
 
573
 
516
	DRM_DEBUG("\n");
574
	DRM_DEBUG_KMS("\n");
517
	if (property != dev->mode_config.scaling_mode_property)
575
	if (property != dev->mode_config.scaling_mode_property)
Line 518... Line 576...
518
		return 0;
576
		return 0;
519
 
577
 
Line 566... Line 624...
566
}
624
}
Line 567... Line 625...
567
 
625
 
568
static int radeon_vga_mode_valid(struct drm_connector *connector,
626
static int radeon_vga_mode_valid(struct drm_connector *connector,
569
				  struct drm_display_mode *mode)
627
				  struct drm_display_mode *mode)
-
 
628
{
-
 
629
	struct drm_device *dev = connector->dev;
-
 
630
	struct radeon_device *rdev = dev->dev_private;
570
{
631
 
-
 
632
	/* XXX check mode bandwidth */
571
	/* XXX check mode bandwidth */
633
 
-
 
634
	if ((mode->clock / 10) > rdev->clock.max_pixel_clock)
-
 
635
		return MODE_CLOCK_HIGH;
572
	/* XXX verify against max DAC output frequency */
636
 
573
	return MODE_OK;
637
	return MODE_OK;
Line -... Line 638...
-
 
638
}
574
}
639
 
575
 
640
static enum drm_connector_status
-
 
641
radeon_vga_detect(struct drm_connector *connector, bool force)
-
 
642
{
576
static enum drm_connector_status radeon_vga_detect(struct drm_connector *connector)
643
	struct drm_device *dev = connector->dev;
577
{
644
	struct radeon_device *rdev = dev->dev_private;
578
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
645
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
579
	struct drm_encoder *encoder;
646
	struct drm_encoder *encoder;
580
	struct drm_encoder_helper_funcs *encoder_funcs;
647
	struct drm_encoder_helper_funcs *encoder_funcs;
Line 610... Line 677...
610
				ret = connector_status_disconnected;
677
				ret = connector_status_disconnected;
611
			} else
678
			} else
612
		ret = connector_status_connected;
679
		ret = connector_status_connected;
613
		}
680
		}
614
	} else {
681
	} else {
-
 
682
 
-
 
683
		/* if we aren't forcing don't do destructive polling */
-
 
684
		if (!force)
-
 
685
			return connector->status;
-
 
686
 
615
		if (radeon_connector->dac_load_detect && encoder) {
687
		if (radeon_connector->dac_load_detect && encoder) {
616
			encoder_funcs = encoder->helper_private;
688
			encoder_funcs = encoder->helper_private;
617
			ret = encoder_funcs->detect(encoder, connector);
689
			ret = encoder_funcs->detect(encoder, connector);
618
		}
690
		}
619
	}
691
	}
Line 620... Line 692...
620
 
692
 
621
	if (ret == connector_status_connected)
693
	if (ret == connector_status_connected)
-
 
694
		ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true);
-
 
695
 
-
 
696
	/* RN50 and some RV100 asics in servers often have a hardcoded EDID in the
-
 
697
	 * vbios to deal with KVMs. If we have one and are not able to detect a monitor
-
 
698
	 * by other means, assume the CRT is connected and use that EDID.
-
 
699
	 */
-
 
700
	if ((!rdev->is_atom_bios) &&
-
 
701
	    (ret == connector_status_disconnected) &&
-
 
702
	    rdev->mode_info.bios_hardcoded_edid_size) {
-
 
703
		ret = connector_status_connected;
-
 
704
	}
622
		ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true);
705
 
623
	radeon_connector_update_scratch_regs(connector, ret);
706
	radeon_connector_update_scratch_regs(connector, ret);
624
	return ret;
707
	return ret;
Line 625... Line 708...
625
}
708
}
Line 668... Line 751...
668
	if ((mode->hdisplay > 1024) || (mode->vdisplay > 768))
751
	if ((mode->hdisplay > 1024) || (mode->vdisplay > 768))
669
		return MODE_CLOCK_RANGE;
752
		return MODE_CLOCK_RANGE;
670
	return MODE_OK;
753
	return MODE_OK;
671
}
754
}
Line -... Line 755...
-
 
755
 
672
 
756
static enum drm_connector_status
673
static enum drm_connector_status radeon_tv_detect(struct drm_connector *connector)
757
radeon_tv_detect(struct drm_connector *connector, bool force)
674
{
758
{
675
	struct drm_encoder *encoder;
759
	struct drm_encoder *encoder;
676
	struct drm_encoder_helper_funcs *encoder_funcs;
760
	struct drm_encoder_helper_funcs *encoder_funcs;
677
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
761
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
Line 725... Line 809...
725
 * If we got no DDC, we do load detection on the DAC encoder object.
809
 * If we got no DDC, we do load detection on the DAC encoder object.
726
 * If we got analog DDC or load detection passes on the DAC encoder
810
 * If we got analog DDC or load detection passes on the DAC encoder
727
 * we have to check if this analog encoder is shared with anyone else (TV)
811
 * we have to check if this analog encoder is shared with anyone else (TV)
728
 * if its shared we have to set the other connector to disconnected.
812
 * if its shared we have to set the other connector to disconnected.
729
 */
813
 */
-
 
814
static enum drm_connector_status
730
static enum drm_connector_status radeon_dvi_detect(struct drm_connector *connector)
815
radeon_dvi_detect(struct drm_connector *connector, bool force)
731
{
816
{
-
 
817
	struct drm_device *dev = connector->dev;
-
 
818
	struct radeon_device *rdev = dev->dev_private;
732
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
819
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
733
	struct drm_encoder *encoder = NULL;
820
	struct drm_encoder *encoder = NULL;
734
	struct drm_encoder_helper_funcs *encoder_funcs;
821
	struct drm_encoder_helper_funcs *encoder_funcs;
735
	struct drm_mode_object *obj;
822
	struct drm_mode_object *obj;
736
	int i;
823
	int i;
Line 760... Line 847...
760
				radeon_connector->edid = NULL;
847
				radeon_connector->edid = NULL;
761
				ret = connector_status_disconnected;
848
				ret = connector_status_disconnected;
762
			} else
849
			} else
763
		ret = connector_status_connected;
850
		ret = connector_status_connected;
Line 764... Line 851...
764
 
851
 
765
			/* multiple connectors on the same encoder with the same ddc line
852
			/* This gets complicated.  We have boards with VGA + HDMI with a
766
			 * This tends to be HDMI and DVI on the same encoder with the
853
			 * shared DDC line and we have boards with DVI-D + HDMI with a shared
767
			 * same ddc line.  If the edid says HDMI, consider the HDMI port
854
			 * DDC line.  The latter is more complex because with DVI<->HDMI adapters
768
			 * connected and the DVI port disconnected.  If the edid doesn't
-
 
769
			 * say HDMI, vice versa.
855
			 * you don't really know what's connected to which port as both are digital.
770
			 */
856
			 */
771
			if (radeon_connector->shared_ddc && (ret == connector_status_connected)) {
-
 
772
				struct drm_device *dev = connector->dev;
857
			if (radeon_connector->shared_ddc && (ret == connector_status_connected)) {
773
				struct drm_connector *list_connector;
858
				struct drm_connector *list_connector;
774
				struct radeon_connector *list_radeon_connector;
859
				struct radeon_connector *list_radeon_connector;
775
				list_for_each_entry(list_connector, &dev->mode_config.connector_list, head) {
860
				list_for_each_entry(list_connector, &dev->mode_config.connector_list, head) {
776
					if (connector == list_connector)
861
					if (connector == list_connector)
777
						continue;
862
						continue;
778
					list_radeon_connector = to_radeon_connector(list_connector);
-
 
779
					if (radeon_connector->devices == list_radeon_connector->devices) {
863
					list_radeon_connector = to_radeon_connector(list_connector);
780
						if (drm_detect_hdmi_monitor(radeon_connector->edid)) {
-
 
781
							if (connector->connector_type == DRM_MODE_CONNECTOR_DVID) {
864
					if (list_radeon_connector->shared_ddc &&
782
								kfree(radeon_connector->edid);
865
					    (list_radeon_connector->ddc_bus->rec.i2c_id ==
783
								radeon_connector->edid = NULL;
866
					     radeon_connector->ddc_bus->rec.i2c_id)) {
784
								ret = connector_status_disconnected;
-
 
785
							}
-
 
786
						} else {
867
						/* cases where both connectors are digital */
-
 
868
						if (list_connector->connector_type != DRM_MODE_CONNECTOR_VGA) {
787
							if ((connector->connector_type == DRM_MODE_CONNECTOR_HDMIA) ||
869
							/* hpd is our only option in this case */
788
							    (connector->connector_type == DRM_MODE_CONNECTOR_HDMIB)) {
870
							if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
789
								kfree(radeon_connector->edid);
871
								kfree(radeon_connector->edid);
790
								radeon_connector->edid = NULL;
872
								radeon_connector->edid = NULL;
791
								ret = connector_status_disconnected;
873
								ret = connector_status_disconnected;
792
							}
874
							}
Line 798... Line 880...
798
	}
880
	}
Line 799... Line 881...
799
 
881
 
800
	if ((ret == connector_status_connected) && (radeon_connector->use_digital == true))
882
	if ((ret == connector_status_connected) && (radeon_connector->use_digital == true))
Line -... Line 883...
-
 
883
		goto out;
-
 
884
 
-
 
885
	if (!force) {
-
 
886
		ret = connector->status;
-
 
887
		goto out;
801
		goto out;
888
	}
802
 
889
 
803
	/* find analog encoder */
890
	/* find analog encoder */
804
	if (radeon_connector->dac_load_detect) {
891
	if (radeon_connector->dac_load_detect) {
805
		for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
892
		for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
Line 830... Line 917...
830
	if ((ret == connector_status_connected) && (radeon_connector->use_digital == false) &&
917
	if ((ret == connector_status_connected) && (radeon_connector->use_digital == false) &&
831
	    encoder) {
918
	    encoder) {
832
		ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true);
919
		ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true);
833
	}
920
	}
Line -... Line 921...
-
 
921
 
-
 
922
	/* RN50 and some RV100 asics in servers often have a hardcoded EDID in the
-
 
923
	 * vbios to deal with KVMs. If we have one and are not able to detect a monitor
-
 
924
	 * by other means, assume the DFP is connected and use that EDID.  In most
-
 
925
	 * cases the DVI port is actually a virtual KVM port connected to the service
-
 
926
	 * processor.
-
 
927
	 */
-
 
928
	if ((!rdev->is_atom_bios) &&
-
 
929
	    (ret == connector_status_disconnected) &&
-
 
930
	    rdev->mode_info.bios_hardcoded_edid_size) {
-
 
931
		radeon_connector->use_digital = true;
-
 
932
		ret = connector_status_connected;
-
 
933
	}
834
 
934
 
835
out:
935
out:
836
	/* updated in get modes as well since we need to know if it's analog or digital */
936
	/* updated in get modes as well since we need to know if it's analog or digital */
837
	radeon_connector_update_scratch_regs(connector, ret);
937
	radeon_connector_update_scratch_regs(connector, ret);
838
	return ret;
938
	return ret;
Line 907... Line 1007...
907
	if (radeon_connector->use_digital && (mode->clock > 165000)) {
1007
	if (radeon_connector->use_digital && (mode->clock > 165000)) {
908
		if ((radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I) ||
1008
		if ((radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I) ||
909
		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D) ||
1009
		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D) ||
910
		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_B))
1010
		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_B))
911
			return MODE_OK;
1011
			return MODE_OK;
-
 
1012
		else if (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_A) {
-
 
1013
			if (ASIC_IS_DCE3(rdev)) {
-
 
1014
				/* HDMI 1.3+ supports max clock of 340 Mhz */
-
 
1015
				if (mode->clock > 340000)
-
 
1016
					return MODE_CLOCK_HIGH;
912
		else
1017
		else
-
 
1018
					return MODE_OK;
-
 
1019
			} else
-
 
1020
				return MODE_CLOCK_HIGH;
-
 
1021
		} else
913
			return MODE_CLOCK_HIGH;
1022
			return MODE_CLOCK_HIGH;
914
	}
1023
	}
-
 
1024
 
-
 
1025
	/* check against the max pixel clock */
-
 
1026
	if ((mode->clock / 10) > rdev->clock.max_pixel_clock)
-
 
1027
		return MODE_CLOCK_HIGH;
-
 
1028
 
915
	return MODE_OK;
1029
	return MODE_OK;
916
}
1030
}
Line 917... Line 1031...
917
 
1031
 
918
struct drm_connector_helper_funcs radeon_dvi_connector_helper_funcs = {
1032
struct drm_connector_helper_funcs radeon_dvi_connector_helper_funcs = {
Line 933... Line 1047...
933
static void radeon_dp_connector_destroy(struct drm_connector *connector)
1047
static void radeon_dp_connector_destroy(struct drm_connector *connector)
934
{
1048
{
935
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1049
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
936
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1050
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
Line 937... Line -...
937
 
-
 
938
	if (radeon_connector->ddc_bus)
-
 
939
		radeon_i2c_destroy(radeon_connector->ddc_bus);
1051
 
940
	if (radeon_connector->edid)
1052
	if (radeon_connector->edid)
941
		kfree(radeon_connector->edid);
1053
		kfree(radeon_connector->edid);
942
	if (radeon_dig_connector->dp_i2c_bus)
1054
	if (radeon_dig_connector->dp_i2c_bus)
943
		radeon_i2c_destroy_dp(radeon_dig_connector->dp_i2c_bus);
1055
		radeon_i2c_destroy(radeon_dig_connector->dp_i2c_bus);
944
	kfree(radeon_connector->con_priv);
1056
	kfree(radeon_connector->con_priv);
945
	drm_sysfs_connector_remove(connector);
1057
	drm_sysfs_connector_remove(connector);
946
	drm_connector_cleanup(connector);
1058
	drm_connector_cleanup(connector);
947
	kfree(connector);
1059
	kfree(connector);
Line 948... Line 1060...
948
}
1060
}
949
 
1061
 
950
static int radeon_dp_get_modes(struct drm_connector *connector)
1062
static int radeon_dp_get_modes(struct drm_connector *connector)
-
 
1063
{
951
{
1064
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
Line -... Line 1065...
-
 
1065
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
-
 
1066
	int ret;
-
 
1067
 
-
 
1068
	if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
-
 
1069
		struct drm_encoder *encoder;
-
 
1070
		struct drm_display_mode *mode;
-
 
1071
 
952
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1072
		if (!radeon_dig_connector->edp_on)
-
 
1073
			atombios_set_edp_panel_power(connector,
-
 
1074
						     ATOM_TRANSMITTER_ACTION_POWER_ON);
-
 
1075
	ret = radeon_ddc_get_modes(radeon_connector);
-
 
1076
		if (!radeon_dig_connector->edp_on)
-
 
1077
			atombios_set_edp_panel_power(connector,
-
 
1078
						     ATOM_TRANSMITTER_ACTION_POWER_OFF);
-
 
1079
 
-
 
1080
		if (ret > 0) {
-
 
1081
			encoder = radeon_best_single_encoder(connector);
-
 
1082
			if (encoder) {
-
 
1083
				radeon_fixup_lvds_native_mode(encoder, connector);
953
	int ret;
1084
				/* add scaled modes */
954
 
1085
				radeon_add_common_modes(encoder, connector);
Line -... Line 1086...
-
 
1086
			}
-
 
1087
			return ret;
-
 
1088
		}
-
 
1089
 
-
 
1090
		encoder = radeon_best_single_encoder(connector);
-
 
1091
		if (!encoder)
-
 
1092
			return 0;
-
 
1093
 
-
 
1094
		/* we have no EDID modes */
-
 
1095
		mode = radeon_fp_native_mode(encoder);
-
 
1096
		if (mode) {
-
 
1097
			ret = 1;
-
 
1098
			drm_mode_probed_add(connector, mode);
-
 
1099
			/* add the width/height from vbios tables if available */
-
 
1100
			connector->display_info.width_mm = mode->width_mm;
-
 
1101
			connector->display_info.height_mm = mode->height_mm;
-
 
1102
			/* add scaled modes */
-
 
1103
			radeon_add_common_modes(encoder, connector);
-
 
1104
	}
-
 
1105
	} else
-
 
1106
		ret = radeon_ddc_get_modes(radeon_connector);
955
	ret = radeon_ddc_get_modes(radeon_connector);
1107
 
956
	return ret;
1108
	return ret;
-
 
1109
}
-
 
1110
 
-
 
1111
bool radeon_connector_encoder_is_dp_bridge(struct drm_connector *connector)
-
 
1112
{
-
 
1113
	struct drm_mode_object *obj;
-
 
1114
	struct drm_encoder *encoder;
-
 
1115
	struct radeon_encoder *radeon_encoder;
-
 
1116
	int i;
-
 
1117
	bool found = false;
-
 
1118
 
-
 
1119
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
-
 
1120
		if (connector->encoder_ids[i] == 0)
-
 
1121
			break;
-
 
1122
 
-
 
1123
		obj = drm_mode_object_find(connector->dev, connector->encoder_ids[i], DRM_MODE_OBJECT_ENCODER);
-
 
1124
		if (!obj)
-
 
1125
			continue;
-
 
1126
 
-
 
1127
		encoder = obj_to_encoder(obj);
-
 
1128
		radeon_encoder = to_radeon_encoder(encoder);
-
 
1129
 
-
 
1130
		switch (radeon_encoder->encoder_id) {
-
 
1131
		case ENCODER_OBJECT_ID_TRAVIS:
-
 
1132
		case ENCODER_OBJECT_ID_NUTMEG:
-
 
1133
			found = true;
-
 
1134
			break;
-
 
1135
		default:
-
 
1136
			break;
-
 
1137
		}
-
 
1138
	}
-
 
1139
 
-
 
1140
	return found;
-
 
1141
}
-
 
1142
 
-
 
1143
bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector)
-
 
1144
{
-
 
1145
	struct drm_mode_object *obj;
-
 
1146
	struct drm_encoder *encoder;
-
 
1147
	struct radeon_encoder *radeon_encoder;
-
 
1148
	int i;
-
 
1149
	bool found = false;
-
 
1150
 
-
 
1151
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
-
 
1152
		if (connector->encoder_ids[i] == 0)
-
 
1153
			break;
-
 
1154
 
-
 
1155
		obj = drm_mode_object_find(connector->dev, connector->encoder_ids[i], DRM_MODE_OBJECT_ENCODER);
-
 
1156
		if (!obj)
-
 
1157
			continue;
-
 
1158
 
-
 
1159
		encoder = obj_to_encoder(obj);
-
 
1160
		radeon_encoder = to_radeon_encoder(encoder);
-
 
1161
		if (radeon_encoder->caps & ATOM_ENCODER_CAP_RECORD_HBR2)
-
 
1162
			found = true;
-
 
1163
	}
-
 
1164
 
-
 
1165
	return found;
-
 
1166
}
-
 
1167
 
-
 
1168
bool radeon_connector_is_dp12_capable(struct drm_connector *connector)
-
 
1169
{
-
 
1170
	struct drm_device *dev = connector->dev;
-
 
1171
	struct radeon_device *rdev = dev->dev_private;
-
 
1172
 
-
 
1173
	if (ASIC_IS_DCE5(rdev) &&
-
 
1174
	    (rdev->clock.dp_extclk >= 53900) &&
-
 
1175
	    radeon_connector_encoder_is_hbr2(connector)) {
-
 
1176
		return true;
-
 
1177
	}
-
 
1178
 
-
 
1179
	return false;
-
 
1180
}
-
 
1181
 
-
 
1182
static enum drm_connector_status
957
}
1183
radeon_dp_detect(struct drm_connector *connector, bool force)
958
 
1184
{
959
static enum drm_connector_status radeon_dp_detect(struct drm_connector *connector)
1185
	struct drm_device *dev = connector->dev;
960
{
-
 
Line 961... Line 1186...
961
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1186
	struct radeon_device *rdev = dev->dev_private;
962
	enum drm_connector_status ret = connector_status_disconnected;
1187
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
963
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1188
	enum drm_connector_status ret = connector_status_disconnected;
964
	u8 sink_type;
1189
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
Line -... Line 1190...
-
 
1190
 
965
 
1191
	if (radeon_connector->edid) {
-
 
1192
		kfree(radeon_connector->edid);
966
	if (radeon_connector->edid) {
1193
		radeon_connector->edid = NULL;
967
		kfree(radeon_connector->edid);
1194
	}
-
 
1195
 
968
		radeon_connector->edid = NULL;
1196
	if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
969
	}
1197
		struct drm_encoder *encoder = radeon_best_single_encoder(connector);
970
 
1198
		if (encoder) {
971
	sink_type = radeon_dp_getsinktype(radeon_connector);
1199
			struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
-
 
1200
			struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
-
 
1201
 
-
 
1202
			/* check if panel is valid */
-
 
1203
			if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240)
-
 
1204
				ret = connector_status_connected;
-
 
1205
		}
-
 
1206
		/* eDP is always DP */
-
 
1207
		radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT;
-
 
1208
		if (!radeon_dig_connector->edp_on)
-
 
1209
			atombios_set_edp_panel_power(connector,
972
	if ((sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
1210
						     ATOM_TRANSMITTER_ACTION_POWER_ON);
973
	    (sink_type == CONNECTOR_OBJECT_ID_eDP)) {
1211
		if (radeon_dp_getdpcd(radeon_connector))
974
		if (radeon_dp_getdpcd(radeon_connector)) {
1212
			ret = connector_status_connected;
975
			radeon_dig_connector->dp_sink_type = sink_type;
1213
		if (!radeon_dig_connector->edp_on)
-
 
1214
			atombios_set_edp_panel_power(connector,
-
 
1215
						     ATOM_TRANSMITTER_ACTION_POWER_OFF);
-
 
1216
	} else {
-
 
1217
		radeon_dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector);
-
 
1218
		if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
-
 
1219
			ret = connector_status_connected;
-
 
1220
			if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT)
-
 
1221
				radeon_dp_getdpcd(radeon_connector);
-
 
1222
		} else {
-
 
1223
		if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
976
			ret = connector_status_connected;
1224
			if (radeon_dp_getdpcd(radeon_connector))
977
		}
1225
				ret = connector_status_connected;
Line -... Line 1226...
-
 
1226
		} else {
978
	} else {
1227
			if (radeon_ddc_probe(radeon_connector))
979
		if (radeon_ddc_probe(radeon_connector)) {
1228
			ret = connector_status_connected;
Line 980... Line 1229...
980
			radeon_dig_connector->dp_sink_type = sink_type;
1229
		}
981
			ret = connector_status_connected;
1230
	}
Line 991... Line 1240...
991
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1240
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
992
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1241
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
Line 993... Line 1242...
993
 
1242
 
Line -... Line 1243...
-
 
1243
	/* XXX check mode bandwidth */
-
 
1244
 
-
 
1245
	if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
-
 
1246
		struct drm_encoder *encoder = radeon_best_single_encoder(connector);
-
 
1247
 
-
 
1248
		if ((mode->hdisplay < 320) || (mode->vdisplay < 240))
-
 
1249
			return MODE_PANEL;
-
 
1250
 
-
 
1251
		if (encoder) {
-
 
1252
			struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
-
 
1253
			struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
-
 
1254
 
-
 
1255
		/* AVIVO hardware supports downscaling modes larger than the panel
-
 
1256
			 * to the panel size, but I'm not sure this is desirable.
-
 
1257
			 */
-
 
1258
			if ((mode->hdisplay > native_mode->hdisplay) ||
-
 
1259
			    (mode->vdisplay > native_mode->vdisplay))
-
 
1260
				return MODE_PANEL;
-
 
1261
 
-
 
1262
			/* if scaling is disabled, block non-native modes */
-
 
1263
			if (radeon_encoder->rmx_type == RMX_OFF) {
-
 
1264
				if ((mode->hdisplay != native_mode->hdisplay) ||
-
 
1265
				    (mode->vdisplay != native_mode->vdisplay))
-
 
1266
					return MODE_PANEL;
-
 
1267
			}
-
 
1268
		}
994
	/* XXX check mode bandwidth */
1269
		return MODE_OK;
995
 
1270
	} else {
996
	if ((radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
1271
	if ((radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
997
	    (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP))
1272
	    (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP))
998
		return radeon_dp_mode_valid_helper(radeon_connector, mode);
1273
			return radeon_dp_mode_valid_helper(connector, mode);
999
	else
1274
	else
-
 
1275
		return MODE_OK;
Line 1000... Line 1276...
1000
		return MODE_OK;
1276
	}
1001
}
1277
}
1002
 
1278
 
1003
struct drm_connector_helper_funcs radeon_dp_connector_helper_funcs = {
1279
struct drm_connector_helper_funcs radeon_dp_connector_helper_funcs = {
Line 1019... Line 1295...
1019
radeon_add_atom_connector(struct drm_device *dev,
1295
radeon_add_atom_connector(struct drm_device *dev,
1020
			  uint32_t connector_id,
1296
			  uint32_t connector_id,
1021
			  uint32_t supported_device,
1297
			  uint32_t supported_device,
1022
			  int connector_type,
1298
			  int connector_type,
1023
			  struct radeon_i2c_bus_rec *i2c_bus,
1299
			  struct radeon_i2c_bus_rec *i2c_bus,
1024
			  bool linkb,
-
 
1025
			  uint32_t igp_lane_info,
1300
			  uint32_t igp_lane_info,
1026
			  uint16_t connector_object_id,
1301
			  uint16_t connector_object_id,
1027
			  struct radeon_hpd *hpd)
1302
			  struct radeon_hpd *hpd,
-
 
1303
			  struct radeon_router *router)
1028
{
1304
{
1029
	struct radeon_device *rdev = dev->dev_private;
1305
	struct radeon_device *rdev = dev->dev_private;
1030
	struct drm_connector *connector;
1306
	struct drm_connector *connector;
1031
	struct radeon_connector *radeon_connector;
1307
	struct radeon_connector *radeon_connector;
1032
	struct radeon_connector_atom_dig *radeon_dig_connector;
1308
	struct radeon_connector_atom_dig *radeon_dig_connector;
-
 
1309
	struct drm_encoder *encoder;
-
 
1310
	struct radeon_encoder *radeon_encoder;
1033
	uint32_t subpixel_order = SubPixelNone;
1311
	uint32_t subpixel_order = SubPixelNone;
1034
	bool shared_ddc = false;
1312
	bool shared_ddc = false;
1035
	int ret;
1313
	bool is_dp_bridge = false;
Line 1036... Line -...
1036
 
-
 
1037
	/* fixme - tv/cv/din */
1314
 
1038
	if (connector_type == DRM_MODE_CONNECTOR_Unknown)
1315
	if (connector_type == DRM_MODE_CONNECTOR_Unknown)
Line -... Line 1316...
-
 
1316
		return;
-
 
1317
 
-
 
1318
	/* if the user selected tv=0 don't try and add the connector */
-
 
1319
	if (((connector_type == DRM_MODE_CONNECTOR_SVIDEO) ||
-
 
1320
	     (connector_type == DRM_MODE_CONNECTOR_Composite) ||
-
 
1321
	     (connector_type == DRM_MODE_CONNECTOR_9PinDIN)) &&
-
 
1322
	    (radeon_tv == 0))
1039
		return;
1323
		return;
1040
 
1324
 
1041
	/* see if we already added it */
1325
	/* see if we already added it */
1042
	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
1326
	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
1043
		radeon_connector = to_radeon_connector(connector);
1327
		radeon_connector = to_radeon_connector(connector);
Line 1048... Line 1332...
1048
		if (radeon_connector->ddc_bus && i2c_bus->valid) {
1332
		if (radeon_connector->ddc_bus && i2c_bus->valid) {
1049
			if (radeon_connector->ddc_bus->rec.i2c_id == i2c_bus->i2c_id) {
1333
			if (radeon_connector->ddc_bus->rec.i2c_id == i2c_bus->i2c_id) {
1050
				radeon_connector->shared_ddc = true;
1334
				radeon_connector->shared_ddc = true;
1051
				shared_ddc = true;
1335
				shared_ddc = true;
1052
			}
1336
			}
-
 
1337
			if (radeon_connector->router_bus && router->ddc_valid &&
-
 
1338
			    (radeon_connector->router.router_id == router->router_id)) {
-
 
1339
				radeon_connector->shared_ddc = false;
-
 
1340
				shared_ddc = false;
-
 
1341
			}
-
 
1342
		}
-
 
1343
	}
-
 
1344
 
-
 
1345
	/* check if it's a dp bridge */
-
 
1346
	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
-
 
1347
		radeon_encoder = to_radeon_encoder(encoder);
-
 
1348
		if (radeon_encoder->devices & supported_device) {
-
 
1349
			switch (radeon_encoder->encoder_id) {
-
 
1350
			case ENCODER_OBJECT_ID_TRAVIS:
-
 
1351
			case ENCODER_OBJECT_ID_NUTMEG:
-
 
1352
				is_dp_bridge = true;
-
 
1353
				break;
-
 
1354
			default:
-
 
1355
				break;
-
 
1356
			}
1053
		}
1357
		}
1054
	}
1358
	}
Line 1055... Line 1359...
1055
 
1359
 
1056
	radeon_connector = kzalloc(sizeof(struct radeon_connector), GFP_KERNEL);
1360
	radeon_connector = kzalloc(sizeof(struct radeon_connector), GFP_KERNEL);
Line 1062... Line 1366...
1062
	radeon_connector->connector_id = connector_id;
1366
	radeon_connector->connector_id = connector_id;
1063
	radeon_connector->devices = supported_device;
1367
	radeon_connector->devices = supported_device;
1064
	radeon_connector->shared_ddc = shared_ddc;
1368
	radeon_connector->shared_ddc = shared_ddc;
1065
	radeon_connector->connector_object_id = connector_object_id;
1369
	radeon_connector->connector_object_id = connector_object_id;
1066
	radeon_connector->hpd = *hpd;
1370
	radeon_connector->hpd = *hpd;
-
 
1371
	radeon_connector->router = *router;
-
 
1372
	if (router->ddc_valid || router->cd_valid) {
-
 
1373
		radeon_connector->router_bus = radeon_i2c_lookup(rdev, &router->i2c_info);
-
 
1374
		if (!radeon_connector->router_bus)
-
 
1375
			DRM_ERROR("Failed to assign router i2c bus! Check dmesg for i2c errors.\n");
-
 
1376
	}
-
 
1377
 
-
 
1378
	if (is_dp_bridge) {
-
 
1379
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
-
 
1380
		if (!radeon_dig_connector)
-
 
1381
			goto failed;
-
 
1382
		radeon_dig_connector->igp_lane_info = igp_lane_info;
-
 
1383
		radeon_connector->con_priv = radeon_dig_connector;
-
 
1384
		drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
-
 
1385
		drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
-
 
1386
		if (i2c_bus->valid) {
-
 
1387
			/* add DP i2c bus */
-
 
1388
			if (connector_type == DRM_MODE_CONNECTOR_eDP)
-
 
1389
				radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch");
-
 
1390
			else
-
 
1391
				radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch");
-
 
1392
			if (!radeon_dig_connector->dp_i2c_bus)
-
 
1393
				DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n");
-
 
1394
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
-
 
1395
			if (!radeon_connector->ddc_bus)
-
 
1396
				DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
-
 
1397
		}
-
 
1398
	switch (connector_type) {
-
 
1399
	case DRM_MODE_CONNECTOR_VGA:
-
 
1400
		case DRM_MODE_CONNECTOR_DVIA:
-
 
1401
		default:
-
 
1402
			connector->interlace_allowed = true;
-
 
1403
			connector->doublescan_allowed = true;
-
 
1404
			break;
-
 
1405
		case DRM_MODE_CONNECTOR_DVII:
-
 
1406
		case DRM_MODE_CONNECTOR_DVID:
-
 
1407
		case DRM_MODE_CONNECTOR_HDMIA:
-
 
1408
		case DRM_MODE_CONNECTOR_HDMIB:
-
 
1409
		case DRM_MODE_CONNECTOR_DisplayPort:
-
 
1410
			drm_connector_attach_property(&radeon_connector->base,
-
 
1411
						      rdev->mode_info.underscan_property,
-
 
1412
						      UNDERSCAN_OFF);
-
 
1413
			drm_connector_attach_property(&radeon_connector->base,
-
 
1414
						      rdev->mode_info.underscan_hborder_property,
-
 
1415
						      0);
-
 
1416
			drm_connector_attach_property(&radeon_connector->base,
-
 
1417
						      rdev->mode_info.underscan_vborder_property,
-
 
1418
						      0);
-
 
1419
			subpixel_order = SubPixelHorizontalRGB;
-
 
1420
			connector->interlace_allowed = true;
-
 
1421
			if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
-
 
1422
				connector->doublescan_allowed = true;
-
 
1423
			else
-
 
1424
				connector->doublescan_allowed = false;
-
 
1425
			break;
-
 
1426
		case DRM_MODE_CONNECTOR_LVDS:
-
 
1427
		case DRM_MODE_CONNECTOR_eDP:
-
 
1428
			drm_connector_attach_property(&radeon_connector->base,
-
 
1429
						      dev->mode_config.scaling_mode_property,
-
 
1430
						      DRM_MODE_SCALE_FULLSCREEN);
-
 
1431
			subpixel_order = SubPixelHorizontalRGB;
-
 
1432
			connector->interlace_allowed = false;
-
 
1433
			connector->doublescan_allowed = false;
-
 
1434
			break;
-
 
1435
		}
-
 
1436
	} else {
1067
	switch (connector_type) {
1437
		switch (connector_type) {
1068
	case DRM_MODE_CONNECTOR_VGA:
1438
		case DRM_MODE_CONNECTOR_VGA:
1069
		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1439
		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1070
		ret = drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1440
		drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1071
		if (ret)
-
 
1072
			goto failed;
-
 
1073
		if (i2c_bus->valid) {
1441
		if (i2c_bus->valid) {
1074
			radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "VGA");
1442
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1075
			if (!radeon_connector->ddc_bus)
1443
			if (!radeon_connector->ddc_bus)
1076
				goto failed;
1444
				DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1077
		}
1445
		}
1078
		radeon_connector->dac_load_detect = true;
1446
		radeon_connector->dac_load_detect = true;
1079
		drm_connector_attach_property(&radeon_connector->base,
1447
		drm_connector_attach_property(&radeon_connector->base,
1080
					      rdev->mode_info.load_detect_property,
1448
					      rdev->mode_info.load_detect_property,
1081
					      1);
1449
					      1);
-
 
1450
		/* no HPD on analog connectors */
-
 
1451
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
-
 
1452
		connector->polled = DRM_CONNECTOR_POLL_CONNECT;
-
 
1453
		connector->interlace_allowed = true;
-
 
1454
		connector->doublescan_allowed = true;
1082
		break;
1455
		break;
1083
	case DRM_MODE_CONNECTOR_DVIA:
1456
	case DRM_MODE_CONNECTOR_DVIA:
1084
		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1457
		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1085
		ret = drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1458
		drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1086
		if (ret)
-
 
1087
			goto failed;
-
 
1088
		if (i2c_bus->valid) {
1459
		if (i2c_bus->valid) {
1089
			radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DVI");
1460
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1090
			if (!radeon_connector->ddc_bus)
1461
			if (!radeon_connector->ddc_bus)
1091
				goto failed;
1462
				DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1092
		}
1463
		}
1093
		radeon_connector->dac_load_detect = true;
1464
		radeon_connector->dac_load_detect = true;
1094
		drm_connector_attach_property(&radeon_connector->base,
1465
		drm_connector_attach_property(&radeon_connector->base,
1095
					      rdev->mode_info.load_detect_property,
1466
					      rdev->mode_info.load_detect_property,
1096
					      1);
1467
					      1);
-
 
1468
		/* no HPD on analog connectors */
-
 
1469
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
-
 
1470
		connector->interlace_allowed = true;
-
 
1471
		connector->doublescan_allowed = true;
1097
		break;
1472
		break;
1098
	case DRM_MODE_CONNECTOR_DVII:
1473
	case DRM_MODE_CONNECTOR_DVII:
1099
	case DRM_MODE_CONNECTOR_DVID:
1474
	case DRM_MODE_CONNECTOR_DVID:
1100
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1475
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1101
		if (!radeon_dig_connector)
1476
		if (!radeon_dig_connector)
1102
			goto failed;
1477
			goto failed;
1103
		radeon_dig_connector->linkb = linkb;
-
 
1104
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1478
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1105
		radeon_connector->con_priv = radeon_dig_connector;
1479
		radeon_connector->con_priv = radeon_dig_connector;
1106
		drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
1480
		drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
1107
		ret = drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
1481
		drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
1108
		if (ret)
-
 
1109
			goto failed;
-
 
1110
		if (i2c_bus->valid) {
1482
		if (i2c_bus->valid) {
1111
			radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DVI");
1483
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1112
			if (!radeon_connector->ddc_bus)
1484
			if (!radeon_connector->ddc_bus)
1113
				goto failed;
1485
				DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1114
		}
1486
		}
1115
		subpixel_order = SubPixelHorizontalRGB;
1487
		subpixel_order = SubPixelHorizontalRGB;
1116
		drm_connector_attach_property(&radeon_connector->base,
1488
		drm_connector_attach_property(&radeon_connector->base,
1117
					      rdev->mode_info.coherent_mode_property,
1489
					      rdev->mode_info.coherent_mode_property,
1118
					      1);
1490
					      1);
-
 
1491
		if (ASIC_IS_AVIVO(rdev)) {
-
 
1492
			drm_connector_attach_property(&radeon_connector->base,
-
 
1493
						      rdev->mode_info.underscan_property,
-
 
1494
						      UNDERSCAN_OFF);
-
 
1495
			drm_connector_attach_property(&radeon_connector->base,
-
 
1496
						      rdev->mode_info.underscan_hborder_property,
-
 
1497
						      0);
-
 
1498
			drm_connector_attach_property(&radeon_connector->base,
-
 
1499
						      rdev->mode_info.underscan_vborder_property,
-
 
1500
						      0);
-
 
1501
		}
1119
		if (connector_type == DRM_MODE_CONNECTOR_DVII) {
1502
		if (connector_type == DRM_MODE_CONNECTOR_DVII) {
1120
		radeon_connector->dac_load_detect = true;
1503
		radeon_connector->dac_load_detect = true;
1121
		drm_connector_attach_property(&radeon_connector->base,
1504
		drm_connector_attach_property(&radeon_connector->base,
1122
					      rdev->mode_info.load_detect_property,
1505
					      rdev->mode_info.load_detect_property,
1123
					      1);
1506
					      1);
1124
		}
1507
		}
-
 
1508
		connector->interlace_allowed = true;
-
 
1509
		if (connector_type == DRM_MODE_CONNECTOR_DVII)
-
 
1510
			connector->doublescan_allowed = true;
-
 
1511
		else
-
 
1512
			connector->doublescan_allowed = false;
1125
		break;
1513
		break;
1126
	case DRM_MODE_CONNECTOR_HDMIA:
1514
	case DRM_MODE_CONNECTOR_HDMIA:
1127
	case DRM_MODE_CONNECTOR_HDMIB:
1515
	case DRM_MODE_CONNECTOR_HDMIB:
1128
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1516
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1129
		if (!radeon_dig_connector)
1517
		if (!radeon_dig_connector)
1130
			goto failed;
1518
			goto failed;
1131
		radeon_dig_connector->linkb = linkb;
-
 
1132
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1519
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1133
		radeon_connector->con_priv = radeon_dig_connector;
1520
		radeon_connector->con_priv = radeon_dig_connector;
1134
		drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
1521
		drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
1135
		ret = drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
1522
		drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
1136
		if (ret)
-
 
1137
			goto failed;
-
 
1138
		if (i2c_bus->valid) {
1523
		if (i2c_bus->valid) {
1139
			radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "HDMI");
1524
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1140
			if (!radeon_connector->ddc_bus)
1525
			if (!radeon_connector->ddc_bus)
1141
				goto failed;
1526
				DRM_ERROR("HDMI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1142
		}
1527
		}
1143
		drm_connector_attach_property(&radeon_connector->base,
1528
		drm_connector_attach_property(&radeon_connector->base,
1144
					      rdev->mode_info.coherent_mode_property,
1529
					      rdev->mode_info.coherent_mode_property,
1145
					      1);
1530
					      1);
-
 
1531
		if (ASIC_IS_AVIVO(rdev)) {
-
 
1532
			drm_connector_attach_property(&radeon_connector->base,
-
 
1533
						      rdev->mode_info.underscan_property,
-
 
1534
						      UNDERSCAN_OFF);
-
 
1535
			drm_connector_attach_property(&radeon_connector->base,
-
 
1536
						      rdev->mode_info.underscan_hborder_property,
-
 
1537
						      0);
-
 
1538
			drm_connector_attach_property(&radeon_connector->base,
-
 
1539
						      rdev->mode_info.underscan_vborder_property,
-
 
1540
						      0);
-
 
1541
		}
1146
		subpixel_order = SubPixelHorizontalRGB;
1542
		subpixel_order = SubPixelHorizontalRGB;
-
 
1543
		connector->interlace_allowed = true;
-
 
1544
		if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
-
 
1545
			connector->doublescan_allowed = true;
-
 
1546
		else
-
 
1547
			connector->doublescan_allowed = false;
1147
		break;
1548
		break;
1148
	case DRM_MODE_CONNECTOR_DisplayPort:
1549
	case DRM_MODE_CONNECTOR_DisplayPort:
1149
	case DRM_MODE_CONNECTOR_eDP:
-
 
1150
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1550
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1151
		if (!radeon_dig_connector)
1551
		if (!radeon_dig_connector)
1152
			goto failed;
1552
			goto failed;
1153
		radeon_dig_connector->linkb = linkb;
-
 
1154
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1553
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1155
		radeon_connector->con_priv = radeon_dig_connector;
1554
		radeon_connector->con_priv = radeon_dig_connector;
1156
		drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
1555
		drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
1157
		ret = drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
1556
		drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
1158
		if (ret)
-
 
1159
			goto failed;
-
 
1160
		if (i2c_bus->valid) {
1557
		if (i2c_bus->valid) {
1161
			/* add DP i2c bus */
1558
			/* add DP i2c bus */
1162
			if (connector_type == DRM_MODE_CONNECTOR_eDP)
-
 
1163
				radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch");
-
 
1164
			else
-
 
1165
			radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch");
1559
			radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch");
1166
			if (!radeon_dig_connector->dp_i2c_bus)
1560
			if (!radeon_dig_connector->dp_i2c_bus)
1167
				goto failed;
-
 
1168
			if (connector_type == DRM_MODE_CONNECTOR_eDP)
-
 
1169
				radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "eDP");
1561
				DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n");
1170
			else
-
 
1171
			radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DP");
1562
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1172
			if (!radeon_connector->ddc_bus)
1563
			if (!radeon_connector->ddc_bus)
1173
				goto failed;
1564
				DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1174
		}
1565
		}
1175
		subpixel_order = SubPixelHorizontalRGB;
1566
		subpixel_order = SubPixelHorizontalRGB;
1176
		drm_connector_attach_property(&radeon_connector->base,
1567
		drm_connector_attach_property(&radeon_connector->base,
1177
					      rdev->mode_info.coherent_mode_property,
1568
					      rdev->mode_info.coherent_mode_property,
1178
					      1);
1569
					      1);
-
 
1570
		if (ASIC_IS_AVIVO(rdev)) {
-
 
1571
			drm_connector_attach_property(&radeon_connector->base,
-
 
1572
						      rdev->mode_info.underscan_property,
-
 
1573
						      UNDERSCAN_OFF);
-
 
1574
			drm_connector_attach_property(&radeon_connector->base,
-
 
1575
						      rdev->mode_info.underscan_hborder_property,
-
 
1576
						      0);
-
 
1577
			drm_connector_attach_property(&radeon_connector->base,
-
 
1578
						      rdev->mode_info.underscan_vborder_property,
-
 
1579
						      0);
-
 
1580
		}
-
 
1581
		connector->interlace_allowed = true;
-
 
1582
		/* in theory with a DP to VGA converter... */
-
 
1583
		connector->doublescan_allowed = false;
-
 
1584
		break;
-
 
1585
		case DRM_MODE_CONNECTOR_eDP:
-
 
1586
			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
-
 
1587
			if (!radeon_dig_connector)
-
 
1588
				goto failed;
-
 
1589
			radeon_dig_connector->igp_lane_info = igp_lane_info;
-
 
1590
			radeon_connector->con_priv = radeon_dig_connector;
-
 
1591
			drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
-
 
1592
			drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
-
 
1593
			if (i2c_bus->valid) {
-
 
1594
				/* add DP i2c bus */
-
 
1595
				radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch");
-
 
1596
				if (!radeon_dig_connector->dp_i2c_bus)
-
 
1597
					DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n");
-
 
1598
				radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
-
 
1599
				if (!radeon_connector->ddc_bus)
-
 
1600
					DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
-
 
1601
			}
-
 
1602
			drm_connector_attach_property(&radeon_connector->base,
-
 
1603
						      dev->mode_config.scaling_mode_property,
-
 
1604
						      DRM_MODE_SCALE_FULLSCREEN);
-
 
1605
			subpixel_order = SubPixelHorizontalRGB;
-
 
1606
			connector->interlace_allowed = false;
-
 
1607
			connector->doublescan_allowed = false;
1179
		break;
1608
			break;
1180
	case DRM_MODE_CONNECTOR_SVIDEO:
1609
	case DRM_MODE_CONNECTOR_SVIDEO:
1181
	case DRM_MODE_CONNECTOR_Composite:
1610
	case DRM_MODE_CONNECTOR_Composite:
1182
	case DRM_MODE_CONNECTOR_9PinDIN:
1611
	case DRM_MODE_CONNECTOR_9PinDIN:
1183
		if (radeon_tv == 1) {
-
 
1184
			drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
1612
			drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
1185
			ret = drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
1613
			drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
1186
			if (ret)
-
 
1187
				goto failed;
-
 
1188
			radeon_connector->dac_load_detect = true;
1614
			radeon_connector->dac_load_detect = true;
1189
		drm_connector_attach_property(&radeon_connector->base,
1615
		drm_connector_attach_property(&radeon_connector->base,
1190
					      rdev->mode_info.load_detect_property,
1616
					      rdev->mode_info.load_detect_property,
1191
					      1);
1617
					      1);
1192
			drm_connector_attach_property(&radeon_connector->base,
1618
			drm_connector_attach_property(&radeon_connector->base,
1193
						      rdev->mode_info.tv_std_property,
1619
						      rdev->mode_info.tv_std_property,
1194
						      radeon_atombios_get_tv_info(rdev));
1620
						      radeon_atombios_get_tv_info(rdev));
1195
		}
1621
			/* no HPD on analog connectors */
-
 
1622
			radeon_connector->hpd.hpd = RADEON_HPD_NONE;
-
 
1623
		connector->interlace_allowed = false;
-
 
1624
		connector->doublescan_allowed = false;
1196
		break;
1625
		break;
1197
	case DRM_MODE_CONNECTOR_LVDS:
1626
	case DRM_MODE_CONNECTOR_LVDS:
1198
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1627
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1199
		if (!radeon_dig_connector)
1628
		if (!radeon_dig_connector)
1200
			goto failed;
1629
			goto failed;
1201
		radeon_dig_connector->linkb = linkb;
-
 
1202
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1630
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1203
		radeon_connector->con_priv = radeon_dig_connector;
1631
		radeon_connector->con_priv = radeon_dig_connector;
1204
		drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
1632
		drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
1205
		ret = drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
1633
		drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
1206
		if (ret)
-
 
1207
			goto failed;
-
 
1208
		if (i2c_bus->valid) {
1634
		if (i2c_bus->valid) {
1209
			radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "LVDS");
1635
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1210
			if (!radeon_connector->ddc_bus)
1636
			if (!radeon_connector->ddc_bus)
1211
				goto failed;
1637
				DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1212
		}
1638
		}
1213
		drm_connector_attach_property(&radeon_connector->base,
1639
		drm_connector_attach_property(&radeon_connector->base,
1214
					      dev->mode_config.scaling_mode_property,
1640
					      dev->mode_config.scaling_mode_property,
1215
					      DRM_MODE_SCALE_FULLSCREEN);
1641
					      DRM_MODE_SCALE_FULLSCREEN);
1216
		subpixel_order = SubPixelHorizontalRGB;
1642
		subpixel_order = SubPixelHorizontalRGB;
-
 
1643
		connector->interlace_allowed = false;
-
 
1644
		connector->doublescan_allowed = false;
1217
		break;
1645
		break;
1218
	}
1646
	}
-
 
1647
	}
-
 
1648
 
-
 
1649
	if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) {
-
 
1650
		if (i2c_bus->valid)
-
 
1651
			connector->polled = DRM_CONNECTOR_POLL_CONNECT;
-
 
1652
	} else
-
 
1653
		connector->polled = DRM_CONNECTOR_POLL_HPD;
Line 1219... Line 1654...
1219
 
1654
 
1220
	connector->display_info.subpixel_order = subpixel_order;
1655
	connector->display_info.subpixel_order = subpixel_order;
1221
	drm_sysfs_connector_add(connector);
1656
	drm_sysfs_connector_add(connector);
Line 1222... Line 1657...
1222
	return;
1657
	return;
1223
 
-
 
1224
failed:
-
 
1225
	if (radeon_connector->ddc_bus)
1658
 
1226
		radeon_i2c_destroy(radeon_connector->ddc_bus);
1659
failed:
1227
	drm_connector_cleanup(connector);
1660
	drm_connector_cleanup(connector);
Line 1228... Line 1661...
1228
	kfree(connector);
1661
	kfree(connector);
Line 1239... Line 1672...
1239
{
1672
{
1240
	struct radeon_device *rdev = dev->dev_private;
1673
	struct radeon_device *rdev = dev->dev_private;
1241
	struct drm_connector *connector;
1674
	struct drm_connector *connector;
1242
	struct radeon_connector *radeon_connector;
1675
	struct radeon_connector *radeon_connector;
1243
	uint32_t subpixel_order = SubPixelNone;
1676
	uint32_t subpixel_order = SubPixelNone;
1244
	int ret;
-
 
Line 1245... Line -...
1245
 
-
 
1246
	/* fixme - tv/cv/din */
1677
 
1247
	if (connector_type == DRM_MODE_CONNECTOR_Unknown)
1678
	if (connector_type == DRM_MODE_CONNECTOR_Unknown)
Line -... Line 1679...
-
 
1679
		return;
-
 
1680
 
-
 
1681
	/* if the user selected tv=0 don't try and add the connector */
-
 
1682
	if (((connector_type == DRM_MODE_CONNECTOR_SVIDEO) ||
-
 
1683
	     (connector_type == DRM_MODE_CONNECTOR_Composite) ||
-
 
1684
	     (connector_type == DRM_MODE_CONNECTOR_9PinDIN)) &&
-
 
1685
	    (radeon_tv == 0))
1248
		return;
1686
		return;
1249
 
1687
 
1250
	/* see if we already added it */
1688
	/* see if we already added it */
1251
	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
1689
	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
1252
		radeon_connector = to_radeon_connector(connector);
1690
		radeon_connector = to_radeon_connector(connector);
Line 1267... Line 1705...
1267
	radeon_connector->connector_object_id = connector_object_id;
1705
	radeon_connector->connector_object_id = connector_object_id;
1268
	radeon_connector->hpd = *hpd;
1706
	radeon_connector->hpd = *hpd;
1269
	switch (connector_type) {
1707
	switch (connector_type) {
1270
	case DRM_MODE_CONNECTOR_VGA:
1708
	case DRM_MODE_CONNECTOR_VGA:
1271
		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1709
		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1272
		ret = drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1710
		drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1273
		if (ret)
-
 
1274
			goto failed;
-
 
1275
		if (i2c_bus->valid) {
1711
		if (i2c_bus->valid) {
1276
			radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "VGA");
1712
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1277
			if (!radeon_connector->ddc_bus)
1713
			if (!radeon_connector->ddc_bus)
1278
				goto failed;
1714
				DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1279
		}
1715
		}
1280
		radeon_connector->dac_load_detect = true;
1716
		radeon_connector->dac_load_detect = true;
1281
		drm_connector_attach_property(&radeon_connector->base,
1717
		drm_connector_attach_property(&radeon_connector->base,
1282
					      rdev->mode_info.load_detect_property,
1718
					      rdev->mode_info.load_detect_property,
1283
					      1);
1719
					      1);
-
 
1720
		/* no HPD on analog connectors */
-
 
1721
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
-
 
1722
		connector->polled = DRM_CONNECTOR_POLL_CONNECT;
-
 
1723
		connector->interlace_allowed = true;
-
 
1724
		connector->doublescan_allowed = true;
1284
		break;
1725
		break;
1285
	case DRM_MODE_CONNECTOR_DVIA:
1726
	case DRM_MODE_CONNECTOR_DVIA:
1286
		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1727
		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1287
		ret = drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1728
		drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1288
		if (ret)
-
 
1289
			goto failed;
-
 
1290
		if (i2c_bus->valid) {
1729
		if (i2c_bus->valid) {
1291
			radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DVI");
1730
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1292
			if (!radeon_connector->ddc_bus)
1731
			if (!radeon_connector->ddc_bus)
1293
				goto failed;
1732
				DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1294
		}
1733
		}
1295
		radeon_connector->dac_load_detect = true;
1734
		radeon_connector->dac_load_detect = true;
1296
		drm_connector_attach_property(&radeon_connector->base,
1735
		drm_connector_attach_property(&radeon_connector->base,
1297
					      rdev->mode_info.load_detect_property,
1736
					      rdev->mode_info.load_detect_property,
1298
					      1);
1737
					      1);
-
 
1738
		/* no HPD on analog connectors */
-
 
1739
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
-
 
1740
		connector->interlace_allowed = true;
-
 
1741
		connector->doublescan_allowed = true;
1299
		break;
1742
		break;
1300
	case DRM_MODE_CONNECTOR_DVII:
1743
	case DRM_MODE_CONNECTOR_DVII:
1301
	case DRM_MODE_CONNECTOR_DVID:
1744
	case DRM_MODE_CONNECTOR_DVID:
1302
		drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
1745
		drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
1303
		ret = drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
1746
		drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
1304
		if (ret)
-
 
1305
			goto failed;
-
 
1306
		if (i2c_bus->valid) {
1747
		if (i2c_bus->valid) {
1307
			radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DVI");
1748
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1308
			if (!radeon_connector->ddc_bus)
1749
			if (!radeon_connector->ddc_bus)
-
 
1750
				DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1309
				goto failed;
1751
		}
-
 
1752
		if (connector_type == DRM_MODE_CONNECTOR_DVII) {
1310
			radeon_connector->dac_load_detect = true;
1753
			radeon_connector->dac_load_detect = true;
1311
			drm_connector_attach_property(&radeon_connector->base,
1754
			drm_connector_attach_property(&radeon_connector->base,
1312
						      rdev->mode_info.load_detect_property,
1755
						      rdev->mode_info.load_detect_property,
1313
						      1);
1756
						      1);
1314
		}
1757
		}
1315
		subpixel_order = SubPixelHorizontalRGB;
1758
		subpixel_order = SubPixelHorizontalRGB;
-
 
1759
		connector->interlace_allowed = true;
-
 
1760
		if (connector_type == DRM_MODE_CONNECTOR_DVII)
-
 
1761
			connector->doublescan_allowed = true;
-
 
1762
		else
-
 
1763
			connector->doublescan_allowed = false;
1316
		break;
1764
		break;
1317
	case DRM_MODE_CONNECTOR_SVIDEO:
1765
	case DRM_MODE_CONNECTOR_SVIDEO:
1318
	case DRM_MODE_CONNECTOR_Composite:
1766
	case DRM_MODE_CONNECTOR_Composite:
1319
	case DRM_MODE_CONNECTOR_9PinDIN:
1767
	case DRM_MODE_CONNECTOR_9PinDIN:
1320
		if (radeon_tv == 1) {
-
 
1321
			drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
1768
			drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
1322
			ret = drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
1769
			drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
1323
			if (ret)
-
 
1324
				goto failed;
-
 
1325
			radeon_connector->dac_load_detect = true;
1770
			radeon_connector->dac_load_detect = true;
1326
			/* RS400,RC410,RS480 chipset seems to report a lot
1771
			/* RS400,RC410,RS480 chipset seems to report a lot
1327
			 * of false positive on load detect, we haven't yet
1772
			 * of false positive on load detect, we haven't yet
1328
			 * found a way to make load detect reliable on those
1773
			 * found a way to make load detect reliable on those
1329
			 * chipset, thus just disable it for TV.
1774
			 * chipset, thus just disable it for TV.
Line 1334... Line 1779...
1334
						      rdev->mode_info.load_detect_property,
1779
						      rdev->mode_info.load_detect_property,
1335
						      radeon_connector->dac_load_detect);
1780
						      radeon_connector->dac_load_detect);
1336
			drm_connector_attach_property(&radeon_connector->base,
1781
			drm_connector_attach_property(&radeon_connector->base,
1337
						      rdev->mode_info.tv_std_property,
1782
						      rdev->mode_info.tv_std_property,
1338
						      radeon_combios_get_tv_info(rdev));
1783
						      radeon_combios_get_tv_info(rdev));
1339
		}
1784
			/* no HPD on analog connectors */
-
 
1785
			radeon_connector->hpd.hpd = RADEON_HPD_NONE;
-
 
1786
		connector->interlace_allowed = false;
-
 
1787
		connector->doublescan_allowed = false;
1340
		break;
1788
		break;
1341
	case DRM_MODE_CONNECTOR_LVDS:
1789
	case DRM_MODE_CONNECTOR_LVDS:
1342
		drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
1790
		drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
1343
		ret = drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
1791
		drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
1344
		if (ret)
-
 
1345
			goto failed;
-
 
1346
		if (i2c_bus->valid) {
1792
		if (i2c_bus->valid) {
1347
			radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "LVDS");
1793
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1348
			if (!radeon_connector->ddc_bus)
1794
			if (!radeon_connector->ddc_bus)
1349
				goto failed;
1795
				DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1350
		}
1796
		}
1351
		drm_connector_attach_property(&radeon_connector->base,
1797
		drm_connector_attach_property(&radeon_connector->base,
1352
					      dev->mode_config.scaling_mode_property,
1798
					      dev->mode_config.scaling_mode_property,
1353
					      DRM_MODE_SCALE_FULLSCREEN);
1799
					      DRM_MODE_SCALE_FULLSCREEN);
1354
		subpixel_order = SubPixelHorizontalRGB;
1800
		subpixel_order = SubPixelHorizontalRGB;
-
 
1801
		connector->interlace_allowed = false;
-
 
1802
		connector->doublescan_allowed = false;
1355
		break;
1803
		break;
1356
	}
1804
	}
Line -... Line 1805...
-
 
1805
 
-
 
1806
	if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) {
-
 
1807
		if (i2c_bus->valid)
-
 
1808
			connector->polled = DRM_CONNECTOR_POLL_CONNECT;
-
 
1809
	} else
1357
 
1810
		connector->polled = DRM_CONNECTOR_POLL_HPD;
1358
	connector->display_info.subpixel_order = subpixel_order;
1811
	connector->display_info.subpixel_order = subpixel_order;
-
 
1812
	drm_sysfs_connector_add(connector);
1359
	drm_sysfs_connector_add(connector);
1813
	if (connector_type == DRM_MODE_CONNECTOR_LVDS) {
Line 1360... Line -...
1360
	return;
-
 
-
 
1814
		struct drm_encoder *drm_encoder;
1361
 
1815
 
-
 
1816
		list_for_each_entry(drm_encoder, &dev->mode_config.encoder_list, head) {
1362
failed:
1817
			struct radeon_encoder *radeon_encoder;
-
 
1818
 
1363
	if (radeon_connector->ddc_bus)
1819
			radeon_encoder = to_radeon_encoder(drm_encoder);
1364
		radeon_i2c_destroy(radeon_connector->ddc_bus);
1820
			if (radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_LVDS)
-
 
1821
				radeon_legacy_backlight_init(radeon_encoder, connector);
1365
	drm_connector_cleanup(connector);
1822
		}