diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1695-drm-amd-display-program-default-output-gamma.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/1695-drm-amd-display-program-default-output-gamma.patch | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1695-drm-amd-display-program-default-output-gamma.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1695-drm-amd-display-program-default-output-gamma.patch new file mode 100644 index 00000000..dce628e3 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1695-drm-amd-display-program-default-output-gamma.patch @@ -0,0 +1,99 @@ +From 67446612703a9b4b2910760c7b1f288991718255 Mon Sep 17 00:00:00 2001 +From: hersen wu <hersenxs.wu@amd.com> +Date: Fri, 1 Mar 2019 11:54:02 -0500 +Subject: [PATCH 1695/2940] drm/amd/display: program default output gamma + +program default output gamma if no user specific gamma +parameters passed. + +Change-Id: I909e6d145f8bdc49c405e8ca80839818a7c5d152 +Signed-off-by: hersen wu <hersenxs.wu@amd.com> +Reviewed-by: Sun peng Li <Sunpeng.Li@amd.com> +Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@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 + |