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 <sam...@sholland.org>
---

Changes in v2:
 - Use Jernej's patches for mixer mode setting.

 drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c 
b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
index bb7c43036dfa..f7d0b082d634 100644
--- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
+++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
@@ -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);
-- 
2.35.1

Reply via email to