mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 02:53:36 +02:00
drm/amd/display: Improvement for handling edp link training fails
[Why] The eDP retrain will cause the DPCD 300 to be reset to default. And cause the brightness can't be set correctly. [How] delete the call to edp panel power control in both enable_link_output/disable_link_output entirely and only call edp panel control in enable_link_dp and disable_link_dp once. Reviewed-by: Charlene Liu <Charlene.Liu@amd.com> Acked-by: Qingqing Zhuo <qingqing.zhuo@amd.com> Signed-off-by: Jingwen Zhu <Jingwen.Zhu@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
56d8ce9d8c
commit
e0cce12251
|
|
@ -3031,10 +3031,12 @@ void dce110_enable_dp_link_output(
|
||||||
const struct link_hwss *link_hwss = get_link_hwss(link, link_res);
|
const struct link_hwss *link_hwss = get_link_hwss(link, link_res);
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add the logic to extract BOTH power up and power down sequences
|
||||||
|
* from enable/disable link output and only call edp panel control
|
||||||
|
* in enable_link_dp and disable_link_dp once.
|
||||||
|
*/
|
||||||
if (link->connector_signal == SIGNAL_TYPE_EDP) {
|
if (link->connector_signal == SIGNAL_TYPE_EDP) {
|
||||||
if (!link->dc->config.edp_no_power_sequencing)
|
|
||||||
link->dc->hwss.edp_power_control(link, true);
|
|
||||||
link->dc->hwss.edp_wait_for_hpd_ready(link, true);
|
link->dc->hwss.edp_wait_for_hpd_ready(link, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3096,11 +3098,12 @@ void dce110_disable_link_output(struct dc_link *link,
|
||||||
|
|
||||||
link_hwss->disable_link_output(link, link_res, signal);
|
link_hwss->disable_link_output(link, link_res, signal);
|
||||||
link->phy_state.symclk_state = SYMCLK_OFF_TX_OFF;
|
link->phy_state.symclk_state = SYMCLK_OFF_TX_OFF;
|
||||||
|
/*
|
||||||
if (signal == SIGNAL_TYPE_EDP &&
|
* Add the logic to extract BOTH power up and power down sequences
|
||||||
link->dc->hwss.edp_backlight_control)
|
* from enable/disable link output and only call edp panel control
|
||||||
link->dc->hwss.edp_power_control(link, false);
|
* in enable_link_dp and disable_link_dp once.
|
||||||
else if (dmcu != NULL && dmcu->funcs->lock_phy)
|
*/
|
||||||
|
if (dmcu != NULL && dmcu->funcs->lock_phy)
|
||||||
dmcu->funcs->unlock_phy(dmcu);
|
dmcu->funcs->unlock_phy(dmcu);
|
||||||
dc->link_srv->dp_trace_source_sequence(link, DPCD_SOURCE_SEQ_AFTER_DISABLE_LINK_PHY);
|
dc->link_srv->dp_trace_source_sequence(link, DPCD_SOURCE_SEQ_AFTER_DISABLE_LINK_PHY);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1927,6 +1927,11 @@ static void disable_link_dp(struct dc_link *link,
|
||||||
|
|
||||||
dp_disable_link_phy(link, link_res, signal);
|
dp_disable_link_phy(link, link_res, signal);
|
||||||
|
|
||||||
|
if (link->connector_signal == SIGNAL_TYPE_EDP) {
|
||||||
|
if (!link->dc->config.edp_no_power_sequencing)
|
||||||
|
link->dc->hwss.edp_power_control(link, false);
|
||||||
|
}
|
||||||
|
|
||||||
if (signal == SIGNAL_TYPE_DISPLAY_PORT_MST)
|
if (signal == SIGNAL_TYPE_DISPLAY_PORT_MST)
|
||||||
/* set the sink to SST mode after disabling the link */
|
/* set the sink to SST mode after disabling the link */
|
||||||
enable_mst_on_sink(link, false);
|
enable_mst_on_sink(link, false);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user