public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] clocksource: setup mult_orig in clocksource_enable()
@ 2009-05-01  5:45 Magnus Damm
  2009-05-02  9:48 ` [tip:timers/clocksource] " tip-bot for Magnus Damm
  2009-06-10 21:04 ` [PATCH] " john stultz
  0 siblings, 2 replies; 10+ messages in thread
From: Magnus Damm @ 2009-05-01  5:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: johnstul, mingo, lethal, tglx, akpm, Magnus Damm

From: Magnus Damm <damm@igel.co.jp>

Setup clocksource mult_orig in clocksource_enable().

Clocksource drivers can save power by using keeping the
device clock disabled while the clocksource is unused.

In practice this means that the enable() and disable()
callbacks perform clk_enable() and clk_disable().

The enable() callback may also use clk_get_rate() to get
the clock rate from the clock framework. This information
can then be used to calculate the shift and mult variables.

Currently the mult_orig variable is setup from mult at
registration time only. This is conflicting with the above
case since the clock is disabled and the mult variable is
not yet calculated at the time of registration.

Moving the mult_orig setup code to clocksource_enable()
allows us to both handle the common case with no enable()
callback and the mult-changed-after-enable() case.

Signed-off-by: Magnus Damm <damm@igel.co.jp>
---

 include/linux/clocksource.h |   10 +++++++++-
 kernel/time/clocksource.c   |    3 ---
 2 files changed, 9 insertions(+), 4 deletions(-)

--- 0001/include/linux/clocksource.h
+++ work/include/linux/clocksource.h	2009-05-01 12:59:27.000000000 +0900
@@ -288,7 +288,15 @@ static inline cycle_t clocksource_read(s
  */
 static inline int clocksource_enable(struct clocksource *cs)
 {
-	return cs->enable ? cs->enable(cs) : 0;
+	int ret = 0;
+
+	if (cs->enable)
+		ret = cs->enable(cs);
+
+	/* save mult_orig on enable */
+	cs->mult_orig = cs->mult;
+
+	return ret;
 }
 
 /**
--- 0001/kernel/time/clocksource.c
+++ work/kernel/time/clocksource.c	2009-05-01 12:59:40.000000000 +0900
@@ -402,9 +402,6 @@ int clocksource_register(struct clocksou
 	unsigned long flags;
 	int ret;
 
-	/* save mult_orig on registration */
-	c->mult_orig = c->mult;
-
 	spin_lock_irqsave(&clocksource_lock, flags);
 	ret = clocksource_enqueue(c);
 	if (!ret)

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2009-06-16  2:43 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-01  5:45 [PATCH] clocksource: setup mult_orig in clocksource_enable() Magnus Damm
2009-05-02  9:48 ` [tip:timers/clocksource] " tip-bot for Magnus Damm
2009-06-10 21:04 ` [PATCH] " john stultz
2009-06-11  5:51   ` Magnus Damm
2009-06-12 23:56     ` john stultz
2009-06-14 10:20       ` Magnus Damm
2009-06-15 19:08         ` john stultz
2009-06-15 20:04           ` Paul Mundt
2009-06-15 21:55             ` john stultz
2009-06-16  2:42           ` john stultz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox