From: hersen wu <hersenxs...@amd.com>

program default output gamma if no user specific gamma
parameters passed.

Change-Id: I909e6d145f8bdc49c405e8ca80839818a7c5d152
Signed-off-by: hersen wu <hersenxs...@amd.com>
Reviewed-by: Sun peng Li <sunpeng...@amd.com>
Acked-by: Bhawanpreet Lakha <bhawanpreet.la...@amd.com>
---
 .../amd/display/amdgpu_dm/amdgpu_dm_color.c   | 53 ++++++++++---------
 1 file changed, 29 insertions(+), 24 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
index 216e48cec716..7258c992a2bf 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
@@ -126,46 +126,51 @@ int amdgpu_dm_set_regamma_lut(struct dm_crtc_state *crtc)
                crtc->base.state->dev->dev_private;
        struct drm_color_lut *lut;
        uint32_t lut_size;
-       struct dc_gamma *gamma;
+       struct dc_gamma *gamma = NULL;
        enum dc_transfer_func_type old_type = stream->out_transfer_func->type;
 
        bool ret;
 
-       if (!blob) {
+       if (!blob && adev->asic_type <= CHIP_RAVEN) {
                /* By default, use the SRGB predefined curve.*/
                stream->out_transfer_func->type = TF_TYPE_PREDEFINED;
                stream->out_transfer_func->tf = TRANSFER_FUNCTION_SRGB;
                return 0;
        }
 
-       lut = (struct drm_color_lut *)blob->data;
-       lut_size = blob->length / sizeof(struct drm_color_lut);
-
-       gamma = dc_create_gamma();
-       if (!gamma)
-               return -ENOMEM;
+       if (blob) {
+               lut = (struct drm_color_lut *)blob->data;
+               lut_size = blob->length / sizeof(struct drm_color_lut);
+
+               gamma = dc_create_gamma();
+               if (!gamma)
+                       return -ENOMEM;
+
+               gamma->num_entries = lut_size;
+               if (gamma->num_entries == MAX_COLOR_LEGACY_LUT_ENTRIES)
+                       gamma->type = GAMMA_RGB_256;
+               else if (gamma->num_entries == MAX_COLOR_LUT_ENTRIES)
+                       gamma->type = GAMMA_CS_TFM_1D;
+               else {
+                       /* Invalid lut size */
+                       dc_gamma_release(&gamma);
+                       return -EINVAL;
+               }
 
-       gamma->num_entries = lut_size;
-       if (gamma->num_entries == MAX_COLOR_LEGACY_LUT_ENTRIES)
-               gamma->type = GAMMA_RGB_256;
-       else if (gamma->num_entries == MAX_COLOR_LUT_ENTRIES)
-               gamma->type = GAMMA_CS_TFM_1D;
-       else {
-               /* Invalid lut size */
-               dc_gamma_release(&gamma);
-               return -EINVAL;
+               /* Convert drm_lut into dc_gamma */
+               __drm_lut_to_dc_gamma(lut, gamma, gamma->type == GAMMA_RGB_256);
        }
 
-       /* Convert drm_lut into dc_gamma */
-       __drm_lut_to_dc_gamma(lut, gamma, gamma->type == GAMMA_RGB_256);
-
-       /* Call color module to translate into something DC understands. Namely
-        * a transfer function.
+       /* predefined gamma ROM only exist for RAVEN and pre-RAVEN ASIC,
+        * set canRomBeUsed accordingly
         */
        stream->out_transfer_func->type = TF_TYPE_DISTRIBUTED_POINTS;
        ret = mod_color_calculate_regamma_params(stream->out_transfer_func,
-                                                gamma, true, adev->asic_type 
<= CHIP_RAVEN, NULL);
-       dc_gamma_release(&gamma);
+                       gamma, true, adev->asic_type <= CHIP_RAVEN, NULL);
+
+       if (gamma)
+               dc_gamma_release(&gamma);
+
        if (!ret) {
                stream->out_transfer_func->type = old_type;
                DRM_ERROR("Out of memory when calculating regamma params\n");
-- 
2.17.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to