diff options
| -rw-r--r-- | drivers/clocksource/sun4i_timer.c | 9 | 
1 files changed, 8 insertions, 1 deletions
| diff --git a/drivers/clocksource/sun4i_timer.c b/drivers/clocksource/sun4i_timer.c index 97669ee4df2a..c83452cacb41 100644 --- a/drivers/clocksource/sun4i_timer.c +++ b/drivers/clocksource/sun4i_timer.c @@ -123,12 +123,16 @@ static struct clock_event_device sun4i_clockevent = {  	.set_next_event = sun4i_clkevt_next_event,  }; +static void sun4i_timer_clear_interrupt(void) +{ +	writel(TIMER_IRQ_EN(0), timer_base + TIMER_IRQ_ST_REG); +}  static irqreturn_t sun4i_timer_interrupt(int irq, void *dev_id)  {  	struct clock_event_device *evt = (struct clock_event_device *)dev_id; -	writel(0x1, timer_base + TIMER_IRQ_ST_REG); +	sun4i_timer_clear_interrupt();  	evt->event_handler(evt);  	return IRQ_HANDLED; @@ -208,6 +212,9 @@ static int __init sun4i_timer_init(struct device_node *node)  	/* Make sure timer is stopped before playing with interrupts */  	sun4i_clkevt_time_stop(0); +	/* clear timer0 interrupt */ +	sun4i_timer_clear_interrupt(); +  	sun4i_clockevent.cpumask = cpu_possible_mask;  	sun4i_clockevent.irq = irq; | 
