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