mirror of
https://github.com/andreili/SBC_builder.git
synced 2025-08-24 03:14:06 +02:00
76 lines
2.5 KiB
Diff
76 lines
2.5 KiB
Diff
From 792b816c952bcf5dbf7c3ac7d90937bc71f0a7cd Mon Sep 17 00:00:00 2001
|
|
From: Jernej Skrabec <jernej.skrabec@gmail.com>
|
|
Date: Sun, 29 Sep 2024 22:04:57 +1300
|
|
Subject: drm: sun4i: de33: fmt: add Display Engine 3.3 (DE33) support
|
|
|
|
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.skrabec@gmail.com>
|
|
Signed-off-by: Ryan Walklin <ryan@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 050a8716ae86..39682d4e6d20 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 4127f7206aad..3e60d5c788b3 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.35.3
|
|
|