aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/0028-drm-amd-display-Update-rgb-limited-range-csc-matrix-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0028-drm-amd-display-Update-rgb-limited-range-csc-matrix-.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/0028-drm-amd-display-Update-rgb-limited-range-csc-matrix-.patch363
1 files changed, 0 insertions, 363 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0028-drm-amd-display-Update-rgb-limited-range-csc-matrix-.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0028-drm-amd-display-Update-rgb-limited-range-csc-matrix-.patch
deleted file mode 100644
index 0a784114..00000000
--- a/common/recipes-kernel/linux/linux-yocto-4.14.71/0028-drm-amd-display-Update-rgb-limited-range-csc-matrix-.patch
+++ /dev/null
@@ -1,363 +0,0 @@
-From 5244ef563b21717a742df33be094e4804821c222 Mon Sep 17 00:00:00 2001
-From: Wenjing Liu <Wenjing.Liu@amd.com>
-Date: Wed, 30 Nov 2016 12:10:35 -0500
-Subject: [PATCH 0028/4131] drm/amd/display: Update rgb limited range csc
- matrix calculation
-
-The issue causes hue adjustment for rgb
-limited range color space programmed wrong.
-Update calculation formula for rgb limited range
-
-Signed-off-by: Wenjing Liu <Wenjing.Liu@amd.com>
-Reviewed-by: Anthony Koo <Anthony.Koo@amd.com>
-Acked-by: Harry Wentland <Harry.Wentland@amd.com>
-Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
----
- drivers/gpu/drm/amd/display/modules/color/color.c | 300 ++++++++++++++++------
- 1 file changed, 216 insertions(+), 84 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/display/modules/color/color.c b/drivers/gpu/drm/amd/display/modules/color/color.c
-index cf030b1..30d09d3 100644
---- a/drivers/gpu/drm/amd/display/modules/color/color.c
-+++ b/drivers/gpu/drm/amd/display/modules/color/color.c
-@@ -854,26 +854,60 @@ static void calculate_rgb_matrix_legacy(struct core_color *core_color,
- rgb_matrix[11] = grph_bright;
- }
-
--static void calculate_rgb_limited_range_matrix(struct core_color *core_color,
-- unsigned int sink_index, struct fixed31_32 *rgb_matrix)
-+static void calculate_rgb_limited_range_matrix_legacy(
-+ struct core_color *core_color, unsigned int sink_index,
-+ struct fixed31_32 *rgb_matrix)
- {
-- struct fixed31_32 ideal[12];
--
-- static const int32_t matrix_[] = {
-- 85546875, 0, 0, 6250000,
-- 0, 85546875, 0, 6250000,
-- 0, 0, 85546875, 6250000
-- };
--
-- uint32_t i = 0;
-+ const struct fixed31_32 k1 =
-+ dal_fixed31_32_from_fraction(701000, 1000000);
-+ const struct fixed31_32 k2 =
-+ dal_fixed31_32_from_fraction(236568, 1000000);
-+ const struct fixed31_32 k3 =
-+ dal_fixed31_32_from_fraction(-587000, 1000000);
-+ const struct fixed31_32 k4 =
-+ dal_fixed31_32_from_fraction(464432, 1000000);
-+ const struct fixed31_32 k5 =
-+ dal_fixed31_32_from_fraction(-114000, 1000000);
-+ const struct fixed31_32 k6 =
-+ dal_fixed31_32_from_fraction(-701000, 1000000);
-+ const struct fixed31_32 k7 =
-+ dal_fixed31_32_from_fraction(-299000, 1000000);
-+ const struct fixed31_32 k8 =
-+ dal_fixed31_32_from_fraction(-292569, 1000000);
-+ const struct fixed31_32 k9 =
-+ dal_fixed31_32_from_fraction(413000, 1000000);
-+ const struct fixed31_32 k10 =
-+ dal_fixed31_32_from_fraction(-92482, 1000000);
-+ const struct fixed31_32 k11 =
-+ dal_fixed31_32_from_fraction(-114000, 1000000);
-+ const struct fixed31_32 k12 =
-+ dal_fixed31_32_from_fraction(385051, 1000000);
-+ const struct fixed31_32 k13 =
-+ dal_fixed31_32_from_fraction(-299000, 1000000);
-+ const struct fixed31_32 k14 =
-+ dal_fixed31_32_from_fraction(886000, 1000000);
-+ const struct fixed31_32 k15 =
-+ dal_fixed31_32_from_fraction(-587000, 1000000);
-+ const struct fixed31_32 k16 =
-+ dal_fixed31_32_from_fraction(-741914, 1000000);
-+ const struct fixed31_32 k17 =
-+ dal_fixed31_32_from_fraction(886000, 1000000);
-+ const struct fixed31_32 k18 =
-+ dal_fixed31_32_from_fraction(-144086, 1000000);
-
-- do {
-- ideal[i] = dal_fixed31_32_from_fraction(
-- matrix_[i],
-- 100000000);
-- ++i;
-- } while (i != ARRAY_SIZE(matrix_));
-+ const struct fixed31_32 luma_r =
-+ dal_fixed31_32_from_fraction(299, 1000);
-+ const struct fixed31_32 luma_g =
-+ dal_fixed31_32_from_fraction(587, 1000);
-+ const struct fixed31_32 luma_b =
-+ dal_fixed31_32_from_fraction(114, 1000);
-+ const struct fixed31_32 luma_scale =
-+ dal_fixed31_32_from_fraction(875855, 1000000);
-
-+ const struct fixed31_32 rgb_scale =
-+ dal_fixed31_32_from_fraction(85546875, 100000000);
-+ const struct fixed31_32 rgb_bias =
-+ dal_fixed31_32_from_fraction(625, 10000);
-
- struct fixed31_32 grph_cont;
- struct fixed31_32 grph_sat;
-@@ -885,84 +919,182 @@ static void calculate_rgb_limited_range_matrix(struct core_color *core_color,
- core_color, sink_index, &grph_cont, &grph_sat,
- &grph_bright, &sin_grph_hue, &cos_grph_hue);
-
-- const struct fixed31_32 multiplier =
-- dal_fixed31_32_mul(grph_cont, grph_sat);
--
-- rgb_matrix[8] = dal_fixed31_32_mul(ideal[0], grph_cont);
-+ /* COEF_1_1 = GrphCont * (LumaR + GrphSat * (Cos(GrphHue) * K1 +*/
-+ /* Sin(GrphHue) * K2))*/
-+ /* (Cos(GrphHue) * K1 + Sin(GrphHue) * K2)*/
-+ rgb_matrix[0] =
-+ dal_fixed31_32_add(
-+ dal_fixed31_32_mul(cos_grph_hue, k1),
-+ dal_fixed31_32_mul(sin_grph_hue, k2));
-+ /* GrphSat * (Cos(GrphHue) * K1 + Sin(GrphHue) * K2 */
-+ rgb_matrix[0] = dal_fixed31_32_mul(grph_sat, rgb_matrix[0]);
-+ /* (LumaR + GrphSat * (Cos(GrphHue) * K1 + Sin(GrphHue) * K2))*/
-+ rgb_matrix[0] = dal_fixed31_32_add(luma_r, rgb_matrix[0]);
-+ /* GrphCont * (LumaR + GrphSat * (Cos(GrphHue) * K1 + Sin(GrphHue)**/
-+ /* K2))*/
-+ rgb_matrix[0] = dal_fixed31_32_mul(grph_cont, rgb_matrix[0]);
-+ /* LumaScale * GrphCont * (LumaR + GrphSat * (Cos(GrphHue) * K1 + */
-+ /* Sin(GrphHue) * K2))*/
-+ rgb_matrix[0] = dal_fixed31_32_mul(luma_scale, rgb_matrix[0]);
-
-- rgb_matrix[9] = dal_fixed31_32_mul(ideal[1], grph_cont);
-+ /* COEF_1_2 = GrphCont * (LumaG + GrphSat * (Cos(GrphHue) * K3 +*/
-+ /* Sin(GrphHue) * K4))*/
-+ /* (Cos(GrphHue) * K3 + Sin(GrphHue) * K4)*/
-+ rgb_matrix[1] =
-+ dal_fixed31_32_add(
-+ dal_fixed31_32_mul(cos_grph_hue, k3),
-+ dal_fixed31_32_mul(sin_grph_hue, k4));
-+ /* GrphSat * (Cos(GrphHue) * K3 + Sin(GrphHue) * K4)*/
-+ rgb_matrix[1] = dal_fixed31_32_mul(grph_sat, rgb_matrix[1]);
-+ /* (LumaG + GrphSat * (Cos(GrphHue) * K3 + Sin(GrphHue) * K4))*/
-+ rgb_matrix[1] = dal_fixed31_32_add(luma_g, rgb_matrix[1]);
-+ /* GrphCont * (LumaG + GrphSat * (Cos(GrphHue) * K3 + Sin(GrphHue)**/
-+ /* K4))*/
-+ rgb_matrix[1] = dal_fixed31_32_mul(grph_cont, rgb_matrix[1]);
-+ /* LumaScale * GrphCont * (LumaG + GrphSat *(Cos(GrphHue) * K3 + */
-+ /* Sin(GrphHue) * K4))*/
-+ rgb_matrix[1] = dal_fixed31_32_mul(luma_scale, rgb_matrix[1]);
-
-- rgb_matrix[10] = dal_fixed31_32_mul(ideal[2], grph_cont);
-+ /* COEF_1_3 = GrphCont * (LumaB + GrphSat * (Cos(GrphHue) * K5 +*/
-+ /* Sin(GrphHue) * K6))*/
-+ /* (Cos(GrphHue) * K5 + Sin(GrphHue) * K6)*/
-+ rgb_matrix[2] =
-+ dal_fixed31_32_add(
-+ dal_fixed31_32_mul(cos_grph_hue, k5),
-+ dal_fixed31_32_mul(sin_grph_hue, k6));
-+ /* GrphSat * (Cos(GrphHue) * K5 + Sin(GrphHue) * K6)*/
-+ rgb_matrix[2] = dal_fixed31_32_mul(grph_sat, rgb_matrix[2]);
-+ /* LumaB + GrphSat * (Cos(GrphHue) * K5 + Sin(GrphHue) * K6)*/
-+ rgb_matrix[2] = dal_fixed31_32_add(luma_b, rgb_matrix[2]);
-+ /* GrphCont * (LumaB + GrphSat * (Cos(GrphHue) * K5 + Sin(GrphHue)**/
-+ /* K6))*/
-+ rgb_matrix[2] = dal_fixed31_32_mul(grph_cont, rgb_matrix[2]);
-+ /* LumaScale * GrphCont * (LumaB + GrphSat *(Cos(GrphHue) * K5 + */
-+ /* Sin(GrphHue) * K6))*/
-+ rgb_matrix[2] = dal_fixed31_32_mul(luma_scale, rgb_matrix[2]);
-
-- rgb_matrix[11] = dal_fixed31_32_add(
-- ideal[3],
-- dal_fixed31_32_mul(
-- grph_bright,
-- dal_fixed31_32_from_fraction(86, 100)));
-+ /* COEF_1_4 = RGBBias + RGBScale * GrphBright*/
-+ rgb_matrix[3] = dal_fixed31_32_add(
-+ rgb_bias,
-+ dal_fixed31_32_mul(rgb_scale, grph_bright));
-
-- rgb_matrix[0] = dal_fixed31_32_mul(
-- multiplier,
-+ /* COEF_2_1 = GrphCont * (LumaR + GrphSat * (Cos(GrphHue) * K7 +*/
-+ /* Sin(GrphHue) * K8))*/
-+ /* (Cos(GrphHue) * K7 + Sin(GrphHue) * K8)*/
-+ rgb_matrix[4] =
- dal_fixed31_32_add(
-- dal_fixed31_32_mul(
-- ideal[8],
-- sin_grph_hue),
-- dal_fixed31_32_mul(
-- ideal[4],
-- cos_grph_hue)));
-+ dal_fixed31_32_mul(cos_grph_hue, k7),
-+ dal_fixed31_32_mul(sin_grph_hue, k8));
-+ /* GrphSat * (Cos(GrphHue) * K7 + Sin(GrphHue) * K8)*/
-+ rgb_matrix[4] = dal_fixed31_32_mul(grph_sat, rgb_matrix[4]);
-+ /* (LumaR + GrphSat * (Cos(GrphHue) * K7 + Sin(GrphHue) * K8))*/
-+ rgb_matrix[4] = dal_fixed31_32_add(luma_r, rgb_matrix[4]);
-+ /* GrphCont * (LumaR + GrphSat * (Cos(GrphHue) * K7 + Sin(GrphHue)**/
-+ /* K8))*/
-+ rgb_matrix[4] = dal_fixed31_32_mul(grph_cont, rgb_matrix[4]);
-+ /* LumaScale * GrphCont * (LumaR + GrphSat * (Cos(GrphHue) * K7 + */
-+ /* Sin(GrphHue) * K8))*/
-+ rgb_matrix[4] = dal_fixed31_32_mul(luma_scale, rgb_matrix[4]);
-
-- rgb_matrix[1] = dal_fixed31_32_mul(
-- multiplier,
-+ /* COEF_2_2 = GrphCont * (LumaG + GrphSat * (Cos(GrphHue) * K9 +*/
-+ /* Sin(GrphHue) * K10))*/
-+ /* (Cos(GrphHue) * K9 + Sin(GrphHue) * K10))*/
-+ rgb_matrix[5] =
- dal_fixed31_32_add(
-- dal_fixed31_32_mul(
-- ideal[9],
-- sin_grph_hue),
-- dal_fixed31_32_mul(
-- ideal[5],
-- cos_grph_hue)));
-+ dal_fixed31_32_mul(cos_grph_hue, k9),
-+ dal_fixed31_32_mul(sin_grph_hue, k10));
-+ /* GrphSat * (Cos(GrphHue) * K9 + Sin(GrphHue) * K10))*/
-+ rgb_matrix[5] = dal_fixed31_32_mul(grph_sat, rgb_matrix[5]);
-+ /* (LumaG + GrphSat * (Cos(GrphHue) * K9 + Sin(GrphHue) * K10))*/
-+ rgb_matrix[5] = dal_fixed31_32_add(luma_g, rgb_matrix[5]);
-+ /* GrphCont * (LumaG + GrphSat * (Cos(GrphHue) * K9 + Sin(GrphHue)**/
-+ /* K10))*/
-+ rgb_matrix[5] = dal_fixed31_32_mul(grph_cont, rgb_matrix[5]);
-+ /* LumaScale * GrphCont * (LumaG + GrphSat *(Cos(GrphHue) * K9 + */
-+ /* Sin(GrphHue) * K10))*/
-+ rgb_matrix[5] = dal_fixed31_32_mul(luma_scale, rgb_matrix[5]);
-
-- rgb_matrix[2] = dal_fixed31_32_mul(
-- multiplier,
-+ /* COEF_2_3 = GrphCont * (LumaB + GrphSat * (Cos(GrphHue) * K11 +*/
-+ /* Sin(GrphHue) * K12))*/
-+ /* (Cos(GrphHue) * K11 + Sin(GrphHue) * K12))*/
-+ rgb_matrix[6] =
- dal_fixed31_32_add(
-- dal_fixed31_32_mul(
-- ideal[10],
-- sin_grph_hue),
-- dal_fixed31_32_mul(
-- ideal[6],
-- cos_grph_hue)));
-+ dal_fixed31_32_mul(cos_grph_hue, k11),
-+ dal_fixed31_32_mul(sin_grph_hue, k12));
-+ /* GrphSat * (Cos(GrphHue) * K11 + Sin(GrphHue) * K12))*/
-+ rgb_matrix[6] = dal_fixed31_32_mul(grph_sat, rgb_matrix[6]);
-+ /* (LumaB + GrphSat * (Cos(GrphHue) * K11 + Sin(GrphHue) * K12))*/
-+ rgb_matrix[6] = dal_fixed31_32_add(luma_b, rgb_matrix[6]);
-+ /* GrphCont * (LumaB + GrphSat * (Cos(GrphHue) * K11 + Sin(GrphHue)**/
-+ /* K12))*/
-+ rgb_matrix[6] = dal_fixed31_32_mul(grph_cont, rgb_matrix[6]);
-+ /* LumaScale * GrphCont * (LumaB + GrphSat *(Cos(GrphHue) * K11 +*/
-+ /* Sin(GrphHue) * K12)) */
-+ rgb_matrix[6] = dal_fixed31_32_mul(luma_scale, rgb_matrix[6]);
-
-- rgb_matrix[3] = ideal[7];
-+ /* COEF_2_4 = RGBBias + RGBScale * GrphBright*/
-+ rgb_matrix[7] = dal_fixed31_32_add(
-+ rgb_bias,
-+ dal_fixed31_32_mul(rgb_scale, grph_bright));
-
-- rgb_matrix[4] = dal_fixed31_32_mul(
-- multiplier,
-- dal_fixed31_32_sub(
-- dal_fixed31_32_mul(
-- ideal[8],
-- cos_grph_hue),
-- dal_fixed31_32_mul(
-- ideal[4],
-- sin_grph_hue)));
-+ /* COEF_3_1 = GrphCont * (LumaR + GrphSat * (Cos(GrphHue) * K13 +*/
-+ /* Sin(GrphHue) * K14))*/
-+ /* (Cos(GrphHue) * K13 + Sin(GrphHue) * K14)) */
-+ rgb_matrix[8] =
-+ dal_fixed31_32_add(
-+ dal_fixed31_32_mul(cos_grph_hue, k13),
-+ dal_fixed31_32_mul(sin_grph_hue, k14));
-+ /* GrphSat * (Cos(GrphHue) * K13 + Sin(GrphHue) * K14)) */
-+ rgb_matrix[8] = dal_fixed31_32_mul(grph_sat, rgb_matrix[8]);
-+ /* (LumaR + GrphSat * (Cos(GrphHue) * K13 + Sin(GrphHue) * K14)) */
-+ rgb_matrix[8] = dal_fixed31_32_add(luma_r, rgb_matrix[8]);
-+ /* GrphCont * (LumaR + GrphSat * (Cos(GrphHue) * K13 + Sin(GrphHue)**/
-+ /* K14)) */
-+ rgb_matrix[8] = dal_fixed31_32_mul(grph_cont, rgb_matrix[8]);
-+ /* LumaScale * GrphCont * (LumaR + GrphSat * (Cos(GrphHue) * K13 +*/
-+ /* Sin(GrphHue) * K14))*/
-+ rgb_matrix[8] = dal_fixed31_32_mul(luma_scale, rgb_matrix[8]);
-
-- rgb_matrix[5] = dal_fixed31_32_mul(
-- multiplier,
-- dal_fixed31_32_sub(
-- dal_fixed31_32_mul(
-- ideal[9],
-- cos_grph_hue),
-- dal_fixed31_32_mul(
-- ideal[5],
-- sin_grph_hue)));
-+ /* COEF_3_2 = GrphCont * (LumaG + GrphSat * (Cos(GrphHue) * K15 +*/
-+ /* Sin(GrphHue) * K16)) */
-+ /* GrphSat * (Cos(GrphHue) * K15 + Sin(GrphHue) * K16) */
-+ rgb_matrix[9] =
-+ dal_fixed31_32_add(
-+ dal_fixed31_32_mul(cos_grph_hue, k15),
-+ dal_fixed31_32_mul(sin_grph_hue, k16));
-+ /* (LumaG + GrphSat * (Cos(GrphHue) * K15 + Sin(GrphHue) * K16)) */
-+ rgb_matrix[9] = dal_fixed31_32_mul(grph_sat, rgb_matrix[9]);
-+ /* (LumaG + GrphSat * (Cos(GrphHue) * K15 + Sin(GrphHue) * K16)) */
-+ rgb_matrix[9] = dal_fixed31_32_add(luma_g, rgb_matrix[9]);
-+ /* GrphCont * (LumaG + GrphSat * (Cos(GrphHue) * K15 + Sin(GrphHue)**/
-+ /* K16)) */
-+ rgb_matrix[9] = dal_fixed31_32_mul(grph_cont, rgb_matrix[9]);
-+ /* LumaScale * GrphCont * (LumaG + GrphSat *(Cos(GrphHue) * K15 + */
-+ /* Sin(GrphHue) * K16))*/
-+ rgb_matrix[9] = dal_fixed31_32_mul(luma_scale, rgb_matrix[9]);
-
-- rgb_matrix[6] = dal_fixed31_32_mul(
-- multiplier,
-- dal_fixed31_32_sub(
-- dal_fixed31_32_mul(
-- ideal[10],
-- cos_grph_hue),
-- dal_fixed31_32_mul(
-- ideal[6],
-- sin_grph_hue)));
-+ /* COEF_3_3 = GrphCont * (LumaB + GrphSat * (Cos(GrphHue) * K17 +*/
-+ /* Sin(GrphHue) * K18)) */
-+ /* (Cos(GrphHue) * K17 + Sin(GrphHue) * K18)) */
-+ rgb_matrix[10] =
-+ dal_fixed31_32_add(
-+ dal_fixed31_32_mul(cos_grph_hue, k17),
-+ dal_fixed31_32_mul(sin_grph_hue, k18));
-+ /* GrphSat * (Cos(GrphHue) * K17 + Sin(GrphHue) * K18)) */
-+ rgb_matrix[10] = dal_fixed31_32_mul(grph_sat, rgb_matrix[10]);
-+ /* (LumaB + GrphSat * (Cos(GrphHue) * K17 + Sin(GrphHue) * K18)) */
-+ rgb_matrix[10] = dal_fixed31_32_add(luma_b, rgb_matrix[10]);
-+ /* GrphCont * (LumaB + GrphSat * (Cos(GrphHue) * K17 + Sin(GrphHue)**/
-+ /* K18)) */
-+ rgb_matrix[10] = dal_fixed31_32_mul(grph_cont, rgb_matrix[10]);
-+ /* LumaScale * GrphCont * (LumaB + GrphSat *(Cos(GrphHue) * */
-+ /* K17 + Sin(GrphHue) * K18))*/
-+ rgb_matrix[10] = dal_fixed31_32_mul(luma_scale, rgb_matrix[10]);
-
-- rgb_matrix[7] = ideal[11];
-+ /* COEF_3_4 = RGBBias + RGBScale * GrphBright */
-+ rgb_matrix[11] = dal_fixed31_32_add(
-+ rgb_bias,
-+ dal_fixed31_32_mul(rgb_scale, grph_bright));
- }
-
- static void calculate_yuv_matrix(struct core_color *core_color,
-@@ -1110,9 +1242,9 @@ static void calculate_csc_matrix(struct core_color *core_color,
- (csc_matrix, fixed_csc_matrix, 12);
- break;
- case COLOR_SPACE_SRGB_LIMITED:
-- calculate_rgb_limited_range_matrix(core_color, sink_index,
-- fixed_csc_matrix);
-- convert_float_matrix(csc_matrix, fixed_csc_matrix, 12);
-+ calculate_rgb_limited_range_matrix_legacy(
-+ core_color, sink_index, fixed_csc_matrix);
-+ convert_float_matrix_legacy(csc_matrix, fixed_csc_matrix, 12);
- break;
- case COLOR_SPACE_YCBCR601:
- case COLOR_SPACE_YCBCR709:
---
-2.7.4
-