aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.15/950-0789-drm-Add-chroma-siting-properties.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-5.15/950-0789-drm-Add-chroma-siting-properties.patch')
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0789-drm-Add-chroma-siting-properties.patch170
1 files changed, 170 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.15/950-0789-drm-Add-chroma-siting-properties.patch b/target/linux/bcm27xx/patches-5.15/950-0789-drm-Add-chroma-siting-properties.patch
new file mode 100644
index 0000000000..a6e03d3b6b
--- /dev/null
+++ b/target/linux/bcm27xx/patches-5.15/950-0789-drm-Add-chroma-siting-properties.patch
@@ -0,0 +1,170 @@
+From 97a1ab8087099a4293923e9359165aa414f43035 Mon Sep 17 00:00:00 2001
+From: Dom Cobley <popcornmix@gmail.com>
+Date: Wed, 26 Jan 2022 15:58:13 +0000
+Subject: [PATCH] drm: Add chroma siting properties
+
+Signed-off-by: Dom Cobley <popcornmix@gmail.com>
+---
+ drivers/gpu/drm/drm_atomic_state_helper.c | 14 +++++++++
+ drivers/gpu/drm/drm_atomic_uapi.c | 8 +++++
+ drivers/gpu/drm/drm_color_mgmt.c | 36 +++++++++++++++++++++++
+ include/drm/drm_color_mgmt.h | 3 ++
+ include/drm/drm_plane.h | 36 +++++++++++++++++++++++
+ 5 files changed, 97 insertions(+)
+
+--- a/drivers/gpu/drm/drm_atomic_state_helper.c
++++ b/drivers/gpu/drm/drm_atomic_state_helper.c
+@@ -265,6 +265,20 @@ void __drm_atomic_helper_plane_state_res
+ plane_state->color_range = val;
+ }
+
++ if (plane->chroma_siting_h_property) {
++ if (!drm_object_property_get_default_value(&plane->base,
++ plane->chroma_siting_h_property,
++ &val))
++ plane_state->chroma_siting_h = val;
++ }
++
++ if (plane->chroma_siting_v_property) {
++ if (!drm_object_property_get_default_value(&plane->base,
++ plane->chroma_siting_v_property,
++ &val))
++ plane_state->chroma_siting_v = val;
++ }
++
+ if (plane->zpos_property) {
+ if (!drm_object_property_get_default_value(&plane->base,
+ plane->zpos_property,
+--- a/drivers/gpu/drm/drm_atomic_uapi.c
++++ b/drivers/gpu/drm/drm_atomic_uapi.c
+@@ -598,6 +598,10 @@ static int drm_atomic_plane_set_property
+ state->color_encoding = val;
+ } else if (property == plane->color_range_property) {
+ state->color_range = val;
++ } else if (property == plane->chroma_siting_h_property) {
++ state->chroma_siting_h = val;
++ } else if (property == plane->chroma_siting_v_property) {
++ state->chroma_siting_v = val;
+ } else if (property == config->prop_fb_damage_clips) {
+ ret = drm_atomic_replace_property_blob_from_id(dev,
+ &state->fb_damage_clips,
+@@ -664,6 +668,10 @@ drm_atomic_plane_get_property(struct drm
+ *val = state->color_encoding;
+ } else if (property == plane->color_range_property) {
+ *val = state->color_range;
++ } else if (property == plane->chroma_siting_h_property) {
++ *val = state->chroma_siting_h;
++ } else if (property == plane->chroma_siting_v_property) {
++ *val = state->chroma_siting_v;
+ } else if (property == config->prop_fb_damage_clips) {
+ *val = (state->fb_damage_clips) ?
+ state->fb_damage_clips->base.id : 0;
+--- a/drivers/gpu/drm/drm_color_mgmt.c
++++ b/drivers/gpu/drm/drm_color_mgmt.c
+@@ -587,6 +587,42 @@ int drm_plane_create_color_properties(st
+ EXPORT_SYMBOL(drm_plane_create_color_properties);
+
+ /**
++ * drm_plane_create_chroma_siting_properties - chroma siting related plane properties
++ * @plane: plane object
++ *
++ * Create and attach plane specific CHROMA_SITING
++ * properties to @plane.
++ */
++int drm_plane_create_chroma_siting_properties(struct drm_plane *plane,
++ int32_t default_chroma_siting_h,
++ int32_t default_chroma_siting_v)
++{
++ struct drm_device *dev = plane->dev;
++ struct drm_property *prop;
++
++ prop = drm_property_create_range(dev, 0, "CHROMA_SITING_H",
++ 0, 1<<16);
++ if (!prop)
++ return -ENOMEM;
++ plane->chroma_siting_h_property = prop;
++ drm_object_attach_property(&plane->base, prop, default_chroma_siting_h);
++
++ prop = drm_property_create_range(dev, 0, "CHROMA_SITING_V",
++ 0, 1<<16);
++ if (!prop)
++ return -ENOMEM;
++ plane->chroma_siting_v_property = prop;
++ drm_object_attach_property(&plane->base, prop, default_chroma_siting_v);
++
++ if (plane->state) {
++ plane->state->chroma_siting_h = default_chroma_siting_h;
++ plane->state->chroma_siting_v = default_chroma_siting_v;
++ }
++ return 0;
++}
++EXPORT_SYMBOL(drm_plane_create_chroma_siting_properties);
++
++/**
+ * drm_color_lut_check - check validity of lookup table
+ * @lut: property blob containing LUT to check
+ * @tests: bitmask of tests to run
+--- a/include/drm/drm_color_mgmt.h
++++ b/include/drm/drm_color_mgmt.h
+@@ -93,6 +93,9 @@ int drm_plane_create_color_properties(st
+ enum drm_color_encoding default_encoding,
+ enum drm_color_range default_range);
+
++int drm_plane_create_chroma_siting_properties(struct drm_plane *plane,
++ int32_t default_chroma_siting_h, int32_t default_chroma_siting_v);
++
+ /**
+ * enum drm_color_lut_tests - hw-specific LUT tests to perform
+ *
+--- a/include/drm/drm_plane.h
++++ b/include/drm/drm_plane.h
+@@ -180,6 +180,24 @@ struct drm_plane_state {
+ enum drm_color_range color_range;
+
+ /**
++ * @chroma_siting_h:
++ *
++ * Location of chroma samples horizontally compared to luma
++ * 0 means chroma is sited with left luma
++ * 0x8000 is interstitial. 0x10000 is sited with right luma
++ */
++ int32_t chroma_siting_h;
++
++ /**
++ * @chroma_siting_v:
++ *
++ * Location of chroma samples vertically compared to luma
++ * 0 means chroma is sited with top luma
++ * 0x8000 is interstitial. 0x10000 is sited with bottom luma
++ */
++ int32_t chroma_siting_v;
++
++ /**
+ * @fb_damage_clips:
+ *
+ * Blob representing damage (area in plane framebuffer that changed
+@@ -750,6 +768,24 @@ struct drm_plane {
+ * scaling.
+ */
+ struct drm_property *scaling_filter_property;
++
++ /**
++ * @chroma_siting_h_property:
++ *
++ * Optional "CHROMA_SITING_H" property for specifying
++ * chroma siting for YUV formats.
++ * See drm_plane_create_chroma_siting_properties().
++ */
++ struct drm_property *chroma_siting_h_property;
++
++ /**
++ * @chroma_siting_v_property:
++ *
++ * Optional "CHROMA_SITING_V" property for specifying
++ * chroma siting for YUV formats.
++ * See drm_plane_create_chroma_siting_properties().
++ */
++ struct drm_property *chroma_siting_v_property;
+ };
+
+ #define obj_to_plane(x) container_of(x, struct drm_plane, base)