diff options
author | Viresh Kumar <viresh.kumar@linaro.org> | 2015-06-18 06:54:50 -0400 |
---|---|---|
committer | Daniel Lezcano <daniel.lezcano@linaro.org> | 2015-08-10 05:40:48 -0400 |
commit | 8e8af4cd3b4227d1bc64db0f0a4081095eb519b2 (patch) | |
tree | 1d8a5ba4ab2fbae1b270492964aedcb800eea7b5 /drivers/clocksource/timer-stm32.c | |
parent | 53cba064443c1f36a55aa9dbc38f1d0d2aac96a4 (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.c | 30 |
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 | ||
43 | static void stm32_clock_event_set_mode(enum clock_event_mode mode, | 43 | static 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: | 53 | static 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 | ||
63 | static int stm32_clock_event_set_next_event(unsigned long evt, | 64 | static 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 | }, |