Add additional quirks from ddx

main
Alex Deucher 2008-08-12 15:33:20 -04:00 committed by Dave Airlie
parent a1f1202470
commit 9b79d356c1
1 changed files with 30 additions and 6 deletions

View File

@ -558,16 +558,31 @@ static void radeon_apply_legacy_quirks(struct drm_device *dev, int bios_index)
struct drm_radeon_private *dev_priv = dev->dev_private;
struct radeon_mode_info *mode_info = &dev_priv->mode_info;
/* on XPRESS chips, CRT2_DDC and MONID_DCC both use the
* MONID gpio, but use different pins.
* CRT2_DDC uses the standard pinout, MONID_DDC uses
* something else.
*/
/* XPRESS DDC quirks */
if ((dev_priv->chip_family == CHIP_RS400 ||
dev_priv->chip_family == CHIP_RS480) &&
mode_info->bios_connector[bios_index].connector_type == CONNECTOR_VGA &&
mode_info->bios_connector[bios_index].ddc_i2c.mask_clk_reg == RADEON_GPIO_CRT2_DDC) {
mode_info->bios_connector[bios_index].ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_MONID);
} else if ((dev_priv->chip_family == CHIP_RS400 ||
dev_priv->chip_family == CHIP_RS480) &&
mode_info->bios_connector[bios_index].ddc_i2c.mask_clk_reg == RADEON_GPIO_MONID) {
mode_info->bios_connector[bios_index].ddc_i2c.valid = true;
mode_info->bios_connector[bios_index].ddc_i2c.mask_clk_mask = (0x20 << 8);
mode_info->bios_connector[bios_index].ddc_i2c.mask_data_mask = 0x80;
mode_info->bios_connector[bios_index].ddc_i2c.a_clk_mask = (0x20 << 8);
mode_info->bios_connector[bios_index].ddc_i2c.a_data_mask = 0x80;
mode_info->bios_connector[bios_index].ddc_i2c.put_clk_mask = (0x20 << 8);
mode_info->bios_connector[bios_index].ddc_i2c.put_data_mask = 0x80;
mode_info->bios_connector[bios_index].ddc_i2c.get_clk_mask = (0x20 << 8);
mode_info->bios_connector[bios_index].ddc_i2c.get_data_mask = 0x80;
mode_info->bios_connector[bios_index].ddc_i2c.mask_clk_reg = RADEON_GPIOPAD_MASK;
mode_info->bios_connector[bios_index].ddc_i2c.mask_data_reg = RADEON_GPIOPAD_MASK;
mode_info->bios_connector[bios_index].ddc_i2c.a_clk_reg = RADEON_GPIOPAD_A;
mode_info->bios_connector[bios_index].ddc_i2c.a_data_reg = RADEON_GPIOPAD_A;
mode_info->bios_connector[bios_index].ddc_i2c.put_clk_reg = RADEON_GPIOPAD_EN;
mode_info->bios_connector[bios_index].ddc_i2c.put_data_reg = RADEON_GPIOPAD_EN;
mode_info->bios_connector[bios_index].ddc_i2c.get_clk_reg = RADEON_LCD_GPIO_Y_REG;
mode_info->bios_connector[bios_index].ddc_i2c.get_data_reg = RADEON_LCD_GPIO_Y_REG;
}
/* Certain IBM chipset RN50s have a BIOS reporting two VGAs,
@ -589,6 +604,15 @@ static void radeon_apply_legacy_quirks(struct drm_device *dev, int bios_index)
}
/* X300 card with extra non-existent DVI port */
if (dev->pdev->device == 0x5B60 &&
dev->pdev->subsystem_vendor == 0x17af &&
dev->pdev->subsystem_device == 0x201e &&
bios_index == 2) {
if (mode_info->bios_connector[bios_index].connector_type == CONNECTOR_DVI_I)
mode_info->bios_connector[bios_index].valid = false;
}
}
bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)