diff options
| -rw-r--r-- | arch/arm/mach-at91/at91rm9200_time.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-at91/at91sam926x_time.c | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/arch/arm/mach-at91/at91rm9200_time.c b/arch/arm/mach-at91/at91rm9200_time.c index 309f3511aa20..9ebf6c744444 100644 --- a/arch/arm/mach-at91/at91rm9200_time.c +++ b/arch/arm/mach-at91/at91rm9200_time.c | |||
| @@ -109,6 +109,7 @@ clkevt32k_mode(enum clock_event_mode mode, struct clock_event_device *dev) | |||
| 109 | last_crtr = read_CRTR(); | 109 | last_crtr = read_CRTR(); |
| 110 | switch (mode) { | 110 | switch (mode) { |
| 111 | case CLOCK_EVT_MODE_PERIODIC: | 111 | case CLOCK_EVT_MODE_PERIODIC: |
| 112 | setup_irq(AT91_ID_SYS, &at91rm9200_timer_irq); | ||
| 112 | /* PIT for periodic irqs; fixed rate of 1/HZ */ | 113 | /* PIT for periodic irqs; fixed rate of 1/HZ */ |
| 113 | irqmask = AT91_ST_PITS; | 114 | irqmask = AT91_ST_PITS; |
| 114 | at91_sys_write(AT91_ST_PIMR, LATCH); | 115 | at91_sys_write(AT91_ST_PIMR, LATCH); |
| @@ -122,6 +123,7 @@ clkevt32k_mode(enum clock_event_mode mode, struct clock_event_device *dev) | |||
| 122 | break; | 123 | break; |
| 123 | case CLOCK_EVT_MODE_SHUTDOWN: | 124 | case CLOCK_EVT_MODE_SHUTDOWN: |
| 124 | case CLOCK_EVT_MODE_UNUSED: | 125 | case CLOCK_EVT_MODE_UNUSED: |
| 126 | remove_irq(AT91_ID_SYS, &at91rm9200_timer_irq); | ||
| 125 | case CLOCK_EVT_MODE_RESUME: | 127 | case CLOCK_EVT_MODE_RESUME: |
| 126 | irqmask = 0; | 128 | irqmask = 0; |
| 127 | break; | 129 | break; |
diff --git a/arch/arm/mach-at91/at91sam926x_time.c b/arch/arm/mach-at91/at91sam926x_time.c index 4bd56aee4370..6936e392c058 100644 --- a/arch/arm/mach-at91/at91sam926x_time.c +++ b/arch/arm/mach-at91/at91sam926x_time.c | |||
| @@ -55,7 +55,7 @@ static struct clocksource pit_clk = { | |||
| 55 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | 55 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, |
| 56 | }; | 56 | }; |
| 57 | 57 | ||
| 58 | 58 | static struct irqaction at91sam926x_pit_irq; | |
| 59 | /* | 59 | /* |
| 60 | * Clockevent device: interrupts every 1/HZ (== pit_cycles * MCK/16) | 60 | * Clockevent device: interrupts every 1/HZ (== pit_cycles * MCK/16) |
| 61 | */ | 61 | */ |
| @@ -66,6 +66,9 @@ pit_clkevt_mode(enum clock_event_mode mode, struct clock_event_device *dev) | |||
| 66 | 66 | ||
| 67 | switch (mode) { | 67 | switch (mode) { |
| 68 | case CLOCK_EVT_MODE_PERIODIC: | 68 | case CLOCK_EVT_MODE_PERIODIC: |
| 69 | /* Set up irq handler */ | ||
| 70 | setup_irq(AT91_ID_SYS, &at91sam926x_pit_irq); | ||
| 71 | |||
| 69 | /* update clocksource counter, then enable the IRQ */ | 72 | /* update clocksource counter, then enable the IRQ */ |
| 70 | raw_local_irq_save(flags); | 73 | raw_local_irq_save(flags); |
| 71 | pit_cnt += pit_cycle * PIT_PICNT(at91_sys_read(AT91_PIT_PIVR)); | 74 | pit_cnt += pit_cycle * PIT_PICNT(at91_sys_read(AT91_PIT_PIVR)); |
| @@ -80,6 +83,7 @@ pit_clkevt_mode(enum clock_event_mode mode, struct clock_event_device *dev) | |||
| 80 | case CLOCK_EVT_MODE_UNUSED: | 83 | case CLOCK_EVT_MODE_UNUSED: |
| 81 | /* disable irq, leaving the clocksource active */ | 84 | /* disable irq, leaving the clocksource active */ |
| 82 | at91_sys_write(AT91_PIT_MR, (pit_cycle - 1) | AT91_PIT_PITEN); | 85 | at91_sys_write(AT91_PIT_MR, (pit_cycle - 1) | AT91_PIT_PITEN); |
| 86 | remove_irq(AT91_ID_SYS, &at91sam926x_pit_irq); | ||
| 83 | break; | 87 | break; |
| 84 | case CLOCK_EVT_MODE_RESUME: | 88 | case CLOCK_EVT_MODE_RESUME: |
| 85 | break; | 89 | break; |
