mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 15:41:40 +00:00
clk: Add clk_get_by_name_optional
This adds a helper function for clk_get_by_name in cases where the clock is optional. Hopefully this helps point driver writers in the right direction. Also convert some existing users. Signed-off-by: Sean Anderson <seanga2@gmail.com> Reviewed-by: Neil Armstrong <narmstrong@baylibre.com> Reviewed-by: Simon Glass <sjg@chromium.org> Link: https://lore.kernel.org/r/20220115205247.566210-2-seanga2@gmail.com
This commit is contained in:
parent
a0abea867a
commit
e96e2132f9
3 changed files with 29 additions and 4 deletions
|
@ -472,8 +472,9 @@ static int zynq_clk_probe(struct udevice *dev)
|
|||
|
||||
for (i = 0; i < 2; i++) {
|
||||
sprintf(name, "gem%d_emio_clk", i);
|
||||
ret = clk_get_by_name(dev, name, &priv->gem_emio_clk[i]);
|
||||
if (ret < 0 && ret != -ENODATA) {
|
||||
ret = clk_get_by_name_optional(dev, name,
|
||||
&priv->gem_emio_clk[i]);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to get %s clock\n", name);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -91,8 +91,8 @@ static int meson_rng_of_to_plat(struct udevice *dev)
|
|||
return -ENODEV;
|
||||
|
||||
/* Get optional "core" clock */
|
||||
err = clk_get_by_name(dev, "core", &pdata->clk);
|
||||
if (err && err != -ENODATA)
|
||||
err = clk_get_by_name_optional(dev, "core", &pdata->clk);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -287,6 +287,30 @@ static inline int clk_release_all(struct clk *clk, int count)
|
|||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* clk_get_by_name_optional() - Get/request a optional clock by name.
|
||||
* @dev: The client device.
|
||||
* @name: The name of the clock to request, within the client's list of
|
||||
* clocks.
|
||||
* @clk: A pointer to a clock struct to initialize.
|
||||
*
|
||||
* Behaves the same as clk_get_by_name(), except when there is no clock
|
||||
* provider. In the latter case, return 0.
|
||||
*
|
||||
* Return: 0 if OK, or a negative error code.
|
||||
*/
|
||||
static inline int clk_get_by_name_optional(struct udevice *dev,
|
||||
const char *name, struct clk *clk)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = clk_get_by_name(dev, name, clk);
|
||||
if (ret == -ENODATA)
|
||||
return 0;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* clk_get_by_name_nodev_optional - Get/request an optinonal clock by name
|
||||
* without a device.
|
||||
|
|
Loading…
Reference in a new issue