]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
drm/amd/display: Fixed dim around 1sec when resume from S3 (v2)
authorYongqiang Sun <yongqiang.sun@amd.com>
Mon, 5 Mar 2018 15:28:34 +0000 (10:28 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 14 Mar 2018 21:01:14 +0000 (16:01 -0500)
root cause:
DMCU try to perform a smoothness brightness change.Incorrect initial
brightness level causes the 1 sec dim.
Change:
Cache brightness level in stream, and clear it when edp backlight on.
If brightness level in stream is 0, set brightness with ramp value is 0.
DMCU will set the brightness without smoothness transition.

v2: squash in null pointer fix (Harry)

Signed-off-by: Yongqiang Sun <yongqiang.sun@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Acked-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_link.c
drivers/gpu/drm/amd/display/dc/dc_stream.h
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c

index f8c09273e0f1010dfcc10010e27f8c8dad5167c6..eeb04471b2f50699b033574f46dcfea042d00633 100644 (file)
@@ -1960,6 +1960,13 @@ bool dc_link_set_backlight_level(const struct dc_link *link, uint32_t level,
                (abm->funcs->set_backlight_level == NULL))
                return false;
 
+       if (stream) {
+               if (stream->bl_pwm_level == 0)
+                       frame_ramp = 0;
+
+               ((struct dc_stream_state *)stream)->bl_pwm_level = level;
+       }
+
        use_smooth_brightness = dmcu->funcs->is_dmcu_initialized(dmcu);
 
        DC_LOG_BACKLIGHT("New Backlight level: %d (0x%X)\n", level, level);
index 13e5ac9cfe134c651600c52f19a076427332a306..d017df56b2ba13d3f0e081a4484426e286a71bbe 100644 (file)
@@ -78,6 +78,7 @@ struct dc_stream_state {
 
        /* DMCU info */
        unsigned int abm_level;
+       unsigned int bl_pwm_level;
 
        /* from core_stream struct */
        struct dc_context *ctx;
index 3e9cd1b7f32c57e85f8dc67a2d0804a568cbd20e..30dd62f0f5fa413c7e1e8376a73c964ac504f4f5 100644 (file)
@@ -1006,8 +1006,10 @@ void dce110_unblank_stream(struct pipe_ctx *pipe_ctx,
        if (dc_is_dp_signal(pipe_ctx->stream->signal))
                pipe_ctx->stream_res.stream_enc->funcs->dp_unblank(pipe_ctx->stream_res.stream_enc, &params);
 
-       if (link->local_sink && link->local_sink->sink_signal == SIGNAL_TYPE_EDP)
+       if (link->local_sink && link->local_sink->sink_signal == SIGNAL_TYPE_EDP) {
                link->dc->hwss.edp_backlight_control(link, true);
+               stream->bl_pwm_level = 0;
+       }
 }
 void dce110_blank_stream(struct pipe_ctx *pipe_ctx)
 {