Subversion Repositories Kolibri OS

Rev

Rev 5271 | Rev 6321 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5271 Rev 6104
Line 25... Line 25...
25
 */
25
 */
26
#include 
26
#include 
27
#include 
27
#include 
28
#include 
28
#include 
29
#include 
29
#include 
-
 
30
#include 
30
#include 
31
#include 
31
#include "radeon.h"
32
#include "radeon.h"
-
 
33
#include "radeon_audio.h"
32
#include "atom.h"
34
#include "atom.h"
Line -... Line 35...
-
 
35
 
Line -... Line 36...
-
 
36
#include 
-
 
37
 
-
 
38
static int radeon_dp_handle_hpd(struct drm_connector *connector)
-
 
39
{
Line -... Line 40...
-
 
40
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
-
 
41
	int ret;
-
 
42
 
-
 
43
	ret = radeon_dp_mst_check_status(radeon_connector);
-
 
44
	if (ret == -EINVAL)
33
 
45
		return 1;
34
 
46
	return 0;
35
 
47
}
36
void radeon_connector_hotplug(struct drm_connector *connector)
48
void radeon_connector_hotplug(struct drm_connector *connector)
37
{
49
{
Line -... Line 50...
-
 
50
	struct drm_device *dev = connector->dev;
-
 
51
	struct radeon_device *rdev = dev->dev_private;
-
 
52
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
-
 
53
 
-
 
54
	if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {
-
 
55
		struct radeon_connector_atom_dig *dig_connector =
-
 
56
			radeon_connector->con_priv;
-
 
57
 
-
 
58
		if (radeon_connector->is_mst_connector)
-
 
59
			return;
-
 
60
		if (dig_connector->is_mst) {
38
	struct drm_device *dev = connector->dev;
61
			radeon_dp_handle_hpd(connector);
39
	struct radeon_device *rdev = dev->dev_private;
62
			return;
40
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
63
		}
41
 
64
	}
42
	/* bail if the connector does not have hpd pin, e.g.,
65
	/* bail if the connector does not have hpd pin, e.g.,
Line 43... Line 66...
43
	 * VGA, TV, etc.
66
	 * VGA, TV, etc.
Line 44... Line 67...
44
	 */
67
	 */
45
	if (radeon_connector->hpd.hpd == RADEON_HPD_NONE)
68
	if (radeon_connector->hpd.hpd == RADEON_HPD_NONE)
46
		return;
69
		return;
47
 
70
 
Line 65... Line 88...
65
		dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector);
88
		dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector);
66
		/* don't do anything if sink is not display port, i.e.,
89
		/* don't do anything if sink is not display port, i.e.,
67
		 * passive dp->(dvi|hdmi) adaptor
90
		 * passive dp->(dvi|hdmi) adaptor
68
		 */
91
		 */
69
		if (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
92
		if (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
70
		int saved_dpms = connector->dpms;
93
			int saved_dpms = connector->dpms;
71
			/* Only turn off the display if it's physically disconnected */
94
			/* Only turn off the display if it's physically disconnected */
72
			if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
95
			if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
73
			drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
96
				drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
74
			} else if (radeon_dp_needs_link_train(radeon_connector)) {
97
			} else if (radeon_dp_needs_link_train(radeon_connector)) {
-
 
98
				/* Don't try to start link training before we
-
 
99
				 * have the dpcd */
-
 
100
				if (!radeon_dp_getdpcd(radeon_connector))
-
 
101
					return;
-
 
102
 
75
				/* set it to OFF so that drm_helper_connector_dpms()
103
				/* set it to OFF so that drm_helper_connector_dpms()
76
				 * won't return immediately since the current state
104
				 * won't return immediately since the current state
77
				 * is ON at this point.
105
				 * is ON at this point.
78
				 */
106
				 */
79
				connector->dpms = DRM_MODE_DPMS_OFF;
107
				connector->dpms = DRM_MODE_DPMS_OFF;
80
			drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
108
				drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
81
			}
-
 
82
		connector->dpms = saved_dpms;
-
 
83
			}
109
			}
-
 
110
			connector->dpms = saved_dpms;
-
 
111
		}
84
	}
112
	}
85
}
113
}
Line 86... Line 114...
86
 
114
 
87
static void radeon_property_change_mode(struct drm_encoder *encoder)
115
static void radeon_property_change_mode(struct drm_encoder *encoder)
Line 132... Line 160...
132
	case DRM_MODE_CONNECTOR_eDP:
160
	case DRM_MODE_CONNECTOR_eDP:
133
	case DRM_MODE_CONNECTOR_LVDS:
161
	case DRM_MODE_CONNECTOR_LVDS:
134
		if (connector->display_info.bpc)
162
		if (connector->display_info.bpc)
135
			bpc = connector->display_info.bpc;
163
			bpc = connector->display_info.bpc;
136
		else if (ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev)) {
164
		else if (ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev)) {
137
			struct drm_connector_helper_funcs *connector_funcs =
165
			const struct drm_connector_helper_funcs *connector_funcs =
138
				connector->helper_private;
166
				connector->helper_private;
139
			struct drm_encoder *encoder = connector_funcs->best_encoder(connector);
167
			struct drm_encoder *encoder = connector_funcs->best_encoder(connector);
140
			struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
168
			struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
141
			struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
169
			struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
Line 222... Line 250...
222
{
250
{
223
	struct drm_device *dev = connector->dev;
251
	struct drm_device *dev = connector->dev;
224
	struct radeon_device *rdev = dev->dev_private;
252
	struct radeon_device *rdev = dev->dev_private;
225
	struct drm_encoder *best_encoder = NULL;
253
	struct drm_encoder *best_encoder = NULL;
226
	struct drm_encoder *encoder = NULL;
254
	struct drm_encoder *encoder = NULL;
227
	struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
255
	const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
228
	bool connected;
256
	bool connected;
229
	int i;
257
	int i;
Line 230... Line 258...
230
 
258
 
Line 369... Line 397...
369
{
397
{
370
	int enc_id = connector->encoder_ids[0];
398
	int enc_id = connector->encoder_ids[0];
371
	/* pick the encoder ids */
399
	/* pick the encoder ids */
372
	if (enc_id)
400
	if (enc_id)
373
		return drm_encoder_find(connector->dev, enc_id);
401
		return drm_encoder_find(connector->dev, enc_id);
374
			return NULL;
402
	return NULL;
375
}
403
}
Line 376... Line 404...
376
 
404
 
377
static void radeon_get_native_mode(struct drm_connector *connector)
405
static void radeon_get_native_mode(struct drm_connector *connector)
378
{
406
{
Line 557... Line 585...
557
 
585
 
558
		dig = radeon_encoder->enc_priv;
586
		dig = radeon_encoder->enc_priv;
559
		new_coherent_mode = val ? true : false;
587
		new_coherent_mode = val ? true : false;
560
		if (dig->coherent_mode != new_coherent_mode) {
588
		if (dig->coherent_mode != new_coherent_mode) {
561
			dig->coherent_mode = new_coherent_mode;
589
			dig->coherent_mode = new_coherent_mode;
562
		radeon_property_change_mode(&radeon_encoder->base);
590
			radeon_property_change_mode(&radeon_encoder->base);
563
	}
591
		}
Line 564... Line 592...
564
	}
592
	}
565
 
593
 
566
	if (property == rdev->mode_info.audio_property) {
594
	if (property == rdev->mode_info.audio_property) {
Line 699... Line 727...
699
		enum radeon_rmx_type rmx_type;
727
		enum radeon_rmx_type rmx_type;
Line 700... Line 728...
700
 
728
 
701
		if (connector->encoder)
729
		if (connector->encoder)
702
			radeon_encoder = to_radeon_encoder(connector->encoder);
730
			radeon_encoder = to_radeon_encoder(connector->encoder);
703
		else {
731
		else {
704
			struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
732
			const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
705
			radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
733
			radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
Line 706... Line 734...
706
		}
734
		}
707
 
735
 
Line 722... Line 750...
722
		radeon_encoder->rmx_type = rmx_type;
750
		radeon_encoder->rmx_type = rmx_type;
Line 723... Line 751...
723
 
751
 
724
		radeon_property_change_mode(&radeon_encoder->base);
752
		radeon_property_change_mode(&radeon_encoder->base);
Line -... Line 753...
-
 
753
	}
-
 
754
 
-
 
755
	if (property == rdev->mode_info.output_csc_property) {
-
 
756
		if (connector->encoder)
-
 
757
			radeon_encoder = to_radeon_encoder(connector->encoder);
-
 
758
		else {
-
 
759
			const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
-
 
760
			radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
-
 
761
		}
-
 
762
 
-
 
763
		if (radeon_encoder->output_csc == val)
-
 
764
			return 0;
-
 
765
 
-
 
766
		radeon_encoder->output_csc = val;
-
 
767
 
-
 
768
		if (connector->encoder->crtc) {
-
 
769
			struct drm_crtc *crtc  = connector->encoder->crtc;
-
 
770
			const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
-
 
771
			struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
-
 
772
 
-
 
773
			radeon_crtc->output_csc = radeon_encoder->output_csc;
-
 
774
 
-
 
775
			(*crtc_funcs->load_lut)(crtc);
-
 
776
		}
725
	}
777
	}
726
 
778
 
Line 727... Line 779...
727
	return 0;
779
	return 0;
728
}
780
}
Line 768... Line 820...
768
	int ret = 0;
820
	int ret = 0;
769
	struct drm_display_mode *mode;
821
	struct drm_display_mode *mode;
Line 770... Line 822...
770
 
822
 
771
	radeon_connector_get_edid(connector);
823
	radeon_connector_get_edid(connector);
772
	ret = radeon_ddc_get_modes(connector);
824
	ret = radeon_ddc_get_modes(connector);
773
		if (ret > 0) {
825
	if (ret > 0) {
774
			encoder = radeon_best_single_encoder(connector);
826
		encoder = radeon_best_single_encoder(connector);
775
			if (encoder) {
827
		if (encoder) {
776
				radeon_fixup_lvds_native_mode(encoder, connector);
828
			radeon_fixup_lvds_native_mode(encoder, connector);
777
				/* add scaled modes */
829
			/* add scaled modes */
778
				radeon_add_common_modes(encoder, connector);
-
 
779
			}
-
 
780
			return ret;
830
			radeon_add_common_modes(encoder, connector);
-
 
831
		}
-
 
832
		return ret;
Line 781... Line 833...
781
		}
833
	}
782
 
834
 
783
	encoder = radeon_best_single_encoder(connector);
835
	encoder = radeon_best_single_encoder(connector);
Line 843... Line 895...
843
		struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
895
		struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
Line 844... Line 896...
844
 
896
 
845
		/* check if panel is valid */
897
		/* check if panel is valid */
846
		if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240)
