|
@@ -49,7 +49,8 @@ radeon_add_legacy_connector(struct drm_device *dev,
|
|
uint32_t connector_id,
|
|
uint32_t connector_id,
|
|
uint32_t supported_device,
|
|
uint32_t supported_device,
|
|
int connector_type,
|
|
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 */
|
|
/* from radeon_legacy_encoder.c */
|
|
extern void
|
|
extern void
|
|
@@ -808,25 +809,25 @@ static struct radeon_encoder_lvds *radeon_legacy_get_lvds_info_from_regs(struct
|
|
lvds->panel_blon_delay = (lvds_ss_gen_cntl >> RADEON_LVDS_PWRSEQ_DELAY2_SHIFT) & 0xf;
|
|
lvds->panel_blon_delay = (lvds_ss_gen_cntl >> RADEON_LVDS_PWRSEQ_DELAY2_SHIFT) & 0xf;
|
|
|
|
|
|
if (fp_vert_stretch & RADEON_VERT_STRETCH_ENABLE)
|
|
if (fp_vert_stretch & RADEON_VERT_STRETCH_ENABLE)
|
|
- lvds->native_mode.panel_yres =
|
|
|
|
|
|
+ lvds->native_mode.vdisplay =
|
|
((fp_vert_stretch & RADEON_VERT_PANEL_SIZE) >>
|
|
((fp_vert_stretch & RADEON_VERT_PANEL_SIZE) >>
|
|
RADEON_VERT_PANEL_SHIFT) + 1;
|
|
RADEON_VERT_PANEL_SHIFT) + 1;
|
|
else
|
|
else
|
|
- lvds->native_mode.panel_yres =
|
|
|
|
|
|
+ lvds->native_mode.vdisplay =
|
|
(RREG32(RADEON_CRTC_V_TOTAL_DISP) >> 16) + 1;
|
|
(RREG32(RADEON_CRTC_V_TOTAL_DISP) >> 16) + 1;
|
|
|
|
|
|
if (fp_horz_stretch & RADEON_HORZ_STRETCH_ENABLE)
|
|
if (fp_horz_stretch & RADEON_HORZ_STRETCH_ENABLE)
|
|
- lvds->native_mode.panel_xres =
|
|
|
|
|
|
+ lvds->native_mode.hdisplay =
|
|
(((fp_horz_stretch & RADEON_HORZ_PANEL_SIZE) >>
|
|
(((fp_horz_stretch & RADEON_HORZ_PANEL_SIZE) >>
|
|
RADEON_HORZ_PANEL_SHIFT) + 1) * 8;
|
|
RADEON_HORZ_PANEL_SHIFT) + 1) * 8;
|
|
else
|
|
else
|
|
- lvds->native_mode.panel_xres =
|
|
|
|
|
|
+ lvds->native_mode.hdisplay =
|
|
((RREG32(RADEON_CRTC_H_TOTAL_DISP) >> 16) + 1) * 8;
|
|
((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;
|
|
ppll_div_sel = RREG8(RADEON_CLOCK_CNTL_INDEX + 1) & 0x3;
|
|
@@ -846,8 +847,8 @@ static struct radeon_encoder_lvds *radeon_legacy_get_lvds_info_from_regs(struct
|
|
lvds->panel_vcc_delay = 200;
|
|
lvds->panel_vcc_delay = 200;
|
|
|
|
|
|
DRM_INFO("Panel info derived from registers\n");
|
|
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;
|
|
return lvds;
|
|
}
|
|
}
|
|
@@ -882,11 +883,11 @@ struct radeon_encoder_lvds *radeon_combios_get_lvds_info(struct radeon_encoder
|
|
|
|
|
|
DRM_INFO("Panel ID String: %s\n", stmp);
|
|
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);
|
|
lvds->panel_vcc_delay = RBIOS16(lcd_info + 0x2c);
|
|
if (lvds->panel_vcc_delay > 2000 || lvds->panel_vcc_delay < 0)
|
|
if (lvds->panel_vcc_delay > 2000 || lvds->panel_vcc_delay < 0)
|
|
@@ -944,27 +945,25 @@ struct radeon_encoder_lvds *radeon_combios_get_lvds_info(struct radeon_encoder
|
|
if (tmp == 0)
|
|
if (tmp == 0)
|
|
break;
|
|
break;
|
|
|
|
|
|
- if ((RBIOS16(tmp) == lvds->native_mode.panel_xres) &&
|
|
|
|
|
|
+ if ((RBIOS16(tmp) == lvds->native_mode.hdisplay) &&
|
|
(RBIOS16(tmp + 2) ==
|
|
(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.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.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.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;
|
|
lvds->native_mode.flags = 0;
|
|
|
|
+ /* set crtc values */
|
|
|
|
+ drm_mode_set_crtcinfo(&lvds->native_mode, CRTC_INTERLACE_HALVE_V);
|
|
|
|
+
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
@@ -1178,7 +1177,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
radeon_add_legacy_connector(dev, 0,
|
|
radeon_add_legacy_connector(dev, 0,
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
DRM_MODE_CONNECTOR_VGA,
|
|
DRM_MODE_CONNECTOR_VGA,
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_VGA);
|
|
} else if (rdev->flags & RADEON_IS_MOBILITY) {
|
|
} else if (rdev->flags & RADEON_IS_MOBILITY) {
|
|
/* LVDS */
|
|
/* LVDS */
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_LCD_GPIO_MASK);
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_LCD_GPIO_MASK);
|
|
@@ -1190,7 +1190,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
radeon_add_legacy_connector(dev, 0,
|
|
radeon_add_legacy_connector(dev, 0,
|
|
ATOM_DEVICE_LCD1_SUPPORT,
|
|
ATOM_DEVICE_LCD1_SUPPORT,
|
|
DRM_MODE_CONNECTOR_LVDS,
|
|
DRM_MODE_CONNECTOR_LVDS,
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_LVDS);
|
|
|
|
|
|
/* VGA - primary dac */
|
|
/* VGA - primary dac */
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
@@ -1202,7 +1203,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
radeon_add_legacy_connector(dev, 1,
|
|
radeon_add_legacy_connector(dev, 1,
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
DRM_MODE_CONNECTOR_VGA,
|
|
DRM_MODE_CONNECTOR_VGA,
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_VGA);
|
|
} else {
|
|
} else {
|
|
/* DVI-I - tv dac, int tmds */
|
|
/* DVI-I - tv dac, int tmds */
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
|
|
@@ -1220,7 +1222,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
ATOM_DEVICE_DFP1_SUPPORT |
|
|
ATOM_DEVICE_DFP1_SUPPORT |
|
|
ATOM_DEVICE_CRT2_SUPPORT,
|
|
ATOM_DEVICE_CRT2_SUPPORT,
|
|
DRM_MODE_CONNECTOR_DVII,
|
|
DRM_MODE_CONNECTOR_DVII,
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I);
|
|
|
|
|
|
/* VGA - primary dac */
|
|
/* VGA - primary dac */
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
@@ -1232,7 +1235,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
radeon_add_legacy_connector(dev, 1,
|
|
radeon_add_legacy_connector(dev, 1,
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
DRM_MODE_CONNECTOR_VGA,
|
|
DRM_MODE_CONNECTOR_VGA,
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_VGA);
|
|
}
|
|
}
|
|
|
|
|
|
if (rdev->family != CHIP_R100 && rdev->family != CHIP_R200) {
|
|
if (rdev->family != CHIP_R100 && rdev->family != CHIP_R200) {
|
|
@@ -1245,7 +1249,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
radeon_add_legacy_connector(dev, 2,
|
|
radeon_add_legacy_connector(dev, 2,
|
|
ATOM_DEVICE_TV1_SUPPORT,
|
|
ATOM_DEVICE_TV1_SUPPORT,
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO);
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case CT_IBOOK:
|
|
case CT_IBOOK:
|
|
@@ -1259,7 +1264,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
0),
|
|
0),
|
|
ATOM_DEVICE_LCD1_SUPPORT);
|
|
ATOM_DEVICE_LCD1_SUPPORT);
|
|
radeon_add_legacy_connector(dev, 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 */
|
|
/* VGA - TV DAC */
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_add_legacy_encoder(dev,
|
|
@@ -1268,7 +1274,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
2),
|
|
2),
|
|
ATOM_DEVICE_CRT2_SUPPORT);
|
|
ATOM_DEVICE_CRT2_SUPPORT);
|
|
radeon_add_legacy_connector(dev, 1, 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 */
|
|
/* TV - TV DAC */
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_get_encoder_id(dev,
|
|
radeon_get_encoder_id(dev,
|
|
@@ -1277,7 +1284,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
ATOM_DEVICE_TV1_SUPPORT);
|
|
ATOM_DEVICE_TV1_SUPPORT);
|
|
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
|
|
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO);
|
|
break;
|
|
break;
|
|
case CT_POWERBOOK_EXTERNAL:
|
|
case CT_POWERBOOK_EXTERNAL:
|
|
DRM_INFO("Connector Table: %d (powerbook external tmds)\n",
|
|
DRM_INFO("Connector Table: %d (powerbook external tmds)\n",
|
|
@@ -1290,7 +1298,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
0),
|
|
0),
|
|
ATOM_DEVICE_LCD1_SUPPORT);
|
|
ATOM_DEVICE_LCD1_SUPPORT);
|
|
radeon_add_legacy_connector(dev, 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 */
|
|
/* DVI-I - primary dac, ext tmds */
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_add_legacy_encoder(dev,
|
|
@@ -1303,10 +1312,12 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
1),
|
|
1),
|
|
ATOM_DEVICE_CRT1_SUPPORT);
|
|
ATOM_DEVICE_CRT1_SUPPORT);
|
|
|
|
+ /* XXX some are SL */
|
|
radeon_add_legacy_connector(dev, 1,
|
|
radeon_add_legacy_connector(dev, 1,
|
|
ATOM_DEVICE_DFP2_SUPPORT |
|
|
ATOM_DEVICE_DFP2_SUPPORT |
|
|
ATOM_DEVICE_CRT1_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 */
|
|
/* TV - TV DAC */
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_get_encoder_id(dev,
|
|
radeon_get_encoder_id(dev,
|
|
@@ -1315,7 +1326,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
ATOM_DEVICE_TV1_SUPPORT);
|
|
ATOM_DEVICE_TV1_SUPPORT);
|
|
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
|
|
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO);
|
|
break;
|
|
break;
|
|
case CT_POWERBOOK_INTERNAL:
|
|
case CT_POWERBOOK_INTERNAL:
|
|
DRM_INFO("Connector Table: %d (powerbook internal tmds)\n",
|
|
DRM_INFO("Connector Table: %d (powerbook internal tmds)\n",
|
|
@@ -1328,7 +1340,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
0),
|
|
0),
|
|
ATOM_DEVICE_LCD1_SUPPORT);
|
|
ATOM_DEVICE_LCD1_SUPPORT);
|
|
radeon_add_legacy_connector(dev, 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 */
|
|
/* DVI-I - primary dac, int tmds */
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_add_legacy_encoder(dev,
|
|
@@ -1344,7 +1357,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
radeon_add_legacy_connector(dev, 1,
|
|
radeon_add_legacy_connector(dev, 1,
|
|
ATOM_DEVICE_DFP1_SUPPORT |
|
|
ATOM_DEVICE_DFP1_SUPPORT |
|
|
ATOM_DEVICE_CRT1_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 */
|
|
/* TV - TV DAC */
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_get_encoder_id(dev,
|
|
radeon_get_encoder_id(dev,
|
|
@@ -1353,7 +1367,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
ATOM_DEVICE_TV1_SUPPORT);
|
|
ATOM_DEVICE_TV1_SUPPORT);
|
|
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
|
|
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO);
|
|
break;
|
|
break;
|
|
case CT_POWERBOOK_VGA:
|
|
case CT_POWERBOOK_VGA:
|
|
DRM_INFO("Connector Table: %d (powerbook vga)\n",
|
|
DRM_INFO("Connector Table: %d (powerbook vga)\n",
|
|
@@ -1366,7 +1381,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
0),
|
|
0),
|
|
ATOM_DEVICE_LCD1_SUPPORT);
|
|
ATOM_DEVICE_LCD1_SUPPORT);
|
|
radeon_add_legacy_connector(dev, 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 */
|
|
/* VGA - primary dac */
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_add_legacy_encoder(dev,
|
|
@@ -1375,7 +1391,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
1),
|
|
1),
|
|
ATOM_DEVICE_CRT1_SUPPORT);
|
|
ATOM_DEVICE_CRT1_SUPPORT);
|
|
radeon_add_legacy_connector(dev, 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 */
|
|
/* TV - TV DAC */
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_get_encoder_id(dev,
|
|
radeon_get_encoder_id(dev,
|
|
@@ -1384,7 +1401,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
ATOM_DEVICE_TV1_SUPPORT);
|
|
ATOM_DEVICE_TV1_SUPPORT);
|
|
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
|
|
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO);
|
|
break;
|
|
break;
|
|
case CT_MINI_EXTERNAL:
|
|
case CT_MINI_EXTERNAL:
|
|
DRM_INFO("Connector Table: %d (mini external tmds)\n",
|
|
DRM_INFO("Connector Table: %d (mini external tmds)\n",
|
|
@@ -1401,10 +1419,12 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
ATOM_DEVICE_CRT2_SUPPORT,
|
|
ATOM_DEVICE_CRT2_SUPPORT,
|
|
2),
|
|
2),
|
|
ATOM_DEVICE_CRT2_SUPPORT);
|
|
ATOM_DEVICE_CRT2_SUPPORT);
|
|
|
|
+ /* XXX are any DL? */
|
|
radeon_add_legacy_connector(dev, 0,
|
|
radeon_add_legacy_connector(dev, 0,
|
|
ATOM_DEVICE_DFP2_SUPPORT |
|
|
ATOM_DEVICE_DFP2_SUPPORT |
|
|
ATOM_DEVICE_CRT2_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 */
|
|
/* TV - TV DAC */
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_get_encoder_id(dev,
|
|
radeon_get_encoder_id(dev,
|
|
@@ -1413,7 +1433,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
ATOM_DEVICE_TV1_SUPPORT);
|
|
ATOM_DEVICE_TV1_SUPPORT);
|
|
radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_TV1_SUPPORT,
|
|
radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_TV1_SUPPORT,
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO);
|
|
break;
|
|
break;
|
|
case CT_MINI_INTERNAL:
|
|
case CT_MINI_INTERNAL:
|
|
DRM_INFO("Connector Table: %d (mini internal tmds)\n",
|
|
DRM_INFO("Connector Table: %d (mini internal tmds)\n",
|
|
@@ -1433,7 +1454,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
radeon_add_legacy_connector(dev, 0,
|
|
radeon_add_legacy_connector(dev, 0,
|
|
ATOM_DEVICE_DFP1_SUPPORT |
|
|
ATOM_DEVICE_DFP1_SUPPORT |
|
|
ATOM_DEVICE_CRT2_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 */
|
|
/* TV - TV DAC */
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_get_encoder_id(dev,
|
|
radeon_get_encoder_id(dev,
|
|
@@ -1442,7 +1464,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
ATOM_DEVICE_TV1_SUPPORT);
|
|
ATOM_DEVICE_TV1_SUPPORT);
|
|
radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_TV1_SUPPORT,
|
|
radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_TV1_SUPPORT,
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO);
|
|
break;
|
|
break;
|
|
case CT_IMAC_G5_ISIGHT:
|
|
case CT_IMAC_G5_ISIGHT:
|
|
DRM_INFO("Connector Table: %d (imac g5 isight)\n",
|
|
DRM_INFO("Connector Table: %d (imac g5 isight)\n",
|
|
@@ -1455,7 +1478,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
0),
|
|
0),
|
|
ATOM_DEVICE_DFP1_SUPPORT);
|
|
ATOM_DEVICE_DFP1_SUPPORT);
|
|
radeon_add_legacy_connector(dev, 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 */
|
|
/* VGA - tv dac */
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_add_legacy_encoder(dev,
|
|
@@ -1464,7 +1488,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
2),
|
|
2),
|
|
ATOM_DEVICE_CRT2_SUPPORT);
|
|
ATOM_DEVICE_CRT2_SUPPORT);
|
|
radeon_add_legacy_connector(dev, 1, 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 */
|
|
/* TV - TV DAC */
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_get_encoder_id(dev,
|
|
radeon_get_encoder_id(dev,
|
|
@@ -1473,7 +1498,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
ATOM_DEVICE_TV1_SUPPORT);
|
|
ATOM_DEVICE_TV1_SUPPORT);
|
|
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
|
|
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO);
|
|
break;
|
|
break;
|
|
case CT_EMAC:
|
|
case CT_EMAC:
|
|
DRM_INFO("Connector Table: %d (emac)\n",
|
|
DRM_INFO("Connector Table: %d (emac)\n",
|
|
@@ -1486,7 +1512,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
1),
|
|
1),
|
|
ATOM_DEVICE_CRT1_SUPPORT);
|
|
ATOM_DEVICE_CRT1_SUPPORT);
|
|
radeon_add_legacy_connector(dev, 0, 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 */
|
|
/* VGA - tv dac */
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_CRT2_DDC);
|
|
ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_CRT2_DDC);
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_add_legacy_encoder(dev,
|
|
@@ -1495,7 +1522,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
2),
|
|
2),
|
|
ATOM_DEVICE_CRT2_SUPPORT);
|
|
ATOM_DEVICE_CRT2_SUPPORT);
|
|
radeon_add_legacy_connector(dev, 1, 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 */
|
|
/* TV - TV DAC */
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_get_encoder_id(dev,
|
|
radeon_get_encoder_id(dev,
|
|
@@ -1504,7 +1532,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
ATOM_DEVICE_TV1_SUPPORT);
|
|
ATOM_DEVICE_TV1_SUPPORT);
|
|
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
|
|
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO);
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
DRM_INFO("Connector table: %d (invalid)\n",
|
|
DRM_INFO("Connector table: %d (invalid)\n",
|
|
@@ -1581,11 +1610,63 @@ static bool radeon_apply_legacy_quirks(struct drm_device *dev,
|
|
return true;
|
|
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)
|
|
bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
{
|
|
{
|
|
struct radeon_device *rdev = dev->dev_private;
|
|
struct radeon_device *rdev = dev->dev_private;
|
|
uint32_t conn_info, entry, devices;
|
|
uint32_t conn_info, entry, devices;
|
|
- uint16_t tmp;
|
|
|
|
|
|
+ uint16_t tmp, connector_object_id;
|
|
enum radeon_combios_ddc ddc_type;
|
|
enum radeon_combios_ddc ddc_type;
|
|
enum radeon_combios_connector connector;
|
|
enum radeon_combios_connector connector;
|
|
int i = 0;
|
|
int i = 0;
|
|
@@ -1628,8 +1709,9 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
- radeon_apply_legacy_quirks(dev, i, &connector,
|
|
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ if (!radeon_apply_legacy_quirks(dev, i, &connector,
|
|
|
|
+ &ddc_i2c))
|
|
|
|
+ continue;
|
|
|
|
|
|
switch (connector) {
|
|
switch (connector) {
|
|
case CONNECTOR_PROPRIETARY_LEGACY:
|
|
case CONNECTOR_PROPRIETARY_LEGACY:
|
|
@@ -1644,7 +1726,8 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
radeon_add_legacy_connector(dev, i, devices,
|
|
radeon_add_legacy_connector(dev, i, devices,
|
|
legacy_connector_convert
|
|
legacy_connector_convert
|
|
[connector],
|
|
[connector],
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D);
|
|
break;
|
|
break;
|
|
case CONNECTOR_CRT_LEGACY:
|
|
case CONNECTOR_CRT_LEGACY:
|
|
if (tmp & 0x1) {
|
|
if (tmp & 0x1) {
|
|
@@ -1669,7 +1752,8 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
devices,
|
|
devices,
|
|
legacy_connector_convert
|
|
legacy_connector_convert
|
|
[connector],
|
|
[connector],
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_VGA);
|
|
break;
|
|
break;
|
|
case CONNECTOR_DVI_I_LEGACY:
|
|
case CONNECTOR_DVI_I_LEGACY:
|
|
devices = 0;
|
|
devices = 0;
|
|
@@ -1698,6 +1782,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
ATOM_DEVICE_DFP2_SUPPORT,
|
|
ATOM_DEVICE_DFP2_SUPPORT,
|
|
0),
|
|
0),
|
|
ATOM_DEVICE_DFP2_SUPPORT);
|
|
ATOM_DEVICE_DFP2_SUPPORT);
|
|
|
|
+ connector_object_id = combios_check_dl_dvi(dev, 0);
|
|
} else {
|
|
} else {
|
|
devices |= ATOM_DEVICE_DFP1_SUPPORT;
|
|
devices |= ATOM_DEVICE_DFP1_SUPPORT;
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_add_legacy_encoder(dev,
|
|
@@ -1706,19 +1791,24 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
ATOM_DEVICE_DFP1_SUPPORT,
|
|
ATOM_DEVICE_DFP1_SUPPORT,
|
|
0),
|
|
0),
|
|
ATOM_DEVICE_DFP1_SUPPORT);
|
|
ATOM_DEVICE_DFP1_SUPPORT);
|
|
|
|
+ connector_object_id = CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I;
|
|
}
|
|
}
|
|
radeon_add_legacy_connector(dev,
|
|
radeon_add_legacy_connector(dev,
|
|
i,
|
|
i,
|
|
devices,
|
|
devices,
|
|
legacy_connector_convert
|
|
legacy_connector_convert
|
|
[connector],
|
|
[connector],
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ connector_object_id);
|
|
break;
|
|
break;
|
|
case CONNECTOR_DVI_D_LEGACY:
|
|
case CONNECTOR_DVI_D_LEGACY:
|
|
- if ((tmp >> 4) & 0x1)
|
|
|
|
|
|
+ if ((tmp >> 4) & 0x1) {
|
|
devices = ATOM_DEVICE_DFP2_SUPPORT;
|
|
devices = ATOM_DEVICE_DFP2_SUPPORT;
|
|
- else
|
|
|
|
|
|
+ connector_object_id = combios_check_dl_dvi(dev, 1);
|
|
|
|
+ } else {
|
|
devices = ATOM_DEVICE_DFP1_SUPPORT;
|
|
devices = ATOM_DEVICE_DFP1_SUPPORT;
|
|
|
|
+ connector_object_id = CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I;
|
|
|
|
+ }
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_add_legacy_encoder(dev,
|
|
radeon_get_encoder_id
|
|
radeon_get_encoder_id
|
|
(dev, devices, 0),
|
|
(dev, devices, 0),
|
|
@@ -1726,7 +1816,8 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
radeon_add_legacy_connector(dev, i, devices,
|
|
radeon_add_legacy_connector(dev, i, devices,
|
|
legacy_connector_convert
|
|
legacy_connector_convert
|
|
[connector],
|
|
[connector],
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ connector_object_id);
|
|
break;
|
|
break;
|
|
case CONNECTOR_CTV_LEGACY:
|
|
case CONNECTOR_CTV_LEGACY:
|
|
case CONNECTOR_STV_LEGACY:
|
|
case CONNECTOR_STV_LEGACY:
|
|
@@ -1740,7 +1831,8 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
ATOM_DEVICE_TV1_SUPPORT,
|
|
ATOM_DEVICE_TV1_SUPPORT,
|
|
legacy_connector_convert
|
|
legacy_connector_convert
|
|
[connector],
|
|
[connector],
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO);
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
DRM_ERROR("Unknown connector type: %d\n",
|
|
DRM_ERROR("Unknown connector type: %d\n",
|
|
@@ -1772,10 +1864,29 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
ATOM_DEVICE_CRT1_SUPPORT |
|
|
ATOM_DEVICE_CRT1_SUPPORT |
|
|
ATOM_DEVICE_DFP1_SUPPORT,
|
|
ATOM_DEVICE_DFP1_SUPPORT,
|
|
DRM_MODE_CONNECTOR_DVII,
|
|
DRM_MODE_CONNECTOR_DVII,
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I);
|
|
} else {
|
|
} else {
|
|
- DRM_DEBUG("No connector info found\n");
|
|
|
|
- return false;
|
|
|
|
|
|
+ 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;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1870,7 +1981,8 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
5,
|
|
5,
|
|
ATOM_DEVICE_LCD1_SUPPORT,
|
|
ATOM_DEVICE_LCD1_SUPPORT,
|
|
DRM_MODE_CONNECTOR_LVDS,
|
|
DRM_MODE_CONNECTOR_LVDS,
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_LVDS);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1880,16 +1992,19 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
combios_get_table_offset(dev, COMBIOS_TV_INFO_TABLE);
|
|
combios_get_table_offset(dev, COMBIOS_TV_INFO_TABLE);
|
|
if (tv_info) {
|
|
if (tv_info) {
|
|
if (RBIOS8(tv_info + 6) == 'T') {
|
|
if (RBIOS8(tv_info + 6) == 'T') {
|
|
- radeon_add_legacy_encoder(dev,
|
|
|
|
- radeon_get_encoder_id
|
|
|
|
- (dev,
|
|
|
|
- ATOM_DEVICE_TV1_SUPPORT,
|
|
|
|
- 2),
|
|
|
|
- ATOM_DEVICE_TV1_SUPPORT);
|
|
|
|
- radeon_add_legacy_connector(dev, 6,
|
|
|
|
- ATOM_DEVICE_TV1_SUPPORT,
|
|
|
|
- DRM_MODE_CONNECTOR_SVIDEO,
|
|
|
|
- &ddc_i2c);
|
|
|
|
|
|
+ if (radeon_apply_legacy_tv_quirks(dev)) {
|
|
|
|
+ radeon_add_legacy_encoder(dev,
|
|
|
|
+ radeon_get_encoder_id
|
|
|
|
+ (dev,
|
|
|
|
+ ATOM_DEVICE_TV1_SUPPORT,
|
|
|
|
+ 2),
|
|
|
|
+ ATOM_DEVICE_TV1_SUPPORT);
|
|
|
|
+ radeon_add_legacy_connector(dev, 6,
|
|
|
|
+ ATOM_DEVICE_TV1_SUPPORT,
|
|
|
|
+ DRM_MODE_CONNECTOR_SVIDEO,
|
|
|
|
+ &ddc_i2c,
|
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|