aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/clocksource/timer-stm32.c
diff options
context:
space:
mode:
authorViresh Kumar <viresh.kumar@linaro.org>2015-06-18 06:54:50 -0400
committerDaniel Lezcano <daniel.lezcano@linaro.org>2015-08-10 05:40:48 -0400
commit8e8af4cd3b4227d1bc64db0f0a4081095eb519b2 (patch)
tree1d8a5ba4ab2fbae1b270492964aedcb800eea7b5 /drivers/clocksource/timer-stm32.c
parent53cba064443c1f36a55aa9dbc38f1d0d2aac96a4 (diff)
clockevents/drivers/stm32: Migrate to new 'set-state' interface
Migrate stm32 driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now. This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED. Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> Tested-by: Maxime Coquelin <mcoquelin.stm32@gmail.com> Acked-by: Maxime Coquelin <mcoquelin.stm32@gmail.com>
Diffstat (limited to 'drivers/clocksource/timer-stm32.c')
-rw-r--r--drivers/clocksource/timer-stm32.c30
1 files changed, 17 insertions, 13 deletions
diff --git a/drivers/clocksource/timer-stm32.c b/drivers/clocksource/timer-stm32.c
index a97e8b50701c..f3dcb76799b4 100644
--- a/drivers/clocksource/timer-stm32.c
+++ b/drivers/clocksource/timer-stm32.c
@@ -40,24 +40,25 @@ struct stm32_clock_event_ddata {
40 void __iomem *base; 40 void __iomem *base;
41}; 41};
42 42
43static void stm32_clock_event_set_mode(enum clock_event_mode mode, 43static int stm32_clock_event_shutdown(struct clock_event_device *evtdev)
44 struct clock_event_device *evtdev)
45{ 44{
46 struct stm32_clock_event_ddata *data = 45 struct stm32_clock_event_ddata *data =
47 container_of(evtdev, struct stm32_clock_event_ddata, evtdev); 46 container_of(evtdev, struct stm32_clock_event_ddata, evtdev);
48 void *base = data->base; 47 void *base = data->base;
49 48
50 switch (mode) { 49 writel_relaxed(0, base + TIM_CR1);
51 case CLOCK_EVT_MODE_PERIODIC: 50 return 0;
52 writel_relaxed(data->periodic_top, base + TIM_ARR); 51}
53 writel_relaxed(TIM_CR1_ARPE | TIM_CR1_CEN, base + TIM_CR1);
54 break;
55 52
56 case CLOCK_EVT_MODE_ONESHOT: 53static int stm32_clock_event_set_periodic(struct clock_event_device *evtdev)
57 default: 54{
58 writel_relaxed(0, base + TIM_CR1); 55 struct stm32_clock_event_ddata *data =
59 break; 56 container_of(evtdev, struct stm32_clock_event_ddata, evtdev);
60 } 57 void *base = data->base;
58
59 writel_relaxed(data->periodic_top, base + TIM_ARR);
60 writel_relaxed(TIM_CR1_ARPE | TIM_CR1_CEN, base + TIM_CR1);
61 return 0;
61} 62}
62 63
63static int stm32_clock_event_set_next_event(unsigned long evt, 64static int stm32_clock_event_set_next_event(unsigned long evt,
@@ -88,7 +89,10 @@ static struct stm32_clock_event_ddata clock_event_ddata = {
88 .evtdev = { 89 .evtdev = {
89 .name = "stm32 clockevent", 90 .name = "stm32 clockevent",
90 .features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC, 91 .features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC,
91 .set_mode = stm32_clock_event_set_mode, 92 .set_state_shutdown = stm32_clock_event_shutdown,
93 .set_state_periodic = stm32_clock_event_set_periodic,
94 .set_state_oneshot = stm32_clock_event_shutdown,
95 .tick_resume = stm32_clock_event_shutdown,
92 .set_next_event = stm32_clock_event_set_next_event, 96 .set_next_event = stm32_clock_event_set_next_event,
93 .rating = 200, 97 .rating = 200,
94 }, 98 },