Messages in this thread |  | | Subject | Re: [PATCH] clk: Use parent node pointer during registration if necessary | From | Stephen Boyd <> | Date | Sat, 04 Jan 2020 23:07:11 -0800 |
| |
Quoting Bjorn Andersson (2020-01-02 23:39:26) > On Mon 30 Dec 11:04 PST 2019, Stephen Boyd wrote: > > > Sometimes clk drivers are attached to devices which are children of a > > parent device that is connected to a node in DT. This happens when > > devices are MFD-ish and the parent device driver mostly registers child > > devices to match against drivers placed in their respective subsystem > > directories like drivers/clk, drivers/regulator, etc. When the clk > > driver calls clk_register() with a device pointer, that struct device > > pointer won't have a device_node associated with it because it was > > created purely in software as a way to partition logic to a subsystem. > > > > This causes problems for the way we find parent clks for the clks > > registered by these child devices because we look at the registering > > device's device_node pointer to lookup 'clocks' and 'clock-names' > > properties. Let's use the parent device's device_node pointer if the > > registering device doesn't have a device_node but the parent does. This > > simplifies clk registration code by avoiding the need to assign some > > device_node to the device registering the clk. > > > > Cc: Bjorn Andersson <bjorn.andersson@linaro.org> > > Reported-by: Niklas Cassel <niklas.cassel@linaro.org> > > Signed-off-by: Stephen Boyd <sboyd@kernel.org> > > --- > > > > I decided to introduce a new function instead of trying to jam it all > > in the one line where we assign np. This way the function gets the > > true 'np' as an argument all the time. > > > > Looks better. > > > drivers/clk/clk.c | 27 +++++++++++++++++++++++++-- > > 1 file changed, 25 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c > > index b68e200829f2..a743fffe8e46 100644 > > --- a/drivers/clk/clk.c > > +++ b/drivers/clk/clk.c > > @@ -3719,6 +3719,28 @@ __clk_register(struct device *dev, struct device_node *np, struct clk_hw *hw) > > return ERR_PTR(ret); > > } > > > > +/** > > + * dev_or_parent_of_node - Get device node of @dev or @dev's parent > > ()
This has been left out historically in this file. I'll add it but I guess I should really take a pass at updating the docs in the whole file!
> > > + * @dev: Device to get device node of > > + * > > + * Returns: device node pointer of @dev, or the device node pointer of > > Return: (no 's')
Thanks.
> > > With that, > > Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org> > Tested-by: Bjorn Andersson <bjorn.andersson@linaro.org> >
|  |