mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-04 08:08:54 +00:00
drm/amd/display: Add function pointers for panel related hw functions
[Why] Make panel backlight and power on/off functions into hardware specific function pointers [How] Add function pointers for panel related hw functions - is_panel_powered_on - is_panel_backlight_on Signed-off-by: Anthony Koo <Anthony.Koo@amd.com> Reviewed-by: Aric Cyr <Aric.Cyr@amd.com> Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com> Acked-by: Harry Wentland <harry.wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
63a85ff6c3
commit
accde06fcb
6 changed files with 22 additions and 5 deletions
|
@ -698,8 +698,10 @@ void dce110_enable_stream(struct pipe_ctx *pipe_ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*todo: cloned in stream enc, fix*/
|
/*todo: cloned in stream enc, fix*/
|
||||||
static bool is_panel_backlight_on(struct dce_hwseq *hws)
|
bool dce110_is_panel_backlight_on(struct dc_link *link)
|
||||||
{
|
{
|
||||||
|
struct dc_context *ctx = link->ctx;
|
||||||
|
struct dce_hwseq *hws = ctx->dc->hwseq;
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
|
|
||||||
REG_GET(LVTMA_PWRSEQ_CNTL, LVTMA_BLON, &value);
|
REG_GET(LVTMA_PWRSEQ_CNTL, LVTMA_BLON, &value);
|
||||||
|
@ -707,11 +709,12 @@ static bool is_panel_backlight_on(struct dce_hwseq *hws)
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_panel_powered_on(struct dce_hwseq *hws)
|
bool dce110_is_panel_powered_on(struct dc_link *link)
|
||||||
{
|
{
|
||||||
|
struct dc_context *ctx = link->ctx;
|
||||||
|
struct dce_hwseq *hws = ctx->dc->hwseq;
|
||||||
uint32_t pwr_seq_state, dig_on, dig_on_ovrd;
|
uint32_t pwr_seq_state, dig_on, dig_on_ovrd;
|
||||||
|
|
||||||
|
|
||||||
REG_GET(LVTMA_PWRSEQ_STATE, LVTMA_PWRSEQ_TARGET_STATE_R, &pwr_seq_state);
|
REG_GET(LVTMA_PWRSEQ_STATE, LVTMA_PWRSEQ_TARGET_STATE_R, &pwr_seq_state);
|
||||||
|
|
||||||
REG_GET_2(LVTMA_PWRSEQ_CNTL, LVTMA_DIGON, &dig_on, LVTMA_DIGON_OVRD, &dig_on_ovrd);
|
REG_GET_2(LVTMA_PWRSEQ_CNTL, LVTMA_DIGON, &dig_on, LVTMA_DIGON_OVRD, &dig_on_ovrd);
|
||||||
|
@ -818,7 +821,7 @@ void dce110_edp_power_control(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (power_up != is_panel_powered_on(hwseq)) {
|
if (power_up != hwseq->funcs.is_panel_powered_on(link)) {
|
||||||
/* Send VBIOS command to prompt eDP panel power */
|
/* Send VBIOS command to prompt eDP panel power */
|
||||||
if (power_up) {
|
if (power_up) {
|
||||||
unsigned long long current_ts = dm_get_timestamp(ctx);
|
unsigned long long current_ts = dm_get_timestamp(ctx);
|
||||||
|
@ -898,7 +901,7 @@ void dce110_edp_backlight_control(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enable && is_panel_backlight_on(hws)) {
|
if (enable && hws->funcs.is_panel_backlight_on(link)) {
|
||||||
DC_LOG_HW_RESUME_S3(
|
DC_LOG_HW_RESUME_S3(
|
||||||
"%s: panel already powered up. Do nothing.\n",
|
"%s: panel already powered up. Do nothing.\n",
|
||||||
__func__);
|
__func__);
|
||||||
|
@ -2764,6 +2767,8 @@ static const struct hwseq_private_funcs dce110_private_funcs = {
|
||||||
.disable_stream_gating = NULL,
|
.disable_stream_gating = NULL,
|
||||||
.enable_stream_gating = NULL,
|
.enable_stream_gating = NULL,
|
||||||
.edp_backlight_control = dce110_edp_backlight_control,
|
.edp_backlight_control = dce110_edp_backlight_control,
|
||||||
|
.is_panel_backlight_on = dce110_is_panel_backlight_on,
|
||||||
|
.is_panel_powered_on = dce110_is_panel_powered_on,
|
||||||
};
|
};
|
||||||
|
|
||||||
void dce110_hw_sequencer_construct(struct dc *dc)
|
void dce110_hw_sequencer_construct(struct dc *dc)
|
||||||
|
|
|
@ -85,5 +85,9 @@ void dce110_edp_wait_for_hpd_ready(
|
||||||
struct dc_link *link,
|
struct dc_link *link,
|
||||||
bool power_up);
|
bool power_up);
|
||||||
|
|
||||||
|
bool dce110_is_panel_backlight_on(struct dc_link *link);
|
||||||
|
|
||||||
|
bool dce110_is_panel_powered_on(struct dc_link *link);
|
||||||
|
|
||||||
#endif /* __DC_HWSS_DCE110_H__ */
|
#endif /* __DC_HWSS_DCE110_H__ */
|
||||||
|
|
||||||
|
|
|
@ -87,6 +87,8 @@ static const struct hwseq_private_funcs dcn10_private_funcs = {
|
||||||
.reset_hw_ctx_wrap = dcn10_reset_hw_ctx_wrap,
|
.reset_hw_ctx_wrap = dcn10_reset_hw_ctx_wrap,
|
||||||
.enable_stream_timing = dcn10_enable_stream_timing,
|
.enable_stream_timing = dcn10_enable_stream_timing,
|
||||||
.edp_backlight_control = dce110_edp_backlight_control,
|
.edp_backlight_control = dce110_edp_backlight_control,
|
||||||
|
.is_panel_backlight_on = dce110_is_panel_backlight_on,
|
||||||
|
.is_panel_powered_on = dce110_is_panel_powered_on,
|
||||||
.disable_stream_gating = NULL,
|
.disable_stream_gating = NULL,
|
||||||
.enable_stream_gating = NULL,
|
.enable_stream_gating = NULL,
|
||||||
.setup_vupdate_interrupt = dcn10_setup_vupdate_interrupt,
|
.setup_vupdate_interrupt = dcn10_setup_vupdate_interrupt,
|
||||||
|
|
|
@ -97,6 +97,8 @@ static const struct hwseq_private_funcs dcn20_private_funcs = {
|
||||||
.reset_hw_ctx_wrap = dcn20_reset_hw_ctx_wrap,
|
.reset_hw_ctx_wrap = dcn20_reset_hw_ctx_wrap,
|
||||||
.enable_stream_timing = dcn20_enable_stream_timing,
|
.enable_stream_timing = dcn20_enable_stream_timing,
|
||||||
.edp_backlight_control = dce110_edp_backlight_control,
|
.edp_backlight_control = dce110_edp_backlight_control,
|
||||||
|
.is_panel_backlight_on = dce110_is_panel_backlight_on,
|
||||||
|
.is_panel_powered_on = dce110_is_panel_powered_on,
|
||||||
.disable_stream_gating = dcn20_disable_stream_gating,
|
.disable_stream_gating = dcn20_disable_stream_gating,
|
||||||
.enable_stream_gating = dcn20_enable_stream_gating,
|
.enable_stream_gating = dcn20_enable_stream_gating,
|
||||||
.setup_vupdate_interrupt = dcn20_setup_vupdate_interrupt,
|
.setup_vupdate_interrupt = dcn20_setup_vupdate_interrupt,
|
||||||
|
|
|
@ -105,6 +105,8 @@ static const struct hwseq_private_funcs dcn21_private_funcs = {
|
||||||
.reset_hw_ctx_wrap = dcn20_reset_hw_ctx_wrap,
|
.reset_hw_ctx_wrap = dcn20_reset_hw_ctx_wrap,
|
||||||
.enable_stream_timing = dcn20_enable_stream_timing,
|
.enable_stream_timing = dcn20_enable_stream_timing,
|
||||||
.edp_backlight_control = dce110_edp_backlight_control,
|
.edp_backlight_control = dce110_edp_backlight_control,
|
||||||
|
.is_panel_backlight_on = dce110_is_panel_backlight_on,
|
||||||
|
.is_panel_powered_on = dce110_is_panel_powered_on,
|
||||||
.disable_stream_gating = dcn20_disable_stream_gating,
|
.disable_stream_gating = dcn20_disable_stream_gating,
|
||||||
.enable_stream_gating = dcn20_enable_stream_gating,
|
.enable_stream_gating = dcn20_enable_stream_gating,
|
||||||
.setup_vupdate_interrupt = dcn20_setup_vupdate_interrupt,
|
.setup_vupdate_interrupt = dcn20_setup_vupdate_interrupt,
|
||||||
|
|
|
@ -97,6 +97,8 @@ struct hwseq_private_funcs {
|
||||||
struct dc *dc);
|
struct dc *dc);
|
||||||
void (*edp_backlight_control)(struct dc_link *link,
|
void (*edp_backlight_control)(struct dc_link *link,
|
||||||
bool enable);
|
bool enable);
|
||||||
|
bool (*is_panel_backlight_on)(struct dc_link *link);
|
||||||
|
bool (*is_panel_powered_on)(struct dc_link *link);
|
||||||
void (*setup_vupdate_interrupt)(struct dc *dc,
|
void (*setup_vupdate_interrupt)(struct dc *dc,
|
||||||
struct pipe_ctx *pipe_ctx);
|
struct pipe_ctx *pipe_ctx);
|
||||||
bool (*did_underflow_occur)(struct dc *dc, struct pipe_ctx *pipe_ctx);
|
bool (*did_underflow_occur)(struct dc *dc, struct pipe_ctx *pipe_ctx);
|
||||||
|
|
Loading…
Reference in a new issue