The current code attempts to bind scmi_voltage_domain to regulator subnode
of the SCMI protocol node, so scmi_voltage_domain can then bind regulators
directly to subnodes of its node. This kind of behavior should not be in
core code, move it into scmi_voltage_domain driver code. Let the driver
descend into regulator node and bind regulators to its subnodes.

Fixes: 1f213ee4dbf2 ("firmware: scmi: voltage regulator")
Signed-off-by: Marek Vasut <ma...@denx.de>
---
Cc: Alice Guo <alice....@nxp.com>
Cc: Ilias Apalodimas <ilias.apalodi...@linaro.org>
Cc: Jaehoon Chung <jh80.ch...@samsung.com>
Cc: Tom Rini <tr...@konsulko.com>
Cc: u-boot@lists.denx.de
---
 drivers/firmware/scmi/scmi_agent-uclass.c | 8 +-------
 drivers/power/regulator/scmi_regulator.c  | 6 ++++++
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/firmware/scmi/scmi_agent-uclass.c 
b/drivers/firmware/scmi/scmi_agent-uclass.c
index 8c907c3b032..e6e43ae936a 100644
--- a/drivers/firmware/scmi/scmi_agent-uclass.c
+++ b/drivers/firmware/scmi/scmi_agent-uclass.c
@@ -427,14 +427,8 @@ static int scmi_bind_protocols(struct udevice *dev)
                        break;
                case SCMI_PROTOCOL_ID_VOLTAGE_DOMAIN:
                        if (IS_ENABLED(CONFIG_DM_REGULATOR_SCMI) &&
-                           scmi_protocol_is_supported(dev, protocol_id)) {
-                               node = ofnode_find_subnode(node, "regulators");
-                               if (!ofnode_valid(node)) {
-                                       dev_err(dev, "no regulators node\n");
-                                       return -ENXIO;
-                               }
+                           scmi_protocol_is_supported(dev, protocol_id))
                                drv = DM_DRIVER_GET(scmi_voltage_domain);
-                       }
                        break;
                default:
                        break;
diff --git a/drivers/power/regulator/scmi_regulator.c 
b/drivers/power/regulator/scmi_regulator.c
index 99f6506f162..2550b27246f 100644
--- a/drivers/power/regulator/scmi_regulator.c
+++ b/drivers/power/regulator/scmi_regulator.c
@@ -178,6 +178,12 @@ static int scmi_regulator_bind(struct udevice *dev)
        ofnode node;
        int ret;
 
+       node = ofnode_find_subnode(node, "regulators");
+       if (!ofnode_valid(node)) {
+               dev_err(dev, "no regulators node\n");
+               return -ENXIO;
+       }
+
        drv = DM_DRIVER_GET(scmi_regulator);
 
        ofnode_for_each_subnode(node, dev_ofnode(dev)) {
-- 
2.47.2

Reply via email to