mirror of
https://github.com/Heleguo/lede.git
synced 2025-12-19 04:11:25 +00:00
70 lines
2.1 KiB
Diff
70 lines
2.1 KiB
Diff
From a6ba2dad0aa4f623ab0def8b6e6888ac00639055 Mon Sep 17 00:00:00 2001
|
|
From: Heiko Stuebner <heiko@sntech.de>
|
|
Date: Fri, 21 Feb 2025 00:41:40 +0100
|
|
Subject: [PATCH] drivers: base: component: add function to query the bound
|
|
status
|
|
|
|
The component helpers already expose the bound status in debugfs, but at
|
|
times it might be necessary to also check that state in the kernel and
|
|
act differently depending on the result.
|
|
|
|
For example the shutdown handler of a drm-driver might need to stop
|
|
a whole output pipeline if the drm device is up and running, but may
|
|
run into problems if that drm-device has never been set up before,
|
|
for example because the binding deferred.
|
|
|
|
So add a little helper that returns the bound status for a componet
|
|
device.
|
|
|
|
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
|
Link: https://patchwork.freedesktop.org/patch/msgid/20250220234141.2788785-2-heiko@sntech.de
|
|
---
|
|
drivers/base/component.c | 14 ++++++++++++++
|
|
include/linux/component.h | 4 +++-
|
|
2 files changed, 17 insertions(+), 1 deletion(-)
|
|
|
|
--- a/drivers/base/component.c
|
|
+++ b/drivers/base/component.c
|
|
@@ -569,6 +569,20 @@ void component_master_del(struct device
|
|
}
|
|
EXPORT_SYMBOL_GPL(component_master_del);
|
|
|
|
+bool component_master_is_bound(struct device *parent,
|
|
+ const struct component_master_ops *ops)
|
|
+{
|
|
+ struct aggregate_device *adev;
|
|
+
|
|
+ guard(mutex)(&component_mutex);
|
|
+ adev = __aggregate_find(parent, ops);
|
|
+ if (!adev)
|
|
+ return 0;
|
|
+
|
|
+ return adev->bound;
|
|
+}
|
|
+EXPORT_SYMBOL_GPL(component_master_is_bound);
|
|
+
|
|
static void component_unbind(struct component *component,
|
|
struct aggregate_device *adev, void *data)
|
|
{
|
|
--- a/include/linux/component.h
|
|
+++ b/include/linux/component.h
|
|
@@ -3,7 +3,7 @@
|
|
#define COMPONENT_H
|
|
|
|
#include <linux/stddef.h>
|
|
-
|
|
+#include <linux/types.h>
|
|
|
|
struct device;
|
|
|
|
@@ -90,6 +90,8 @@ int component_compare_dev_name(struct de
|
|
|
|
void component_master_del(struct device *,
|
|
const struct component_master_ops *);
|
|
+bool component_master_is_bound(struct device *parent,
|
|
+ const struct component_master_ops *ops);
|
|
|
|
struct component_match;
|
|
|