mirror of
https://github.com/andreili/SBC_builder.git
synced 2025-08-24 03:14:06 +02:00
78 lines
2.8 KiB
Diff
78 lines
2.8 KiB
Diff
From 412294545ec91452cc3eccff746a4243879b4cde Mon Sep 17 00:00:00 2001
|
|
From: Jernej Skrabec <jernej.skrabec@gmail.com>
|
|
Date: Sun, 29 Sep 2024 22:04:56 +1300
|
|
Subject: drm: sun4i: de33: vi_scaler: add Display Engine 3.3 (DE33) support
|
|
|
|
The vi_scaler appears to be used in preference to the ui_scaler module
|
|
for hardware video scaling in the DE33.
|
|
|
|
Enable support for this scaler.
|
|
|
|
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
|
|
Signed-off-by: Ryan Walklin <ryan@testtoast.com>
|
|
---
|
|
drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 19 +++++++++++++++----
|
|
drivers/gpu/drm/sun4i/sun8i_vi_scaler.c | 7 ++++++-
|
|
2 files changed, 21 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
|
|
index 7f1231cf0f01..180be9d67d9c 100644
|
|
--- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
|
|
+++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
|
|
@@ -95,12 +95,23 @@ static int sun8i_ui_layer_update_coord(struct sun8i_mixer *mixer, int channel,
|
|
hscale = state->src_w / state->crtc_w;
|
|
vscale = state->src_h / state->crtc_h;
|
|
|
|
- sun8i_ui_scaler_setup(mixer, channel, src_w, src_h, dst_w,
|
|
- dst_h, hscale, vscale, hphase, vphase);
|
|
- sun8i_ui_scaler_enable(mixer, channel, true);
|
|
+ if (mixer->cfg->de_type == sun8i_mixer_de33) {
|
|
+ sun8i_vi_scaler_setup(mixer, channel, src_w, src_h,
|
|
+ dst_w, dst_h, hscale, vscale,
|
|
+ hphase, vphase,
|
|
+ state->fb->format);
|
|
+ } else {
|
|
+ sun8i_ui_scaler_setup(mixer, channel, src_w, src_h,
|
|
+ dst_w, dst_h, hscale, vscale,
|
|
+ hphase, vphase);
|
|
+ sun8i_ui_scaler_enable(mixer, channel, true);
|
|
+ }
|
|
} else {
|
|
DRM_DEBUG_DRIVER("HW scaling is not needed\n");
|
|
- sun8i_ui_scaler_enable(mixer, channel, false);
|
|
+ if (mixer->cfg->de_type == sun8i_mixer_de33)
|
|
+ sun8i_vi_scaler_disable(mixer, channel);
|
|
+ else
|
|
+ sun8i_ui_scaler_enable(mixer, channel, false);
|
|
}
|
|
|
|
/* Set base coordinates */
|
|
diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c b/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c
|
|
index e7242301b312..9c7f6e7d71d5 100644
|
|
--- a/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c
|
|
+++ b/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c
|
|
@@ -835,7 +835,9 @@ static const u32 bicubic4coefftab32[480] = {
|
|
|
|
static u32 sun8i_vi_scaler_base(struct sun8i_mixer *mixer, int channel)
|
|
{
|
|
- if (mixer->cfg->de_type == sun8i_mixer_de3)
|
|
+ if (mixer->cfg->de_type == sun8i_mixer_de33)
|
|
+ return sun8i_channel_base(mixer, channel) + 0x3000;
|
|
+ else if (mixer->cfg->de_type == sun8i_mixer_de3)
|
|
return DE3_VI_SCALER_UNIT_BASE +
|
|
DE3_VI_SCALER_UNIT_SIZE * channel;
|
|
else
|
|
@@ -845,6 +847,9 @@ static u32 sun8i_vi_scaler_base(struct sun8i_mixer *mixer, int channel)
|
|
|
|
static bool sun8i_vi_scaler_is_vi_plane(struct sun8i_mixer *mixer, int channel)
|
|
{
|
|
+ if (mixer->cfg->de_type == sun8i_mixer_de33)
|
|
+ return mixer->cfg->map[channel] < mixer->cfg->vi_num;
|
|
+
|
|
return true;
|
|
}
|
|
|
|
--
|
|
2.35.3
|
|
|