diff options
author | Viresh Kumar <viresh.kumar@linaro.org> | 2015-06-18 06:54:49 -0400 |
---|---|---|
committer | Daniel Lezcano <daniel.lezcano@linaro.org> | 2015-08-10 05:40:47 -0400 |
commit | 53cba064443c1f36a55aa9dbc38f1d0d2aac96a4 (patch) | |
tree | bb57075ab7c25e5c8f9ce0b390f369b6b2f8bd70 /drivers/clocksource/timer-prima2.c | |
parent | 634eb0ec8c210ca3ea81b5b9493b4a39999bbf4a (diff) |
clockevents/drivers/prima2: Migrate to new 'set-state' interface
Migrate prima2 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: Barry Song <baohua@kernel.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Diffstat (limited to 'drivers/clocksource/timer-prima2.c')
-rw-r--r-- | drivers/clocksource/timer-prima2.c | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/drivers/clocksource/timer-prima2.c b/drivers/clocksource/timer-prima2.c index ce18d570e1cd..78de982cc640 100644 --- a/drivers/clocksource/timer-prima2.c +++ b/drivers/clocksource/timer-prima2.c | |||
@@ -104,26 +104,21 @@ static int sirfsoc_timer_set_next_event(unsigned long delta, | |||
104 | return next - now > delta ? -ETIME : 0; | 104 | return next - now > delta ? -ETIME : 0; |
105 | } | 105 | } |
106 | 106 | ||
107 | static void sirfsoc_timer_set_mode(enum clock_event_mode mode, | 107 | static int sirfsoc_timer_shutdown(struct clock_event_device *evt) |
108 | struct clock_event_device *ce) | ||
109 | { | 108 | { |
110 | u32 val = readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN); | 109 | u32 val = readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN); |
111 | switch (mode) { | 110 | |
112 | case CLOCK_EVT_MODE_PERIODIC: | 111 | writel_relaxed(val & ~BIT(0), |
113 | WARN_ON(1); | 112 | sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN); |
114 | break; | 113 | return 0; |
115 | case CLOCK_EVT_MODE_ONESHOT: | 114 | } |
116 | writel_relaxed(val | BIT(0), | 115 | |
117 | sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN); | 116 | static int sirfsoc_timer_set_oneshot(struct clock_event_device *evt) |
118 | break; | 117 | { |
119 | case CLOCK_EVT_MODE_SHUTDOWN: | 118 | u32 val = readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN); |
120 | writel_relaxed(val & ~BIT(0), | 119 | |
121 | sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN); | 120 | writel_relaxed(val | BIT(0), sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN); |
122 | break; | 121 | return 0; |
123 | case CLOCK_EVT_MODE_UNUSED: | ||
124 | case CLOCK_EVT_MODE_RESUME: | ||
125 | break; | ||
126 | } | ||
127 | } | 122 | } |
128 | 123 | ||
129 | static void sirfsoc_clocksource_suspend(struct clocksource *cs) | 124 | static void sirfsoc_clocksource_suspend(struct clocksource *cs) |
@@ -157,7 +152,8 @@ static struct clock_event_device sirfsoc_clockevent = { | |||
157 | .name = "sirfsoc_clockevent", | 152 | .name = "sirfsoc_clockevent", |
158 | .rating = 200, | 153 | .rating = 200, |
159 | .features = CLOCK_EVT_FEAT_ONESHOT, | 154 | .features = CLOCK_EVT_FEAT_ONESHOT, |
160 | .set_mode = sirfsoc_timer_set_mode, | 155 | .set_state_shutdown = sirfsoc_timer_shutdown, |
156 | .set_state_oneshot = sirfsoc_timer_set_oneshot, | ||
161 | .set_next_event = sirfsoc_timer_set_next_event, | 157 | .set_next_event = sirfsoc_timer_set_next_event, |
162 | }; | 158 | }; |
163 | 159 | ||