clk: Add clk_resolve_parent_clk()

Add clk_resolve_parent_clk() to resolve parent clock udevice name
based on clock-names DT property. This is used in SoC clock drivers
to look up the clock name in clock tables, which matches a clock
name in DT clock-names property, and convert it into udevice name
which is used by U-Boot clock framework to look up parent clock in
e.g. clk_register() using uclass_get_device_by_name(UCLASS_CLK,
parent_name, &parent);

Signed-off-by: Marek Vasut <marex@denx.de>
This commit is contained in:
Marek Vasut 2025-03-23 16:58:30 +01:00 committed by Fabio Estevam
parent cc9dcba9cc
commit 1054163c4d
2 changed files with 27 additions and 0 deletions

View file

@ -420,6 +420,24 @@ int clk_get_by_name_nodev(ofnode node, const char *name, struct clk *clk)
return clk_get_by_index_nodev(node, index, clk);
}
const char *
clk_resolve_parent_clk(struct udevice *dev, const char *name)
{
struct udevice *parent;
struct clk clk;
int ret;
ret = uclass_get_device_by_name(UCLASS_CLK, name, &parent);
if (!ret)
return name;
ret = clk_get_by_name(dev, name, &clk);
if (!clk.dev)
return name;
return clk.dev->name;
}
int clk_release_all(struct clk *clk, unsigned int count)
{
unsigned int i;

View file

@ -350,6 +350,15 @@ static inline int clk_get_by_name_nodev_optional(ofnode node, const char *name,
return ret;
}
/**
* clk_resolve_parent_clk - Determine name of clock udevice based on clock-names
* @dev: The client udevice.
* @name: The name of the clock to look up.
*
* Return name of the clock udevice which represents clock with clock-names name.
*/
const char *clk_resolve_parent_clk(struct udevice *dev, const char *name);
/**
* enum clk_defaults_stage - What stage clk_set_defaults() is called at
* @CLK_DEFAULTS_PRE: Called before probe. Setting of defaults for clocks owned