mirror of
https://github.com/LibreELEC/LibreELEC.tv
synced 2025-09-24 19:46:01 +07:00
86 lines
3.8 KiB
Diff
86 lines
3.8 KiB
Diff
From b24b214903acb48e05f31a9575a56bad09457de0 Mon Sep 17 00:00:00 2001
|
|
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
|
Date: Fri, 15 Aug 2025 18:36:54 +0300
|
|
Subject: [PATCH 094/110] FROMLIST(v1): drm/rockchip: vop2: Support setting
|
|
custom background color
|
|
|
|
VOP2 allows configuring the background color of each video output port.
|
|
|
|
Since a previous patch introduced the BACKGROUND_COLOR CRTC property,
|
|
which defaults to solid black, take it into account when programming the
|
|
hardware.
|
|
|
|
Note that only the 10 least significant bits of each color component are
|
|
used, as this is the maximum precision supported by the display
|
|
controller.
|
|
|
|
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
|
---
|
|
drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 13 ++++++++++++-
|
|
drivers/gpu/drm/rockchip/rockchip_drm_vop2.h | 4 ++++
|
|
2 files changed, 16 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
|
|
index 977ccbf16344..565bd060fe5a 100644
|
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
|
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
|
|
@@ -1548,6 +1548,7 @@ static void vop2_post_config(struct drm_crtc *crtc)
|
|
struct vop2_video_port *vp = to_vop2_video_port(crtc);
|
|
struct vop2 *vop2 = vp->vop2;
|
|
struct drm_display_mode *mode = &crtc->state->adjusted_mode;
|
|
+ u64 bgcolor = crtc->state->background_color;
|
|
u16 vtotal = mode->crtc_vtotal;
|
|
u16 hdisplay = mode->crtc_hdisplay;
|
|
u16 hact_st = mode->crtc_htotal - mode->crtc_hsync_start;
|
|
@@ -1593,7 +1594,11 @@ static void vop2_post_config(struct drm_crtc *crtc)
|
|
vop2_vp_write(vp, RK3568_VP_POST_DSP_VACT_INFO_F1, val);
|
|
}
|
|
|
|
- vop2_vp_write(vp, RK3568_VP_DSP_BG, 0);
|
|
+ /* Background color is programmed with 10 bits of precision */
|
|
+ val = FIELD_PREP(RK3568_VP_DSP_BG__DSP_BG_RED, DRM_ARGB64_GETR_BPC(bgcolor, 10));
|
|
+ val |= FIELD_PREP(RK3568_VP_DSP_BG__DSP_BG_GREEN, DRM_ARGB64_GETG_BPC(bgcolor, 10));
|
|
+ val |= FIELD_PREP(RK3568_VP_DSP_BG__DSP_BG_BLUE, DRM_ARGB64_GETB_BPC(bgcolor, 10));
|
|
+ vop2_vp_write(vp, RK3568_VP_DSP_BG, val);
|
|
}
|
|
|
|
static int us_to_vertical_line(struct drm_display_mode *mode, int us)
|
|
@@ -1984,6 +1989,10 @@ static int vop2_crtc_state_dump(struct drm_crtc *crtc, struct seq_file *s)
|
|
drm_get_bus_format_name(vcstate->bus_format));
|
|
seq_printf(s, "\toutput_mode[%x]", vcstate->output_mode);
|
|
seq_printf(s, " color_space[%d]\n", vcstate->color_space);
|
|
+ seq_printf(s, "\tbackground color (10bpc): r=%x g=%x b=%x\n",
|
|
+ DRM_ARGB64_GETR_BPC(cstate->background_color, 10),
|
|
+ DRM_ARGB64_GETG_BPC(cstate->background_color, 10),
|
|
+ DRM_ARGB64_GETB_BPC(cstate->background_color, 10));
|
|
seq_printf(s, " Display mode: %dx%d%s%d\n",
|
|
mode->hdisplay, mode->vdisplay, interlaced ? "i" : "p",
|
|
drm_mode_vrefresh(mode));
|
|
@@ -2473,6 +2482,8 @@ static int vop2_create_crtcs(struct vop2 *vop2)
|
|
return dev_err_probe(drm->dev, ret,
|
|
"crtc init for video_port%d failed\n", i);
|
|
|
|
+ drm_crtc_attach_background_color_property(&vp->crtc);
|
|
+
|
|
drm_crtc_helper_add(&vp->crtc, &vop2_crtc_helper_funcs);
|
|
if (vop2->lut_regs) {
|
|
const struct vop2_video_port_data *vp_data = &vop2_data->vp[vp->id];
|
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.h
|
|
index fa5c56f16047..596558adc120 100644
|
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.h
|
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.h
|
|
@@ -659,6 +659,10 @@ enum dst_factor_mode {
|
|
#define RK3588_VP_CLK_CTRL__DCLK_OUT_DIV GENMASK(3, 2)
|
|
#define RK3588_VP_CLK_CTRL__DCLK_CORE_DIV GENMASK(1, 0)
|
|
|
|
+#define RK3568_VP_DSP_BG__DSP_BG_RED GENMASK(29, 20)
|
|
+#define RK3568_VP_DSP_BG__DSP_BG_GREEN GENMASK(19, 10)
|
|
+#define RK3568_VP_DSP_BG__DSP_BG_BLUE GENMASK(9, 0)
|
|
+
|
|
#define RK3568_VP_POST_SCL_CTRL__VSCALEDOWN BIT(1)
|
|
#define RK3568_VP_POST_SCL_CTRL__HSCALEDOWN BIT(0)
|
|
|
|
--
|
|
2.34.1
|
|
|