summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/vkms
diff options
context:
space:
mode:
authorCristian Ciocaltea <cristian.ciocaltea@collabora.com>2026-03-03 21:24:19 +0200
committerDaniel Stone <daniels@collabora.com>2026-03-18 09:59:57 +0000
commit0b9eff726d5636a1638786d2f659b8897950533b (patch)
tree7d537b9c7634420f367a850f8ddfc382e2bea24c /drivers/gpu/drm/vkms
parent4c684596cde44d03dfd9624c86e1de4db0dcf121 (diff)
downloadlinux-next-0b9eff726d5636a1638786d2f659b8897950533b.tar.gz
linux-next-0b9eff726d5636a1638786d2f659b8897950533b.zip
drm/vkms: Support setting custom background color
Make use of the BACKGROUND_COLOR CRTC property when filling the background during blending. It already defaults to solid black. Since the internal representation of the pixel color in VKMS relies on 16 bits of precision, use the newly introduced DRM_ARGB64_GET{R|G|B}() helpers to access the individual components of the background color property, which is compliant with DRM_FORMAT_ARGB16161616. It's worth noting the alpha component is ignored, hence non-opaque background colors are not supported. Reviewed-by: Nícolas F. R. A. Prado <nfraprado@collabora.com> Tested-by: Diederik de Haas <diederik@cknow-tech.com> Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com> Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com> Link: https://patch.msgid.link/20260303-rk3588-bgcolor-v8-3-fee377037ad1@collabora.com Signed-off-by: Daniel Stone <daniels@collabora.com>
Diffstat (limited to 'drivers/gpu/drm/vkms')
-rw-r--r--drivers/gpu/drm/vkms/vkms_composer.c10
-rw-r--r--drivers/gpu/drm/vkms/vkms_crtc.c3
2 files changed, 11 insertions, 2 deletions
diff --git a/drivers/gpu/drm/vkms/vkms_composer.c b/drivers/gpu/drm/vkms/vkms_composer.c
index cd85de4ffd03..83d217085ad0 100644
--- a/drivers/gpu/drm/vkms/vkms_composer.c
+++ b/drivers/gpu/drm/vkms/vkms_composer.c
@@ -475,8 +475,14 @@ static void blend(struct vkms_writeback_job *wb,
{
struct vkms_plane_state **plane = crtc_state->active_planes;
u32 n_active_planes = crtc_state->num_active_planes;
-
- const struct pixel_argb_u16 background_color = { .a = 0xffff };
+ u64 bgcolor = crtc_state->base.background_color;
+
+ const struct pixel_argb_u16 background_color = {
+ .a = 0xffff,
+ .r = DRM_ARGB64_GETR(bgcolor),
+ .g = DRM_ARGB64_GETG(bgcolor),
+ .b = DRM_ARGB64_GETB(bgcolor),
+ };
int crtc_y_limit = crtc_state->base.mode.vdisplay;
int crtc_x_limit = crtc_state->base.mode.hdisplay;
diff --git a/drivers/gpu/drm/vkms/vkms_crtc.c b/drivers/gpu/drm/vkms/vkms_crtc.c
index ba2ff353e1a9..35ddc553a5e6 100644
--- a/drivers/gpu/drm/vkms/vkms_crtc.c
+++ b/drivers/gpu/drm/vkms/vkms_crtc.c
@@ -4,6 +4,7 @@
#include <drm/drm_atomic.h>
#include <drm/drm_atomic_helper.h>
+#include <drm/drm_blend.h>
#include <drm/drm_managed.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
@@ -227,6 +228,8 @@ struct vkms_output *vkms_crtc_init(struct drm_device *dev, struct drm_plane *pri
drm_crtc_enable_color_mgmt(crtc, 0, false, VKMS_LUT_SIZE);
+ drm_crtc_attach_background_color_property(crtc);
+
spin_lock_init(&vkms_out->lock);
spin_lock_init(&vkms_out->composer_lock);