Subversion Repositories Kolibri OS

Rev

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

Rev 1221 Rev 1268
Line 47... Line 47...
47
extern void
47
extern void
48
radeon_add_legacy_connector(struct drm_device *dev,
48
radeon_add_legacy_connector(struct drm_device *dev,
49
			    uint32_t connector_id,
49
			    uint32_t connector_id,
50
			    uint32_t supported_device,
50
			    uint32_t supported_device,
51
			    int connector_type,
51
			    int connector_type,
52
			    struct radeon_i2c_bus_rec *i2c_bus);
52
			    struct radeon_i2c_bus_rec *i2c_bus,
-
 
53
			    uint16_t connector_object_id);
Line 53... Line 54...
53
 
54
 
54
/* from radeon_legacy_encoder.c */
55
/* from radeon_legacy_encoder.c */
55
extern void
56
extern void
56
radeon_add_legacy_encoder(struct drm_device *dev, uint32_t encoder_id,
57
radeon_add_legacy_encoder(struct drm_device *dev, uint32_t encoder_id,
Line 806... Line 807...
806
	lvds->lvds_gen_cntl = RREG32(RADEON_LVDS_GEN_CNTL);
807
	lvds->lvds_gen_cntl = RREG32(RADEON_LVDS_GEN_CNTL);
807
	lvds->panel_digon_delay = (lvds_ss_gen_cntl >> RADEON_LVDS_PWRSEQ_DELAY1_SHIFT) & 0xf;
808
	lvds->panel_digon_delay = (lvds_ss_gen_cntl >> RADEON_LVDS_PWRSEQ_DELAY1_SHIFT) & 0xf;
808
	lvds->panel_blon_delay = (lvds_ss_gen_cntl >> RADEON_LVDS_PWRSEQ_DELAY2_SHIFT) & 0xf;
809
	lvds->panel_blon_delay = (lvds_ss_gen_cntl >> RADEON_LVDS_PWRSEQ_DELAY2_SHIFT) & 0xf;
Line 809... Line 810...
809
 
810
 
810
	if (fp_vert_stretch & RADEON_VERT_STRETCH_ENABLE)
811
	if (fp_vert_stretch & RADEON_VERT_STRETCH_ENABLE)
811
		lvds->native_mode.panel_yres =
812
		lvds->native_mode.vdisplay =
812
		    ((fp_vert_stretch & RADEON_VERT_PANEL_SIZE) >>
813
		    ((fp_vert_stretch & RADEON_VERT_PANEL_SIZE) >>
813
		     RADEON_VERT_PANEL_SHIFT) + 1;
814
		     RADEON_VERT_PANEL_SHIFT) + 1;
814
	else
815
	else
815
		lvds->native_mode.panel_yres =
816
		lvds->native_mode.vdisplay =
Line 816... Line 817...
816
		    (RREG32(RADEON_CRTC_V_TOTAL_DISP) >> 16) + 1;
817
		    (RREG32(RADEON_CRTC_V_TOTAL_DISP) >> 16) + 1;
817
 
818
 
818
	if (fp_horz_stretch & RADEON_HORZ_STRETCH_ENABLE)
819
	if (fp_horz_stretch & RADEON_HORZ_STRETCH_ENABLE)
819
		lvds->native_mode.panel_xres =
820
		lvds->native_mode.hdisplay =
820
		    (((fp_horz_stretch & RADEON_HORZ_PANEL_SIZE) >>
821
		    (((fp_horz_stretch & RADEON_HORZ_PANEL_SIZE) >>
821
		      RADEON_HORZ_PANEL_SHIFT) + 1) * 8;
822
		      RADEON_HORZ_PANEL_SHIFT) + 1) * 8;
822
	else
823
	else
Line 823... Line 824...
823
		lvds->native_mode.panel_xres =
824
		lvds->native_mode.hdisplay =
824
		    ((RREG32(RADEON_CRTC_H_TOTAL_DISP) >> 16) + 1) * 8;
825
		    ((RREG32(RADEON_CRTC_H_TOTAL_DISP) >> 16) + 1) * 8;
825
 
826
 
826
	if ((lvds->native_mode.panel_xres < 640) ||
827
	if ((lvds->native_mode.hdisplay < 640) ||
827
	    (lvds->native_mode.panel_yres < 480)) {
828
	    (lvds->native_mode.vdisplay < 480)) {
Line 828... Line 829...
828
		lvds->native_mode.panel_xres = 640;
829
		lvds->native_mode.hdisplay = 640;
829
		lvds->native_mode.panel_yres = 480;
830
		lvds->native_mode.vdisplay = 480;
830
	}
831
	}
Line 844... Line 845...
844
			lvds->use_bios_dividers = true;
845
			lvds->use_bios_dividers = true;
845
	}
846
	}
846
	lvds->panel_vcc_delay = 200;
847
	lvds->panel_vcc_delay = 200;
Line 847... Line 848...
847
 
848
 
848
	DRM_INFO("Panel info derived from registers\n");
849
	DRM_INFO("Panel info derived from registers\n");
849
	DRM_INFO("Panel Size %dx%d\n", lvds->native_mode.panel_xres,
850
	DRM_INFO("Panel Size %dx%d\n", lvds->native_mode.hdisplay,
Line 850... Line 851...
850
		 lvds->native_mode.panel_yres);
851
		 lvds->native_mode.vdisplay);
851
 
852
 
Line 852... Line 853...
852
	return lvds;
853
	return lvds;
Line 880... Line 881...
880
			stmp[i] = RBIOS8(lcd_info + i + 1);
881
			stmp[i] = RBIOS8(lcd_info + i + 1);
881
		stmp[24] = 0;
882
		stmp[24] = 0;
Line 882... Line 883...
882
 
883
 
Line 883... Line 884...
883
		DRM_INFO("Panel ID String: %s\n", stmp);
884
		DRM_INFO("Panel ID String: %s\n", stmp);
884
 
885
 
Line 885... Line 886...
885
		lvds->native_mode.panel_xres = RBIOS16(lcd_info + 0x19);
886
		lvds->native_mode.hdisplay = RBIOS16(lcd_info + 0x19);
886
		lvds->native_mode.panel_yres = RBIOS16(lcd_info + 0x1b);
887
		lvds->native_mode.vdisplay = RBIOS16(lcd_info + 0x1b);
Line 887... Line 888...
887
 
888
 
888
		DRM_INFO("Panel Size %dx%d\n", lvds->native_mode.panel_xres,
889
		DRM_INFO("Panel Size %dx%d\n", lvds->native_mode.hdisplay,
889
			 lvds->native_mode.panel_yres);
890
			 lvds->native_mode.vdisplay);
Line 942... Line 943...
942
		for (i = 0; i < 32; i++) {
943
		for (i = 0; i < 32; i++) {
943
			tmp = RBIOS16(lcd_info + 64 + i * 2);
944
			tmp = RBIOS16(lcd_info + 64 + i * 2);
944
			if (tmp == 0)
945
			if (tmp == 0)
945
				break;
946
				break;
Line 946... Line 947...
946
 
947
 
947
			if ((RBIOS16(tmp) == lvds->native_mode.panel_xres) &&
948
			if ((RBIOS16(tmp) == lvds->native_mode.hdisplay) &&
948
			    (RBIOS16(tmp + 2) ==
949
			    (RBIOS16(tmp + 2) ==
949
			     lvds->native_mode.panel_yres)) {
-
 
950
				lvds->native_mode.hblank =
950
			     lvds->native_mode.vdisplay)) {
951
				    (RBIOS16(tmp + 17) - RBIOS16(tmp + 19)) * 8;
-
 
952
				lvds->native_mode.hoverplus =
951
				lvds->native_mode.htotal = RBIOS16(tmp + 17) * 8;
953
				    (RBIOS16(tmp + 21) - RBIOS16(tmp + 19) -
-
 
954
				     1) * 8;
952
				lvds->native_mode.hsync_start = RBIOS16(tmp + 21) * 8;
955
				lvds->native_mode.hsync_width =
953
				lvds->native_mode.hsync_end = (RBIOS8(tmp + 23) +
956
				    RBIOS8(tmp + 23) * 8;
954
							       RBIOS16(tmp + 21)) * 8;
957
 
955
 
958
				lvds->native_mode.vblank = (RBIOS16(tmp + 24) -
-
 
959
							    RBIOS16(tmp + 26));
-
 
960
				lvds->native_mode.voverplus =
956
				lvds->native_mode.vtotal = RBIOS16(tmp + 24);
961
				    ((RBIOS16(tmp + 28) & 0x7ff) -
-
 
962
				     RBIOS16(tmp + 26));
957
				lvds->native_mode.vsync_start = RBIOS16(tmp + 28) & 0x7ff;
963
				lvds->native_mode.vsync_width =
958
				lvds->native_mode.vsync_end =
964
				    ((RBIOS16(tmp + 28) & 0xf800) >> 11);
959
					((RBIOS16(tmp + 28) & 0xf800) >> 11) +
-
 
960
					(RBIOS16(tmp + 28) & 0x7ff);
965
				lvds->native_mode.dotclock =
961
 
966
				    RBIOS16(tmp + 9) * 10;
962
				lvds->native_mode.clock = RBIOS16(tmp + 9) * 10;
-
 
963
				lvds->native_mode.flags = 0;
-
 
964
				/* set crtc values */
-
 
965
				drm_mode_set_crtcinfo(&lvds->native_mode, CRTC_INTERLACE_HALVE_V);
967
				lvds->native_mode.flags = 0;
966
 
968
			}
967
			}
969
		}
968
		}
970
	} else {
969
	} else {
971
		DRM_INFO("No panel info found in BIOS\n");
970
		DRM_INFO("No panel info found in BIOS\n");
Line 1176... Line 1175...
1176
									1),
1175
									1),
1177
						  ATOM_DEVICE_CRT1_SUPPORT);
1176
						  ATOM_DEVICE_CRT1_SUPPORT);
1178
			radeon_add_legacy_connector(dev, 0,
1177
			radeon_add_legacy_connector(dev, 0,
1179
						    ATOM_DEVICE_CRT1_SUPPORT,
1178
						    ATOM_DEVICE_CRT1_SUPPORT,
1180
						    DRM_MODE_CONNECTOR_VGA,
1179
						    DRM_MODE_CONNECTOR_VGA,
1181
						    &ddc_i2c);
1180
						    &ddc_i2c,
-
 
1181
						    CONNECTOR_OBJECT_ID_VGA);
1182
		} else if (rdev->flags & RADEON_IS_MOBILITY) {
1182
		} else if (rdev->flags & RADEON_IS_MOBILITY) {
1183
			/* LVDS */
1183
			/* LVDS */
1184
			ddc_i2c = combios_setup_i2c_bus(RADEON_LCD_GPIO_MASK);
1184
			ddc_i2c = combios_setup_i2c_bus(RADEON_LCD_GPIO_MASK);
1185
			radeon_add_legacy_encoder(dev,
1185
			radeon_add_legacy_encoder(dev,
1186
						  radeon_get_encoder_id(dev,
1186
						  radeon_get_encoder_id(dev,
Line 1188... Line 1188...
1188
									0),
1188
									0),
1189
						  ATOM_DEVICE_LCD1_SUPPORT);
1189
						  ATOM_DEVICE_LCD1_SUPPORT);
1190
			radeon_add_legacy_connector(dev, 0,
1190
			radeon_add_legacy_connector(dev, 0,
1191
						    ATOM_DEVICE_LCD1_SUPPORT,
1191
						    ATOM_DEVICE_LCD1_SUPPORT,
1192
						    DRM_MODE_CONNECTOR_LVDS,
1192
						    DRM_MODE_CONNECTOR_LVDS,
1193
						    &ddc_i2c);
1193
						    &ddc_i2c,
-
 
1194
						    CONNECTOR_OBJECT_ID_LVDS);
Line 1194... Line 1195...
1194
 
1195
 
1195
			/* VGA - primary dac */
1196
			/* VGA - primary dac */
1196
			ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
1197
			ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
1197
			radeon_add_legacy_encoder(dev,
1198
			radeon_add_legacy_encoder(dev,
Line 1200... Line 1201...
1200
									1),
1201
									1),
1201
						  ATOM_DEVICE_CRT1_SUPPORT);
1202
						  ATOM_DEVICE_CRT1_SUPPORT);
1202
			radeon_add_legacy_connector(dev, 1,
1203
			radeon_add_legacy_connector(dev, 1,
1203
						    ATOM_DEVICE_CRT1_SUPPORT,
1204
						    ATOM_DEVICE_CRT1_SUPPORT,
1204
						    DRM_MODE_CONNECTOR_VGA,
1205
						    DRM_MODE_CONNECTOR_VGA,
1205
						    &ddc_i2c);
1206
						    &ddc_i2c,
-
 
1207
						    CONNECTOR_OBJECT_ID_VGA);
1206
		} else {
1208
		} else {
1207
			/* DVI-I - tv dac, int tmds */
1209
			/* DVI-I - tv dac, int tmds */
1208
			ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
1210
			ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
1209
			radeon_add_legacy_encoder(dev,
1211
			radeon_add_legacy_encoder(dev,
1210
						  radeon_get_encoder_id(dev,
1212
						  radeon_get_encoder_id(dev,
Line 1218... Line 1220...
1218
						  ATOM_DEVICE_CRT2_SUPPORT);
1220
						  ATOM_DEVICE_CRT2_SUPPORT);
1219
			radeon_add_legacy_connector(dev, 0,
1221
			radeon_add_legacy_connector(dev, 0,
1220
						    ATOM_DEVICE_DFP1_SUPPORT |
1222
						    ATOM_DEVICE_DFP1_SUPPORT |
1221
						    ATOM_DEVICE_CRT2_SUPPORT,
1223
						    ATOM_DEVICE_CRT2_SUPPORT,
1222
						    DRM_MODE_CONNECTOR_DVII,
1224
						    DRM_MODE_CONNECTOR_DVII,
1223
						    &ddc_i2c);
1225
						    &ddc_i2c,
-
 
1226
						    CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I);
Line 1224... Line 1227...
1224
 
1227
 
1225
			/* VGA - primary dac */
1228
			/* VGA - primary dac */
1226
			ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
1229
			ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
1227
			radeon_add_legacy_encoder(dev,
1230
			radeon_add_legacy_encoder(dev,
Line 1230... Line 1233...
1230
									1),
1233
									1),
1231
						  ATOM_DEVICE_CRT1_SUPPORT);
1234
						  ATOM_DEVICE_CRT1_SUPPORT);
1232
			radeon_add_legacy_connector(dev, 1,
1235
			radeon_add_legacy_connector(dev, 1,
1233
						    ATOM_DEVICE_CRT1_SUPPORT,
1236
						    ATOM_DEVICE_CRT1_SUPPORT,
1234
						    DRM_MODE_CONNECTOR_VGA,
1237
						    DRM_MODE_CONNECTOR_VGA,
1235
						    &ddc_i2c);
1238
						    &ddc_i2c,
-
 
1239
						    CONNECTOR_OBJECT_ID_VGA);
1236
		}
1240
		}
Line 1237... Line 1241...
1237
 
1241
 
1238
		if (rdev->family != CHIP_R100 && rdev->family != CHIP_R200) {
1242
		if (rdev->family != CHIP_R100 && rdev->family != CHIP_R200) {
1239
			/* TV - tv dac */
1243
			/* TV - tv dac */
Line 1243... Line 1247...
1243
									2),
1247
									2),
1244
						  ATOM_DEVICE_TV1_SUPPORT);
1248
						  ATOM_DEVICE_TV1_SUPPORT);
1245
			radeon_add_legacy_connector(dev, 2,
1249
			radeon_add_legacy_connector(dev, 2,
1246
						    ATOM_DEVICE_TV1_SUPPORT,
1250
						    ATOM_DEVICE_TV1_SUPPORT,
1247
						    DRM_MODE_CONNECTOR_SVIDEO,
1251
						    DRM_MODE_CONNECTOR_SVIDEO,
1248
						    &ddc_i2c);
1252
						    &ddc_i2c,
-
 
1253
						    CONNECTOR_OBJECT_ID_SVIDEO);
1249
		}
1254
		}
1250
		break;
1255
		break;
1251
	case CT_IBOOK:
1256
	case CT_IBOOK:
1252
		DRM_INFO("Connector Table: %d (ibook)\n",
1257
		DRM_INFO("Connector Table: %d (ibook)\n",
1253
			 rdev->mode_info.connector_table);
1258
			 rdev->mode_info.connector_table);
Line 1257... Line 1262...
1257
					  radeon_get_encoder_id(dev,
1262
					  radeon_get_encoder_id(dev,
1258
								ATOM_DEVICE_LCD1_SUPPORT,
1263
								ATOM_DEVICE_LCD1_SUPPORT,
1259
								0),
1264
								0),
1260
					  ATOM_DEVICE_LCD1_SUPPORT);
1265
					  ATOM_DEVICE_LCD1_SUPPORT);
1261
		radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT,
1266
		radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT,
1262
					    DRM_MODE_CONNECTOR_LVDS, &ddc_i2c);
1267
					    DRM_MODE_CONNECTOR_LVDS, &ddc_i2c,
-
 
1268
					    CONNECTOR_OBJECT_ID_LVDS);
1263
		/* VGA - TV DAC */
1269
		/* VGA - TV DAC */
1264
		ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
1270
		ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
1265
		radeon_add_legacy_encoder(dev,
1271
		radeon_add_legacy_encoder(dev,
1266
					  radeon_get_encoder_id(dev,
1272
					  radeon_get_encoder_id(dev,
1267
								ATOM_DEVICE_CRT2_SUPPORT,
1273
								ATOM_DEVICE_CRT2_SUPPORT,
1268
								2),
1274
								2),
1269
					  ATOM_DEVICE_CRT2_SUPPORT);
1275
					  ATOM_DEVICE_CRT2_SUPPORT);
1270
		radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT,
1276
		radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT,
1271
					    DRM_MODE_CONNECTOR_VGA, &ddc_i2c);
1277
					    DRM_MODE_CONNECTOR_VGA, &ddc_i2c,
-
 
1278
					    CONNECTOR_OBJECT_ID_VGA);
1272
		/* TV - TV DAC */
1279
		/* TV - TV DAC */
1273
		radeon_add_legacy_encoder(dev,
1280
		radeon_add_legacy_encoder(dev,
1274
					  radeon_get_encoder_id(dev,
1281
					  radeon_get_encoder_id(dev,
1275
								ATOM_DEVICE_TV1_SUPPORT,
1282
								ATOM_DEVICE_TV1_SUPPORT,
1276
								2),
1283
								2),
1277
					  ATOM_DEVICE_TV1_SUPPORT);
1284
					  ATOM_DEVICE_TV1_SUPPORT);
1278
		radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
1285
		radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
1279
					    DRM_MODE_CONNECTOR_SVIDEO,
1286
					    DRM_MODE_CONNECTOR_SVIDEO,
1280
					    &ddc_i2c);
1287
					    &ddc_i2c,
-
 
1288
					    CONNECTOR_OBJECT_ID_SVIDEO);
1281
		break;
1289
		break;
1282
	case CT_POWERBOOK_EXTERNAL:
1290
	case CT_POWERBOOK_EXTERNAL:
1283
		DRM_INFO("Connector Table: %d (powerbook external tmds)\n",
1291
		DRM_INFO("Connector Table: %d (powerbook external tmds)\n",
1284
			 rdev->mode_info.connector_table);
1292
			 rdev->mode_info.connector_table);
1285
		/* LVDS */
1293
		/* LVDS */
Line 1288... Line 1296...
1288
					  radeon_get_encoder_id(dev,
1296
					  radeon_get_encoder_id(dev,
1289
								ATOM_DEVICE_LCD1_SUPPORT,
1297
								ATOM_DEVICE_LCD1_SUPPORT,
1290
								0),
1298
								0),
1291
					  ATOM_DEVICE_LCD1_SUPPORT);
1299
					  ATOM_DEVICE_LCD1_SUPPORT);
1292
		radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT,
1300
		radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT,
1293
					    DRM_MODE_CONNECTOR_LVDS, &ddc_i2c);
1301
					    DRM_MODE_CONNECTOR_LVDS, &ddc_i2c,
-
 
1302
					    CONNECTOR_OBJECT_ID_LVDS);
1294
		/* DVI-I - primary dac, ext tmds */
1303
		/* DVI-I - primary dac, ext tmds */
1295
		ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
1304
		ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
1296
		radeon_add_legacy_encoder(dev,
1305
		radeon_add_legacy_encoder(dev,
1297
					  radeon_get_encoder_id(dev,
1306
					  radeon_get_encoder_id(dev,
1298
								ATOM_DEVICE_DFP2_SUPPORT,
1307
								ATOM_DEVICE_DFP2_SUPPORT,
Line 1301... Line 1310...
1301
		radeon_add_legacy_encoder(dev,
1310
		radeon_add_legacy_encoder(dev,
1302
					  radeon_get_encoder_id(dev,
1311
					  radeon_get_encoder_id(dev,
1303
								ATOM_DEVICE_CRT1_SUPPORT,
1312
								ATOM_DEVICE_CRT1_SUPPORT,
1304
								1),
1313
								1),
1305
					  ATOM_DEVICE_CRT1_SUPPORT);
1314
					  ATOM_DEVICE_CRT1_SUPPORT);
-
 
1315
		/* XXX some are SL */
1306
		radeon_add_legacy_connector(dev, 1,
1316
		radeon_add_legacy_connector(dev, 1,
1307
					    ATOM_DEVICE_DFP2_SUPPORT |
1317
					    ATOM_DEVICE_DFP2_SUPPORT |
1308
					    ATOM_DEVICE_CRT1_SUPPORT,
1318
					    ATOM_DEVICE_CRT1_SUPPORT,
1309
					    DRM_MODE_CONNECTOR_DVII, &ddc_i2c);
1319
					    DRM_MODE_CONNECTOR_DVII, &ddc_i2c,
-
 
1320
					    CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I);
1310
		/* TV - TV DAC */
1321
		/* TV - TV DAC */
1311
		radeon_add_legacy_encoder(dev,
1322
		radeon_add_legacy_encoder(dev,
1312
					  radeon_get_encoder_id(dev,
1323
					  radeon_get_encoder_id(dev,
1313
								ATOM_DEVICE_TV1_SUPPORT,
1324
								ATOM_DEVICE_TV1_SUPPORT,
1314
								2),
1325
								2),
1315
					  ATOM_DEVICE_TV1_SUPPORT);
1326
					  ATOM_DEVICE_TV1_SUPPORT);
1316
		radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
1327
		radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
1317
					    DRM_MODE_CONNECTOR_SVIDEO,
1328
					    DRM_MODE_CONNECTOR_SVIDEO,
1318
					    &ddc_i2c);
1329
					    &ddc_i2c,
-
 
1330
					    CONNECTOR_OBJECT_ID_SVIDEO);
1319
		break;
1331
		break;
1320
	case CT_POWERBOOK_INTERNAL:
1332
	case CT_POWERBOOK_INTERNAL:
1321
		DRM_INFO("Connector Table: %d (powerbook internal tmds)\n",
1333
		DRM_INFO("Connector Table: %d (powerbook internal tmds)\n",
1322
			 rdev->mode_info.connector_table);
1334
			 rdev->mode_info.connector_table);
1323
		/* LVDS */
1335
		/* LVDS */
Line 1326... Line 1338...
1326
					  radeon_get_encoder_id(dev,
1338
					  radeon_get_encoder_id(dev,
1327
								ATOM_DEVICE_LCD1_SUPPORT,
1339
								ATOM_DEVICE_LCD1_SUPPORT,
1328
								0),
1340
								0),
1329
					  ATOM_DEVICE_LCD1_SUPPORT);
1341
					  ATOM_DEVICE_LCD1_SUPPORT);
1330
		radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT,
1342
		radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT,
1331
					    DRM_MODE_CONNECTOR_LVDS, &ddc_i2c);
1343
					    DRM_MODE_CONNECTOR_LVDS, &ddc_i2c,
-
 
1344
					    CONNECTOR_OBJECT_ID_LVDS);
1332
		/* DVI-I - primary dac, int tmds */
1345
		/* DVI-I - primary dac, int tmds */
1333
		ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
1346
		ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
1334
		radeon_add_legacy_encoder(dev,
1347
		radeon_add_legacy_encoder(dev,
1335
					  radeon_get_encoder_id(dev,
1348
					  radeon_get_encoder_id(dev,
1336
								ATOM_DEVICE_DFP1_SUPPORT,
1349
								ATOM_DEVICE_DFP1_SUPPORT,
Line 1342... Line 1355...
1342
								1),
1355
								1),
1343
					  ATOM_DEVICE_CRT1_SUPPORT);
1356
					  ATOM_DEVICE_CRT1_SUPPORT);
1344
		radeon_add_legacy_connector(dev, 1,
1357
		radeon_add_legacy_connector(dev, 1,
1345
					    ATOM_DEVICE_DFP1_SUPPORT |
1358
					    ATOM_DEVICE_DFP1_SUPPORT |
1346
					    ATOM_DEVICE_CRT1_SUPPORT,
1359
					    ATOM_DEVICE_CRT1_SUPPORT,
1347
					    DRM_MODE_CONNECTOR_DVII, &ddc_i2c);
1360
					    DRM_MODE_CONNECTOR_DVII, &ddc_i2c,
-
 
1361
					    CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I);
1348
		/* TV - TV DAC */
1362
		/* TV - TV DAC */
1349
		radeon_add_legacy_encoder(dev,
1363
		radeon_add_legacy_encoder(dev,
1350
					  radeon_get_encoder_id(dev,
1364
					  radeon_get_encoder_id(dev,
1351
								ATOM_DEVICE_TV1_SUPPORT,
1365
								ATOM_DEVICE_TV1_SUPPORT,
1352
								2),
1366
								2),
1353
					  ATOM_DEVICE_TV1_SUPPORT);
1367
					  ATOM_DEVICE_TV1_SUPPORT);
1354
		radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
1368
		radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
1355
					    DRM_MODE_CONNECTOR_SVIDEO,
1369
					    DRM_MODE_CONNECTOR_SVIDEO,
1356
					    &ddc_i2c);
1370
					    &ddc_i2c,
-
 
1371
					    CONNECTOR_OBJECT_ID_SVIDEO);
1357
		break;
1372
		break;
1358
	case CT_POWERBOOK_VGA:
1373
	case CT_POWERBOOK_VGA:
1359
		DRM_INFO("Connector Table: %d (powerbook vga)\n",
1374
		DRM_INFO("Connector Table: %d (powerbook vga)\n",
1360
			 rdev->mode_info.connector_table);
1375
			 rdev->mode_info.connector_table);
1361
		/* LVDS */
1376
		/* LVDS */
Line 1364... Line 1379...
1364
					  radeon_get_encoder_id(dev,
1379
					  radeon_get_encoder_id(dev,
1365
								ATOM_DEVICE_LCD1_SUPPORT,
1380
								ATOM_DEVICE_LCD1_SUPPORT,
1366
								0),
1381
								0),
1367
					  ATOM_DEVICE_LCD1_SUPPORT);
1382
					  ATOM_DEVICE_LCD1_SUPPORT);
1368
		radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT,
1383
		radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT,
1369
					    DRM_MODE_CONNECTOR_LVDS, &ddc_i2c);
1384
					    DRM_MODE_CONNECTOR_LVDS, &ddc_i2c,
-
 
1385
					    CONNECTOR_OBJECT_ID_LVDS);
1370
		/* VGA - primary dac */
1386
		/* VGA - primary dac */
1371
		ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
1387
		ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
1372
		radeon_add_legacy_encoder(dev,
1388
		radeon_add_legacy_encoder(dev,
1373
					  radeon_get_encoder_id(dev,
1389
					  radeon_get_encoder_id(dev,
1374
								ATOM_DEVICE_CRT1_SUPPORT,
1390
								ATOM_DEVICE_CRT1_SUPPORT,
1375
								1),
1391
								1),
1376
					  ATOM_DEVICE_CRT1_SUPPORT);
1392
					  ATOM_DEVICE_CRT1_SUPPORT);
1377
		radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT1_SUPPORT,
1393
		radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT1_SUPPORT,
1378
					    DRM_MODE_CONNECTOR_VGA, &ddc_i2c);
1394
					    DRM_MODE_CONNECTOR_VGA, &ddc_i2c,
-
 
1395
					    CONNECTOR_OBJECT_ID_VGA);
1379
		/* TV - TV DAC */
1396
		/* TV - TV DAC */
1380
		radeon_add_legacy_encoder(dev,
1397
		radeon_add_legacy_encoder(dev,
1381
					  radeon_get_encoder_id(dev,
1398
					  radeon_get_encoder_id(dev,
1382
								ATOM_DEVICE_TV1_SUPPORT,
1399
								ATOM_DEVICE_TV1_SUPPORT,
1383
								2),
1400
								2),
1384
					  ATOM_DEVICE_TV1_SUPPORT);
1401
					  ATOM_DEVICE_TV1_SUPPORT);
1385
		radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
1402
		radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
1386
					    DRM_MODE_CONNECTOR_SVIDEO,
1403
					    DRM_MODE_CONNECTOR_SVIDEO,
1387
					    &ddc_i2c);
1404
					    &ddc_i2c,
-
 
1405
					    CONNECTOR_OBJECT_ID_SVIDEO);
1388
		break;
1406
		break;
1389
	case CT_MINI_EXTERNAL:
1407
	case CT_MINI_EXTERNAL:
1390
		DRM_INFO("Connector Table: %d (mini external tmds)\n",
1408
		DRM_INFO("Connector Table: %d (mini external tmds)\n",
1391
			 rdev->mode_info.connector_table);
1409
			 rdev->mode_info.connector_table);
1392
		/* DVI-I - tv dac, ext tmds */
1410
		/* DVI-I - tv dac, ext tmds */
Line 1399... Line 1417...
1399
		radeon_add_legacy_encoder(dev,
1417
		radeon_add_legacy_encoder(dev,
1400
					  radeon_get_encoder_id(dev,
1418
					  radeon_get_encoder_id(dev,
1401
								ATOM_DEVICE_CRT2_SUPPORT,
1419
								ATOM_DEVICE_CRT2_SUPPORT,
1402
								2),
1420
								2),
1403
					  ATOM_DEVICE_CRT2_SUPPORT);
1421
					  ATOM_DEVICE_CRT2_SUPPORT);
-
 
1422
		/* XXX are any DL? */
1404
		radeon_add_legacy_connector(dev, 0,
1423
		radeon_add_legacy_connector(dev, 0,
1405
					    ATOM_DEVICE_DFP2_SUPPORT |
1424
					    ATOM_DEVICE_DFP2_SUPPORT |
1406
					    ATOM_DEVICE_CRT2_SUPPORT,
1425
					    ATOM_DEVICE_CRT2_SUPPORT,
1407
					    DRM_MODE_CONNECTOR_DVII, &ddc_i2c);
1426
					    DRM_MODE_CONNECTOR_DVII, &ddc_i2c,
-
 
1427
					    CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I);
1408
		/* TV - TV DAC */
1428
		/* TV - TV DAC */
1409
		radeon_add_legacy_encoder(dev,
1429
		radeon_add_legacy_encoder(dev,
1410
					  radeon_get_encoder_id(dev,
1430
					  radeon_get_encoder_id(dev,
1411
								ATOM_DEVICE_TV1_SUPPORT,
1431
								ATOM_DEVICE_TV1_SUPPORT,
1412
								2),
1432
								2),
1413
					  ATOM_DEVICE_TV1_SUPPORT);
1433
					  ATOM_DEVICE_TV1_SUPPORT);
1414
		radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_TV1_SUPPORT,
1434
		radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_TV1_SUPPORT,
1415
					    DRM_MODE_CONNECTOR_SVIDEO,
1435
					    DRM_MODE_CONNECTOR_SVIDEO,
1416
					    &ddc_i2c);
1436
					    &ddc_i2c,
-
 
1437
					    CONNECTOR_OBJECT_ID_SVIDEO);
1417
		break;
1438
		break;
1418
	case CT_MINI_INTERNAL:
1439
	case CT_MINI_INTERNAL:
1419
		DRM_INFO("Connector Table: %d (mini internal tmds)\n",
1440
		DRM_INFO("Connector Table: %d (mini internal tmds)\n",
1420
			 rdev->mode_info.connector_table);
1441
			 rdev->mode_info.connector_table);
1421
		/* DVI-I - tv dac, int tmds */
1442
		/* DVI-I - tv dac, int tmds */
Line 1431... Line 1452...
1431
								2),
1452
								2),
1432
					  ATOM_DEVICE_CRT2_SUPPORT);
1453
					  ATOM_DEVICE_CRT2_SUPPORT);
1433
		radeon_add_legacy_connector(dev, 0,
1454
		radeon_add_legacy_connector(dev, 0,
1434
					    ATOM_DEVICE_DFP1_SUPPORT |
1455
					    ATOM_DEVICE_DFP1_SUPPORT |
1435
					    ATOM_DEVICE_CRT2_SUPPORT,
1456
					    ATOM_DEVICE_CRT2_SUPPORT,
1436
					    DRM_MODE_CONNECTOR_DVII, &ddc_i2c);
1457
					    DRM_MODE_CONNECTOR_DVII, &ddc_i2c,
-
 
1458
					    CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I);
1437
		/* TV - TV DAC */
1459
		/* TV - TV DAC */
1438
		radeon_add_legacy_encoder(dev,
1460
		radeon_add_legacy_encoder(dev,
1439
					  radeon_get_encoder_id(dev,
1461
					  radeon_get_encoder_id(dev,
1440
								ATOM_DEVICE_TV1_SUPPORT,
1462
								ATOM_DEVICE_TV1_SUPPORT,
1441
								2),
1463
								2),
1442
					  ATOM_DEVICE_TV1_SUPPORT);
1464
					  ATOM_DEVICE_TV1_SUPPORT);
1443
		radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_TV1_SUPPORT,
1465
		radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_TV1_SUPPORT,
1444
					    DRM_MODE_CONNECTOR_SVIDEO,
1466
					    DRM_MODE_CONNECTOR_SVIDEO,
1445
					    &ddc_i2c);
1467
					    &ddc_i2c,
-
 
1468
					    CONNECTOR_OBJECT_ID_SVIDEO);
1446
		break;
1469
		break;
1447
	case CT_IMAC_G5_ISIGHT:
1470
	case CT_IMAC_G5_ISIGHT:
1448
		DRM_INFO("Connector Table: %d (imac g5 isight)\n",
1471
		DRM_INFO("Connector Table: %d (imac g5 isight)\n",
1449
			 rdev->mode_info.connector_table);
1472
			 rdev->mode_info.connector_table);
1450
		/* DVI-D - int tmds */
1473
		/* DVI-D - int tmds */
Line 1453... Line 1476...
1453
					  radeon_get_encoder_id(dev,
1476
					  radeon_get_encoder_id(dev,
1454
								ATOM_DEVICE_DFP1_SUPPORT,
1477
								ATOM_DEVICE_DFP1_SUPPORT,
1455
								0),
1478
								0),
1456
					  ATOM_DEVICE_DFP1_SUPPORT);
1479
					  ATOM_DEVICE_DFP1_SUPPORT);
1457
		radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_DFP1_SUPPORT,
1480
		radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_DFP1_SUPPORT,
1458
					    DRM_MODE_CONNECTOR_DVID, &ddc_i2c);
1481
					    DRM_MODE_CONNECTOR_DVID, &ddc_i2c,
-
 
1482
					    CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D);
1459
		/* VGA - tv dac */
1483
		/* VGA - tv dac */
1460
		ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
1484
		ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
1461
		radeon_add_legacy_encoder(dev,
1485
		radeon_add_legacy_encoder(dev,
1462
					  radeon_get_encoder_id(dev,
1486
					  radeon_get_encoder_id(dev,
1463
								ATOM_DEVICE_CRT2_SUPPORT,
1487
								ATOM_DEVICE_CRT2_SUPPORT,
1464
								2),
1488
								2),
1465
					  ATOM_DEVICE_CRT2_SUPPORT);
1489
					  ATOM_DEVICE_CRT2_SUPPORT);
1466
		radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT,
1490
		radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT,
1467
					    DRM_MODE_CONNECTOR_VGA, &ddc_i2c);
1491
					    DRM_MODE_CONNECTOR_VGA, &ddc_i2c,
-
 
1492
					    CONNECTOR_OBJECT_ID_VGA);
1468
		/* TV - TV DAC */
1493
		/* TV - TV DAC */
1469
		radeon_add_legacy_encoder(dev,
1494
		radeon_add_legacy_encoder(dev,
1470
					  radeon_get_encoder_id(dev,
1495
					  radeon_get_encoder_id(dev,
1471
								ATOM_DEVICE_TV1_SUPPORT,
1496
								ATOM_DEVICE_TV1_SUPPORT,
1472
								2),
1497
								2),
1473
					  ATOM_DEVICE_TV1_SUPPORT);
1498
					  ATOM_DEVICE_TV1_SUPPORT);
1474
		radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
1499
		radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
1475
					    DRM_MODE_CONNECTOR_SVIDEO,
1500
					    DRM_MODE_CONNECTOR_SVIDEO,
1476
					    &ddc_i2c);
1501
					    &ddc_i2c,
-
 
1502
					    CONNECTOR_OBJECT_ID_SVIDEO);
1477
		break;
1503
		break;
1478
	case CT_EMAC:
1504
	case CT_EMAC:
1479
		DRM_INFO("Connector Table: %d (emac)\n",
1505
		DRM_INFO("Connector Table: %d (emac)\n",
1480
			 rdev->mode_info.connector_table);
1506
			 rdev->mode_info.connector_table);
1481
		/* VGA - primary dac */
1507
		/* VGA - primary dac */
Line 1484... Line 1510...
1484
					  radeon_get_encoder_id(dev,
1510
					  radeon_get_encoder_id(dev,
1485
								ATOM_DEVICE_CRT1_SUPPORT,
1511
								ATOM_DEVICE_CRT1_SUPPORT,
1486
								1),
1512
								1),
1487
					  ATOM_DEVICE_CRT1_SUPPORT);
1513
					  ATOM_DEVICE_CRT1_SUPPORT);
1488
		radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_CRT1_SUPPORT,
1514
		radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_CRT1_SUPPORT,
1489
					    DRM_MODE_CONNECTOR_VGA, &ddc_i2c);
1515
					    DRM_MODE_CONNECTOR_VGA, &ddc_i2c,
-
 
1516
					    CONNECTOR_OBJECT_ID_VGA);
1490
		/* VGA - tv dac */
1517
		/* VGA - tv dac */
1491
		ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_CRT2_DDC);
1518
		ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_CRT2_DDC);
1492
		radeon_add_legacy_encoder(dev,
1519
		radeon_add_legacy_encoder(dev,
1493
					  radeon_get_encoder_id(dev,
1520
					  radeon_get_encoder_id(dev,
1494
								ATOM_DEVICE_CRT2_SUPPORT,
1521
								ATOM_DEVICE_CRT2_SUPPORT,
1495
								2),
1522
								2),
1496
					  ATOM_DEVICE_CRT2_SUPPORT);
1523
					  ATOM_DEVICE_CRT2_SUPPORT);
1497
		radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT,
1524
		radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT,
1498
					    DRM_MODE_CONNECTOR_VGA, &ddc_i2c);
1525
					    DRM_MODE_CONNECTOR_VGA, &ddc_i2c,
-
 
1526
					    CONNECTOR_OBJECT_ID_VGA);
1499
		/* TV - TV DAC */
1527
		/* TV - TV DAC */
1500
		radeon_add_legacy_encoder(dev,
1528
		radeon_add_legacy_encoder(dev,
1501
					  radeon_get_encoder_id(dev,
1529
					  radeon_get_encoder_id(dev,
1502
								ATOM_DEVICE_TV1_SUPPORT,
1530
								ATOM_DEVICE_TV1_SUPPORT,
1503
								2),
1531
								2),
1504
					  ATOM_DEVICE_TV1_SUPPORT);
1532
					  ATOM_DEVICE_TV1_SUPPORT);
1505
		radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
1533
		radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
1506
					    DRM_MODE_CONNECTOR_SVIDEO,
1534
					    DRM_MODE_CONNECTOR_SVIDEO,
1507
					    &ddc_i2c);
1535
					    &ddc_i2c,
-
 
1536
					    CONNECTOR_OBJECT_ID_SVIDEO);
1508
		break;
1537
		break;
1509
	default:
1538
	default:
1510
		DRM_INFO("Connector table: %d (invalid)\n",
1539
		DRM_INFO("Connector table: %d (invalid)\n",
1511
			 rdev->mode_info.connector_table);
1540
			 rdev->mode_info.connector_table);
1512
		return false;
1541
		return false;
Line 1579... Line 1608...
1579
	}
1608
	}
Line 1580... Line 1609...
1580
 
1609
 
1581
	return true;
1610
	return true;
Line -... Line 1611...
-
 
1611
}
-
 
1612
 
-
 
1613
static bool radeon_apply_legacy_tv_quirks(struct drm_device *dev)
-
 
1614
{
-
 
1615
	/* Acer 5102 has non-existent TV port */
-
 
1616
	if (dev->pdev->device == 0x5975 &&
-
 
1617
	    dev->pdev->subsystem_vendor == 0x1025 &&
-
 
1618
	    dev->pdev->subsystem_device == 0x009f)
-
 
1619
		return false;
-
 
1620
 
-
 
1621
	/* HP dc5750 has non-existent TV port */
-
 
1622
	if (dev->pdev->device == 0x5974 &&
-
 
1623
	    dev->pdev->subsystem_vendor == 0x103c &&
-
 
1624
	    dev->pdev->subsystem_device == 0x280a)
-
 
1625
		return false;
-
 
1626
 
-
 
1627
	return true;
-
 
1628
}
-
 
1629
 
-
 
1630
static uint16_t combios_check_dl_dvi(struct drm_device *dev, int is_dvi_d)
-
 
1631
{
-
 
1632
	struct radeon_device *rdev = dev->dev_private;
-
 
1633
	uint32_t ext_tmds_info;
-
 
1634
 
-
 
1635
	if (rdev->flags & RADEON_IS_IGP) {
-
 
1636
		if (is_dvi_d)
-
 
1637
			return CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D;
-
 
1638
		else
-
 
1639
			return CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I;
-
 
1640
	}
-
 
1641
	ext_tmds_info = combios_get_table_offset(dev, COMBIOS_EXT_TMDS_INFO_TABLE);
-
 
1642
	if (ext_tmds_info) {
-
 
1643
		uint8_t rev = RBIOS8(ext_tmds_info);
-
 
1644
		uint8_t flags = RBIOS8(ext_tmds_info + 4 + 5);
-
 
1645
		if (rev >= 3) {
-
 
1646
			if (is_dvi_d)
-
 
1647
				return CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D;
-
 
1648
			else
-
 
1649
				return CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I;
-
 
1650
		} else {
-
 
1651
			if (flags & 1) {
-
 
1652
				if (is_dvi_d)
-
 
1653
					return CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D;
-
 
1654
				else
-
 
1655
					return CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I;
-
 
1656
			}
-
 
1657
		}
-
 
1658
	}
-
 
1659
	if (is_dvi_d)
-
 
1660
		return CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D;
-
 
1661
	else
-
 
1662
		return CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I;
1582
}
1663
}
1583
 
1664
 
1584
bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
1665
bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
1585
{
1666
{
1586
	struct radeon_device *rdev = dev->dev_private;
1667
	struct radeon_device *rdev = dev->dev_private;
1587
	uint32_t conn_info, entry, devices;
1668
	uint32_t conn_info, entry, devices;
1588
	uint16_t tmp;
1669
	uint16_t tmp, connector_object_id;
1589
	enum radeon_combios_ddc ddc_type;
1670
	enum radeon_combios_ddc ddc_type;
1590
	enum radeon_combios_connector connector;
1671
	enum radeon_combios_connector connector;
Line 1626... Line 1707...
1626
				break;
1707
				break;
1627
			default:
1708
			default:
1628
				break;
1709
				break;
1629
			}
1710
			}
Line 1630... Line 1711...
1630
 
1711
 
1631
			radeon_apply_legacy_quirks(dev, i, &connector,
1712
			if (!radeon_apply_legacy_quirks(dev, i, &connector,
-
 
1713
						       &ddc_i2c))
Line 1632... Line 1714...
1632
						   &ddc_i2c);
1714
				continue;
1633
 
1715
 
1634
			switch (connector) {
1716
			switch (connector) {
1635
			case CONNECTOR_PROPRIETARY_LEGACY:
1717
			case CONNECTOR_PROPRIETARY_LEGACY:
Line 1642... Line 1724...
1642
							  (dev, devices, 0),
1724
							  (dev, devices, 0),
1643
							  devices);
1725
							  devices);
1644
				radeon_add_legacy_connector(dev, i, devices,
1726
				radeon_add_legacy_connector(dev, i, devices,
1645
							    legacy_connector_convert
1727
							    legacy_connector_convert
1646
							    [connector],
1728
							    [connector],
1647
							    &ddc_i2c);
1729
							    &ddc_i2c,
-
 
1730
							    CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D);
1648
				break;
1731
				break;
1649
			case CONNECTOR_CRT_LEGACY:
1732
			case CONNECTOR_CRT_LEGACY:
1650
				if (tmp & 0x1) {
1733
				if (tmp & 0x1) {
1651
					devices = ATOM_DEVICE_CRT2_SUPPORT;
1734
					devices = ATOM_DEVICE_CRT2_SUPPORT;
1652
					radeon_add_legacy_encoder(dev,
1735
					radeon_add_legacy_encoder(dev,
Line 1667... Line 1750...
1667
				radeon_add_legacy_connector(dev,
1750
				radeon_add_legacy_connector(dev,
1668
							    i,
1751
							    i,
1669
							    devices,
1752
							    devices,
1670
							    legacy_connector_convert
1753
							    legacy_connector_convert
1671
							    [connector],
1754
							    [connector],
1672
							    &ddc_i2c);
1755
							    &ddc_i2c,
-
 
1756
							    CONNECTOR_OBJECT_ID_VGA);
1673
				break;
1757
				break;
1674
			case CONNECTOR_DVI_I_LEGACY:
1758
			case CONNECTOR_DVI_I_LEGACY:
1675
				devices = 0;
1759
				devices = 0;
1676
				if (tmp & 0x1) {
1760
				if (tmp & 0x1) {
1677
					devices |= ATOM_DEVICE_CRT2_SUPPORT;
1761
					devices |= ATOM_DEVICE_CRT2_SUPPORT;
Line 1696... Line 1780...
1696
								  radeon_get_encoder_id
1780
								  radeon_get_encoder_id
1697
								  (dev,
1781
								  (dev,
1698
								   ATOM_DEVICE_DFP2_SUPPORT,
1782
								   ATOM_DEVICE_DFP2_SUPPORT,
1699
								   0),
1783
								   0),
1700
								  ATOM_DEVICE_DFP2_SUPPORT);
1784
								  ATOM_DEVICE_DFP2_SUPPORT);
-
 
1785
					connector_object_id = combios_check_dl_dvi(dev, 0);
1701
				} else {
1786
				} else {
1702
					devices |= ATOM_DEVICE_DFP1_SUPPORT;
1787
					devices |= ATOM_DEVICE_DFP1_SUPPORT;
1703
					radeon_add_legacy_encoder(dev,
1788
					radeon_add_legacy_encoder(dev,
1704
								  radeon_get_encoder_id
1789
								  radeon_get_encoder_id
1705
								  (dev,
1790
								  (dev,
1706
								   ATOM_DEVICE_DFP1_SUPPORT,
1791
								   ATOM_DEVICE_DFP1_SUPPORT,
1707
								   0),
1792
								   0),
1708
								  ATOM_DEVICE_DFP1_SUPPORT);
1793
								  ATOM_DEVICE_DFP1_SUPPORT);
-
 
1794
					connector_object_id = CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I;
1709
				}
1795
				}
1710
				radeon_add_legacy_connector(dev,
1796
				radeon_add_legacy_connector(dev,
1711
							    i,
1797
							    i,
1712
							    devices,
1798
							    devices,
1713
							    legacy_connector_convert
1799
							    legacy_connector_convert
1714
							    [connector],
1800
							    [connector],
1715
							    &ddc_i2c);
1801
							    &ddc_i2c,
-
 
1802
							    connector_object_id);
1716
				break;
1803
				break;
1717
			case CONNECTOR_DVI_D_LEGACY:
1804
			case CONNECTOR_DVI_D_LEGACY:
1718
				if ((tmp >> 4) & 0x1)
1805
				if ((tmp >> 4) & 0x1) {
1719
					devices = ATOM_DEVICE_DFP2_SUPPORT;
1806
					devices = ATOM_DEVICE_DFP2_SUPPORT;
-
 
1807
					connector_object_id = combios_check_dl_dvi(dev, 1);
1720
				else
1808
				} else {
1721
					devices = ATOM_DEVICE_DFP1_SUPPORT;
1809
					devices = ATOM_DEVICE_DFP1_SUPPORT;
-
 
1810
					connector_object_id = CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I;
-
 
1811
				}
1722
				radeon_add_legacy_encoder(dev,
1812
				radeon_add_legacy_encoder(dev,
1723
							  radeon_get_encoder_id
1813
							  radeon_get_encoder_id
1724
							  (dev, devices, 0),
1814
							  (dev, devices, 0),
1725
							  devices);
1815
							  devices);
1726
				radeon_add_legacy_connector(dev, i, devices,
1816
				radeon_add_legacy_connector(dev, i, devices,
1727
							    legacy_connector_convert
1817
							    legacy_connector_convert
1728
							    [connector],
1818
							    [connector],
1729
							    &ddc_i2c);
1819
							    &ddc_i2c,
-
 
1820
							    connector_object_id);
1730
				break;
1821
				break;
1731
			case CONNECTOR_CTV_LEGACY:
1822
			case CONNECTOR_CTV_LEGACY:
1732
			case CONNECTOR_STV_LEGACY:
1823
			case CONNECTOR_STV_LEGACY:
1733
				radeon_add_legacy_encoder(dev,
1824
				radeon_add_legacy_encoder(dev,
1734
							  radeon_get_encoder_id
1825
							  radeon_get_encoder_id
Line 1738... Line 1829...
1738
							  ATOM_DEVICE_TV1_SUPPORT);
1829
							  ATOM_DEVICE_TV1_SUPPORT);
1739
				radeon_add_legacy_connector(dev, i,
1830
				radeon_add_legacy_connector(dev, i,
1740
							    ATOM_DEVICE_TV1_SUPPORT,
1831
							    ATOM_DEVICE_TV1_SUPPORT,
1741
							    legacy_connector_convert
1832
							    legacy_connector_convert
1742
							    [connector],
1833
							    [connector],
1743
							    &ddc_i2c);
1834
							    &ddc_i2c,
-
 
1835
							    CONNECTOR_OBJECT_ID_SVIDEO);
1744
				break;
1836
				break;
1745
			default:
1837
			default:
1746
				DRM_ERROR("Unknown connector type: %d\n",
1838
				DRM_ERROR("Unknown connector type: %d\n",
1747
					  connector);
1839
					  connector);
1748
				continue;
1840
				continue;
Line 1770... Line 1862...
1770
			radeon_add_legacy_connector(dev,
1862
			radeon_add_legacy_connector(dev,
1771
						    0,
1863
						    0,
1772
						    ATOM_DEVICE_CRT1_SUPPORT |
1864
						    ATOM_DEVICE_CRT1_SUPPORT |
1773
						    ATOM_DEVICE_DFP1_SUPPORT,
1865
						    ATOM_DEVICE_DFP1_SUPPORT,
1774
						    DRM_MODE_CONNECTOR_DVII,
1866
						    DRM_MODE_CONNECTOR_DVII,
1775
						    &ddc_i2c);
1867
						    &ddc_i2c,
-
 
1868
						    CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I);
-
 
1869
		} else {
-
 
1870
			uint16_t crt_info =
-
 
1871
				combios_get_table_offset(dev, COMBIOS_CRT_INFO_TABLE);
-
 
1872
			DRM_DEBUG("Found CRT table, assuming VGA connector\n");
-
 
1873
			if (crt_info) {
-
 
1874
				radeon_add_legacy_encoder(dev,
-
 
1875
							  radeon_get_encoder_id(dev,
-
 
1876
										ATOM_DEVICE_CRT1_SUPPORT,
-
 
1877
										1),
-
 
1878
							  ATOM_DEVICE_CRT1_SUPPORT);
-
 
1879
				ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
-
 
1880
				radeon_add_legacy_connector(dev,
-
 
1881
							    0,
-
 
1882
							    ATOM_DEVICE_CRT1_SUPPORT,
-
 
1883
							    DRM_MODE_CONNECTOR_VGA,
-
 
1884
							    &ddc_i2c,
-
 
1885
							    CONNECTOR_OBJECT_ID_VGA);
1776
		} else {
1886
		} else {
1777
			DRM_DEBUG("No connector info found\n");
1887
			DRM_DEBUG("No connector info found\n");
1778
			return false;
1888
			return false;
1779
		}
1889
		}
1780
	}
1890
	}
-
 
1891
	}
Line 1781... Line 1892...
1781
 
1892
 
1782
	if (rdev->flags & RADEON_IS_MOBILITY || rdev->flags & RADEON_IS_IGP) {
1893
	if (rdev->flags & RADEON_IS_MOBILITY || rdev->flags & RADEON_IS_IGP) {
1783
		uint16_t lcd_info =
1894
		uint16_t lcd_info =
1784
		    combios_get_table_offset(dev, COMBIOS_LCD_INFO_TABLE);
1895
		    combios_get_table_offset(dev, COMBIOS_LCD_INFO_TABLE);
Line 1868... Line 1979...
1868
 
1979
 
1869
			radeon_add_legacy_connector(dev,
1980
			radeon_add_legacy_connector(dev,
1870
						    5,
1981
						    5,
1871
						    ATOM_DEVICE_LCD1_SUPPORT,
1982
						    ATOM_DEVICE_LCD1_SUPPORT,
1872
						    DRM_MODE_CONNECTOR_LVDS,
1983
						    DRM_MODE_CONNECTOR_LVDS,
-
 
1984
						    &ddc_i2c,
1873
						    &ddc_i2c);
1985
						    CONNECTOR_OBJECT_ID_LVDS);
1874
		}
1986
		}
Line 1875... Line 1987...
1875
	}
1987
	}
1876
 
1988
 
1877
	/* check TV table */
1989
	/* check TV table */
1878
	if (rdev->family != CHIP_R100 && rdev->family != CHIP_R200) {
1990
	if (rdev->family != CHIP_R100 && rdev->family != CHIP_R200) {
1879
		uint32_t tv_info =
1991
		uint32_t tv_info =
1880
		    combios_get_table_offset(dev, COMBIOS_TV_INFO_TABLE);
1992
		    combios_get_table_offset(dev, COMBIOS_TV_INFO_TABLE);
-
 
1993
		if (tv_info) {
1881
		if (tv_info) {
1994
			if (RBIOS8(tv_info + 6) == 'T') {
1882
			if (RBIOS8(tv_info + 6) == 'T') {
1995
				if (radeon_apply_legacy_tv_quirks(dev)) {
1883
				radeon_add_legacy_encoder(dev,
1996
				radeon_add_legacy_encoder(dev,
1884
							  radeon_get_encoder_id
1997
							  radeon_get_encoder_id
1885
							  (dev,
1998
							  (dev,
1886
							   ATOM_DEVICE_TV1_SUPPORT,
1999
							   ATOM_DEVICE_TV1_SUPPORT,
1887
							   2),
2000
							   2),
1888
							  ATOM_DEVICE_TV1_SUPPORT);
2001
							  ATOM_DEVICE_TV1_SUPPORT);
1889
				radeon_add_legacy_connector(dev, 6,
2002
				radeon_add_legacy_connector(dev, 6,
1890
							    ATOM_DEVICE_TV1_SUPPORT,
2003
							    ATOM_DEVICE_TV1_SUPPORT,
-
 
2004
							    DRM_MODE_CONNECTOR_SVIDEO,
-
 
2005
								    &ddc_i2c,
1891
							    DRM_MODE_CONNECTOR_SVIDEO,
2006
								    CONNECTOR_OBJECT_ID_SVIDEO);
1892
							    &ddc_i2c);
2007
				}
1893
			}
2008
			}
Line 1894... Line 2009...
1894
		}
2009
		}