Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

MIPS: cevt-gt641xx: Migrate to new 'set-state' interface

Migrate cevt-gt641xx 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.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: linux-mips@linux-mips.org
Cc: linaro-kernel@lists.linaro.org
Cc: Thomas Gleixner <tglx@linutronix.de>
Patchwork: https://patchwork.linux-mips.org/patch/10604/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>

authored by

Viresh Kumar and committed by
Ralf Baechle
c88f2fb4 9f95618f

+41 -20
+41 -20
arch/mips/kernel/cevt-gt641xx.c
··· 64 64 return 0; 65 65 } 66 66 67 - static void gt641xx_timer0_set_mode(enum clock_event_mode mode, 68 - struct clock_event_device *evt) 67 + static int gt641xx_timer0_shutdown(struct clock_event_device *evt) 69 68 { 70 69 u32 ctrl; 71 70 ··· 72 73 73 74 ctrl = GT_READ(GT_TC_CONTROL_OFS); 74 75 ctrl &= ~(GT_TC_CONTROL_ENTC0_MSK | GT_TC_CONTROL_SELTC0_MSK); 75 - 76 - switch (mode) { 77 - case CLOCK_EVT_MODE_PERIODIC: 78 - ctrl |= GT_TC_CONTROL_ENTC0_MSK | GT_TC_CONTROL_SELTC0_MSK; 79 - break; 80 - case CLOCK_EVT_MODE_ONESHOT: 81 - ctrl |= GT_TC_CONTROL_ENTC0_MSK; 82 - break; 83 - default: 84 - break; 85 - } 86 - 87 76 GT_WRITE(GT_TC_CONTROL_OFS, ctrl); 88 77 89 78 raw_spin_unlock(&gt641xx_timer_lock); 79 + return 0; 80 + } 81 + 82 + static int gt641xx_timer0_set_oneshot(struct clock_event_device *evt) 83 + { 84 + u32 ctrl; 85 + 86 + raw_spin_lock(&gt641xx_timer_lock); 87 + 88 + ctrl = GT_READ(GT_TC_CONTROL_OFS); 89 + ctrl &= ~GT_TC_CONTROL_SELTC0_MSK; 90 + ctrl |= GT_TC_CONTROL_ENTC0_MSK; 91 + GT_WRITE(GT_TC_CONTROL_OFS, ctrl); 92 + 93 + raw_spin_unlock(&gt641xx_timer_lock); 94 + return 0; 95 + } 96 + 97 + static int gt641xx_timer0_set_periodic(struct clock_event_device *evt) 98 + { 99 + u32 ctrl; 100 + 101 + raw_spin_lock(&gt641xx_timer_lock); 102 + 103 + ctrl = GT_READ(GT_TC_CONTROL_OFS); 104 + ctrl |= GT_TC_CONTROL_ENTC0_MSK | GT_TC_CONTROL_SELTC0_MSK; 105 + GT_WRITE(GT_TC_CONTROL_OFS, ctrl); 106 + 107 + raw_spin_unlock(&gt641xx_timer_lock); 108 + return 0; 90 109 } 91 110 92 111 static void gt641xx_timer0_event_handler(struct clock_event_device *dev) ··· 112 95 } 113 96 114 97 static struct clock_event_device gt641xx_timer0_clockevent = { 115 - .name = "gt641xx-timer0", 116 - .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, 117 - .irq = GT641XX_TIMER0_IRQ, 118 - .set_next_event = gt641xx_timer0_set_next_event, 119 - .set_mode = gt641xx_timer0_set_mode, 120 - .event_handler = gt641xx_timer0_event_handler, 98 + .name = "gt641xx-timer0", 99 + .features = CLOCK_EVT_FEAT_PERIODIC | 100 + CLOCK_EVT_FEAT_ONESHOT, 101 + .irq = GT641XX_TIMER0_IRQ, 102 + .set_next_event = gt641xx_timer0_set_next_event, 103 + .set_state_shutdown = gt641xx_timer0_shutdown, 104 + .set_state_periodic = gt641xx_timer0_set_periodic, 105 + .set_state_oneshot = gt641xx_timer0_set_oneshot, 106 + .tick_resume = gt641xx_timer0_shutdown, 107 + .event_handler = gt641xx_timer0_event_handler, 121 108 }; 122 109 123 110 static irqreturn_t gt641xx_timer0_interrupt(int irq, void *dev_id)