diff options
author | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
---|---|---|
committer | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
commit | ada47b5fe13d89735805b566185f4885f5a3f750 (patch) | |
tree | 644b88f8a71896307d71438e9b3af49126ffb22b /arch/arm/mach-nomadik | |
parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff) |
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'arch/arm/mach-nomadik')
-rw-r--r-- | arch/arm/mach-nomadik/Kconfig | 2 | ||||
-rw-r--r-- | arch/arm/mach-nomadik/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/mach-nomadik/board-nhk8815.c | 40 | ||||
-rw-r--r-- | arch/arm/mach-nomadik/cpu-8815.c | 8 | ||||
-rw-r--r-- | arch/arm/mach-nomadik/gpio.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-nomadik/include/mach/debug-macro.S | 2 | ||||
-rw-r--r-- | arch/arm/mach-nomadik/include/mach/mtu.h | 45 | ||||
-rw-r--r-- | arch/arm/mach-nomadik/include/mach/setup.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-nomadik/include/mach/vmalloc.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-nomadik/timer.c | 164 |
10 files changed, 48 insertions, 220 deletions
diff --git a/arch/arm/mach-nomadik/Kconfig b/arch/arm/mach-nomadik/Kconfig index 2a02b49c40f0..3c5e0f522e9c 100644 --- a/arch/arm/mach-nomadik/Kconfig +++ b/arch/arm/mach-nomadik/Kconfig | |||
@@ -5,13 +5,13 @@ menu "Nomadik boards" | |||
5 | config MACH_NOMADIK_8815NHK | 5 | config MACH_NOMADIK_8815NHK |
6 | bool "ST 8815 Nomadik Hardware Kit (evaluation board)" | 6 | bool "ST 8815 Nomadik Hardware Kit (evaluation board)" |
7 | select NOMADIK_8815 | 7 | select NOMADIK_8815 |
8 | select HAS_MTU | ||
8 | 9 | ||
9 | endmenu | 10 | endmenu |
10 | 11 | ||
11 | config NOMADIK_8815 | 12 | config NOMADIK_8815 |
12 | bool | 13 | bool |
13 | 14 | ||
14 | |||
15 | config I2C_BITBANG_8815NHK | 15 | config I2C_BITBANG_8815NHK |
16 | tristate "Driver for bit-bang busses found on the 8815 NHK" | 16 | tristate "Driver for bit-bang busses found on the 8815 NHK" |
17 | depends on I2C && MACH_NOMADIK_8815NHK | 17 | depends on I2C && MACH_NOMADIK_8815NHK |
diff --git a/arch/arm/mach-nomadik/Makefile b/arch/arm/mach-nomadik/Makefile index 412040982a40..36f67fb207d2 100644 --- a/arch/arm/mach-nomadik/Makefile +++ b/arch/arm/mach-nomadik/Makefile | |||
@@ -7,7 +7,7 @@ | |||
7 | 7 | ||
8 | # Object file lists. | 8 | # Object file lists. |
9 | 9 | ||
10 | obj-y += clock.o timer.o gpio.o | 10 | obj-y += clock.o gpio.o |
11 | 11 | ||
12 | # Cpu revision | 12 | # Cpu revision |
13 | obj-$(CONFIG_NOMADIK_8815) += cpu-8815.o | 13 | obj-$(CONFIG_NOMADIK_8815) += cpu-8815.o |
diff --git a/arch/arm/mach-nomadik/board-nhk8815.c b/arch/arm/mach-nomadik/board-nhk8815.c index 6bfd537d5afb..ab3712c86d2b 100644 --- a/arch/arm/mach-nomadik/board-nhk8815.c +++ b/arch/arm/mach-nomadik/board-nhk8815.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/gpio.h> | 18 | #include <linux/gpio.h> |
19 | #include <linux/mtd/mtd.h> | 19 | #include <linux/mtd/mtd.h> |
20 | #include <linux/mtd/nand.h> | 20 | #include <linux/mtd/nand.h> |
21 | #include <linux/mtd/onenand.h> | ||
21 | #include <linux/mtd/partitions.h> | 22 | #include <linux/mtd/partitions.h> |
22 | #include <linux/io.h> | 23 | #include <linux/io.h> |
23 | #include <asm/sizes.h> | 24 | #include <asm/sizes.h> |
@@ -25,12 +26,19 @@ | |||
25 | #include <asm/mach/arch.h> | 26 | #include <asm/mach/arch.h> |
26 | #include <asm/mach/irq.h> | 27 | #include <asm/mach/irq.h> |
27 | #include <asm/mach/flash.h> | 28 | #include <asm/mach/flash.h> |
29 | |||
30 | #include <plat/mtu.h> | ||
31 | |||
28 | #include <mach/setup.h> | 32 | #include <mach/setup.h> |
29 | #include <mach/nand.h> | 33 | #include <mach/nand.h> |
30 | #include <mach/fsmc.h> | 34 | #include <mach/fsmc.h> |
31 | #include "clock.h" | 35 | #include "clock.h" |
32 | 36 | ||
33 | /* These adresses span 16MB, so use three individual pages */ | 37 | /* Initial value for SRC control register: all timers use MXTAL/8 source */ |
38 | #define SRC_CR_INIT_MASK 0x00007fff | ||
39 | #define SRC_CR_INIT_VAL 0x2aaa8000 | ||
40 | |||
41 | /* These addresses span 16MB, so use three individual pages */ | ||
34 | static struct resource nhk8815_nand_resources[] = { | 42 | static struct resource nhk8815_nand_resources[] = { |
35 | { | 43 | { |
36 | .name = "nand_addr", | 44 | .name = "nand_addr", |
@@ -142,7 +150,7 @@ static struct mtd_partition nhk8815_onenand_partitions[] = { | |||
142 | } | 150 | } |
143 | }; | 151 | }; |
144 | 152 | ||
145 | static struct flash_platform_data nhk8815_onenand_data = { | 153 | static struct onenand_platform_data nhk8815_onenand_data = { |
146 | .parts = nhk8815_onenand_partitions, | 154 | .parts = nhk8815_onenand_partitions, |
147 | .nr_parts = ARRAY_SIZE(nhk8815_onenand_partitions), | 155 | .nr_parts = ARRAY_SIZE(nhk8815_onenand_partitions), |
148 | }; | 156 | }; |
@@ -156,7 +164,7 @@ static struct resource nhk8815_onenand_resource[] = { | |||
156 | }; | 164 | }; |
157 | 165 | ||
158 | static struct platform_device nhk8815_onenand_device = { | 166 | static struct platform_device nhk8815_onenand_device = { |
159 | .name = "onenand", | 167 | .name = "onenand-flash", |
160 | .id = -1, | 168 | .id = -1, |
161 | .dev = { | 169 | .dev = { |
162 | .platform_data = &nhk8815_onenand_data, | 170 | .platform_data = &nhk8815_onenand_data, |
@@ -167,10 +175,10 @@ static struct platform_device nhk8815_onenand_device = { | |||
167 | 175 | ||
168 | static void __init nhk8815_onenand_init(void) | 176 | static void __init nhk8815_onenand_init(void) |
169 | { | 177 | { |
170 | #ifdef CONFIG_ONENAND | 178 | #ifdef CONFIG_MTD_ONENAND |
171 | /* Set up SMCS0 for OneNand */ | 179 | /* Set up SMCS0 for OneNand */ |
172 | writel(0x000030db, FSMC_BCR0); | 180 | writel(0x000030db, FSMC_BCR(0)); |
173 | writel(0x02100551, FSMC_BTR0); | 181 | writel(0x02100551, FSMC_BTR(0)); |
174 | #endif | 182 | #endif |
175 | } | 183 | } |
176 | 184 | ||
@@ -239,6 +247,26 @@ static struct platform_device *nhk8815_platform_devices[] __initdata = { | |||
239 | /* will add more devices */ | 247 | /* will add more devices */ |
240 | }; | 248 | }; |
241 | 249 | ||
250 | static void __init nomadik_timer_init(void) | ||
251 | { | ||
252 | u32 src_cr; | ||
253 | |||
254 | /* Configure timer sources in "system reset controller" ctrl reg */ | ||
255 | src_cr = readl(io_p2v(NOMADIK_SRC_BASE)); | ||
256 | src_cr &= SRC_CR_INIT_MASK; | ||
257 | src_cr |= SRC_CR_INIT_VAL; | ||
258 | writel(src_cr, io_p2v(NOMADIK_SRC_BASE)); | ||
259 | |||
260 | /* Save global pointer to mtu, used by platform timer code */ | ||
261 | mtu_base = io_p2v(NOMADIK_MTU0_BASE); | ||
262 | |||
263 | nmdk_timer_init(); | ||
264 | } | ||
265 | |||
266 | static struct sys_timer nomadik_timer = { | ||
267 | .init = nomadik_timer_init, | ||
268 | }; | ||
269 | |||
242 | static void __init nhk8815_platform_init(void) | 270 | static void __init nhk8815_platform_init(void) |
243 | { | 271 | { |
244 | int i; | 272 | int i; |
diff --git a/arch/arm/mach-nomadik/cpu-8815.c b/arch/arm/mach-nomadik/cpu-8815.c index f93c59634191..9bf33b30a025 100644 --- a/arch/arm/mach-nomadik/cpu-8815.c +++ b/arch/arm/mach-nomadik/cpu-8815.c | |||
@@ -86,11 +86,19 @@ static struct amba_device cpu8815_amba_gpio[] = { | |||
86 | }, | 86 | }, |
87 | }; | 87 | }; |
88 | 88 | ||
89 | static struct amba_device cpu8815_amba_rng = { | ||
90 | .dev = { | ||
91 | .init_name = "rng", | ||
92 | }, | ||
93 | __MEM_4K_RESOURCE(NOMADIK_RNG_BASE), | ||
94 | }; | ||
95 | |||
89 | static struct amba_device *amba_devs[] __initdata = { | 96 | static struct amba_device *amba_devs[] __initdata = { |
90 | cpu8815_amba_gpio + 0, | 97 | cpu8815_amba_gpio + 0, |
91 | cpu8815_amba_gpio + 1, | 98 | cpu8815_amba_gpio + 1, |
92 | cpu8815_amba_gpio + 2, | 99 | cpu8815_amba_gpio + 2, |
93 | cpu8815_amba_gpio + 3, | 100 | cpu8815_amba_gpio + 3, |
101 | &cpu8815_amba_rng | ||
94 | }; | 102 | }; |
95 | 103 | ||
96 | static int __init cpu8815_init(void) | 104 | static int __init cpu8815_init(void) |
diff --git a/arch/arm/mach-nomadik/gpio.c b/arch/arm/mach-nomadik/gpio.c index 9a09b2791e03..66b1c91ccc74 100644 --- a/arch/arm/mach-nomadik/gpio.c +++ b/arch/arm/mach-nomadik/gpio.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/spinlock.h> | 19 | #include <linux/spinlock.h> |
20 | #include <linux/interrupt.h> | 20 | #include <linux/interrupt.h> |
21 | #include <linux/irq.h> | 21 | #include <linux/irq.h> |
22 | #include <linux/slab.h> | ||
22 | 23 | ||
23 | #include <mach/hardware.h> | 24 | #include <mach/hardware.h> |
24 | #include <mach/gpio.h> | 25 | #include <mach/gpio.h> |
diff --git a/arch/arm/mach-nomadik/include/mach/debug-macro.S b/arch/arm/mach-nomadik/include/mach/debug-macro.S index e876990e1569..4f92acfba954 100644 --- a/arch/arm/mach-nomadik/include/mach/debug-macro.S +++ b/arch/arm/mach-nomadik/include/mach/debug-macro.S | |||
@@ -10,7 +10,7 @@ | |||
10 | * | 10 | * |
11 | */ | 11 | */ |
12 | 12 | ||
13 | .macro addruart,rx | 13 | .macro addruart, rx, tmp |
14 | mrc p15, 0, \rx, c1, c0 | 14 | mrc p15, 0, \rx, c1, c0 |
15 | tst \rx, #1 @ MMU enabled? | 15 | tst \rx, #1 @ MMU enabled? |
16 | moveq \rx, #0x10000000 @ physical base address | 16 | moveq \rx, #0x10000000 @ physical base address |
diff --git a/arch/arm/mach-nomadik/include/mach/mtu.h b/arch/arm/mach-nomadik/include/mach/mtu.h deleted file mode 100644 index 76da7f085330..000000000000 --- a/arch/arm/mach-nomadik/include/mach/mtu.h +++ /dev/null | |||
@@ -1,45 +0,0 @@ | |||
1 | #ifndef __ASM_ARCH_MTU_H | ||
2 | #define __ASM_ARCH_MTU_H | ||
3 | |||
4 | /* | ||
5 | * The MTU device hosts four different counters, with 4 set of | ||
6 | * registers. These are register names. | ||
7 | */ | ||
8 | |||
9 | #define MTU_IMSC 0x00 /* Interrupt mask set/clear */ | ||
10 | #define MTU_RIS 0x04 /* Raw interrupt status */ | ||
11 | #define MTU_MIS 0x08 /* Masked interrupt status */ | ||
12 | #define MTU_ICR 0x0C /* Interrupt clear register */ | ||
13 | |||
14 | /* per-timer registers take 0..3 as argument */ | ||
15 | #define MTU_LR(x) (0x10 + 0x10 * (x) + 0x00) /* Load value */ | ||
16 | #define MTU_VAL(x) (0x10 + 0x10 * (x) + 0x04) /* Current value */ | ||
17 | #define MTU_CR(x) (0x10 + 0x10 * (x) + 0x08) /* Control reg */ | ||
18 | #define MTU_BGLR(x) (0x10 + 0x10 * (x) + 0x0c) /* At next overflow */ | ||
19 | |||
20 | /* bits for the control register */ | ||
21 | #define MTU_CRn_ENA 0x80 | ||
22 | #define MTU_CRn_PERIODIC 0x40 /* if 0 = free-running */ | ||
23 | #define MTU_CRn_PRESCALE_MASK 0x0c | ||
24 | #define MTU_CRn_PRESCALE_1 0x00 | ||
25 | #define MTU_CRn_PRESCALE_16 0x04 | ||
26 | #define MTU_CRn_PRESCALE_256 0x08 | ||
27 | #define MTU_CRn_32BITS 0x02 | ||
28 | #define MTU_CRn_ONESHOT 0x01 /* if 0 = wraps reloading from BGLR*/ | ||
29 | |||
30 | /* Other registers are usual amba/primecell registers, currently not used */ | ||
31 | #define MTU_ITCR 0xff0 | ||
32 | #define MTU_ITOP 0xff4 | ||
33 | |||
34 | #define MTU_PERIPH_ID0 0xfe0 | ||
35 | #define MTU_PERIPH_ID1 0xfe4 | ||
36 | #define MTU_PERIPH_ID2 0xfe8 | ||
37 | #define MTU_PERIPH_ID3 0xfeC | ||
38 | |||
39 | #define MTU_PCELL0 0xff0 | ||
40 | #define MTU_PCELL1 0xff4 | ||
41 | #define MTU_PCELL2 0xff8 | ||
42 | #define MTU_PCELL3 0xffC | ||
43 | |||
44 | #endif /* __ASM_ARCH_MTU_H */ | ||
45 | |||
diff --git a/arch/arm/mach-nomadik/include/mach/setup.h b/arch/arm/mach-nomadik/include/mach/setup.h index a4e468cf63da..b7897edf1f35 100644 --- a/arch/arm/mach-nomadik/include/mach/setup.h +++ b/arch/arm/mach-nomadik/include/mach/setup.h | |||
@@ -15,7 +15,7 @@ | |||
15 | extern void cpu8815_map_io(void); | 15 | extern void cpu8815_map_io(void); |
16 | extern void cpu8815_platform_init(void); | 16 | extern void cpu8815_platform_init(void); |
17 | extern void cpu8815_init_irq(void); | 17 | extern void cpu8815_init_irq(void); |
18 | extern struct sys_timer nomadik_timer; | 18 | extern void nmdk_timer_init(void); |
19 | 19 | ||
20 | #endif /* NOMADIK_8815 */ | 20 | #endif /* NOMADIK_8815 */ |
21 | 21 | ||
diff --git a/arch/arm/mach-nomadik/include/mach/vmalloc.h b/arch/arm/mach-nomadik/include/mach/vmalloc.h index be12e31ea528..f83d574d9445 100644 --- a/arch/arm/mach-nomadik/include/mach/vmalloc.h +++ b/arch/arm/mach-nomadik/include/mach/vmalloc.h | |||
@@ -1,2 +1,2 @@ | |||
1 | 1 | ||
2 | #define VMALLOC_END 0xe8000000 | 2 | #define VMALLOC_END 0xe8000000UL |
diff --git a/arch/arm/mach-nomadik/timer.c b/arch/arm/mach-nomadik/timer.c deleted file mode 100644 index d1738e7061d4..000000000000 --- a/arch/arm/mach-nomadik/timer.c +++ /dev/null | |||
@@ -1,164 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-nomadik/timer.c | ||
3 | * | ||
4 | * Copyright (C) 2008 STMicroelectronics | ||
5 | * Copyright (C) 2009 Alessandro Rubini, somewhat based on at91sam926x | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2, as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | #include <linux/init.h> | ||
12 | #include <linux/interrupt.h> | ||
13 | #include <linux/irq.h> | ||
14 | #include <linux/io.h> | ||
15 | #include <linux/clockchips.h> | ||
16 | #include <linux/jiffies.h> | ||
17 | #include <asm/mach/time.h> | ||
18 | #include <mach/mtu.h> | ||
19 | |||
20 | #define TIMER_CTRL 0x80 /* No divisor */ | ||
21 | #define TIMER_PERIODIC 0x40 | ||
22 | #define TIMER_SZ32BIT 0x02 | ||
23 | |||
24 | /* Initial value for SRC control register: all timers use MXTAL/8 source */ | ||
25 | #define SRC_CR_INIT_MASK 0x00007fff | ||
26 | #define SRC_CR_INIT_VAL 0x2aaa8000 | ||
27 | |||
28 | static u32 nmdk_count; /* accumulated count */ | ||
29 | static u32 nmdk_cycle; /* write-once */ | ||
30 | static __iomem void *mtu_base; | ||
31 | |||
32 | /* | ||
33 | * clocksource: the MTU device is a decrementing counters, so we negate | ||
34 | * the value being read. | ||
35 | */ | ||
36 | static cycle_t nmdk_read_timer(struct clocksource *cs) | ||
37 | { | ||
38 | u32 count = readl(mtu_base + MTU_VAL(0)); | ||
39 | return nmdk_count + nmdk_cycle - count; | ||
40 | |||
41 | } | ||
42 | |||
43 | static struct clocksource nmdk_clksrc = { | ||
44 | .name = "mtu_0", | ||
45 | .rating = 120, | ||
46 | .read = nmdk_read_timer, | ||
47 | .shift = 20, | ||
48 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | ||
49 | }; | ||
50 | |||
51 | /* | ||
52 | * Clockevent device: currently only periodic mode is supported | ||
53 | */ | ||
54 | static void nmdk_clkevt_mode(enum clock_event_mode mode, | ||
55 | struct clock_event_device *dev) | ||
56 | { | ||
57 | unsigned long flags; | ||
58 | |||
59 | switch (mode) { | ||
60 | case CLOCK_EVT_MODE_PERIODIC: | ||
61 | /* enable interrupts -- and count current value? */ | ||
62 | raw_local_irq_save(flags); | ||
63 | writel(readl(mtu_base + MTU_IMSC) | 1, mtu_base + MTU_IMSC); | ||
64 | raw_local_irq_restore(flags); | ||
65 | break; | ||
66 | case CLOCK_EVT_MODE_ONESHOT: | ||
67 | BUG(); /* Not supported, yet */ | ||
68 | /* FALLTHROUGH */ | ||
69 | case CLOCK_EVT_MODE_SHUTDOWN: | ||
70 | case CLOCK_EVT_MODE_UNUSED: | ||
71 | /* disable irq */ | ||
72 | raw_local_irq_save(flags); | ||
73 | writel(readl(mtu_base + MTU_IMSC) & ~1, mtu_base + MTU_IMSC); | ||
74 | raw_local_irq_restore(flags); | ||
75 | break; | ||
76 | case CLOCK_EVT_MODE_RESUME: | ||
77 | break; | ||
78 | } | ||
79 | } | ||
80 | |||
81 | static struct clock_event_device nmdk_clkevt = { | ||
82 | .name = "mtu_0", | ||
83 | .features = CLOCK_EVT_FEAT_PERIODIC, | ||
84 | .shift = 32, | ||
85 | .rating = 100, | ||
86 | .set_mode = nmdk_clkevt_mode, | ||
87 | }; | ||
88 | |||
89 | /* | ||
90 | * IRQ Handler for the timer 0 of the MTU block. The irq is not shared | ||
91 | * as we are the only users of mtu0 by now. | ||
92 | */ | ||
93 | static irqreturn_t nmdk_timer_interrupt(int irq, void *dev_id) | ||
94 | { | ||
95 | /* ack: "interrupt clear register" */ | ||
96 | writel( 1 << 0, mtu_base + MTU_ICR); | ||
97 | |||
98 | /* we can't count lost ticks, unfortunately */ | ||
99 | nmdk_count += nmdk_cycle; | ||
100 | nmdk_clkevt.event_handler(&nmdk_clkevt); | ||
101 | |||
102 | return IRQ_HANDLED; | ||
103 | } | ||
104 | |||
105 | /* | ||
106 | * Set up timer interrupt, and return the current time in seconds. | ||
107 | */ | ||
108 | static struct irqaction nmdk_timer_irq = { | ||
109 | .name = "Nomadik Timer Tick", | ||
110 | .flags = IRQF_DISABLED | IRQF_TIMER, | ||
111 | .handler = nmdk_timer_interrupt, | ||
112 | }; | ||
113 | |||
114 | static void nmdk_timer_reset(void) | ||
115 | { | ||
116 | u32 cr; | ||
117 | |||
118 | writel(0, mtu_base + MTU_CR(0)); /* off */ | ||
119 | |||
120 | /* configure load and background-load, and fire it up */ | ||
121 | writel(nmdk_cycle, mtu_base + MTU_LR(0)); | ||
122 | writel(nmdk_cycle, mtu_base + MTU_BGLR(0)); | ||
123 | cr = MTU_CRn_PERIODIC | MTU_CRn_PRESCALE_1 | MTU_CRn_32BITS; | ||
124 | writel(cr, mtu_base + MTU_CR(0)); | ||
125 | writel(cr | MTU_CRn_ENA, mtu_base + MTU_CR(0)); | ||
126 | } | ||
127 | |||
128 | static void __init nmdk_timer_init(void) | ||
129 | { | ||
130 | u32 src_cr; | ||
131 | unsigned long rate; | ||
132 | int bits; | ||
133 | |||
134 | rate = CLOCK_TICK_RATE; /* 2.4MHz */ | ||
135 | nmdk_cycle = (rate + HZ/2) / HZ; | ||
136 | |||
137 | /* Configure timer sources in "system reset controller" ctrl reg */ | ||
138 | src_cr = readl(io_p2v(NOMADIK_SRC_BASE)); | ||
139 | src_cr &= SRC_CR_INIT_MASK; | ||
140 | src_cr |= SRC_CR_INIT_VAL; | ||
141 | writel(src_cr, io_p2v(NOMADIK_SRC_BASE)); | ||
142 | |||
143 | /* Save global pointer to mtu, used by functions above */ | ||
144 | mtu_base = io_p2v(NOMADIK_MTU0_BASE); | ||
145 | |||
146 | /* Init the timer and register clocksource */ | ||
147 | nmdk_timer_reset(); | ||
148 | |||
149 | nmdk_clksrc.mult = clocksource_hz2mult(rate, nmdk_clksrc.shift); | ||
150 | bits = 8*sizeof(nmdk_count); | ||
151 | nmdk_clksrc.mask = CLOCKSOURCE_MASK(bits); | ||
152 | |||
153 | clocksource_register(&nmdk_clksrc); | ||
154 | |||
155 | /* Register irq and clockevents */ | ||
156 | setup_irq(IRQ_MTU0, &nmdk_timer_irq); | ||
157 | nmdk_clkevt.mult = div_sc(rate, NSEC_PER_SEC, nmdk_clkevt.shift); | ||
158 | nmdk_clkevt.cpumask = cpumask_of(0); | ||
159 | clockevents_register_device(&nmdk_clkevt); | ||
160 | } | ||
161 | |||
162 | struct sys_timer nomadik_timer = { | ||
163 | .init = nmdk_timer_init, | ||
164 | }; | ||