898
		if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240)
-
 
899
			ret = connector_status_connected;
-
 
900
		/* don't fetch the edid from the vbios if ddc fails and runpm is
847
			ret = connector_status_connected;
901
		 * enabled so we report disconnected.
-
 
902
		 */
-
 
903
		if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0))
848
 
904
			ret = connector_status_disconnected;
Line 849... Line 905...
849
	}
905
	}
850
 
906
 
851
	/* check for edid as well */
907
	/* check for edid as well */
Line 882... Line 938...
882
		return 0;
938
		return 0;
Line 883... Line 939...
883
 
939
 
884
	if (connector->encoder)
940
	if (connector->encoder)
885
		radeon_encoder = to_radeon_encoder(connector->encoder);
941
		radeon_encoder = to_radeon_encoder(connector->encoder);
886
	else {
942
	else {
887
		struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
943
		const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
888
		radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
944
		radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
Line 889... Line 945...
889
	}
945
	}
890
 
946
 
Line 950... Line 1006...
950
{
1006
{
951
	struct drm_device *dev = connector->dev;
1007
	struct drm_device *dev = connector->dev;
952
	struct radeon_device *rdev = dev->dev_private;
1008
	struct radeon_device *rdev = dev->dev_private;
953
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1009
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
954
	struct drm_encoder *encoder;
1010
	struct drm_encoder *encoder;
955
	struct drm_encoder_helper_funcs *encoder_funcs;
1011
	const struct drm_encoder_helper_funcs *encoder_funcs;
956
	bool dret = false;
1012
	bool dret = false;
957
	enum drm_connector_status ret = connector_status_disconnected;
1013
	enum drm_connector_status ret = connector_status_disconnected;
Line 958... Line 1014...
958
 
1014
 
959
	encoder = radeon_best_single_encoder(connector);
1015
	encoder = radeon_best_single_encoder(connector);
Line 980... Line 1036...
980
			 */
1036
			 */
981
			if (radeon_connector->use_digital && radeon_connector->shared_ddc) {
1037
			if (radeon_connector->use_digital && radeon_connector->shared_ddc) {
982
				radeon_connector_free_edid(connector);
1038
				radeon_connector_free_edid(connector);
983
				ret = connector_status_disconnected;
1039
				ret = connector_status_disconnected;
984
			} else {
1040
			} else {
985
		ret = connector_status_connected;
1041
				ret = connector_status_connected;
986
		}
1042
			}
987
		}
1043
		}
