[PATCH v2 04/10] reset: Add reset_controller_get_provider()
Geert Uytterhoeven <[email protected]> Wed, 8 Jul 2026 12:16:22 +0200
| Newsgroups | org.kernel.vger.arm-scmi,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-clk,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pm,org.kernel.vger.linux-renesas-soc |
|---|---|
| Message-ID | <c415dc5f468e62cd0e2a6b9639abb92a82c01324.1783505329.git.geert+renesas@glider.be> |
The reset subsystem differs from the clock subsystem in multiple ways:
1. It does not provide a public way to lookup resets from a reset
provider (clock has of_clk_get_from_provider()),
2. The xlate callback does not return a reset object, but merely an
index, which is converted to a reset object by the reset core.
Hence add a public helper reset_controller_get_provider(), which just
returns the provider, and will be used by the R-Car X5H Module
Controller driver.
Signed-off-by: Geert Uytterhoeven <[email protected]>
---
v2:
- No changes.
---
drivers/reset/core.c | 11 +++++++++++
include/linux/reset-controller.h | 6 ++++++
2 files changed, 17 insertions(+)
diff --git a/drivers/reset/core.c b/drivers/reset/core.c
index 38e189d04d09b270..57c427bb33b322e2 100644
--- a/drivers/reset/core.c
+++ b/drivers/reset/core.c
@@ -1135,6 +1135,17 @@ __reset_find_rcdev(const struct fwnode_reference_args *args, bool gpio_fallback)
return NULL;
}
+struct reset_controller_dev *
+reset_controller_get_provider(struct fwnode_handle *fwnode)
+{
+ struct fwnode_reference_args args = { .fwnode = fwnode };
+
+ guard(mutex)(&reset_list_mutex);
+
+ return __reset_find_rcdev(&args, false);
+}
+EXPORT_SYMBOL_GPL(reset_controller_get_provider);
+
struct reset_control *
__fwnode_reset_control_get(struct fwnode_handle *fwnode, const char *id, int index,
enum reset_control_flags flags)
diff --git a/include/linux/reset-controller.h b/include/linux/reset-controller.h
index 52a5a4e81f184407..0c17a36466115ba6 100644
--- a/include/linux/reset-controller.h
+++ b/include/linux/reset-controller.h
@@ -74,6 +74,7 @@ void reset_controller_unregister(struct reset_controller_dev *rcdev);
struct device;
int devm_reset_controller_register(struct device *dev,
struct reset_controller_dev *rcdev);
+struct reset_controller_dev *reset_controller_get_provider(struct fwnode_handle *fwnode);
#else
static inline int reset_controller_register(struct reset_controller_dev *rcdev)
{
@@ -89,6 +90,11 @@ static inline int devm_reset_controller_register(struct device *dev,
{
return 0;
}
+
+static inline struct reset_controller_dev *reset_controller_get_provider(struct fwnode_handle *fwnode)
+{
+ return NULL;
+}
#endif
#endif
--
2.43.0