diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2012-08-17 10:31:34 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2012-09-20 13:10:38 -0400 |
commit | 1f0e29435386e42c942ee8385d10dbfc814f5cfe (patch) | |
tree | daf1dd775247307bef30621a63757f83ec944312 | |
parent | 37e9b6a62fb775276f8edb5bd2b9f13a3102b9dd (diff) |
drm/radeon/atom: add consolidate bpc code
Several encoder setup functions had the same duplicated
code for selecting the proper bpc setting for various
atom tables. Consolidate it.
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/radeon/atombios_encoders.c | 96 |
1 files changed, 29 insertions, 67 deletions
diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c index f9910f099e6e..dac32c8f76c4 100644 --- a/drivers/gpu/drm/radeon/atombios_encoders.c +++ b/drivers/gpu/drm/radeon/atombios_encoders.c | |||
@@ -439,6 +439,32 @@ atombios_tv_setup(struct drm_encoder *encoder, int action) | |||
439 | 439 | ||
440 | } | 440 | } |
441 | 441 | ||
442 | static u8 radeon_atom_get_bpc(struct drm_encoder *encoder) | ||
443 | { | ||
444 | struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); | ||
445 | int bpc = 8; | ||
446 | |||
447 | if (connector) | ||
448 | bpc = radeon_get_monitor_bpc(connector); | ||
449 | |||
450 | switch (bpc) { | ||
451 | case 0: | ||
452 | return PANEL_BPC_UNDEFINE; | ||
453 | case 6: | ||
454 | return PANEL_6BIT_PER_COLOR; | ||
455 | case 8: | ||
456 | default: | ||
457 | return PANEL_8BIT_PER_COLOR; | ||
458 | case 10: | ||
459 | return PANEL_10BIT_PER_COLOR; | ||
460 | case 12: | ||
461 | return PANEL_12BIT_PER_COLOR; | ||
462 | case 16: | ||
463 | return PANEL_16BIT_PER_COLOR; | ||
464 | } | ||
465 | } | ||
466 | |||
467 | |||
442 | union dvo_encoder_control { | 468 | union dvo_encoder_control { |
443 | ENABLE_EXTERNAL_TMDS_ENCODER_PS_ALLOCATION ext_tmds; | 469 | ENABLE_EXTERNAL_TMDS_ENCODER_PS_ALLOCATION ext_tmds; |
444 | DVO_ENCODER_CONTROL_PS_ALLOCATION dvo; | 470 | DVO_ENCODER_CONTROL_PS_ALLOCATION dvo; |
@@ -765,7 +791,6 @@ atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mo | |||
765 | int dp_clock = 0; | 791 | int dp_clock = 0; |
766 | int dp_lane_count = 0; | 792 | int dp_lane_count = 0; |
767 | int hpd_id = RADEON_HPD_NONE; | 793 | int hpd_id = RADEON_HPD_NONE; |
768 | int bpc = 8; | ||
769 | 794 | ||
770 | if (connector) { | 795 | if (connector) { |
771 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); | 796 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
@@ -775,7 +800,6 @@ atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mo | |||
775 | dp_clock = dig_connector->dp_clock; | 800 | dp_clock = dig_connector->dp_clock; |
776 | dp_lane_count = dig_connector->dp_lane_count; | 801 | dp_lane_count = dig_connector->dp_lane_count; |
777 | hpd_id = radeon_connector->hpd.hpd; | 802 | hpd_id = radeon_connector->hpd.hpd; |
778 | bpc = radeon_get_monitor_bpc(connector); | ||
779 | } | 803 | } |
780 | 804 | ||
781 | /* no dig encoder assigned */ | 805 | /* no dig encoder assigned */ |
@@ -852,27 +876,7 @@ atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mo | |||
852 | if (ENCODER_MODE_IS_DP(args.v1.ucEncoderMode) && (dp_clock == 270000)) | 876 | if (ENCODER_MODE_IS_DP(args.v1.ucEncoderMode) && (dp_clock == 270000)) |
853 | args.v1.ucConfig |= ATOM_ENCODER_CONFIG_V3_DPLINKRATE_2_70GHZ; | 877 | args.v1.ucConfig |= ATOM_ENCODER_CONFIG_V3_DPLINKRATE_2_70GHZ; |
854 | args.v3.acConfig.ucDigSel = dig->dig_encoder; | 878 | args.v3.acConfig.ucDigSel = dig->dig_encoder; |
855 | switch (bpc) { | 879 | args.v3.ucBitPerColor = radeon_atom_get_bpc(encoder); |
856 | case 0: | ||
857 | args.v3.ucBitPerColor = PANEL_BPC_UNDEFINE; | ||
858 | break; | ||
859 | case 6: | ||
860 | args.v3.ucBitPerColor = PANEL_6BIT_PER_COLOR; | ||
861 | break; | ||
862 | case 8: | ||
863 | default: | ||
864 | args.v3.ucBitPerColor = PANEL_8BIT_PER_COLOR; | ||
865 | break; | ||
866 | case 10: | ||
867 | args.v3.ucBitPerColor = PANEL_10BIT_PER_COLOR; | ||
868 | break; | ||
869 | case 12: | ||
870 | args.v3.ucBitPerColor = PANEL_12BIT_PER_COLOR; | ||
871 | break; | ||
872 | case 16: | ||
873 | args.v3.ucBitPerColor = PANEL_16BIT_PER_COLOR; | ||
874 | break; | ||
875 | } | ||
876 | break; | 880 | break; |
877 | case 4: | 881 | case 4: |
878 | args.v4.ucAction = action; | 882 | args.v4.ucAction = action; |
@@ -896,27 +900,7 @@ atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mo | |||
896 | args.v1.ucConfig |= ATOM_ENCODER_CONFIG_V4_DPLINKRATE_5_40GHZ; | 900 | args.v1.ucConfig |= ATOM_ENCODER_CONFIG_V4_DPLINKRATE_5_40GHZ; |
897 | } | 901 | } |
898 | args.v4.acConfig.ucDigSel = dig->dig_encoder; | 902 | args.v4.acConfig.ucDigSel = dig->dig_encoder; |
899 | switch (bpc) { | 903 | args.v4.ucBitPerColor = radeon_atom_get_bpc(encoder); |
900 | case 0: | ||
901 | args.v4.ucBitPerColor = PANEL_BPC_UNDEFINE; | ||
902 | break; | ||
903 | case 6: | ||
904 | args.v4.ucBitPerColor = PANEL_6BIT_PER_COLOR; | ||
905 | break; | ||
906 | case 8: | ||
907 | default: | ||
908 | args.v4.ucBitPerColor = PANEL_8BIT_PER_COLOR; | ||
909 | break; | ||
910 | case 10: | ||
911 | args.v4.ucBitPerColor = PANEL_10BIT_PER_COLOR; | ||
912 | break; | ||
913 | case 12: | ||
914 | args.v4.ucBitPerColor = PANEL_12BIT_PER_COLOR; | ||
915 | break; | ||
916 | case 16: | ||
917 | args.v4.ucBitPerColor = PANEL_16BIT_PER_COLOR; | ||
918 | break; | ||
919 | } | ||
920 | if (hpd_id == RADEON_HPD_NONE) | 904 | if (hpd_id == RADEON_HPD_NONE) |
921 | args.v4.ucHPD_ID = 0; | 905 | args.v4.ucHPD_ID = 0; |
922 | else | 906 | else |
@@ -1377,7 +1361,6 @@ atombios_external_encoder_setup(struct drm_encoder *encoder, | |||
1377 | int dp_lane_count = 0; | 1361 | int dp_lane_count = 0; |
1378 | int connector_object_id = 0; | 1362 | int connector_object_id = 0; |
1379 | u32 ext_enum = (ext_radeon_encoder->encoder_enum & ENUM_ID_MASK) >> ENUM_ID_SHIFT; | 1363 | u32 ext_enum = (ext_radeon_encoder->encoder_enum & ENUM_ID_MASK) >> ENUM_ID_SHIFT; |
1380 | int bpc = 8; | ||
1381 | 1364 | ||
1382 | if (action == EXTERNAL_ENCODER_ACTION_V3_ENCODER_INIT) | 1365 | if (action == EXTERNAL_ENCODER_ACTION_V3_ENCODER_INIT) |
1383 | connector = radeon_get_connector_for_encoder_init(encoder); | 1366 | connector = radeon_get_connector_for_encoder_init(encoder); |
@@ -1393,7 +1376,6 @@ atombios_external_encoder_setup(struct drm_encoder *encoder, | |||
1393 | dp_lane_count = dig_connector->dp_lane_count; | 1376 | dp_lane_count = dig_connector->dp_lane_count; |
1394 | connector_object_id = | 1377 | connector_object_id = |
1395 | (radeon_connector->connector_object_id & OBJECT_ID_MASK) >> OBJECT_ID_SHIFT; | 1378 | (radeon_connector->connector_object_id & OBJECT_ID_MASK) >> OBJECT_ID_SHIFT; |
1396 | bpc = radeon_get_monitor_bpc(connector); | ||
1397 | } | 1379 | } |
1398 | 1380 | ||
1399 | memset(&args, 0, sizeof(args)); | 1381 | memset(&args, 0, sizeof(args)); |
@@ -1451,27 +1433,7 @@ atombios_external_encoder_setup(struct drm_encoder *encoder, | |||
1451 | args.v3.sExtEncoder.ucConfig |= EXTERNAL_ENCODER_CONFIG_V3_ENCODER3; | 1433 | args.v3.sExtEncoder.ucConfig |= EXTERNAL_ENCODER_CONFIG_V3_ENCODER3; |
1452 | break; | 1434 | break; |
1453 | } | 1435 | } |
1454 | switch (bpc) { | 1436 | args.v3.sExtEncoder.ucBitPerColor = radeon_atom_get_bpc(encoder); |
1455 | case 0: | ||
1456 | args.v3.sExtEncoder.ucBitPerColor = PANEL_BPC_UNDEFINE; | ||
1457 | break; | ||
1458 | case 6: | ||
1459 | args.v3.sExtEncoder.ucBitPerColor = PANEL_6BIT_PER_COLOR; | ||
1460 | break; | ||
1461 | case 8: | ||
1462 | default: | ||
1463 | args.v3.sExtEncoder.ucBitPerColor = PANEL_8BIT_PER_COLOR; | ||
1464 | break; | ||
1465 | case 10: | ||
1466 | args.v3.sExtEncoder.ucBitPerColor = PANEL_10BIT_PER_COLOR; | ||
1467 | break; | ||
1468 | case 12: | ||
1469 | args.v3.sExtEncoder.ucBitPerColor = PANEL_12BIT_PER_COLOR; | ||
1470 | break; | ||
1471 | case 16: | ||
1472 | args.v3.sExtEncoder.ucBitPerColor = PANEL_16BIT_PER_COLOR; | ||
1473 | break; | ||
1474 | } | ||
1475 | break; | 1437 | break; |
1476 | default: | 1438 | default: |
1477 | DRM_ERROR("Unknown table version: %d, %d\n", frev, crev); | 1439 | DRM_ERROR("Unknown table version: %d, %d\n", frev, crev); |