aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/0067-drm-amd-display-Refactor-to-move-color-helper-into-m.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0067-drm-amd-display-Refactor-to-move-color-helper-into-m.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/0067-drm-amd-display-Refactor-to-move-color-helper-into-m.patch316
1 files changed, 316 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0067-drm-amd-display-Refactor-to-move-color-helper-into-m.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0067-drm-amd-display-Refactor-to-move-color-helper-into-m.patch
new file mode 100644
index 00000000..99b4e8d8
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/0067-drm-amd-display-Refactor-to-move-color-helper-into-m.patch
@@ -0,0 +1,316 @@
+From f66f6ae0ebc1fee69c1a55c60776baaea1057d29 Mon Sep 17 00:00:00 2001
+From: Anthony Koo <Anthony.Koo@amd.com>
+Date: Wed, 14 Dec 2016 16:26:27 -0500
+Subject: [PATCH 0067/4131] drm/amd/display: Refactor to move color helper into
+ module
+
+Refactor part 2 - Moving color helper into color module
+
+The color module will need table defined in the helper in order to calculate
+the logical regamma curve, and also to fully handle gamut remapping.
+
+Signed-off-by: Anthony Koo <anthony.koo@amd.com>
+Reviewed-by: Aric Cyr <Aric.Cyr@amd.com>
+Acked-by: Harry Wentland <Harry.Wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ .../drm/amd/display/modules/color/color_helper.c | 199 +++++++++++++++++++++
+ .../drm/amd/display/modules/color/color_helper.h | 50 ++++++
+ .../gpu/drm/amd/display/modules/inc/mod_color.h | 4 +-
+ 3 files changed, 251 insertions(+), 2 deletions(-)
+ create mode 100644 drivers/gpu/drm/amd/display/modules/color/color_helper.c
+ create mode 100644 drivers/gpu/drm/amd/display/modules/color/color_helper.h
+
+diff --git a/drivers/gpu/drm/amd/display/modules/color/color_helper.c b/drivers/gpu/drm/amd/display/modules/color/color_helper.c
+new file mode 100644
+index 0000000..c47d296
+--- /dev/null
++++ b/drivers/gpu/drm/amd/display/modules/color/color_helper.c
+@@ -0,0 +1,199 @@
++
++/**
++ * @file
++ * @date Copyright (c) 2008 Advanced Micro Devices, Inc. (unpublished)
++ *
++ * @brief Helper functions for color gamut calculation
++ *
++ * @internal
++ * All rights reserved. This notice is intended as a precaution against
++ * inadvertent publication and does not imply publication or any waiver
++ * of confidentiality. The year included in the foregoing notice is the
++ * year of creation of the work.
++ */
++
++#include "dm_services.h"
++#include "dc.h"
++#include "mod_color.h"
++#include "color_helper.h"
++
++const struct gamut_space_entry predefined_gamuts[] = {
++ /* x_red y_red x_gr y_gr x_blue y_blue a0 a1 a2 a3 gamma */
++ [gamut_type_bt709] = {6400, 3300, 3000, 6000, 1500, 600, 180000, 4500, 99, 99, 2200},
++ [gamut_type_bt601] = {6400, 3300, 2900, 6000, 1500, 600, 180000, 4500, 99, 99, 2200},
++ [gamut_type_adobe_rgb] = {6400, 3300, 2100, 7100, 1500, 600, 180000, 4500, 99, 99, 2200},
++ [gamut_type_srgb] = {6400, 3300, 3000, 6000, 1500, 600, 31308, 12920, 55, 55, 2400},
++ [gamut_type_bt2020] = {7080, 2920, 1700, 7970, 1310, 460, 180000, 4500, 99, 99, 2200}
++};
++
++const struct white_point_coodinates_entry predefined_white_points[] = {
++ [white_point_type_5000k_horizon] = {5000, 3473, 3561},
++ [white_point_type_6500k_noon] = {6500, 3127, 3290},
++ [white_point_type_7500k_north_sky] = {7500, 3022, 3129},
++ [white_point_type_9300k] = {9300, 2866, 2950}
++};
++
++const unsigned int white_point_entries = 91;
++
++const struct white_point_coodinates_entry white_point_temps[] = {
++ /*001*/{1000, 6499, 3474},
++ /*002*/{1100, 6361, 3594},
++ /*003*/{1200, 6226, 3703},
++ /*004*/{1300, 6095, 3801},
++ /*005*/{1400, 5966, 3887},
++ /*006*/{1500, 5841, 3962},
++ /*007*/{1600, 5720, 4025},
++ /*008*/{1700, 5601, 4076},
++ /*009*/{1800, 5486, 4118},
++ /*010*/{1900, 5375, 4150},
++ /*011*/{2000, 5267, 4173},
++ /*012*/{2100, 5162, 4188},
++ /*013*/{2200, 5062, 4196},
++ /*014*/{2300, 4965, 4198},
++ /*015*/{2400, 4872, 4194},
++ /*016*/{2500, 4782, 4186},
++ /*017*/{2600, 4696, 4173},
++ /*018*/{2700, 4614, 4158},
++ /*019*/{2800, 4535, 4139},
++ /*020*/{2900, 4460, 4118},
++ /*021*/{3000, 4388, 4095},
++ /*022*/{3100, 4320, 4070},
++ /*023*/{3200, 4254, 4044},
++ /*024*/{3300, 4192, 4018},
++ /*025*/{3400, 4132, 3990},
++ /*026*/{3500, 4075, 3962},
++ /*027*/{3600, 4021, 3934},
++ /*028*/{3700, 3969, 3905},
++ /*029*/{3800, 3919, 3877},
++ /*030*/{3900, 3872, 3849},
++ /*031*/{4000, 3827, 3820},
++ /*032*/{4100, 3784, 3793},
++ /*033*/{4200, 3743, 3765},
++ /*034*/{4300, 3704, 3738},
++ /*035*/{4400, 3666, 3711},
++ /*036*/{4500, 3631, 3685},
++ /*037*/{4600, 3596, 3659},
++ /*038*/{4700, 3563, 3634},
++ /*039*/{4800, 3532, 3609},
++ /*040*/{4900, 3502, 3585},
++ /*041*/{5000, 3473, 3561},
++ /*042*/{5100, 3446, 3538},
++ /*043*/{5200, 3419, 3516},
++ /*044*/{5300, 3394, 3494},
++ /*045*/{5400, 3369, 3472},
++ /*046*/{5500, 3346, 3451},
++ /*047*/{5600, 3323, 3431},
++ /*048*/{5700, 3302, 3411},
++ /*049*/{5800, 3281, 3392},
++ /*050*/{5900, 3261, 3373},
++ /*051*/{6000, 3242, 3355},
++ /*052*/{6100, 3223, 3337},
++ /*053*/{6200, 3205, 3319},
++ /*054*/{6300, 3188, 3302},
++ /*055*/{6400, 3161, 3296},
++ /*056*/{6500, 3127, 3290}, /* This is the real white point sRGB */
++ /*057*/{6600, 3126, 3264},
++ /*058*/{6700, 3125, 3238},
++ /*059*/{6800, 3110, 3224},
++ /*060*/{6900, 3097, 3209},
++ /*061*/{7000, 3083, 3195},
++ /*062*/{7100, 3070, 3181},
++ /*063*/{7200, 3058, 3168},
++ /*064*/{7300, 3045, 3154},
++ /*065*/{7400, 3034, 3142},
++ /*066*/{7500, 3022, 3129},
++ /*067*/{7600, 3011, 3117},
++ /*068*/{7700, 3000, 3105},
++ /*069*/{7800, 2990, 3094},
++ /*070*/{7900, 2980, 3082},
++ /*071*/{8000, 2970, 3071},
++ /*072*/{8100, 2961, 3061},
++ /*073*/{8200, 2952, 3050},
++ /*074*/{8300, 2943, 3040},
++ /*075*/{8400, 2934, 3030},
++ /*076*/{8500, 2926, 3020},
++ /*077*/{8600, 2917, 3011},
++ /*078*/{8700, 2910, 3001},
++ /*079*/{8800, 2902, 2992},
++ /*080*/{8900, 2894, 2983},
++ /*081*/{9000, 2887, 2975},
++ /*082*/{9100, 2880, 2966},
++ /*083*/{9200, 2873, 2958},
++ /*084*/{9300, 2866, 2950},
++ /*085*/{9400, 2860, 2942},
++ /*086*/{9500, 2853, 2934},
++ /*087*/{9600, 2847, 2927},
++ /*088*/{9700, 2841, 2919},
++ /*089*/{9800, 2835, 2912},
++ /*090*/{9900, 2829, 2905},
++ /*091*/{10000, 2824, 2898}
++};
++
++bool mod_color_find_predefined_gamut(
++ struct gamut_space_coordinates *out_gamut,
++ enum predefined_gamut_type type)
++{
++ out_gamut->redX = predefined_gamuts[type].redX;
++ out_gamut->redY = predefined_gamuts[type].redY;
++ out_gamut->greenX = predefined_gamuts[type].greenX;
++ out_gamut->greenY = predefined_gamuts[type].greenY;
++ out_gamut->blueX = predefined_gamuts[type].blueX;
++ out_gamut->blueY = predefined_gamuts[type].blueY;
++
++ return true;
++}
++
++bool mod_color_find_predefined_white_point(
++ struct white_point_coodinates *out_white_point,
++ enum predefined_white_point_type type)
++{
++ out_white_point->whiteX = predefined_white_points[type].whiteX;
++ out_white_point->whiteY = predefined_white_points[type].whiteY;
++
++ return true;
++}
++
++bool mod_color_find_white_point_from_temperature(
++ struct white_point_coodinates *out_white_point,
++ unsigned int temperature)
++{
++ int i;
++ unsigned int found = false;
++ struct white_point_coodinates_entry temp_white_point =
++ white_point_temps[55];
++
++ if (temperature < 1000 || temperature > 10000)
++ return false;
++
++ for (i = 0; i < white_point_entries; i++) {
++ if (temperature == white_point_temps[i].temperature) {
++ temp_white_point = white_point_temps[i];
++ found = true;
++ break;
++ }
++ }
++
++ out_white_point->whiteX = temp_white_point.whiteX;
++ out_white_point->whiteY = temp_white_point.whiteY;
++
++ return found;
++}
++
++bool mod_color_find_temperature_from_white_point(
++ struct white_point_coodinates *in_white_point,
++ unsigned int *out_temperature)
++{
++ unsigned int i;
++ *out_temperature = 6500;
++
++ for (i = 0; i < white_point_entries; i++) {
++ if (in_white_point->whiteX == white_point_temps[i].whiteX &&
++ in_white_point->whiteY == white_point_temps[i].whiteY) {
++ *out_temperature = white_point_temps[i].temperature;
++ return true;
++ }
++ }
++
++ return false;
++}
++
+diff --git a/drivers/gpu/drm/amd/display/modules/color/color_helper.h b/drivers/gpu/drm/amd/display/modules/color/color_helper.h
+new file mode 100644
+index 0000000..c0e6334
+--- /dev/null
++++ b/drivers/gpu/drm/amd/display/modules/color/color_helper.h
+@@ -0,0 +1,50 @@
++/**
++ * @file
++ * @date Copyright (c) 2008 Advanced Micro Devices, Inc. (unpublished)
++ *
++ * @brief Helper functions for color gamut calculation
++ *
++ * @internal
++ * All rights reserved. This notice is intended as a precaution against
++ * inadvertent publication and does not imply publication or any waiver
++ * of confidentiality. The year included in the foregoing notice is the
++ * year of creation of the work.
++ */
++
++#ifndef COLOR_MOD_COLOR_HELPER_H_
++#define COLOR_MOD_COLOR_HELPER_H_
++
++enum predefined_gamut_type {
++ gamut_type_bt709,
++ gamut_type_bt601,
++ gamut_type_adobe_rgb,
++ gamut_type_srgb,
++ gamut_type_bt2020,
++ gamut_type_unknown,
++};
++
++enum predefined_white_point_type {
++ white_point_type_5000k_horizon,
++ white_point_type_6500k_noon,
++ white_point_type_7500k_north_sky,
++ white_point_type_9300k,
++ white_point_type_unknown,
++};
++
++bool mod_color_find_predefined_gamut(
++ struct gamut_space_coordinates *out_gamut,
++ enum predefined_gamut_type type);
++
++bool mod_color_find_predefined_white_point(
++ struct white_point_coodinates *out_white_point,
++ unsigned int index);
++
++bool mod_color_find_white_point_from_temperature(
++ struct white_point_coodinates *out_white_point,
++ unsigned int temperature);
++
++bool mod_color_find_temperature_from_white_point(
++ struct white_point_coodinates *in_white_point,
++ unsigned int *out_temperature);
++
++#endif /* COLOR_MOD_COLOR_HELPER_H_ */
+diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_color.h b/drivers/gpu/drm/amd/display/modules/inc/mod_color.h
+index 91abc17..787c2c0 100644
+--- a/drivers/gpu/drm/amd/display/modules/inc/mod_color.h
++++ b/drivers/gpu/drm/amd/display/modules/inc/mod_color.h
+@@ -28,6 +28,7 @@
+ #define MOD_COLOR_H_
+
+ #include "dm_services.h"
++#include "color_helper.h"
+
+ struct mod_color {
+ int dummy;
+@@ -54,7 +55,6 @@ struct gamut_space_coordinates {
+ };
+
+ struct gamut_space_entry {
+- unsigned int index;
+ unsigned int redX;
+ unsigned int redY;
+ unsigned int greenX;
+@@ -75,7 +75,7 @@ struct white_point_coodinates {
+ };
+
+ struct white_point_coodinates_entry {
+- unsigned int index;
++ unsigned int temperature;
+ unsigned int whiteX;
+ unsigned int whiteY;
+ };
+--
+2.7.4
+