aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-msm/board-halibut.c5
-rw-r--r--arch/arm/mach-msm/board-msm7x30.c9
-rw-r--r--arch/arm/mach-msm/board-msm8960.c5
-rw-r--r--arch/arm/mach-msm/board-msm8x60.c11
-rw-r--r--arch/arm/mach-msm/board-qsd8x50.c7
-rw-r--r--arch/arm/mach-msm/board-trout.c5
-rw-r--r--arch/arm/mach-msm/common.h21
-rw-r--r--arch/arm/mach-msm/include/mach/board.h2
-rw-r--r--arch/arm/mach-msm/timer.c120
9 files changed, 125 insertions, 60 deletions
diff --git a/arch/arm/mach-msm/board-halibut.c b/arch/arm/mach-msm/board-halibut.c
index 4fa3e99d9a62..6ce542e2e21c 100644
--- a/arch/arm/mach-msm/board-halibut.c
+++ b/arch/arm/mach-msm/board-halibut.c
@@ -36,6 +36,7 @@
36#include <linux/mtd/partitions.h> 36#include <linux/mtd/partitions.h>
37 37
38#include "devices.h" 38#include "devices.h"
39#include "common.h"
39 40
40static struct resource smc91x_resources[] = { 41static struct resource smc91x_resources[] = {
41 [0] = { 42 [0] = {
@@ -66,8 +67,6 @@ static struct platform_device *devices[] __initdata = {
66 &smc91x_device, 67 &smc91x_device,
67}; 68};
68 69
69extern struct sys_timer msm_timer;
70
71static void __init halibut_init_early(void) 70static void __init halibut_init_early(void)
72{ 71{
73 arch_ioremap_caller = __msm_ioremap_caller; 72 arch_ioremap_caller = __msm_ioremap_caller;
@@ -107,5 +106,5 @@ MACHINE_START(HALIBUT, "Halibut Board (QCT SURF7200A)")
107 .init_irq = halibut_init_irq, 106 .init_irq = halibut_init_irq,
108 .init_machine = halibut_init, 107 .init_machine = halibut_init,
109 .init_late = halibut_init_late, 108 .init_late = halibut_init_late,
110 .timer = &msm_timer, 109 .timer = &msm7x01_timer,
111MACHINE_END 110MACHINE_END
diff --git a/arch/arm/mach-msm/board-msm7x30.c b/arch/arm/mach-msm/board-msm7x30.c
index a5001378135d..effa6f4336c7 100644
--- a/arch/arm/mach-msm/board-msm7x30.c
+++ b/arch/arm/mach-msm/board-msm7x30.c
@@ -38,8 +38,7 @@
38#include "devices.h" 38#include "devices.h"
39#include "gpiomux.h" 39#include "gpiomux.h"
40#include "proc_comm.h" 40#include "proc_comm.h"
41 41#include "common.h"
42extern struct sys_timer msm_timer;
43 42
44static void __init msm7x30_fixup(struct tag *tag, char **cmdline, 43static void __init msm7x30_fixup(struct tag *tag, char **cmdline,
45 struct meminfo *mi) 44 struct meminfo *mi)
@@ -132,7 +131,7 @@ MACHINE_START(MSM7X30_SURF, "QCT MSM7X30 SURF")
132 .init_irq = msm7x30_init_irq, 131 .init_irq = msm7x30_init_irq,
133 .init_machine = msm7x30_init, 132 .init_machine = msm7x30_init,
134 .init_late = msm7x30_init_late, 133 .init_late = msm7x30_init_late,
135 .timer = &msm_timer, 134 .timer = &msm7x30_timer,
136MACHINE_END 135MACHINE_END
137 136
138MACHINE_START(MSM7X30_FFA, "QCT MSM7X30 FFA") 137MACHINE_START(MSM7X30_FFA, "QCT MSM7X30 FFA")
@@ -143,7 +142,7 @@ MACHINE_START(MSM7X30_FFA, "QCT MSM7X30 FFA")
143 .init_irq = msm7x30_init_irq, 142 .init_irq = msm7x30_init_irq,
144 .init_machine = msm7x30_init, 143 .init_machine = msm7x30_init,
145 .init_late = msm7x30_init_late, 144 .init_late = msm7x30_init_late,
146 .timer = &msm_timer, 145 .timer = &msm7x30_timer,
147MACHINE_END 146MACHINE_END
148 147
149MACHINE_START(MSM7X30_FLUID, "QCT MSM7X30 FLUID") 148MACHINE_START(MSM7X30_FLUID, "QCT MSM7X30 FLUID")
@@ -154,5 +153,5 @@ MACHINE_START(MSM7X30_FLUID, "QCT MSM7X30 FLUID")
154 .init_irq = msm7x30_init_irq, 153 .init_irq = msm7x30_init_irq,
155 .init_machine = msm7x30_init, 154 .init_machine = msm7x30_init,
156 .init_late = msm7x30_init_late, 155 .init_late = msm7x30_init_late,
157 .timer = &msm_timer, 156 .timer = &msm7x30_timer,
158MACHINE_END 157MACHINE_END
diff --git a/arch/arm/mach-msm/board-msm8960.c b/arch/arm/mach-msm/board-msm8960.c
index bdafe791fd0b..fafead236311 100644
--- a/arch/arm/mach-msm/board-msm8960.c
+++ b/arch/arm/mach-msm/board-msm8960.c
@@ -31,6 +31,7 @@
31#include <mach/msm_iomap.h> 31#include <mach/msm_iomap.h>
32 32
33#include "devices.h" 33#include "devices.h"
34#include "common.h"
34 35
35static void __init msm8960_fixup(struct tag *tag, char **cmdline, 36static void __init msm8960_fixup(struct tag *tag, char **cmdline,
36 struct meminfo *mi) 37 struct meminfo *mi)
@@ -90,7 +91,7 @@ MACHINE_START(MSM8960_SIM, "QCT MSM8960 SIMULATOR")
90 .reserve = msm8960_reserve, 91 .reserve = msm8960_reserve,
91 .map_io = msm8960_map_io, 92 .map_io = msm8960_map_io,
92 .init_irq = msm8960_init_irq, 93 .init_irq = msm8960_init_irq,
93 .timer = &msm_timer, 94 .timer = &msm8960_timer,
94 .handle_irq = gic_handle_irq, 95 .handle_irq = gic_handle_irq,
95 .init_machine = msm8960_sim_init, 96 .init_machine = msm8960_sim_init,
96 .init_late = msm8960_init_late, 97 .init_late = msm8960_init_late,
@@ -101,7 +102,7 @@ MACHINE_START(MSM8960_RUMI3, "QCT MSM8960 RUMI3")
101 .reserve = msm8960_reserve, 102 .reserve = msm8960_reserve,
102 .map_io = msm8960_map_io, 103 .map_io = msm8960_map_io,
103 .init_irq = msm8960_init_irq, 104 .init_irq = msm8960_init_irq,
104 .timer = &msm_timer, 105 .timer = &msm8960_timer,
105 .handle_irq = gic_handle_irq, 106 .handle_irq = gic_handle_irq,
106 .init_machine = msm8960_rumi3_init, 107 .init_machine = msm8960_rumi3_init,
107 .init_late = msm8960_init_late, 108 .init_late = msm8960_init_late,
diff --git a/arch/arm/mach-msm/board-msm8x60.c b/arch/arm/mach-msm/board-msm8x60.c
index 9df5c8357495..93f90410d0dd 100644
--- a/arch/arm/mach-msm/board-msm8x60.c
+++ b/arch/arm/mach-msm/board-msm8x60.c
@@ -28,6 +28,7 @@
28 28
29#include <mach/board.h> 29#include <mach/board.h>
30#include <mach/msm_iomap.h> 30#include <mach/msm_iomap.h>
31#include "common.h"
31 32
32static void __init msm8x60_fixup(struct tag *tag, char **cmdline, 33static void __init msm8x60_fixup(struct tag *tag, char **cmdline,
33 struct meminfo *mi) 34 struct meminfo *mi)
@@ -114,7 +115,7 @@ MACHINE_START(MSM8X60_RUMI3, "QCT MSM8X60 RUMI3")
114 .handle_irq = gic_handle_irq, 115 .handle_irq = gic_handle_irq,
115 .init_machine = msm8x60_init, 116 .init_machine = msm8x60_init,
116 .init_late = msm8x60_init_late, 117 .init_late = msm8x60_init_late,
117 .timer = &msm_timer, 118 .timer = &msm8x60_timer,
118MACHINE_END 119MACHINE_END
119 120
120MACHINE_START(MSM8X60_SURF, "QCT MSM8X60 SURF") 121MACHINE_START(MSM8X60_SURF, "QCT MSM8X60 SURF")
@@ -125,7 +126,7 @@ MACHINE_START(MSM8X60_SURF, "QCT MSM8X60 SURF")
125 .handle_irq = gic_handle_irq, 126 .handle_irq = gic_handle_irq,
126 .init_machine = msm8x60_init, 127 .init_machine = msm8x60_init,
127 .init_late = msm8x60_init_late, 128 .init_late = msm8x60_init_late,
128 .timer = &msm_timer, 129 .timer = &msm8x60_timer,
129MACHINE_END 130MACHINE_END
130 131
131MACHINE_START(MSM8X60_SIM, "QCT MSM8X60 SIMULATOR") 132MACHINE_START(MSM8X60_SIM, "QCT MSM8X60 SIMULATOR")
@@ -136,7 +137,7 @@ MACHINE_START(MSM8X60_SIM, "QCT MSM8X60 SIMULATOR")
136 .handle_irq = gic_handle_irq, 137 .handle_irq = gic_handle_irq,
137 .init_machine = msm8x60_init, 138 .init_machine = msm8x60_init,
138 .init_late = msm8x60_init_late, 139 .init_late = msm8x60_init_late,
139 .timer = &msm_timer, 140 .timer = &msm8x60_timer,
140MACHINE_END 141MACHINE_END
141 142
142MACHINE_START(MSM8X60_FFA, "QCT MSM8X60 FFA") 143MACHINE_START(MSM8X60_FFA, "QCT MSM8X60 FFA")
@@ -147,7 +148,7 @@ MACHINE_START(MSM8X60_FFA, "QCT MSM8X60 FFA")
147 .handle_irq = gic_handle_irq, 148 .handle_irq = gic_handle_irq,
148 .init_machine = msm8x60_init, 149 .init_machine = msm8x60_init,
149 .init_late = msm8x60_init_late, 150 .init_late = msm8x60_init_late,
150 .timer = &msm_timer, 151 .timer = &msm8x60_timer,
151MACHINE_END 152MACHINE_END
152 153
153#ifdef CONFIG_OF 154#ifdef CONFIG_OF
@@ -158,7 +159,7 @@ DT_MACHINE_START(MSM_DT, "Qualcomm MSM (Flattened Device Tree)")
158 .handle_irq = gic_handle_irq, 159 .handle_irq = gic_handle_irq,
159 .init_machine = msm8x60_dt_init, 160 .init_machine = msm8x60_dt_init,
160 .init_late = msm8x60_init_late, 161 .init_late = msm8x60_init_late,
161 .timer = &msm_timer, 162 .timer = &msm8x60_timer,
162 .dt_compat = msm8x60_fluid_match, 163 .dt_compat = msm8x60_fluid_match,
163MACHINE_END 164MACHINE_END
164#endif /* CONFIG_OF */ 165#endif /* CONFIG_OF */
diff --git a/arch/arm/mach-msm/board-qsd8x50.c b/arch/arm/mach-msm/board-qsd8x50.c
index c8fe0edb9761..b16b71abf5f6 100644
--- a/arch/arm/mach-msm/board-qsd8x50.c
+++ b/arch/arm/mach-msm/board-qsd8x50.c
@@ -35,8 +35,7 @@
35#include <mach/mmc.h> 35#include <mach/mmc.h>
36 36
37#include "devices.h" 37#include "devices.h"
38 38#include "common.h"
39extern struct sys_timer msm_timer;
40 39
41static const resource_size_t qsd8x50_surf_smc91x_base __initdata = 0x70000300; 40static const resource_size_t qsd8x50_surf_smc91x_base __initdata = 0x70000300;
42static const unsigned qsd8x50_surf_smc91x_gpio __initdata = 156; 41static const unsigned qsd8x50_surf_smc91x_gpio __initdata = 156;
@@ -201,7 +200,7 @@ MACHINE_START(QSD8X50_SURF, "QCT QSD8X50 SURF")
201 .init_irq = qsd8x50_init_irq, 200 .init_irq = qsd8x50_init_irq,
202 .init_machine = qsd8x50_init, 201 .init_machine = qsd8x50_init,
203 .init_late = qsd8x50_init_late, 202 .init_late = qsd8x50_init_late,
204 .timer = &msm_timer, 203 .timer = &qsd8x50_timer,
205MACHINE_END 204MACHINE_END
206 205
207MACHINE_START(QSD8X50A_ST1_5, "QCT QSD8X50A ST1.5") 206MACHINE_START(QSD8X50A_ST1_5, "QCT QSD8X50A ST1.5")
@@ -210,5 +209,5 @@ MACHINE_START(QSD8X50A_ST1_5, "QCT QSD8X50A ST1.5")
210 .init_irq = qsd8x50_init_irq, 209 .init_irq = qsd8x50_init_irq,
211 .init_machine = qsd8x50_init, 210 .init_machine = qsd8x50_init,
212 .init_late = qsd8x50_init_late, 211 .init_late = qsd8x50_init_late,
213 .timer = &msm_timer, 212 .timer = &qsd8x50_timer,
214MACHINE_END 213MACHINE_END
diff --git a/arch/arm/mach-msm/board-trout.c b/arch/arm/mach-msm/board-trout.c
index bbe13f12fa01..4ba0800e243e 100644
--- a/arch/arm/mach-msm/board-trout.c
+++ b/arch/arm/mach-msm/board-trout.c
@@ -31,6 +31,7 @@
31 31
32#include "devices.h" 32#include "devices.h"
33#include "board-trout.h" 33#include "board-trout.h"
34#include "common.h"
34 35
35extern int trout_init_mmc(unsigned int); 36extern int trout_init_mmc(unsigned int);
36 37
@@ -42,8 +43,6 @@ static struct platform_device *devices[] __initdata = {
42 &msm_device_i2c, 43 &msm_device_i2c,
43}; 44};
44 45
45extern struct sys_timer msm_timer;
46
47static void __init trout_init_early(void) 46static void __init trout_init_early(void)
48{ 47{
49 arch_ioremap_caller = __msm_ioremap_caller; 48 arch_ioremap_caller = __msm_ioremap_caller;
@@ -111,5 +110,5 @@ MACHINE_START(TROUT, "HTC Dream")
111 .init_irq = trout_init_irq, 110 .init_irq = trout_init_irq,
112 .init_machine = trout_init, 111 .init_machine = trout_init,
113 .init_late = trout_init_late, 112 .init_late = trout_init_late,
114 .timer = &msm_timer, 113 .timer = &msm7x01_timer,
115MACHINE_END 114MACHINE_END
diff --git a/arch/arm/mach-msm/common.h b/arch/arm/mach-msm/common.h
new file mode 100644
index 000000000000..4c2dd16e659b
--- /dev/null
+++ b/arch/arm/mach-msm/common.h
@@ -0,0 +1,21 @@
1/* Copyright (c) 2012, The Linux Foundation. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12#ifndef __MACH_COMMON_H
13#define __MACH_COMMON_H
14
15extern struct sys_timer msm7x01_timer;
16extern struct sys_timer msm7x30_timer;
17extern struct sys_timer msm8x60_timer;
18extern struct sys_timer msm8960_timer;
19extern struct sys_timer qsd8x50_timer;
20
21#endif
diff --git a/arch/arm/mach-msm/include/mach/board.h b/arch/arm/mach-msm/include/mach/board.h
index 435f8edfafd1..fc40bbc18e41 100644
--- a/arch/arm/mach-msm/include/mach/board.h
+++ b/arch/arm/mach-msm/include/mach/board.h
@@ -33,8 +33,6 @@ struct msm_acpu_clock_platform_data
33 33
34struct clk_lookup; 34struct clk_lookup;
35 35
36extern struct sys_timer msm_timer;
37
38/* common init routines for use by arch/arm/mach-msm/board-*.c */ 36/* common init routines for use by arch/arm/mach-msm/board-*.c */
39 37
40void __init msm_add_devices(void); 38void __init msm_add_devices(void);
diff --git a/arch/arm/mach-msm/timer.c b/arch/arm/mach-msm/timer.c
index 36bbc60b699f..ddb870117659 100644
--- a/arch/arm/mach-msm/timer.c
+++ b/arch/arm/mach-msm/timer.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * 2 *
3 * Copyright (C) 2007 Google, Inc. 3 * Copyright (C) 2007 Google, Inc.
4 * Copyright (c) 2009-2011, Code Aurora Forum. All rights reserved. 4 * Copyright (c) 2009-2012, The Linux Foundation. All rights reserved.
5 * 5 *
6 * This software is licensed under the terms of the GNU General Public 6 * This software is licensed under the terms of the GNU General Public
7 * License version 2, as published by the Free Software Foundation, and 7 * License version 2, as published by the Free Software Foundation, and
@@ -26,9 +26,7 @@
26#include <asm/localtimer.h> 26#include <asm/localtimer.h>
27#include <asm/sched_clock.h> 27#include <asm/sched_clock.h>
28 28
29#include <mach/msm_iomap.h> 29#include "common.h"
30#include <mach/cpu.h>
31#include <mach/board.h>
32 30
33#define TIMER_MATCH_VAL 0x0000 31#define TIMER_MATCH_VAL 0x0000
34#define TIMER_COUNT_VAL 0x0004 32#define TIMER_COUNT_VAL 0x0004
@@ -36,7 +34,7 @@
36#define TIMER_ENABLE_CLR_ON_MATCH_EN BIT(1) 34#define TIMER_ENABLE_CLR_ON_MATCH_EN BIT(1)
37#define TIMER_ENABLE_EN BIT(0) 35#define TIMER_ENABLE_EN BIT(0)
38#define TIMER_CLEAR 0x000C 36#define TIMER_CLEAR 0x000C
39#define DGT_CLK_CTL 0x0034 37#define DGT_CLK_CTL 0x0030
40#define DGT_CLK_CTL_DIV_4 0x3 38#define DGT_CLK_CTL_DIV_4 0x3
41 39
42#define GPT_HZ 32768 40#define GPT_HZ 32768
@@ -172,44 +170,21 @@ static notrace u32 msm_sched_clock_read(void)
172 return msm_clocksource.read(&msm_clocksource); 170 return msm_clocksource.read(&msm_clocksource);
173} 171}
174 172
175static void __init msm_timer_init(void) 173static void __init msm_timer_init(u32 dgt_hz, int sched_bits, int irq,
174 bool percpu)
176{ 175{
177 struct clock_event_device *ce = &msm_clockevent; 176 struct clock_event_device *ce = &msm_clockevent;
178 struct clocksource *cs = &msm_clocksource; 177 struct clocksource *cs = &msm_clocksource;
179 int res; 178 int res;
180 u32 dgt_hz;
181
182 if (cpu_is_msm7x01()) {
183 event_base = MSM_CSR_BASE;
184 source_base = MSM_CSR_BASE + 0x10;
185 dgt_hz = 19200000 >> MSM_DGT_SHIFT; /* 600 KHz */
186 cs->read = msm_read_timer_count_shift;
187 cs->mask = CLOCKSOURCE_MASK((32 - MSM_DGT_SHIFT));
188 } else if (cpu_is_msm7x30()) {
189 event_base = MSM_CSR_BASE + 0x04;
190 source_base = MSM_CSR_BASE + 0x24;
191 dgt_hz = 24576000 / 4;
192 } else if (cpu_is_qsd8x50()) {
193 event_base = MSM_CSR_BASE;
194 source_base = MSM_CSR_BASE + 0x10;
195 dgt_hz = 19200000 / 4;
196 } else if (cpu_is_msm8x60() || cpu_is_msm8960()) {
197 event_base = MSM_TMR_BASE + 0x04;
198 /* Use CPU0's timer as the global clock source. */
199 source_base = MSM_TMR0_BASE + 0x24;
200 dgt_hz = 27000000 / 4;
201 writel_relaxed(DGT_CLK_CTL_DIV_4, MSM_TMR_BASE + DGT_CLK_CTL);
202 } else
203 BUG();
204 179
205 writel_relaxed(0, event_base + TIMER_ENABLE); 180 writel_relaxed(0, event_base + TIMER_ENABLE);
206 writel_relaxed(0, event_base + TIMER_CLEAR); 181 writel_relaxed(0, event_base + TIMER_CLEAR);
207 writel_relaxed(~0, event_base + TIMER_MATCH_VAL); 182 writel_relaxed(~0, event_base + TIMER_MATCH_VAL);
208 ce->cpumask = cpumask_of(0); 183 ce->cpumask = cpumask_of(0);
184 ce->irq = irq;
209 185
210 ce->irq = INT_GP_TIMER_EXP;
211 clockevents_config_and_register(ce, GPT_HZ, 4, 0xffffffff); 186 clockevents_config_and_register(ce, GPT_HZ, 4, 0xffffffff);
212 if (cpu_is_msm8x60() || cpu_is_msm8960()) { 187 if (percpu) {
213 msm_evt.percpu_evt = alloc_percpu(struct clock_event_device *); 188 msm_evt.percpu_evt = alloc_percpu(struct clock_event_device *);
214 if (!msm_evt.percpu_evt) { 189 if (!msm_evt.percpu_evt) {
215 pr_err("memory allocation failed for %s\n", ce->name); 190 pr_err("memory allocation failed for %s\n", ce->name);
@@ -238,10 +213,83 @@ err:
238 res = clocksource_register_hz(cs, dgt_hz); 213 res = clocksource_register_hz(cs, dgt_hz);
239 if (res) 214 if (res)
240 pr_err("clocksource_register failed\n"); 215 pr_err("clocksource_register failed\n");
241 setup_sched_clock(msm_sched_clock_read, 216 setup_sched_clock(msm_sched_clock_read, sched_bits, dgt_hz);
242 cpu_is_msm7x01() ? 32 - MSM_DGT_SHIFT : 32, dgt_hz);
243} 217}
244 218
245struct sys_timer msm_timer = { 219static int __init msm_timer_map(phys_addr_t event, phys_addr_t source)
246 .init = msm_timer_init 220{
221 event_base = ioremap(event, SZ_64);
222 if (!event_base) {
223 pr_err("Failed to map event base\n");
224 return 1;
225 }
226 source_base = ioremap(source, SZ_64);
227 if (!source_base) {
228 pr_err("Failed to map source base\n");
229 return 1;
230 }
231 return 0;
232}
233
234static void __init msm7x01_timer_init(void)
235{
236 struct clocksource *cs = &msm_clocksource;
237
238 if (msm_timer_map(0xc0100000, 0xc0100010))
239 return;
240 cs->read = msm_read_timer_count_shift;
241 cs->mask = CLOCKSOURCE_MASK((32 - MSM_DGT_SHIFT));
242 /* 600 KHz */
243 msm_timer_init(19200000 >> MSM_DGT_SHIFT, 32 - MSM_DGT_SHIFT, 7,
244 false);
245}
246
247struct sys_timer msm7x01_timer = {
248 .init = msm7x01_timer_init
249};
250
251static void __init msm7x30_timer_init(void)
252{
253 if (msm_timer_map(0xc0100004, 0xc0100024))
254 return;
255 msm_timer_init(24576000 / 4, 32, 1, false);
256}
257
258struct sys_timer msm7x30_timer = {
259 .init = msm7x30_timer_init
260};
261
262static void __init msm8x60_timer_init(void)
263{
264 if (msm_timer_map(0x02000004, 0x02040024))
265 return;
266 writel_relaxed(DGT_CLK_CTL_DIV_4, event_base + DGT_CLK_CTL);
267 msm_timer_init(27000000 / 4, 32, 17, true);
268}
269
270struct sys_timer msm8x60_timer = {
271 .init = msm8x60_timer_init
272};
273
274static void __init msm8960_timer_init(void)
275{
276 if (msm_timer_map(0x0200A004, 0x0208A024))
277 return;
278 writel_relaxed(DGT_CLK_CTL_DIV_4, event_base + DGT_CLK_CTL);
279 msm_timer_init(27000000 / 4, 32, 17, true);
280}
281
282struct sys_timer msm8960_timer = {
283 .init = msm8960_timer_init
284};
285
286static void __init qsd8x50_timer_init(void)
287{
288 if (msm_timer_map(0xAC100000, 0xAC100010))
289 return;
290 msm_timer_init(19200000 / 4, 32, 7, false);
291}
292
293struct sys_timer qsd8x50_timer = {
294 .init = qsd8x50_timer_init
247}; 295};