diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2011-10-31 08:58:47 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-11-01 12:04:39 -0400 |
commit | 1d33e1fc8dcce667a70387b666a8b6f60153d90f (patch) | |
tree | 83ce0cbf593323e00e3fcf2bdf83bdc1a4a2d5ab /drivers | |
parent | 54bd5206bf1615eadee5b87c64252c6991d737dc (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')
-rw-r--r-- | drivers/gpu/drm/radeon/atombios_crtc.c | 12 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/atombios_dp.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_connectors.c | 16 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_display.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_encoders.c | 11 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_mode.h | 4 |
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 4901179b260d..9bb3d6f3b7be 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 b5628ce1228b..d0ef4cbadfa4 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 22ee3527cf1f..83352bb4d607 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c | |||
@@ -44,8 +44,6 @@ extern void | |||
44 | radeon_legacy_backlight_init(struct radeon_encoder *radeon_encoder, | 44 | radeon_legacy_backlight_init(struct radeon_encoder *radeon_encoder, |
45 | struct drm_connector *drm_connector); | 45 | struct drm_connector *drm_connector); |
46 | 46 | ||
47 | bool radeon_connector_encoder_is_dp_bridge(struct drm_connector *connector); | ||
48 | |||
49 | void radeon_connector_hotplug(struct drm_connector *connector) | 47 | void 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 | ||
1217 | bool radeon_connector_encoder_is_dp_bridge(struct drm_connector *connector) | 1216 | u16 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 | ||
1249 | bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector) | 1246 | bool 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 6adb3e58affd..07ac48162a13 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 eb3f6dc6df83..9838865e223b 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 | ||
269 | bool radeon_encoder_is_dp_bridge(struct drm_encoder *encoder) | 269 | u16 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 ed0178f03235..cbf80de2d9c6 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); | |||
468 | extern struct drm_connector * | 468 | extern struct drm_connector * |
469 | radeon_get_connector_for_encoder(struct drm_encoder *encoder); | 469 | radeon_get_connector_for_encoder(struct drm_encoder *encoder); |
470 | 470 | ||
471 | extern bool radeon_encoder_is_dp_bridge(struct drm_encoder *encoder); | 471 | extern u16 radeon_encoder_get_dp_bridge_encoder_id(struct drm_encoder *encoder); |
472 | extern bool radeon_connector_encoder_is_dp_bridge(struct drm_connector *connector); | 472 | extern u16 radeon_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *connector); |
473 | extern bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector); | 473 | extern bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector); |
474 | extern bool radeon_connector_is_dp12_capable(struct drm_connector *connector); | 474 | extern bool radeon_connector_is_dp12_capable(struct drm_connector *connector); |
475 | 475 | ||