diff options
author | Viresh Kumar <viresh.kumar@linaro.org> | 2015-06-18 06:54:37 -0400 |
---|---|---|
committer | Daniel Lezcano <daniel.lezcano@linaro.org> | 2015-08-10 05:40:40 -0400 |
commit | 6de6c977bdf61b1ca6f321aba468275c32952d79 (patch) | |
tree | 12409d15e3b3e9d54306186078f6f2d3bb31995c /drivers/clocksource/sun4i_timer.c | |
parent | 2bcc4da3d45c5c69e529f7f454191a749277ab1d (diff) |
clockevents/drivers/sun4i: Migrate to new 'set-state' interface
Migrate sun4i 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 Ripard <maxime.ripard@free-electrons.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Diffstat (limited to 'drivers/clocksource/sun4i_timer.c')
-rw-r--r-- | drivers/clocksource/sun4i_timer.c | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/drivers/clocksource/sun4i_timer.c b/drivers/clocksource/sun4i_timer.c index 1928a8912584..6f3719d73390 100644 --- a/drivers/clocksource/sun4i_timer.c +++ b/drivers/clocksource/sun4i_timer.c | |||
@@ -81,25 +81,25 @@ static void sun4i_clkevt_time_start(u8 timer, bool periodic) | |||
81 | timer_base + TIMER_CTL_REG(timer)); | 81 | timer_base + TIMER_CTL_REG(timer)); |
82 | } | 82 | } |
83 | 83 | ||
84 | static void sun4i_clkevt_mode(enum clock_event_mode mode, | 84 | static int sun4i_clkevt_shutdown(struct clock_event_device *evt) |
85 | struct clock_event_device *clk) | ||
86 | { | 85 | { |
87 | switch (mode) { | 86 | sun4i_clkevt_time_stop(0); |
88 | case CLOCK_EVT_MODE_PERIODIC: | 87 | return 0; |
89 | sun4i_clkevt_time_stop(0); | 88 | } |
90 | sun4i_clkevt_time_setup(0, ticks_per_jiffy); | 89 | |
91 | sun4i_clkevt_time_start(0, true); | 90 | static int sun4i_clkevt_set_oneshot(struct clock_event_device *evt) |
92 | break; | 91 | { |
93 | case CLOCK_EVT_MODE_ONESHOT: | 92 | sun4i_clkevt_time_stop(0); |
94 | sun4i_clkevt_time_stop(0); | 93 | sun4i_clkevt_time_start(0, false); |
95 | sun4i_clkevt_time_start(0, false); | 94 | return 0; |
96 | break; | 95 | } |
97 | case CLOCK_EVT_MODE_UNUSED: | 96 | |
98 | case CLOCK_EVT_MODE_SHUTDOWN: | 97 | static int sun4i_clkevt_set_periodic(struct clock_event_device *evt) |
99 | default: | 98 | { |
100 | sun4i_clkevt_time_stop(0); | 99 | sun4i_clkevt_time_stop(0); |
101 | break; | 100 | sun4i_clkevt_time_setup(0, ticks_per_jiffy); |
102 | } | 101 | sun4i_clkevt_time_start(0, true); |
102 | return 0; | ||
103 | } | 103 | } |
104 | 104 | ||
105 | static int sun4i_clkevt_next_event(unsigned long evt, | 105 | static int sun4i_clkevt_next_event(unsigned long evt, |
@@ -116,7 +116,10 @@ static struct clock_event_device sun4i_clockevent = { | |||
116 | .name = "sun4i_tick", | 116 | .name = "sun4i_tick", |
117 | .rating = 350, | 117 | .rating = 350, |
118 | .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, | 118 | .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, |
119 | .set_mode = sun4i_clkevt_mode, | 119 | .set_state_shutdown = sun4i_clkevt_shutdown, |
120 | .set_state_periodic = sun4i_clkevt_set_periodic, | ||
121 | .set_state_oneshot = sun4i_clkevt_set_oneshot, | ||
122 | .tick_resume = sun4i_clkevt_shutdown, | ||
120 | .set_next_event = sun4i_clkevt_next_event, | 123 | .set_next_event = sun4i_clkevt_next_event, |
121 | }; | 124 | }; |
122 | 125 | ||