Messages in this thread Patch in this message | | | Date | Fri, 4 Jan 2019 16:54:06 +0100 | From | Miquel Raynal <> | Subject | Re: [PATCH v3 2/4] clk: core: link consumer with clock driver |
| |
Hi Stephen,
Stephen Boyd <sboyd@kernel.org> wrote on Tue, 11 Dec 2018 09:12:55 -0800:
> Sorry, I'm not reviewing the whole patch right now, just this one little > bit because I'm also working in the same area. > > Quoting Miquel Raynal (2018-12-04 11:24:38) > > diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h > > index 60c51871b04b..721d6b55b2fa 100644 > > --- a/include/linux/clk-provider.h > > +++ b/include/linux/clk-provider.h > > @@ -781,6 +781,8 @@ void devm_clk_hw_unregister(struct device *dev, struct clk_hw *hw); > > const char *__clk_get_name(const struct clk *clk); > > const char *clk_hw_get_name(const struct clk_hw *hw); > > struct clk_hw *__clk_get_hw(struct clk *clk); > > +void clk_link_consumer(struct device *consumer, struct clk *clk); > > +void clk_unlink_consumer(struct clk *clk); > > We shouldn't need to add these functions as far as I can tell. That's > because __clk_get() has become an internal API between clkdev.c and > clk.c that does nothing now on implementations that aren't the CCF. We > can even change this API to take a clk_hw pointer instead of a clk > pointer. > > I'd rather see us plumb a struct device and clk_hw structure down into > __clk_get() and fold it all into __clk_create_clk, possibly even > renaming __clk_create_clk to clk_hw_create_clk(). That way we can get > the calling device and clk_hw pointer in one call in the clk framework, > along with the device name and connection name, and then generate the > struct clk right there. This can simplify some code and make it easier > to extend this to associate calling devices with the clk consumer > somehow. > > Here's the diff. With this, you should be able to add and remove device > links in clk_hw_create_clk() when dev != NULL.
Thanks for the help; I updated my work on top of yours, it looks ok but I need to run some more tests.
However I had to tweak a parameter in one of your recent changes, you used '-1' as index in __of_clock_get() while it is not a valid value (returning an error). As in the __of_clk_get_by_name() function you removed index was just set to 0 at the top of the function, I think the below fix is valid.
Thanks, Miquèl
---
diff --git a/drivers/clk/clkdev.c b/drivers/clk/clkdev.c index ba4d1e06732d..f2f4f2afd28c 100644 --- a/drivers/clk/clkdev.c +++ b/drivers/clk/clkdev.c @@ -163,7 +163,7 @@ struct clk *clk_get(struct device *dev, const char *con_id) struct clk_hw *hw; if (dev && dev->of_node) { - hw = of_clk_get_hw(dev->of_node, -1, con_id); + hw = of_clk_get_hw(dev->of_node, 0, con_id); if (!IS_ERR(hw) || PTR_ERR(hw) == -EPROBE_DEFER) return clk_hw_create_clk(dev, hw, dev_id, con_id); }
| |