diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2014-03-17 23:48:15 -0400 |
---|---|---|
committer | Christian König <christian.koenig@amd.com> | 2014-03-25 08:13:15 -0400 |
commit | 2953da1589477c9aec85431339d28a8303d47945 (patch) | |
tree | f1831e2b0c33bcb2493ddca468b0912a4d7fa62f | |
parent | f3381dfc9745bcd8b6be676ec4f68c52e71d24f1 (diff) |
drm/radeon/dp: move sink power control to a separate function
This will be used elsewhere.
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
-rw-r--r-- | drivers/gpu/drm/radeon/atombios_dp.c | 26 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_mode.h | 2 |
2 files changed, 23 insertions, 5 deletions
diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c index c79ba8a886bd..88d399c3f4fd 100644 --- a/drivers/gpu/drm/radeon/atombios_dp.c +++ b/drivers/gpu/drm/radeon/atombios_dp.c | |||
@@ -603,6 +603,26 @@ bool radeon_dp_needs_link_train(struct radeon_connector *radeon_connector) | |||
603 | return true; | 603 | return true; |
604 | } | 604 | } |
605 | 605 | ||
606 | void radeon_dp_set_rx_power_state(struct drm_connector *connector, | ||
607 | u8 power_state) | ||
608 | { | ||
609 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); | ||
610 | struct radeon_connector_atom_dig *dig_connector; | ||
611 | |||
612 | if (!radeon_connector->con_priv) | ||
613 | return; | ||
614 | |||
615 | dig_connector = radeon_connector->con_priv; | ||
616 | |||
617 | /* power up/down the sink */ | ||
618 | if (dig_connector->dpcd[0] >= 0x11) { | ||
619 | radeon_write_dpcd_reg(radeon_connector, | ||
620 | DP_SET_POWER, power_state); | ||
621 | usleep_range(1000, 2000); | ||
622 | } | ||
623 | } | ||
624 | |||
625 | |||
606 | struct radeon_dp_link_train_info { | 626 | struct radeon_dp_link_train_info { |
607 | struct radeon_device *rdev; | 627 | struct radeon_device *rdev; |
608 | struct drm_encoder *encoder; | 628 | struct drm_encoder *encoder; |
@@ -673,11 +693,7 @@ static int radeon_dp_link_train_init(struct radeon_dp_link_train_info *dp_info) | |||
673 | u8 tmp; | 693 | u8 tmp; |
674 | 694 | ||
675 | /* power up the sink */ | 695 | /* power up the sink */ |
676 | if (dp_info->dpcd[0] >= 0x11) { | 696 | radeon_dp_set_rx_power_state(dp_info->connector, DP_SET_POWER_D0); |
677 | radeon_write_dpcd_reg(dp_info->radeon_connector, | ||
678 | DP_SET_POWER, DP_SET_POWER_D0); | ||
679 | usleep_range(1000, 2000); | ||
680 | } | ||
681 | 697 | ||
682 | /* possibly enable downspread on the sink */ | 698 | /* possibly enable downspread on the sink */ |
683 | if (dp_info->dpcd[3] & 0x1) | 699 | if (dp_info->dpcd[3] & 0x1) |
diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h index 402dbe32c234..e390f559e496 100644 --- a/drivers/gpu/drm/radeon/radeon_mode.h +++ b/drivers/gpu/drm/radeon/radeon_mode.h | |||
@@ -690,6 +690,8 @@ extern u8 radeon_dp_getsinktype(struct radeon_connector *radeon_connector); | |||
690 | extern bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector); | 690 | extern bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector); |
691 | extern int radeon_dp_get_panel_mode(struct drm_encoder *encoder, | 691 | extern int radeon_dp_get_panel_mode(struct drm_encoder *encoder, |
692 | struct drm_connector *connector); | 692 | struct drm_connector *connector); |
693 | extern void radeon_dp_set_rx_power_state(struct drm_connector *connector, | ||
694 | u8 power_state); | ||
693 | extern void atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mode); | 695 | extern void atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mode); |
694 | extern void radeon_atom_encoder_init(struct radeon_device *rdev); | 696 | extern void radeon_atom_encoder_init(struct radeon_device *rdev); |
695 | extern void radeon_atom_disp_eng_pll_init(struct radeon_device *rdev); | 697 | extern void radeon_atom_disp_eng_pll_init(struct radeon_device *rdev); |