}
 
        /* Configure dithering */
-       if (!dm_need_crc_dither(source))
+       if (!dm_need_crc_dither(source)) {
                dc_stream_set_dither_option(stream_state, DITHER_OPTION_TRUN8);
-       else
+               dc_stream_set_dyn_expansion(stream_state->ctx->dc, stream_state,
+                                           DYN_EXPANSION_DISABLE);
+       } else {
                dc_stream_set_dither_option(stream_state,
                                            DITHER_OPTION_DEFAULT);
+               dc_stream_set_dyn_expansion(stream_state->ctx->dc, stream_state,
+                                           DYN_EXPANSION_AUTO);
+       }
 
 unlock:
        mutex_unlock(&adev->dm.dc_lock);
 
        return false;
 }
 
+void dc_stream_set_dyn_expansion(struct dc *dc, struct dc_stream_state *stream,
+               enum dc_dynamic_expansion option)
+{
+       /* OPP FMT dyn expansion updates*/
+       int i = 0;
+       struct pipe_ctx *pipe_ctx;
+
+       for (i = 0; i < MAX_PIPES; i++) {
+               if (dc->current_state->res_ctx.pipe_ctx[i].stream
+                               == stream) {
+                       pipe_ctx = &dc->current_state->res_ctx.pipe_ctx[i];
+                       pipe_ctx->stream_res.opp->dyn_expansion = option;
+                       pipe_ctx->stream_res.opp->funcs->opp_set_dyn_expansion(
+                                       pipe_ctx->stream_res.opp,
+                                       COLOR_SPACE_YCBCR601,
+                                       stream->timing.display_color_depth,
+                                       stream->signal);
+               }
+       }
+}
+
 void dc_stream_set_dither_option(struct dc_stream_state *stream,
                enum dc_dither_option option)
 {
 
        QUANTIZATION_RANGE_LIMITED
 };
 
+enum dc_dynamic_expansion {
+       DYN_EXPANSION_AUTO,
+       DYN_EXPANSION_DISABLE
+};
+
 /* XFM */
 
 /* used in  struct dc_plane_state */
 
                                        int num_streams,
                                        const struct dc_static_screen_events *events);
 
+void dc_stream_set_dyn_expansion(struct dc *dc, struct dc_stream_state *stream,
+               enum dc_dynamic_expansion option);
+
 void dc_stream_set_dither_option(struct dc_stream_state *stream,
                                 enum dc_dither_option option);
 
 
                        FMT_DYNAMIC_EXP_EN, 0,
                        FMT_DYNAMIC_EXP_MODE, 0);
 
+       if (opp->dyn_expansion == DYN_EXPANSION_DISABLE)
+               return;
+
        /*00 - 10-bit -> 12-bit dynamic expansion*/
        /*01 - 8-bit  -> 12-bit dynamic expansion*/
        if (signal == SIGNAL_TYPE_HDMI_TYPE_A ||
 
        struct mpc_tree mpc_tree_params;
        bool mpcc_disconnect_pending[MAX_PIPES];
        const struct opp_funcs *funcs;
+       uint32_t dyn_expansion;
 };
 
 enum fmt_stereo_action {