988
	} else {
1044
	} else {
Line 989... Line 1045...
989
 
1045
 
990
		/* if we aren't forcing don't do destructive polling */
1046
		/* if we aren't forcing don't do destructive polling */
Line 1072... Line 1128...
1072
 
1128
 
1073
static enum drm_connector_status
1129
static enum drm_connector_status
1074
radeon_tv_detect(struct drm_connector *connector, bool force)
1130
radeon_tv_detect(struct drm_connector *connector, bool force)
1075
{
1131
{
1076
	struct drm_encoder *encoder;
1132
	struct drm_encoder *encoder;
1077
	struct drm_encoder_helper_funcs *encoder_funcs;
1133
	const struct drm_encoder_helper_funcs *encoder_funcs;
1078
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1134
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1079
	enum drm_connector_status ret = connector_status_disconnected;
1135
	enum drm_connector_status ret = connector_status_disconnected;
Line 1080... Line 1136...
1080
	int r;
1136
	int r;
Line 1146... Line 1202...
1146
{
1202
{
1147
	struct drm_device *dev = connector->dev;
1203
	struct drm_device *dev = connector->dev;
1148
	struct radeon_device *rdev = dev->dev_private;
1204
	struct radeon_device *rdev = dev->dev_private;
1149
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1205
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1150
	struct drm_encoder *encoder = NULL;
1206
	struct drm_encoder *encoder = NULL;
1151
	struct drm_encoder_helper_funcs *encoder_funcs;
1207
	const struct drm_encoder_helper_funcs *encoder_funcs;
1152
	int i, r;
1208
	int i, r;
1153
	enum drm_connector_status ret = connector_status_disconnected;
1209
	enum drm_connector_status ret = connector_status_disconnected;
1154
	bool dret = false, broken_edid = false;
1210
	bool dret = false, broken_edid = false;
Line 1155... Line 1211...
1155
 
1211
 
1156
 
1212
 
1157
	if (!force && radeon_check_hpd_status_unchanged(connector)) {
1213
	if (!force && radeon_check_hpd_status_unchanged(connector)) {
1158
		ret = connector->status;
1214
		ret = connector->status;
Line 1159... Line 1215...
1159
		goto exit;
1215
		goto exit;
1160
	}
1216
	}
-
 
1217
 
1161
 
1218
	if (radeon_connector->ddc_bus) {
1162
	if (radeon_connector->ddc_bus)
1219
		dret = radeon_ddc_probe(radeon_connector, false);
1163
		dret = radeon_ddc_probe(radeon_connector, false);
1220
	}
1164
	if (dret) {
1221
	if (dret) {
Line 1190... Line 1247...
1190
			 */
1247
			 */
1191
			if ((!radeon_connector->use_digital) && radeon_connector->shared_ddc) {
1248
			if ((!radeon_connector->use_digital) && radeon_connector->shared_ddc) {
1192
				radeon_connector_free_edid(connector);
1249
				radeon_connector_free_edid(connector);
1193
				ret = connector_status_disconnected;
1250
				ret = connector_status_disconnected;
1194
			} else {
1251
			} else {
1195
		ret = connector_status_connected;
1252
				ret = connector_status_connected;
1196
			}
1253
			}
1197
			/* This gets complicated.  We have boards with VGA + HDMI with a
1254
			/* This gets complicated.  We have boards with VGA + HDMI with a
1198
			 * shared DDC line and we have boards with DVI-D + HDMI with a shared
1255
			 * shared DDC line and we have boards with DVI-D + HDMI with a shared
1199
			 * DDC line.  The latter is more complex because with DVI<->HDMI adapters
1256
			 * DDC line.  The latter is more complex because with DVI<->HDMI adapters
1200
			 * you don't really know what's connected to which port as both are digital.
1257
			 * you don't really know what's connected to which port as both are digital.
Line 1235... Line 1292...
1235
	if (!force) {
1292
	if (!force) {
1236
		/* only return the previous status if we last
1293
		/* only return the previous status if we last
1237
		 * detected a monitor via load.
1294
		 * detected a monitor via load.
1238
		 */
1295
		 */
1239
		if (radeon_connector->detected_by_load)
1296
		if (radeon_connector->detected_by_load)
1240
		ret = connector->status;
1297
			ret = connector->status;
1241
		goto out;
1298
		goto out;
1242
	}
1299
	}
Line 1243... Line 1300...
1243
 
1300
 
1244
	/* find analog encoder */
1301
	/* find analog encoder */
Line 1257... Line 1314...
1257
				continue;
1314
				continue;
Line 1258... Line 1315...
1258
 
1315
 
1259
			encoder_funcs = encoder->helper_private;
1316
			encoder_funcs = encoder->helper_private;
1260
			if (encoder_funcs->detect) {
1317
			if (encoder_funcs->detect) {
1261
				if (!broken_edid) {
1318
				if (!broken_edid) {
1262
				if (ret != connector_status_connected) {
1319
					if (ret != connector_status_connected) {
1263
						/* deal with analog monitors without DDC */
1320
						/* deal with analog monitors without DDC */
1264
				ret = encoder_funcs->detect(encoder, connector);
1321
						ret = encoder_funcs->detect(encoder, connector);
1265
				if (ret == connector_status_connected) {
1322
						if (ret == connector_status_connected) {
-
 
1323
							radeon_connector->use_digital = false;
-
 
1324
						}
-
 
1325
						if (ret != connector_status_disconnected)
1266
						radeon_connector->use_digital = false;
1326
							radeon_connector->detected_by_load = true;
1267
					}
-
 
1268
					if (ret != connector_status_disconnected)
-
 
1269
						radeon_connector->detected_by_load = true;
-
 
1270
				}
1327
					}
1271
				} else {
1328
				} else {
1272
					enum drm_connector_status lret;
1329
					enum drm_connector_status lret;
1273
					/* assume digital unless load detected otherwise */
1330
					/* assume digital unless load detected otherwise */
1274
					radeon_connector->use_digital = true;
1331
					radeon_connector->use_digital = true;
1275
					lret = encoder_funcs->detect(encoder, connector);
1332
					lret = encoder_funcs->detect(encoder, connector);
1276
					DRM_DEBUG_KMS("load_detect %x returned: %x\n",encoder->encoder_type,lret);
1333
					DRM_DEBUG_KMS("load_detect %x returned: %x\n",encoder->encoder_type,lret);
1277
					if (lret == connector_status_connected)
1334
					if (lret == connector_status_connected)
1278
						radeon_connector->use_digital = false;
1335
						radeon_connector->use_digital = false;
1279
				}
1336
				}
1280
					break;
-
 
1281
				}
1337
				break;
1282
			}
1338
			}
-
 
1339
		}
Line 1283... Line 1340...
1283
		}
1340
	}
1284
 
1341
 
1285
	if ((ret == connector_status_connected) && (radeon_connector->use_digital == false) &&
1342
	if ((ret == connector_status_connected) && (radeon_connector->use_digital == false) &&
1286
	    encoder) {
1343
	    encoder) {
Line 1302... Line 1359...
1302
	}
1359
	}
Line 1303... Line 1360...
1303
 
1360
 
1304
	/* updated in get modes as well since we need to know if it's analog or digital */
1361
	/* updated in get modes as well since we need to know if it's analog or digital */
Line -... Line 1362...
-
 
1362
	radeon_connector_update_scratch_regs(connector, ret);
-
 
1363
 
-
 
1364
	if ((radeon_audio != 0) && radeon_connector->use_digital) {
-
 
1365
		const struct drm_connector_helper_funcs *connector_funcs =
-
 
1366
			connector->helper_private;
-
 
1367
 
-
 
1368
		encoder = connector_funcs->best_encoder(connector);
-
 
1369
		if (encoder && (encoder->encoder_type == DRM_MODE_ENCODER_TMDS)) {
-
 
1370
			radeon_connector_get_edid(connector);
-
 
1371
			radeon_audio_detect(connector, encoder, ret);
-
 
1372
		}
1305
	radeon_connector_update_scratch_regs(connector, ret);
1373
	}
1306
 
1374
 
1307
exit:
1375
exit:
Line 1308... Line 1376...
1308
	return ret;
1376
	return ret;
Line 1370... Line 1438...
1370
		if ((radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I) ||
1438
		if ((radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I) ||
1371
		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D) ||
1439
		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D) ||
1372
		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_B))
1440
		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_B))
1373
			return MODE_OK;
1441
			return MODE_OK;
1374
		else if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
1442
		else if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
1375
				/* HDMI 1.3+ supports max clock of 340 Mhz */
1443
			/* HDMI 1.3+ supports max clock of 340 Mhz */
1376
				if (mode->clock > 340000)
1444
			if (mode->clock > 340000)
1377
					return MODE_CLOCK_HIGH;
1445
				return MODE_CLOCK_HIGH;
1378
		else
1446
			else
1379
					return MODE_OK;
1447
				return MODE_OK;
1380
		} else {
1448
		} else {
1381
			return MODE_CLOCK_HIGH;
1449
			return MODE_CLOCK_HIGH;
1382
	}
1450
		}
1383
	}
1451
	}
Line 1384... Line 1452...
1384
 
1452
 
1385
	/* check against the max pixel clock */
1453
	/* check against the max pixel clock */
1386
	if ((mode->clock / 10) > rdev->clock.max_pixel_clock)
1454
	if ((mode->clock / 10) > rdev->clock.max_pixel_clock)
Line 1414... Line 1482...
1414
	if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1482
	if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1415
	    (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1483
	    (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1416
		struct drm_display_mode *mode;
1484
		struct drm_display_mode *mode;
Line 1417... Line 1485...
1417
 
1485
 
1418
		if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
1486
		if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
1419
		if (!radeon_dig_connector->edp_on)
1487
			if (!radeon_dig_connector->edp_on)
1420
			atombios_set_edp_panel_power(connector,
1488
				atombios_set_edp_panel_power(connector,
1421
						     ATOM_TRANSMITTER_ACTION_POWER_ON);
1489
							     ATOM_TRANSMITTER_ACTION_POWER_ON);
1422
			radeon_connector_get_edid(connector);
1490
			radeon_connector_get_edid(connector);
1423
			ret = radeon_ddc_get_modes(connector);
1491
			ret = radeon_ddc_get_modes(connector);
1424
		if (!radeon_dig_connector->edp_on)
1492
			if (!radeon_dig_connector->edp_on)
1425
			atombios_set_edp_panel_power(connector,
1493
				atombios_set_edp_panel_power(connector,
1426
						     ATOM_TRANSMITTER_ACTION_POWER_OFF);
1494
							     ATOM_TRANSMITTER_ACTION_POWER_OFF);
1427
		} else {
1495
		} else {
1428
			/* need to setup ddc on the bridge */
1496
			/* need to setup ddc on the bridge */
1429
			if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1497
			if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1430
			    ENCODER_OBJECT_ID_NONE) {
1498
			    ENCODER_OBJECT_ID_NONE) {
Line 1455... Line 1523...
1455
			/* add the width/height from vbios tables if available */
1523
			/* add the width/height from vbios tables if available */
1456
			connector->display_info.width_mm = mode->width_mm;
1524
			connector->display_info.width_mm = mode->width_mm;
1457
			connector->display_info.height_mm = mode->height_mm;
1525
			connector->display_info.height_mm = mode->height_mm;
1458
			/* add scaled modes */
1526
			/* add scaled modes */
1459
			radeon_add_common_modes(encoder, connector);
1527
			radeon_add_common_modes(encoder, connector);
1460
	}
1528
		}
1461
	} else {
1529
	} else {
1462
		/* need to setup ddc on the bridge */
1530
		/* need to setup ddc on the bridge */
1463
		if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1531
		if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1464
			ENCODER_OBJECT_ID_NONE) {
1532
			ENCODER_OBJECT_ID_NONE) {
1465
			if (encoder)
1533
			if (encoder)
Line 1548... Line 1616...
1548
	enum drm_connector_status ret = connector_status_disconnected;
1616
	enum drm_connector_status ret = connector_status_disconnected;
1549
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1617
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1550
	struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1618
	struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1551
	int r;
1619
	int r;
Line -... Line 1620...
-
 
1620
 
-
 
1621
	if (radeon_dig_connector->is_mst)
Line 1552... Line 1622...
1552
 
1622
		return connector_status_disconnected;
1553
 
1623
 
1554
	if (!force && radeon_check_hpd_status_unchanged(connector)) {
1624
	if (!force && radeon_check_hpd_status_unchanged(connector)) {
1555
		ret = connector->status;
1625
		ret = connector->status;
Line 1565... Line 1635...
1565
			struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
1635
			struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
Line 1566... Line 1636...
1566
 
1636
 
1567
			/* check if panel is valid */
1637
			/* check if panel is valid */
1568
			if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240)
1638
			if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240)
-
 
1639
				ret = connector_status_connected;
-
 
1640
			/* don't fetch the edid from the vbios if ddc fails and runpm is
-
 
1641
			 * enabled so we report disconnected.
-
 
1642
			 */
-
 
1643
			if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0))
1569
				ret = connector_status_connected;
1644
				ret = connector_status_disconnected;
1570
		}
1645
		}
1571
		/* eDP is always DP */
1646
		/* eDP is always DP */
1572
		radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT;
1647
		radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT;
1573
		if (!radeon_dig_connector->edp_on)
1648
		if (!radeon_dig_connector->edp_on)
Line 1585... Line 1660...
1585
		/* get the DPCD from the bridge */
1660
		/* get the DPCD from the bridge */
1586
		radeon_dp_getdpcd(radeon_connector);
1661
		radeon_dp_getdpcd(radeon_connector);
Line 1587... Line 1662...
1587
 
1662
 
1588
		if (encoder) {
1663
		if (encoder) {
1589
			/* setup ddc on the bridge */
1664
			/* setup ddc on the bridge */
1590
				radeon_atom_ext_encoder_setup_ddc(encoder);
1665
			radeon_atom_ext_encoder_setup_ddc(encoder);
1591
			/* bridge chips are always aux */
1666
			/* bridge chips are always aux */
1592
			if (radeon_ddc_probe(radeon_connector, true)) /* try DDC */
1667
			if (radeon_ddc_probe(radeon_connector, true)) /* try DDC */
1593
				ret = connector_status_connected;
1668
				ret = connector_status_connected;
1594
			else if (radeon_connector->dac_load_detect) { /* try load detection */
1669
			else if (radeon_connector->dac_load_detect) { /* try load detection */
1595
				struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
1670
				const struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
1596
				ret = encoder_funcs->detect(encoder, connector);
1671
				ret = encoder_funcs->detect(encoder, connector);
1597
            }
1672
			}
1598
		}
1673
		}
1599
	} else {
1674
	} else {
1600
		radeon_dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector);
1675
		radeon_dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector);
1601
		if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
1676
		if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
1602
			ret = connector_status_connected;
1677
			ret = connector_status_connected;
1603
			if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT)
1678
			if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
-
 
1679
				radeon_dp_getdpcd(radeon_connector);
-
 
1680
				r = radeon_dp_mst_probe(radeon_connector);
-
 
1681
				if (r == 1)
-
 
1682
					ret = connector_status_disconnected;
1604
				radeon_dp_getdpcd(radeon_connector);
1683
			}
1605
		} else {
1684
		} else {
1606
		if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
1685
			if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
-
 
1686
				if (radeon_dp_getdpcd(radeon_connector)) {
-
 
1687
					r = radeon_dp_mst_probe(radeon_connector);
-
 
1688
					if (r == 1)
-
 
1689
						ret = connector_status_disconnected;
1607
			if (radeon_dp_getdpcd(radeon_connector))
1690
					else
-
 
1691
						ret = connector_status_connected;
1608
				ret = connector_status_connected;
1692
				}
1609
		} else {
1693
			} else {
1610
				/* try non-aux ddc (DP to DVI/HDMI/etc. adapter) */
1694
				/* try non-aux ddc (DP to DVI/HDMI/etc. adapter) */
1611
				if (radeon_ddc_probe(radeon_connector, false))
1695
				if (radeon_ddc_probe(radeon_connector, false))
-
 
1696
					ret = connector_status_connected;
1612
			ret = connector_status_connected;
1697
			}
1613
		}
1698
		}
1614
	}
-
 
Line 1615... Line 1699...
1615
	}
1699
	}
-
 
1700
 
-
 
1701
	radeon_connector_update_scratch_regs(connector, ret);
-
 
1702
 
-
 
1703
	if ((radeon_audio != 0) && encoder) {
-
 
1704
		radeon_connector_get_edid(connector);
-
 
1705
		radeon_audio_detect(connector, encoder, ret);
1616
 
1706
	}
1617
	radeon_connector_update_scratch_regs(connector, ret);
1707
 
1618
out:
1708
out:
Line 1619... Line 1709...
1619
	return ret;
1709
	return ret;
Line 1638... Line 1728...
1638
 
1728
 
1639
		if (encoder) {
1729
		if (encoder) {
1640
			struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
1730
			struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
Line 1641... Line 1731...
1641
			struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
1731
			struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
1642
 
1732
 
1643
		/* AVIVO hardware supports downscaling modes larger than the panel
1733
			/* AVIVO hardware supports downscaling modes larger than the panel
1644
			 * to the panel size, but I'm not sure this is desirable.
1734
			 * to the panel size, but I'm not sure this is desirable.
1645
			 */
1735
			 */
1646
			if ((mode->hdisplay > native_mode->hdisplay) ||
1736
			if ((mode->hdisplay > native_mode->hdisplay) ||
Line 1653... Line 1743...
1653
				    (mode->vdisplay != native_mode->vdisplay))
1743
				    (mode->vdisplay != native_mode->vdisplay))
1654
					return MODE_PANEL;
1744
					return MODE_PANEL;
1655
			}
1745
			}
1656
		}
1746
		}
1657
	} else {
1747
	} else {
1658
	if ((radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
1748
		if ((radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
1659
		    (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) {
1749
		    (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) {
1660
			return radeon_dp_mode_valid_helper(connector, mode);
1750
			return radeon_dp_mode_valid_helper(connector, mode);
1661
		} else {
1751
		} else {
1662
			if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
1752
			if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
1663
				/* HDMI 1.3+ supports max clock of 340 Mhz */
1753
				/* HDMI 1.3+ supports max clock of 340 Mhz */
Line 1668... Line 1758...
1668
					return MODE_CLOCK_HIGH;
1758
					return MODE_CLOCK_HIGH;
1669
			}
1759
			}
1670
		}
1760
		}
1671
	}
1761
	}
Line 1672... Line 1762...
1672
 
1762
 
1673
		return MODE_OK;
1763
	return MODE_OK;
Line 1674... Line 1764...
1674
}
1764
}
1675
 
1765
 
1676
static const struct drm_connector_helper_funcs radeon_dp_connector_helper_funcs = {
1766
static const struct drm_connector_helper_funcs radeon_dp_connector_helper_funcs = {
Line 1803... Line 1893...
1803
			if (radeon_connector->ddc_bus)
1893
			if (radeon_connector->ddc_bus)
1804
				has_aux = true;
1894
				has_aux = true;
1805
			else
1895
			else
1806
				DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1896
				DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1807
		}
1897
		}
1808
	switch (connector_type) {
1898
		switch (connector_type) {
1809
	case DRM_MODE_CONNECTOR_VGA:
1899
		case DRM_MODE_CONNECTOR_VGA:
1810
		case DRM_MODE_CONNECTOR_DVIA:
1900
		case DRM_MODE_CONNECTOR_DVIA:
1811
		default:
1901
		default:
1812
			drm_connector_init(dev, &radeon_connector->base,
1902
			drm_connector_init(dev, &radeon_connector->base,
1813
					   &radeon_dp_connector_funcs, connector_type);
1903
					   &radeon_dp_connector_funcs, connector_type);
1814
			drm_connector_helper_add(&radeon_connector->base,
1904
			drm_connector_helper_add(&radeon_connector->base,
Line 1820... Line 1910...
1820
						      rdev->mode_info.load_detect_property,
1910
						      rdev->mode_info.load_detect_property,
1821
						      1);
1911
						      1);
1822
			drm_object_attach_property(&radeon_connector->base.base,
1912
			drm_object_attach_property(&radeon_connector->base.base,
1823
						   dev->mode_config.scaling_mode_property,
1913
						   dev->mode_config.scaling_mode_property,
1824
						   DRM_MODE_SCALE_NONE);
1914
						   DRM_MODE_SCALE_NONE);
-
 
1915
			if (ASIC_IS_DCE5(rdev))
-
 
1916
				drm_object_attach_property(&radeon_connector->base.base,
-
 
1917
							   rdev->mode_info.output_csc_property,
-
 
1918
							   RADEON_OUTPUT_CSC_BYPASS);
1825
			break;
1919
			break;
1826
		case DRM_MODE_CONNECTOR_DVII:
1920
		case DRM_MODE_CONNECTOR_DVII:
1827
		case DRM_MODE_CONNECTOR_DVID:
1921
		case DRM_MODE_CONNECTOR_DVID:
1828
		case DRM_MODE_CONNECTOR_HDMIA:
1922
		case DRM_MODE_CONNECTOR_HDMIA:
1829
		case DRM_MODE_CONNECTOR_HDMIB:
1923
		case DRM_MODE_CONNECTOR_HDMIB:
Line 1849... Line 1943...
1849
			drm_object_attach_property(&radeon_connector->base.base,
1943
			drm_object_attach_property(&radeon_connector->base.base,
1850
						   rdev->mode_info.dither_property,
1944
						   rdev->mode_info.dither_property,
1851
						   RADEON_FMT_DITHER_DISABLE);
1945
						   RADEON_FMT_DITHER_DISABLE);
Line 1852... Line 1946...
1852
 
1946
 
1853
			if (radeon_audio != 0)
1947
			if (radeon_audio != 0)
1854
			drm_object_attach_property(&radeon_connector->base.base,
1948
				drm_object_attach_property(&radeon_connector->base.base,
1855
						   rdev->mode_info.audio_property,
1949
							   rdev->mode_info.audio_property,
-
 
1950
							   RADEON_AUDIO_AUTO);
-
 
1951
			if (ASIC_IS_DCE5(rdev))
-
 
1952
				drm_object_attach_property(&radeon_connector->base.base,
-
 
1953
							   rdev->mode_info.output_csc_property,
Line 1856... Line 1954...
1856
							   RADEON_AUDIO_AUTO);
1954
							   RADEON_OUTPUT_CSC_BYPASS);
1857
 
1955
 
1858
			subpixel_order = SubPixelHorizontalRGB;
1956
			subpixel_order = SubPixelHorizontalRGB;
1859
			connector->interlace_allowed = true;
1957
			connector->interlace_allowed = true;
Line 1883... Line 1981...
1883
			break;
1981
			break;
1884
		}
1982
		}
1885
	} else {
1983
	} else {
1886
		switch (connector_type) {
1984
		switch (connector_type) {
1887
		case DRM_MODE_CONNECTOR_VGA:
1985
		case DRM_MODE_CONNECTOR_VGA:
1888
		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1986
			drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1889
		drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1987
			drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1890
		if (i2c_bus->valid) {
1988
			if (i2c_bus->valid) {
1891
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1989
				radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1892
			if (!radeon_connector->ddc_bus)
1990
				if (!radeon_connector->ddc_bus)
1893
				DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1991
					DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1894
		}
1992
			}
1895
		radeon_connector->dac_load_detect = true;
1993
			radeon_connector->dac_load_detect = true;
1896
			drm_object_attach_property(&radeon_connector->base.base,
1994
			drm_object_attach_property(&radeon_connector->base.base,
1897
					      rdev->mode_info.load_detect_property,
1995
						      rdev->mode_info.load_detect_property,
1898
					      1);
1996
						      1);
1899
			if (ASIC_IS_AVIVO(rdev))
1997
			if (ASIC_IS_AVIVO(rdev))
1900
				drm_object_attach_property(&radeon_connector->base.base,
1998
				drm_object_attach_property(&radeon_connector->base.base,
1901
							   dev->mode_config.scaling_mode_property,
1999
							   dev->mode_config.scaling_mode_property,
1902
							   DRM_MODE_SCALE_NONE);
2000
							   DRM_MODE_SCALE_NONE);
-
 
2001
			if (ASIC_IS_DCE5(rdev))
-
 
2002
				drm_object_attach_property(&radeon_connector->base.base,
-
 
2003
							   rdev->mode_info.output_csc_property,
-
 
2004
							   RADEON_OUTPUT_CSC_BYPASS);
1903
		/* no HPD on analog connectors */
2005
			/* no HPD on analog connectors */
1904
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
2006
			radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1905
		connector->polled = DRM_CONNECTOR_POLL_CONNECT;
2007
			connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1906
		connector->interlace_allowed = true;
2008
			connector->interlace_allowed = true;
1907
		connector->doublescan_allowed = true;
2009
			connector->doublescan_allowed = true;
1908
		break;
2010
			break;
1909
	case DRM_MODE_CONNECTOR_DVIA:
2011
		case DRM_MODE_CONNECTOR_DVIA:
1910
		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
2012
			drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1911
		drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
2013
			drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1912
		if (i2c_bus->valid) {
2014
			if (i2c_bus->valid) {
1913
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2015
				radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1914
			if (!radeon_connector->ddc_bus)
2016
				if (!radeon_connector->ddc_bus)
1915
				DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2017
					DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1916
		}
2018
			}
1917
		radeon_connector->dac_load_detect = true;
2019
			radeon_connector->dac_load_detect = true;
1918
			drm_object_attach_property(&radeon_connector->base.base,
2020
			drm_object_attach_property(&radeon_connector->base.base,
1919
					      rdev->mode_info.load_detect_property,
2021
						      rdev->mode_info.load_detect_property,
1920
					      1);
2022
						      1);
1921
			if (ASIC_IS_AVIVO(rdev))
2023
			if (ASIC_IS_AVIVO(rdev))
1922
				drm_object_attach_property(&radeon_connector->base.base,
2024
				drm_object_attach_property(&radeon_connector->base.base,
1923
							   dev->mode_config.scaling_mode_property,
2025
							   dev->mode_config.scaling_mode_property,
1924
							   DRM_MODE_SCALE_NONE);
2026
							   DRM_MODE_SCALE_NONE);
-
 
2027
			if (ASIC_IS_DCE5(rdev))
-
 
2028
				drm_object_attach_property(&radeon_connector->base.base,
-
 
2029
							   rdev->mode_info.output_csc_property,
-
 
2030
							   RADEON_OUTPUT_CSC_BYPASS);
1925
		/* no HPD on analog connectors */
2031
			/* no HPD on analog connectors */
1926
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
2032
			radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1927
		connector->interlace_allowed = true;
2033
			connector->interlace_allowed = true;
1928
		connector->doublescan_allowed = true;
2034
			connector->doublescan_allowed = true;
1929
		break;
2035
			break;
1930
	case DRM_MODE_CONNECTOR_DVII:
2036
		case DRM_MODE_CONNECTOR_DVII:
1931
	case DRM_MODE_CONNECTOR_DVID:
2037
		case DRM_MODE_CONNECTOR_DVID:
1932
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2038
			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1933
		if (!radeon_dig_connector)
2039
			if (!radeon_dig_connector)
1934
			goto failed;
2040
				goto failed;
1935
		radeon_dig_connector->igp_lane_info = igp_lane_info;
2041
			radeon_dig_connector->igp_lane_info = igp_lane_info;
1936
		radeon_connector->con_priv = radeon_dig_connector;
2042
			radeon_connector->con_priv = radeon_dig_connector;
1937
		drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
2043
			drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
1938
		drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
2044
			drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
1939
		if (i2c_bus->valid) {
2045
			if (i2c_bus->valid) {
1940
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2046
				radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1941
			if (!radeon_connector->ddc_bus)
2047
				if (!radeon_connector->ddc_bus)
1942
				DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2048
					DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1943
		}
2049
			}
1944
		subpixel_order = SubPixelHorizontalRGB;
2050
			subpixel_order = SubPixelHorizontalRGB;
1945
			drm_object_attach_property(&radeon_connector->base.base,
2051
			drm_object_attach_property(&radeon_connector->base.base,
1946
					      rdev->mode_info.coherent_mode_property,
2052
						      rdev->mode_info.coherent_mode_property,
1947
					      1);
2053
						      1);
1948
		if (ASIC_IS_AVIVO(rdev)) {
2054
			if (ASIC_IS_AVIVO(rdev)) {
1949
				drm_object_attach_property(&radeon_connector->base.base,
2055
				drm_object_attach_property(&radeon_connector->base.base,
1950
						      rdev->mode_info.underscan_property,
2056
							      rdev->mode_info.underscan_property,
1951
						      UNDERSCAN_OFF);
2057
							      UNDERSCAN_OFF);
1952
				drm_object_attach_property(&radeon_connector->base.base,
2058
				drm_object_attach_property(&radeon_connector->base.base,
1953
						      rdev->mode_info.underscan_hborder_property,
2059
							      rdev->mode_info.underscan_hborder_property,
1954
						      0);
2060
							      0);
1955
				drm_object_attach_property(&radeon_connector->base.base,
2061
				drm_object_attach_property(&radeon_connector->base.base,
1956
						      rdev->mode_info.underscan_vborder_property,
2062
							      rdev->mode_info.underscan_vborder_property,
1957
						      0);
2063
							      0);
1958
				drm_object_attach_property(&radeon_connector->base.base,
2064
				drm_object_attach_property(&radeon_connector->base.base,
1959
							   rdev->mode_info.dither_property,
2065
							   rdev->mode_info.dither_property,
1960
							   RADEON_FMT_DITHER_DISABLE);
2066
							   RADEON_FMT_DITHER_DISABLE);
1961
				drm_object_attach_property(&radeon_connector->base.base,
2067
				drm_object_attach_property(&radeon_connector->base.base,
1962
							   dev->mode_config.scaling_mode_property,
2068
							   dev->mode_config.scaling_mode_property,
1963
							   DRM_MODE_SCALE_NONE);
2069
							   DRM_MODE_SCALE_NONE);
1964
		}
2070
			}
1965
			if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
2071
			if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
1966
				drm_object_attach_property(&radeon_connector->base.base,
2072
				drm_object_attach_property(&radeon_connector->base.base,
1967
							      rdev->mode_info.audio_property,
2073
							   rdev->mode_info.audio_property,
1968
							   RADEON_AUDIO_AUTO);
2074
							   RADEON_AUDIO_AUTO);
1969
			}
2075
			}
1970
		if (connector_type == DRM_MODE_CONNECTOR_DVII) {
2076
			if (connector_type == DRM_MODE_CONNECTOR_DVII) {
1971
		radeon_connector->dac_load_detect = true;
2077
				radeon_connector->dac_load_detect = true;
1972
				drm_object_attach_property(&radeon_connector->base.base,
2078
				drm_object_attach_property(&radeon_connector->base.base,
1973
					      rdev->mode_info.load_detect_property,
2079
							      rdev->mode_info.load_detect_property,
1974
					      1);
2080
							      1);
1975
		}
2081
			}
-
 
2082
			if (ASIC_IS_DCE5(rdev))
-
 
2083
				drm_object_attach_property(&radeon_connector->base.base,
-
 
2084
							   rdev->mode_info.output_csc_property,
-
 
2085
							   RADEON_OUTPUT_CSC_BYPASS);
1976
		connector->interlace_allowed = true;
2086
			connector->interlace_allowed = true;
1977
		if (connector_type == DRM_MODE_CONNECTOR_DVII)
2087
			if (connector_type == DRM_MODE_CONNECTOR_DVII)
1978
			connector->doublescan_allowed = true;
2088
				connector->doublescan_allowed = true;
1979
		else
2089
			else
1980
			connector->doublescan_allowed = false;
2090
				connector->doublescan_allowed = false;
1981
		break;
2091
			break;
1982
	case DRM_MODE_CONNECTOR_HDMIA:
2092
		case DRM_MODE_CONNECTOR_HDMIA:
1983
	case DRM_MODE_CONNECTOR_HDMIB:
2093
		case DRM_MODE_CONNECTOR_HDMIB:
1984
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2094
			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1985
		if (!radeon_dig_connector)
2095
			if (!radeon_dig_connector)
1986
			goto failed;
2096
				goto failed;
1987
		radeon_dig_connector->igp_lane_info = igp_lane_info;
2097
			radeon_dig_connector->igp_lane_info = igp_lane_info;
1988
		radeon_connector->con_priv = radeon_dig_connector;
2098
			radeon_connector->con_priv = radeon_dig_connector;
1989
		drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
2099
			drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
1990
		drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
2100
			drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
1991
		if (i2c_bus->valid) {
2101
			if (i2c_bus->valid) {
1992
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2102
				radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1993
			if (!radeon_connector->ddc_bus)
2103
				if (!radeon_connector->ddc_bus)
1994
				DRM_ERROR("HDMI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2104
					DRM_ERROR("HDMI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1995
		}
2105
			}
1996
			drm_object_attach_property(&radeon_connector->base.base,
2106
			drm_object_attach_property(&radeon_connector->base.base,
1997
					      rdev->mode_info.coherent_mode_property,
2107
						      rdev->mode_info.coherent_mode_property,
1998
					      1);
2108
						      1);
1999
		if (ASIC_IS_AVIVO(rdev)) {
2109
			if (ASIC_IS_AVIVO(rdev)) {
2000
				drm_object_attach_property(&radeon_connector->base.base,
2110
				drm_object_attach_property(&radeon_connector->base.base,
2001
						      rdev->mode_info.underscan_property,
2111
							      rdev->mode_info.underscan_property,
2002
						      UNDERSCAN_OFF);
2112
							      UNDERSCAN_OFF);
2003
				drm_object_attach_property(&radeon_connector->base.base,
2113
				drm_object_attach_property(&radeon_connector->base.base,
2004
						      rdev->mode_info.underscan_hborder_property,
2114
							      rdev->mode_info.underscan_hborder_property,
2005
						      0);
2115
							      0);
2006
				drm_object_attach_property(&radeon_connector->base.base,
2116
				drm_object_attach_property(&radeon_connector->base.base,
2007
						      rdev->mode_info.underscan_vborder_property,
2117
							      rdev->mode_info.underscan_vborder_property,
2008
						      0);
2118
							      0);
2009
				drm_object_attach_property(&radeon_connector->base.base,
2119
				drm_object_attach_property(&radeon_connector->base.base,
2010
							   rdev->mode_info.dither_property,
2120
							   rdev->mode_info.dither_property,
2011
							   RADEON_FMT_DITHER_DISABLE);
2121
							   RADEON_FMT_DITHER_DISABLE);
2012
				drm_object_attach_property(&radeon_connector->base.base,
2122
				drm_object_attach_property(&radeon_connector->base.base,
2013
							   dev->mode_config.scaling_mode_property,
2123
							   dev->mode_config.scaling_mode_property,
2014
							   DRM_MODE_SCALE_NONE);
2124
							   DRM_MODE_SCALE_NONE);
2015
		}
2125
			}
2016
			if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
2126
			if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
2017
				drm_object_attach_property(&radeon_connector->base.base,
2127
				drm_object_attach_property(&radeon_connector->base.base,
2018
							      rdev->mode_info.audio_property,
2128
							   rdev->mode_info.audio_property,
2019
							   RADEON_AUDIO_AUTO);
2129
							   RADEON_AUDIO_AUTO);
2020
			}
2130
			}
-
 
2131
			if (ASIC_IS_DCE5(rdev))
-
 
2132
				drm_object_attach_property(&radeon_connector->base.base,
-
 
2133
							   rdev->mode_info.output_csc_property,
-
 
2134
							   RADEON_OUTPUT_CSC_BYPASS);
2021
		subpixel_order = SubPixelHorizontalRGB;
2135
			subpixel_order = SubPixelHorizontalRGB;
2022
		connector->interlace_allowed = true;
2136
			connector->interlace_allowed = true;
2023
		if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
2137
			if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
2024
			connector->doublescan_allowed = true;
2138
				connector->doublescan_allowed = true;
2025
		else
2139
			else
2026
			connector->doublescan_allowed = false;
2140
				connector->doublescan_allowed = false;
2027
		break;
2141
			break;
2028
	case DRM_MODE_CONNECTOR_DisplayPort:
2142
		case DRM_MODE_CONNECTOR_DisplayPort:
2029
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2143
			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2030
		if (!radeon_dig_connector)
2144
			if (!radeon_dig_connector)
2031
			goto failed;
2145
				goto failed;
2032
		radeon_dig_connector->igp_lane_info = igp_lane_info;
2146
			radeon_dig_connector->igp_lane_info = igp_lane_info;
2033
		radeon_connector->con_priv = radeon_dig_connector;
2147
			radeon_connector->con_priv = radeon_dig_connector;
2034
		drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
2148
			drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
2035
		drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
2149
			drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
2036
		if (i2c_bus->valid) {
2150
			if (i2c_bus->valid) {
2037
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2151
				radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2038
				if (radeon_connector->ddc_bus)
2152
				if (radeon_connector->ddc_bus)
2039
					has_aux = true;
2153
					has_aux = true;
2040
				else
2154
				else
2041
				DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2155
					DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2042
		}
2156
			}
2043
		subpixel_order = SubPixelHorizontalRGB;
2157
			subpixel_order = SubPixelHorizontalRGB;
2044
			drm_object_attach_property(&radeon_connector->base.base,
2158
			drm_object_attach_property(&radeon_connector->base.base,
2045
					      rdev->mode_info.coherent_mode_property,
2159
						      rdev->mode_info.coherent_mode_property,
2046
					      1);
2160
						      1);
2047
		if (ASIC_IS_AVIVO(rdev)) {
2161
			if (ASIC_IS_AVIVO(rdev)) {
2048
				drm_object_attach_property(&radeon_connector->base.base,
2162
				drm_object_attach_property(&radeon_connector->base.base,
2049
						      rdev->mode_info.underscan_property,
2163
							      rdev->mode_info.underscan_property,
2050
						      UNDERSCAN_OFF);
2164
							      UNDERSCAN_OFF);
2051
				drm_object_attach_property(&radeon_connector->base.base,
2165
				drm_object_attach_property(&radeon_connector->base.base,
2052
						      rdev->mode_info.underscan_hborder_property,
2166
							      rdev->mode_info.underscan_hborder_property,
2053
						      0);
2167
							      0);
2054
				drm_object_attach_property(&radeon_connector->base.base,
2168
				drm_object_attach_property(&radeon_connector->base.base,
2055
						      rdev->mode_info.underscan_vborder_property,
2169
							      rdev->mode_info.underscan_vborder_property,
2056
						      0);
2170
							      0);
2057
				drm_object_attach_property(&radeon_connector->base.base,
2171
				drm_object_attach_property(&radeon_connector->base.base,
2058
							   rdev->mode_info.dither_property,
2172
							   rdev->mode_info.dither_property,
2059
							   RADEON_FMT_DITHER_DISABLE);
2173
							   RADEON_FMT_DITHER_DISABLE);
2060
				drm_object_attach_property(&radeon_connector->base.base,
2174
				drm_object_attach_property(&radeon_connector->base.base,
2061
							   dev->mode_config.scaling_mode_property,
2175
							   dev->mode_config.scaling_mode_property,
2062
							   DRM_MODE_SCALE_NONE);
2176
							   DRM_MODE_SCALE_NONE);
2063
		}
2177
			}
2064
			if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
2178
			if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
2065
				drm_object_attach_property(&radeon_connector->base.base,
2179
				drm_object_attach_property(&radeon_connector->base.base,
2066
							      rdev->mode_info.audio_property,
2180
							   rdev->mode_info.audio_property,
2067
							   RADEON_AUDIO_AUTO);
2181
							   RADEON_AUDIO_AUTO);
2068
			}
2182
			}
-
 
2183
			if (ASIC_IS_DCE5(rdev))
-
 
2184
				drm_object_attach_property(&radeon_connector->base.base,
-
 
2185
							   rdev->mode_info.output_csc_property,
-
 
2186
							   RADEON_OUTPUT_CSC_BYPASS);
2069
		connector->interlace_allowed = true;
2187
			connector->interlace_allowed = true;
2070
		/* in theory with a DP to VGA converter... */
2188
			/* in theory with a DP to VGA converter... */
2071
		connector->doublescan_allowed = false;
2189
			connector->doublescan_allowed = false;
2072
		break;
2190
			break;
2073
		case DRM_MODE_CONNECTOR_eDP:
2191
		case DRM_MODE_CONNECTOR_eDP:
2074
			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2192
			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2075
			if (!radeon_dig_connector)
2193
			if (!radeon_dig_connector)
2076
				goto failed;
2194
				goto failed;
2077
			radeon_dig_connector->igp_lane_info = igp_lane_info;
2195
			radeon_dig_connector->igp_lane_info = igp_lane_info;
Line 2090... Line 2208...
2090
						      DRM_MODE_SCALE_FULLSCREEN);
2208
						      DRM_MODE_SCALE_FULLSCREEN);
2091
			subpixel_order = SubPixelHorizontalRGB;
2209
			subpixel_order = SubPixelHorizontalRGB;
2092
			connector->interlace_allowed = false;
