diff options
Diffstat (limited to 'arch/arm/mach-at91/at91x40_time.c')
-rw-r--r-- | arch/arm/mach-at91/at91x40_time.c | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/arch/arm/mach-at91/at91x40_time.c b/arch/arm/mach-at91/at91x40_time.c index dfff2895f4b2..6ca680a1d5d1 100644 --- a/arch/arm/mach-at91/at91x40_time.c +++ b/arch/arm/mach-at91/at91x40_time.c | |||
@@ -28,6 +28,12 @@ | |||
28 | #include <asm/mach/time.h> | 28 | #include <asm/mach/time.h> |
29 | #include <mach/at91_tc.h> | 29 | #include <mach/at91_tc.h> |
30 | 30 | ||
31 | #define at91_tc_read(field) \ | ||
32 | __raw_readl(AT91_TC + field) | ||
33 | |||
34 | #define at91_tc_write(field, value) \ | ||
35 | __raw_writel(value, AT91_TC + field); | ||
36 | |||
31 | /* | 37 | /* |
32 | * 3 counter/timer units present. | 38 | * 3 counter/timer units present. |
33 | */ | 39 | */ |
@@ -37,12 +43,12 @@ | |||
37 | 43 | ||
38 | static unsigned long at91x40_gettimeoffset(void) | 44 | static unsigned long at91x40_gettimeoffset(void) |
39 | { | 45 | { |
40 | return (at91_sys_read(AT91_TC + AT91_TC_CLK1BASE + AT91_TC_CV) * 1000000 / (AT91X40_MASTER_CLOCK / 128)); | 46 | return (at91_tc_read(AT91_TC_CLK1BASE + AT91_TC_CV) * 1000000 / (AT91X40_MASTER_CLOCK / 128)); |
41 | } | 47 | } |
42 | 48 | ||
43 | static irqreturn_t at91x40_timer_interrupt(int irq, void *dev_id) | 49 | static irqreturn_t at91x40_timer_interrupt(int irq, void *dev_id) |
44 | { | 50 | { |
45 | at91_sys_read(AT91_TC + AT91_TC_CLK1BASE + AT91_TC_SR); | 51 | at91_tc_read(AT91_TC_CLK1BASE + AT91_TC_SR); |
46 | timer_tick(); | 52 | timer_tick(); |
47 | return IRQ_HANDLED; | 53 | return IRQ_HANDLED; |
48 | } | 54 | } |
@@ -57,20 +63,20 @@ void __init at91x40_timer_init(void) | |||
57 | { | 63 | { |
58 | unsigned int v; | 64 | unsigned int v; |
59 | 65 | ||
60 | at91_sys_write(AT91_TC + AT91_TC_BCR, 0); | 66 | at91_tc_write(AT91_TC_BCR, 0); |
61 | v = at91_sys_read(AT91_TC + AT91_TC_BMR); | 67 | v = at91_tc_read(AT91_TC_BMR); |
62 | v = (v & ~AT91_TC_TC1XC1S) | AT91_TC_TC1XC1S_NONE; | 68 | v = (v & ~AT91_TC_TC1XC1S) | AT91_TC_TC1XC1S_NONE; |
63 | at91_sys_write(AT91_TC + AT91_TC_BMR, v); | 69 | at91_tc_write(AT91_TC_BMR, v); |
64 | 70 | ||
65 | at91_sys_write(AT91_TC + AT91_TC_CLK1BASE + AT91_TC_CCR, AT91_TC_CLKDIS); | 71 | at91_tc_write(AT91_TC_CLK1BASE + AT91_TC_CCR, AT91_TC_CLKDIS); |
66 | at91_sys_write(AT91_TC + AT91_TC_CLK1BASE + AT91_TC_CMR, (AT91_TC_TIMER_CLOCK4 | AT91_TC_CPCTRG)); | 72 | at91_tc_write(AT91_TC_CLK1BASE + AT91_TC_CMR, (AT91_TC_TIMER_CLOCK4 | AT91_TC_CPCTRG)); |
67 | at91_sys_write(AT91_TC + AT91_TC_CLK1BASE + AT91_TC_IDR, 0xffffffff); | 73 | at91_tc_write(AT91_TC_CLK1BASE + AT91_TC_IDR, 0xffffffff); |
68 | at91_sys_write(AT91_TC + AT91_TC_CLK1BASE + AT91_TC_RC, (AT91X40_MASTER_CLOCK / 128) / HZ - 1); | 74 | at91_tc_write(AT91_TC_CLK1BASE + AT91_TC_RC, (AT91X40_MASTER_CLOCK / 128) / HZ - 1); |
69 | at91_sys_write(AT91_TC + AT91_TC_CLK1BASE + AT91_TC_IER, (1<<4)); | 75 | at91_tc_write(AT91_TC_CLK1BASE + AT91_TC_IER, (1<<4)); |
70 | 76 | ||
71 | setup_irq(AT91X40_ID_TC1, &at91x40_timer_irq); | 77 | setup_irq(AT91X40_ID_TC1, &at91x40_timer_irq); |
72 | 78 | ||
73 | at91_sys_write(AT91_TC + AT91_TC_CLK1BASE + AT91_TC_CCR, (AT91_TC_SWTRG | AT91_TC_CLKEN)); | 79 | at91_tc_write(AT91_TC_CLK1BASE + AT91_TC_CCR, (AT91_TC_SWTRG | AT91_TC_CLKEN)); |
74 | } | 80 | } |
75 | 81 | ||
76 | struct sys_timer at91x40_timer = { | 82 | struct sys_timer at91x40_timer = { |