[PATCH 1/2] clk: Allow clk_get_by_name() with NULL name

This allows devm_clock_get(dev, NULL) to work and get the first clock, which is common in code ported from Linux.
Signed-off-by: Samuel Holland samuel@sholland.org ---
drivers/clk/clk-uclass.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c index 2f9635524cf..bfacafb2eef 100644 --- a/drivers/clk/clk-uclass.c +++ b/drivers/clk/clk-uclass.c @@ -399,13 +399,14 @@ int clk_get_by_name(struct udevice *dev, const char *name, struct clk *clk)
int clk_get_by_name_nodev(ofnode node, const char *name, struct clk *clk) { - int index; + int index = 0;
debug("%s(node=%p, name=%s, clk=%p)\n", __func__, ofnode_get_name(node), name, clk); clk->dev = NULL;
- index = ofnode_stringlist_search(node, "clock-names", name); + if (name) + index = ofnode_stringlist_search(node, "clock-names", name); if (index < 0) { debug("fdt_stringlist_search() failed: %d\n", index); return index;

This allows devm_reset_control_get(dev, NULL) to work and get the first reset control, which is common in code ported from Linux.
Signed-off-by: Samuel Holland samuel@sholland.org ---
drivers/reset/reset-uclass.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/reset/reset-uclass.c b/drivers/reset/reset-uclass.c index bcef46039c2..a26c623a77e 100644 --- a/drivers/reset/reset-uclass.c +++ b/drivers/reset/reset-uclass.c @@ -147,13 +147,14 @@ int reset_get_bulk(struct udevice *dev, struct reset_ctl_bulk *bulk) int reset_get_by_name(struct udevice *dev, const char *name, struct reset_ctl *reset_ctl) { - int index; + int index = 0;
debug("%s(dev=%p, name=%s, reset_ctl=%p)\n", __func__, dev, name, reset_ctl); reset_ctl->dev = NULL;
- index = dev_read_stringlist_search(dev, "reset-names", name); + if (name) + index = dev_read_stringlist_search(dev, "reset-names", name); if (index < 0) { debug("fdt_stringlist_search() failed: %d\n", index); return index;

On 11/28/22 00:53, Samuel Holland wrote:
This allows devm_reset_control_get(dev, NULL) to work and get the first reset control, which is common in code ported from Linux.
Signed-off-by: Samuel Holland samuel@sholland.org
drivers/reset/reset-uclass.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/reset/reset-uclass.c b/drivers/reset/reset-uclass.c index bcef46039c2..a26c623a77e 100644 --- a/drivers/reset/reset-uclass.c +++ b/drivers/reset/reset-uclass.c @@ -147,13 +147,14 @@ int reset_get_bulk(struct udevice *dev, struct reset_ctl_bulk *bulk) int reset_get_by_name(struct udevice *dev, const char *name, struct reset_ctl *reset_ctl) {
- int index;
int index = 0;
debug("%s(dev=%p, name=%s, reset_ctl=%p)\n", __func__, dev, name, reset_ctl); reset_ctl->dev = NULL;
- index = dev_read_stringlist_search(dev, "reset-names", name);
- if (name)
if (index < 0) { debug("fdt_stringlist_search() failed: %d\n", index); return index;index = dev_read_stringlist_search(dev, "reset-names", name);
Reviewed-by: Sean Anderson seanga2@gmail.com

Hi Samuel,
On Sun, 27 Nov 2022 at 22:54, Samuel Holland samuel@sholland.org wrote:
This allows devm_reset_control_get(dev, NULL) to work and get the first reset control, which is common in code ported from Linux.
Signed-off-by: Samuel Holland samuel@sholland.org
drivers/reset/reset-uclass.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/reset/reset-uclass.c b/drivers/reset/reset-uclass.c index bcef46039c2..a26c623a77e 100644 --- a/drivers/reset/reset-uclass.c +++ b/drivers/reset/reset-uclass.c @@ -147,13 +147,14 @@ int reset_get_bulk(struct udevice *dev, struct reset_ctl_bulk *bulk) int reset_get_by_name(struct udevice *dev, const char *name, struct reset_ctl *reset_ctl) {
int index;
int index = 0; debug("%s(dev=%p, name=%s, reset_ctl=%p)\n", __func__, dev, name, reset_ctl); reset_ctl->dev = NULL;
index = dev_read_stringlist_search(dev, "reset-names", name);
if (name)
index = dev_read_stringlist_search(dev, "reset-names", name); if (index < 0) { debug("fdt_stringlist_search() failed: %d\n", index); return index;
The above three lines should only be used when name is NULL.
-- 2.37.4
Please update the function comment in the header file and add a test for this to test/dm/reset.c
Regards, Simon

On 11/28/22 00:53, Samuel Holland wrote:
This allows devm_clock_get(dev, NULL) to work and get the first clock,
nit: devm_clk_get
which is common in code ported from Linux.
Signed-off-by: Samuel Holland samuel@sholland.org
drivers/clk/clk-uclass.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c index 2f9635524cf..bfacafb2eef 100644 --- a/drivers/clk/clk-uclass.c +++ b/drivers/clk/clk-uclass.c @@ -399,13 +399,14 @@ int clk_get_by_name(struct udevice *dev, const char *name, struct clk *clk)
int clk_get_by_name_nodev(ofnode node, const char *name, struct clk *clk) {
- int index;
int index = 0;
debug("%s(node=%p, name=%s, clk=%p)\n", __func__, ofnode_get_name(node), name, clk); clk->dev = NULL;
- index = ofnode_stringlist_search(node, "clock-names", name);
- if (name)
if (index < 0) { debug("fdt_stringlist_search() failed: %d\n", index); return index;index = ofnode_stringlist_search(node, "clock-names", name);
Reviewed-by: Sean Anderson seanga2@gmail.com

Hi Samuel,
On Sun, 27 Nov 2022 at 22:54, Samuel Holland samuel@sholland.org wrote:
This allows devm_clock_get(dev, NULL) to work and get the first clock, which is common in code ported from Linux.
Signed-off-by: Samuel Holland samuel@sholland.org
drivers/clk/clk-uclass.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c index 2f9635524cf..bfacafb2eef 100644 --- a/drivers/clk/clk-uclass.c +++ b/drivers/clk/clk-uclass.c @@ -399,13 +399,14 @@ int clk_get_by_name(struct udevice *dev, const char *name, struct clk *clk)
int clk_get_by_name_nodev(ofnode node, const char *name, struct clk *clk) {
int index;
int index = 0; debug("%s(node=%p, name=%s, clk=%p)\n", __func__, ofnode_get_name(node), name, clk); clk->dev = NULL;
index = ofnode_stringlist_search(node, "clock-names", name);
if (name)
index = ofnode_stringlist_search(node, "clock-names", name); if (index < 0) { debug("fdt_stringlist_search() failed: %d\n", index); return index;
-- 2.37.4
Same comments as for the reset patch.
Regards, Simon
participants (3)
-
Samuel Holland
-
Sean Anderson
-
Simon Glass