|
@@ -50,7 +50,8 @@ radeon_add_legacy_connector(struct drm_device *dev,
|
|
|
uint32_t supported_device,
|
|
|
int connector_type,
|
|
|
struct radeon_i2c_bus_rec *i2c_bus,
|
|
|
- uint16_t connector_object_id);
|
|
|
+ uint16_t connector_object_id,
|
|
|
+ struct radeon_hpd *hpd);
|
|
|
|
|
|
/* from radeon_legacy_encoder.c */
|
|
|
extern void
|
|
@@ -442,29 +443,39 @@ static uint16_t combios_get_table_offset(struct drm_device *dev,
|
|
|
|
|
|
}
|
|
|
|
|
|
-struct radeon_i2c_bus_rec combios_setup_i2c_bus(int ddc_line)
|
|
|
+static struct radeon_i2c_bus_rec combios_setup_i2c_bus(struct radeon_device *rdev,
|
|
|
+ int ddc_line)
|
|
|
{
|
|
|
struct radeon_i2c_bus_rec i2c;
|
|
|
|
|
|
- i2c.mask_clk_mask = RADEON_GPIO_EN_1;
|
|
|
- i2c.mask_data_mask = RADEON_GPIO_EN_0;
|
|
|
- i2c.a_clk_mask = RADEON_GPIO_A_1;
|
|
|
- i2c.a_data_mask = RADEON_GPIO_A_0;
|
|
|
- i2c.en_clk_mask = RADEON_GPIO_EN_1;
|
|
|
- i2c.en_data_mask = RADEON_GPIO_EN_0;
|
|
|
- i2c.y_clk_mask = RADEON_GPIO_Y_1;
|
|
|
- i2c.y_data_mask = RADEON_GPIO_Y_0;
|
|
|
- if ((ddc_line == RADEON_LCD_GPIO_MASK) ||
|
|
|
- (ddc_line == RADEON_MDGPIO_EN_REG)) {
|
|
|
- i2c.mask_clk_reg = ddc_line;
|
|
|
- i2c.mask_data_reg = ddc_line;
|
|
|
- i2c.a_clk_reg = ddc_line;
|
|
|
- i2c.a_data_reg = ddc_line;
|
|
|
- i2c.en_clk_reg = ddc_line;
|
|
|
- i2c.en_data_reg = ddc_line;
|
|
|
- i2c.y_clk_reg = ddc_line + 4;
|
|
|
- i2c.y_data_reg = ddc_line + 4;
|
|
|
+ if (ddc_line == RADEON_GPIOPAD_MASK) {
|
|
|
+ i2c.mask_clk_reg = RADEON_GPIOPAD_MASK;
|
|
|
+ i2c.mask_data_reg = RADEON_GPIOPAD_MASK;
|
|
|
+ i2c.a_clk_reg = RADEON_GPIOPAD_A;
|
|
|
+ i2c.a_data_reg = RADEON_GPIOPAD_A;
|
|
|
+ i2c.en_clk_reg = RADEON_GPIOPAD_EN;
|
|
|
+ i2c.en_data_reg = RADEON_GPIOPAD_EN;
|
|
|
+ i2c.y_clk_reg = RADEON_GPIOPAD_Y;
|
|
|
+ i2c.y_data_reg = RADEON_GPIOPAD_Y;
|
|
|
+ } else if (ddc_line == RADEON_MDGPIO_MASK) {
|
|
|
+ i2c.mask_clk_reg = RADEON_MDGPIO_MASK;
|
|
|
+ i2c.mask_data_reg = RADEON_MDGPIO_MASK;
|
|
|
+ i2c.a_clk_reg = RADEON_MDGPIO_A;
|
|
|
+ i2c.a_data_reg = RADEON_MDGPIO_A;
|
|
|
+ i2c.en_clk_reg = RADEON_MDGPIO_EN;
|
|
|
+ i2c.en_data_reg = RADEON_MDGPIO_EN;
|
|
|
+ i2c.y_clk_reg = RADEON_MDGPIO_Y;
|
|
|
+ i2c.y_data_reg = RADEON_MDGPIO_Y;
|
|
|
} else {
|
|
|
+ i2c.mask_clk_mask = RADEON_GPIO_EN_1;
|
|
|
+ i2c.mask_data_mask = RADEON_GPIO_EN_0;
|
|
|
+ i2c.a_clk_mask = RADEON_GPIO_A_1;
|
|
|
+ i2c.a_data_mask = RADEON_GPIO_A_0;
|
|
|
+ i2c.en_clk_mask = RADEON_GPIO_EN_1;
|
|
|
+ i2c.en_data_mask = RADEON_GPIO_EN_0;
|
|
|
+ i2c.y_clk_mask = RADEON_GPIO_Y_1;
|
|
|
+ i2c.y_data_mask = RADEON_GPIO_Y_0;
|
|
|
+
|
|
|
i2c.mask_clk_reg = ddc_line;
|
|
|
i2c.mask_data_reg = ddc_line;
|
|
|
i2c.a_clk_reg = ddc_line;
|
|
@@ -475,6 +486,28 @@ struct radeon_i2c_bus_rec combios_setup_i2c_bus(int ddc_line)
|
|
|
i2c.y_data_reg = ddc_line;
|
|
|
}
|
|
|
|
|
|
+ if (rdev->family < CHIP_R200)
|
|
|
+ i2c.hw_capable = false;
|
|
|
+ else {
|
|
|
+ switch (ddc_line) {
|
|
|
+ case RADEON_GPIO_VGA_DDC:
|
|
|
+ case RADEON_GPIO_DVI_DDC:
|
|
|
+ i2c.hw_capable = true;
|
|
|
+ break;
|
|
|
+ case RADEON_GPIO_MONID:
|
|
|
+ /* hw i2c on RADEON_GPIO_MONID doesn't seem to work
|
|
|
+ * reliably on some pre-r4xx hardware; not sure why.
|
|
|
+ */
|
|
|
+ i2c.hw_capable = false;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ i2c.hw_capable = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ i2c.mm_i2c = false;
|
|
|
+ i2c.i2c_id = 0;
|
|
|
+
|
|
|
if (ddc_line)
|
|
|
i2c.valid = true;
|
|
|
else
|
|
@@ -1077,7 +1110,7 @@ bool radeon_legacy_get_ext_tmds_info_from_table(struct radeon_encoder *encoder,
|
|
|
struct radeon_i2c_bus_rec i2c_bus;
|
|
|
|
|
|
/* default for macs */
|
|
|
- i2c_bus = combios_setup_i2c_bus(RADEON_GPIO_MONID);
|
|
|
+ i2c_bus = combios_setup_i2c_bus(rdev, RADEON_GPIO_MONID);
|
|
|
tmds->i2c_bus = radeon_i2c_create(dev, &i2c_bus, "DVO");
|
|
|
|
|
|
/* XXX some macs have duallink chips */
|
|
@@ -1153,23 +1186,23 @@ bool radeon_legacy_get_ext_tmds_info_from_combios(struct radeon_encoder *encoder
|
|
|
gpio = RBIOS8(offset + 4 + 3);
|
|
|
switch (gpio) {
|
|
|
case DDC_MONID:
|
|
|
- i2c_bus = combios_setup_i2c_bus(RADEON_GPIO_MONID);
|
|
|
+ i2c_bus = combios_setup_i2c_bus(rdev, RADEON_GPIO_MONID);
|
|
|
tmds->i2c_bus = radeon_i2c_create(dev, &i2c_bus, "DVO");
|
|
|
break;
|
|
|
case DDC_DVI:
|
|
|
- i2c_bus = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
|
|
|
+ i2c_bus = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC);
|
|
|
tmds->i2c_bus = radeon_i2c_create(dev, &i2c_bus, "DVO");
|
|
|
break;
|
|
|
case DDC_VGA:
|
|
|
- i2c_bus = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
|
+ i2c_bus = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
|
|
|
tmds->i2c_bus = radeon_i2c_create(dev, &i2c_bus, "DVO");
|
|
|
break;
|
|
|
case DDC_CRT2:
|
|
|
/* R3xx+ chips don't have GPIO_CRT2_DDC gpio pad */
|
|
|
if (rdev->family >= CHIP_R300)
|
|
|
- i2c_bus = combios_setup_i2c_bus(RADEON_GPIO_MONID);
|
|
|
+ i2c_bus = combios_setup_i2c_bus(rdev, RADEON_GPIO_MONID);
|
|
|
else
|
|
|
- i2c_bus = combios_setup_i2c_bus(RADEON_GPIO_CRT2_DDC);
|
|
|
+ i2c_bus = combios_setup_i2c_bus(rdev, RADEON_GPIO_CRT2_DDC);
|
|
|
tmds->i2c_bus = radeon_i2c_create(dev, &i2c_bus, "DVO");
|
|
|
break;
|
|
|
case DDC_LCD: /* MM i2c */
|
|
@@ -1194,6 +1227,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
{
|
|
|
struct radeon_device *rdev = dev->dev_private;
|
|
|
struct radeon_i2c_bus_rec ddc_i2c;
|
|
|
+ struct radeon_hpd hpd;
|
|
|
|
|
|
rdev->mode_info.connector_table = radeon_connector_table;
|
|
|
if (rdev->mode_info.connector_table == CT_NONE) {
|
|
@@ -1254,7 +1288,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
/* these are the most common settings */
|
|
|
if (rdev->flags & RADEON_SINGLE_CRTC) {
|
|
|
/* VGA - primary dac */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
@@ -1264,10 +1299,12 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_VGA,
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_VGA);
|
|
|
+ CONNECTOR_OBJECT_ID_VGA,
|
|
|
+ &hpd);
|
|
|
} else if (rdev->flags & RADEON_IS_MOBILITY) {
|
|
|
/* LVDS */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_LCD_GPIO_MASK);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, 0);
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_LCD1_SUPPORT,
|
|
@@ -1277,10 +1314,12 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_LCD1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_LVDS,
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_LVDS);
|
|
|
+ CONNECTOR_OBJECT_ID_LVDS,
|
|
|
+ &hpd);
|
|
|
|
|
|
/* VGA - primary dac */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
@@ -1290,10 +1329,12 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_VGA,
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_VGA);
|
|
|
+ CONNECTOR_OBJECT_ID_VGA,
|
|
|
+ &hpd);
|
|
|
} else {
|
|
|
/* DVI-I - tv dac, int tmds */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_1;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_DFP1_SUPPORT,
|
|
@@ -1309,10 +1350,12 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_CRT2_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_DVII,
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I);
|
|
|
+ CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I,
|
|
|
+ &hpd);
|
|
|
|
|
|
/* VGA - primary dac */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
@@ -1322,11 +1365,14 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_VGA,
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_VGA);
|
|
|
+ CONNECTOR_OBJECT_ID_VGA,
|
|
|
+ &hpd);
|
|
|
}
|
|
|
|
|
|
if (rdev->family != CHIP_R100 && rdev->family != CHIP_R200) {
|
|
|
/* TV - tv dac */
|
|
|
+ ddc_i2c.valid = false;
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_TV1_SUPPORT,
|
|
@@ -1336,14 +1382,16 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_TV1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_SVIDEO);
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO,
|
|
|
+ &hpd);
|
|
|
}
|
|
|
break;
|
|
|
case CT_IBOOK:
|
|
|
DRM_INFO("Connector Table: %d (ibook)\n",
|
|
|
rdev->mode_info.connector_table);
|
|
|
/* LVDS */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_LCD1_SUPPORT,
|
|
@@ -1351,9 +1399,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_LCD1_SUPPORT);
|
|
|
radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_LVDS, &ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_LVDS);
|
|
|
+ CONNECTOR_OBJECT_ID_LVDS,
|
|
|
+ &hpd);
|
|
|
/* VGA - TV DAC */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_CRT2_SUPPORT,
|
|
@@ -1361,8 +1411,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_CRT2_SUPPORT);
|
|
|
radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_VGA, &ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_VGA);
|
|
|
+ CONNECTOR_OBJECT_ID_VGA,
|
|
|
+ &hpd);
|
|
|
/* TV - TV DAC */
|
|
|
+ ddc_i2c.valid = false;
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_TV1_SUPPORT,
|
|
@@ -1371,13 +1424,15 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_SVIDEO);
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO,
|
|
|
+ &hpd);
|
|
|
break;
|
|
|
case CT_POWERBOOK_EXTERNAL:
|
|
|
DRM_INFO("Connector Table: %d (powerbook external tmds)\n",
|
|
|
rdev->mode_info.connector_table);
|
|
|
/* LVDS */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_LCD1_SUPPORT,
|
|
@@ -1385,9 +1440,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_LCD1_SUPPORT);
|
|
|
radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_LVDS, &ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_LVDS);
|
|
|
+ CONNECTOR_OBJECT_ID_LVDS,
|
|
|
+ &hpd);
|
|
|
/* DVI-I - primary dac, ext tmds */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_2; /* ??? */
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_DFP2_SUPPORT,
|
|
@@ -1403,8 +1460,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_DFP2_SUPPORT |
|
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_DVII, &ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I);
|
|
|
+ CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I,
|
|
|
+ &hpd);
|
|
|
/* TV - TV DAC */
|
|
|
+ ddc_i2c.valid = false;
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_TV1_SUPPORT,
|
|
@@ -1413,13 +1473,15 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_SVIDEO);
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO,
|
|
|
+ &hpd);
|
|
|
break;
|
|
|
case CT_POWERBOOK_INTERNAL:
|
|
|
DRM_INFO("Connector Table: %d (powerbook internal tmds)\n",
|
|
|
rdev->mode_info.connector_table);
|
|
|
/* LVDS */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_LCD1_SUPPORT,
|
|
@@ -1427,9 +1489,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_LCD1_SUPPORT);
|
|
|
radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_LVDS, &ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_LVDS);
|
|
|
+ CONNECTOR_OBJECT_ID_LVDS,
|
|
|
+ &hpd);
|
|
|
/* DVI-I - primary dac, int tmds */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_1; /* ??? */
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_DFP1_SUPPORT,
|
|
@@ -1444,8 +1508,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_DFP1_SUPPORT |
|
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_DVII, &ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I);
|
|
|
+ CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I,
|
|
|
+ &hpd);
|
|
|
/* TV - TV DAC */
|
|
|
+ ddc_i2c.valid = false;
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_TV1_SUPPORT,
|
|
@@ -1454,13 +1521,15 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_SVIDEO);
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO,
|
|
|
+ &hpd);
|
|
|
break;
|
|
|
case CT_POWERBOOK_VGA:
|
|
|
DRM_INFO("Connector Table: %d (powerbook vga)\n",
|
|
|
rdev->mode_info.connector_table);
|
|
|
/* LVDS */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_LCD1_SUPPORT,
|
|
@@ -1468,9 +1537,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_LCD1_SUPPORT);
|
|
|
radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_LVDS, &ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_LVDS);
|
|
|
+ CONNECTOR_OBJECT_ID_LVDS,
|
|
|
+ &hpd);
|
|
|
/* VGA - primary dac */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
@@ -1478,8 +1549,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_CRT1_SUPPORT);
|
|
|
radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_VGA, &ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_VGA);
|
|
|
+ CONNECTOR_OBJECT_ID_VGA,
|
|
|
+ &hpd);
|
|
|
/* TV - TV DAC */
|
|
|
+ ddc_i2c.valid = false;
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_TV1_SUPPORT,
|
|
@@ -1488,13 +1562,15 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_SVIDEO);
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO,
|
|
|
+ &hpd);
|
|
|
break;
|
|
|
case CT_MINI_EXTERNAL:
|
|
|
DRM_INFO("Connector Table: %d (mini external tmds)\n",
|
|
|
rdev->mode_info.connector_table);
|
|
|
/* DVI-I - tv dac, ext tmds */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_CRT2_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_CRT2_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_2; /* ??? */
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_DFP2_SUPPORT,
|
|
@@ -1510,8 +1586,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_DFP2_SUPPORT |
|
|
|
ATOM_DEVICE_CRT2_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_DVII, &ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I);
|
|
|
+ CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I,
|
|
|
+ &hpd);
|
|
|
/* TV - TV DAC */
|
|
|
+ ddc_i2c.valid = false;
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_TV1_SUPPORT,
|
|
@@ -1520,13 +1599,15 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_TV1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_SVIDEO);
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO,
|
|
|
+ &hpd);
|
|
|
break;
|
|
|
case CT_MINI_INTERNAL:
|
|
|
DRM_INFO("Connector Table: %d (mini internal tmds)\n",
|
|
|
rdev->mode_info.connector_table);
|
|
|
/* DVI-I - tv dac, int tmds */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_CRT2_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_CRT2_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_1; /* ??? */
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_DFP1_SUPPORT,
|
|
@@ -1541,8 +1622,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_DFP1_SUPPORT |
|
|
|
ATOM_DEVICE_CRT2_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_DVII, &ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I);
|
|
|
+ CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I,
|
|
|
+ &hpd);
|
|
|
/* TV - TV DAC */
|
|
|
+ ddc_i2c.valid = false;
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_TV1_SUPPORT,
|
|
@@ -1551,13 +1635,15 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_TV1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_SVIDEO);
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO,
|
|
|
+ &hpd);
|
|
|
break;
|
|
|
case CT_IMAC_G5_ISIGHT:
|
|
|
DRM_INFO("Connector Table: %d (imac g5 isight)\n",
|
|
|
rdev->mode_info.connector_table);
|
|
|
/* DVI-D - int tmds */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_MONID);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_MONID);
|
|
|
+ hpd.hpd = RADEON_HPD_1; /* ??? */
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_DFP1_SUPPORT,
|
|
@@ -1565,9 +1651,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_DFP1_SUPPORT);
|
|
|
radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_DFP1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_DVID, &ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D);
|
|
|
+ CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D,
|
|
|
+ &hpd);
|
|
|
/* VGA - tv dac */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_CRT2_SUPPORT,
|
|
@@ -1575,8 +1663,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_CRT2_SUPPORT);
|
|
|
radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_VGA, &ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_VGA);
|
|
|
+ CONNECTOR_OBJECT_ID_VGA,
|
|
|
+ &hpd);
|
|
|
/* TV - TV DAC */
|
|
|
+ ddc_i2c.valid = false;
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_TV1_SUPPORT,
|
|
@@ -1585,13 +1676,15 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_SVIDEO);
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO,
|
|
|
+ &hpd);
|
|
|
break;
|
|
|
case CT_EMAC:
|
|
|
DRM_INFO("Connector Table: %d (emac)\n",
|
|
|
rdev->mode_info.connector_table);
|
|
|
/* VGA - primary dac */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
@@ -1599,9 +1692,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_CRT1_SUPPORT);
|
|
|
radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_CRT1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_VGA, &ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_VGA);
|
|
|
+ CONNECTOR_OBJECT_ID_VGA,
|
|
|
+ &hpd);
|
|
|
/* VGA - tv dac */
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_CRT2_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_CRT2_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_CRT2_SUPPORT,
|
|
@@ -1609,8 +1704,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
ATOM_DEVICE_CRT2_SUPPORT);
|
|
|
radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_VGA, &ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_VGA);
|
|
|
+ CONNECTOR_OBJECT_ID_VGA,
|
|
|
+ &hpd);
|
|
|
/* TV - TV DAC */
|
|
|
+ ddc_i2c.valid = false;
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id(dev,
|
|
|
ATOM_DEVICE_TV1_SUPPORT,
|
|
@@ -1619,7 +1717,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|
|
radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_SVIDEO);
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO,
|
|
|
+ &hpd);
|
|
|
break;
|
|
|
default:
|
|
|
DRM_INFO("Connector table: %d (invalid)\n",
|
|
@@ -1636,7 +1735,8 @@ static bool radeon_apply_legacy_quirks(struct drm_device *dev,
|
|
|
int bios_index,
|
|
|
enum radeon_combios_connector
|
|
|
*legacy_connector,
|
|
|
- struct radeon_i2c_bus_rec *ddc_i2c)
|
|
|
+ struct radeon_i2c_bus_rec *ddc_i2c,
|
|
|
+ struct radeon_hpd *hpd)
|
|
|
{
|
|
|
struct radeon_device *rdev = dev->dev_private;
|
|
|
|
|
@@ -1644,11 +1744,11 @@ static bool radeon_apply_legacy_quirks(struct drm_device *dev,
|
|
|
if ((rdev->family == CHIP_RS400 ||
|
|
|
rdev->family == CHIP_RS480) &&
|
|
|
ddc_i2c->mask_clk_reg == RADEON_GPIO_CRT2_DDC)
|
|
|
- *ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_MONID);
|
|
|
+ *ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_MONID);
|
|
|
else if ((rdev->family == CHIP_RS400 ||
|
|
|
rdev->family == CHIP_RS480) &&
|
|
|
ddc_i2c->mask_clk_reg == RADEON_GPIO_MONID) {
|
|
|
- ddc_i2c->valid = true;
|
|
|
+ *ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIOPAD_MASK);
|
|
|
ddc_i2c->mask_clk_mask = (0x20 << 8);
|
|
|
ddc_i2c->mask_data_mask = 0x80;
|
|
|
ddc_i2c->a_clk_mask = (0x20 << 8);
|
|
@@ -1657,20 +1757,12 @@ static bool radeon_apply_legacy_quirks(struct drm_device *dev,
|
|
|
ddc_i2c->en_data_mask = 0x80;
|
|
|
ddc_i2c->y_clk_mask = (0x20 << 8);
|
|
|
ddc_i2c->y_data_mask = 0x80;
|
|
|
- ddc_i2c->mask_clk_reg = RADEON_GPIOPAD_MASK;
|
|
|
- ddc_i2c->mask_data_reg = RADEON_GPIOPAD_MASK;
|
|
|
- ddc_i2c->a_clk_reg = RADEON_GPIOPAD_A;
|
|
|
- ddc_i2c->a_data_reg = RADEON_GPIOPAD_A;
|
|
|
- ddc_i2c->en_clk_reg = RADEON_GPIOPAD_EN;
|
|
|
- ddc_i2c->en_data_reg = RADEON_GPIOPAD_EN;
|
|
|
- ddc_i2c->y_clk_reg = RADEON_GPIOPAD_Y;
|
|
|
- ddc_i2c->y_data_reg = RADEON_GPIOPAD_Y;
|
|
|
}
|
|
|
|
|
|
/* R3xx+ chips don't have GPIO_CRT2_DDC gpio pad */
|
|
|
if ((rdev->family >= CHIP_R300) &&
|
|
|
ddc_i2c->mask_clk_reg == RADEON_GPIO_CRT2_DDC)
|
|
|
- *ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
|
|
|
+ *ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC);
|
|
|
|
|
|
/* Certain IBM chipset RN50s have a BIOS reporting two VGAs,
|
|
|
one with VGA DDC and one with CRT2 DDC. - kill the CRT2 DDC one */
|
|
@@ -1768,6 +1860,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
|
enum radeon_combios_connector connector;
|
|
|
int i = 0;
|
|
|
struct radeon_i2c_bus_rec ddc_i2c;
|
|
|
+ struct radeon_hpd hpd;
|
|
|
|
|
|
if (rdev->bios == NULL)
|
|
|
return false;
|
|
@@ -1788,26 +1881,40 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
|
switch (ddc_type) {
|
|
|
case DDC_MONID:
|
|
|
ddc_i2c =
|
|
|
- combios_setup_i2c_bus(RADEON_GPIO_MONID);
|
|
|
+ combios_setup_i2c_bus(rdev, RADEON_GPIO_MONID);
|
|
|
break;
|
|
|
case DDC_DVI:
|
|
|
ddc_i2c =
|
|
|
- combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
|
|
|
+ combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC);
|
|
|
break;
|
|
|
case DDC_VGA:
|
|
|
ddc_i2c =
|
|
|
- combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
|
+ combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
|
|
|
break;
|
|
|
case DDC_CRT2:
|
|
|
ddc_i2c =
|
|
|
- combios_setup_i2c_bus(RADEON_GPIO_CRT2_DDC);
|
|
|
+ combios_setup_i2c_bus(rdev, RADEON_GPIO_CRT2_DDC);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ switch (connector) {
|
|
|
+ case CONNECTOR_PROPRIETARY_LEGACY:
|
|
|
+ case CONNECTOR_DVI_I_LEGACY:
|
|
|
+ case CONNECTOR_DVI_D_LEGACY:
|
|
|
+ if ((tmp >> 4) & 0x1)
|
|
|
+ hpd.hpd = RADEON_HPD_2;
|
|
|
+ else
|
|
|
+ hpd.hpd = RADEON_HPD_1;
|
|
|
break;
|
|
|
default:
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if (!radeon_apply_legacy_quirks(dev, i, &connector,
|
|
|
- &ddc_i2c))
|
|
|
+ &ddc_i2c, &hpd))
|
|
|
continue;
|
|
|
|
|
|
switch (connector) {
|
|
@@ -1824,7 +1931,8 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
|
legacy_connector_convert
|
|
|
[connector],
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D);
|
|
|
+ CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D,
|
|
|
+ &hpd);
|
|
|
break;
|
|
|
case CONNECTOR_CRT_LEGACY:
|
|
|
if (tmp & 0x1) {
|
|
@@ -1850,7 +1958,8 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
|
legacy_connector_convert
|
|
|
[connector],
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_VGA);
|
|
|
+ CONNECTOR_OBJECT_ID_VGA,
|
|
|
+ &hpd);
|
|
|
break;
|
|
|
case CONNECTOR_DVI_I_LEGACY:
|
|
|
devices = 0;
|
|
@@ -1896,7 +2005,8 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
|
legacy_connector_convert
|
|
|
[connector],
|
|
|
&ddc_i2c,
|
|
|
- connector_object_id);
|
|
|
+ connector_object_id,
|
|
|
+ &hpd);
|
|
|
break;
|
|
|
case CONNECTOR_DVI_D_LEGACY:
|
|
|
if ((tmp >> 4) & 0x1) {
|
|
@@ -1914,7 +2024,8 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
|
legacy_connector_convert
|
|
|
[connector],
|
|
|
&ddc_i2c,
|
|
|
- connector_object_id);
|
|
|
+ connector_object_id,
|
|
|
+ &hpd);
|
|
|
break;
|
|
|
case CONNECTOR_CTV_LEGACY:
|
|
|
case CONNECTOR_STV_LEGACY:
|
|
@@ -1929,7 +2040,8 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
|
legacy_connector_convert
|
|
|
[connector],
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_SVIDEO);
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO,
|
|
|
+ &hpd);
|
|
|
break;
|
|
|
default:
|
|
|
DRM_ERROR("Unknown connector type: %d\n",
|
|
@@ -1955,14 +2067,16 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
|
0),
|
|
|
ATOM_DEVICE_DFP1_SUPPORT);
|
|
|
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_connector(dev,
|
|
|
0,
|
|
|
ATOM_DEVICE_CRT1_SUPPORT |
|
|
|
ATOM_DEVICE_DFP1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_DVII,
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I);
|
|
|
+ CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I,
|
|
|
+ &hpd);
|
|
|
} else {
|
|
|
uint16_t crt_info =
|
|
|
combios_get_table_offset(dev, COMBIOS_CRT_INFO_TABLE);
|
|
@@ -1973,13 +2087,15 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
|
1),
|
|
|
ATOM_DEVICE_CRT1_SUPPORT);
|
|
|
- ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
|
|
|
+ ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_connector(dev,
|
|
|
0,
|
|
|
ATOM_DEVICE_CRT1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_VGA,
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_VGA);
|
|
|
+ CONNECTOR_OBJECT_ID_VGA,
|
|
|
+ &hpd);
|
|
|
} else {
|
|
|
DRM_DEBUG("No connector info found\n");
|
|
|
return false;
|
|
@@ -2007,27 +2123,27 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
|
case DDC_MONID:
|
|
|
ddc_i2c =
|
|
|
combios_setup_i2c_bus
|
|
|
- (RADEON_GPIO_MONID);
|
|
|
+ (rdev, RADEON_GPIO_MONID);
|
|
|
break;
|
|
|
case DDC_DVI:
|
|
|
ddc_i2c =
|
|
|
combios_setup_i2c_bus
|
|
|
- (RADEON_GPIO_DVI_DDC);
|
|
|
+ (rdev, RADEON_GPIO_DVI_DDC);
|
|
|
break;
|
|
|
case DDC_VGA:
|
|
|
ddc_i2c =
|
|
|
combios_setup_i2c_bus
|
|
|
- (RADEON_GPIO_VGA_DDC);
|
|
|
+ (rdev, RADEON_GPIO_VGA_DDC);
|
|
|
break;
|
|
|
case DDC_CRT2:
|
|
|
ddc_i2c =
|
|
|
combios_setup_i2c_bus
|
|
|
- (RADEON_GPIO_CRT2_DDC);
|
|
|
+ (rdev, RADEON_GPIO_CRT2_DDC);
|
|
|
break;
|
|
|
case DDC_LCD:
|
|
|
ddc_i2c =
|
|
|
combios_setup_i2c_bus
|
|
|
- (RADEON_LCD_GPIO_MASK);
|
|
|
+ (rdev, RADEON_GPIOPAD_MASK);
|
|
|
ddc_i2c.mask_clk_mask =
|
|
|
RBIOS32(lcd_ddc_info + 3);
|
|
|
ddc_i2c.mask_data_mask =
|
|
@@ -2048,7 +2164,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
|
case DDC_GPIO:
|
|
|
ddc_i2c =
|
|
|
combios_setup_i2c_bus
|
|
|
- (RADEON_MDGPIO_EN_REG);
|
|
|
+ (rdev, RADEON_MDGPIO_MASK);
|
|
|
ddc_i2c.mask_clk_mask =
|
|
|
RBIOS32(lcd_ddc_info + 3);
|
|
|
ddc_i2c.mask_data_mask =
|
|
@@ -2074,12 +2190,14 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
|
} else
|
|
|
ddc_i2c.valid = false;
|
|
|
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_connector(dev,
|
|
|
5,
|
|
|
ATOM_DEVICE_LCD1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_LVDS,
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_LVDS);
|
|
|
+ CONNECTOR_OBJECT_ID_LVDS,
|
|
|
+ &hpd);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -2090,6 +2208,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
|
if (tv_info) {
|
|
|
if (RBIOS8(tv_info + 6) == 'T') {
|
|
|
if (radeon_apply_legacy_tv_quirks(dev)) {
|
|
|
+ hpd.hpd = RADEON_HPD_NONE;
|
|
|
radeon_add_legacy_encoder(dev,
|
|
|
radeon_get_encoder_id
|
|
|
(dev,
|
|
@@ -2100,7 +2219,8 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|
|
ATOM_DEVICE_TV1_SUPPORT,
|
|
|
DRM_MODE_CONNECTOR_SVIDEO,
|
|
|
&ddc_i2c,
|
|
|
- CONNECTOR_OBJECT_ID_SVIDEO);
|
|
|
+ CONNECTOR_OBJECT_ID_SVIDEO,
|
|
|
+ &hpd);
|
|
|
}
|
|
|
}
|
|
|
}
|