aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-at91/at91rm9200_time.c2
-rw-r--r--arch/arm/mach-at91/at91sam926x_time.c6
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 58static 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;