aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1695-drm-amd-display-program-default-output-gamma.patch
diff options
context:
space:
mode:
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.patch99
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
+