> Subject: Re: [i.MX8MM+CCF 03/41] clk: introduce clk_dev_binded > > 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.
A composite clk contains a mux/gate/divider clk. Only the composite clk needs to binded with a udevice. The mux/gate/divider inside a composite clk should not bind a device, because they needs to be hidden from dm tree or clk dumps. If bind the mux/gate/divider insides a composite clk, that will be mess. The reason to introduce composite clk is to make clk tree cleaner/simplier. Regards, Peng. > > > 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 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot