* Ruslan Bilovol <ruslan.bilovol@xxxxxx> [120629 14:55]: > On Wed, Jun 20, 2012 at 4:31 PM, Tony Lindgren <tony@xxxxxxxxxxx> wrote: > > > > * Ruslan Bilovol <ruslan.bilovol@xxxxxx> [120612 10:42]: > > > If the clocks are enabled and we want to enable them again > > > omap4430_phy_set_clk disables them. > > > > > > Fix this - so now if we try to enable already enabled clocks > > > it works correctly. > > > > Sounds like Felipe is on vacation. Trying to figure out if this > > is something for the fixes branch: > > > > What happens if this not fixed, do you get some error? > > The function is designed for simple clocks on-off: > if zero "on" parameter is passed - switch the clocks off, > if non-zero "on" parameter passed - switch the clocks on. > > But due to error in implementation, it works wrong if called twice or more > times with non-zero "on" parameter. > > For example, assuming that clocks are disabled: > omap4430_phy_set_clk(dev, 1); <=== enables clocks > omap4430_phy_set_clk(dev, 1); <=== suddenly disables clocks, > when we expect enabling. > omap4430_phy_set_clk(dev, 1); <=== enables clocks again > > It seems impact of this wrong behavior is not observed on current code > base, but we see > crashes caused by access to non-clocked registers when heavy use this function > in the charger detection or after implementing otg EYE improvement. Yes thanks for explaining. Can you please update the commit message a bit with the explanation above? > > Was this caused by some recent commit? > > No, we have this wrong behavior since the omap_phy_internal.c file > creation (c33fad0c37) OK. It's probably safest to wait for Felipe to take a look at this patch then and queue it for v3.6 -rc cycle. Regards, Tony > > > Signed-off-by: Ruslan Bilovol <ruslan.bilovol@xxxxxx> > > > --- > > > arch/arm/mach-omap2/omap_phy_internal.c | 2 +- > > > 1 files changed, 1 insertions(+), 1 deletions(-) > > > > > > diff --git a/arch/arm/mach-omap2/omap_phy_internal.c > > > b/arch/arm/mach-omap2/omap_phy_internal.c > > > index 4c90477..0196683 100644 > > > --- a/arch/arm/mach-omap2/omap_phy_internal.c > > > +++ b/arch/arm/mach-omap2/omap_phy_internal.c > > > @@ -97,7 +97,7 @@ int omap4430_phy_set_clk(struct device *dev, int on) > > > clk_enable(clk48m); > > > clk_enable(clk32k); > > > state = 1; > > > - } else if (state) { > > > + } else if (!on && state) { > > > /* Disable the phy clocks */ > > > clk_disable(phyclk); > > > clk_disable(clk48m); > > > -- > > > 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html