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>
This commit is contained in:
parent
f3381dfc97
commit
2953da1589
|
@ -603,6 +603,26 @@ bool radeon_dp_needs_link_train(struct radeon_connector *radeon_connector)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void radeon_dp_set_rx_power_state(struct drm_connector *connector,
|
||||||
|
u8 power_state)
|
||||||
|
{
|
||||||
|
struct radeon_connector *radeon_connector = to_radeon_connector(connector);
|
||||||
|
struct radeon_connector_atom_dig *dig_connector;
|
||||||
|
|
||||||
|
if (!radeon_connector->con_priv)
|
||||||
|
return;
|
||||||
|
|
||||||
|
dig_connector = radeon_connector->con_priv;
|
||||||
|
|
||||||
|
/* power up/down the sink */
|
||||||
|
if (dig_connector->dpcd[0] >= 0x11) {
|
||||||
|
radeon_write_dpcd_reg(radeon_connector,
|
||||||
|
DP_SET_POWER, power_state);
|
||||||
|
usleep_range(1000, 2000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
struct radeon_dp_link_train_info {
|
struct radeon_dp_link_train_info {
|
||||||
struct radeon_device *rdev;
|
struct radeon_device *rdev;
|
||||||
struct drm_encoder *encoder;
|
struct drm_encoder *encoder;
|
||||||
|
@ -673,11 +693,7 @@ static int radeon_dp_link_train_init(struct radeon_dp_link_train_info *dp_info)
|
||||||
u8 tmp;
|
u8 tmp;
|
||||||
|
|
||||||
/* power up the sink */
|
/* power up the sink */
|
||||||
if (dp_info->dpcd[0] >= 0x11) {
|
radeon_dp_set_rx_power_state(dp_info->connector, DP_SET_POWER_D0);
|
||||||
radeon_write_dpcd_reg(dp_info->radeon_connector,
|
|
||||||
DP_SET_POWER, DP_SET_POWER_D0);
|
|
||||||
usleep_range(1000, 2000);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* possibly enable downspread on the sink */
|
/* possibly enable downspread on the sink */
|
||||||
if (dp_info->dpcd[3] & 0x1)
|
if (dp_info->dpcd[3] & 0x1)
|
||||||
|
|
|
@ -690,6 +690,8 @@ extern u8 radeon_dp_getsinktype(struct radeon_connector *radeon_connector);
|
||||||
extern bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector);
|
extern bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector);
|
||||||
extern int radeon_dp_get_panel_mode(struct drm_encoder *encoder,
|
extern int radeon_dp_get_panel_mode(struct drm_encoder *encoder,
|
||||||
struct drm_connector *connector);
|
struct drm_connector *connector);
|
||||||
|
extern void radeon_dp_set_rx_power_state(struct drm_connector *connector,
|
||||||
|
u8 power_state);
|
||||||
extern void atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mode);
|
extern void atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mode);
|
||||||
extern void radeon_atom_encoder_init(struct radeon_device *rdev);
|
extern void radeon_atom_encoder_init(struct radeon_device *rdev);
|
||||||
extern void radeon_atom_disp_eng_pll_init(struct radeon_device *rdev);
|
extern void radeon_atom_disp_eng_pll_init(struct radeon_device *rdev);
|
||||||
|
|
Loading…
Reference in New Issue