[U-Boot] [PATCH v4 08/13] dm: clk: Define clk_get_parent_rate() for clk operations

Peng Fan peng.fan at nxp.com
Fri May 17 05:58:15 UTC 2019


> Subject: [PATCH v4 08/13] dm: clk: Define clk_get_parent_rate() for clk
> operations
> 
> This commit adds the clk_get_parent_rate() function, which is responsible for
> getting the rate of parent clock.
> Unfortunately, u-boot's DM support for getting parent is different (the parent
> relationship is in udevice) than the one in common clock framework (CCF) in
> Linux.
> 
> To alleviate this problem - the clk_get_parent_rate() function has been
> introduced to clk-uclass.c.
> 
> Signed-off-by: Lukasz Majewski <lukma at denx.de>
> 
> ---
> 
> Changes in v4: None
> Changes in v3:
> - The rate information is now cached into struct clk field
> - The clk_get_parent() is used to get pointer to the parent struct clk
> 
>  drivers/clk/clk-uclass.c | 22 ++++++++++++++++++++++
>  include/clk.h            |  9 +++++++++
>  2 files changed, 31 insertions(+)
> 
> diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c index
> 1a726dafaa..ea43871112 100644
> --- a/drivers/clk/clk-uclass.c
> +++ b/drivers/clk/clk-uclass.c
> @@ -394,6 +394,28 @@ struct clk *clk_get_parent(struct clk *clk)
>  	return pclk;
>  }
> 
> +ulong clk_get_parent_rate(struct clk *clk) {
> +	const struct clk_ops *ops;
> +	struct clk *pclk;
> +
> +	debug("%s(clk=%p)\n", __func__, clk);
> +
> +	pclk = clk_get_parent(clk);
> +	if (IS_ERR(pclk))
> +		return -ENODEV;
> +
> +	ops = clk_dev_ops(pclk->dev);
> +	if (!ops->get_rate)
> +		return -ENOSYS;
> +
> +	/* Read the 'rate' if not already set */
> +	if (!pclk->rate)
> +		pclk->rate = clk_get_rate(pclk);
> +
> +	return pclk->rate;
> +}
> +
>  ulong clk_set_rate(struct clk *clk, ulong rate)  {
>  	const struct clk_ops *ops = clk_dev_ops(clk->dev); diff --git
> a/include/clk.h b/include/clk.h index 0873b1e507..955699eb18 100644
> --- a/include/clk.h
> +++ b/include/clk.h
> @@ -268,6 +268,15 @@ ulong clk_get_rate(struct clk *clk);  struct clk
> *clk_get_parent(struct clk *clk);
> 
>  /**
> + * clk_get_parent_rate() - Get parent of current clock rate.
> + *
> + * @clk:	A clock struct that was previously successfully requested by
> + *		clk_request/get_by_*().
> + * @return clock rate in Hz, or -ve error code.
> + */
> +ulong clk_get_parent_rate(struct clk *clk);
> +
> +/**
>   * clk_set_rate() - Set current clock rate.
>   *
>   * @clk:	A clock struct that was previously successfully requested by

Reviewed-by: Peng Fan <peng.fan at nxp.com>

> --
> 2.11.0



More information about the U-Boot mailing list