OSDN Git Service

drm/sun4i: Allow VI layers to be primary planes
authorSamuel Holland <samuel@sholland.org>
Sun, 24 Apr 2022 16:26:27 +0000 (11:26 -0500)
committerMaxime Ripard <maxime@cerno.tech>
Tue, 26 Apr 2022 12:24:57 +0000 (14:24 +0200)
D1's mixer 1 has no UI layers, only a single VI layer. That means the
mixer can only be used if the primary plane comes from this VI layer.
Add the code to handle this case.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20220424162633.12369-10-samuel@sholland.org
drivers/gpu/drm/sun4i/sun8i_vi_layer.c

index bb7c430..f7d0b08 100644 (file)
@@ -542,6 +542,7 @@ struct sun8i_vi_layer *sun8i_vi_layer_init_one(struct drm_device *drm,
                                               struct sun8i_mixer *mixer,
                                               int index)
 {
+       enum drm_plane_type type = DRM_PLANE_TYPE_OVERLAY;
        u32 supported_encodings, supported_ranges;
        unsigned int plane_cnt, format_count;
        struct sun8i_vi_layer *layer;
@@ -560,12 +561,15 @@ struct sun8i_vi_layer *sun8i_vi_layer_init_one(struct drm_device *drm,
                format_count = ARRAY_SIZE(sun8i_vi_layer_formats);
        }
 
+       if (!mixer->cfg->ui_num && index == 0)
+               type = DRM_PLANE_TYPE_PRIMARY;
+
        /* possible crtcs are set later */
        ret = drm_universal_plane_init(drm, &layer->plane, 0,
                                       &sun8i_vi_layer_funcs,
                                       formats, format_count,
                                       sun8i_layer_modifiers,
-                                      DRM_PLANE_TYPE_OVERLAY, NULL);
+                                      type, NULL);
        if (ret) {
                dev_err(drm->dev, "Couldn't initialize layer\n");
                return ERR_PTR(ret);