49,7 → 49,8 |
uint32_t connector_id, |
uint32_t supported_device, |
int connector_type, |
struct radeon_i2c_bus_rec *i2c_bus); |
struct radeon_i2c_bus_rec *i2c_bus, |
uint16_t connector_object_id); |
|
/* from radeon_legacy_encoder.c */ |
extern void |
808,25 → 809,25 |
lvds->panel_blon_delay = (lvds_ss_gen_cntl >> RADEON_LVDS_PWRSEQ_DELAY2_SHIFT) & 0xf; |
|
if (fp_vert_stretch & RADEON_VERT_STRETCH_ENABLE) |
lvds->native_mode.panel_yres = |
lvds->native_mode.vdisplay = |
((fp_vert_stretch & RADEON_VERT_PANEL_SIZE) >> |
RADEON_VERT_PANEL_SHIFT) + 1; |
else |
lvds->native_mode.panel_yres = |
lvds->native_mode.vdisplay = |
(RREG32(RADEON_CRTC_V_TOTAL_DISP) >> 16) + 1; |
|
if (fp_horz_stretch & RADEON_HORZ_STRETCH_ENABLE) |
lvds->native_mode.panel_xres = |
lvds->native_mode.hdisplay = |
(((fp_horz_stretch & RADEON_HORZ_PANEL_SIZE) >> |
RADEON_HORZ_PANEL_SHIFT) + 1) * 8; |
else |
lvds->native_mode.panel_xres = |
lvds->native_mode.hdisplay = |
((RREG32(RADEON_CRTC_H_TOTAL_DISP) >> 16) + 1) * 8; |
|
if ((lvds->native_mode.panel_xres < 640) || |
(lvds->native_mode.panel_yres < 480)) { |
lvds->native_mode.panel_xres = 640; |
lvds->native_mode.panel_yres = 480; |
if ((lvds->native_mode.hdisplay < 640) || |
(lvds->native_mode.vdisplay < 480)) { |
lvds->native_mode.hdisplay = 640; |
lvds->native_mode.vdisplay = 480; |
} |
|
ppll_div_sel = RREG8(RADEON_CLOCK_CNTL_INDEX + 1) & 0x3; |
846,8 → 847,8 |
lvds->panel_vcc_delay = 200; |
|
DRM_INFO("Panel info derived from registers\n"); |
DRM_INFO("Panel Size %dx%d\n", lvds->native_mode.panel_xres, |
lvds->native_mode.panel_yres); |
DRM_INFO("Panel Size %dx%d\n", lvds->native_mode.hdisplay, |
lvds->native_mode.vdisplay); |
|
return lvds; |
} |
882,11 → 883,11 |
|
DRM_INFO("Panel ID String: %s\n", stmp); |
|
lvds->native_mode.panel_xres = RBIOS16(lcd_info + 0x19); |
lvds->native_mode.panel_yres = RBIOS16(lcd_info + 0x1b); |
lvds->native_mode.hdisplay = RBIOS16(lcd_info + 0x19); |
lvds->native_mode.vdisplay = RBIOS16(lcd_info + 0x1b); |
|
DRM_INFO("Panel Size %dx%d\n", lvds->native_mode.panel_xres, |
lvds->native_mode.panel_yres); |
DRM_INFO("Panel Size %dx%d\n", lvds->native_mode.hdisplay, |
lvds->native_mode.vdisplay); |
|
lvds->panel_vcc_delay = RBIOS16(lcd_info + 0x2c); |
if (lvds->panel_vcc_delay > 2000 || lvds->panel_vcc_delay < 0) |
944,27 → 945,25 |
if (tmp == 0) |
break; |
|
if ((RBIOS16(tmp) == lvds->native_mode.panel_xres) && |
if ((RBIOS16(tmp) == lvds->native_mode.hdisplay) && |
(RBIOS16(tmp + 2) == |
lvds->native_mode.panel_yres)) { |
lvds->native_mode.hblank = |
(RBIOS16(tmp + 17) - RBIOS16(tmp + 19)) * 8; |
lvds->native_mode.hoverplus = |
(RBIOS16(tmp + 21) - RBIOS16(tmp + 19) - |
1) * 8; |
lvds->native_mode.hsync_width = |
RBIOS8(tmp + 23) * 8; |
lvds->native_mode.vdisplay)) { |
lvds->native_mode.htotal = RBIOS16(tmp + 17) * 8; |
lvds->native_mode.hsync_start = RBIOS16(tmp + 21) * 8; |
lvds->native_mode.hsync_end = (RBIOS8(tmp + 23) + |
RBIOS16(tmp + 21)) * 8; |
|
lvds->native_mode.vblank = (RBIOS16(tmp + 24) - |
RBIOS16(tmp + 26)); |
lvds->native_mode.voverplus = |
((RBIOS16(tmp + 28) & 0x7ff) - |
RBIOS16(tmp + 26)); |
lvds->native_mode.vsync_width = |
((RBIOS16(tmp + 28) & 0xf800) >> 11); |
lvds->native_mode.dotclock = |
RBIOS16(tmp + 9) * 10; |
lvds->native_mode.vtotal = RBIOS16(tmp + 24); |
lvds->native_mode.vsync_start = RBIOS16(tmp + 28) & 0x7ff; |
lvds->native_mode.vsync_end = |
((RBIOS16(tmp + 28) & 0xf800) >> 11) + |
(RBIOS16(tmp + 28) & 0x7ff); |
|
lvds->native_mode.clock = RBIOS16(tmp + 9) * 10; |
lvds->native_mode.flags = 0; |
/* set crtc values */ |
drm_mode_set_crtcinfo(&lvds->native_mode, CRTC_INTERLACE_HALVE_V); |
|
} |
} |
} else { |
1178,7 → 1177,8 |
radeon_add_legacy_connector(dev, 0, |
ATOM_DEVICE_CRT1_SUPPORT, |
DRM_MODE_CONNECTOR_VGA, |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_VGA); |
} else if (rdev->flags & RADEON_IS_MOBILITY) { |
/* LVDS */ |
ddc_i2c = combios_setup_i2c_bus(RADEON_LCD_GPIO_MASK); |
1190,7 → 1190,8 |
radeon_add_legacy_connector(dev, 0, |
ATOM_DEVICE_LCD1_SUPPORT, |
DRM_MODE_CONNECTOR_LVDS, |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_LVDS); |
|
/* VGA - primary dac */ |
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC); |
1202,7 → 1203,8 |
radeon_add_legacy_connector(dev, 1, |
ATOM_DEVICE_CRT1_SUPPORT, |
DRM_MODE_CONNECTOR_VGA, |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_VGA); |
} else { |
/* DVI-I - tv dac, int tmds */ |
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC); |
1220,7 → 1222,8 |
ATOM_DEVICE_DFP1_SUPPORT | |
ATOM_DEVICE_CRT2_SUPPORT, |
DRM_MODE_CONNECTOR_DVII, |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I); |
|
/* VGA - primary dac */ |
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC); |
1232,7 → 1235,8 |
radeon_add_legacy_connector(dev, 1, |
ATOM_DEVICE_CRT1_SUPPORT, |
DRM_MODE_CONNECTOR_VGA, |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_VGA); |
} |
|
if (rdev->family != CHIP_R100 && rdev->family != CHIP_R200) { |
1245,7 → 1249,8 |
radeon_add_legacy_connector(dev, 2, |
ATOM_DEVICE_TV1_SUPPORT, |
DRM_MODE_CONNECTOR_SVIDEO, |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_SVIDEO); |
} |
break; |
case CT_IBOOK: |
1259,7 → 1264,8 |
0), |
ATOM_DEVICE_LCD1_SUPPORT); |
radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT, |
DRM_MODE_CONNECTOR_LVDS, &ddc_i2c); |
DRM_MODE_CONNECTOR_LVDS, &ddc_i2c, |
CONNECTOR_OBJECT_ID_LVDS); |
/* VGA - TV DAC */ |
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC); |
radeon_add_legacy_encoder(dev, |
1268,7 → 1274,8 |
2), |
ATOM_DEVICE_CRT2_SUPPORT); |
radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT, |
DRM_MODE_CONNECTOR_VGA, &ddc_i2c); |
DRM_MODE_CONNECTOR_VGA, &ddc_i2c, |
CONNECTOR_OBJECT_ID_VGA); |
/* TV - TV DAC */ |
radeon_add_legacy_encoder(dev, |
radeon_get_encoder_id(dev, |
1277,7 → 1284,8 |
ATOM_DEVICE_TV1_SUPPORT); |
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT, |
DRM_MODE_CONNECTOR_SVIDEO, |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_SVIDEO); |
break; |
case CT_POWERBOOK_EXTERNAL: |
DRM_INFO("Connector Table: %d (powerbook external tmds)\n", |
1290,7 → 1298,8 |
0), |
ATOM_DEVICE_LCD1_SUPPORT); |
radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT, |
DRM_MODE_CONNECTOR_LVDS, &ddc_i2c); |
DRM_MODE_CONNECTOR_LVDS, &ddc_i2c, |
CONNECTOR_OBJECT_ID_LVDS); |
/* DVI-I - primary dac, ext tmds */ |
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC); |
radeon_add_legacy_encoder(dev, |
1303,10 → 1312,12 |
ATOM_DEVICE_CRT1_SUPPORT, |
1), |
ATOM_DEVICE_CRT1_SUPPORT); |
/* XXX some are SL */ |
radeon_add_legacy_connector(dev, 1, |
ATOM_DEVICE_DFP2_SUPPORT | |
ATOM_DEVICE_CRT1_SUPPORT, |
DRM_MODE_CONNECTOR_DVII, &ddc_i2c); |
DRM_MODE_CONNECTOR_DVII, &ddc_i2c, |
CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I); |
/* TV - TV DAC */ |
radeon_add_legacy_encoder(dev, |
radeon_get_encoder_id(dev, |
1315,7 → 1326,8 |
ATOM_DEVICE_TV1_SUPPORT); |
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT, |
DRM_MODE_CONNECTOR_SVIDEO, |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_SVIDEO); |
break; |
case CT_POWERBOOK_INTERNAL: |
DRM_INFO("Connector Table: %d (powerbook internal tmds)\n", |
1328,7 → 1340,8 |
0), |
ATOM_DEVICE_LCD1_SUPPORT); |
radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT, |
DRM_MODE_CONNECTOR_LVDS, &ddc_i2c); |
DRM_MODE_CONNECTOR_LVDS, &ddc_i2c, |
CONNECTOR_OBJECT_ID_LVDS); |
/* DVI-I - primary dac, int tmds */ |
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC); |
radeon_add_legacy_encoder(dev, |
1344,7 → 1357,8 |
radeon_add_legacy_connector(dev, 1, |
ATOM_DEVICE_DFP1_SUPPORT | |
ATOM_DEVICE_CRT1_SUPPORT, |
DRM_MODE_CONNECTOR_DVII, &ddc_i2c); |
DRM_MODE_CONNECTOR_DVII, &ddc_i2c, |
CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I); |
/* TV - TV DAC */ |
radeon_add_legacy_encoder(dev, |
radeon_get_encoder_id(dev, |
1353,7 → 1367,8 |
ATOM_DEVICE_TV1_SUPPORT); |
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT, |
DRM_MODE_CONNECTOR_SVIDEO, |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_SVIDEO); |
break; |
case CT_POWERBOOK_VGA: |
DRM_INFO("Connector Table: %d (powerbook vga)\n", |
1366,7 → 1381,8 |
0), |
ATOM_DEVICE_LCD1_SUPPORT); |
radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT, |
DRM_MODE_CONNECTOR_LVDS, &ddc_i2c); |
DRM_MODE_CONNECTOR_LVDS, &ddc_i2c, |
CONNECTOR_OBJECT_ID_LVDS); |
/* VGA - primary dac */ |
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC); |
radeon_add_legacy_encoder(dev, |
1375,7 → 1391,8 |
1), |
ATOM_DEVICE_CRT1_SUPPORT); |
radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT1_SUPPORT, |
DRM_MODE_CONNECTOR_VGA, &ddc_i2c); |
DRM_MODE_CONNECTOR_VGA, &ddc_i2c, |
CONNECTOR_OBJECT_ID_VGA); |
/* TV - TV DAC */ |
radeon_add_legacy_encoder(dev, |
radeon_get_encoder_id(dev, |
1384,7 → 1401,8 |
ATOM_DEVICE_TV1_SUPPORT); |
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT, |
DRM_MODE_CONNECTOR_SVIDEO, |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_SVIDEO); |
break; |
case CT_MINI_EXTERNAL: |
DRM_INFO("Connector Table: %d (mini external tmds)\n", |
1401,10 → 1419,12 |
ATOM_DEVICE_CRT2_SUPPORT, |
2), |
ATOM_DEVICE_CRT2_SUPPORT); |
/* XXX are any DL? */ |
radeon_add_legacy_connector(dev, 0, |
ATOM_DEVICE_DFP2_SUPPORT | |
ATOM_DEVICE_CRT2_SUPPORT, |
DRM_MODE_CONNECTOR_DVII, &ddc_i2c); |
DRM_MODE_CONNECTOR_DVII, &ddc_i2c, |
CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I); |
/* TV - TV DAC */ |
radeon_add_legacy_encoder(dev, |
radeon_get_encoder_id(dev, |
1413,7 → 1433,8 |
ATOM_DEVICE_TV1_SUPPORT); |
radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_TV1_SUPPORT, |
DRM_MODE_CONNECTOR_SVIDEO, |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_SVIDEO); |
break; |
case CT_MINI_INTERNAL: |
DRM_INFO("Connector Table: %d (mini internal tmds)\n", |
1433,7 → 1454,8 |
radeon_add_legacy_connector(dev, 0, |
ATOM_DEVICE_DFP1_SUPPORT | |
ATOM_DEVICE_CRT2_SUPPORT, |
DRM_MODE_CONNECTOR_DVII, &ddc_i2c); |
DRM_MODE_CONNECTOR_DVII, &ddc_i2c, |
CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I); |
/* TV - TV DAC */ |
radeon_add_legacy_encoder(dev, |
radeon_get_encoder_id(dev, |
1442,7 → 1464,8 |
ATOM_DEVICE_TV1_SUPPORT); |
radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_TV1_SUPPORT, |
DRM_MODE_CONNECTOR_SVIDEO, |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_SVIDEO); |
break; |
case CT_IMAC_G5_ISIGHT: |
DRM_INFO("Connector Table: %d (imac g5 isight)\n", |
1455,7 → 1478,8 |
0), |
ATOM_DEVICE_DFP1_SUPPORT); |
radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_DFP1_SUPPORT, |
DRM_MODE_CONNECTOR_DVID, &ddc_i2c); |
DRM_MODE_CONNECTOR_DVID, &ddc_i2c, |
CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D); |
/* VGA - tv dac */ |
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC); |
radeon_add_legacy_encoder(dev, |
1464,7 → 1488,8 |
2), |
ATOM_DEVICE_CRT2_SUPPORT); |
radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT, |
DRM_MODE_CONNECTOR_VGA, &ddc_i2c); |
DRM_MODE_CONNECTOR_VGA, &ddc_i2c, |
CONNECTOR_OBJECT_ID_VGA); |
/* TV - TV DAC */ |
radeon_add_legacy_encoder(dev, |
radeon_get_encoder_id(dev, |
1473,7 → 1498,8 |
ATOM_DEVICE_TV1_SUPPORT); |
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT, |
DRM_MODE_CONNECTOR_SVIDEO, |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_SVIDEO); |
break; |
case CT_EMAC: |
DRM_INFO("Connector Table: %d (emac)\n", |
1486,7 → 1512,8 |
1), |
ATOM_DEVICE_CRT1_SUPPORT); |
radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_CRT1_SUPPORT, |
DRM_MODE_CONNECTOR_VGA, &ddc_i2c); |
DRM_MODE_CONNECTOR_VGA, &ddc_i2c, |
CONNECTOR_OBJECT_ID_VGA); |
/* VGA - tv dac */ |
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_CRT2_DDC); |
radeon_add_legacy_encoder(dev, |
1495,7 → 1522,8 |
2), |
ATOM_DEVICE_CRT2_SUPPORT); |
radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT, |
DRM_MODE_CONNECTOR_VGA, &ddc_i2c); |
DRM_MODE_CONNECTOR_VGA, &ddc_i2c, |
CONNECTOR_OBJECT_ID_VGA); |
/* TV - TV DAC */ |
radeon_add_legacy_encoder(dev, |
radeon_get_encoder_id(dev, |
1504,7 → 1532,8 |
ATOM_DEVICE_TV1_SUPPORT); |
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT, |
DRM_MODE_CONNECTOR_SVIDEO, |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_SVIDEO); |
break; |
default: |
DRM_INFO("Connector table: %d (invalid)\n", |
1581,11 → 1610,63 |
return true; |
} |
|
static bool radeon_apply_legacy_tv_quirks(struct drm_device *dev) |
{ |
/* Acer 5102 has non-existent TV port */ |
if (dev->pdev->device == 0x5975 && |
dev->pdev->subsystem_vendor == 0x1025 && |
dev->pdev->subsystem_device == 0x009f) |
return false; |
|
/* HP dc5750 has non-existent TV port */ |
if (dev->pdev->device == 0x5974 && |
dev->pdev->subsystem_vendor == 0x103c && |
dev->pdev->subsystem_device == 0x280a) |
return false; |
|
return true; |
} |
|
static uint16_t combios_check_dl_dvi(struct drm_device *dev, int is_dvi_d) |
{ |
struct radeon_device *rdev = dev->dev_private; |
uint32_t ext_tmds_info; |
|
if (rdev->flags & RADEON_IS_IGP) { |
if (is_dvi_d) |
return CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D; |
else |
return CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I; |
} |
ext_tmds_info = combios_get_table_offset(dev, COMBIOS_EXT_TMDS_INFO_TABLE); |
if (ext_tmds_info) { |
uint8_t rev = RBIOS8(ext_tmds_info); |
uint8_t flags = RBIOS8(ext_tmds_info + 4 + 5); |
if (rev >= 3) { |
if (is_dvi_d) |
return CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D; |
else |
return CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I; |
} else { |
if (flags & 1) { |
if (is_dvi_d) |
return CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D; |
else |
return CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I; |
} |
} |
} |
if (is_dvi_d) |
return CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D; |
else |
return CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I; |
} |
|
bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev) |
{ |
struct radeon_device *rdev = dev->dev_private; |
uint32_t conn_info, entry, devices; |
uint16_t tmp; |
uint16_t tmp, connector_object_id; |
enum radeon_combios_ddc ddc_type; |
enum radeon_combios_connector connector; |
int i = 0; |
1628,8 → 1709,9 |
break; |
} |
|
radeon_apply_legacy_quirks(dev, i, &connector, |
&ddc_i2c); |
if (!radeon_apply_legacy_quirks(dev, i, &connector, |
&ddc_i2c)) |
continue; |
|
switch (connector) { |
case CONNECTOR_PROPRIETARY_LEGACY: |
1644,7 → 1726,8 |
radeon_add_legacy_connector(dev, i, devices, |
legacy_connector_convert |
[connector], |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D); |
break; |
case CONNECTOR_CRT_LEGACY: |
if (tmp & 0x1) { |
1669,7 → 1752,8 |
devices, |
legacy_connector_convert |
[connector], |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_VGA); |
break; |
case CONNECTOR_DVI_I_LEGACY: |
devices = 0; |
1698,6 → 1782,7 |
ATOM_DEVICE_DFP2_SUPPORT, |
0), |
ATOM_DEVICE_DFP2_SUPPORT); |
connector_object_id = combios_check_dl_dvi(dev, 0); |
} else { |
devices |= ATOM_DEVICE_DFP1_SUPPORT; |
radeon_add_legacy_encoder(dev, |
1706,6 → 1791,7 |
ATOM_DEVICE_DFP1_SUPPORT, |
0), |
ATOM_DEVICE_DFP1_SUPPORT); |
connector_object_id = CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I; |
} |
radeon_add_legacy_connector(dev, |
i, |
1712,13 → 1798,17 |
devices, |
legacy_connector_convert |
[connector], |
&ddc_i2c); |
&ddc_i2c, |
connector_object_id); |
break; |
case CONNECTOR_DVI_D_LEGACY: |
if ((tmp >> 4) & 0x1) |
if ((tmp >> 4) & 0x1) { |
devices = ATOM_DEVICE_DFP2_SUPPORT; |
else |
connector_object_id = combios_check_dl_dvi(dev, 1); |
} else { |
devices = ATOM_DEVICE_DFP1_SUPPORT; |
connector_object_id = CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I; |
} |
radeon_add_legacy_encoder(dev, |
radeon_get_encoder_id |
(dev, devices, 0), |
1726,7 → 1816,8 |
radeon_add_legacy_connector(dev, i, devices, |
legacy_connector_convert |
[connector], |
&ddc_i2c); |
&ddc_i2c, |
connector_object_id); |
break; |
case CONNECTOR_CTV_LEGACY: |
case CONNECTOR_STV_LEGACY: |
1740,7 → 1831,8 |
ATOM_DEVICE_TV1_SUPPORT, |
legacy_connector_convert |
[connector], |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_SVIDEO); |
break; |
default: |
DRM_ERROR("Unknown connector type: %d\n", |
1772,12 → 1864,31 |
ATOM_DEVICE_CRT1_SUPPORT | |
ATOM_DEVICE_DFP1_SUPPORT, |
DRM_MODE_CONNECTOR_DVII, |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I); |
} else { |
uint16_t crt_info = |
combios_get_table_offset(dev, COMBIOS_CRT_INFO_TABLE); |
DRM_DEBUG("Found CRT table, assuming VGA connector\n"); |
if (crt_info) { |
radeon_add_legacy_encoder(dev, |
radeon_get_encoder_id(dev, |
ATOM_DEVICE_CRT1_SUPPORT, |
1), |
ATOM_DEVICE_CRT1_SUPPORT); |
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC); |
radeon_add_legacy_connector(dev, |
0, |
ATOM_DEVICE_CRT1_SUPPORT, |
DRM_MODE_CONNECTOR_VGA, |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_VGA); |
} else { |
DRM_DEBUG("No connector info found\n"); |
return false; |
} |
} |
} |
|
if (rdev->flags & RADEON_IS_MOBILITY || rdev->flags & RADEON_IS_IGP) { |
uint16_t lcd_info = |
1870,7 → 1981,8 |
5, |
ATOM_DEVICE_LCD1_SUPPORT, |
DRM_MODE_CONNECTOR_LVDS, |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_LVDS); |
} |
} |
|
1880,6 → 1992,7 |
combios_get_table_offset(dev, COMBIOS_TV_INFO_TABLE); |
if (tv_info) { |
if (RBIOS8(tv_info + 6) == 'T') { |
if (radeon_apply_legacy_tv_quirks(dev)) { |
radeon_add_legacy_encoder(dev, |
radeon_get_encoder_id |
(dev, |
1889,10 → 2002,12 |
radeon_add_legacy_connector(dev, 6, |
ATOM_DEVICE_TV1_SUPPORT, |
DRM_MODE_CONNECTOR_SVIDEO, |
&ddc_i2c); |
&ddc_i2c, |
CONNECTOR_OBJECT_ID_SVIDEO); |
} |
} |
} |
} |
|
radeon_link_encoder_connector(dev); |
|