[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20251223-mtk-post-blend-color-pipeline-v3-3-7d969f9a37a0@collabora.com>
Date: Tue, 23 Dec 2025 15:01:23 -0300
From: Ariel D'Alessandro <ariel.dalessandro@...labora.com>
To: Maarten Lankhorst <maarten.lankhorst@...ux.intel.com>,
Maxime Ripard <mripard@...nel.org>, Thomas Zimmermann <tzimmermann@...e.de>,
David Airlie <airlied@...il.com>, Simona Vetter <simona@...ll.ch>,
Chun-Kuang Hu <chunkuang.hu@...nel.org>,
Philipp Zabel <p.zabel@...gutronix.de>,
Matthias Brugger <matthias.bgg@...il.com>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@...labora.com>,
Louis Chauvet <louis.chauvet@...tlin.com>,
Haneen Mohammed <hamohammed.sa@...il.com>,
Melissa Wen <melissa.srw@...il.com>
Cc: dri-devel@...ts.freedesktop.org, linux-kernel@...r.kernel.org,
linux-mediatek@...ts.infradead.org, linux-arm-kernel@...ts.infradead.org,
kernel@...labora.com,
Nícolas F. R. A. Prado <nfraprado@...labora.com>,
Ariel D'Alessandro <ariel.dalessandro@...labora.com>
Subject: [PATCH v3 03/21] drm: Factor out common color_pipeline property
initialization code
From: "Nícolas F. R. A. Prado" <nfraprado@...labora.com>
In preparation for sharing the initialization code for the color
pipeline property between pre-blend (plane) and post-blend (crtc) color
pipelines, factor out the common initialization to a separate function.
Signed-off-by: Nícolas F. R. A. Prado <nfraprado@...labora.com>
Co-developed-by: Ariel D'Alessandro <ariel.dalessandro@...labora.com>
Signed-off-by: Ariel D'Alessandro <ariel.dalessandro@...labora.com>
Reviewed-by: Louis Chauvet <louis.chauvet@...tlin.com>
---
drivers/gpu/drm/drm_plane.c | 35 ++++-----------------------------
drivers/gpu/drm/drm_property.c | 44 ++++++++++++++++++++++++++++++++++++++++++
include/drm/drm_property.h | 5 +++++
3 files changed, 53 insertions(+), 31 deletions(-)
diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
index bed2562bf911b..3d7324757d7b2 100644
--- a/drivers/gpu/drm/drm_plane.c
+++ b/drivers/gpu/drm/drm_plane.c
@@ -1839,43 +1839,16 @@ int drm_plane_create_color_pipeline_property(struct drm_plane *plane,
const struct drm_prop_enum_list *pipelines,
int num_pipelines)
{
- struct drm_prop_enum_list *all_pipelines;
struct drm_property *prop;
- int len = 0;
- int i;
-
- all_pipelines = kcalloc(num_pipelines + 1,
- sizeof(*all_pipelines),
- GFP_KERNEL);
-
- if (!all_pipelines) {
- drm_err(plane->dev, "failed to allocate color pipeline\n");
- return -ENOMEM;
- }
-
- /* Create default Bypass color pipeline */
- all_pipelines[len].type = 0;
- all_pipelines[len].name = "Bypass";
- len++;
- /* Add all other color pipelines */
- for (i = 0; i < num_pipelines; i++, len++) {
- all_pipelines[len].type = pipelines[i].type;
- all_pipelines[len].name = pipelines[i].name;
- }
+ prop = drm_property_create_color_pipeline(plane->dev, &plane->base,
+ pipelines, num_pipelines);
+ if (IS_ERR(prop))
+ return PTR_ERR(prop);
- prop = drm_property_create_enum(plane->dev, DRM_MODE_PROP_ATOMIC,
- "COLOR_PIPELINE",
- all_pipelines, len);
- if (!prop) {
- kfree(all_pipelines);
- return -ENOMEM;
- }
- drm_object_attach_property(&plane->base, prop, 0);
plane->color_pipeline_property = prop;
- kfree(all_pipelines);
return 0;
}
EXPORT_SYMBOL(drm_plane_create_color_pipeline_property);
diff --git a/drivers/gpu/drm/drm_property.c b/drivers/gpu/drm/drm_property.c
index 596272149a359..cc2a1422599ac 100644
--- a/drivers/gpu/drm/drm_property.c
+++ b/drivers/gpu/drm/drm_property.c
@@ -997,3 +997,47 @@ void drm_property_change_valid_put(struct drm_property *property,
} else if (drm_property_type_is(property, DRM_MODE_PROP_BLOB))
drm_property_blob_put(obj_to_blob(ref));
}
+
+struct drm_property *
+drm_property_create_color_pipeline(struct drm_device *dev, struct drm_mode_object *obj,
+ const struct drm_prop_enum_list *pipelines,
+ int num_pipelines)
+{
+ struct drm_prop_enum_list *all_pipelines;
+ struct drm_property *prop;
+ int len = 0;
+ int i;
+
+ all_pipelines = kcalloc(num_pipelines + 1,
+ sizeof(*all_pipelines),
+ GFP_KERNEL);
+
+ if (!all_pipelines) {
+ drm_err(dev, "failed to allocate color pipeline\n");
+ return ERR_PTR(-ENOMEM);
+ }
+
+ /* Create default Bypass color pipeline */
+ all_pipelines[len].type = 0;
+ all_pipelines[len].name = "Bypass";
+ len++;
+
+ /* Add all other color pipelines */
+ for (i = 0; i < num_pipelines; i++, len++) {
+ all_pipelines[len].type = pipelines[i].type;
+ all_pipelines[len].name = pipelines[i].name;
+ }
+
+ prop = drm_property_create_enum(dev, DRM_MODE_PROP_ATOMIC,
+ "COLOR_PIPELINE",
+ all_pipelines, len);
+ if (!prop) {
+ kfree(all_pipelines);
+ return ERR_PTR(-ENOMEM);
+ }
+
+ drm_object_attach_property(obj, prop, 0);
+
+ kfree(all_pipelines);
+ return prop;
+}
diff --git a/include/drm/drm_property.h b/include/drm/drm_property.h
index 082f29156b3e3..3acf340635226 100644
--- a/include/drm/drm_property.h
+++ b/include/drm/drm_property.h
@@ -296,6 +296,11 @@ bool drm_property_replace_blob(struct drm_property_blob **blob,
struct drm_property_blob *drm_property_blob_get(struct drm_property_blob *blob);
void drm_property_blob_put(struct drm_property_blob *blob);
+struct drm_property *
+drm_property_create_color_pipeline(struct drm_device *dev, struct drm_mode_object *obj,
+ const struct drm_prop_enum_list *pipelines,
+ int num_pipelines);
+
/**
* drm_property_find - find property object
* @dev: DRM device
--
2.51.0
Powered by blists - more mailing lists