summaryrefslogtreecommitdiff
path: root/drivers/clocksource
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/clocksource')
-rw-r--r--drivers/clocksource/bcm_kona_timer.c8
-rw-r--r--drivers/clocksource/cs5535-clockevt.c4
-rw-r--r--drivers/clocksource/exynos_mct.c7
-rw-r--r--drivers/clocksource/moxart_timer.c8
-rw-r--r--drivers/clocksource/mxs_timer.c7
-rw-r--r--drivers/clocksource/samsung_pwm_timer.c6
-rw-r--r--drivers/clocksource/sun4i_timer.c8
-rw-r--r--drivers/clocksource/tegra20_timer.c5
-rw-r--r--drivers/clocksource/time-armada-370-xp.c8
-rw-r--r--drivers/clocksource/time-orion.c8
-rw-r--r--drivers/clocksource/timer-marco.c8
-rw-r--r--drivers/clocksource/timer-sun5i.c8
12 files changed, 35 insertions, 50 deletions
diff --git a/drivers/clocksource/bcm_kona_timer.c b/drivers/clocksource/bcm_kona_timer.c
index 771332f67dca..9f9c11bf0362 100644
--- a/drivers/clocksource/bcm_kona_timer.c
+++ b/drivers/clocksource/bcm_kona_timer.c
@@ -131,22 +131,20 @@ static int kona_timer_set_next_event(unsigned long clc,
static int kona_timer_set_mode(enum clock_event_mode mode,
struct clock_event_device *unused)
{
- int ret = 0;
-
switch (mode) {
case CLOCK_EVT_MODE_ONESHOT:
/* by default mode is one shot don't do any thing */
break;
- default:
- ret = -ENOSYS;
case CLOCK_EVT_MODE_UNUSED:
case CLOCK_EVT_MODE_SHUTDOWN:
case CLOCK_EVT_MODE_RESUME:
case CLOCK_EVT_MODE_ONESHOT_STOPPED:
kona_timer_disable_and_clear(timers.tmr_regs);
break;
+ default:
+ return -ENOSYS;
}
- return ret;
+ return 0;
}
static struct clock_event_device kona_clockevent_timer = {
diff --git a/drivers/clocksource/cs5535-clockevt.c b/drivers/clocksource/cs5535-clockevt.c
index 88909148c278..a9c166842c1b 100644
--- a/drivers/clocksource/cs5535-clockevt.c
+++ b/drivers/clocksource/cs5535-clockevt.c
@@ -80,10 +80,9 @@ static void start_timer(struct cs5535_mfgpt_timer *timer, uint16_t delta)
static int mfgpt_set_mode(enum clock_event_mode mode,
struct clock_event_device *evt)
{
- disable_timer(cs5535_event_clock);
-
switch (mode) {
case CLOCK_EVT_MODE_PERIODIC:
+ disable_timer(cs5535_event_clock);
start_timer(cs5535_event_clock, MFGPT_PERIODIC);
break;
case CLOCK_EVT_MODE_ONESHOT:
@@ -91,6 +90,7 @@ static int mfgpt_set_mode(enum clock_event_mode mode,
case CLOCK_EVT_MODE_SHUTDOWN:
case CLOCK_EVT_MODE_ONESHOT_STOPPED:
case CLOCK_EVT_MODE_RESUME:
+ disable_timer(cs5535_event_clock);
break;
default:
return -ENOSYS;
diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index 177504b5b567..d65ca62a4fe4 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -248,10 +248,10 @@ static int exynos4_comp_set_mode(enum clock_event_mode mode,
struct clock_event_device *evt)
{
unsigned long cycles_per_jiffy;
- exynos4_mct_comp0_stop();
switch (mode) {
case CLOCK_EVT_MODE_PERIODIC:
+ exynos4_mct_comp0_stop();
cycles_per_jiffy =
(((unsigned long long) NSEC_PER_SEC / HZ * evt->mult) >> evt->shift);
exynos4_mct_comp0_start(mode, cycles_per_jiffy);
@@ -262,6 +262,7 @@ static int exynos4_comp_set_mode(enum clock_event_mode mode,
case CLOCK_EVT_MODE_SHUTDOWN:
case CLOCK_EVT_MODE_ONESHOT_STOPPED:
case CLOCK_EVT_MODE_RESUME:
+ exynos4_mct_comp0_stop();
break;
default:
return -ENOSYS;
@@ -356,10 +357,9 @@ static inline int exynos4_tick_set_mode(enum clock_event_mode mode,
struct mct_clock_event_device *mevt = this_cpu_ptr(&percpu_mct_tick);
unsigned long cycles_per_jiffy;
- exynos4_mct_tick_stop(mevt);
-
switch (mode) {
case CLOCK_EVT_MODE_PERIODIC:
+ exynos4_mct_tick_stop(mevt);
cycles_per_jiffy =
(((unsigned long long) NSEC_PER_SEC / HZ * evt->mult) >> evt->shift);
exynos4_mct_tick_start(cycles_per_jiffy, mevt);
@@ -370,6 +370,7 @@ static inline int exynos4_tick_set_mode(enum clock_event_mode mode,
case CLOCK_EVT_MODE_SHUTDOWN:
case CLOCK_EVT_MODE_ONESHOT_STOPPED:
case CLOCK_EVT_MODE_RESUME:
+ exynos4_mct_tick_stop(mevt);
break;
default:
return -ENOSYS;
diff --git a/drivers/clocksource/moxart_timer.c b/drivers/clocksource/moxart_timer.c
index bccce6025722..2db0a8be0d48 100644
--- a/drivers/clocksource/moxart_timer.c
+++ b/drivers/clocksource/moxart_timer.c
@@ -61,8 +61,6 @@ static unsigned int clock_count_per_tick;
static int moxart_clkevt_mode(enum clock_event_mode mode,
struct clock_event_device *clk)
{
- int ret = 0;
-
switch (mode) {
case CLOCK_EVT_MODE_RESUME:
case CLOCK_EVT_MODE_ONESHOT:
@@ -73,15 +71,15 @@ static int moxart_clkevt_mode(enum clock_event_mode mode,
writel(clock_count_per_tick, base + TIMER1_BASE + REG_LOAD);
writel(TIMER1_ENABLE, base + TIMER_CR);
break;
- default:
- ret = -ENOSYS;
case CLOCK_EVT_MODE_UNUSED:
case CLOCK_EVT_MODE_SHUTDOWN:
case CLOCK_EVT_MODE_ONESHOT_STOPPED:
writel(TIMER1_DISABLE, base + TIMER_CR);
break;
+ default:
+ return -ENOSYS;
}
- return ret;
+ return 0;
}
static int moxart_clkevt_next_event(unsigned long cycles,
diff --git a/drivers/clocksource/mxs_timer.c b/drivers/clocksource/mxs_timer.c
index d7eb0ba91cd6..aed8f53ea872 100644
--- a/drivers/clocksource/mxs_timer.c
+++ b/drivers/clocksource/mxs_timer.c
@@ -175,9 +175,6 @@ static int mxs_set_mode(enum clock_event_mode mode,
clock_event_mode_label[mode]);
#endif /* DEBUG */
- /* Remember timer mode */
- mxs_clockevent_mode = mode;
-
switch (mode) {
case CLOCK_EVT_MODE_ONESHOT:
timrot_irq_enable();
@@ -189,8 +186,12 @@ static int mxs_set_mode(enum clock_event_mode mode,
/* Left event sources disabled, no more interrupts appear */
break;
default:
+ timrot_irq_enable();
return -ENOSYS;
}
+
+ /* Remember timer mode */
+ mxs_clockevent_mode = mode;
return 0;
}
diff --git a/drivers/clocksource/samsung_pwm_timer.c b/drivers/clocksource/samsung_pwm_timer.c
index 86a5cb3f4e65..45730f56e924 100644
--- a/drivers/clocksource/samsung_pwm_timer.c
+++ b/drivers/clocksource/samsung_pwm_timer.c
@@ -210,21 +210,19 @@ static int samsung_set_next_event(unsigned long cycles,
static int samsung_set_mode(enum clock_event_mode mode,
struct clock_event_device *evt)
{
- samsung_time_stop(pwm.event_id);
-
switch (mode) {
case CLOCK_EVT_MODE_PERIODIC:
+ samsung_time_stop(pwm.event_id);
samsung_time_setup(pwm.event_id, pwm.clock_count_per_tick - 1);
samsung_time_start(pwm.event_id, true);
break;
case CLOCK_EVT_MODE_ONESHOT:
- break;
-
case CLOCK_EVT_MODE_UNUSED:
case CLOCK_EVT_MODE_SHUTDOWN:
case CLOCK_EVT_MODE_ONESHOT_STOPPED:
case CLOCK_EVT_MODE_RESUME:
+ samsung_time_stop(pwm.event_id);
break;
default:
return -ENOSYS;
diff --git a/drivers/clocksource/sun4i_timer.c b/drivers/clocksource/sun4i_timer.c
index 3803c5a51fcd..129881c55f5d 100644
--- a/drivers/clocksource/sun4i_timer.c
+++ b/drivers/clocksource/sun4i_timer.c
@@ -84,8 +84,6 @@ static void sun4i_clkevt_time_start(u8 timer, bool periodic)
static int sun4i_clkevt_mode(enum clock_event_mode mode,
struct clock_event_device *clk)
{
- int ret = 0;
-
switch (mode) {
case CLOCK_EVT_MODE_PERIODIC:
sun4i_clkevt_time_stop(0);
@@ -96,16 +94,16 @@ static int sun4i_clkevt_mode(enum clock_event_mode mode,
sun4i_clkevt_time_stop(0);
sun4i_clkevt_time_start(0, false);
break;
- default:
- ret = -ENOSYS;
case CLOCK_EVT_MODE_UNUSED:
case CLOCK_EVT_MODE_SHUTDOWN:
case CLOCK_EVT_MODE_RESUME:
case CLOCK_EVT_MODE_ONESHOT_STOPPED:
sun4i_clkevt_time_stop(0);
break;
+ default:
+ return -ENOSYS;
}
- return ret;
+ return 0;
}
static int sun4i_clkevt_next_event(unsigned long evt,
diff --git a/drivers/clocksource/tegra20_timer.c b/drivers/clocksource/tegra20_timer.c
index b71ec18396ec..5283e4562bf3 100644
--- a/drivers/clocksource/tegra20_timer.c
+++ b/drivers/clocksource/tegra20_timer.c
@@ -74,19 +74,18 @@ static int tegra_timer_set_mode(enum clock_event_mode mode,
{
u32 reg;
- timer_writel(0, TIMER3_BASE + TIMER_PTV);
-
switch (mode) {
case CLOCK_EVT_MODE_PERIODIC:
+ timer_writel(0, TIMER3_BASE + TIMER_PTV);
reg = 0xC0000000 | ((1000000/HZ)-1);
timer_writel(reg, TIMER3_BASE + TIMER_PTV);
break;
case CLOCK_EVT_MODE_ONESHOT:
- break;
case CLOCK_EVT_MODE_UNUSED:
case CLOCK_EVT_MODE_SHUTDOWN:
case CLOCK_EVT_MODE_ONESHOT_STOPPED:
case CLOCK_EVT_MODE_RESUME:
+ timer_writel(0, TIMER3_BASE + TIMER_PTV);
break;
default:
return -ENOSYS;
diff --git a/drivers/clocksource/time-armada-370-xp.c b/drivers/clocksource/time-armada-370-xp.c
index c0683ee323f9..60e585dc18cd 100644
--- a/drivers/clocksource/time-armada-370-xp.c
+++ b/drivers/clocksource/time-armada-370-xp.c
@@ -130,8 +130,6 @@ static int
armada_370_xp_clkevt_mode(enum clock_event_mode mode,
struct clock_event_device *dev)
{
- int ret = 0;
-
switch (mode) {
case CLOCK_EVT_MODE_PERIODIC:
/*
@@ -145,8 +143,6 @@ armada_370_xp_clkevt_mode(enum clock_event_mode mode,
*/
local_timer_ctrl_clrset(0, TIMER0_RELOAD_EN | enable_mask);
break;
- default:
- ret = -ENOSYS;
case CLOCK_EVT_MODE_ONESHOT:
case CLOCK_EVT_MODE_UNUSED:
case CLOCK_EVT_MODE_SHUTDOWN:
@@ -162,8 +158,10 @@ armada_370_xp_clkevt_mode(enum clock_event_mode mode,
*/
writel(TIMER0_CLR_MASK, local_base + LCL_TIMER_EVENTS_STATUS);
break;
+ default:
+ return -ENOSYS;
}
- return ret;
+ return 0;
}
static int armada_370_xp_clkevt_irq;
diff --git a/drivers/clocksource/time-orion.c b/drivers/clocksource/time-orion.c
index 978ff5604b2d..3e2aab6f2ffa 100644
--- a/drivers/clocksource/time-orion.c
+++ b/drivers/clocksource/time-orion.c
@@ -76,8 +76,6 @@ static int orion_clkevt_next_event(unsigned long delta,
static int orion_clkevt_mode(enum clock_event_mode mode,
struct clock_event_device *dev)
{
- int ret = 0;
-
switch (mode) {
case CLOCK_EVT_MODE_PERIODIC:
/* setup and enable periodic timer at 1/HZ intervals */
@@ -85,8 +83,6 @@ static int orion_clkevt_mode(enum clock_event_mode mode,
writel(ticks_per_jiffy - 1, timer_base + TIMER1_VAL);
orion_timer_ctrl_clrset(0, TIMER1_RELOAD_EN | TIMER1_EN);
break;
- default:
- ret = -ENOSYS;
case CLOCK_EVT_MODE_ONESHOT:
case CLOCK_EVT_MODE_UNUSED:
case CLOCK_EVT_MODE_SHUTDOWN:
@@ -95,8 +91,10 @@ static int orion_clkevt_mode(enum clock_event_mode mode,
/* disable timer */
orion_timer_ctrl_clrset(TIMER1_RELOAD_EN | TIMER1_EN, 0);
break;
+ default:
+ return -ENOSYS;
}
- return ret;
+ return 0;
}
static struct clock_event_device orion_clkevt = {
diff --git a/drivers/clocksource/timer-marco.c b/drivers/clocksource/timer-marco.c
index 8a20acb613da..8717271f0334 100644
--- a/drivers/clocksource/timer-marco.c
+++ b/drivers/clocksource/timer-marco.c
@@ -116,8 +116,6 @@ static int sirfsoc_timer_set_next_event(unsigned long delta,
static int sirfsoc_timer_set_mode(enum clock_event_mode mode,
struct clock_event_device *ce)
{
- int ret = 0;
-
switch (mode) {
case CLOCK_EVT_MODE_ONESHOT:
/* enable in set_next_event */
@@ -125,13 +123,13 @@ static int sirfsoc_timer_set_mode(enum clock_event_mode mode,
case CLOCK_EVT_MODE_SHUTDOWN:
case CLOCK_EVT_MODE_ONESHOT_STOPPED:
case CLOCK_EVT_MODE_RESUME:
+ sirfsoc_timer_count_disable(smp_processor_id());
break;
default:
- ret = -ENOSYS;
+ return -ENOSYS;
}
- sirfsoc_timer_count_disable(smp_processor_id());
- return ret;
+ return 0;
}
static void sirfsoc_clocksource_suspend(struct clocksource *cs)
diff --git a/drivers/clocksource/timer-sun5i.c b/drivers/clocksource/timer-sun5i.c
index 30d8ae85404a..7756191a7ba4 100644
--- a/drivers/clocksource/timer-sun5i.c
+++ b/drivers/clocksource/timer-sun5i.c
@@ -82,8 +82,6 @@ static void sun5i_clkevt_time_start(u8 timer, bool periodic)
static int sun5i_clkevt_mode(enum clock_event_mode mode,
struct clock_event_device *clk)
{
- int ret = 0;
-
switch (mode) {
case CLOCK_EVT_MODE_PERIODIC:
sun5i_clkevt_time_stop(0);
@@ -94,16 +92,16 @@ static int sun5i_clkevt_mode(enum clock_event_mode mode,
sun5i_clkevt_time_stop(0);
sun5i_clkevt_time_start(0, false);
break;
- default:
- ret = -ENOSYS;
case CLOCK_EVT_MODE_UNUSED:
case CLOCK_EVT_MODE_SHUTDOWN:
case CLOCK_EVT_MODE_RESUME:
case CLOCK_EVT_MODE_ONESHOT_STOPPED:
sun5i_clkevt_time_stop(0);
break;
+ default:
+ return -ENOSYS;
}
- return ret;
+ return 0;
}
static int sun5i_clkevt_next_event(unsigned long evt,