]> Gentwo Git Trees - linux/.git/commitdiff
drm/colorop: Add destroy functions for color pipeline
authorAlex Hung <alex.hung@amd.com>
Sat, 15 Nov 2025 00:01:38 +0000 (17:01 -0700)
committerSimon Ser <contact@emersion.fr>
Wed, 26 Nov 2025 22:03:32 +0000 (23:03 +0100)
The functions are to clean up color pipeline when a device driver
fails to create its color pipeline.

Signed-off-by: Alex Hung <alex.hung@amd.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Simon Ser <contact@emersion.fr>
Reviewed-by: Melissa Wen <mwen@igalia.com>
Reviewed-by: Sebastian Wick <sebastian.wick@redhat.com>
Signed-off-by: Simon Ser <contact@emersion.fr>
Link: https://patch.msgid.link/20251115000237.3561250-14-alex.hung@amd.com
drivers/gpu/drm/drm_colorop.c
include/drm/drm_colorop.h

index 6f9c27d216c1e4e10db101f0d629e7ac642581fd..b75ad854431511b50aee4d09cf0d5bce6b47b97b 100644 (file)
@@ -134,6 +134,42 @@ static int drm_plane_colorop_init(struct drm_device *dev, struct drm_colorop *co
        return ret;
 }
 
+/**
+ * drm_colorop_cleanup - Cleanup a drm_colorop object in color_pipeline
+ *
+ * @colorop: The drm_colorop object to be cleaned
+ */
+void drm_colorop_cleanup(struct drm_colorop *colorop)
+{
+       struct drm_device *dev = colorop->dev;
+       struct drm_mode_config *config = &dev->mode_config;
+
+       list_del(&colorop->head);
+       config->num_colorop--;
+
+       kfree(colorop->state);
+}
+EXPORT_SYMBOL(drm_colorop_cleanup);
+
+/**
+ * drm_colorop_pipeline_destroy - Helper for color pipeline destruction
+ *
+ * @dev: - The drm_device containing the drm_planes with the color_pipelines
+ *
+ * Provides a default color pipeline destroy handler for drm_device.
+ */
+void drm_colorop_pipeline_destroy(struct drm_device *dev)
+{
+       struct drm_mode_config *config = &dev->mode_config;
+       struct drm_colorop *colorop, *next;
+
+       list_for_each_entry_safe(colorop, next, &config->colorop_list, head) {
+               drm_colorop_cleanup(colorop);
+               kfree(colorop);
+       }
+}
+EXPORT_SYMBOL(drm_colorop_pipeline_destroy);
+
 /**
  * drm_plane_colorop_curve_1d_init - Initialize a DRM_COLOROP_1D_CURVE
  *
index d8c17c53758681ab8ce4c2cb42eb59224807fd09..ba03b35454da5c9dc3f109a7e0cbb38142d8986c 100644 (file)
@@ -237,6 +237,9 @@ static inline struct drm_colorop *drm_colorop_find(struct drm_device *dev,
        return mo ? obj_to_colorop(mo) : NULL;
 }
 
+void drm_colorop_pipeline_destroy(struct drm_device *dev);
+void drm_colorop_cleanup(struct drm_colorop *colorop);
+
 int drm_plane_colorop_curve_1d_init(struct drm_device *dev, struct drm_colorop *colorop,
                                    struct drm_plane *plane, u64 supported_tfs);