diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/atombios_encoders.c')
-rw-r--r-- | drivers/gpu/drm/radeon/atombios_encoders.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c index 2d39f9977e00..e7b1ec5ae8c6 100644 --- a/drivers/gpu/drm/radeon/atombios_encoders.c +++ b/drivers/gpu/drm/radeon/atombios_encoders.c | |||
@@ -545,7 +545,7 @@ atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mo | |||
545 | dp_clock = dig_connector->dp_clock; | 545 | dp_clock = dig_connector->dp_clock; |
546 | dp_lane_count = dig_connector->dp_lane_count; | 546 | dp_lane_count = dig_connector->dp_lane_count; |
547 | hpd_id = radeon_connector->hpd.hpd; | 547 | hpd_id = radeon_connector->hpd.hpd; |
548 | /* bpc = connector->display_info.bpc; */ | 548 | bpc = radeon_get_monitor_bpc(connector); |
549 | } | 549 | } |
550 | 550 | ||
551 | /* no dig encoder assigned */ | 551 | /* no dig encoder assigned */ |
@@ -1163,7 +1163,7 @@ atombios_external_encoder_setup(struct drm_encoder *encoder, | |||
1163 | dp_lane_count = dig_connector->dp_lane_count; | 1163 | dp_lane_count = dig_connector->dp_lane_count; |
1164 | connector_object_id = | 1164 | connector_object_id = |
1165 | (radeon_connector->connector_object_id & OBJECT_ID_MASK) >> OBJECT_ID_SHIFT; | 1165 | (radeon_connector->connector_object_id & OBJECT_ID_MASK) >> OBJECT_ID_SHIFT; |
1166 | /* bpc = connector->display_info.bpc; */ | 1166 | bpc = radeon_get_monitor_bpc(connector); |
1167 | } | 1167 | } |
1168 | 1168 | ||
1169 | memset(&args, 0, sizeof(args)); | 1169 | memset(&args, 0, sizeof(args)); |
@@ -1926,7 +1926,10 @@ radeon_atom_encoder_mode_set(struct drm_encoder *encoder, | |||
1926 | 1926 | ||
1927 | if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_HDMI) { | 1927 | if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_HDMI) { |
1928 | r600_hdmi_enable(encoder); | 1928 | r600_hdmi_enable(encoder); |
1929 | r600_hdmi_setmode(encoder, adjusted_mode); | 1929 | if (ASIC_IS_DCE4(rdev)) |
1930 | evergreen_hdmi_setmode(encoder, adjusted_mode); | ||
1931 | else | ||
1932 | r600_hdmi_setmode(encoder, adjusted_mode); | ||
1930 | } | 1933 | } |
1931 | } | 1934 | } |
1932 | 1935 | ||
@@ -2081,6 +2084,7 @@ radeon_atom_ext_encoder_setup_ddc(struct drm_encoder *encoder) | |||
2081 | 2084 | ||
2082 | static void radeon_atom_encoder_prepare(struct drm_encoder *encoder) | 2085 | static void radeon_atom_encoder_prepare(struct drm_encoder *encoder) |
2083 | { | 2086 | { |
2087 | struct radeon_device *rdev = encoder->dev->dev_private; | ||
2084 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); | 2088 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); |
2085 | struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); | 2089 | struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); |
2086 | 2090 | ||
@@ -2089,8 +2093,16 @@ static void radeon_atom_encoder_prepare(struct drm_encoder *encoder) | |||
2089 | (radeon_encoder_get_dp_bridge_encoder_id(encoder) != | 2093 | (radeon_encoder_get_dp_bridge_encoder_id(encoder) != |
2090 | ENCODER_OBJECT_ID_NONE)) { | 2094 | ENCODER_OBJECT_ID_NONE)) { |
2091 | struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; | 2095 | struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; |
2092 | if (dig) | 2096 | if (dig) { |
2093 | dig->dig_encoder = radeon_atom_pick_dig_encoder(encoder); | 2097 | dig->dig_encoder = radeon_atom_pick_dig_encoder(encoder); |
2098 | if (radeon_encoder->active_device & ATOM_DEVICE_DFP_SUPPORT) { | ||
2099 | if (rdev->family >= CHIP_R600) | ||
2100 | dig->afmt = rdev->mode_info.afmt[dig->dig_encoder]; | ||
2101 | else | ||
2102 | /* RS600/690/740 have only 1 afmt block */ | ||
2103 | dig->afmt = rdev->mode_info.afmt[0]; | ||
2104 | } | ||
2105 | } | ||
2094 | } | 2106 | } |
2095 | 2107 | ||
2096 | radeon_atom_output_lock(encoder, true); | 2108 | radeon_atom_output_lock(encoder, true); |