Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 328655
b: refs/heads/master
c: adc78e6
h: refs/heads/master
i:
  328653: bbb6aeb
  328651: 07cf781
  328647: bcb7f8b
  328639: 9c0cee6
v: v3
  • Loading branch information
Rafael J. Wysocki committed Sep 3, 2012
1 parent d13f807 commit 8ccc494
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 77f827de07432a74821cf0f831d699544b2d474f
refs/heads/master: adc78e6b9946a4b22e22403d961f3b03c469e5d3
8 changes: 8 additions & 0 deletions trunk/include/linux/clockchips.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ struct clock_event_device {
void (*broadcast)(const struct cpumask *mask);
void (*set_mode)(enum clock_event_mode mode,
struct clock_event_device *);
void (*suspend)(struct clock_event_device *);
void (*resume)(struct clock_event_device *);
unsigned long min_delta_ticks;
unsigned long max_delta_ticks;

Expand Down Expand Up @@ -156,6 +158,9 @@ clockevents_calc_mult_shift(struct clock_event_device *ce, u32 freq, u32 minsec)
freq, minsec);
}

extern void clockevents_suspend(void);
extern void clockevents_resume(void);

#ifdef CONFIG_GENERIC_CLOCKEVENTS
extern void clockevents_notify(unsigned long reason, void *arg);
#else
Expand All @@ -164,6 +169,9 @@ extern void clockevents_notify(unsigned long reason, void *arg);

#else /* CONFIG_GENERIC_CLOCKEVENTS_BUILD */

static inline void clockevents_suspend(void) {}
static inline void clockevents_resume(void) {}

#define clockevents_notify(reason, arg) do { } while (0)

#endif
Expand Down
24 changes: 24 additions & 0 deletions trunk/kernel/time/clockevents.c
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,30 @@ void clockevents_exchange_device(struct clock_event_device *old,
local_irq_restore(flags);
}

/**
* clockevents_suspend - suspend clock devices
*/
void clockevents_suspend(void)
{
struct clock_event_device *dev;

list_for_each_entry_reverse(dev, &clockevent_devices, list)
if (dev->suspend)
dev->suspend(dev);
}

/**
* clockevents_resume - resume clock devices
*/
void clockevents_resume(void)
{
struct clock_event_device *dev;

list_for_each_entry(dev, &clockevent_devices, list)
if (dev->resume)
dev->resume(dev);
}

#ifdef CONFIG_GENERIC_CLOCKEVENTS
/**
* clockevents_notify - notification about relevant events
Expand Down
2 changes: 2 additions & 0 deletions trunk/kernel/time/timekeeping.c
Original file line number Diff line number Diff line change
Expand Up @@ -773,6 +773,7 @@ static void timekeeping_resume(void)

read_persistent_clock(&ts);

clockevents_resume();
clocksource_resume();

write_seqlock_irqsave(&tk->lock, flags);
Expand Down Expand Up @@ -832,6 +833,7 @@ static int timekeeping_suspend(void)

clockevents_notify(CLOCK_EVT_NOTIFY_SUSPEND, NULL);
clocksource_suspend();
clockevents_suspend();

return 0;
}
Expand Down

0 comments on commit 8ccc494

Please sign in to comment.