diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_combios.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_combios.c | 49 |
1 files changed, 40 insertions, 9 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c index 1bee2f9e24a5..d1c1d8dd93ce 100644 --- a/drivers/gpu/drm/radeon/radeon_combios.c +++ b/drivers/gpu/drm/radeon/radeon_combios.c | |||
| @@ -1411,6 +1411,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev) | |||
| 1411 | rdev->mode_info.connector_table = CT_IMAC_G5_ISIGHT; | 1411 | rdev->mode_info.connector_table = CT_IMAC_G5_ISIGHT; |
| 1412 | } else | 1412 | } else |
| 1413 | #endif /* CONFIG_PPC_PMAC */ | 1413 | #endif /* CONFIG_PPC_PMAC */ |
| 1414 | #ifdef CONFIG_PPC64 | ||
| 1415 | if (ASIC_IS_RN50(rdev)) | ||
| 1416 | rdev->mode_info.connector_table = CT_RN50_POWER; | ||
| 1417 | else | ||
| 1418 | #endif | ||
| 1414 | rdev->mode_info.connector_table = CT_GENERIC; | 1419 | rdev->mode_info.connector_table = CT_GENERIC; |
| 1415 | } | 1420 | } |
| 1416 | 1421 | ||
| @@ -1853,6 +1858,33 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev) | |||
| 1853 | CONNECTOR_OBJECT_ID_SVIDEO, | 1858 | CONNECTOR_OBJECT_ID_SVIDEO, |
| 1854 | &hpd); | 1859 | &hpd); |
| 1855 | break; | 1860 | break; |
| 1861 | case CT_RN50_POWER: | ||
| 1862 | DRM_INFO("Connector Table: %d (rn50-power)\n", | ||
| 1863 | rdev->mode_info.connector_table); | ||
| 1864 | /* VGA - primary dac */ | ||
| 1865 | ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC); | ||
| 1866 | hpd.hpd = RADEON_HPD_NONE; | ||
| 1867 | radeon_add_legacy_encoder(dev, | ||
| 1868 | radeon_get_encoder_id(dev, | ||
| 1869 | ATOM_DEVICE_CRT1_SUPPORT, | ||
| 1870 | 1), | ||
| 1871 | ATOM_DEVICE_CRT1_SUPPORT); | ||
| 1872 | radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_CRT1_SUPPORT, | ||
| 1873 | DRM_MODE_CONNECTOR_VGA, &ddc_i2c, | ||
| 1874 | CONNECTOR_OBJECT_ID_VGA, | ||
| 1875 | &hpd); | ||
| 1876 | ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_CRT2_DDC); | ||
| 1877 | hpd.hpd = RADEON_HPD_NONE; | ||
| 1878 | radeon_add_legacy_encoder(dev, | ||
| 1879 | radeon_get_encoder_id(dev, | ||
| 1880 | ATOM_DEVICE_CRT2_SUPPORT, | ||
| 1881 | 2), | ||
| 1882 | ATOM_DEVICE_CRT2_SUPPORT); | ||
| 1883 | radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT, | ||
| 1884 | DRM_MODE_CONNECTOR_VGA, &ddc_i2c, | ||
| 1885 | CONNECTOR_OBJECT_ID_VGA, | ||
| 1886 | &hpd); | ||
| 1887 | break; | ||
| 1856 | default: | 1888 | default: |
| 1857 | DRM_INFO("Connector table: %d (invalid)\n", | 1889 | DRM_INFO("Connector table: %d (invalid)\n", |
| 1858 | rdev->mode_info.connector_table); | 1890 | rdev->mode_info.connector_table); |
| @@ -1906,15 +1938,6 @@ static bool radeon_apply_legacy_quirks(struct drm_device *dev, | |||
| 1906 | return false; | 1938 | return false; |
| 1907 | } | 1939 | } |
| 1908 | 1940 | ||
| 1909 | /* Some RV100 cards with 2 VGA ports show up with DVI+VGA */ | ||
| 1910 | if (dev->pdev->device == 0x5159 && | ||
| 1911 | dev->pdev->subsystem_vendor == 0x1002 && | ||
| 1912 | dev->pdev->subsystem_device == 0x013a) { | ||
| 1913 | if (*legacy_connector == CONNECTOR_DVI_I_LEGACY) | ||
| 1914 | *legacy_connector = CONNECTOR_CRT_LEGACY; | ||
| 1915 | |||
| 1916 | } | ||
| 1917 | |||
| 1918 | /* X300 card with extra non-existent DVI port */ | 1941 | /* X300 card with extra non-existent DVI port */ |
| 1919 | if (dev->pdev->device == 0x5B60 && | 1942 | if (dev->pdev->device == 0x5B60 && |
| 1920 | dev->pdev->subsystem_vendor == 0x17af && | 1943 | dev->pdev->subsystem_vendor == 0x17af && |
| @@ -3019,6 +3042,14 @@ void radeon_combios_asic_init(struct drm_device *dev) | |||
| 3019 | combios_write_ram_size(dev); | 3042 | combios_write_ram_size(dev); |
| 3020 | } | 3043 | } |
| 3021 | 3044 | ||
| 3045 | /* quirk for rs4xx HP nx6125 laptop to make it resume | ||
| 3046 | * - it hangs on resume inside the dynclk 1 table. | ||
| 3047 | */ | ||
| 3048 | if (rdev->family == CHIP_RS480 && | ||
| 3049 | rdev->pdev->subsystem_vendor == 0x103c && | ||
| 3050 | rdev->pdev->subsystem_device == 0x308b) | ||
| 3051 | return; | ||
| 3052 | |||
| 3022 | /* DYN CLK 1 */ | 3053 | /* DYN CLK 1 */ |
| 3023 | table = combios_get_table_offset(dev, COMBIOS_DYN_CLK_1_TABLE); | 3054 | table = combios_get_table_offset(dev, COMBIOS_DYN_CLK_1_TABLE); |
| 3024 | if (table) | 3055 | if (table) |
