From ce3d4a4111a5f7e6b4e74bceae5faa6ce388e8ec Mon Sep 17 00:00:00 2001 From: John Crispin Date: Sun, 14 Jul 2013 23:08:11 +0200 Subject: [PATCH 05/53] MIPS: use set_mode() to enable/disable the cevt-r4k irq Signed-off-by: John Crispin --- arch/mips/ralink/Kconfig | 5 +++++ 1 file changed, 5 insertions(+) --- a/arch/mips/ralink/Kconfig +++ b/arch/mips/ralink/Kconfig @@ -1,11 +1,16 @@ if RALINK +config CEVT_SYSTICK_QUIRK + bool + default n + config CLKEVT_RT3352 bool depends on SOC_RT305X || SOC_MT7620 default y select CLKSRC_OF select CLKSRC_MMIO + select CEVT_SYSTICK_QUIRK config RALINK_ILL_ACC bool --- a/arch/mips/kernel/cevt-r4k.c +++ b/arch/mips/kernel/cevt-r4k.c @@ -15,6 +15,26 @@ #include #include +static int mips_state_oneshot(struct clock_event_device *evt) +{ + if (!cp0_timer_irq_installed) { + cp0_timer_irq_installed = 1; + setup_irq(evt->irq, &c0_compare_irqaction); + } + + return 0; +} + +static int mips_state_shutdown(struct clock_event_device *evt) +{ + if (cp0_timer_irq_installed) { + cp0_timer_irq_installed = 0; + remove_irq(evt->irq, &c0_compare_irqaction); + } + + return 0; +} + static int mips_next_event(unsigned long delta, struct clock_event_device *evt) { @@ -208,18 +228,21 @@ int r4k_clockevent_init(void) cd->rating = 300; cd->irq = irq; cd->cpumask = cpumask_of(cpu); + cd->set_state_shutdown = mips_state_shutdown; + cd->set_state_oneshot = mips_state_oneshot; cd->set_next_event = mips_next_event; cd->event_handler = mips_event_handler; clockevents_register_device(cd); +#ifndef CONFIG_CEVT_SYSTICK_QUIRK if (cp0_timer_irq_installed) return 0; cp0_timer_irq_installed = 1; setup_irq(irq, &c0_compare_irqaction); - +#endif return 0; }