diff options
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_atombios.c | 72 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_combios.c | 7 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_legacy_encoders.c | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_mode.h | 4 |
4 files changed, 88 insertions, 3 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c index 98904de63874..786632d3e378 100644 --- a/drivers/gpu/drm/radeon/radeon_atombios.c +++ b/drivers/gpu/drm/radeon/radeon_atombios.c | |||
| @@ -824,6 +824,78 @@ struct radeon_encoder_atom_dig *radeon_atombios_get_lvds_info(struct | |||
| 824 | return lvds; | 824 | return lvds; |
| 825 | } | 825 | } |
| 826 | 826 | ||
| 827 | struct radeon_encoder_primary_dac * | ||
| 828 | radeon_atombios_get_primary_dac_info(struct radeon_encoder *encoder) | ||
| 829 | { | ||
| 830 | struct drm_device *dev = encoder->base.dev; | ||
| 831 | struct radeon_device *rdev = dev->dev_private; | ||
| 832 | struct radeon_mode_info *mode_info = &rdev->mode_info; | ||
| 833 | int index = GetIndexIntoMasterTable(DATA, CompassionateData); | ||
| 834 | uint16_t data_offset; | ||
| 835 | struct _COMPASSIONATE_DATA *dac_info; | ||
| 836 | uint8_t frev, crev; | ||
| 837 | uint8_t bg, dac; | ||
| 838 | int i; | ||
| 839 | struct radeon_encoder_primary_dac *p_dac = NULL; | ||
| 840 | |||
| 841 | atom_parse_data_header(mode_info->atom_context, index, NULL, &frev, &crev, &data_offset); | ||
| 842 | |||
| 843 | dac_info = (struct _COMPASSIONATE_DATA *)(mode_info->atom_context->bios + data_offset); | ||
| 844 | |||
| 845 | if (dac_info) { | ||
| 846 | p_dac = kzalloc(sizeof(struct radeon_encoder_primary_dac), GFP_KERNEL); | ||
| 847 | |||
| 848 | if (!p_dac) | ||
| 849 | return NULL; | ||
| 850 | |||
| 851 | bg = dac_info->ucDAC1_BG_Adjustment; | ||
| 852 | dac = dac_info->ucDAC1_DAC_Adjustment; | ||
| 853 | p_dac->ps2_pdac_adj = (bg << 8) | (dac); | ||
| 854 | |||
| 855 | } | ||
| 856 | return p_dac; | ||
| 857 | } | ||
| 858 | |||
| 859 | struct radeon_encoder_tv_dac * | ||
| 860 | radeon_atombios_get_tv_dac_info(struct radeon_encoder *encoder) | ||
| 861 | { | ||
| 862 | struct drm_device *dev = encoder->base.dev; | ||
| 863 | struct radeon_device *rdev = dev->dev_private; | ||
| 864 | struct radeon_mode_info *mode_info = &rdev->mode_info; | ||
| 865 | int index = GetIndexIntoMasterTable(DATA, CompassionateData); | ||
| 866 | uint16_t data_offset; | ||
| 867 | struct _COMPASSIONATE_DATA *dac_info; | ||
| 868 | uint8_t frev, crev; | ||
| 869 | uint8_t bg, dac; | ||
| 870 | int i; | ||
| 871 | struct radeon_encoder_tv_dac *tv_dac = NULL; | ||
| 872 | |||
| 873 | atom_parse_data_header(mode_info->atom_context, index, NULL, &frev, &crev, &data_offset); | ||
| 874 | |||
| 875 | dac_info = (struct _COMPASSIONATE_DATA *)(mode_info->atom_context->bios + data_offset); | ||
| 876 | |||
| 877 | if (dac_info) { | ||
| 878 | tv_dac = kzalloc(sizeof(struct radeon_encoder_tv_dac), GFP_KERNEL); | ||
| 879 | |||
| 880 | if (!tv_dac) | ||
| 881 | return NULL; | ||
| 882 | |||
| 883 | bg = dac_info->ucDAC2_CRT2_BG_Adjustment; | ||
| 884 | dac = dac_info->ucDAC2_CRT2_DAC_Adjustment; | ||
| 885 | tv_dac->ps2_tvdac_adj = (bg << 16) | (dac << 20); | ||
| 886 | |||
| 887 | bg = dac_info->ucDAC2_PAL_BG_Adjustment; | ||
| 888 | dac = dac_info->ucDAC2_PAL_DAC_Adjustment; | ||
| 889 | tv_dac->pal_tvdac_adj = (bg << 16) | (dac << 20); | ||
| 890 | |||
| 891 | bg = dac_info->ucDAC2_NTSC_BG_Adjustment; | ||
| 892 | dac = dac_info->ucDAC2_NTSC_DAC_Adjustment; | ||
| 893 | tv_dac->ntsc_tvdac_adj = (bg << 16) | (dac << 20); | ||
| 894 | |||
| 895 | } | ||
| 896 | return tv_dac; | ||
| 897 | } | ||
| 898 | |||
| 827 | void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable) | 899 | void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable) |
| 828 | { | 900 | { |
| 829 | DYNAMIC_CLOCK_GATING_PS_ALLOCATION args; | 901 | DYNAMIC_CLOCK_GATING_PS_ALLOCATION args; |
diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c index be52198fa56a..06e8038bc4ac 100644 --- a/drivers/gpu/drm/radeon/radeon_combios.c +++ b/drivers/gpu/drm/radeon/radeon_combios.c | |||
| @@ -783,6 +783,9 @@ struct radeon_encoder_tv_dac *radeon_combios_get_tv_dac_info(struct | |||
| 783 | tv_dac->pal_tvdac_adj = tv_dac->ps2_tvdac_adj; | 783 | tv_dac->pal_tvdac_adj = tv_dac->ps2_tvdac_adj; |
| 784 | tv_dac->ntsc_tvdac_adj = tv_dac->ps2_tvdac_adj; | 784 | tv_dac->ntsc_tvdac_adj = tv_dac->ps2_tvdac_adj; |
| 785 | } | 785 | } |
| 786 | } else { | ||
| 787 | DRM_INFO("No TV DAC info found in BIOS\n"); | ||
| 788 | return radeon_legacy_get_tv_dac_info_from_table(rdev); | ||
| 786 | } | 789 | } |
| 787 | } | 790 | } |
| 788 | 791 | ||
| @@ -964,8 +967,10 @@ struct radeon_encoder_lvds *radeon_combios_get_lvds_info(struct radeon_encoder | |||
| 964 | } | 967 | } |
| 965 | } | 968 | } |
| 966 | encoder->native_mode = lvds->native_mode; | 969 | encoder->native_mode = lvds->native_mode; |
| 967 | } else | 970 | } else { |
| 968 | DRM_INFO("No panel info found in BIOS\n"); | 971 | DRM_INFO("No panel info found in BIOS\n"); |
| 972 | return radeon_legacy_get_lvds_info_from_regs(rdev); | ||
| 973 | } | ||
| 969 | return lvds; | 974 | return lvds; |
| 970 | } | 975 | } |
| 971 | 976 | ||
diff --git a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c index c41ab0966f86..2c2f42de1d4c 100644 --- a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c +++ b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c | |||
| @@ -1265,13 +1265,17 @@ radeon_add_legacy_encoder(struct drm_device *dev, uint32_t encoder_id, uint32_t | |||
| 1265 | case ENCODER_OBJECT_ID_INTERNAL_DAC1: | 1265 | case ENCODER_OBJECT_ID_INTERNAL_DAC1: |
| 1266 | drm_encoder_init(dev, encoder, &radeon_legacy_primary_dac_enc_funcs, DRM_MODE_ENCODER_DAC); | 1266 | drm_encoder_init(dev, encoder, &radeon_legacy_primary_dac_enc_funcs, DRM_MODE_ENCODER_DAC); |
| 1267 | drm_encoder_helper_add(encoder, &radeon_legacy_primary_dac_helper_funcs); | 1267 | drm_encoder_helper_add(encoder, &radeon_legacy_primary_dac_helper_funcs); |
| 1268 | if (!rdev->is_atom_bios) | 1268 | if (rdev->is_atom_bios) |
| 1269 | radeon_encoder->enc_priv = radeon_atombios_get_primary_dac_info(radeon_encoder); | ||
| 1270 | else | ||
| 1269 | radeon_encoder->enc_priv = radeon_combios_get_primary_dac_info(radeon_encoder); | 1271 | radeon_encoder->enc_priv = radeon_combios_get_primary_dac_info(radeon_encoder); |
| 1270 | break; | 1272 | break; |
| 1271 | case ENCODER_OBJECT_ID_INTERNAL_DAC2: | 1273 | case ENCODER_OBJECT_ID_INTERNAL_DAC2: |
| 1272 | drm_encoder_init(dev, encoder, &radeon_legacy_tv_dac_enc_funcs, DRM_MODE_ENCODER_TVDAC); | 1274 | drm_encoder_init(dev, encoder, &radeon_legacy_tv_dac_enc_funcs, DRM_MODE_ENCODER_TVDAC); |
| 1273 | drm_encoder_helper_add(encoder, &radeon_legacy_tv_dac_helper_funcs); | 1275 | drm_encoder_helper_add(encoder, &radeon_legacy_tv_dac_helper_funcs); |
| 1274 | if (!rdev->is_atom_bios) | 1276 | if (rdev->is_atom_bios) |
| 1277 | radeon_encoder->enc_priv = radeon_atombios_get_tv_dac_info(radeon_encoder); | ||
| 1278 | else | ||
| 1275 | radeon_encoder->enc_priv = radeon_combios_get_tv_dac_info(radeon_encoder); | 1279 | radeon_encoder->enc_priv = radeon_combios_get_tv_dac_info(radeon_encoder); |
| 1276 | break; | 1280 | break; |
| 1277 | case ENCODER_OBJECT_ID_INTERNAL_DVO1: | 1281 | case ENCODER_OBJECT_ID_INTERNAL_DVO1: |
diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h index 4b37746eae55..9173b687462b 100644 --- a/drivers/gpu/drm/radeon/radeon_mode.h +++ b/drivers/gpu/drm/radeon/radeon_mode.h | |||
| @@ -329,6 +329,10 @@ extern struct radeon_encoder_atom_dig * | |||
| 329 | radeon_atombios_get_lvds_info(struct radeon_encoder *encoder); | 329 | radeon_atombios_get_lvds_info(struct radeon_encoder *encoder); |
| 330 | extern struct radeon_encoder_int_tmds * | 330 | extern struct radeon_encoder_int_tmds * |
| 331 | radeon_atombios_get_tmds_info(struct radeon_encoder *encoder); | 331 | radeon_atombios_get_tmds_info(struct radeon_encoder *encoder); |
| 332 | extern struct radeon_encoder_primary_dac * | ||
| 333 | radeon_atombios_get_primary_dac_info(struct radeon_encoder *encoder); | ||
| 334 | extern struct radeon_encoder_tv_dac * | ||
| 335 | radeon_atombios_get_tv_dac_info(struct radeon_encoder *encoder); | ||
| 332 | extern struct radeon_encoder_lvds * | 336 | extern struct radeon_encoder_lvds * |
| 333 | radeon_combios_get_lvds_info(struct radeon_encoder *encoder); | 337 | radeon_combios_get_lvds_info(struct radeon_encoder *encoder); |
| 334 | extern struct radeon_encoder_int_tmds * | 338 | extern struct radeon_encoder_int_tmds * |
