> Subject: [PATCH v3 07/11] 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 <lu...@denx.de> > > --- > > 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 > 7ebe4e79fe..da6624d4f2 100644 > --- a/drivers/clk/clk-uclass.c > +++ b/drivers/clk/clk-uclass.c > @@ -355,6 +355,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);
Suggest a flag NOCACHE like Linux, in clk_get_rate, check the flag, if not set, just read the cached value. How do you think? Regards, Peng. > + > + 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 b44ee3b158..98c3e12fb4 100644 > --- a/include/clk.h > +++ b/include/clk.h > @@ -249,6 +249,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 > -- > 2.11.0 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot