On Tue, 30 Apr 2019 10:17:40 +0000 Peng Fan <peng....@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....@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: lu...@denx.de
pgpjqZ1bB5vKD.pgp
Description: OpenPGP digital signature
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot