blob: 4196462f9e7a0928c7f310240d50cb0fab904d72 [file] [log] [blame]
Rajeshwar Kurapatyc155c352011-12-17 06:35:32 +05301/* Copyright (c) 2010-2012, Code Aurora Forum. All rights reserved.
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002 *
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 */
13
14#include <linux/kernel.h>
15#include <linux/platform_device.h>
16#include <linux/regulator/machine.h>
17#include <linux/regulator/consumer.h>
Deepak Kotur12301a72011-11-09 18:30:29 -080018#include <linux/ion.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070019#include <mach/irqs.h>
20#include <mach/dma.h>
21#include <asm/mach/mmc.h>
22#include <asm/clkdev.h>
23#include <linux/msm_kgsl.h>
24#include <linux/msm_rotator.h>
25#include <mach/msm_hsusb.h>
26#include "footswitch.h"
27#include "clock.h"
28#include "clock-rpm.h"
29#include "clock-voter.h"
30#include "devices.h"
31#include "devices-msm8x60.h"
32#include <linux/dma-mapping.h>
33#include <linux/irq.h>
34#include <linux/clk.h>
35#include <asm/hardware/gic.h>
36#include <asm/mach-types.h>
37#include <asm/clkdev.h>
38#include <mach/msm_serial_hs_lite.h>
39#include <mach/msm_bus.h>
40#include <mach/msm_bus_board.h>
41#include <mach/socinfo.h>
42#include <mach/msm_memtypes.h>
43#include <mach/msm_tsif.h>
44#include <mach/scm-io.h>
45#ifdef CONFIG_MSM_DSPS
46#include <mach/msm_dsps.h>
47#endif
48#include <linux/android_pmem.h>
49#include <linux/gpio.h>
50#include <linux/delay.h>
51#include <mach/mdm.h>
52#include <mach/rpm.h>
53#include <mach/board.h>
Lei Zhou01366a42011-08-19 13:12:00 -040054#include <sound/apr_audio.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070055#include "rpm_stats.h"
56#include "mpm.h"
Jeff Ohlstein7e668552011-10-06 16:17:25 -070057#include "msm_watchdog.h"
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070058
59/* Address of GSBI blocks */
60#define MSM_GSBI1_PHYS 0x16000000
61#define MSM_GSBI2_PHYS 0x16100000
62#define MSM_GSBI3_PHYS 0x16200000
63#define MSM_GSBI4_PHYS 0x16300000
64#define MSM_GSBI5_PHYS 0x16400000
65#define MSM_GSBI6_PHYS 0x16500000
66#define MSM_GSBI7_PHYS 0x16600000
67#define MSM_GSBI8_PHYS 0x19800000
68#define MSM_GSBI9_PHYS 0x19900000
69#define MSM_GSBI10_PHYS 0x19A00000
70#define MSM_GSBI11_PHYS 0x19B00000
71#define MSM_GSBI12_PHYS 0x19C00000
72
73/* GSBI QUPe devices */
74#define MSM_GSBI1_QUP_PHYS 0x16080000
75#define MSM_GSBI2_QUP_PHYS 0x16180000
76#define MSM_GSBI3_QUP_PHYS 0x16280000
77#define MSM_GSBI4_QUP_PHYS 0x16380000
78#define MSM_GSBI5_QUP_PHYS 0x16480000
79#define MSM_GSBI6_QUP_PHYS 0x16580000
80#define MSM_GSBI7_QUP_PHYS 0x16680000
81#define MSM_GSBI8_QUP_PHYS 0x19880000
82#define MSM_GSBI9_QUP_PHYS 0x19980000
83#define MSM_GSBI10_QUP_PHYS 0x19A80000
84#define MSM_GSBI11_QUP_PHYS 0x19B80000
85#define MSM_GSBI12_QUP_PHYS 0x19C80000
86
87/* GSBI UART devices */
88#define MSM_UART1DM_PHYS (MSM_GSBI6_PHYS + 0x40000)
89#define INT_UART1DM_IRQ GSBI6_UARTDM_IRQ
90#define INT_UART2DM_IRQ GSBI12_UARTDM_IRQ
91#define MSM_UART2DM_PHYS 0x19C40000
92#define MSM_UART3DM_PHYS (MSM_GSBI3_PHYS + 0x40000)
93#define INT_UART3DM_IRQ GSBI3_UARTDM_IRQ
94#define TCSR_BASE_PHYS 0x16b00000
95
96/* PRNG device */
97#define MSM_PRNG_PHYS 0x16C00000
98#define MSM_UART9DM_PHYS (MSM_GSBI9_PHYS + 0x40000)
99#define INT_UART9DM_IRQ GSBI9_UARTDM_IRQ
100
101static void charm_ap2mdm_kpdpwr_on(void)
102{
103 gpio_direction_output(AP2MDM_PMIC_RESET_N, 0);
Laura Abbotteda23372011-08-17 09:25:56 -0700104 gpio_direction_output(AP2MDM_KPDPWR_N, 1);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700105}
106
107static void charm_ap2mdm_kpdpwr_off(void)
108{
109 int i;
110
111 gpio_direction_output(AP2MDM_ERRFATAL, 1);
112
113 for (i = 20; i > 0; i--) {
114 if (gpio_get_value(MDM2AP_STATUS) == 0)
115 break;
116 msleep(100);
117 }
118 gpio_direction_output(AP2MDM_ERRFATAL, 0);
119
120 if (i == 0) {
121 pr_err("%s: MDM2AP_STATUS never went low. Doing a hard reset \
122 of the charm modem.\n", __func__);
123 gpio_direction_output(AP2MDM_PMIC_RESET_N, 1);
124 /*
125 * Currently, there is a debounce timer on the charm PMIC. It is
126 * necessary to hold the AP2MDM_PMIC_RESET low for ~3.5 seconds
127 * for the reset to fully take place. Sleep here to ensure the
128 * reset has occured before the function exits.
129 */
130 msleep(4000);
131 gpio_direction_output(AP2MDM_PMIC_RESET_N, 0);
132 }
133}
134
135static struct resource charm_resources[] = {
136 /* MDM2AP_ERRFATAL */
137 {
138 .start = MSM_GPIO_TO_INT(MDM2AP_ERRFATAL),
139 .end = MSM_GPIO_TO_INT(MDM2AP_ERRFATAL),
140 .flags = IORESOURCE_IRQ,
141 },
142 /* MDM2AP_STATUS */
143 {
144 .start = MSM_GPIO_TO_INT(MDM2AP_STATUS),
145 .end = MSM_GPIO_TO_INT(MDM2AP_STATUS),
146 .flags = IORESOURCE_IRQ,
147 }
148};
149
150static struct charm_platform_data mdm_platform_data = {
151 .charm_modem_on = charm_ap2mdm_kpdpwr_on,
152 .charm_modem_off = charm_ap2mdm_kpdpwr_off,
153};
154
155struct platform_device msm_charm_modem = {
156 .name = "charm_modem",
157 .id = -1,
158 .num_resources = ARRAY_SIZE(charm_resources),
159 .resource = charm_resources,
160 .dev = {
161 .platform_data = &mdm_platform_data,
162 },
163};
164
165#ifdef CONFIG_MSM_DSPS
166#define GSBI12_DEV (&msm_dsps_device.dev)
167#else
168#define GSBI12_DEV (&msm_gsbi12_qup_i2c_device.dev)
169#endif
170
171void __init msm8x60_init_irq(void)
172{
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700173 msm_mpm_irq_extn_init();
174 gic_init(0, GIC_PPI_START, MSM_QGIC_DIST_BASE, (void *)MSM_QGIC_CPU_BASE);
175
176 /* Edge trigger PPIs except AVS_SVICINT and AVS_SVICINTSWDONE */
177 writel(0xFFFFD7FF, MSM_QGIC_DIST_BASE + GIC_DIST_CONFIG + 4);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700178}
179
Stephen Boyd3acc9e42011-09-28 16:46:40 -0700180#define MSM_LPASS_QDSP6SS_PHYS 0x28800000
181
182static struct resource msm_8660_q6_resources[] = {
183 {
184 .start = MSM_LPASS_QDSP6SS_PHYS,
185 .end = MSM_LPASS_QDSP6SS_PHYS + SZ_256 - 1,
186 .flags = IORESOURCE_MEM,
187 },
188};
189
190struct platform_device msm_pil_q6v3 = {
191 .name = "pil_qdsp6v3",
192 .id = -1,
193 .num_resources = ARRAY_SIZE(msm_8660_q6_resources),
194 .resource = msm_8660_q6_resources,
195};
196
Stephen Boyd4eb885b2011-09-29 01:16:03 -0700197#define MSM_MSS_REGS_PHYS 0x10200000
198
199static struct resource msm_8660_modem_resources[] = {
200 {
201 .start = MSM_MSS_REGS_PHYS,
202 .end = MSM_MSS_REGS_PHYS + SZ_256 - 1,
203 .flags = IORESOURCE_MEM,
204 },
205};
206
207struct platform_device msm_pil_modem = {
208 .name = "pil_modem",
209 .id = -1,
210 .num_resources = ARRAY_SIZE(msm_8660_modem_resources),
211 .resource = msm_8660_modem_resources,
212};
213
Stephen Boydd89eebe2011-09-28 23:28:11 -0700214struct platform_device msm_pil_tzapps = {
215 .name = "pil_tzapps",
216 .id = -1,
217};
218
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700219static struct resource msm_uart1_dm_resources[] = {
220 {
221 .start = MSM_UART1DM_PHYS,
222 .end = MSM_UART1DM_PHYS + PAGE_SIZE - 1,
223 .flags = IORESOURCE_MEM,
224 },
225 {
226 .start = INT_UART1DM_IRQ,
227 .end = INT_UART1DM_IRQ,
228 .flags = IORESOURCE_IRQ,
229 },
230 {
231 /* GSBI6 is UARTDM1 */
232 .start = MSM_GSBI6_PHYS,
233 .end = MSM_GSBI6_PHYS + 4 - 1,
234 .name = "gsbi_resource",
235 .flags = IORESOURCE_MEM,
236 },
237 {
238 .start = DMOV_HSUART1_TX_CHAN,
239 .end = DMOV_HSUART1_RX_CHAN,
240 .name = "uartdm_channels",
241 .flags = IORESOURCE_DMA,
242 },
243 {
244 .start = DMOV_HSUART1_TX_CRCI,
245 .end = DMOV_HSUART1_RX_CRCI,
246 .name = "uartdm_crci",
247 .flags = IORESOURCE_DMA,
248 },
249};
250
251static u64 msm_uart_dm1_dma_mask = DMA_BIT_MASK(32);
252
253struct platform_device msm_device_uart_dm1 = {
254 .name = "msm_serial_hs",
255 .id = 0,
256 .num_resources = ARRAY_SIZE(msm_uart1_dm_resources),
257 .resource = msm_uart1_dm_resources,
258 .dev = {
259 .dma_mask = &msm_uart_dm1_dma_mask,
260 .coherent_dma_mask = DMA_BIT_MASK(32),
261 },
262};
263
264static struct resource msm_uart3_dm_resources[] = {
265 {
266 .start = MSM_UART3DM_PHYS,
267 .end = MSM_UART3DM_PHYS + PAGE_SIZE - 1,
268 .name = "uartdm_resource",
269 .flags = IORESOURCE_MEM,
270 },
271 {
272 .start = INT_UART3DM_IRQ,
273 .end = INT_UART3DM_IRQ,
274 .flags = IORESOURCE_IRQ,
275 },
276 {
277 .start = MSM_GSBI3_PHYS,
278 .end = MSM_GSBI3_PHYS + PAGE_SIZE - 1,
279 .name = "gsbi_resource",
280 .flags = IORESOURCE_MEM,
281 },
282};
283
284struct platform_device msm_device_uart_dm3 = {
285 .name = "msm_serial_hsl",
286 .id = 2,
287 .num_resources = ARRAY_SIZE(msm_uart3_dm_resources),
288 .resource = msm_uart3_dm_resources,
289};
290
291static struct resource msm_uart12_dm_resources[] = {
292 {
293 .start = MSM_UART2DM_PHYS,
294 .end = MSM_UART2DM_PHYS + PAGE_SIZE - 1,
295 .name = "uartdm_resource",
296 .flags = IORESOURCE_MEM,
297 },
298 {
299 .start = INT_UART2DM_IRQ,
300 .end = INT_UART2DM_IRQ,
301 .flags = IORESOURCE_IRQ,
302 },
303 {
304 /* GSBI 12 is UARTDM2 */
305 .start = MSM_GSBI12_PHYS,
306 .end = MSM_GSBI12_PHYS + PAGE_SIZE - 1,
307 .name = "gsbi_resource",
308 .flags = IORESOURCE_MEM,
309 },
310};
311
312struct platform_device msm_device_uart_dm12 = {
313 .name = "msm_serial_hsl",
314 .id = 0,
315 .num_resources = ARRAY_SIZE(msm_uart12_dm_resources),
316 .resource = msm_uart12_dm_resources,
317};
318
319#ifdef CONFIG_MSM_GSBI9_UART
320static struct msm_serial_hslite_platform_data uart_gsbi9_pdata = {
321 .config_gpio = 1,
322 .uart_tx_gpio = 67,
323 .uart_rx_gpio = 66,
324};
325
326static struct resource msm_uart_gsbi9_resources[] = {
327 {
328 .start = MSM_UART9DM_PHYS,
329 .end = MSM_UART9DM_PHYS + PAGE_SIZE - 1,
330 .name = "uartdm_resource",
331 .flags = IORESOURCE_MEM,
332 },
333 {
334 .start = INT_UART9DM_IRQ,
335 .end = INT_UART9DM_IRQ,
336 .flags = IORESOURCE_IRQ,
337 },
338 {
339 /* GSBI 9 is UART_GSBI9 */
340 .start = MSM_GSBI9_PHYS,
341 .end = MSM_GSBI9_PHYS + PAGE_SIZE - 1,
342 .name = "gsbi_resource",
343 .flags = IORESOURCE_MEM,
344 },
345};
346struct platform_device *msm_device_uart_gsbi9;
347struct platform_device *msm_add_gsbi9_uart(void)
348{
349 return platform_device_register_resndata(NULL, "msm_serial_hsl",
350 1, msm_uart_gsbi9_resources,
351 ARRAY_SIZE(msm_uart_gsbi9_resources),
352 &uart_gsbi9_pdata,
353 sizeof(uart_gsbi9_pdata));
354}
355#endif
356
357static struct resource gsbi3_qup_i2c_resources[] = {
358 {
359 .name = "qup_phys_addr",
360 .start = MSM_GSBI3_QUP_PHYS,
361 .end = MSM_GSBI3_QUP_PHYS + SZ_4K - 1,
362 .flags = IORESOURCE_MEM,
363 },
364 {
365 .name = "gsbi_qup_i2c_addr",
366 .start = MSM_GSBI3_PHYS,
367 .end = MSM_GSBI3_PHYS + 4 - 1,
368 .flags = IORESOURCE_MEM,
369 },
370 {
371 .name = "qup_err_intr",
372 .start = GSBI3_QUP_IRQ,
373 .end = GSBI3_QUP_IRQ,
374 .flags = IORESOURCE_IRQ,
375 },
376 {
377 .name = "i2c_clk",
378 .start = 44,
379 .end = 44,
380 .flags = IORESOURCE_IO,
381 },
382 {
383 .name = "i2c_sda",
384 .start = 43,
385 .end = 43,
386 .flags = IORESOURCE_IO,
387 },
388};
389
390static struct resource gsbi4_qup_i2c_resources[] = {
391 {
392 .name = "qup_phys_addr",
393 .start = MSM_GSBI4_QUP_PHYS,
394 .end = MSM_GSBI4_QUP_PHYS + SZ_4K - 1,
395 .flags = IORESOURCE_MEM,
396 },
397 {
398 .name = "gsbi_qup_i2c_addr",
399 .start = MSM_GSBI4_PHYS,
400 .end = MSM_GSBI4_PHYS + 4 - 1,
401 .flags = IORESOURCE_MEM,
402 },
403 {
404 .name = "qup_err_intr",
405 .start = GSBI4_QUP_IRQ,
406 .end = GSBI4_QUP_IRQ,
407 .flags = IORESOURCE_IRQ,
408 },
409};
410
411static struct resource gsbi7_qup_i2c_resources[] = {
412 {
413 .name = "qup_phys_addr",
414 .start = MSM_GSBI7_QUP_PHYS,
415 .end = MSM_GSBI7_QUP_PHYS + SZ_4K - 1,
416 .flags = IORESOURCE_MEM,
417 },
418 {
419 .name = "gsbi_qup_i2c_addr",
420 .start = MSM_GSBI7_PHYS,
421 .end = MSM_GSBI7_PHYS + 4 - 1,
422 .flags = IORESOURCE_MEM,
423 },
424 {
425 .name = "qup_err_intr",
426 .start = GSBI7_QUP_IRQ,
427 .end = GSBI7_QUP_IRQ,
428 .flags = IORESOURCE_IRQ,
429 },
430 {
431 .name = "i2c_clk",
432 .start = 60,
433 .end = 60,
434 .flags = IORESOURCE_IO,
435 },
436 {
437 .name = "i2c_sda",
438 .start = 59,
439 .end = 59,
440 .flags = IORESOURCE_IO,
441 },
442};
443
444static struct resource gsbi8_qup_i2c_resources[] = {
445 {
446 .name = "qup_phys_addr",
447 .start = MSM_GSBI8_QUP_PHYS,
448 .end = MSM_GSBI8_QUP_PHYS + SZ_4K - 1,
449 .flags = IORESOURCE_MEM,
450 },
451 {
452 .name = "gsbi_qup_i2c_addr",
453 .start = MSM_GSBI8_PHYS,
454 .end = MSM_GSBI8_PHYS + 4 - 1,
455 .flags = IORESOURCE_MEM,
456 },
457 {
458 .name = "qup_err_intr",
459 .start = GSBI8_QUP_IRQ,
460 .end = GSBI8_QUP_IRQ,
461 .flags = IORESOURCE_IRQ,
462 },
463};
464
465static struct resource gsbi9_qup_i2c_resources[] = {
466 {
467 .name = "qup_phys_addr",
468 .start = MSM_GSBI9_QUP_PHYS,
469 .end = MSM_GSBI9_QUP_PHYS + SZ_4K - 1,
470 .flags = IORESOURCE_MEM,
471 },
472 {
473 .name = "gsbi_qup_i2c_addr",
474 .start = MSM_GSBI9_PHYS,
475 .end = MSM_GSBI9_PHYS + 4 - 1,
476 .flags = IORESOURCE_MEM,
477 },
478 {
479 .name = "qup_err_intr",
480 .start = GSBI9_QUP_IRQ,
481 .end = GSBI9_QUP_IRQ,
482 .flags = IORESOURCE_IRQ,
483 },
484};
485
486static struct resource gsbi12_qup_i2c_resources[] = {
487 {
488 .name = "qup_phys_addr",
489 .start = MSM_GSBI12_QUP_PHYS,
490 .end = MSM_GSBI12_QUP_PHYS + SZ_4K - 1,
491 .flags = IORESOURCE_MEM,
492 },
493 {
494 .name = "gsbi_qup_i2c_addr",
495 .start = MSM_GSBI12_PHYS,
496 .end = MSM_GSBI12_PHYS + 4 - 1,
497 .flags = IORESOURCE_MEM,
498 },
499 {
500 .name = "qup_err_intr",
501 .start = GSBI12_QUP_IRQ,
502 .end = GSBI12_QUP_IRQ,
503 .flags = IORESOURCE_IRQ,
504 },
505};
506
507#ifdef CONFIG_MSM_BUS_SCALING
508static struct msm_bus_vectors grp3d_init_vectors[] = {
509 {
510 .src = MSM_BUS_MASTER_GRAPHICS_3D,
511 .dst = MSM_BUS_SLAVE_EBI_CH0,
512 .ab = 0,
513 .ib = 0,
514 },
515};
516
Lucille Sylvester293217d2011-08-19 17:50:52 -0600517static struct msm_bus_vectors grp3d_low_vectors[] = {
518 {
519 .src = MSM_BUS_MASTER_GRAPHICS_3D,
520 .dst = MSM_BUS_SLAVE_EBI_CH0,
521 .ab = 0,
Suman Tatiraju0123d182011-09-30 14:59:06 -0700522 .ib = KGSL_CONVERT_TO_MBPS(990),
Lucille Sylvester293217d2011-08-19 17:50:52 -0600523 },
524};
525
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700526static struct msm_bus_vectors grp3d_nominal_low_vectors[] = {
527 {
528 .src = MSM_BUS_MASTER_GRAPHICS_3D,
529 .dst = MSM_BUS_SLAVE_EBI_CH0,
530 .ab = 0,
Suman Tatiraju0123d182011-09-30 14:59:06 -0700531 .ib = KGSL_CONVERT_TO_MBPS(1300),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700532 },
533};
534
535static struct msm_bus_vectors grp3d_nominal_high_vectors[] = {
536 {
537 .src = MSM_BUS_MASTER_GRAPHICS_3D,
538 .dst = MSM_BUS_SLAVE_EBI_CH0,
539 .ab = 0,
Suman Tatiraju0123d182011-09-30 14:59:06 -0700540 .ib = KGSL_CONVERT_TO_MBPS(2008),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700541 },
542};
543
544static struct msm_bus_vectors grp3d_max_vectors[] = {
545 {
546 .src = MSM_BUS_MASTER_GRAPHICS_3D,
547 .dst = MSM_BUS_SLAVE_EBI_CH0,
548 .ab = 0,
Suman Tatiraju0123d182011-09-30 14:59:06 -0700549 .ib = KGSL_CONVERT_TO_MBPS(2484),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700550 },
551};
552
553static struct msm_bus_paths grp3d_bus_scale_usecases[] = {
554 {
555 ARRAY_SIZE(grp3d_init_vectors),
556 grp3d_init_vectors,
557 },
558 {
Lucille Sylvester293217d2011-08-19 17:50:52 -0600559 ARRAY_SIZE(grp3d_low_vectors),
Suman Tatirajuc87f58c2011-10-14 10:58:37 -0700560 grp3d_low_vectors,
Lucille Sylvester293217d2011-08-19 17:50:52 -0600561 },
562 {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700563 ARRAY_SIZE(grp3d_nominal_low_vectors),
564 grp3d_nominal_low_vectors,
565 },
566 {
567 ARRAY_SIZE(grp3d_nominal_high_vectors),
568 grp3d_nominal_high_vectors,
569 },
570 {
571 ARRAY_SIZE(grp3d_max_vectors),
572 grp3d_max_vectors,
573 },
574};
575
576static struct msm_bus_scale_pdata grp3d_bus_scale_pdata = {
577 grp3d_bus_scale_usecases,
578 ARRAY_SIZE(grp3d_bus_scale_usecases),
579 .name = "grp3d",
580};
581
582static struct msm_bus_vectors grp2d0_init_vectors[] = {
583 {
584 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE0,
585 .dst = MSM_BUS_SLAVE_EBI_CH0,
586 .ab = 0,
587 .ib = 0,
588 },
589};
590
591static struct msm_bus_vectors grp2d0_max_vectors[] = {
592 {
593 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE0,
594 .dst = MSM_BUS_SLAVE_EBI_CH0,
595 .ab = 0,
Suman Tatiraju0123d182011-09-30 14:59:06 -0700596 .ib = KGSL_CONVERT_TO_MBPS(990),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700597 },
598};
599
600static struct msm_bus_paths grp2d0_bus_scale_usecases[] = {
601 {
602 ARRAY_SIZE(grp2d0_init_vectors),
603 grp2d0_init_vectors,
604 },
605 {
606 ARRAY_SIZE(grp2d0_max_vectors),
607 grp2d0_max_vectors,
608 },
609};
610
611static struct msm_bus_scale_pdata grp2d0_bus_scale_pdata = {
612 grp2d0_bus_scale_usecases,
613 ARRAY_SIZE(grp2d0_bus_scale_usecases),
614 .name = "grp2d0",
615};
616
617static struct msm_bus_vectors grp2d1_init_vectors[] = {
618 {
619 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE1,
620 .dst = MSM_BUS_SLAVE_EBI_CH0,
621 .ab = 0,
622 .ib = 0,
623 },
624};
625
626static struct msm_bus_vectors grp2d1_max_vectors[] = {
627 {
628 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE1,
629 .dst = MSM_BUS_SLAVE_EBI_CH0,
630 .ab = 0,
Suman Tatiraju0123d182011-09-30 14:59:06 -0700631 .ib = KGSL_CONVERT_TO_MBPS(990),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700632 },
633};
634
635static struct msm_bus_paths grp2d1_bus_scale_usecases[] = {
636 {
637 ARRAY_SIZE(grp2d1_init_vectors),
638 grp2d1_init_vectors,
639 },
640 {
641 ARRAY_SIZE(grp2d1_max_vectors),
642 grp2d1_max_vectors,
643 },
644};
645
646static struct msm_bus_scale_pdata grp2d1_bus_scale_pdata = {
647 grp2d1_bus_scale_usecases,
648 ARRAY_SIZE(grp2d1_bus_scale_usecases),
649 .name = "grp2d1",
650};
651#endif
652
653#ifdef CONFIG_HW_RANDOM_MSM
654static struct resource rng_resources = {
655 .flags = IORESOURCE_MEM,
656 .start = MSM_PRNG_PHYS,
657 .end = MSM_PRNG_PHYS + SZ_512 - 1,
658};
659
660struct platform_device msm_device_rng = {
661 .name = "msm_rng",
662 .id = 0,
663 .num_resources = 1,
664 .resource = &rng_resources,
665};
666#endif
667
668static struct resource kgsl_3d0_resources[] = {
669 {
670 .name = KGSL_3D0_REG_MEMORY,
671 .start = 0x04300000, /* GFX3D address */
672 .end = 0x0431ffff,
673 .flags = IORESOURCE_MEM,
674 },
675 {
676 .name = KGSL_3D0_IRQ,
677 .start = GFX3D_IRQ,
678 .end = GFX3D_IRQ,
679 .flags = IORESOURCE_IRQ,
680 },
681};
682
683static struct kgsl_device_platform_data kgsl_3d0_pdata = {
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600684 .pwrlevel = {
685 {
686 .gpu_freq = 266667000,
687 .bus_freq = 4,
688 .io_fraction = 0,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700689 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600690 {
691 .gpu_freq = 228571000,
692 .bus_freq = 3,
693 .io_fraction = 33,
694 },
695 {
696 .gpu_freq = 200000000,
697 .bus_freq = 2,
698 .io_fraction = 100,
699 },
700 {
701 .gpu_freq = 177778000,
702 .bus_freq = 1,
703 .io_fraction = 100,
704 },
705 {
706 .gpu_freq = 27000000,
707 .bus_freq = 0,
708 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700709 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600710 .init_level = 0,
711 .num_levels = 5,
712 .set_grp_async = NULL,
713 .idle_timeout = HZ/5,
714 .nap_allowed = true,
715 .clk_map = KGSL_CLK_CORE | KGSL_CLK_IFACE | KGSL_CLK_MEM_IFACE,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700716#ifdef CONFIG_MSM_BUS_SCALING
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600717 .bus_scale_table = &grp3d_bus_scale_pdata,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700718#endif
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700719};
720
721struct platform_device msm_kgsl_3d0 = {
722 .name = "kgsl-3d0",
723 .id = 0,
724 .num_resources = ARRAY_SIZE(kgsl_3d0_resources),
725 .resource = kgsl_3d0_resources,
726 .dev = {
727 .platform_data = &kgsl_3d0_pdata,
728 },
729};
730
731static struct resource kgsl_2d0_resources[] = {
732 {
733 .name = KGSL_2D0_REG_MEMORY,
734 .start = 0x04100000, /* Z180 base address */
735 .end = 0x04100FFF,
736 .flags = IORESOURCE_MEM,
737 },
738 {
739 .name = KGSL_2D0_IRQ,
740 .start = GFX2D0_IRQ,
741 .end = GFX2D0_IRQ,
742 .flags = IORESOURCE_IRQ,
743 },
744};
745
746static struct kgsl_device_platform_data kgsl_2d0_pdata = {
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600747 .pwrlevel = {
748 {
749 .gpu_freq = 200000000,
750 .bus_freq = 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700751 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600752 {
753 .gpu_freq = 200000000,
754 .bus_freq = 0,
755 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700756 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600757 .init_level = 0,
758 .num_levels = 2,
759 .set_grp_async = NULL,
760 .idle_timeout = HZ/10,
761 .nap_allowed = true,
762 .clk_map = KGSL_CLK_CORE | KGSL_CLK_IFACE,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700763#ifdef CONFIG_MSM_BUS_SCALING
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600764 .bus_scale_table = &grp2d0_bus_scale_pdata,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700765#endif
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700766};
767
768struct platform_device msm_kgsl_2d0 = {
769 .name = "kgsl-2d0",
770 .id = 0,
771 .num_resources = ARRAY_SIZE(kgsl_2d0_resources),
772 .resource = kgsl_2d0_resources,
773 .dev = {
774 .platform_data = &kgsl_2d0_pdata,
775 },
776};
777
778static struct resource kgsl_2d1_resources[] = {
779 {
780 .name = KGSL_2D1_REG_MEMORY,
781 .start = 0x04200000, /* Z180 device 1 base address */
782 .end = 0x04200FFF,
783 .flags = IORESOURCE_MEM,
784 },
785 {
786 .name = KGSL_2D1_IRQ,
787 .start = GFX2D1_IRQ,
788 .end = GFX2D1_IRQ,
789 .flags = IORESOURCE_IRQ,
790 },
791};
792
793static struct kgsl_device_platform_data kgsl_2d1_pdata = {
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600794 .pwrlevel = {
795 {
796 .gpu_freq = 200000000,
797 .bus_freq = 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700798 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600799 {
800 .gpu_freq = 200000000,
801 .bus_freq = 0,
802 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700803 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600804 .init_level = 0,
805 .num_levels = 2,
806 .set_grp_async = NULL,
807 .idle_timeout = HZ/10,
808 .nap_allowed = true,
809 .clk_map = KGSL_CLK_CORE | KGSL_CLK_IFACE,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700810#ifdef CONFIG_MSM_BUS_SCALING
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600811 .bus_scale_table = &grp2d1_bus_scale_pdata,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700812#endif
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700813};
814
815struct platform_device msm_kgsl_2d1 = {
816 .name = "kgsl-2d1",
817 .id = 1,
818 .num_resources = ARRAY_SIZE(kgsl_2d1_resources),
819 .resource = kgsl_2d1_resources,
820 .dev = {
821 .platform_data = &kgsl_2d1_pdata,
822 },
823};
824
825/*
826 * this a software workaround for not having two distinct board
827 * files for 8660v1 and 8660v2. 8660v1 has a faulty 2d clock, and
828 * this workaround detects the cpu version to tell if the kernel is on a
829 * 8660v1, and should disable the 2d core. it is called from the board file
830 */
831void __init msm8x60_check_2d_hardware(void)
832{
833 if ((SOCINFO_VERSION_MAJOR(socinfo_get_version()) == 1) &&
834 (SOCINFO_VERSION_MINOR(socinfo_get_version()) == 0)) {
835 printk(KERN_WARNING "kgsl: 2D cores disabled on 8660v1\n");
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600836 kgsl_2d0_pdata.clk_map = 0;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700837 }
838}
839
840/* Use GSBI3 QUP for /dev/i2c-0 */
841struct platform_device msm_gsbi3_qup_i2c_device = {
842 .name = "qup_i2c",
843 .id = MSM_GSBI3_QUP_I2C_BUS_ID,
844 .num_resources = ARRAY_SIZE(gsbi3_qup_i2c_resources),
845 .resource = gsbi3_qup_i2c_resources,
846};
847
848/* Use GSBI4 QUP for /dev/i2c-1 */
849struct platform_device msm_gsbi4_qup_i2c_device = {
850 .name = "qup_i2c",
851 .id = MSM_GSBI4_QUP_I2C_BUS_ID,
852 .num_resources = ARRAY_SIZE(gsbi4_qup_i2c_resources),
853 .resource = gsbi4_qup_i2c_resources,
854};
855
856/* Use GSBI8 QUP for /dev/i2c-3 */
857struct platform_device msm_gsbi8_qup_i2c_device = {
858 .name = "qup_i2c",
859 .id = MSM_GSBI8_QUP_I2C_BUS_ID,
860 .num_resources = ARRAY_SIZE(gsbi8_qup_i2c_resources),
861 .resource = gsbi8_qup_i2c_resources,
862};
863
864/* Use GSBI9 QUP for /dev/i2c-2 */
865struct platform_device msm_gsbi9_qup_i2c_device = {
866 .name = "qup_i2c",
867 .id = MSM_GSBI9_QUP_I2C_BUS_ID,
868 .num_resources = ARRAY_SIZE(gsbi9_qup_i2c_resources),
869 .resource = gsbi9_qup_i2c_resources,
870};
871
872/* Use GSBI7 QUP for /dev/i2c-4 (Marimba) */
873struct platform_device msm_gsbi7_qup_i2c_device = {
874 .name = "qup_i2c",
875 .id = MSM_GSBI7_QUP_I2C_BUS_ID,
876 .num_resources = ARRAY_SIZE(gsbi7_qup_i2c_resources),
877 .resource = gsbi7_qup_i2c_resources,
878};
879
880/* Use GSBI12 QUP for /dev/i2c-5 (Sensors) */
881struct platform_device msm_gsbi12_qup_i2c_device = {
882 .name = "qup_i2c",
883 .id = MSM_GSBI12_QUP_I2C_BUS_ID,
884 .num_resources = ARRAY_SIZE(gsbi12_qup_i2c_resources),
885 .resource = gsbi12_qup_i2c_resources,
886};
887
Anirudh Ghayal9d9cdc22011-10-10 17:17:07 +0530888#ifdef CONFIG_MSM_SSBI
889#define MSM_SSBI_PMIC1_PHYS 0x00500000
890static struct resource resources_ssbi_pmic1_resource[] = {
891 {
892 .start = MSM_SSBI_PMIC1_PHYS,
893 .end = MSM_SSBI_PMIC1_PHYS + SZ_4K - 1,
894 .flags = IORESOURCE_MEM,
895 },
896};
897
898struct platform_device msm_device_ssbi_pmic1 = {
899 .name = "msm_ssbi",
900 .id = 0,
901 .resource = resources_ssbi_pmic1_resource,
902 .num_resources = ARRAY_SIZE(resources_ssbi_pmic1_resource),
903};
Anirudh Ghayalc49157f2011-11-09 14:49:59 +0530904
905#define MSM_SSBI2_PMIC2B_PHYS 0x00C00000
906static struct resource resources_ssbi_pmic2_resource[] = {
907 {
908 .start = MSM_SSBI2_PMIC2B_PHYS,
909 .end = MSM_SSBI2_PMIC2B_PHYS + SZ_4K - 1,
910 .flags = IORESOURCE_MEM,
911 },
912};
913
914struct platform_device msm_device_ssbi_pmic2 = {
915 .name = "msm_ssbi",
916 .id = 1,
917 .resource = resources_ssbi_pmic2_resource,
918 .num_resources = ARRAY_SIZE(resources_ssbi_pmic2_resource),
919};
Anirudh Ghayal9d9cdc22011-10-10 17:17:07 +0530920#endif
921
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700922#ifdef CONFIG_I2C_SSBI
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700923/* CODEC SSBI on /dev/i2c-8 */
924#define MSM_SSBI3_PHYS 0x18700000
925static struct resource msm_ssbi3_resources[] = {
926 {
927 .name = "ssbi_base",
928 .start = MSM_SSBI3_PHYS,
929 .end = MSM_SSBI3_PHYS + SZ_4K - 1,
930 .flags = IORESOURCE_MEM,
931 },
932};
933
934struct platform_device msm_device_ssbi3 = {
935 .name = "i2c_ssbi",
936 .id = MSM_SSBI3_I2C_BUS_ID,
937 .num_resources = ARRAY_SIZE(msm_ssbi3_resources),
938 .resource = msm_ssbi3_resources,
939};
940#endif /* CONFIG_I2C_SSBI */
941
942static struct resource gsbi1_qup_spi_resources[] = {
943 {
944 .name = "spi_base",
945 .start = MSM_GSBI1_QUP_PHYS,
946 .end = MSM_GSBI1_QUP_PHYS + SZ_4K - 1,
947 .flags = IORESOURCE_MEM,
948 },
949 {
950 .name = "gsbi_base",
951 .start = MSM_GSBI1_PHYS,
952 .end = MSM_GSBI1_PHYS + 4 - 1,
953 .flags = IORESOURCE_MEM,
954 },
955 {
956 .name = "spi_irq_in",
957 .start = GSBI1_QUP_IRQ,
958 .end = GSBI1_QUP_IRQ,
959 .flags = IORESOURCE_IRQ,
960 },
961 {
962 .name = "spidm_channels",
963 .start = 5,
964 .end = 6,
965 .flags = IORESOURCE_DMA,
966 },
967 {
968 .name = "spidm_crci",
969 .start = 8,
970 .end = 7,
971 .flags = IORESOURCE_DMA,
972 },
973 {
974 .name = "spi_clk",
975 .start = 36,
976 .end = 36,
977 .flags = IORESOURCE_IO,
978 },
979 {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700980 .name = "spi_miso",
981 .start = 34,
982 .end = 34,
983 .flags = IORESOURCE_IO,
984 },
985 {
986 .name = "spi_mosi",
987 .start = 33,
988 .end = 33,
989 .flags = IORESOURCE_IO,
990 },
Harini Jayaraman5d93be12011-11-29 18:32:20 -0700991 {
992 .name = "spi_cs",
993 .start = 35,
994 .end = 35,
995 .flags = IORESOURCE_IO,
996 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700997};
998
999/* Use GSBI1 QUP for SPI-0 */
1000struct platform_device msm_gsbi1_qup_spi_device = {
1001 .name = "spi_qsd",
1002 .id = 0,
1003 .num_resources = ARRAY_SIZE(gsbi1_qup_spi_resources),
1004 .resource = gsbi1_qup_spi_resources,
1005};
1006
1007
1008static struct resource gsbi10_qup_spi_resources[] = {
1009 {
1010 .name = "spi_base",
1011 .start = MSM_GSBI10_QUP_PHYS,
1012 .end = MSM_GSBI10_QUP_PHYS + SZ_4K - 1,
1013 .flags = IORESOURCE_MEM,
1014 },
1015 {
1016 .name = "gsbi_base",
1017 .start = MSM_GSBI10_PHYS,
1018 .end = MSM_GSBI10_PHYS + 4 - 1,
1019 .flags = IORESOURCE_MEM,
1020 },
1021 {
1022 .name = "spi_irq_in",
1023 .start = GSBI10_QUP_IRQ,
1024 .end = GSBI10_QUP_IRQ,
1025 .flags = IORESOURCE_IRQ,
1026 },
1027 {
1028 .name = "spi_clk",
1029 .start = 73,
1030 .end = 73,
1031 .flags = IORESOURCE_IO,
1032 },
1033 {
1034 .name = "spi_cs",
1035 .start = 72,
1036 .end = 72,
1037 .flags = IORESOURCE_IO,
1038 },
1039 {
1040 .name = "spi_mosi",
1041 .start = 70,
1042 .end = 70,
1043 .flags = IORESOURCE_IO,
1044 },
1045};
1046
1047/* Use GSBI10 QUP for SPI-1 */
1048struct platform_device msm_gsbi10_qup_spi_device = {
1049 .name = "spi_qsd",
1050 .id = 1,
1051 .num_resources = ARRAY_SIZE(gsbi10_qup_spi_resources),
1052 .resource = gsbi10_qup_spi_resources,
1053};
1054#define MSM_SDC1_BASE 0x12400000
1055#define MSM_SDC1_DML_BASE (MSM_SDC1_BASE + 0x800)
1056#define MSM_SDC1_BAM_BASE (MSM_SDC1_BASE + 0x2000)
1057#define MSM_SDC2_BASE 0x12140000
1058#define MSM_SDC2_DML_BASE (MSM_SDC2_BASE + 0x800)
1059#define MSM_SDC2_BAM_BASE (MSM_SDC2_BASE + 0x2000)
1060#define MSM_SDC3_BASE 0x12180000
1061#define MSM_SDC3_DML_BASE (MSM_SDC3_BASE + 0x800)
1062#define MSM_SDC3_BAM_BASE (MSM_SDC3_BASE + 0x2000)
1063#define MSM_SDC4_BASE 0x121C0000
1064#define MSM_SDC4_DML_BASE (MSM_SDC4_BASE + 0x800)
1065#define MSM_SDC4_BAM_BASE (MSM_SDC4_BASE + 0x2000)
1066#define MSM_SDC5_BASE 0x12200000
1067#define MSM_SDC5_DML_BASE (MSM_SDC5_BASE + 0x800)
1068#define MSM_SDC5_BAM_BASE (MSM_SDC5_BASE + 0x2000)
1069
1070static struct resource resources_sdc1[] = {
1071 {
1072 .start = MSM_SDC1_BASE,
1073 .end = MSM_SDC1_DML_BASE - 1,
1074 .flags = IORESOURCE_MEM,
1075 },
1076 {
1077 .start = SDC1_IRQ_0,
1078 .end = SDC1_IRQ_0,
1079 .flags = IORESOURCE_IRQ,
1080 },
1081#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1082 {
1083 .name = "sdcc_dml_addr",
1084 .start = MSM_SDC1_DML_BASE,
1085 .end = MSM_SDC1_BAM_BASE - 1,
1086 .flags = IORESOURCE_MEM,
1087 },
1088 {
1089 .name = "sdcc_bam_addr",
1090 .start = MSM_SDC1_BAM_BASE,
1091 .end = MSM_SDC1_BAM_BASE + (2 * SZ_4K) - 1,
1092 .flags = IORESOURCE_MEM,
1093 },
1094 {
1095 .name = "sdcc_bam_irq",
1096 .start = SDC1_BAM_IRQ,
1097 .end = SDC1_BAM_IRQ,
1098 .flags = IORESOURCE_IRQ,
1099 },
1100#else
1101 {
Krishna Konda25786ec2011-07-25 16:21:36 -07001102 .name = "sdcc_dma_chnl",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001103 .start = DMOV_SDC1_CHAN,
1104 .end = DMOV_SDC1_CHAN,
1105 .flags = IORESOURCE_DMA,
1106 },
Krishna Konda25786ec2011-07-25 16:21:36 -07001107 {
1108 .name = "sdcc_dma_crci",
1109 .start = DMOV_SDC1_CRCI,
1110 .end = DMOV_SDC1_CRCI,
1111 .flags = IORESOURCE_DMA,
1112 }
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001113#endif /* CONFIG_MMC_MSM_SPS_SUPPORT */
1114};
1115
1116static struct resource resources_sdc2[] = {
1117 {
1118 .start = MSM_SDC2_BASE,
1119 .end = MSM_SDC2_DML_BASE - 1,
1120 .flags = IORESOURCE_MEM,
1121 },
1122 {
1123 .start = SDC2_IRQ_0,
1124 .end = SDC2_IRQ_0,
1125 .flags = IORESOURCE_IRQ,
1126 },
1127#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1128 {
1129 .name = "sdcc_dml_addr",
1130 .start = MSM_SDC2_DML_BASE,
1131 .end = MSM_SDC2_BAM_BASE - 1,
1132 .flags = IORESOURCE_MEM,
1133 },
1134 {
1135 .name = "sdcc_bam_addr",
1136 .start = MSM_SDC2_BAM_BASE,
1137 .end = MSM_SDC2_BAM_BASE + (2 * SZ_4K) - 1,
1138 .flags = IORESOURCE_MEM,
1139 },
1140 {
1141 .name = "sdcc_bam_irq",
1142 .start = SDC2_BAM_IRQ,
1143 .end = SDC2_BAM_IRQ,
1144 .flags = IORESOURCE_IRQ,
1145 },
1146#else
1147 {
Krishna Konda25786ec2011-07-25 16:21:36 -07001148 .name = "sdcc_dma_chnl",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001149 .start = DMOV_SDC2_CHAN,
1150 .end = DMOV_SDC2_CHAN,
1151 .flags = IORESOURCE_DMA,
1152 },
Krishna Konda25786ec2011-07-25 16:21:36 -07001153 {
1154 .name = "sdcc_dma_crci",
1155 .start = DMOV_SDC2_CRCI,
1156 .end = DMOV_SDC2_CRCI,
1157 .flags = IORESOURCE_DMA,
1158 }
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001159#endif /* CONFIG_MMC_MSM_SPS_SUPPORT */
1160};
1161
1162static struct resource resources_sdc3[] = {
1163 {
1164 .start = MSM_SDC3_BASE,
1165 .end = MSM_SDC3_DML_BASE - 1,
1166 .flags = IORESOURCE_MEM,
1167 },
1168 {
1169 .start = SDC3_IRQ_0,
1170 .end = SDC3_IRQ_0,
1171 .flags = IORESOURCE_IRQ,
1172 },
1173#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1174 {
1175 .name = "sdcc_dml_addr",
1176 .start = MSM_SDC3_DML_BASE,
1177 .end = MSM_SDC3_BAM_BASE - 1,
1178 .flags = IORESOURCE_MEM,
1179 },
1180 {
1181 .name = "sdcc_bam_addr",
1182 .start = MSM_SDC3_BAM_BASE,
1183 .end = MSM_SDC3_BAM_BASE + (2 * SZ_4K) - 1,
1184 .flags = IORESOURCE_MEM,
1185 },
1186 {
1187 .name = "sdcc_bam_irq",
1188 .start = SDC3_BAM_IRQ,
1189 .end = SDC3_BAM_IRQ,
1190 .flags = IORESOURCE_IRQ,
1191 },
1192#else
1193 {
Krishna Konda25786ec2011-07-25 16:21:36 -07001194 .name = "sdcc_dma_chnl",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001195 .start = DMOV_SDC3_CHAN,
1196 .end = DMOV_SDC3_CHAN,
1197 .flags = IORESOURCE_DMA,
1198 },
Krishna Konda25786ec2011-07-25 16:21:36 -07001199 {
1200 .name = "sdcc_dma_crci",
1201 .start = DMOV_SDC3_CRCI,
1202 .end = DMOV_SDC3_CRCI,
1203 .flags = IORESOURCE_DMA,
1204 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001205#endif /* CONFIG_MMC_MSM_SPS_SUPPORT */
1206};
1207
1208static struct resource resources_sdc4[] = {
1209 {
1210 .start = MSM_SDC4_BASE,
1211 .end = MSM_SDC4_DML_BASE - 1,
1212 .flags = IORESOURCE_MEM,
1213 },
1214 {
1215 .start = SDC4_IRQ_0,
1216 .end = SDC4_IRQ_0,
1217 .flags = IORESOURCE_IRQ,
1218 },
1219#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1220 {
1221 .name = "sdcc_dml_addr",
1222 .start = MSM_SDC4_DML_BASE,
1223 .end = MSM_SDC4_BAM_BASE - 1,
1224 .flags = IORESOURCE_MEM,
1225 },
1226 {
1227 .name = "sdcc_bam_addr",
1228 .start = MSM_SDC4_BAM_BASE,
1229 .end = MSM_SDC4_BAM_BASE + (2 * SZ_4K) - 1,
1230 .flags = IORESOURCE_MEM,
1231 },
1232 {
1233 .name = "sdcc_bam_irq",
1234 .start = SDC4_BAM_IRQ,
1235 .end = SDC4_BAM_IRQ,
1236 .flags = IORESOURCE_IRQ,
1237 },
1238#else
1239 {
Krishna Konda25786ec2011-07-25 16:21:36 -07001240 .name = "sdcc_dma_chnl",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001241 .start = DMOV_SDC4_CHAN,
1242 .end = DMOV_SDC4_CHAN,
1243 .flags = IORESOURCE_DMA,
1244 },
Krishna Konda25786ec2011-07-25 16:21:36 -07001245 {
1246 .name = "sdcc_dma_crci",
1247 .start = DMOV_SDC4_CRCI,
1248 .end = DMOV_SDC4_CRCI,
1249 .flags = IORESOURCE_DMA,
1250 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001251#endif /* CONFIG_MMC_MSM_SPS_SUPPORT */
1252};
1253
1254static struct resource resources_sdc5[] = {
1255 {
1256 .start = MSM_SDC5_BASE,
1257 .end = MSM_SDC5_DML_BASE - 1,
1258 .flags = IORESOURCE_MEM,
1259 },
1260 {
1261 .start = SDC5_IRQ_0,
1262 .end = SDC5_IRQ_0,
1263 .flags = IORESOURCE_IRQ,
1264 },
1265#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1266 {
1267 .name = "sdcc_dml_addr",
1268 .start = MSM_SDC5_DML_BASE,
1269 .end = MSM_SDC5_BAM_BASE - 1,
1270 .flags = IORESOURCE_MEM,
1271 },
1272 {
1273 .name = "sdcc_bam_addr",
1274 .start = MSM_SDC5_BAM_BASE,
1275 .end = MSM_SDC5_BAM_BASE + (2 * SZ_4K) - 1,
1276 .flags = IORESOURCE_MEM,
1277 },
1278 {
1279 .name = "sdcc_bam_irq",
1280 .start = SDC5_BAM_IRQ,
1281 .end = SDC5_BAM_IRQ,
1282 .flags = IORESOURCE_IRQ,
1283 },
1284#else
1285 {
Krishna Konda25786ec2011-07-25 16:21:36 -07001286 .name = "sdcc_dma_chnl",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001287 .start = DMOV_SDC5_CHAN,
1288 .end = DMOV_SDC5_CHAN,
1289 .flags = IORESOURCE_DMA,
1290 },
Krishna Konda25786ec2011-07-25 16:21:36 -07001291 {
1292 .name = "sdcc_dma_crci",
1293 .start = DMOV_SDC5_CRCI,
1294 .end = DMOV_SDC5_CRCI,
1295 .flags = IORESOURCE_DMA,
1296 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001297#endif /* CONFIG_MMC_MSM_SPS_SUPPORT */
1298};
1299
1300struct platform_device msm_device_sdc1 = {
1301 .name = "msm_sdcc",
1302 .id = 1,
1303 .num_resources = ARRAY_SIZE(resources_sdc1),
1304 .resource = resources_sdc1,
1305 .dev = {
1306 .coherent_dma_mask = 0xffffffff,
1307 },
1308};
1309
1310struct platform_device msm_device_sdc2 = {
1311 .name = "msm_sdcc",
1312 .id = 2,
1313 .num_resources = ARRAY_SIZE(resources_sdc2),
1314 .resource = resources_sdc2,
1315 .dev = {
1316 .coherent_dma_mask = 0xffffffff,
1317 },
1318};
1319
1320struct platform_device msm_device_sdc3 = {
1321 .name = "msm_sdcc",
1322 .id = 3,
1323 .num_resources = ARRAY_SIZE(resources_sdc3),
1324 .resource = resources_sdc3,
1325 .dev = {
1326 .coherent_dma_mask = 0xffffffff,
1327 },
1328};
1329
1330struct platform_device msm_device_sdc4 = {
1331 .name = "msm_sdcc",
1332 .id = 4,
1333 .num_resources = ARRAY_SIZE(resources_sdc4),
1334 .resource = resources_sdc4,
1335 .dev = {
1336 .coherent_dma_mask = 0xffffffff,
1337 },
1338};
1339
1340struct platform_device msm_device_sdc5 = {
1341 .name = "msm_sdcc",
1342 .id = 5,
1343 .num_resources = ARRAY_SIZE(resources_sdc5),
1344 .resource = resources_sdc5,
1345 .dev = {
1346 .coherent_dma_mask = 0xffffffff,
1347 },
1348};
1349
1350static struct platform_device *msm_sdcc_devices[] __initdata = {
1351 &msm_device_sdc1,
1352 &msm_device_sdc2,
1353 &msm_device_sdc3,
1354 &msm_device_sdc4,
1355 &msm_device_sdc5,
1356};
1357
1358int __init msm_add_sdcc(unsigned int controller, struct mmc_platform_data *plat)
1359{
1360 struct platform_device *pdev;
1361
1362 if (controller < 1 || controller > 5)
1363 return -EINVAL;
1364
1365 pdev = msm_sdcc_devices[controller-1];
1366 pdev->dev.platform_data = plat;
1367 return platform_device_register(pdev);
1368}
1369
1370#define MIPI_DSI_HW_BASE 0x04700000
1371#define ROTATOR_HW_BASE 0x04E00000
1372#define TVENC_HW_BASE 0x04F00000
1373#define MDP_HW_BASE 0x05100000
1374
1375static struct resource msm_mipi_dsi_resources[] = {
1376 {
1377 .name = "mipi_dsi",
1378 .start = MIPI_DSI_HW_BASE,
kuogee hsiehf12acf52011-09-06 10:49:43 -07001379 .end = MIPI_DSI_HW_BASE + 0x000F0000 - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001380 .flags = IORESOURCE_MEM,
1381 },
1382 {
1383 .start = DSI_IRQ,
1384 .end = DSI_IRQ,
1385 .flags = IORESOURCE_IRQ,
1386 },
1387};
1388
1389static struct platform_device msm_mipi_dsi_device = {
1390 .name = "mipi_dsi",
1391 .id = 1,
1392 .num_resources = ARRAY_SIZE(msm_mipi_dsi_resources),
1393 .resource = msm_mipi_dsi_resources,
1394};
1395
1396static struct resource msm_mdp_resources[] = {
1397 {
1398 .name = "mdp",
1399 .start = MDP_HW_BASE,
kuogee hsiehf12acf52011-09-06 10:49:43 -07001400 .end = MDP_HW_BASE + 0x000F0000 - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001401 .flags = IORESOURCE_MEM,
1402 },
1403 {
1404 .start = INT_MDP,
1405 .end = INT_MDP,
1406 .flags = IORESOURCE_IRQ,
1407 },
1408};
1409
1410static struct platform_device msm_mdp_device = {
1411 .name = "mdp",
1412 .id = 0,
1413 .num_resources = ARRAY_SIZE(msm_mdp_resources),
1414 .resource = msm_mdp_resources,
1415};
1416#ifdef CONFIG_MSM_ROTATOR
1417static struct resource resources_msm_rotator[] = {
1418 {
1419 .start = 0x04E00000,
1420 .end = 0x04F00000 - 1,
1421 .flags = IORESOURCE_MEM,
1422 },
1423 {
1424 .start = ROT_IRQ,
1425 .end = ROT_IRQ,
1426 .flags = IORESOURCE_IRQ,
1427 },
1428};
1429
1430static struct msm_rot_clocks rotator_clocks[] = {
1431 {
Matt Wagantallbb90da92011-10-25 15:07:52 -07001432 .clk_name = "core_clk",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001433 .clk_type = ROTATOR_CORE_CLK,
1434 .clk_rate = 160 * 1000 * 1000,
1435 },
1436 {
Matt Wagantallbb90da92011-10-25 15:07:52 -07001437 .clk_name = "iface_clk",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001438 .clk_type = ROTATOR_PCLK,
1439 .clk_rate = 0,
1440 },
1441};
1442
1443static struct msm_rotator_platform_data rotator_pdata = {
1444 .number_of_clocks = ARRAY_SIZE(rotator_clocks),
1445 .hardware_version_number = 0x01010307,
1446 .rotator_clks = rotator_clocks,
1447 .regulator_name = "fs_rot",
Nagamalleswararao Ganji5fabbd62011-11-06 23:10:43 -08001448#ifdef CONFIG_MSM_BUS_SCALING
1449 .bus_scale_table = &rotator_bus_scale_pdata,
1450#endif
1451
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001452};
1453
1454struct platform_device msm_rotator_device = {
1455 .name = "msm_rotator",
1456 .id = 0,
1457 .num_resources = ARRAY_SIZE(resources_msm_rotator),
1458 .resource = resources_msm_rotator,
1459 .dev = {
1460 .platform_data = &rotator_pdata,
1461 },
1462};
1463#endif
1464
1465
1466/* Sensors DSPS platform data */
1467#ifdef CONFIG_MSM_DSPS
1468
1469#define PPSS_REG_PHYS_BASE 0x12080000
1470
1471#define MHZ (1000*1000)
1472
Wentao Xu7a1c9302011-09-19 17:57:43 -04001473#define TCSR_GSBI_IRQ_MUX_SEL 0x0044
1474
1475#define GSBI_IRQ_MUX_SEL_MASK 0xF
1476#define GSBI_IRQ_MUX_SEL_DSPS 0xB
1477
1478static void dsps_init1(struct msm_dsps_platform_data *data)
1479{
1480 int val;
1481
1482 /* route GSBI12 interrutps to DSPS */
1483 val = secure_readl(MSM_TCSR_BASE + TCSR_GSBI_IRQ_MUX_SEL);
1484 val &= ~GSBI_IRQ_MUX_SEL_MASK;
1485 val |= GSBI_IRQ_MUX_SEL_DSPS;
1486 secure_writel(val, MSM_TCSR_BASE + TCSR_GSBI_IRQ_MUX_SEL);
1487}
1488
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001489static struct dsps_clk_info dsps_clks[] = {
1490 {
1491 .name = "ppss_pclk",
1492 .rate = 0, /* no rate just on/off */
1493 },
1494 {
Matt Wagantalld86d6832011-08-17 14:06:55 -07001495 .name = "mem_clk",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001496 .rate = 0, /* no rate just on/off */
1497 },
1498 {
1499 .name = "gsbi_qup_clk",
1500 .rate = 24 * MHZ, /* See clk_tbl_gsbi_qup[] */
1501 },
1502 {
1503 .name = "dfab_dsps_clk",
1504 .rate = 64 * MHZ, /* Same rate as USB. */
1505 }
1506};
1507
1508static struct dsps_regulator_info dsps_regs[] = {
1509 {
1510 .name = "8058_l5",
1511 .volt = 2850000, /* in uV */
1512 },
1513 {
1514 .name = "8058_s3",
1515 .volt = 1800000, /* in uV */
1516 }
1517};
1518
1519/*
1520 * Note: GPIOs field is intialized in run-time at the function
1521 * msm8x60_init_dsps().
1522 */
1523
1524struct msm_dsps_platform_data msm_dsps_pdata = {
1525 .clks = dsps_clks,
1526 .clks_num = ARRAY_SIZE(dsps_clks),
1527 .gpios = NULL,
1528 .gpios_num = 0,
1529 .regs = dsps_regs,
1530 .regs_num = ARRAY_SIZE(dsps_regs),
Wentao Xu7a1c9302011-09-19 17:57:43 -04001531 .init = dsps_init1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001532 .signature = DSPS_SIGNATURE,
1533};
1534
1535static struct resource msm_dsps_resources[] = {
1536 {
1537 .start = PPSS_REG_PHYS_BASE,
1538 .end = PPSS_REG_PHYS_BASE + SZ_8K - 1,
1539 .name = "ppss_reg",
1540 .flags = IORESOURCE_MEM,
1541 },
1542};
1543
1544struct platform_device msm_dsps_device = {
1545 .name = "msm_dsps",
1546 .id = 0,
1547 .num_resources = ARRAY_SIZE(msm_dsps_resources),
1548 .resource = msm_dsps_resources,
1549 .dev.platform_data = &msm_dsps_pdata,
1550};
1551
1552#endif /* CONFIG_MSM_DSPS */
1553
1554#ifdef CONFIG_FB_MSM_TVOUT
1555static struct resource msm_tvenc_resources[] = {
1556 {
1557 .name = "tvenc",
1558 .start = TVENC_HW_BASE,
1559 .end = TVENC_HW_BASE + PAGE_SIZE - 1,
1560 .flags = IORESOURCE_MEM,
1561 }
1562};
1563
1564static struct resource tvout_device_resources[] = {
1565 {
1566 .name = "tvout_device_irq",
1567 .start = TV_ENC_IRQ,
1568 .end = TV_ENC_IRQ,
1569 .flags = IORESOURCE_IRQ,
1570 },
1571};
1572#endif
1573static void __init msm_register_device(struct platform_device *pdev, void *data)
1574{
1575 int ret;
1576
1577 pdev->dev.platform_data = data;
1578
1579 ret = platform_device_register(pdev);
1580 if (ret)
1581 dev_err(&pdev->dev,
1582 "%s: platform_device_register() failed = %d\n",
1583 __func__, ret);
1584}
1585
1586static struct platform_device msm_lcdc_device = {
1587 .name = "lcdc",
1588 .id = 0,
1589};
1590
1591#ifdef CONFIG_FB_MSM_TVOUT
1592static struct platform_device msm_tvenc_device = {
1593 .name = "tvenc",
1594 .id = 0,
1595 .num_resources = ARRAY_SIZE(msm_tvenc_resources),
1596 .resource = msm_tvenc_resources,
1597};
1598
1599static struct platform_device msm_tvout_device = {
1600 .name = "tvout_device",
1601 .id = 0,
1602 .num_resources = ARRAY_SIZE(tvout_device_resources),
1603 .resource = tvout_device_resources,
1604};
1605#endif
1606
1607#ifdef CONFIG_MSM_BUS_SCALING
1608static struct platform_device msm_dtv_device = {
1609 .name = "dtv",
1610 .id = 0,
1611};
1612#endif
1613
1614void __init msm_fb_register_device(char *name, void *data)
1615{
1616 if (!strncmp(name, "mdp", 3))
1617 msm_register_device(&msm_mdp_device, data);
1618 else if (!strncmp(name, "lcdc", 4))
1619 msm_register_device(&msm_lcdc_device, data);
1620 else if (!strncmp(name, "mipi_dsi", 8))
1621 msm_register_device(&msm_mipi_dsi_device, data);
1622#ifdef CONFIG_FB_MSM_TVOUT
1623 else if (!strncmp(name, "tvenc", 5))
1624 msm_register_device(&msm_tvenc_device, data);
1625 else if (!strncmp(name, "tvout_device", 12))
1626 msm_register_device(&msm_tvout_device, data);
1627#endif
1628#ifdef CONFIG_MSM_BUS_SCALING
1629 else if (!strncmp(name, "dtv", 3))
1630 msm_register_device(&msm_dtv_device, data);
1631#endif
1632 else
1633 printk(KERN_ERR "%s: unknown device! %s\n", __func__, name);
1634}
1635
1636static struct resource resources_otg[] = {
1637 {
1638 .start = 0x12500000,
1639 .end = 0x12500000 + SZ_1K - 1,
1640 .flags = IORESOURCE_MEM,
1641 },
1642 {
1643 .start = USB1_HS_IRQ,
1644 .end = USB1_HS_IRQ,
1645 .flags = IORESOURCE_IRQ,
1646 },
1647};
1648
1649struct platform_device msm_device_otg = {
1650 .name = "msm_otg",
1651 .id = -1,
1652 .num_resources = ARRAY_SIZE(resources_otg),
1653 .resource = resources_otg,
1654};
1655
1656static u64 dma_mask = 0xffffffffULL;
1657struct platform_device msm_device_gadget_peripheral = {
1658 .name = "msm_hsusb",
1659 .id = -1,
1660 .dev = {
1661 .dma_mask = &dma_mask,
1662 .coherent_dma_mask = 0xffffffffULL,
1663 },
1664};
1665#ifdef CONFIG_USB_EHCI_MSM_72K
1666static struct resource resources_hsusb_host[] = {
1667 {
1668 .start = 0x12500000,
1669 .end = 0x12500000 + SZ_1K - 1,
1670 .flags = IORESOURCE_MEM,
1671 },
1672 {
1673 .start = USB1_HS_IRQ,
1674 .end = USB1_HS_IRQ,
1675 .flags = IORESOURCE_IRQ,
1676 },
1677};
1678
1679struct platform_device msm_device_hsusb_host = {
1680 .name = "msm_hsusb_host",
1681 .id = 0,
1682 .num_resources = ARRAY_SIZE(resources_hsusb_host),
1683 .resource = resources_hsusb_host,
1684 .dev = {
1685 .dma_mask = &dma_mask,
1686 .coherent_dma_mask = 0xffffffffULL,
1687 },
1688};
1689
1690static struct platform_device *msm_host_devices[] = {
1691 &msm_device_hsusb_host,
1692};
1693
1694int msm_add_host(unsigned int host, struct msm_usb_host_platform_data *plat)
1695{
1696 struct platform_device *pdev;
1697
1698 pdev = msm_host_devices[host];
1699 if (!pdev)
1700 return -ENODEV;
1701 pdev->dev.platform_data = plat;
1702 return platform_device_register(pdev);
1703}
1704#endif
1705
1706#define MSM_TSIF0_PHYS (0x18200000)
1707#define MSM_TSIF1_PHYS (0x18201000)
1708#define MSM_TSIF_SIZE (0x200)
1709#define TCSR_ADM_0_A_CRCI_MUX_SEL 0x0070
1710
1711#define TSIF_0_CLK GPIO_CFG(93, 1, GPIO_CFG_INPUT, \
1712 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
1713#define TSIF_0_EN GPIO_CFG(94, 1, GPIO_CFG_INPUT, \
1714 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
1715#define TSIF_0_DATA GPIO_CFG(95, 1, GPIO_CFG_INPUT, \
1716 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
1717#define TSIF_0_SYNC GPIO_CFG(96, 1, GPIO_CFG_INPUT, \
1718 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
1719#define TSIF_1_CLK GPIO_CFG(97, 1, GPIO_CFG_INPUT, \
1720 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
1721#define TSIF_1_EN GPIO_CFG(98, 1, GPIO_CFG_INPUT, \
1722 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
1723#define TSIF_1_DATA GPIO_CFG(99, 1, GPIO_CFG_INPUT, \
1724 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
1725#define TSIF_1_SYNC GPIO_CFG(100, 1, GPIO_CFG_INPUT, \
1726 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
1727
1728static const struct msm_gpio tsif0_gpios[] = {
1729 { .gpio_cfg = TSIF_0_CLK, .label = "tsif_clk", },
1730 { .gpio_cfg = TSIF_0_EN, .label = "tsif_en", },
1731 { .gpio_cfg = TSIF_0_DATA, .label = "tsif_data", },
1732 { .gpio_cfg = TSIF_0_SYNC, .label = "tsif_sync", },
1733};
1734
1735static const struct msm_gpio tsif1_gpios[] = {
1736 { .gpio_cfg = TSIF_1_CLK, .label = "tsif_clk", },
1737 { .gpio_cfg = TSIF_1_EN, .label = "tsif_en", },
1738 { .gpio_cfg = TSIF_1_DATA, .label = "tsif_data", },
1739 { .gpio_cfg = TSIF_1_SYNC, .label = "tsif_sync", },
1740};
1741
1742static void tsif_release(struct device *dev)
1743{
1744}
1745
1746static void tsif_init1(struct msm_tsif_platform_data *data)
1747{
1748 int val;
1749
1750 /* configure mux to use correct tsif instance */
1751 val = secure_readl(MSM_TCSR_BASE + TCSR_ADM_0_A_CRCI_MUX_SEL);
1752 val |= 0x80000000;
1753 secure_writel(val, MSM_TCSR_BASE + TCSR_ADM_0_A_CRCI_MUX_SEL);
1754}
1755
1756struct msm_tsif_platform_data tsif1_platform_data = {
1757 .num_gpios = ARRAY_SIZE(tsif1_gpios),
1758 .gpios = tsif1_gpios,
Matt Wagantall640e5fd2011-08-17 16:08:53 -07001759 .tsif_pclk = "iface_clk",
1760 .tsif_ref_clk = "ref_clk",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001761 .init = tsif_init1
1762};
1763
1764struct resource tsif1_resources[] = {
1765 [0] = {
1766 .flags = IORESOURCE_IRQ,
1767 .start = TSIF2_IRQ,
1768 .end = TSIF2_IRQ,
1769 },
1770 [1] = {
1771 .flags = IORESOURCE_MEM,
1772 .start = MSM_TSIF1_PHYS,
1773 .end = MSM_TSIF1_PHYS + MSM_TSIF_SIZE - 1,
1774 },
1775 [2] = {
1776 .flags = IORESOURCE_DMA,
1777 .start = DMOV_TSIF_CHAN,
1778 .end = DMOV_TSIF_CRCI,
1779 },
1780};
1781
1782static void tsif_init0(struct msm_tsif_platform_data *data)
1783{
1784 int val;
1785
1786 /* configure mux to use correct tsif instance */
1787 val = secure_readl(MSM_TCSR_BASE + TCSR_ADM_0_A_CRCI_MUX_SEL);
1788 val &= 0x7FFFFFFF;
1789 secure_writel(val, MSM_TCSR_BASE + TCSR_ADM_0_A_CRCI_MUX_SEL);
1790}
1791
1792struct msm_tsif_platform_data tsif0_platform_data = {
1793 .num_gpios = ARRAY_SIZE(tsif0_gpios),
1794 .gpios = tsif0_gpios,
Matt Wagantall640e5fd2011-08-17 16:08:53 -07001795 .tsif_pclk = "iface_clk",
1796 .tsif_ref_clk = "ref_clk",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001797 .init = tsif_init0
1798};
1799struct resource tsif0_resources[] = {
1800 [0] = {
1801 .flags = IORESOURCE_IRQ,
1802 .start = TSIF1_IRQ,
1803 .end = TSIF1_IRQ,
1804 },
1805 [1] = {
1806 .flags = IORESOURCE_MEM,
1807 .start = MSM_TSIF0_PHYS,
1808 .end = MSM_TSIF0_PHYS + MSM_TSIF_SIZE - 1,
1809 },
1810 [2] = {
1811 .flags = IORESOURCE_DMA,
1812 .start = DMOV_TSIF_CHAN,
1813 .end = DMOV_TSIF_CRCI,
1814 },
1815};
1816
1817struct platform_device msm_device_tsif[2] = {
1818 {
1819 .name = "msm_tsif",
1820 .id = 0,
1821 .num_resources = ARRAY_SIZE(tsif0_resources),
1822 .resource = tsif0_resources,
1823 .dev = {
1824 .release = tsif_release,
1825 .platform_data = &tsif0_platform_data
1826 },
1827 },
1828 {
1829 .name = "msm_tsif",
1830 .id = 1,
1831 .num_resources = ARRAY_SIZE(tsif1_resources),
1832 .resource = tsif1_resources,
1833 .dev = {
1834 .release = tsif_release,
1835 .platform_data = &tsif1_platform_data
1836 },
1837 }
1838};
1839
1840struct platform_device msm_device_smd = {
1841 .name = "msm_smd",
1842 .id = -1,
1843};
1844
Jeff Ohlstein7e668552011-10-06 16:17:25 -07001845static struct msm_watchdog_pdata msm_watchdog_pdata = {
1846 .pet_time = 10000,
1847 .bark_time = 11000,
1848 .has_secure = true,
1849};
1850
1851struct platform_device msm8660_device_watchdog = {
1852 .name = "msm_watchdog",
1853 .id = -1,
1854 .dev = {
1855 .platform_data = &msm_watchdog_pdata,
1856 },
1857};
1858
Jeff Ohlstein905f1ce2011-09-07 18:50:18 -07001859static struct resource msm_dmov_resource_adm0[] = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001860 {
1861 .start = INT_ADM0_AARM,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001862 .flags = IORESOURCE_IRQ,
1863 },
Jeff Ohlstein905f1ce2011-09-07 18:50:18 -07001864 {
1865 .start = 0x18320000,
1866 .end = 0x18320000 + SZ_1M - 1,
1867 .flags = IORESOURCE_MEM,
1868 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001869};
1870
Jeff Ohlstein905f1ce2011-09-07 18:50:18 -07001871static struct resource msm_dmov_resource_adm1[] = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001872 {
1873 .start = INT_ADM1_AARM,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001874 .flags = IORESOURCE_IRQ,
1875 },
Jeff Ohlstein905f1ce2011-09-07 18:50:18 -07001876 {
1877 .start = 0x18420000,
1878 .end = 0x18420000 + SZ_1M - 1,
1879 .flags = IORESOURCE_MEM,
1880 },
1881};
1882
1883static struct msm_dmov_pdata msm_dmov_pdata_adm0 = {
1884 .sd = 1,
1885 .sd_size = 0x800,
1886};
1887
1888static struct msm_dmov_pdata msm_dmov_pdata_adm1 = {
1889 .sd = 1,
1890 .sd_size = 0x800,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001891};
1892
1893struct platform_device msm_device_dmov_adm0 = {
1894 .name = "msm_dmov",
1895 .id = 0,
1896 .resource = msm_dmov_resource_adm0,
1897 .num_resources = ARRAY_SIZE(msm_dmov_resource_adm0),
Jeff Ohlstein905f1ce2011-09-07 18:50:18 -07001898 .dev = {
1899 .platform_data = &msm_dmov_pdata_adm0,
1900 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001901};
1902
1903struct platform_device msm_device_dmov_adm1 = {
1904 .name = "msm_dmov",
1905 .id = 1,
1906 .resource = msm_dmov_resource_adm1,
1907 .num_resources = ARRAY_SIZE(msm_dmov_resource_adm1),
Jeff Ohlstein905f1ce2011-09-07 18:50:18 -07001908 .dev = {
1909 .platform_data = &msm_dmov_pdata_adm1,
1910 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001911};
1912
1913/* MSM Video core device */
1914#ifdef CONFIG_MSM_BUS_SCALING
1915static struct msm_bus_vectors vidc_init_vectors[] = {
1916 {
1917 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
1918 .dst = MSM_BUS_SLAVE_SMI,
1919 .ab = 0,
1920 .ib = 0,
1921 },
1922 {
1923 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
1924 .dst = MSM_BUS_SLAVE_SMI,
1925 .ab = 0,
1926 .ib = 0,
1927 },
1928 {
1929 .src = MSM_BUS_MASTER_AMPSS_M0,
1930 .dst = MSM_BUS_SLAVE_EBI_CH0,
1931 .ab = 0,
1932 .ib = 0,
1933 },
1934 {
1935 .src = MSM_BUS_MASTER_AMPSS_M0,
1936 .dst = MSM_BUS_SLAVE_SMI,
1937 .ab = 0,
1938 .ib = 0,
1939 },
1940};
1941static struct msm_bus_vectors vidc_venc_vga_vectors[] = {
1942 {
1943 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
1944 .dst = MSM_BUS_SLAVE_SMI,
1945 .ab = 54525952,
1946 .ib = 436207616,
1947 },
1948 {
1949 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
1950 .dst = MSM_BUS_SLAVE_SMI,
1951 .ab = 72351744,
1952 .ib = 289406976,
1953 },
1954 {
1955 .src = MSM_BUS_MASTER_AMPSS_M0,
1956 .dst = MSM_BUS_SLAVE_EBI_CH0,
1957 .ab = 500000,
1958 .ib = 1000000,
1959 },
1960 {
1961 .src = MSM_BUS_MASTER_AMPSS_M0,
1962 .dst = MSM_BUS_SLAVE_SMI,
1963 .ab = 500000,
1964 .ib = 1000000,
1965 },
1966};
1967static struct msm_bus_vectors vidc_vdec_vga_vectors[] = {
1968 {
1969 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
1970 .dst = MSM_BUS_SLAVE_SMI,
1971 .ab = 40894464,
1972 .ib = 327155712,
1973 },
1974 {
1975 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
1976 .dst = MSM_BUS_SLAVE_SMI,
1977 .ab = 48234496,
1978 .ib = 192937984,
1979 },
1980 {
1981 .src = MSM_BUS_MASTER_AMPSS_M0,
1982 .dst = MSM_BUS_SLAVE_EBI_CH0,
1983 .ab = 500000,
1984 .ib = 2000000,
1985 },
1986 {
1987 .src = MSM_BUS_MASTER_AMPSS_M0,
1988 .dst = MSM_BUS_SLAVE_SMI,
1989 .ab = 500000,
1990 .ib = 2000000,
1991 },
1992};
1993static struct msm_bus_vectors vidc_venc_720p_vectors[] = {
1994 {
1995 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
1996 .dst = MSM_BUS_SLAVE_SMI,
1997 .ab = 163577856,
1998 .ib = 1308622848,
1999 },
2000 {
2001 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
2002 .dst = MSM_BUS_SLAVE_SMI,
2003 .ab = 219152384,
2004 .ib = 876609536,
2005 },
2006 {
2007 .src = MSM_BUS_MASTER_AMPSS_M0,
2008 .dst = MSM_BUS_SLAVE_EBI_CH0,
2009 .ab = 1750000,
2010 .ib = 3500000,
2011 },
2012 {
2013 .src = MSM_BUS_MASTER_AMPSS_M0,
2014 .dst = MSM_BUS_SLAVE_SMI,
2015 .ab = 1750000,
2016 .ib = 3500000,
2017 },
2018};
2019static struct msm_bus_vectors vidc_vdec_720p_vectors[] = {
2020 {
2021 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
2022 .dst = MSM_BUS_SLAVE_SMI,
2023 .ab = 121634816,
2024 .ib = 973078528,
2025 },
2026 {
2027 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
2028 .dst = MSM_BUS_SLAVE_SMI,
2029 .ab = 155189248,
2030 .ib = 620756992,
2031 },
2032 {
2033 .src = MSM_BUS_MASTER_AMPSS_M0,
2034 .dst = MSM_BUS_SLAVE_EBI_CH0,
2035 .ab = 1750000,
2036 .ib = 7000000,
2037 },
2038 {
2039 .src = MSM_BUS_MASTER_AMPSS_M0,
2040 .dst = MSM_BUS_SLAVE_SMI,
2041 .ab = 1750000,
2042 .ib = 7000000,
2043 },
2044};
2045static struct msm_bus_vectors vidc_venc_1080p_vectors[] = {
2046 {
2047 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
2048 .dst = MSM_BUS_SLAVE_SMI,
2049 .ab = 372244480,
2050 .ib = 1861222400,
2051 },
2052 {
2053 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
2054 .dst = MSM_BUS_SLAVE_SMI,
2055 .ab = 501219328,
2056 .ib = 2004877312,
2057 },
2058 {
2059 .src = MSM_BUS_MASTER_AMPSS_M0,
2060 .dst = MSM_BUS_SLAVE_EBI_CH0,
2061 .ab = 2500000,
2062 .ib = 5000000,
2063 },
2064 {
2065 .src = MSM_BUS_MASTER_AMPSS_M0,
2066 .dst = MSM_BUS_SLAVE_SMI,
2067 .ab = 2500000,
2068 .ib = 5000000,
2069 },
2070};
2071static struct msm_bus_vectors vidc_vdec_1080p_vectors[] = {
2072 {
2073 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
2074 .dst = MSM_BUS_SLAVE_SMI,
2075 .ab = 222298112,
2076 .ib = 1778384896,
2077 },
2078 {
2079 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
2080 .dst = MSM_BUS_SLAVE_SMI,
2081 .ab = 330301440,
2082 .ib = 1321205760,
2083 },
2084 {
2085 .src = MSM_BUS_MASTER_AMPSS_M0,
2086 .dst = MSM_BUS_SLAVE_EBI_CH0,
2087 .ab = 2500000,
2088 .ib = 700000000,
2089 },
2090 {
2091 .src = MSM_BUS_MASTER_AMPSS_M0,
2092 .dst = MSM_BUS_SLAVE_SMI,
2093 .ab = 2500000,
2094 .ib = 10000000,
2095 },
2096};
2097
2098static struct msm_bus_paths vidc_bus_client_config[] = {
2099 {
2100 ARRAY_SIZE(vidc_init_vectors),
2101 vidc_init_vectors,
2102 },
2103 {
2104 ARRAY_SIZE(vidc_venc_vga_vectors),
2105 vidc_venc_vga_vectors,
2106 },
2107 {
2108 ARRAY_SIZE(vidc_vdec_vga_vectors),
2109 vidc_vdec_vga_vectors,
2110 },
2111 {
2112 ARRAY_SIZE(vidc_venc_720p_vectors),
2113 vidc_venc_720p_vectors,
2114 },
2115 {
2116 ARRAY_SIZE(vidc_vdec_720p_vectors),
2117 vidc_vdec_720p_vectors,
2118 },
2119 {
2120 ARRAY_SIZE(vidc_venc_1080p_vectors),
2121 vidc_venc_1080p_vectors,
2122 },
2123 {
2124 ARRAY_SIZE(vidc_vdec_1080p_vectors),
2125 vidc_vdec_1080p_vectors,
2126 },
2127};
2128
2129static struct msm_bus_scale_pdata vidc_bus_client_data = {
2130 vidc_bus_client_config,
2131 ARRAY_SIZE(vidc_bus_client_config),
2132 .name = "vidc",
2133};
2134
2135#endif
2136
2137#define MSM_VIDC_BASE_PHYS 0x04400000
2138#define MSM_VIDC_BASE_SIZE 0x00100000
2139
2140static struct resource msm_device_vidc_resources[] = {
2141 {
2142 .start = MSM_VIDC_BASE_PHYS,
2143 .end = MSM_VIDC_BASE_PHYS + MSM_VIDC_BASE_SIZE - 1,
2144 .flags = IORESOURCE_MEM,
2145 },
2146 {
2147 .start = VCODEC_IRQ,
2148 .end = VCODEC_IRQ,
2149 .flags = IORESOURCE_IRQ,
2150 },
2151};
2152
2153struct msm_vidc_platform_data vidc_platform_data = {
2154#ifdef CONFIG_MSM_BUS_SCALING
2155 .vidc_bus_client_pdata = &vidc_bus_client_data,
2156#endif
Deepak Koturcb4f6722011-10-31 14:06:57 -07002157#ifdef CONFIG_MSM_MULTIMEDIA_USE_ION
Deepak Kotur59955cb2011-12-08 10:23:01 -08002158 .memtype = ION_CP_MM_HEAP_ID,
Deepak Koturcb4f6722011-10-31 14:06:57 -07002159 .enable_ion = 1,
2160#else
Deepak Kotur12301a72011-11-09 18:30:29 -08002161 .memtype = MEMTYPE_SMI_KERNEL,
Deepak Koturcb4f6722011-10-31 14:06:57 -07002162 .enable_ion = 0,
2163#endif
Rajeshwar Kurapatyc155c352011-12-17 06:35:32 +05302164 .disable_dmx = 0,
2165 .disable_fullhd = 0
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002166};
2167
2168struct platform_device msm_device_vidc = {
2169 .name = "msm_vidc",
2170 .id = 0,
2171 .num_resources = ARRAY_SIZE(msm_device_vidc_resources),
2172 .resource = msm_device_vidc_resources,
2173 .dev = {
2174 .platform_data = &vidc_platform_data,
2175 },
2176};
2177
2178#if defined(CONFIG_MSM_RPM_STATS_LOG)
2179static struct msm_rpmstats_platform_data msm_rpm_stat_pdata = {
2180 .phys_addr_base = 0x00107E04,
2181 .phys_size = SZ_8K,
2182};
2183
2184struct platform_device msm_rpm_stat_device = {
2185 .name = "msm_rpm_stat",
2186 .id = -1,
2187 .dev = {
2188 .platform_data = &msm_rpm_stat_pdata,
2189 },
2190};
2191#endif
2192
2193#ifdef CONFIG_MSM_MPM
2194static uint16_t msm_mpm_irqs_m2a[MSM_MPM_NR_MPM_IRQS] = {
2195 [1] = MSM_GPIO_TO_INT(61),
2196 [4] = MSM_GPIO_TO_INT(87),
2197 [5] = MSM_GPIO_TO_INT(88),
2198 [6] = MSM_GPIO_TO_INT(89),
2199 [7] = MSM_GPIO_TO_INT(90),
2200 [8] = MSM_GPIO_TO_INT(91),
2201 [9] = MSM_GPIO_TO_INT(34),
2202 [10] = MSM_GPIO_TO_INT(38),
2203 [11] = MSM_GPIO_TO_INT(42),
2204 [12] = MSM_GPIO_TO_INT(46),
2205 [13] = MSM_GPIO_TO_INT(50),
2206 [14] = MSM_GPIO_TO_INT(54),
2207 [15] = MSM_GPIO_TO_INT(58),
2208 [16] = MSM_GPIO_TO_INT(63),
2209 [17] = MSM_GPIO_TO_INT(160),
2210 [18] = MSM_GPIO_TO_INT(162),
2211 [19] = MSM_GPIO_TO_INT(144),
2212 [20] = MSM_GPIO_TO_INT(146),
2213 [25] = USB1_HS_IRQ,
2214 [26] = TV_ENC_IRQ,
2215 [27] = HDMI_IRQ,
2216 [29] = MSM_GPIO_TO_INT(123),
2217 [30] = MSM_GPIO_TO_INT(172),
2218 [31] = MSM_GPIO_TO_INT(99),
2219 [32] = MSM_GPIO_TO_INT(96),
2220 [33] = MSM_GPIO_TO_INT(67),
2221 [34] = MSM_GPIO_TO_INT(71),
2222 [35] = MSM_GPIO_TO_INT(105),
2223 [36] = MSM_GPIO_TO_INT(117),
2224 [37] = MSM_GPIO_TO_INT(29),
2225 [38] = MSM_GPIO_TO_INT(30),
2226 [39] = MSM_GPIO_TO_INT(31),
2227 [40] = MSM_GPIO_TO_INT(37),
2228 [41] = MSM_GPIO_TO_INT(40),
2229 [42] = MSM_GPIO_TO_INT(41),
2230 [43] = MSM_GPIO_TO_INT(45),
2231 [44] = MSM_GPIO_TO_INT(51),
2232 [45] = MSM_GPIO_TO_INT(52),
2233 [46] = MSM_GPIO_TO_INT(57),
2234 [47] = MSM_GPIO_TO_INT(73),
2235 [48] = MSM_GPIO_TO_INT(93),
2236 [49] = MSM_GPIO_TO_INT(94),
2237 [50] = MSM_GPIO_TO_INT(103),
2238 [51] = MSM_GPIO_TO_INT(104),
2239 [52] = MSM_GPIO_TO_INT(106),
2240 [53] = MSM_GPIO_TO_INT(115),
2241 [54] = MSM_GPIO_TO_INT(124),
2242 [55] = MSM_GPIO_TO_INT(125),
2243 [56] = MSM_GPIO_TO_INT(126),
2244 [57] = MSM_GPIO_TO_INT(127),
2245 [58] = MSM_GPIO_TO_INT(128),
2246 [59] = MSM_GPIO_TO_INT(129),
2247};
2248
2249static uint16_t msm_mpm_bypassed_apps_irqs[] = {
2250 TLMM_MSM_SUMMARY_IRQ,
2251 RPM_SCSS_CPU0_GP_HIGH_IRQ,
2252 RPM_SCSS_CPU0_GP_MEDIUM_IRQ,
2253 RPM_SCSS_CPU0_GP_LOW_IRQ,
2254 RPM_SCSS_CPU0_WAKE_UP_IRQ,
2255 RPM_SCSS_CPU1_GP_HIGH_IRQ,
2256 RPM_SCSS_CPU1_GP_MEDIUM_IRQ,
2257 RPM_SCSS_CPU1_GP_LOW_IRQ,
2258 RPM_SCSS_CPU1_WAKE_UP_IRQ,
2259 MARM_SCSS_GP_IRQ_0,
2260 MARM_SCSS_GP_IRQ_1,
2261 MARM_SCSS_GP_IRQ_2,
2262 MARM_SCSS_GP_IRQ_3,
2263 MARM_SCSS_GP_IRQ_4,
2264 MARM_SCSS_GP_IRQ_5,
2265 MARM_SCSS_GP_IRQ_6,
2266 MARM_SCSS_GP_IRQ_7,
2267 MARM_SCSS_GP_IRQ_8,
2268 MARM_SCSS_GP_IRQ_9,
2269 LPASS_SCSS_GP_LOW_IRQ,
2270 LPASS_SCSS_GP_MEDIUM_IRQ,
2271 LPASS_SCSS_GP_HIGH_IRQ,
2272 SDC4_IRQ_0,
2273 SPS_MTI_31,
2274};
2275
2276struct msm_mpm_device_data msm_mpm_dev_data = {
2277 .irqs_m2a = msm_mpm_irqs_m2a,
2278 .irqs_m2a_size = ARRAY_SIZE(msm_mpm_irqs_m2a),
2279 .bypassed_apps_irqs = msm_mpm_bypassed_apps_irqs,
2280 .bypassed_apps_irqs_size = ARRAY_SIZE(msm_mpm_bypassed_apps_irqs),
2281 .mpm_request_reg_base = MSM_RPM_BASE + 0x9d8,
2282 .mpm_status_reg_base = MSM_RPM_BASE + 0xdf8,
2283 .mpm_apps_ipc_reg = MSM_GCC_BASE + 0x008,
2284 .mpm_apps_ipc_val = BIT(1),
2285 .mpm_ipc_irq = RPM_SCSS_CPU0_GP_MEDIUM_IRQ,
2286
2287};
2288#endif
2289
2290
2291#ifdef CONFIG_MSM_BUS_SCALING
2292struct platform_device msm_bus_sys_fabric = {
2293 .name = "msm_bus_fabric",
2294 .id = MSM_BUS_FAB_SYSTEM,
2295};
2296struct platform_device msm_bus_apps_fabric = {
2297 .name = "msm_bus_fabric",
2298 .id = MSM_BUS_FAB_APPSS,
2299};
2300struct platform_device msm_bus_mm_fabric = {
2301 .name = "msm_bus_fabric",
2302 .id = MSM_BUS_FAB_MMSS,
2303};
2304struct platform_device msm_bus_sys_fpb = {
2305 .name = "msm_bus_fabric",
2306 .id = MSM_BUS_FAB_SYSTEM_FPB,
2307};
2308struct platform_device msm_bus_cpss_fpb = {
2309 .name = "msm_bus_fabric",
2310 .id = MSM_BUS_FAB_CPSS_FPB,
2311};
2312#endif
2313
Lei Zhou01366a42011-08-19 13:12:00 -04002314#ifdef CONFIG_SND_SOC_MSM8660_APQ
2315struct platform_device msm_pcm = {
2316 .name = "msm-pcm-dsp",
2317 .id = -1,
2318};
2319
2320struct platform_device msm_pcm_routing = {
2321 .name = "msm-pcm-routing",
2322 .id = -1,
2323};
2324
2325struct platform_device msm_cpudai0 = {
2326 .name = "msm-dai-q6",
2327 .id = PRIMARY_I2S_RX,
2328};
2329
2330struct platform_device msm_cpudai1 = {
2331 .name = "msm-dai-q6",
2332 .id = PRIMARY_I2S_TX,
2333};
2334
2335struct platform_device msm_cpudai_hdmi_rx = {
2336 .name = "msm-dai-q6",
2337 .id = HDMI_RX,
2338};
2339
2340struct platform_device msm_cpudai_bt_rx = {
2341 .name = "msm-dai-q6",
2342 .id = INT_BT_SCO_RX,
2343};
2344
2345struct platform_device msm_cpudai_bt_tx = {
2346 .name = "msm-dai-q6",
2347 .id = INT_BT_SCO_TX,
2348};
2349
2350struct platform_device msm_cpudai_fm_rx = {
2351 .name = "msm-dai-q6",
2352 .id = INT_FM_RX,
2353};
2354
2355struct platform_device msm_cpudai_fm_tx = {
2356 .name = "msm-dai-q6",
2357 .id = INT_FM_TX,
2358};
2359
2360struct platform_device msm_cpu_fe = {
2361 .name = "msm-dai-fe",
2362 .id = -1,
2363};
2364
2365struct platform_device msm_stub_codec = {
2366 .name = "msm-stub-codec",
2367 .id = 1,
2368};
2369
2370struct platform_device msm_voice = {
2371 .name = "msm-pcm-voice",
2372 .id = -1,
2373};
2374
2375struct platform_device msm_voip = {
2376 .name = "msm-voip-dsp",
2377 .id = -1,
2378};
2379
2380struct platform_device msm_lpa_pcm = {
2381 .name = "msm-pcm-lpa",
2382 .id = -1,
2383};
2384
2385struct platform_device msm_pcm_hostless = {
2386 .name = "msm-pcm-hostless",
2387 .id = -1,
2388};
2389#endif
2390
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002391struct platform_device asoc_msm_pcm = {
2392 .name = "msm-dsp-audio",
2393 .id = 0,
2394};
2395
2396struct platform_device asoc_msm_dai0 = {
2397 .name = "msm-codec-dai",
2398 .id = 0,
2399};
2400
2401struct platform_device asoc_msm_dai1 = {
2402 .name = "msm-cpu-dai",
2403 .id = 0,
2404};
2405
2406#if defined (CONFIG_MSM_8x60_VOIP)
2407struct platform_device asoc_msm_mvs = {
2408 .name = "msm-mvs-audio",
2409 .id = 0,
2410};
2411
2412struct platform_device asoc_mvs_dai0 = {
2413 .name = "mvs-codec-dai",
2414 .id = 0,
2415};
2416
2417struct platform_device asoc_mvs_dai1 = {
2418 .name = "mvs-cpu-dai",
2419 .id = 0,
2420};
2421#endif
2422
2423struct platform_device *msm_footswitch_devices[] = {
2424 FS_8X60(FS_IJPEG, "fs_ijpeg"),
2425 FS_8X60(FS_MDP, "fs_mdp"),
2426 FS_8X60(FS_ROT, "fs_rot"),
2427 FS_8X60(FS_VED, "fs_ved"),
2428 FS_8X60(FS_VFE, "fs_vfe"),
2429 FS_8X60(FS_VPE, "fs_vpe"),
2430 FS_8X60(FS_GFX3D, "fs_gfx3d"),
2431 FS_8X60(FS_GFX2D0, "fs_gfx2d0"),
2432 FS_8X60(FS_GFX2D1, "fs_gfx2d1"),
2433};
2434unsigned msm_num_footswitch_devices = ARRAY_SIZE(msm_footswitch_devices);
2435
2436#ifdef CONFIG_MSM_RPM
2437struct msm_rpm_map_data rpm_map_data[] __initdata = {
2438 MSM_RPM_MAP(TRIGGER_TIMED_TO, TRIGGER_TIMED, 1),
2439 MSM_RPM_MAP(TRIGGER_TIMED_SCLK_COUNT, TRIGGER_TIMED, 1),
2440 MSM_RPM_MAP(TRIGGER_SET_FROM, TRIGGER_SET, 1),
2441 MSM_RPM_MAP(TRIGGER_SET_TO, TRIGGER_SET, 1),
2442 MSM_RPM_MAP(TRIGGER_SET_TRIGGER, TRIGGER_SET, 1),
2443 MSM_RPM_MAP(TRIGGER_CLEAR_FROM, TRIGGER_CLEAR, 1),
2444 MSM_RPM_MAP(TRIGGER_CLEAR_TO, TRIGGER_CLEAR, 1),
2445 MSM_RPM_MAP(TRIGGER_CLEAR_TRIGGER, TRIGGER_CLEAR, 1),
2446
2447 MSM_RPM_MAP(CXO_CLK, CXO_CLK, 1),
2448 MSM_RPM_MAP(PXO_CLK, PXO_CLK, 1),
2449 MSM_RPM_MAP(PLL_4, PLL_4, 1),
2450 MSM_RPM_MAP(APPS_FABRIC_CLK, APPS_FABRIC_CLK, 1),
2451 MSM_RPM_MAP(SYSTEM_FABRIC_CLK, SYSTEM_FABRIC_CLK, 1),
2452 MSM_RPM_MAP(MM_FABRIC_CLK, MM_FABRIC_CLK, 1),
2453 MSM_RPM_MAP(DAYTONA_FABRIC_CLK, DAYTONA_FABRIC_CLK, 1),
2454 MSM_RPM_MAP(SFPB_CLK, SFPB_CLK, 1),
2455 MSM_RPM_MAP(CFPB_CLK, CFPB_CLK, 1),
2456 MSM_RPM_MAP(MMFPB_CLK, MMFPB_CLK, 1),
2457 MSM_RPM_MAP(SMI_CLK, SMI_CLK, 1),
2458 MSM_RPM_MAP(EBI1_CLK, EBI1_CLK, 1),
2459
2460 MSM_RPM_MAP(APPS_L2_CACHE_CTL, APPS_L2_CACHE_CTL, 1),
2461
2462 MSM_RPM_MAP(APPS_FABRIC_HALT_0, APPS_FABRIC_HALT, 2),
2463 MSM_RPM_MAP(APPS_FABRIC_CLOCK_MODE_0, APPS_FABRIC_CLOCK_MODE, 3),
2464 MSM_RPM_MAP(APPS_FABRIC_ARB_0, APPS_FABRIC_ARB, 6),
2465
2466 MSM_RPM_MAP(SYSTEM_FABRIC_HALT_0, SYSTEM_FABRIC_HALT, 2),
2467 MSM_RPM_MAP(SYSTEM_FABRIC_CLOCK_MODE_0, SYSTEM_FABRIC_CLOCK_MODE, 3),
2468 MSM_RPM_MAP(SYSTEM_FABRIC_ARB_0, SYSTEM_FABRIC_ARB, 22),
2469
2470 MSM_RPM_MAP(MM_FABRIC_HALT_0, MM_FABRIC_HALT, 2),
2471 MSM_RPM_MAP(MM_FABRIC_CLOCK_MODE_0, MM_FABRIC_CLOCK_MODE, 3),
2472 MSM_RPM_MAP(MM_FABRIC_ARB_0, MM_FABRIC_ARB, 23),
2473
2474 MSM_RPM_MAP(SMPS0B_0, SMPS0B, 2),
2475 MSM_RPM_MAP(SMPS1B_0, SMPS1B, 2),
2476 MSM_RPM_MAP(SMPS2B_0, SMPS2B, 2),
2477 MSM_RPM_MAP(SMPS3B_0, SMPS3B, 2),
2478 MSM_RPM_MAP(SMPS4B_0, SMPS4B, 2),
2479 MSM_RPM_MAP(LDO0B_0, LDO0B, 2),
2480 MSM_RPM_MAP(LDO1B_0, LDO1B, 2),
2481 MSM_RPM_MAP(LDO2B_0, LDO2B, 2),
2482 MSM_RPM_MAP(LDO3B_0, LDO3B, 2),
2483 MSM_RPM_MAP(LDO4B_0, LDO4B, 2),
2484 MSM_RPM_MAP(LDO5B_0, LDO5B, 2),
2485 MSM_RPM_MAP(LDO6B_0, LDO6B, 2),
2486 MSM_RPM_MAP(LVS0B, LVS0B, 1),
2487 MSM_RPM_MAP(LVS1B, LVS1B, 1),
2488 MSM_RPM_MAP(LVS2B, LVS2B, 1),
2489 MSM_RPM_MAP(LVS3B, LVS3B, 1),
2490 MSM_RPM_MAP(MVS, MVS, 1),
2491
2492 MSM_RPM_MAP(SMPS0_0, SMPS0, 2),
2493 MSM_RPM_MAP(SMPS1_0, SMPS1, 2),
2494 MSM_RPM_MAP(SMPS2_0, SMPS2, 2),
2495 MSM_RPM_MAP(SMPS3_0, SMPS3, 2),
2496 MSM_RPM_MAP(SMPS4_0, SMPS4, 2),
2497 MSM_RPM_MAP(LDO0_0, LDO0, 2),
2498 MSM_RPM_MAP(LDO1_0, LDO1, 2),
2499 MSM_RPM_MAP(LDO2_0, LDO2, 2),
2500 MSM_RPM_MAP(LDO3_0, LDO3, 2),
2501 MSM_RPM_MAP(LDO4_0, LDO4, 2),
2502 MSM_RPM_MAP(LDO5_0, LDO5, 2),
2503 MSM_RPM_MAP(LDO6_0, LDO6, 2),
2504 MSM_RPM_MAP(LDO7_0, LDO7, 2),
2505 MSM_RPM_MAP(LDO8_0, LDO8, 2),
2506 MSM_RPM_MAP(LDO9_0, LDO9, 2),
2507 MSM_RPM_MAP(LDO10_0, LDO10, 2),
2508 MSM_RPM_MAP(LDO11_0, LDO11, 2),
2509 MSM_RPM_MAP(LDO12_0, LDO12, 2),
2510 MSM_RPM_MAP(LDO13_0, LDO13, 2),
2511 MSM_RPM_MAP(LDO14_0, LDO14, 2),
2512 MSM_RPM_MAP(LDO15_0, LDO15, 2),
2513 MSM_RPM_MAP(LDO16_0, LDO16, 2),
2514 MSM_RPM_MAP(LDO17_0, LDO17, 2),
2515 MSM_RPM_MAP(LDO18_0, LDO18, 2),
2516 MSM_RPM_MAP(LDO19_0, LDO19, 2),
2517 MSM_RPM_MAP(LDO20_0, LDO20, 2),
2518 MSM_RPM_MAP(LDO21_0, LDO21, 2),
2519 MSM_RPM_MAP(LDO22_0, LDO22, 2),
2520 MSM_RPM_MAP(LDO23_0, LDO23, 2),
2521 MSM_RPM_MAP(LDO24_0, LDO24, 2),
2522 MSM_RPM_MAP(LDO25_0, LDO25, 2),
2523 MSM_RPM_MAP(LVS0, LVS0, 1),
2524 MSM_RPM_MAP(LVS1, LVS1, 1),
2525 MSM_RPM_MAP(NCP_0, NCP, 2),
2526
2527 MSM_RPM_MAP(CXO_BUFFERS, CXO_BUFFERS, 1),
2528};
2529unsigned int rpm_map_data_size = ARRAY_SIZE(rpm_map_data);
2530
Maheshkumar Sivasubramanian9c8cdc92011-09-12 14:11:30 -06002531struct platform_device msm_rpm_device = {
2532 .name = "msm_rpm",
2533 .id = -1,
2534};
2535
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002536#endif