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 | } |