2210
			connector->interlace_allowed = false;
2093
			connector->doublescan_allowed = false;
2211
			connector->doublescan_allowed = false;
2094
			break;
2212
			break;
2095
	case DRM_MODE_CONNECTOR_SVIDEO:
2213
		case DRM_MODE_CONNECTOR_SVIDEO:
2096
	case DRM_MODE_CONNECTOR_Composite:
2214
		case DRM_MODE_CONNECTOR_Composite:
2097
	case DRM_MODE_CONNECTOR_9PinDIN:
2215
		case DRM_MODE_CONNECTOR_9PinDIN:
2098
			drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
2216
			drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
2099
			drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
2217
			drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
2100
			radeon_connector->dac_load_detect = true;
2218
			radeon_connector->dac_load_detect = true;
2101
			drm_object_attach_property(&radeon_connector->base.base,
2219
			drm_object_attach_property(&radeon_connector->base.base,
2102
					      rdev->mode_info.load_detect_property,
2220
						      rdev->mode_info.load_detect_property,
2103
					      1);
2221
						      1);
2104
			drm_object_attach_property(&radeon_connector->base.base,
2222
			drm_object_attach_property(&radeon_connector->base.base,
2105
						      rdev->mode_info.tv_std_property,
2223
						      rdev->mode_info.tv_std_property,
2106
						      radeon_atombios_get_tv_info(rdev));
2224
						      radeon_atombios_get_tv_info(rdev));
2107
			/* no HPD on analog connectors */
2225
			/* no HPD on analog connectors */
2108
			radeon_connector->hpd.hpd = RADEON_HPD_NONE;
2226
			radeon_connector->hpd.hpd = RADEON_HPD_NONE;
2109
		connector->interlace_allowed = false;
2227
			connector->interlace_allowed = false;
2110
		connector->doublescan_allowed = false;
2228
			connector->doublescan_allowed = false;
2111
		break;
2229
			break;
2112
	case DRM_MODE_CONNECTOR_LVDS:
2230
		case DRM_MODE_CONNECTOR_LVDS:
2113
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2231
			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2114
		if (!radeon_dig_connector)
2232
			if (!radeon_dig_connector)
2115
			goto failed;
2233
				goto failed;
2116
		radeon_dig_connector->igp_lane_info = igp_lane_info;
2234
			radeon_dig_connector->igp_lane_info = igp_lane_info;
2117
		radeon_connector->con_priv = radeon_dig_connector;
2235
			radeon_connector->con_priv = radeon_dig_connector;
2118
		drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
2236
			drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
2119
		drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
2237
			drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
2120
		if (i2c_bus->valid) {
2238
			if (i2c_bus->valid) {
2121
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2239
				radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2122
			if (!radeon_connector->ddc_bus)
2240
				if (!radeon_connector->ddc_bus)
2123
				DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2241
					DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2124
		}
2242
			}
2125
			drm_object_attach_property(&radeon_connector->base.base,
2243
			drm_object_attach_property(&radeon_connector->base.base,
2126
					      dev->mode_config.scaling_mode_property,
2244
						      dev->mode_config.scaling_mode_property,
2127
					      DRM_MODE_SCALE_FULLSCREEN);
2245
						      DRM_MODE_SCALE_FULLSCREEN);
2128
		subpixel_order = SubPixelHorizontalRGB;
2246
			subpixel_order = SubPixelHorizontalRGB;
2129
		connector->interlace_allowed = false;
2247
			connector->interlace_allowed = false;
2130
		connector->doublescan_allowed = false;
2248
			connector->doublescan_allowed = false;
2131
		break;
2249
			break;
2132
	}
2250
		}
2133
	}
2251
	}
Line 2134... Line 2252...
2134
 
2252
 
2135
	if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) {
2253
	if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) {
2136
		if (i2c_bus->valid)
2254
		if (i2c_bus->valid)
Line 2254... Line 2372...
2254
			connector->doublescan_allowed = false;
2372
			connector->doublescan_allowed = false;
2255
		break;
2373
		break;
2256
	case DRM_MODE_CONNECTOR_SVIDEO:
2374
	case DRM_MODE_CONNECTOR_SVIDEO:
2257
	case DRM_MODE_CONNECTOR_Composite:
2375
	case DRM_MODE_CONNECTOR_Composite:
2258
	case DRM_MODE_CONNECTOR_9PinDIN:
2376
	case DRM_MODE_CONNECTOR_9PinDIN:
2259
			drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
2377
		drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
2260
			drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
2378
		drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
2261
			radeon_connector->dac_load_detect = true;
2379
		radeon_connector->dac_load_detect = true;
2262
			/* RS400,RC410,RS480 chipset seems to report a lot
2380
		/* RS400,RC410,RS480 chipset seems to report a lot
2263
			 * of false positive on load detect, we haven't yet
2381
		 * of false positive on load detect, we haven't yet
2264
			 * found a way to make load detect reliable on those
2382
		 * found a way to make load detect reliable on those
2265
			 * chipset, thus just disable it for TV.
2383
		 * chipset, thus just disable it for TV.
2266
			 */
2384
		 */
2267
			if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480)
2385
		if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480)
2268
				radeon_connector->dac_load_detect = false;
2386
			radeon_connector->dac_load_detect = false;
2269
		drm_object_attach_property(&radeon_connector->base.base,
2387
		drm_object_attach_property(&radeon_connector->base.base,
2270
						      rdev->mode_info.load_detect_property,
2388
					      rdev->mode_info.load_detect_property,
2271
						      radeon_connector->dac_load_detect);
2389
					      radeon_connector->dac_load_detect);
2272
		drm_object_attach_property(&radeon_connector->base.base,
2390
		drm_object_attach_property(&radeon_connector->base.base,
2273
						      rdev->mode_info.tv_std_property,
2391
					      rdev->mode_info.tv_std_property,
2274
						      radeon_combios_get_tv_info(rdev));
2392
					      radeon_combios_get_tv_info(rdev));
2275
			/* no HPD on analog connectors */
2393
		/* no HPD on analog connectors */
2276
			radeon_connector->hpd.hpd = RADEON_HPD_NONE;
2394
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
2277
		connector->interlace_allowed = false;
2395
		connector->interlace_allowed = false;
2278
		connector->doublescan_allowed = false;
2396
		connector->doublescan_allowed = false;
2279
		break;
2397
		break;
2280
	case DRM_MODE_CONNECTOR_LVDS:
2398
	case DRM_MODE_CONNECTOR_LVDS:
2281
		drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
2399
		drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
Line 2300... Line 2418...
2300
	} else
2418
	} else
2301
		connector->polled = DRM_CONNECTOR_POLL_HPD;
2419
		connector->polled = DRM_CONNECTOR_POLL_HPD;
2302
	connector->display_info.subpixel_order = subpixel_order;
2420
	connector->display_info.subpixel_order = subpixel_order;
2303
	drm_connector_register(connector);
2421
	drm_connector_register(connector);
2304
}
2422
}
-
 
2423
 
-
 
2424
void radeon_setup_mst_connector(struct drm_device *dev)
-
 
2425
{
-
 
2426
	struct radeon_device *rdev = dev->dev_private;
-
 
2427
	struct drm_connector *connector;
-
 
2428
	struct radeon_connector *radeon_connector;
-
 
2429
 
-
 
2430
	if (!ASIC_IS_DCE5(rdev))
-
 
2431
		return;
-
 
2432
 
-
 
2433
	if (radeon_mst == 0)
-
 
2434
		return;
-
 
2435
 
-
 
2436
	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
-
 
2437
		int ret;
-
 
2438
 
-
 
2439
		radeon_connector = to_radeon_connector(connector);
-
 
2440
 
-
 
2441
		if (connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort)
-
 
2442
			continue;
-
 
2443
 
-
 
2444
		ret = radeon_dp_mst_init(radeon_connector);
-
 
2445
	}
-
 
2446
}