aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/atombios_encoders.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/radeon/atombios_encoders.c')
-rw-r--r--drivers/gpu/drm/radeon/atombios_encoders.c20
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
2082static void radeon_atom_encoder_prepare(struct drm_encoder *encoder) 2085static 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);