aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/0043-drm-amd-display-use-rgb-full-range-as-default-quanti.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0043-drm-amd-display-use-rgb-full-range-as-default-quanti.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/0043-drm-amd-display-use-rgb-full-range-as-default-quanti.patch159
1 files changed, 159 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0043-drm-amd-display-use-rgb-full-range-as-default-quanti.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0043-drm-amd-display-use-rgb-full-range-as-default-quanti.patch
new file mode 100644
index 00000000..5616cc26
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/0043-drm-amd-display-use-rgb-full-range-as-default-quanti.patch
@@ -0,0 +1,159 @@
+From cd2f1c5d833b4c7f43e14238dcdd3bfd4d00d53f Mon Sep 17 00:00:00 2001
+From: Wenjing Liu <Wenjing.Liu@amd.com>
+Date: Wed, 30 Nov 2016 17:57:24 -0500
+Subject: [PATCH 0043/4131] drm/amd/display: use rgb full range as default
+ quantization for non HDMI
+
+Refactor the quantization decision to color module.
+Add the check if non HDMI, default quantization should be rgb full range.
+
+Signed-off-by: Wenjing Liu <Wenjing.Liu@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@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 | 88 ++++++++++++++++++++--
+ .../gpu/drm/amd/display/modules/inc/mod_color.h | 12 ++-
+ 2 files changed, 94 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/modules/color/color.c b/drivers/gpu/drm/amd/display/modules/color/color.c
+index 30d09d3..0610b82 100644
+--- a/drivers/gpu/drm/amd/display/modules/color/color.c
++++ b/drivers/gpu/drm/amd/display/modules/color/color.c
+@@ -2184,7 +2184,8 @@ bool mod_color_set_saturation(struct mod_color *mod_color,
+ return true;
+ }
+
+-bool mod_color_set_preferred_quantization_range(struct mod_color *mod_color,
++bool mod_color_persist_user_preferred_quantization_range(
++ struct mod_color *mod_color,
+ const struct dc_sink *sink,
+ enum dc_quantization_range quantization_range)
+ {
+@@ -2214,13 +2215,90 @@ bool mod_color_set_preferred_quantization_range(struct mod_color *mod_color,
+
+ bool mod_color_get_preferred_quantization_range(struct mod_color *mod_color,
+ const struct dc_sink *sink,
++ const struct dc_crtc_timing *timing,
+ enum dc_quantization_range *quantization_range)
+ {
+ struct core_color *core_color = MOD_COLOR_TO_CORE(mod_color);
+- unsigned int sink_index;
++ unsigned int sink_index = sink_index_from_sink(core_color, sink);
++ enum dc_quantization_range user_preferred_quantization_range =
++ core_color->state[sink_index].
++ preferred_quantization_range;
++ bool rgb_full_range_supported =
++ mod_color_is_rgb_full_range_supported_for_timing(
++ sink, timing);
++ bool rgb_limited_range_supported =
++ mod_color_is_rgb_limited_range_supported_for_timing(
++ sink, timing);
++
++ if (rgb_full_range_supported && rgb_limited_range_supported)
++ *quantization_range = user_preferred_quantization_range;
++ else if (rgb_full_range_supported && !rgb_limited_range_supported)
++ *quantization_range = QUANTIZATION_RANGE_FULL;
++ else if (!rgb_full_range_supported && rgb_limited_range_supported)
++ *quantization_range = QUANTIZATION_RANGE_LIMITED;
++ else
++ *quantization_range = QUANTIZATION_RANGE_UNKNOWN;
+
+- sink_index = sink_index_from_sink(core_color, sink);
+- *quantization_range = core_color->state[sink_index].
+- preferred_quantization_range;
+ return true;
+ }
++
++bool mod_color_is_rgb_full_range_supported_for_timing(
++ const struct dc_sink *sink,
++ const struct dc_crtc_timing *timing)
++{
++ bool result = false;
++
++ if (!sink || !timing)
++ return result;
++
++ if (sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A)
++ if (timing->vic || timing->hdmi_vic)
++ if (timing->h_addressable == 640 &&
++ timing->v_addressable == 480 &&
++ (timing->pix_clk_khz == 25200 ||
++ timing->pix_clk_khz == 25170 ||
++ timing->pix_clk_khz == 25175))
++ result = true;
++ else
++ /* don't support full range rgb */
++ /* for HDMI CEA861 timings except VGA mode */
++ result = false;
++ else
++ result = true;
++ else
++ result = true;
++
++ return result;
++}
++
++bool mod_color_is_rgb_limited_range_supported_for_timing(
++ const struct dc_sink *sink,
++ const struct dc_crtc_timing *timing)
++{
++ bool result = false;
++
++ if (!sink || !timing)
++ return result;
++
++ if (sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A)
++ if (timing->vic || timing->hdmi_vic)
++ if (timing->h_addressable == 640 &&
++ timing->v_addressable == 480 &&
++ (timing->pix_clk_khz == 25200 ||
++ timing->pix_clk_khz == 25170 ||
++ timing->pix_clk_khz == 25175))
++ /* don't support rgb limited for */
++ /* HDMI CEA VGA mode */
++ result = false;
++ else
++ /* support rgb limited for non VGA CEA timing */
++ result = true;
++ else
++ /* support rgb limited for non CEA HDMI timing */
++ result = true;
++ else
++ /* don't support rgb limited for non HDMI signal */
++ result = false;
++
++ return result;
++}
+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 e54fe2c..91abc17 100644
+--- a/drivers/gpu/drm/amd/display/modules/inc/mod_color.h
++++ b/drivers/gpu/drm/amd/display/modules/inc/mod_color.h
+@@ -168,12 +168,22 @@ bool mod_color_set_saturation(struct mod_color *mod_color,
+ const struct dc_stream **streams, int num_streams,
+ int saturation_value);
+
+-bool mod_color_set_preferred_quantization_range(struct mod_color *mod_color,
++bool mod_color_persist_user_preferred_quantization_range(
++ struct mod_color *mod_color,
+ const struct dc_sink *sink,
+ enum dc_quantization_range quantization_range);
+
+ bool mod_color_get_preferred_quantization_range(struct mod_color *mod_color,
+ const struct dc_sink *sink,
++ const struct dc_crtc_timing *timing,
+ enum dc_quantization_range *quantization_range);
+
++bool mod_color_is_rgb_full_range_supported_for_timing(
++ const struct dc_sink *sink,
++ const struct dc_crtc_timing *timing);
++
++bool mod_color_is_rgb_limited_range_supported_for_timing(
++ const struct dc_sink *sink,
++ const struct dc_crtc_timing *timing);
++
+ #endif /* MOD_COLOR_H_ */
+--
+2.7.4
+