const struct dc_link *link,
unsigned int *inst_out)
{
- if (dc_is_embedded_signal(link->connector_signal)) {
- /* TODO: just get edp link panel inst for now, fix it */
- return dc_get_edp_link_panel_inst(dc, link, inst_out);
- } else if (dc_is_dp_sst_signal(link->connector_signal)) {
- /* TODO: just set to 1 for now, fix it */
- *inst_out = 1;
- return true;
+ if (!dc || !link || !inst_out)
+ return false;
+
+ if (!dc_is_dp_sst_signal(link->connector_signal)) /* only supoprt DP sst (eDP included) for now */
+ return false;
+
+ for (unsigned int i = 0; i < MAX_PIPES; i++) {
+ if (dc->current_state->res_ctx.pipe_ctx[i].stream &&
+ dc->current_state->res_ctx.pipe_ctx[i].stream->link == link) {
+ /* *inst_out is equal to otg number */
+ if (dc->current_state->res_ctx.pipe_ctx[i].stream_res.tg)
+ *inst_out = dc->current_state->res_ctx.pipe_ctx[i].stream_res.tg->inst;
+ else
+ *inst_out = 0;
+
+ return true;
+ }
}
return false;
return false;
memset(&cmd, 0, sizeof(cmd));
+ memcpy(&cmd.pr_update_state.data, update_state_data, sizeof(struct dmub_cmd_pr_update_state_data));
+
cmd.pr_update_state.header.type = DMUB_CMD__PR;
cmd.pr_update_state.header.sub_type = DMUB_CMD__PR_UPDATE_STATE;
cmd.pr_update_state.header.payload_bytes = sizeof(struct dmub_cmd_pr_update_state_data);
cmd.pr_update_state.data.panel_inst = panel_inst;
- memcpy(&cmd.pr_update_state.data, update_state_data, sizeof(struct dmub_cmd_pr_update_state_data));
-
dc_wake_and_execute_dmub_cmd(dc->ctx, &cmd, DM_DMUB_WAIT_TYPE_WAIT);
return true;
}
return false;
memset(&cmd, 0, sizeof(cmd));
+ memcpy(&cmd.pr_general_cmd.data, general_cmd_data, sizeof(struct dmub_cmd_pr_general_cmd_data));
+
cmd.pr_general_cmd.header.type = DMUB_CMD__PR;
cmd.pr_general_cmd.header.sub_type = DMUB_CMD__PR_GENERAL_CMD;
cmd.pr_general_cmd.header.payload_bytes = sizeof(struct dmub_cmd_pr_general_cmd_data);
cmd.pr_general_cmd.data.panel_inst = panel_inst;
- memcpy(&cmd.pr_general_cmd.data, general_cmd_data, sizeof(struct dmub_cmd_pr_general_cmd_data));
-
dc_wake_and_execute_dmub_cmd(dc->ctx, &cmd, DM_DMUB_WAIT_TYPE_WAIT);
return true;
}
#include "dce/dmub_replay.h"
#include "abm.h"
#include "resource.h"
+#include "link_dp_panel_replay.h"
#define DC_LOGGER \
link->ctx->logger
#define DC_LOGGER_INIT(logger)
if (replay == NULL && force_static)
return false;
- if (!dc_get_edp_link_panel_inst(dc, link, &panel_inst))
+ if (!dp_pr_get_panel_inst(dc, link, &panel_inst))
return false;
/* Set power optimization flag */
unsigned int panel_inst;
enum replay_state pr_state = REPLAY_STATE_0;
- if (!dc_get_edp_link_panel_inst(dc, link, &panel_inst))
+ if (!dp_pr_get_panel_inst(dc, link, &panel_inst))
return false;
if (replay != NULL && link->replay_settings.replay_feature_enabled)
if (!replay)
return false;
- if (!dc_get_edp_link_panel_inst(dc, link, &panel_inst))
+ if (!dp_pr_get_panel_inst(dc, link, &panel_inst))
return false;
replay_context.aux_inst = link->ddc->ddc_pin->hw_info.ddc_channel;
DC_LOGGER_INIT(link->ctx->logger);
- if (dc_get_edp_link_panel_inst(dc, link, &panel_inst))
+ if (dp_pr_get_panel_inst(dc, link, &panel_inst))
cmd_data->panel_inst = panel_inst;
else {
DC_LOG_DC("%s(): get edp panel inst fail ", __func__);
if (!replay)
return false;
- if (!dc_get_edp_link_panel_inst(dc, link, &panel_inst))
+ if (!dp_pr_get_panel_inst(dc, link, &panel_inst))
return false;
if (coasting_vtotal && (link->replay_settings.coasting_vtotal != coasting_vtotal ||
struct dmub_replay *replay = dc->res_pool->replay;
unsigned int panel_inst;
- if (!dc_get_edp_link_panel_inst(dc, link, &panel_inst))
+ if (!dp_pr_get_panel_inst(dc, link, &panel_inst))
return false;
if (!residency)
struct dmub_replay *replay = dc->res_pool->replay;
unsigned int panel_inst;
- if (!dc_get_edp_link_panel_inst(dc, link, &panel_inst))
+ if (!dp_pr_get_panel_inst(dc, link, &panel_inst))
return false;
/* Only both power and coasting vtotal changed, this func could return true */