From: Jernej Skrabec <jernej.skra...@gmail.com>

Like the DE3, the DE33 has a FMT (formatter) module, which
provides YUV444 to YUV422/YUV420 conversion, format re-mapping and color
depth conversion, although the DE33 module appears significantly more
capable, including up to 4K video support.

Add support for the DE33.

Signed-off-by: Jernej Skrabec <jernej.skra...@gmail.com>
Signed-off-by: Ryan Walklin <r...@testtoast.com>
---
 drivers/gpu/drm/sun4i/sun50i_fmt.c | 21 +++++++++++++++++++--
 drivers/gpu/drm/sun4i/sun50i_fmt.h |  1 +
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/sun4i/sun50i_fmt.c 
b/drivers/gpu/drm/sun4i/sun50i_fmt.c
index 050a8716ae862..39682d4e6d208 100644
--- a/drivers/gpu/drm/sun4i/sun50i_fmt.c
+++ b/drivers/gpu/drm/sun4i/sun50i_fmt.c
@@ -51,6 +51,19 @@ static void sun50i_fmt_de3_limits(u32 *limits, u32 
colorspace, bool bit10)
        }
 }
 
+static void sun50i_fmt_de33_limits(u32 *limits, u32 colorspace)
+{
+       if (colorspace == SUN50I_FMT_CS_YUV444RGB) {
+               limits[0] = SUN50I_FMT_LIMIT(0, 4095);
+               limits[1] = SUN50I_FMT_LIMIT(0, 4095);
+               limits[2] = SUN50I_FMT_LIMIT(0, 4095);
+       } else {
+               limits[0] = SUN50I_FMT_LIMIT(256, 3840);
+               limits[1] = SUN50I_FMT_LIMIT(256, 3840);
+               limits[2] = SUN50I_FMT_LIMIT(256, 3840);
+       }
+}
+
 void sun50i_fmt_setup(struct sun8i_mixer *mixer, u16 width,
                      u16 height, u32 format)
 {
@@ -60,10 +73,14 @@ void sun50i_fmt_setup(struct sun8i_mixer *mixer, u16 width,
 
        colorspace = sun50i_fmt_get_colorspace(format);
        bit10 = sun50i_fmt_is_10bit(format);
-       base = SUN50I_FMT_DE3;
+       base = mixer->cfg->de_type == sun8i_mixer_de3 ?
+               SUN50I_FMT_DE3 : SUN50I_FMT_DE33;
        regs = sun8i_blender_regmap(mixer);
 
-       sun50i_fmt_de3_limits(limit, colorspace, bit10);
+       if (mixer->cfg->de_type == sun8i_mixer_de3)
+               sun50i_fmt_de3_limits(limit, colorspace, bit10);
+       else
+               sun50i_fmt_de33_limits(limit, colorspace);
 
        regmap_write(regs, SUN50I_FMT_CTRL(base), 0);
 
diff --git a/drivers/gpu/drm/sun4i/sun50i_fmt.h 
b/drivers/gpu/drm/sun4i/sun50i_fmt.h
index 4127f7206aade..3e60d5c788b39 100644
--- a/drivers/gpu/drm/sun4i/sun50i_fmt.h
+++ b/drivers/gpu/drm/sun4i/sun50i_fmt.h
@@ -9,6 +9,7 @@
 #include "sun8i_mixer.h"
 
 #define SUN50I_FMT_DE3 0xa8000
+#define SUN50I_FMT_DE33 0x5000
 
 #define SUN50I_FMT_CTRL(base)   ((base) + 0x00)
 #define SUN50I_FMT_SIZE(base)   ((base) + 0x04)
-- 
2.45.2

Reply via email to