aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2011-10-31 08:58:47 -0400
committerDave Airlie <airlied@redhat.com>2011-11-01 12:04:39 -0400
commit1d33e1fc8dcce667a70387b666a8b6f60153d90f (patch)
tree83ce0cbf593323e00e3fcf2bdf83bdc1a4a2d5ab /drivers/gpu/drm
parent54bd5206bf1615eadee5b87c64252c6991d737dc (diff)
drm/radeon/kms: rework DP bridge checks
Return the encoder id rather than a boolean. This is needed for differentiate between multiple DP bridge chips. Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/radeon/atombios_crtc.c12
-rw-r--r--drivers/gpu/drm/radeon/atombios_dp.c6
-rw-r--r--drivers/gpu/drm/radeon/radeon_connectors.c16
-rw-r--r--drivers/gpu/drm/radeon/radeon_display.c3
-rw-r--r--drivers/gpu/drm/radeon/radeon_encoders.c11
-rw-r--r--drivers/gpu/drm/radeon/radeon_mode.h4
6 files changed, 27 insertions, 25 deletions
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
index 4901179b260..9bb3d6f3b7b 100644
--- a/drivers/gpu/drm/radeon/atombios_crtc.c
+++ b/drivers/gpu/drm/radeon/atombios_crtc.c
@@ -558,7 +558,7 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
558 bpc = connector->display_info.bpc; 558 bpc = connector->display_info.bpc;
559 encoder_mode = atombios_get_encoder_mode(encoder); 559 encoder_mode = atombios_get_encoder_mode(encoder);
560 if ((radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT | ATOM_DEVICE_DFP_SUPPORT)) || 560 if ((radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT | ATOM_DEVICE_DFP_SUPPORT)) ||
561 radeon_encoder_is_dp_bridge(encoder)) { 561 (radeon_encoder_get_dp_bridge_encoder_id(encoder) != ENCODER_OBJECT_ID_NONE)) {
562 if (connector) { 562 if (connector) {
563 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 563 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
564 struct radeon_connector_atom_dig *dig_connector = 564 struct radeon_connector_atom_dig *dig_connector =
@@ -656,11 +656,11 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
656 args.v3.sInput.ucDispPllConfig |= 656 args.v3.sInput.ucDispPllConfig |=
657 DISPPLL_CONFIG_DUAL_LINK; 657 DISPPLL_CONFIG_DUAL_LINK;
658 } 658 }
659 if (radeon_encoder_is_dp_bridge(encoder)) { 659 if (radeon_encoder_get_dp_bridge_encoder_id(encoder) !=
660 struct drm_encoder *ext_encoder = radeon_atom_get_external_encoder(encoder); 660 ENCODER_OBJECT_ID_NONE)
661 struct radeon_encoder *ext_radeon_encoder = to_radeon_encoder(ext_encoder); 661 args.v3.sInput.ucExtTransmitterID =
662 args.v3.sInput.ucExtTransmitterID = ext_radeon_encoder->encoder_id; 662 radeon_encoder_get_dp_bridge_encoder_id(encoder);
663 } else 663 else
664 args.v3.sInput.ucExtTransmitterID = 0; 664 args.v3.sInput.ucExtTransmitterID = 0;
665 665
666 atom_execute_table(rdev->mode_info.atom_context, 666 atom_execute_table(rdev->mode_info.atom_context,
diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c
index b5628ce1228..d0ef4cbadfa 100644
--- a/drivers/gpu/drm/radeon/atombios_dp.c
+++ b/drivers/gpu/drm/radeon/atombios_dp.c
@@ -482,7 +482,8 @@ static int radeon_dp_get_dp_link_clock(struct drm_connector *connector,
482 int bpp = convert_bpc_to_bpp(connector->display_info.bpc); 482 int bpp = convert_bpc_to_bpp(connector->display_info.bpc);
483 int lane_num, max_pix_clock; 483 int lane_num, max_pix_clock;
484 484
485 if (radeon_connector_encoder_is_dp_bridge(connector)) 485 if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
486 ENCODER_OBJECT_ID_NONE)
486 return 270000; 487 return 270000;
487 488
488 lane_num = radeon_dp_get_dp_lane_number(connector, dpcd, pix_clock); 489 lane_num = radeon_dp_get_dp_lane_number(connector, dpcd, pix_clock);
@@ -559,7 +560,8 @@ static void radeon_dp_set_panel_mode(struct drm_encoder *encoder,
559 if (!ASIC_IS_DCE4(rdev)) 560 if (!ASIC_IS_DCE4(rdev))
560 return; 561 return;
561 562
562 if (radeon_connector_encoder_is_dp_bridge(connector)) 563 if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
564 ENCODER_OBJECT_ID_NONE)
563 panel_mode = DP_PANEL_MODE_INTERNAL_DP1_MODE; 565 panel_mode = DP_PANEL_MODE_INTERNAL_DP1_MODE;
564 else if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) { 566 else if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
565 u8 tmp = radeon_read_dpcd_reg(radeon_connector, DP_EDP_CONFIGURATION_CAP); 567 u8 tmp = radeon_read_dpcd_reg(radeon_connector, DP_EDP_CONFIGURATION_CAP);
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
index 22ee3527cf1..83352bb4d60 100644
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
@@ -44,8 +44,6 @@ extern void
44radeon_legacy_backlight_init(struct radeon_encoder *radeon_encoder, 44radeon_legacy_backlight_init(struct radeon_encoder *radeon_encoder,
45 struct drm_connector *drm_connector); 45 struct drm_connector *drm_connector);
46 46
47bool radeon_connector_encoder_is_dp_bridge(struct drm_connector *connector);
48
49void radeon_connector_hotplug(struct drm_connector *connector) 47void radeon_connector_hotplug(struct drm_connector *connector)
50{ 48{
51 struct drm_device *dev = connector->dev; 49 struct drm_device *dev = connector->dev;
@@ -1204,7 +1202,8 @@ static int radeon_dp_get_modes(struct drm_connector *connector)
1204 } 1202 }
1205 } else { 1203 } else {
1206 /* need to setup ddc on the bridge */ 1204 /* need to setup ddc on the bridge */
1207 if (radeon_connector_encoder_is_dp_bridge(connector)) { 1205 if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1206 ENCODER_OBJECT_ID_NONE) {
1208 if (encoder) 1207 if (encoder)
1209 radeon_atom_ext_encoder_setup_ddc(encoder); 1208 radeon_atom_ext_encoder_setup_ddc(encoder);
1210 } 1209 }
@@ -1214,13 +1213,12 @@ static int radeon_dp_get_modes(struct drm_connector *connector)
1214 return ret; 1213 return ret;
1215} 1214}
1216 1215
1217bool radeon_connector_encoder_is_dp_bridge(struct drm_connector *connector) 1216u16 radeon_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *connector)
1218{ 1217{
1219 struct drm_mode_object *obj; 1218 struct drm_mode_object *obj;
1220 struct drm_encoder *encoder; 1219 struct drm_encoder *encoder;
1221 struct radeon_encoder *radeon_encoder; 1220 struct radeon_encoder *radeon_encoder;
1222 int i; 1221 int i;
1223 bool found = false;
1224 1222
1225 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { 1223 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1226 if (connector->encoder_ids[i] == 0) 1224 if (connector->encoder_ids[i] == 0)
@@ -1236,14 +1234,13 @@ bool radeon_connector_encoder_is_dp_bridge(struct drm_connector *connector)
1236 switch (radeon_encoder->encoder_id) { 1234 switch (radeon_encoder->encoder_id) {
1237 case ENCODER_OBJECT_ID_TRAVIS: 1235 case ENCODER_OBJECT_ID_TRAVIS:
1238 case ENCODER_OBJECT_ID_NUTMEG: 1236 case ENCODER_OBJECT_ID_NUTMEG:
1239 found = true; 1237 return radeon_encoder->encoder_id;
1240 break;
1241 default: 1238 default:
1242 break; 1239 break;
1243 } 1240 }
1244 } 1241 }
1245 1242
1246 return found; 1243 return ENCODER_OBJECT_ID_NONE;
1247} 1244}
1248 1245
1249bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector) 1246bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector)
@@ -1320,7 +1317,8 @@ radeon_dp_detect(struct drm_connector *connector, bool force)
1320 if (!radeon_dig_connector->edp_on) 1317 if (!radeon_dig_connector->edp_on)
1321 atombios_set_edp_panel_power(connector, 1318 atombios_set_edp_panel_power(connector,
1322 ATOM_TRANSMITTER_ACTION_POWER_OFF); 1319 ATOM_TRANSMITTER_ACTION_POWER_OFF);
1323 } else if (radeon_connector_encoder_is_dp_bridge(connector)) { 1320 } else if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1321 ENCODER_OBJECT_ID_NONE) {
1324 /* DP bridges are always DP */ 1322 /* DP bridges are always DP */
1325 radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT; 1323 radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT;
1326 /* get the DPCD from the bridge */ 1324 /* get the DPCD from the bridge */
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
index 6adb3e58aff..07ac48162a1 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -708,7 +708,8 @@ int radeon_ddc_get_modes(struct radeon_connector *radeon_connector)
708 708
709 if ((radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_DisplayPort) || 709 if ((radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||
710 (radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP) || 710 (radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP) ||
711 radeon_connector_encoder_is_dp_bridge(&radeon_connector->base)) { 711 (radeon_connector_encoder_get_dp_bridge_encoder_id(&radeon_connector->base) !=
712 ENCODER_OBJECT_ID_NONE)) {
712 struct radeon_connector_atom_dig *dig = radeon_connector->con_priv; 713 struct radeon_connector_atom_dig *dig = radeon_connector->con_priv;
713 714
714 if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT || 715 if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT ||
diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c
index eb3f6dc6df8..9838865e223 100644
--- a/drivers/gpu/drm/radeon/radeon_encoders.c
+++ b/drivers/gpu/drm/radeon/radeon_encoders.c
@@ -266,7 +266,7 @@ struct drm_encoder *radeon_atom_get_external_encoder(struct drm_encoder *encoder
266 return NULL; 266 return NULL;
267} 267}
268 268
269bool radeon_encoder_is_dp_bridge(struct drm_encoder *encoder) 269u16 radeon_encoder_get_dp_bridge_encoder_id(struct drm_encoder *encoder)
270{ 270{
271 struct drm_encoder *other_encoder = radeon_atom_get_external_encoder(encoder); 271 struct drm_encoder *other_encoder = radeon_atom_get_external_encoder(encoder);
272 272
@@ -368,7 +368,7 @@ static bool radeon_atom_mode_fixup(struct drm_encoder *encoder,
368 368
369 if (ASIC_IS_DCE3(rdev) && 369 if (ASIC_IS_DCE3(rdev) &&
370 ((radeon_encoder->active_device & (ATOM_DEVICE_DFP_SUPPORT | ATOM_DEVICE_LCD_SUPPORT)) || 370 ((radeon_encoder->active_device & (ATOM_DEVICE_DFP_SUPPORT | ATOM_DEVICE_LCD_SUPPORT)) ||
371 radeon_encoder_is_dp_bridge(encoder))) { 371 (radeon_encoder_get_dp_bridge_encoder_id(encoder) != ENCODER_OBJECT_ID_NONE))) {
372 struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); 372 struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
373 radeon_dp_set_link_config(connector, mode); 373 radeon_dp_set_link_config(connector, mode);
374 } 374 }
@@ -658,7 +658,7 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
658 struct radeon_connector_atom_dig *dig_connector; 658 struct radeon_connector_atom_dig *dig_connector;
659 659
660 /* dp bridges are always DP */ 660 /* dp bridges are always DP */
661 if (radeon_encoder_is_dp_bridge(encoder)) 661 if (radeon_encoder_get_dp_bridge_encoder_id(encoder) != ENCODER_OBJECT_ID_NONE)
662 return ATOM_ENCODER_MODE_DP; 662 return ATOM_ENCODER_MODE_DP;
663 663
664 /* DVO is always DVO */ 664 /* DVO is always DVO */
@@ -1638,7 +1638,7 @@ atombios_set_encoder_crtc_source(struct drm_encoder *encoder)
1638 break; 1638 break;
1639 case 2: 1639 case 2:
1640 args.v2.ucCRTC = radeon_crtc->crtc_id; 1640 args.v2.ucCRTC = radeon_crtc->crtc_id;
1641 if (radeon_encoder_is_dp_bridge(encoder)) { 1641 if (radeon_encoder_get_dp_bridge_encoder_id(encoder) != ENCODER_OBJECT_ID_NONE) {
1642 struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); 1642 struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
1643 1643
1644 if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS) 1644 if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)
@@ -2099,7 +2099,8 @@ static void radeon_atom_encoder_prepare(struct drm_encoder *encoder)
2099 2099
2100 if ((radeon_encoder->active_device & 2100 if ((radeon_encoder->active_device &
2101 (ATOM_DEVICE_DFP_SUPPORT | ATOM_DEVICE_LCD_SUPPORT)) || 2101 (ATOM_DEVICE_DFP_SUPPORT | ATOM_DEVICE_LCD_SUPPORT)) ||
2102 radeon_encoder_is_dp_bridge(encoder)) { 2102 (radeon_encoder_get_dp_bridge_encoder_id(encoder) !=
2103 ENCODER_OBJECT_ID_NONE)) {
2103 struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; 2104 struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
2104 if (dig) 2105 if (dig)
2105 dig->dig_encoder = radeon_atom_pick_dig_encoder(encoder); 2106 dig->dig_encoder = radeon_atom_pick_dig_encoder(encoder);
diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h
index ed0178f0323..cbf80de2d9c 100644
--- a/drivers/gpu/drm/radeon/radeon_mode.h
+++ b/drivers/gpu/drm/radeon/radeon_mode.h
@@ -468,8 +468,8 @@ radeon_atombios_get_tv_info(struct radeon_device *rdev);
468extern struct drm_connector * 468extern struct drm_connector *
469radeon_get_connector_for_encoder(struct drm_encoder *encoder); 469radeon_get_connector_for_encoder(struct drm_encoder *encoder);
470 470
471extern bool radeon_encoder_is_dp_bridge(struct drm_encoder *encoder); 471extern u16 radeon_encoder_get_dp_bridge_encoder_id(struct drm_encoder *encoder);
472extern bool radeon_connector_encoder_is_dp_bridge(struct drm_connector *connector); 472extern u16 radeon_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *connector);
473extern bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector); 473extern bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector);
474extern bool radeon_connector_is_dp12_capable(struct drm_connector *connector); 474extern bool radeon_connector_is_dp12_capable(struct drm_connector *connector);
475 475