OSDN Git Service

drm/sun4i: Introduce color encoding and range properties
authorJernej Skrabec <jernej.skrabec@siol.net>
Sat, 13 Jul 2019 12:03:44 +0000 (14:03 +0200)
committerMaxime Ripard <maxime.ripard@bootlin.com>
Sat, 20 Jul 2019 05:38:02 +0000 (07:38 +0200)
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.skrabec@siol.net>
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190713120346.30349-2-jernej.skrabec@siol.net
drivers/gpu/drm/sun4i/sun8i_vi_layer.c

index 1bdcbf5..b227e33 100644 (file)
@@ -440,6 +440,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;
@@ -468,6 +469,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;