aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/clocksource/timer-prima2.c
diff options
context:
space:
mode:
authorViresh Kumar <viresh.kumar@linaro.org>2015-06-18 06:54:49 -0400
committerDaniel Lezcano <daniel.lezcano@linaro.org>2015-08-10 05:40:47 -0400
commit53cba064443c1f36a55aa9dbc38f1d0d2aac96a4 (patch)
treebb57075ab7c25e5c8f9ce0b390f369b6b2f8bd70 /drivers/clocksource/timer-prima2.c
parent634eb0ec8c210ca3ea81b5b9493b4a39999bbf4a (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.c34
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
107static void sirfsoc_timer_set_mode(enum clock_event_mode mode, 107static 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); 116static 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
129static void sirfsoc_clocksource_suspend(struct clocksource *cs) 124static 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