Commit 4b0e95d1 authored by Yongqiang Sun's avatar Yongqiang Sun Committed by Alex Deucher
Browse files

drm/amd/display: Add set backlight to hw sequencer.



[Why & How]
Add set backlight to hw sequencer, dmu communication will
be handled in hw sequencer for new asics.

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>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 8d829836
Loading
Loading
Loading
Loading
+11 −24
Original line number Diff line number Diff line
@@ -2509,35 +2509,21 @@ bool dc_link_set_backlight_level(const struct dc_link *link,
		uint32_t frame_ramp)
{
	struct dc  *dc = link->ctx->dc;
	struct abm *abm = get_abm_from_stream_res(link);
	struct dmcu *dmcu = dc->res_pool->dmcu;
	unsigned int controller_id = 0;
	bool fw_set_brightness = true;
	int i;
	DC_LOGGER_INIT(link->ctx->logger);

	if (abm == NULL || (abm->funcs->set_backlight_level_pwm == NULL))
		return false;

	if (dmcu)
		fw_set_brightness = dmcu->funcs->is_dmcu_initialized(dmcu);

	DC_LOGGER_INIT(link->ctx->logger);
	DC_LOG_BACKLIGHT("New Backlight level: %d (0x%X)\n",
			backlight_pwm_u16_16, backlight_pwm_u16_16);

	if (dc_is_embedded_signal(link->connector_signal)) {
		struct pipe_ctx *pipe_ctx = NULL;

		for (i = 0; i < MAX_PIPES; i++) {
			if (dc->current_state->res_ctx.pipe_ctx[i].stream) {
				if (dc->current_state->res_ctx.
						pipe_ctx[i].stream->link
						== link) {
					/* DMCU -1 for all controller id values,
					 * therefore +1 here
					 */
					controller_id =
						dc->current_state->
						res_ctx.pipe_ctx[i].stream_res.tg->inst +
						1;
					pipe_ctx = &dc->current_state->res_ctx.pipe_ctx[i];

					/* Disable brightness ramping when the display is blanked
					 * as it can hang the DMCU
@@ -2547,13 +2533,14 @@ bool dc_link_set_backlight_level(const struct dc_link *link,
				}
			}
		}
		abm->funcs->set_backlight_level_pwm(
				abm,

		if (pipe_ctx == NULL)
			ASSERT(false);

		dc->hwss.set_backlight_level(
				pipe_ctx,
				backlight_pwm_u16_16,
				frame_ramp,
				controller_id,
				link->panel_cntl->inst,
				fw_set_brightness);
				frame_ramp);
	}

	return true;
+33 −1
Original line number Diff line number Diff line
@@ -2714,6 +2714,37 @@ void dce110_set_cursor_attribute(struct pipe_ctx *pipe_ctx)
				pipe_ctx->plane_res.xfm, attributes);
}

bool dce110_set_backlight_level(struct pipe_ctx *pipe_ctx,
		uint32_t backlight_pwm_u16_16,
		uint32_t frame_ramp)
{
	struct dc_link *link = pipe_ctx->stream->link;
	struct dc  *dc = link->ctx->dc;
	struct abm *abm = pipe_ctx->stream_res.abm;
	struct dmcu *dmcu = dc->res_pool->dmcu;
	bool fw_set_brightness = true;
	/* DMCU -1 for all controller id values,
	 * therefore +1 here
	 */
	uint32_t controller_id = pipe_ctx->stream_res.tg->inst + 1;

	if (abm == NULL || (abm->funcs->set_backlight_level_pwm == NULL))
		return false;

	if (dmcu)
		fw_set_brightness = dmcu->funcs->is_dmcu_initialized(dmcu);

	abm->funcs->set_backlight_level_pwm(
			abm,
			backlight_pwm_u16_16,
			frame_ramp,
			controller_id,
			link->panel_cntl->inst,
			fw_set_brightness);

	return true;
}

static const struct hw_sequencer_funcs dce110_funcs = {
	.program_gamut_remap = program_gamut_remap,
	.program_output_csc = program_output_csc,
@@ -2747,7 +2778,8 @@ static const struct hw_sequencer_funcs dce110_funcs = {
	.edp_power_control = dce110_edp_power_control,
	.edp_wait_for_hpd_ready = dce110_edp_wait_for_hpd_ready,
	.set_cursor_position = dce110_set_cursor_position,
	.set_cursor_attribute = dce110_set_cursor_attribute
	.set_cursor_attribute = dce110_set_cursor_attribute,
	.set_backlight_level = dce110_set_backlight_level,
};

static const struct hwseq_private_funcs dce110_private_funcs = {
+4 −0
Original line number Diff line number Diff line
@@ -85,5 +85,9 @@ void dce110_edp_wait_for_hpd_ready(
		struct dc_link *link,
		bool power_up);

bool dce110_set_backlight_level(struct pipe_ctx *pipe_ctx,
		uint32_t backlight_pwm_u16_16,
		uint32_t frame_ramp);

#endif /* __DC_HWSS_DCE110_H__ */
+1 −0
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ static const struct hw_sequencer_funcs dcn10_funcs = {
	.set_clock = dcn10_set_clock,
	.get_clock = dcn10_get_clock,
	.get_vupdate_offset_from_vsync = dcn10_get_vupdate_offset_from_vsync,
	.set_backlight_level = dce110_set_backlight_level,
};

static const struct hwseq_private_funcs dcn10_private_funcs = {
+1 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ static const struct hw_sequencer_funcs dcn20_funcs = {
	.init_vm_ctx = dcn20_init_vm_ctx,
	.set_flip_control_gsl = dcn20_set_flip_control_gsl,
	.get_vupdate_offset_from_vsync = dcn10_get_vupdate_offset_from_vsync,
	.set_backlight_level = dce110_set_backlight_level,
};

static const struct hwseq_private_funcs dcn20_private_funcs = {
Loading