drm/amd/display: Expose dither setting functionality to Linux
authorLeo (Sunpeng) Li <sunpeng.li@amd.com>
Tue, 6 Feb 2018 14:50:49 +0000 (09:50 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 19 Feb 2018 19:20:08 +0000 (14:20 -0500)
We will need this to disable dither for CRC capture.

Signed-off-by: Leo (Sunpeng) Li <sunpeng.li@amd.com>
Reviewed-by: Harry Wentland <Harry.Wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc.c
drivers/gpu/drm/amd/display/dc/dc_stream.h

index a78e0364b1b26a2db121f6cf0de4e7f9b489b85e..ea5c35166ffac46a60b382fb45d2d83202d13a79 100644 (file)
@@ -300,6 +300,37 @@ bool dc_stream_get_crc(struct dc *dc, struct dc_stream_state *stream,
        return false;
 }
 
+void dc_stream_set_dither_option(struct dc_stream_state *stream,
+               enum dc_dither_option option)
+{
+       struct bit_depth_reduction_params params;
+       struct dc_link *link = stream->status.link;
+       struct pipe_ctx *pipes = NULL;
+       int i;
+
+       for (i = 0; i < MAX_PIPES; i++) {
+               if (link->dc->current_state->res_ctx.pipe_ctx[i].stream ==
+                               stream) {
+                       pipes = &link->dc->current_state->res_ctx.pipe_ctx[i];
+                       break;
+               }
+       }
+
+       memset(&params, 0, sizeof(params));
+       if (!pipes)
+               return;
+       if (option > DITHER_OPTION_MAX)
+               return;
+
+       stream->dither_option = option;
+
+       resource_build_bit_depth_reduction_params(stream,
+                               &params);
+       stream->bit_depth_params = params;
+       pipes->stream_res.opp->funcs->
+               opp_program_bit_depth_reduction(pipes->stream_res.opp, &params);
+}
+
 void dc_stream_set_static_screen_events(struct dc *dc,
                struct dc_stream_state **streams,
                int num_streams,
index 2d2472ba97bfd6cf3f543041ba4cd703b73a2879..78a2bbe0b2727a973f03425d1b1bd0af1f945e84 100644 (file)
@@ -287,6 +287,9 @@ void dc_stream_set_static_screen_events(struct dc *dc,
                                        int num_streams,
                                        const struct dc_static_screen_events *events);
 
+void dc_stream_set_dither_option(struct dc_stream_state *stream,
+                                enum dc_dither_option option);
+
 
 bool dc_stream_adjust_vmin_vmax(struct dc *dc,
                                struct dc_stream_state **stream,