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++) {
|
for (i = 0; i < 2; i++) {
|
||||||
sprintf(name, "gem%d_emio_clk", i);
|
sprintf(name, "gem%d_emio_clk", i);
|
||||||
ret = clk_get_by_name(dev, name, &priv->gem_emio_clk[i]);
|
ret = clk_get_by_name_optional(dev, name,
|
||||||
if (ret < 0 && ret != -ENODATA) {
|
&priv->gem_emio_clk[i]);
|
||||||
|
if (ret) {
|
||||||
dev_err(dev, "failed to get %s clock\n", name);
|
dev_err(dev, "failed to get %s clock\n", name);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,8 +91,8 @@ static int meson_rng_of_to_plat(struct udevice *dev)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
/* Get optional "core" clock */
|
/* Get optional "core" clock */
|
||||||
err = clk_get_by_name(dev, "core", &pdata->clk);
|
err = clk_get_by_name_optional(dev, "core", &pdata->clk);
|
||||||
if (err && err != -ENODATA)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -287,6 +287,30 @@ static inline int clk_release_all(struct clk *clk, int count)
|
||||||
}
|
}
|
||||||
#endif
|
#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
|
* clk_get_by_name_nodev_optional - Get/request an optinonal clock by name
|
||||||
* without a device.
|
* without a device.
|
||||||
|
|
Loading…
Reference in a new issue