aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexdeucher@gmail.com>2014-03-17 23:48:15 -0400
committerChristian König <christian.koenig@amd.com>2014-03-25 08:13:15 -0400
commit2953da1589477c9aec85431339d28a8303d47945 (patch)
treef1831e2b0c33bcb2493ddca468b0912a4d7fa62f
parentf3381dfc9745bcd8b6be676ec4f68c52e71d24f1 (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.c26
-rw-r--r--drivers/gpu/drm/radeon/radeon_mode.h2
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
606void 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
606struct radeon_dp_link_train_info { 626struct 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);
690extern bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector); 690extern bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector);
691extern int radeon_dp_get_panel_mode(struct drm_encoder *encoder, 691extern int radeon_dp_get_panel_mode(struct drm_encoder *encoder,
692 struct drm_connector *connector); 692 struct drm_connector *connector);
693extern void radeon_dp_set_rx_power_state(struct drm_connector *connector,
694 u8 power_state);
693extern void atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mode); 695extern void atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mode);
694extern void radeon_atom_encoder_init(struct radeon_device *rdev); 696extern void radeon_atom_encoder_init(struct radeon_device *rdev);
695extern void radeon_atom_disp_eng_pll_init(struct radeon_device *rdev); 697extern void radeon_atom_disp_eng_pll_init(struct radeon_device *rdev);