> -----邮件原件----- > 发件人: Marek Vasut <ma...@denx.de> > 发送时间: 2025年3月22日 9:45 > 收件人: u-boot@lists.denx.de > 抄送: Marek Vasut <ma...@denx.de>; Alice Guo <alice....@nxp.com>; Ilias > Apalodimas <ilias.apalodi...@linaro.org>; Jaehoon Chung > <jh80.ch...@samsung.com>; Tom Rini <tr...@konsulko.com> > 主题: [EXT] [PATCH] power: regulator: scmi: Move regulator subnode hack to > scmi_regulator > > Caution: This is an external email. Please take care when clicking links or > opening attachments. When in doubt, report the message using the 'Report this > email' button > > > 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
Hi Marek, Is there a problem in your patch? Should it be changed like this: --- a/drivers/power/regulator/scmi_regulator.c +++ b/drivers/power/regulator/scmi_regulator.c @@ -175,12 +175,19 @@ U_BOOT_DRIVER(scmi_regulator) = { static int scmi_regulator_bind(struct udevice *dev) { struct driver *drv; + ofnode regul_node; ofnode node; int ret; + regul_node = ofnode_find_subnode(dev_ofnode(dev), "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)) { + ofnode_for_each_subnode(node, regul_node) { ret = device_bind(dev, drv, ofnode_get_name(node), NULL, node, NULL); if (ret) Best Regards, Alice Guo