On Sat, Nov 20, 2010 at 08:09, Tarun Kanti DebBarma <tarun.ka...@ti.com> wrote: > Add pm_runtime support to dmtimer. Since dmtimer is used during > early boot before pm_runtime is initialized completely there are > provisions to enable/disable clocks directly in the code during > early boot. > > Signed-off-by: Tarun Kanti DebBarma <tarun.ka...@ti.com> > [p-bas...@ti.com: added pm_runtime logic in probe()] > Signed-off-by: Partha Basak <p-bas...@ti.com> > --- > arch/arm/plat-omap/dmtimer.c | 31 +++++++++++++++++++++++++++++-- > 1 files changed, 29 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c > index f9285b1..83d0b66 100644 > --- a/arch/arm/plat-omap/dmtimer.c > +++ b/arch/arm/plat-omap/dmtimer.c > @@ -45,6 +45,7 @@ > #include <linux/module.h> > #include <linux/slab.h> > #include <mach/hardware.h> > +#include <linux/pm_runtime.h> > #include <plat/dmtimer.h> > #include <mach/irqs.h> > #include <linux/err.h> > @@ -345,10 +346,22 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_free); > > void omap_dm_timer_enable(struct omap_dm_timer *timer) > { > + struct dmtimer_platform_data *pdata = timer->pdev->dev.platform_data; > + > if (timer->enabled) > return; > > - clk_enable(timer->fclk); > + if (unlikely(pdata->is_early_init)) { > + clk_enable(timer->fclk); > + timer->enabled = 1; > + return; > + }
If timer->fclk is not going to be used after "pdata->is_early_init" is made zero, you may do a clk_put( ) of the timer->fclk because pm_runtime_* APIs are going to be used after pdata->is_early_init is made zero. > + > + if (pm_runtime_get_sync(&timer->pdev->dev)) { > + dev_dbg(&timer->pdev->dev, "%s:pm_runtime_get_sync() > FAILED\n", > + __func__); > + return; > + } > > timer->enabled = 1; > } > @@ -356,10 +369,22 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_enable); > > void omap_dm_timer_disable(struct omap_dm_timer *timer) > { > + struct dmtimer_platform_data *pdata = timer->pdev->dev.platform_data; > + > if (!timer->enabled) > return; > > - clk_disable(timer->fclk); > + if (unlikely(pdata->is_early_init)) { > + clk_disable(timer->fclk); > + timer->enabled = 0; Ditto > + return; > + } > + > + if (pm_runtime_put_sync(&timer->pdev->dev)) { > + dev_dbg(&timer->pdev->dev, "%s:pm_runtime_put_sync() > FAILED\n", > + __func__); > + return; > + } > > timer->enabled = 0; > } <<snip>> -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html