diff mbox series

[1/3] drm/omap: add crtc background property

Message ID 20210921141654.66550-2-narmstrong@baylibre.com (mailing list archive)
State New, archived
Headers show
Series drm/omap: add crtc properties | expand

Commit Message

Neil Armstrong Sept. 21, 2021, 2:16 p.m. UTC
From: Tomi Valkeinen <tomi.valkeinen@ti.com>

Add DRM properties for crtc background color property. Background
color is shown on areas where there are no planes.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
---
 drivers/gpu/drm/omapdrm/omap_crtc.c | 22 +++++++++++++++++++++-
 drivers/gpu/drm/omapdrm/omap_drv.c  |  7 +++++++
 drivers/gpu/drm/omapdrm/omap_drv.h  |  3 +++
 3 files changed, 31 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
index 06a719c104f4..4ba2d3e51b2b 100644
--- a/drivers/gpu/drm/omapdrm/omap_crtc.c
+++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
@@ -24,6 +24,8 @@  struct omap_crtc_state {
 	unsigned int rotation;
 	unsigned int zpos;
 	bool manually_updated;
+
+	u32 default_color;
 };
 
 #define to_omap_crtc(x) container_of(x, struct omap_crtc, base)
@@ -395,13 +397,14 @@  static void omap_crtc_cpr_coefs_from_ctm(const struct drm_color_ctm *ctm,
 
 static void omap_crtc_write_crtc_properties(struct drm_crtc *crtc)
 {
+	const struct omap_crtc_state *omap_state = to_omap_crtc_state(crtc->state);
 	struct omap_drm_private *priv = crtc->dev->dev_private;
 	struct omap_crtc *omap_crtc = to_omap_crtc(crtc);
 	struct omap_overlay_manager_info info;
 
 	memset(&info, 0, sizeof(info));
 
-	info.default_color = 0x000000;
+	info.default_color = omap_state->default_color;
 	info.trans_enabled = false;
 	info.partial_alpha_enabled = false;
 
@@ -668,6 +671,7 @@  static int omap_crtc_atomic_set_property(struct drm_crtc *crtc,
 {
 	struct omap_drm_private *priv = crtc->dev->dev_private;
 	struct drm_plane_state *plane_state;
+	struct omap_crtc_state *omap_state = to_omap_crtc_state(state);
 
 	/*
 	 * Delegate property set to the primary plane. Get the plane state and
@@ -683,6 +687,8 @@  static int omap_crtc_atomic_set_property(struct drm_crtc *crtc,
 		plane_state->rotation = val;
 	else if (property == priv->zorder_prop)
 		plane_state->zpos = val;
+	else if (property == priv->background_color_prop)
+		omap_state->default_color = val;
 	else
 		return -EINVAL;
 
@@ -701,6 +707,8 @@  static int omap_crtc_atomic_get_property(struct drm_crtc *crtc,
 		*val = omap_state->rotation;
 	else if (property == priv->zorder_prop)
 		*val = omap_state->zpos;
+	else if (property == priv->background_color_prop)
+		*val = omap_state->default_color;
 	else
 		return -EINVAL;
 
@@ -741,6 +749,8 @@  omap_crtc_duplicate_state(struct drm_crtc *crtc)
 	state->rotation = current_state->rotation;
 	state->manually_updated = current_state->manually_updated;
 
+	state->default_color = current_state->default_color;
+
 	return &state->base;
 }
 
@@ -778,6 +788,15 @@  static const char *channel_names[] = {
 	[OMAP_DSS_CHANNEL_LCD3] = "lcd3",
 };
 
+static void omap_crtc_install_properties(struct drm_crtc *crtc)
+{
+	struct drm_device *dev = crtc->dev;
+	struct drm_mode_object *obj = &crtc->base;
+	struct omap_drm_private *priv = dev->dev_private;
+
+	drm_object_attach_property(obj, priv->background_color_prop, 0);
+}
+
 /* initialize crtc */
 struct drm_crtc *omap_crtc_init(struct drm_device *dev,
 				struct omap_drm_pipeline *pipe,
@@ -843,6 +862,7 @@  struct drm_crtc *omap_crtc_init(struct drm_device *dev,
 		drm_mode_crtc_set_gamma_size(crtc, gamma_lut_size);
 	}
 
+	omap_crtc_install_properties(crtc);
 	omap_plane_install_properties(crtc->primary, &crtc->base);
 
 	return crtc;
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
index f86e20578143..48ebd1689601 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -200,6 +200,13 @@  static int omap_modeset_init_properties(struct drm_device *dev)
 	if (!priv->zorder_prop)
 		return -ENOMEM;
 
+	/* crtc properties */
+
+	priv->background_color_prop =
+		drm_property_create_range(dev, 0, "background", 0, 0xffffff);
+	if (!priv->background_color_prop)
+		return -ENOMEM;
+
 	return 0;
 }
 
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.h b/drivers/gpu/drm/omapdrm/omap_drv.h
index 591d4c273f02..ed69ae78ae89 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.h
+++ b/drivers/gpu/drm/omapdrm/omap_drv.h
@@ -73,6 +73,9 @@  struct omap_drm_private {
 	/* properties: */
 	struct drm_property *zorder_prop;
 
+	/* crtc properties */
+	struct drm_property *background_color_prop;
+
 	/* irq handling: */
 	spinlock_t wait_lock;		/* protects the wait_list */
 	struct list_head wait_list;	/* list of omap_irq_wait */