[U-Boot] [i.MX8MM+CCF 03/41] clk: introduce clk_dev_binded

Lukasz Majewski lukma at denx.de
Mon May 6 21:57:27 UTC 2019


On Tue, 30 Apr 2019 10:17:40 +0000
Peng Fan <peng.fan at nxp.com> wrote:

> When support Clock Common Framework, U-Boot use dev for
> clk tree information, there is no clk->parent.

There is a function in clk uclass named:
clk_get_parent() to provide parent of the clock.

> When
> support composite clk, it contains mux/gate/divider,
> but the mux/gate/divider is not binded with device.

There is a binding:
struct clk_pllv3 {
	struct clk	clk;
	...
};

The clk.dev points to corresponding device.

In the opposite direction we do have dev->driver_data, which points to
struct clk embedded in for example struct clk_pllv3.
(as struct clk_pllv3 and struct clk share the same address it is up to
us to cast it properly).

I've written my thoughts and considerations about using dev->private
and dev->driver_data in the patch cover letter [1]


> So we could not use dev_get_driver_data to get the correct
> clk_mux/gate/divider. 

Maybe I've overlooked something, but dev_get_driver_data() shall
provide correct reference to udevice.

> So add clk_dev_binded to let
> choose the correct method.
> 

[1] - http://patchwork.ozlabs.org/cover/1090669/

> Signed-off-by: Peng Fan <peng.fan at nxp.com>
> ---
>  drivers/clk/clk.c | 8 ++++++++
>  include/clk.h     | 9 +++++++++
>  2 files changed, 17 insertions(+)
> 
> diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
> index 0a0fffb50b..025bb99ecc 100644
> --- a/drivers/clk/clk.c
> +++ b/drivers/clk/clk.c
> @@ -54,3 +54,11 @@ const char *clk_hw_get_name(const struct clk *hw)
>  {
>  	return hw->dev->name;
>  }
> +
> +bool clk_dev_binded(struct clk *clk)
> +{
> +	if (clk->dev && (clk->dev->flags & DM_FLAG_BOUND))
> +		return true;
> +
> +	return false;
> +}
> diff --git a/include/clk.h b/include/clk.h
> index a4ecca9fbc..8199119d01 100644
> --- a/include/clk.h
> +++ b/include/clk.h
> @@ -337,4 +337,13 @@ static inline bool clk_valid(struct clk *clk)
>   * @return zero on success, or -ENOENT on error
>   */
>  int clk_get_by_id(ulong id, struct clk **clkp);
> +
> +/**
> + * clk_dev_binded() - Check whether the clk has a device binded
> + *
> + * @clk		A pointer to the clk
> + *
> + * @return true on binded, or false on no
> + */
> +bool clk_dev_binded(struct clk *clk);
>  #endif




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20190506/664e7444/attachment.sig>


More information about the U-Boot mailing list