Commit accde06f authored by Anthony Koo's avatar Anthony Koo Committed by Alex Deucher

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: default avatarAnthony Koo <Anthony.Koo@amd.com>
Reviewed-by: default avatarAric Cyr <Aric.Cyr@amd.com>
Acked-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Acked-by: default avatarHarry Wentland <harry.wentland@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 63a85ff6
...@@ -698,8 +698,10 @@ void dce110_enable_stream(struct pipe_ctx *pipe_ctx) ...@@ -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) ...@@ -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( ...@@ -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( ...@@ -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 = { ...@@ -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( ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 { ...@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment