if (ret < 0)
                goto err_free_clocks;
 
+       if (tcon->quirks->needs_de_be_mux) {
+               /*
+                * We assume there is no dynamic muxing of backends
+                * and TCONs, so we select the backend with same ID.
+                *
+                * While dynamic selection might be interesting, since
+                * the CRTC is tied to the TCON, while the layers are
+                * tied to the backends, this means, we will need to
+                * switch between groups of layers. There might not be
+                * a way to represent this constraint in DRM.
+                */
+               regmap_update_bits(tcon->regs, SUN4I_TCON0_CTL_REG,
+                                  SUN4I_TCON0_CTL_SRC_SEL_MASK,
+                                  tcon->id);
+               regmap_update_bits(tcon->regs, SUN4I_TCON1_CTL_REG,
+                                  SUN4I_TCON1_CTL_SRC_SEL_MASK,
+                                  tcon->id);
+       }
+
        list_add_tail(&tcon->list, &drv->tcon_list);
 
        return 0;
 };
 
 static const struct sun4i_tcon_quirks sun6i_a31_quirks = {
-       .has_channel_1  = true,
+       .has_channel_1          = true,
+       .needs_de_be_mux        = true,
 };
 
 static const struct sun4i_tcon_quirks sun6i_a31s_quirks = {
-       .has_channel_1  = true,
+       .has_channel_1          = true,
+       .needs_de_be_mux        = true,
 };
 
 static const struct sun4i_tcon_quirks sun8i_a33_quirks = {
 
 #define SUN4I_TCON0_CTL_TCON_ENABLE                    BIT(31)
 #define SUN4I_TCON0_CTL_CLK_DELAY_MASK                 GENMASK(8, 4)
 #define SUN4I_TCON0_CTL_CLK_DELAY(delay)               ((delay << 4) & SUN4I_TCON0_CTL_CLK_DELAY_MASK)
+#define SUN4I_TCON0_CTL_SRC_SEL_MASK                   GENMASK(2, 0)
 
 #define SUN4I_TCON0_DCLK_REG                   0x44
 #define SUN4I_TCON0_DCLK_GATE_BIT                      (31)
 #define SUN4I_TCON1_CTL_INTERLACE_ENABLE               BIT(20)
 #define SUN4I_TCON1_CTL_CLK_DELAY_MASK                 GENMASK(8, 4)
 #define SUN4I_TCON1_CTL_CLK_DELAY(delay)               ((delay << 4) & SUN4I_TCON1_CTL_CLK_DELAY_MASK)
+#define SUN4I_TCON1_CTL_SRC_SEL_MASK                   GENMASK(1, 0)
 
 #define SUN4I_TCON1_BASIC0_REG                 0x94
 #define SUN4I_TCON1_BASIC0_X(width)                    ((((width) - 1) & 0xfff) << 16)
 struct sun4i_tcon_quirks {
        bool    has_unknown_mux; /* sun5i has undocumented mux */
        bool    has_channel_1;  /* a33 does not have channel 1 */
+       bool    needs_de_be_mux; /* sun6i needs mux to select backend */
 };
 
 struct sun4i_tcon {