Commit 18400f91 authored by Yongqiang Sun's avatar Yongqiang Sun Committed by Alex Deucher
Browse files

drm/amd/display: Add panel cntl id for set backlight level.



[Why & How]
Add panel cntl instance when calling set backlight.

Signed-off-by: default avatarYongqiang Sun <yongqiang.sun@amd.com>
Reviewed-by: default avatarAnthony Koo <Anthony.Koo@amd.com>
Acked-by: default avatarAurabindo Pillai <aurabindo.pillai@amd.com>
Acked-by: default avatarTony Cheng <Tony.Cheng@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 0ed3bcc4
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -2210,7 +2210,9 @@ static void commit_planes_do_stream_update(struct dc *dc,

				if (should_program_abm) {
					if (*stream_update->abm_level == ABM_LEVEL_IMMEDIATE_DISABLE) {
						pipe_ctx->stream_res.abm->funcs->set_abm_immediate_disable(pipe_ctx->stream_res.abm);
						pipe_ctx->stream_res.abm->funcs->set_abm_immediate_disable(
								pipe_ctx->stream_res.abm,
								pipe_ctx->stream->link->panel_cntl->inst);
					} else {
						pipe_ctx->stream_res.abm->funcs->set_abm_level(
							pipe_ctx->stream_res.abm, stream->abm_level);
+2 −1
Original line number Diff line number Diff line
@@ -2552,6 +2552,7 @@ bool dc_link_set_backlight_level(const struct dc_link *link,
				backlight_pwm_u16_16,
				frame_ramp,
				controller_id,
				link->panel_cntl->inst,
				fw_set_brightness);
	}

@@ -2564,7 +2565,7 @@ bool dc_link_set_abm_disable(const struct dc_link *link)
	bool success = false;

	if (abm)
		success = abm->funcs->set_abm_immediate_disable(abm);
		success = abm->funcs->set_abm_immediate_disable(abm, link->panel_cntl->inst);

	return success;
}
+9 −6
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@

#define MCP_DISABLE_ABM_IMMEDIATELY 255

static bool dce_abm_set_pipe(struct abm *abm, uint32_t controller_id)
static bool dce_abm_set_pipe(struct abm *abm, uint32_t controller_id, uint32_t panel_inst)
{
	struct dce_abm *abm_dce = TO_DCE_ABM(abm);
	uint32_t rampingBoundary = 0xFFFF;
@@ -201,7 +201,8 @@ static void dmcu_set_backlight_level(
	struct dce_abm *abm_dce,
	uint32_t backlight_pwm_u16_16,
	uint32_t frame_ramp,
	uint32_t controller_id)
	uint32_t controller_id,
	uint32_t panel_id)
{
	unsigned int backlight_8_bit = 0;
	uint32_t s2;
@@ -213,7 +214,7 @@ static void dmcu_set_backlight_level(
		// Take MSB of fractional part since backlight is not max
		backlight_8_bit = (backlight_pwm_u16_16 >> 8) & 0xFF;

	dce_abm_set_pipe(&abm_dce->base, controller_id);
	dce_abm_set_pipe(&abm_dce->base, controller_id, panel_id);

	/* waitDMCUReadyForCmd */
	REG_WAIT(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT,
@@ -331,14 +332,14 @@ static bool dce_abm_set_level(struct abm *abm, uint32_t level)
	return true;
}

static bool dce_abm_immediate_disable(struct abm *abm)
static bool dce_abm_immediate_disable(struct abm *abm, uint32_t panel_inst)
{
	struct dce_abm *abm_dce = TO_DCE_ABM(abm);

	if (abm->dmcu_is_running == false)
		return true;

	dce_abm_set_pipe(abm, MCP_DISABLE_ABM_IMMEDIATELY);
	dce_abm_set_pipe(abm, MCP_DISABLE_ABM_IMMEDIATELY, panel_inst);

	abm->stored_backlight_registers.BL_PWM_CNTL =
		REG_READ(BL_PWM_CNTL);
@@ -420,6 +421,7 @@ static bool dce_abm_set_backlight_level_pwm(
		unsigned int backlight_pwm_u16_16,
		unsigned int frame_ramp,
		unsigned int controller_id,
		unsigned int panel_inst,
		bool fw_set_brightness)
{
	struct dce_abm *abm_dce = TO_DCE_ABM(abm);
@@ -432,7 +434,8 @@ static bool dce_abm_set_backlight_level_pwm(
		dmcu_set_backlight_level(abm_dce,
				backlight_pwm_u16_16,
				frame_ramp,
				controller_id);
				controller_id,
				panel_inst);
	else
		driver_set_backlight_level(abm_dce, backlight_pwm_u16_16);

+10 −6
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@

#define DISABLE_ABM_IMMEDIATELY 255

static bool dmub_abm_set_pipe(struct abm *abm, uint32_t otg_inst)
static bool dmub_abm_set_pipe(struct abm *abm, uint32_t otg_inst, uint32_t panel_inst)
{
	union dmub_rb_cmd cmd;
	struct dc_context *dc = abm->ctx;
@@ -59,6 +59,7 @@ static bool dmub_abm_set_pipe(struct abm *abm, uint32_t otg_inst)
	cmd.abm_set_pipe.header.type = DMUB_CMD__ABM;
	cmd.abm_set_pipe.header.sub_type = DMUB_CMD__ABM_SET_PIPE;
	cmd.abm_set_pipe.abm_set_pipe_data.otg_inst = otg_inst;
	cmd.abm_set_pipe.abm_set_pipe_data.panel_inst = panel_inst;
	cmd.abm_set_pipe.abm_set_pipe_data.ramping_boundary = ramping_boundary;
	cmd.abm_set_pipe.header.payload_bytes = sizeof(struct dmub_cmd_abm_set_pipe_data);

@@ -120,7 +121,8 @@ static void dmcub_set_backlight_level(
	struct dce_abm *dce_abm,
	uint32_t backlight_pwm_u16_16,
	uint32_t frame_ramp,
	uint32_t otg_inst)
	uint32_t otg_inst,
	uint32_t panel_inst)
{
	union dmub_rb_cmd cmd;
	struct dc_context *dc = dce_abm->base.ctx;
@@ -134,7 +136,7 @@ static void dmcub_set_backlight_level(
		// Take MSB of fractional part since backlight is not max
		backlight_8_bit = (backlight_pwm_u16_16 >> 8) & 0xFF;

	dmub_abm_set_pipe(&dce_abm->base, otg_inst);
	dmub_abm_set_pipe(&dce_abm->base, otg_inst, panel_inst);

	REG_UPDATE(BL1_PWM_USER_LEVEL, BL1_PWM_USER_LEVEL, backlight_pwm_u16_16);

@@ -257,11 +259,11 @@ static bool dmub_abm_set_level(struct abm *abm, uint32_t level)
	return true;
}

static bool dmub_abm_immediate_disable(struct abm *abm)
static bool dmub_abm_immediate_disable(struct abm *abm, uint32_t panel_inst)
{
	struct dce_abm *dce_abm = TO_DMUB_ABM(abm);

	dmub_abm_set_pipe(abm, DISABLE_ABM_IMMEDIATELY);
	dmub_abm_set_pipe(abm, DISABLE_ABM_IMMEDIATELY, panel_inst);

	abm->stored_backlight_registers.BL_PWM_CNTL =
		REG_READ(BL_PWM_CNTL);
@@ -338,6 +340,7 @@ static bool dmub_abm_set_backlight_level_pwm(
		unsigned int backlight_pwm_u16_16,
		unsigned int frame_ramp,
		unsigned int otg_inst,
		uint32_t panel_inst,
		bool fw_set_brightness)
{
	struct dce_abm *dce_abm = TO_DMUB_ABM(abm);
@@ -345,7 +348,8 @@ static bool dmub_abm_set_backlight_level_pwm(
	dmcub_set_backlight_level(dce_abm,
			backlight_pwm_u16_16,
			frame_ramp,
			otg_inst);
			otg_inst,
			panel_inst);

	return true;
}
+6 −3
Original line number Diff line number Diff line
@@ -903,7 +903,8 @@ static void dcn10_reset_back_end_for_pipe(
	if (pipe_ctx->top_pipe == NULL) {

		if (pipe_ctx->stream_res.abm)
			pipe_ctx->stream_res.abm->funcs->set_abm_immediate_disable(pipe_ctx->stream_res.abm);
			pipe_ctx->stream_res.abm->funcs->set_abm_immediate_disable(pipe_ctx->stream_res.abm,
					pipe_ctx->stream->link->panel_cntl->inst);

		pipe_ctx->stream_res.tg->funcs->disable_crtc(pipe_ctx->stream_res.tg);

@@ -2474,12 +2475,14 @@ void dcn10_blank_pixel_data(
		if (stream_res->tg->funcs->set_blank)
			stream_res->tg->funcs->set_blank(stream_res->tg, blank);
		if (stream_res->abm) {
			stream_res->abm->funcs->set_pipe(stream_res->abm, stream_res->tg->inst + 1);
			stream_res->abm->funcs->set_pipe(stream_res->abm, stream_res->tg->inst + 1,
					stream->link->panel_cntl->inst);
			stream_res->abm->funcs->set_abm_level(stream_res->abm, stream->abm_level);
		}
	} else if (blank) {
		if (stream_res->abm)
			stream_res->abm->funcs->set_abm_immediate_disable(stream_res->abm);
			stream_res->abm->funcs->set_abm_immediate_disable(stream_res->abm,
					stream->link->panel_cntl->inst);
		if (stream_res->tg->funcs->set_blank)
			stream_res->tg->funcs->set_blank(stream_res->tg, blank);
	}
Loading