In order to correctly convert YUV color space to RGB, we have to know
color encoding and range.

Introduce these two properties using helper method.

Signed-off-by: Jernej Skrabec <jernej.skra...@siol.net>
---
 drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c 
b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
index bd0e6a52d1d8..240a800217df 100644
--- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
+++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
@@ -441,6 +441,7 @@ struct sun8i_vi_layer *sun8i_vi_layer_init_one(struct 
drm_device *drm,
                                               struct sun8i_mixer *mixer,
                                               int index)
 {
+       u32 supported_encodings, supported_ranges;
        struct sun8i_vi_layer *layer;
        unsigned int plane_cnt;
        int ret;
@@ -469,6 +470,22 @@ struct sun8i_vi_layer *sun8i_vi_layer_init_one(struct 
drm_device *drm,
                return ERR_PTR(ret);
        }
 
+       supported_encodings = BIT(DRM_COLOR_YCBCR_BT601) |
+                             BIT(DRM_COLOR_YCBCR_BT709);
+
+       supported_ranges = BIT(DRM_COLOR_YCBCR_LIMITED_RANGE) |
+                          BIT(DRM_COLOR_YCBCR_FULL_RANGE);
+
+       ret = drm_plane_create_color_properties(&layer->plane,
+                                               supported_encodings,
+                                               supported_ranges,
+                                               DRM_COLOR_YCBCR_BT709,
+                                               DRM_COLOR_YCBCR_LIMITED_RANGE);
+       if (ret) {
+               dev_err(drm->dev, "Couldn't add encoding and range 
properties!\n");
+               return ERR_PTR(ret);
+       }
+
        drm_plane_helper_add(&layer->plane, &sun8i_vi_layer_helper_funcs);
        layer->mixer = mixer;
        layer->channel = index;
-- 
2.22.0

Reply via email to