On 10/16, York Sun wrote:
> 
> 
> On 10/16/2015 02:31 PM, Stephen Boyd wrote:
> > On 10/16, York Sun wrote:
> >>
> >>
> >> On 10/09/2015 05:09 PM, Stephen Boyd wrote:
> >>> On 10/09, York Sun wrote:
> >>>> +/*
> >>>> + * To support multiple si5338 chips, we cannot use devm_clk_get because
> >>>> + * each chip has its own clock sources. If device tree is not used,
> >>>> + * platform driver should provide these clocks. Let the clocks be freed
> >>>> + * automatically when device is unbound. We implement our own 
> >>>> devm_of_clk_get.
> >>>> + */
> >>>> +static void devm_of_clk_release(struct device *dev, void *res)
> >>>> +{
> >>>> +        clk_put(*(struct clk **)res);
> >>>> +}
> >>>> +
> >>>> +static struct clk *devm_of_clk_get(struct device *dev, struct 
> >>>> device_node *np,
> >>>
> >>> What is this? I don't get it at all.
> >>
> >> Maybe you can help me on this.
> >> We have two ways to get parent clock. One is from device tree, the other 
> >> is from
> >> platform data. When the clock is from platform data, the consumer gets the 
> >> clock
> >> and passes it. The clock will be put by the consumer as well. When the 
> >> parent
> >> clock comes from device tree, what I am trying to do is to call 
> >> of_clk_get(),
> >> without worrying about to call clk_put() later when the driver is removed, 
> >> so I
> >> don't have to know where the parent clock data came from.
> >>
> > 
> > This driver should always use clk_get() then. If the mode is
> > device tree, clk_get() will lookup the clock in DT and get it
> > from there. If the mode is platform data, then we'll fallback to
> > the clkdev method of clk_get(), which will look for a clk_lookup
> > created for the device calling clk_get() + the connection id that
> > was provided by the lookup creator. This driver should always
> > call clk_put() on the clock when it's done with it, regardless of
> > DT vs. platform data.
> > 
> 
> For the platform data mode, I think it is up to the consumer to get and put 
> the
> parent clocks. The current code is to pass (struct clk *) pointers as parent
> clocks. Are you suggesting to pass the name of parent clocks?
> 

I'm suggesting to register clocks with clkdev using a device name
that matches the consumer. The consumer (this driver?) will
simply call clk_get() and clk_put() then, nothing else is needed.
I'm not suggesting to pass the names of the parent clocks. It
sounds like those are inputs to this device, so we should be
calling clk_get() with a device and a connection id to get the
clock.

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
--
To unsubscribe from this list: send the line "unsubscribe linux-clk" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to