blob: f9e786353190ff4720f63b3ef598f61325167a71 [file] [log] [blame]
Praveen Chidambaramf27a5152013-02-01 11:44:53 -07001/* Copyright (c) 2010-2013, The Linux Foundation. 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>
Mitchel Humpherys3c075492012-09-06 11:36:33 -070018#include <linux/msm_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>
Jordan Crouse914de9b2012-07-09 13:49:46 -060023#include <mach/kgsl.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070024#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>
Praveen Chidambaram78499012011-11-01 17:15:17 -060055#include "rpm_log.h"
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070056#include "rpm_stats.h"
Subhash Jadavani909e04f2012-04-12 10:52:50 +053057#include <mach/mpm.h>
Jeff Ohlstein7e668552011-10-06 16:17:25 -070058#include "msm_watchdog.h"
Laura Abbottd92be422012-06-04 15:11:09 -070059#include <mach/iommu_domains.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070060
61/* Address of GSBI blocks */
62#define MSM_GSBI1_PHYS 0x16000000
63#define MSM_GSBI2_PHYS 0x16100000
64#define MSM_GSBI3_PHYS 0x16200000
65#define MSM_GSBI4_PHYS 0x16300000
66#define MSM_GSBI5_PHYS 0x16400000
67#define MSM_GSBI6_PHYS 0x16500000
68#define MSM_GSBI7_PHYS 0x16600000
69#define MSM_GSBI8_PHYS 0x19800000
70#define MSM_GSBI9_PHYS 0x19900000
71#define MSM_GSBI10_PHYS 0x19A00000
72#define MSM_GSBI11_PHYS 0x19B00000
73#define MSM_GSBI12_PHYS 0x19C00000
74
75/* GSBI QUPe devices */
76#define MSM_GSBI1_QUP_PHYS 0x16080000
77#define MSM_GSBI2_QUP_PHYS 0x16180000
78#define MSM_GSBI3_QUP_PHYS 0x16280000
79#define MSM_GSBI4_QUP_PHYS 0x16380000
80#define MSM_GSBI5_QUP_PHYS 0x16480000
81#define MSM_GSBI6_QUP_PHYS 0x16580000
82#define MSM_GSBI7_QUP_PHYS 0x16680000
83#define MSM_GSBI8_QUP_PHYS 0x19880000
84#define MSM_GSBI9_QUP_PHYS 0x19980000
85#define MSM_GSBI10_QUP_PHYS 0x19A80000
86#define MSM_GSBI11_QUP_PHYS 0x19B80000
87#define MSM_GSBI12_QUP_PHYS 0x19C80000
88
89/* GSBI UART devices */
90#define MSM_UART1DM_PHYS (MSM_GSBI6_PHYS + 0x40000)
91#define INT_UART1DM_IRQ GSBI6_UARTDM_IRQ
92#define INT_UART2DM_IRQ GSBI12_UARTDM_IRQ
93#define MSM_UART2DM_PHYS 0x19C40000
94#define MSM_UART3DM_PHYS (MSM_GSBI3_PHYS + 0x40000)
95#define INT_UART3DM_IRQ GSBI3_UARTDM_IRQ
96#define TCSR_BASE_PHYS 0x16b00000
97
98/* PRNG device */
99#define MSM_PRNG_PHYS 0x16C00000
100#define MSM_UART9DM_PHYS (MSM_GSBI9_PHYS + 0x40000)
101#define INT_UART9DM_IRQ GSBI9_UARTDM_IRQ
102
Rohit Vaswanid2001522012-12-05 19:23:44 -0800103static struct resource msm_gpio_resources[] = {
104 {
105 .start = TLMM_MSM_SUMMARY_IRQ,
106 .end = TLMM_MSM_SUMMARY_IRQ,
107 .flags = IORESOURCE_IRQ,
108 },
109};
110
Rohit Vaswani341c2032012-11-08 18:49:29 -0800111static struct msm_gpio_pdata msm8660_gpio_pdata = {
112 .ngpio = 173,
Rohit Vaswanied0a4ef2012-12-11 15:14:42 -0800113 .direct_connect_irqs = 10,
Rohit Vaswani341c2032012-11-08 18:49:29 -0800114};
115
Rohit Vaswanib1cc4932012-07-23 21:30:11 -0700116struct platform_device msm_gpio_device = {
Rohit Vaswani341c2032012-11-08 18:49:29 -0800117 .name = "msmgpio",
118 .id = -1,
119 .num_resources = ARRAY_SIZE(msm_gpio_resources),
120 .resource = msm_gpio_resources,
121 .dev.platform_data = &msm8660_gpio_pdata,
Rohit Vaswanib1cc4932012-07-23 21:30:11 -0700122};
123
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700124static void charm_ap2mdm_kpdpwr_on(void)
125{
126 gpio_direction_output(AP2MDM_PMIC_RESET_N, 0);
Laura Abbotteda23372011-08-17 09:25:56 -0700127 gpio_direction_output(AP2MDM_KPDPWR_N, 1);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700128}
129
130static void charm_ap2mdm_kpdpwr_off(void)
131{
132 int i;
133
134 gpio_direction_output(AP2MDM_ERRFATAL, 1);
135
136 for (i = 20; i > 0; i--) {
137 if (gpio_get_value(MDM2AP_STATUS) == 0)
138 break;
139 msleep(100);
140 }
141 gpio_direction_output(AP2MDM_ERRFATAL, 0);
142
143 if (i == 0) {
144 pr_err("%s: MDM2AP_STATUS never went low. Doing a hard reset \
145 of the charm modem.\n", __func__);
146 gpio_direction_output(AP2MDM_PMIC_RESET_N, 1);
147 /*
148 * Currently, there is a debounce timer on the charm PMIC. It is
149 * necessary to hold the AP2MDM_PMIC_RESET low for ~3.5 seconds
150 * for the reset to fully take place. Sleep here to ensure the
151 * reset has occured before the function exits.
152 */
153 msleep(4000);
154 gpio_direction_output(AP2MDM_PMIC_RESET_N, 0);
155 }
156}
157
158static struct resource charm_resources[] = {
159 /* MDM2AP_ERRFATAL */
160 {
161 .start = MSM_GPIO_TO_INT(MDM2AP_ERRFATAL),
162 .end = MSM_GPIO_TO_INT(MDM2AP_ERRFATAL),
163 .flags = IORESOURCE_IRQ,
164 },
165 /* MDM2AP_STATUS */
166 {
167 .start = MSM_GPIO_TO_INT(MDM2AP_STATUS),
168 .end = MSM_GPIO_TO_INT(MDM2AP_STATUS),
169 .flags = IORESOURCE_IRQ,
170 }
171};
172
173static struct charm_platform_data mdm_platform_data = {
174 .charm_modem_on = charm_ap2mdm_kpdpwr_on,
175 .charm_modem_off = charm_ap2mdm_kpdpwr_off,
176};
177
178struct platform_device msm_charm_modem = {
179 .name = "charm_modem",
180 .id = -1,
181 .num_resources = ARRAY_SIZE(charm_resources),
182 .resource = charm_resources,
183 .dev = {
184 .platform_data = &mdm_platform_data,
185 },
186};
187
Matt Wagantallbf430eb2012-03-22 11:45:49 -0700188struct platform_device msm8x60_device_acpuclk = {
189 .name = "acpuclk-8x60",
190 .id = -1,
191};
192
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700193#ifdef CONFIG_MSM_DSPS
194#define GSBI12_DEV (&msm_dsps_device.dev)
195#else
196#define GSBI12_DEV (&msm_gsbi12_qup_i2c_device.dev)
197#endif
198
199void __init msm8x60_init_irq(void)
200{
Praveen Chidambaram78499012011-11-01 17:15:17 -0600201 struct msm_mpm_device_data *data = NULL;
202
203#ifdef CONFIG_MSM_MPM
204 data = &msm8660_mpm_dev_data;
205#endif
206
207 msm_mpm_irq_extn_init(data);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700208 gic_init(0, GIC_PPI_START, MSM_QGIC_DIST_BASE, (void *)MSM_QGIC_CPU_BASE);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700209}
210
Stephen Boyd2e19d932012-05-09 17:36:04 -0700211#define MSM_LPASS_QDSP6SS_PHYS 0x28800000
212#define MSM_LPASS_QDSP6SS_WDOG_PHYS 0x28882000
213#define MSM_LPASS_QDSP6SS_IM_PHYS 0x288A0000
Stephen Boyd3acc9e42011-09-28 16:46:40 -0700214
215static struct resource msm_8660_q6_resources[] = {
216 {
217 .start = MSM_LPASS_QDSP6SS_PHYS,
218 .end = MSM_LPASS_QDSP6SS_PHYS + SZ_256 - 1,
219 .flags = IORESOURCE_MEM,
220 },
Stephen Boyd2e19d932012-05-09 17:36:04 -0700221 {
222 .start = MSM_LPASS_QDSP6SS_IM_PHYS,
223 .end = MSM_LPASS_QDSP6SS_IM_PHYS + SZ_4K - 1,
224 .flags = IORESOURCE_MEM,
225 },
226 {
227 .start = MSM_LPASS_QDSP6SS_WDOG_PHYS,
228 .end = MSM_LPASS_QDSP6SS_WDOG_PHYS + SZ_4K - 1,
229 .flags = IORESOURCE_MEM,
230 },
231 {
Stephen Boyde24edf52012-07-12 17:46:19 -0700232 .start = 0x00900000,
233 .end = 0x00900000 + SZ_16K - 1,
234 .flags = IORESOURCE_MEM,
235 },
236 {
Stephen Boyd2e19d932012-05-09 17:36:04 -0700237 .start = LPASS_Q6SS_WDOG_EXPIRED,
238 .end = LPASS_Q6SS_WDOG_EXPIRED,
239 .flags = IORESOURCE_IRQ,
240 },
Stephen Boyd3acc9e42011-09-28 16:46:40 -0700241};
242
243struct platform_device msm_pil_q6v3 = {
244 .name = "pil_qdsp6v3",
245 .id = -1,
246 .num_resources = ARRAY_SIZE(msm_8660_q6_resources),
247 .resource = msm_8660_q6_resources,
248};
249
Stephen Boyd4eb885b2011-09-29 01:16:03 -0700250#define MSM_MSS_REGS_PHYS 0x10200000
Stephen Boyd3ac20732012-05-03 18:46:08 -0700251#define MSM_MSS_WDOG_PHYS 0x10020000
Stephen Boyd4eb885b2011-09-29 01:16:03 -0700252
253static struct resource msm_8660_modem_resources[] = {
254 {
255 .start = MSM_MSS_REGS_PHYS,
256 .end = MSM_MSS_REGS_PHYS + SZ_256 - 1,
257 .flags = IORESOURCE_MEM,
258 },
Stephen Boyd3ac20732012-05-03 18:46:08 -0700259 {
260 .start = MSM_MSS_WDOG_PHYS,
261 .end = MSM_MSS_WDOG_PHYS + SZ_4K - 1,
262 .flags = IORESOURCE_MEM,
263 },
264 {
Stephen Boyde24edf52012-07-12 17:46:19 -0700265 .start = 0x00900000,
266 .end = 0x00900000 + SZ_16K - 1,
267 .flags = IORESOURCE_MEM,
268 },
269 {
Stephen Boyd3ac20732012-05-03 18:46:08 -0700270 .start = MARM_WDOG_EXPIRED,
271 .end = MARM_WDOG_EXPIRED,
272 .flags = IORESOURCE_IRQ,
273 },
Stephen Boyd4eb885b2011-09-29 01:16:03 -0700274};
275
276struct platform_device msm_pil_modem = {
277 .name = "pil_modem",
278 .id = -1,
279 .num_resources = ARRAY_SIZE(msm_8660_modem_resources),
280 .resource = msm_8660_modem_resources,
281};
282
Stephen Boydd89eebe2011-09-28 23:28:11 -0700283struct platform_device msm_pil_tzapps = {
284 .name = "pil_tzapps",
285 .id = -1,
286};
287
Stephen Boyde24edf52012-07-12 17:46:19 -0700288static struct resource msm_pil_dsps_resources[] = {
289 {
290 .start = 0x00900000,
291 .end = 0x00900000 + SZ_16K - 1,
292 .flags = IORESOURCE_MEM,
293 },
294};
295
Stephen Boyd25c4a0b2011-09-20 00:12:36 -0700296struct platform_device msm_pil_dsps = {
297 .name = "pil_dsps",
298 .id = -1,
Stephen Boyde24edf52012-07-12 17:46:19 -0700299 .resource = msm_pil_dsps_resources,
300 .num_resources = ARRAY_SIZE(msm_pil_dsps_resources),
Stephen Boyd25c4a0b2011-09-20 00:12:36 -0700301 .dev.platform_data = "dsps",
302};
303
Riaz Rahamandd18ebf2012-06-27 16:06:34 +0530304struct platform_device msm_pil_vidc = {
305 .name = "pil_vidc",
306 .id = -1,
307};
308
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700309static struct resource msm_uart1_dm_resources[] = {
310 {
311 .start = MSM_UART1DM_PHYS,
312 .end = MSM_UART1DM_PHYS + PAGE_SIZE - 1,
313 .flags = IORESOURCE_MEM,
314 },
315 {
316 .start = INT_UART1DM_IRQ,
317 .end = INT_UART1DM_IRQ,
318 .flags = IORESOURCE_IRQ,
319 },
320 {
321 /* GSBI6 is UARTDM1 */
322 .start = MSM_GSBI6_PHYS,
323 .end = MSM_GSBI6_PHYS + 4 - 1,
324 .name = "gsbi_resource",
325 .flags = IORESOURCE_MEM,
326 },
327 {
328 .start = DMOV_HSUART1_TX_CHAN,
329 .end = DMOV_HSUART1_RX_CHAN,
330 .name = "uartdm_channels",
331 .flags = IORESOURCE_DMA,
332 },
333 {
334 .start = DMOV_HSUART1_TX_CRCI,
335 .end = DMOV_HSUART1_RX_CRCI,
336 .name = "uartdm_crci",
337 .flags = IORESOURCE_DMA,
338 },
339};
340
341static u64 msm_uart_dm1_dma_mask = DMA_BIT_MASK(32);
342
343struct platform_device msm_device_uart_dm1 = {
344 .name = "msm_serial_hs",
345 .id = 0,
346 .num_resources = ARRAY_SIZE(msm_uart1_dm_resources),
347 .resource = msm_uart1_dm_resources,
348 .dev = {
349 .dma_mask = &msm_uart_dm1_dma_mask,
350 .coherent_dma_mask = DMA_BIT_MASK(32),
351 },
352};
353
354static struct resource msm_uart3_dm_resources[] = {
355 {
356 .start = MSM_UART3DM_PHYS,
357 .end = MSM_UART3DM_PHYS + PAGE_SIZE - 1,
358 .name = "uartdm_resource",
359 .flags = IORESOURCE_MEM,
360 },
361 {
362 .start = INT_UART3DM_IRQ,
363 .end = INT_UART3DM_IRQ,
364 .flags = IORESOURCE_IRQ,
365 },
366 {
367 .start = MSM_GSBI3_PHYS,
368 .end = MSM_GSBI3_PHYS + PAGE_SIZE - 1,
369 .name = "gsbi_resource",
370 .flags = IORESOURCE_MEM,
371 },
372};
373
374struct platform_device msm_device_uart_dm3 = {
375 .name = "msm_serial_hsl",
376 .id = 2,
377 .num_resources = ARRAY_SIZE(msm_uart3_dm_resources),
378 .resource = msm_uart3_dm_resources,
379};
380
381static struct resource msm_uart12_dm_resources[] = {
382 {
383 .start = MSM_UART2DM_PHYS,
384 .end = MSM_UART2DM_PHYS + PAGE_SIZE - 1,
385 .name = "uartdm_resource",
386 .flags = IORESOURCE_MEM,
387 },
388 {
389 .start = INT_UART2DM_IRQ,
390 .end = INT_UART2DM_IRQ,
391 .flags = IORESOURCE_IRQ,
392 },
393 {
394 /* GSBI 12 is UARTDM2 */
395 .start = MSM_GSBI12_PHYS,
396 .end = MSM_GSBI12_PHYS + PAGE_SIZE - 1,
397 .name = "gsbi_resource",
398 .flags = IORESOURCE_MEM,
399 },
400};
401
402struct platform_device msm_device_uart_dm12 = {
403 .name = "msm_serial_hsl",
404 .id = 0,
405 .num_resources = ARRAY_SIZE(msm_uart12_dm_resources),
406 .resource = msm_uart12_dm_resources,
407};
408
409#ifdef CONFIG_MSM_GSBI9_UART
410static struct msm_serial_hslite_platform_data uart_gsbi9_pdata = {
411 .config_gpio = 1,
412 .uart_tx_gpio = 67,
413 .uart_rx_gpio = 66,
Stepan Moskovchenko798fe552012-03-29 19:47:19 -0700414 .line = 1,
Mayank Rana965e9e72013-02-22 12:14:14 +0530415 .set_uart_clk_zero = true,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700416};
417
418static struct resource msm_uart_gsbi9_resources[] = {
419 {
420 .start = MSM_UART9DM_PHYS,
421 .end = MSM_UART9DM_PHYS + PAGE_SIZE - 1,
422 .name = "uartdm_resource",
423 .flags = IORESOURCE_MEM,
424 },
425 {
426 .start = INT_UART9DM_IRQ,
427 .end = INT_UART9DM_IRQ,
428 .flags = IORESOURCE_IRQ,
429 },
430 {
431 /* GSBI 9 is UART_GSBI9 */
432 .start = MSM_GSBI9_PHYS,
433 .end = MSM_GSBI9_PHYS + PAGE_SIZE - 1,
434 .name = "gsbi_resource",
435 .flags = IORESOURCE_MEM,
436 },
437};
438struct platform_device *msm_device_uart_gsbi9;
439struct platform_device *msm_add_gsbi9_uart(void)
440{
441 return platform_device_register_resndata(NULL, "msm_serial_hsl",
442 1, msm_uart_gsbi9_resources,
443 ARRAY_SIZE(msm_uart_gsbi9_resources),
444 &uart_gsbi9_pdata,
445 sizeof(uart_gsbi9_pdata));
446}
447#endif
448
449static struct resource gsbi3_qup_i2c_resources[] = {
450 {
451 .name = "qup_phys_addr",
452 .start = MSM_GSBI3_QUP_PHYS,
453 .end = MSM_GSBI3_QUP_PHYS + SZ_4K - 1,
454 .flags = IORESOURCE_MEM,
455 },
456 {
457 .name = "gsbi_qup_i2c_addr",
458 .start = MSM_GSBI3_PHYS,
459 .end = MSM_GSBI3_PHYS + 4 - 1,
460 .flags = IORESOURCE_MEM,
461 },
462 {
463 .name = "qup_err_intr",
464 .start = GSBI3_QUP_IRQ,
465 .end = GSBI3_QUP_IRQ,
466 .flags = IORESOURCE_IRQ,
467 },
468 {
469 .name = "i2c_clk",
470 .start = 44,
471 .end = 44,
472 .flags = IORESOURCE_IO,
473 },
474 {
475 .name = "i2c_sda",
476 .start = 43,
477 .end = 43,
478 .flags = IORESOURCE_IO,
479 },
480};
481
482static struct resource gsbi4_qup_i2c_resources[] = {
483 {
484 .name = "qup_phys_addr",
485 .start = MSM_GSBI4_QUP_PHYS,
486 .end = MSM_GSBI4_QUP_PHYS + SZ_4K - 1,
487 .flags = IORESOURCE_MEM,
488 },
489 {
490 .name = "gsbi_qup_i2c_addr",
491 .start = MSM_GSBI4_PHYS,
492 .end = MSM_GSBI4_PHYS + 4 - 1,
493 .flags = IORESOURCE_MEM,
494 },
495 {
496 .name = "qup_err_intr",
497 .start = GSBI4_QUP_IRQ,
498 .end = GSBI4_QUP_IRQ,
499 .flags = IORESOURCE_IRQ,
500 },
501};
502
503static struct resource gsbi7_qup_i2c_resources[] = {
504 {
505 .name = "qup_phys_addr",
506 .start = MSM_GSBI7_QUP_PHYS,
507 .end = MSM_GSBI7_QUP_PHYS + SZ_4K - 1,
508 .flags = IORESOURCE_MEM,
509 },
510 {
511 .name = "gsbi_qup_i2c_addr",
512 .start = MSM_GSBI7_PHYS,
513 .end = MSM_GSBI7_PHYS + 4 - 1,
514 .flags = IORESOURCE_MEM,
515 },
516 {
517 .name = "qup_err_intr",
518 .start = GSBI7_QUP_IRQ,
519 .end = GSBI7_QUP_IRQ,
520 .flags = IORESOURCE_IRQ,
521 },
522 {
523 .name = "i2c_clk",
524 .start = 60,
525 .end = 60,
526 .flags = IORESOURCE_IO,
527 },
528 {
529 .name = "i2c_sda",
530 .start = 59,
531 .end = 59,
532 .flags = IORESOURCE_IO,
533 },
534};
535
536static struct resource gsbi8_qup_i2c_resources[] = {
537 {
538 .name = "qup_phys_addr",
539 .start = MSM_GSBI8_QUP_PHYS,
540 .end = MSM_GSBI8_QUP_PHYS + SZ_4K - 1,
541 .flags = IORESOURCE_MEM,
542 },
543 {
544 .name = "gsbi_qup_i2c_addr",
545 .start = MSM_GSBI8_PHYS,
546 .end = MSM_GSBI8_PHYS + 4 - 1,
547 .flags = IORESOURCE_MEM,
548 },
549 {
550 .name = "qup_err_intr",
551 .start = GSBI8_QUP_IRQ,
552 .end = GSBI8_QUP_IRQ,
553 .flags = IORESOURCE_IRQ,
554 },
555};
556
557static struct resource gsbi9_qup_i2c_resources[] = {
558 {
559 .name = "qup_phys_addr",
560 .start = MSM_GSBI9_QUP_PHYS,
561 .end = MSM_GSBI9_QUP_PHYS + SZ_4K - 1,
562 .flags = IORESOURCE_MEM,
563 },
564 {
565 .name = "gsbi_qup_i2c_addr",
566 .start = MSM_GSBI9_PHYS,
567 .end = MSM_GSBI9_PHYS + 4 - 1,
568 .flags = IORESOURCE_MEM,
569 },
570 {
571 .name = "qup_err_intr",
572 .start = GSBI9_QUP_IRQ,
573 .end = GSBI9_QUP_IRQ,
574 .flags = IORESOURCE_IRQ,
575 },
576};
577
578static struct resource gsbi12_qup_i2c_resources[] = {
579 {
580 .name = "qup_phys_addr",
581 .start = MSM_GSBI12_QUP_PHYS,
582 .end = MSM_GSBI12_QUP_PHYS + SZ_4K - 1,
583 .flags = IORESOURCE_MEM,
584 },
585 {
586 .name = "gsbi_qup_i2c_addr",
587 .start = MSM_GSBI12_PHYS,
588 .end = MSM_GSBI12_PHYS + 4 - 1,
589 .flags = IORESOURCE_MEM,
590 },
591 {
592 .name = "qup_err_intr",
593 .start = GSBI12_QUP_IRQ,
594 .end = GSBI12_QUP_IRQ,
595 .flags = IORESOURCE_IRQ,
596 },
597};
598
599#ifdef CONFIG_MSM_BUS_SCALING
600static struct msm_bus_vectors grp3d_init_vectors[] = {
601 {
602 .src = MSM_BUS_MASTER_GRAPHICS_3D,
603 .dst = MSM_BUS_SLAVE_EBI_CH0,
604 .ab = 0,
605 .ib = 0,
606 },
607};
608
Lucille Sylvester293217d2011-08-19 17:50:52 -0600609static struct msm_bus_vectors grp3d_low_vectors[] = {
610 {
611 .src = MSM_BUS_MASTER_GRAPHICS_3D,
612 .dst = MSM_BUS_SLAVE_EBI_CH0,
613 .ab = 0,
Suman Tatiraju0123d182011-09-30 14:59:06 -0700614 .ib = KGSL_CONVERT_TO_MBPS(990),
Lucille Sylvester293217d2011-08-19 17:50:52 -0600615 },
616};
617
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700618static struct msm_bus_vectors grp3d_nominal_low_vectors[] = {
619 {
620 .src = MSM_BUS_MASTER_GRAPHICS_3D,
621 .dst = MSM_BUS_SLAVE_EBI_CH0,
622 .ab = 0,
Suman Tatiraju0123d182011-09-30 14:59:06 -0700623 .ib = KGSL_CONVERT_TO_MBPS(1300),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700624 },
625};
626
627static struct msm_bus_vectors grp3d_nominal_high_vectors[] = {
628 {
629 .src = MSM_BUS_MASTER_GRAPHICS_3D,
630 .dst = MSM_BUS_SLAVE_EBI_CH0,
631 .ab = 0,
Suman Tatiraju0123d182011-09-30 14:59:06 -0700632 .ib = KGSL_CONVERT_TO_MBPS(2008),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700633 },
634};
635
636static struct msm_bus_vectors grp3d_max_vectors[] = {
637 {
638 .src = MSM_BUS_MASTER_GRAPHICS_3D,
639 .dst = MSM_BUS_SLAVE_EBI_CH0,
640 .ab = 0,
Suman Tatiraju0123d182011-09-30 14:59:06 -0700641 .ib = KGSL_CONVERT_TO_MBPS(2484),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700642 },
643};
644
645static struct msm_bus_paths grp3d_bus_scale_usecases[] = {
646 {
647 ARRAY_SIZE(grp3d_init_vectors),
648 grp3d_init_vectors,
649 },
650 {
Lucille Sylvester293217d2011-08-19 17:50:52 -0600651 ARRAY_SIZE(grp3d_low_vectors),
Suman Tatirajuc87f58c2011-10-14 10:58:37 -0700652 grp3d_low_vectors,
Lucille Sylvester293217d2011-08-19 17:50:52 -0600653 },
654 {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700655 ARRAY_SIZE(grp3d_nominal_low_vectors),
656 grp3d_nominal_low_vectors,
657 },
658 {
659 ARRAY_SIZE(grp3d_nominal_high_vectors),
660 grp3d_nominal_high_vectors,
661 },
662 {
663 ARRAY_SIZE(grp3d_max_vectors),
664 grp3d_max_vectors,
665 },
666};
667
668static struct msm_bus_scale_pdata grp3d_bus_scale_pdata = {
669 grp3d_bus_scale_usecases,
670 ARRAY_SIZE(grp3d_bus_scale_usecases),
671 .name = "grp3d",
672};
673
674static struct msm_bus_vectors grp2d0_init_vectors[] = {
675 {
676 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE0,
677 .dst = MSM_BUS_SLAVE_EBI_CH0,
678 .ab = 0,
679 .ib = 0,
680 },
681};
682
683static struct msm_bus_vectors grp2d0_max_vectors[] = {
684 {
685 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE0,
686 .dst = MSM_BUS_SLAVE_EBI_CH0,
687 .ab = 0,
Suman Tatiraju0123d182011-09-30 14:59:06 -0700688 .ib = KGSL_CONVERT_TO_MBPS(990),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700689 },
690};
691
692static struct msm_bus_paths grp2d0_bus_scale_usecases[] = {
693 {
694 ARRAY_SIZE(grp2d0_init_vectors),
695 grp2d0_init_vectors,
696 },
697 {
698 ARRAY_SIZE(grp2d0_max_vectors),
699 grp2d0_max_vectors,
700 },
701};
702
703static struct msm_bus_scale_pdata grp2d0_bus_scale_pdata = {
704 grp2d0_bus_scale_usecases,
705 ARRAY_SIZE(grp2d0_bus_scale_usecases),
706 .name = "grp2d0",
707};
708
709static struct msm_bus_vectors grp2d1_init_vectors[] = {
710 {
711 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE1,
712 .dst = MSM_BUS_SLAVE_EBI_CH0,
713 .ab = 0,
714 .ib = 0,
715 },
716};
717
718static struct msm_bus_vectors grp2d1_max_vectors[] = {
719 {
720 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE1,
721 .dst = MSM_BUS_SLAVE_EBI_CH0,
722 .ab = 0,
Suman Tatiraju0123d182011-09-30 14:59:06 -0700723 .ib = KGSL_CONVERT_TO_MBPS(990),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700724 },
725};
726
727static struct msm_bus_paths grp2d1_bus_scale_usecases[] = {
728 {
729 ARRAY_SIZE(grp2d1_init_vectors),
730 grp2d1_init_vectors,
731 },
732 {
733 ARRAY_SIZE(grp2d1_max_vectors),
734 grp2d1_max_vectors,
735 },
736};
737
738static struct msm_bus_scale_pdata grp2d1_bus_scale_pdata = {
739 grp2d1_bus_scale_usecases,
740 ARRAY_SIZE(grp2d1_bus_scale_usecases),
741 .name = "grp2d1",
742};
743#endif
744
745#ifdef CONFIG_HW_RANDOM_MSM
746static struct resource rng_resources = {
747 .flags = IORESOURCE_MEM,
748 .start = MSM_PRNG_PHYS,
749 .end = MSM_PRNG_PHYS + SZ_512 - 1,
750};
751
752struct platform_device msm_device_rng = {
753 .name = "msm_rng",
754 .id = 0,
755 .num_resources = 1,
756 .resource = &rng_resources,
757};
758#endif
759
760static struct resource kgsl_3d0_resources[] = {
761 {
762 .name = KGSL_3D0_REG_MEMORY,
763 .start = 0x04300000, /* GFX3D address */
764 .end = 0x0431ffff,
765 .flags = IORESOURCE_MEM,
766 },
767 {
768 .name = KGSL_3D0_IRQ,
769 .start = GFX3D_IRQ,
770 .end = GFX3D_IRQ,
771 .flags = IORESOURCE_IRQ,
772 },
773};
774
775static struct kgsl_device_platform_data kgsl_3d0_pdata = {
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600776 .pwrlevel = {
777 {
778 .gpu_freq = 266667000,
779 .bus_freq = 4,
780 .io_fraction = 0,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700781 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600782 {
783 .gpu_freq = 228571000,
784 .bus_freq = 3,
785 .io_fraction = 33,
786 },
787 {
788 .gpu_freq = 200000000,
789 .bus_freq = 2,
790 .io_fraction = 100,
791 },
792 {
793 .gpu_freq = 177778000,
794 .bus_freq = 1,
795 .io_fraction = 100,
796 },
797 {
798 .gpu_freq = 27000000,
799 .bus_freq = 0,
800 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700801 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600802 .init_level = 0,
803 .num_levels = 5,
804 .set_grp_async = NULL,
805 .idle_timeout = HZ/5,
806 .nap_allowed = true,
807 .clk_map = KGSL_CLK_CORE | KGSL_CLK_IFACE | KGSL_CLK_MEM_IFACE,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700808#ifdef CONFIG_MSM_BUS_SCALING
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600809 .bus_scale_table = &grp3d_bus_scale_pdata,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700810#endif
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700811};
812
813struct platform_device msm_kgsl_3d0 = {
814 .name = "kgsl-3d0",
815 .id = 0,
816 .num_resources = ARRAY_SIZE(kgsl_3d0_resources),
817 .resource = kgsl_3d0_resources,
818 .dev = {
819 .platform_data = &kgsl_3d0_pdata,
820 },
821};
822
823static struct resource kgsl_2d0_resources[] = {
824 {
825 .name = KGSL_2D0_REG_MEMORY,
826 .start = 0x04100000, /* Z180 base address */
827 .end = 0x04100FFF,
828 .flags = IORESOURCE_MEM,
829 },
830 {
831 .name = KGSL_2D0_IRQ,
832 .start = GFX2D0_IRQ,
833 .end = GFX2D0_IRQ,
834 .flags = IORESOURCE_IRQ,
835 },
836};
837
838static struct kgsl_device_platform_data kgsl_2d0_pdata = {
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600839 .pwrlevel = {
840 {
841 .gpu_freq = 200000000,
842 .bus_freq = 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700843 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600844 {
845 .gpu_freq = 200000000,
846 .bus_freq = 0,
847 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700848 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600849 .init_level = 0,
850 .num_levels = 2,
851 .set_grp_async = NULL,
852 .idle_timeout = HZ/10,
853 .nap_allowed = true,
854 .clk_map = KGSL_CLK_CORE | KGSL_CLK_IFACE,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700855#ifdef CONFIG_MSM_BUS_SCALING
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600856 .bus_scale_table = &grp2d0_bus_scale_pdata,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700857#endif
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700858};
859
860struct platform_device msm_kgsl_2d0 = {
861 .name = "kgsl-2d0",
862 .id = 0,
863 .num_resources = ARRAY_SIZE(kgsl_2d0_resources),
864 .resource = kgsl_2d0_resources,
865 .dev = {
866 .platform_data = &kgsl_2d0_pdata,
867 },
868};
869
870static struct resource kgsl_2d1_resources[] = {
871 {
872 .name = KGSL_2D1_REG_MEMORY,
873 .start = 0x04200000, /* Z180 device 1 base address */
874 .end = 0x04200FFF,
875 .flags = IORESOURCE_MEM,
876 },
877 {
878 .name = KGSL_2D1_IRQ,
879 .start = GFX2D1_IRQ,
880 .end = GFX2D1_IRQ,
881 .flags = IORESOURCE_IRQ,
882 },
883};
884
885static struct kgsl_device_platform_data kgsl_2d1_pdata = {
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600886 .pwrlevel = {
887 {
888 .gpu_freq = 200000000,
889 .bus_freq = 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700890 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600891 {
892 .gpu_freq = 200000000,
893 .bus_freq = 0,
894 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700895 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600896 .init_level = 0,
897 .num_levels = 2,
898 .set_grp_async = NULL,
899 .idle_timeout = HZ/10,
900 .nap_allowed = true,
901 .clk_map = KGSL_CLK_CORE | KGSL_CLK_IFACE,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700902#ifdef CONFIG_MSM_BUS_SCALING
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600903 .bus_scale_table = &grp2d1_bus_scale_pdata,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700904#endif
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700905};
906
907struct platform_device msm_kgsl_2d1 = {
908 .name = "kgsl-2d1",
909 .id = 1,
910 .num_resources = ARRAY_SIZE(kgsl_2d1_resources),
911 .resource = kgsl_2d1_resources,
912 .dev = {
913 .platform_data = &kgsl_2d1_pdata,
914 },
915};
916
917/*
918 * this a software workaround for not having two distinct board
919 * files for 8660v1 and 8660v2. 8660v1 has a faulty 2d clock, and
920 * this workaround detects the cpu version to tell if the kernel is on a
921 * 8660v1, and should disable the 2d core. it is called from the board file
922 */
923void __init msm8x60_check_2d_hardware(void)
924{
925 if ((SOCINFO_VERSION_MAJOR(socinfo_get_version()) == 1) &&
926 (SOCINFO_VERSION_MINOR(socinfo_get_version()) == 0)) {
927 printk(KERN_WARNING "kgsl: 2D cores disabled on 8660v1\n");
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -0600928 kgsl_2d0_pdata.clk_map = 0;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700929 }
930}
931
932/* Use GSBI3 QUP for /dev/i2c-0 */
933struct platform_device msm_gsbi3_qup_i2c_device = {
934 .name = "qup_i2c",
935 .id = MSM_GSBI3_QUP_I2C_BUS_ID,
936 .num_resources = ARRAY_SIZE(gsbi3_qup_i2c_resources),
937 .resource = gsbi3_qup_i2c_resources,
938};
939
940/* Use GSBI4 QUP for /dev/i2c-1 */
941struct platform_device msm_gsbi4_qup_i2c_device = {
942 .name = "qup_i2c",
943 .id = MSM_GSBI4_QUP_I2C_BUS_ID,
944 .num_resources = ARRAY_SIZE(gsbi4_qup_i2c_resources),
945 .resource = gsbi4_qup_i2c_resources,
946};
947
948/* Use GSBI8 QUP for /dev/i2c-3 */
949struct platform_device msm_gsbi8_qup_i2c_device = {
950 .name = "qup_i2c",
951 .id = MSM_GSBI8_QUP_I2C_BUS_ID,
952 .num_resources = ARRAY_SIZE(gsbi8_qup_i2c_resources),
953 .resource = gsbi8_qup_i2c_resources,
954};
955
956/* Use GSBI9 QUP for /dev/i2c-2 */
957struct platform_device msm_gsbi9_qup_i2c_device = {
958 .name = "qup_i2c",
959 .id = MSM_GSBI9_QUP_I2C_BUS_ID,
960 .num_resources = ARRAY_SIZE(gsbi9_qup_i2c_resources),
961 .resource = gsbi9_qup_i2c_resources,
962};
963
964/* Use GSBI7 QUP for /dev/i2c-4 (Marimba) */
965struct platform_device msm_gsbi7_qup_i2c_device = {
966 .name = "qup_i2c",
967 .id = MSM_GSBI7_QUP_I2C_BUS_ID,
968 .num_resources = ARRAY_SIZE(gsbi7_qup_i2c_resources),
969 .resource = gsbi7_qup_i2c_resources,
970};
971
972/* Use GSBI12 QUP for /dev/i2c-5 (Sensors) */
973struct platform_device msm_gsbi12_qup_i2c_device = {
974 .name = "qup_i2c",
975 .id = MSM_GSBI12_QUP_I2C_BUS_ID,
976 .num_resources = ARRAY_SIZE(gsbi12_qup_i2c_resources),
977 .resource = gsbi12_qup_i2c_resources,
978};
979
Anirudh Ghayal9d9cdc22011-10-10 17:17:07 +0530980#ifdef CONFIG_MSM_SSBI
981#define MSM_SSBI_PMIC1_PHYS 0x00500000
982static struct resource resources_ssbi_pmic1_resource[] = {
983 {
984 .start = MSM_SSBI_PMIC1_PHYS,
985 .end = MSM_SSBI_PMIC1_PHYS + SZ_4K - 1,
986 .flags = IORESOURCE_MEM,
987 },
988};
989
990struct platform_device msm_device_ssbi_pmic1 = {
991 .name = "msm_ssbi",
992 .id = 0,
993 .resource = resources_ssbi_pmic1_resource,
994 .num_resources = ARRAY_SIZE(resources_ssbi_pmic1_resource),
995};
Anirudh Ghayalc49157f2011-11-09 14:49:59 +0530996
997#define MSM_SSBI2_PMIC2B_PHYS 0x00C00000
998static struct resource resources_ssbi_pmic2_resource[] = {
999 {
1000 .start = MSM_SSBI2_PMIC2B_PHYS,
1001 .end = MSM_SSBI2_PMIC2B_PHYS + SZ_4K - 1,
1002 .flags = IORESOURCE_MEM,
1003 },
1004};
1005
1006struct platform_device msm_device_ssbi_pmic2 = {
1007 .name = "msm_ssbi",
1008 .id = 1,
1009 .resource = resources_ssbi_pmic2_resource,
1010 .num_resources = ARRAY_SIZE(resources_ssbi_pmic2_resource),
1011};
Anirudh Ghayal9d9cdc22011-10-10 17:17:07 +05301012#endif
1013
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001014#ifdef CONFIG_I2C_SSBI
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001015/* CODEC SSBI on /dev/i2c-8 */
1016#define MSM_SSBI3_PHYS 0x18700000
1017static struct resource msm_ssbi3_resources[] = {
1018 {
1019 .name = "ssbi_base",
1020 .start = MSM_SSBI3_PHYS,
1021 .end = MSM_SSBI3_PHYS + SZ_4K - 1,
1022 .flags = IORESOURCE_MEM,
1023 },
1024};
1025
1026struct platform_device msm_device_ssbi3 = {
1027 .name = "i2c_ssbi",
1028 .id = MSM_SSBI3_I2C_BUS_ID,
1029 .num_resources = ARRAY_SIZE(msm_ssbi3_resources),
1030 .resource = msm_ssbi3_resources,
1031};
1032#endif /* CONFIG_I2C_SSBI */
1033
1034static struct resource gsbi1_qup_spi_resources[] = {
1035 {
1036 .name = "spi_base",
1037 .start = MSM_GSBI1_QUP_PHYS,
1038 .end = MSM_GSBI1_QUP_PHYS + SZ_4K - 1,
1039 .flags = IORESOURCE_MEM,
1040 },
1041 {
1042 .name = "gsbi_base",
1043 .start = MSM_GSBI1_PHYS,
1044 .end = MSM_GSBI1_PHYS + 4 - 1,
1045 .flags = IORESOURCE_MEM,
1046 },
1047 {
1048 .name = "spi_irq_in",
1049 .start = GSBI1_QUP_IRQ,
1050 .end = GSBI1_QUP_IRQ,
1051 .flags = IORESOURCE_IRQ,
1052 },
1053 {
1054 .name = "spidm_channels",
1055 .start = 5,
1056 .end = 6,
1057 .flags = IORESOURCE_DMA,
1058 },
1059 {
1060 .name = "spidm_crci",
1061 .start = 8,
1062 .end = 7,
1063 .flags = IORESOURCE_DMA,
1064 },
1065 {
1066 .name = "spi_clk",
1067 .start = 36,
1068 .end = 36,
1069 .flags = IORESOURCE_IO,
1070 },
1071 {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001072 .name = "spi_miso",
1073 .start = 34,
1074 .end = 34,
1075 .flags = IORESOURCE_IO,
1076 },
1077 {
1078 .name = "spi_mosi",
1079 .start = 33,
1080 .end = 33,
1081 .flags = IORESOURCE_IO,
1082 },
Harini Jayaraman5d93be12011-11-29 18:32:20 -07001083 {
1084 .name = "spi_cs",
1085 .start = 35,
1086 .end = 35,
1087 .flags = IORESOURCE_IO,
1088 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001089};
1090
1091/* Use GSBI1 QUP for SPI-0 */
1092struct platform_device msm_gsbi1_qup_spi_device = {
1093 .name = "spi_qsd",
1094 .id = 0,
1095 .num_resources = ARRAY_SIZE(gsbi1_qup_spi_resources),
1096 .resource = gsbi1_qup_spi_resources,
1097};
1098
1099
1100static struct resource gsbi10_qup_spi_resources[] = {
1101 {
1102 .name = "spi_base",
1103 .start = MSM_GSBI10_QUP_PHYS,
1104 .end = MSM_GSBI10_QUP_PHYS + SZ_4K - 1,
1105 .flags = IORESOURCE_MEM,
1106 },
1107 {
1108 .name = "gsbi_base",
1109 .start = MSM_GSBI10_PHYS,
1110 .end = MSM_GSBI10_PHYS + 4 - 1,
1111 .flags = IORESOURCE_MEM,
1112 },
1113 {
1114 .name = "spi_irq_in",
1115 .start = GSBI10_QUP_IRQ,
1116 .end = GSBI10_QUP_IRQ,
1117 .flags = IORESOURCE_IRQ,
1118 },
1119 {
1120 .name = "spi_clk",
1121 .start = 73,
1122 .end = 73,
1123 .flags = IORESOURCE_IO,
1124 },
1125 {
1126 .name = "spi_cs",
1127 .start = 72,
1128 .end = 72,
1129 .flags = IORESOURCE_IO,
1130 },
1131 {
1132 .name = "spi_mosi",
1133 .start = 70,
1134 .end = 70,
1135 .flags = IORESOURCE_IO,
1136 },
1137};
1138
1139/* Use GSBI10 QUP for SPI-1 */
1140struct platform_device msm_gsbi10_qup_spi_device = {
1141 .name = "spi_qsd",
1142 .id = 1,
1143 .num_resources = ARRAY_SIZE(gsbi10_qup_spi_resources),
1144 .resource = gsbi10_qup_spi_resources,
1145};
1146#define MSM_SDC1_BASE 0x12400000
1147#define MSM_SDC1_DML_BASE (MSM_SDC1_BASE + 0x800)
1148#define MSM_SDC1_BAM_BASE (MSM_SDC1_BASE + 0x2000)
1149#define MSM_SDC2_BASE 0x12140000
1150#define MSM_SDC2_DML_BASE (MSM_SDC2_BASE + 0x800)
1151#define MSM_SDC2_BAM_BASE (MSM_SDC2_BASE + 0x2000)
1152#define MSM_SDC3_BASE 0x12180000
1153#define MSM_SDC3_DML_BASE (MSM_SDC3_BASE + 0x800)
1154#define MSM_SDC3_BAM_BASE (MSM_SDC3_BASE + 0x2000)
1155#define MSM_SDC4_BASE 0x121C0000
1156#define MSM_SDC4_DML_BASE (MSM_SDC4_BASE + 0x800)
1157#define MSM_SDC4_BAM_BASE (MSM_SDC4_BASE + 0x2000)
1158#define MSM_SDC5_BASE 0x12200000
1159#define MSM_SDC5_DML_BASE (MSM_SDC5_BASE + 0x800)
1160#define MSM_SDC5_BAM_BASE (MSM_SDC5_BASE + 0x2000)
1161
1162static struct resource resources_sdc1[] = {
1163 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301164 .name = "core_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001165 .start = MSM_SDC1_BASE,
1166 .end = MSM_SDC1_DML_BASE - 1,
1167 .flags = IORESOURCE_MEM,
1168 },
1169 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301170 .name = "core_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001171 .start = SDC1_IRQ_0,
1172 .end = SDC1_IRQ_0,
1173 .flags = IORESOURCE_IRQ,
1174 },
1175#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1176 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301177 .name = "dml_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001178 .start = MSM_SDC1_DML_BASE,
1179 .end = MSM_SDC1_BAM_BASE - 1,
1180 .flags = IORESOURCE_MEM,
1181 },
1182 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301183 .name = "bam_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001184 .start = MSM_SDC1_BAM_BASE,
1185 .end = MSM_SDC1_BAM_BASE + (2 * SZ_4K) - 1,
1186 .flags = IORESOURCE_MEM,
1187 },
1188 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301189 .name = "bam_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001190 .start = SDC1_BAM_IRQ,
1191 .end = SDC1_BAM_IRQ,
1192 .flags = IORESOURCE_IRQ,
1193 },
1194#else
1195 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301196 .name = "dma_chnl",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001197 .start = DMOV_SDC1_CHAN,
1198 .end = DMOV_SDC1_CHAN,
1199 .flags = IORESOURCE_DMA,
1200 },
Krishna Konda25786ec2011-07-25 16:21:36 -07001201 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301202 .name = "dma_crci",
Krishna Konda25786ec2011-07-25 16:21:36 -07001203 .start = DMOV_SDC1_CRCI,
1204 .end = DMOV_SDC1_CRCI,
1205 .flags = IORESOURCE_DMA,
1206 }
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001207#endif /* CONFIG_MMC_MSM_SPS_SUPPORT */
1208};
1209
1210static struct resource resources_sdc2[] = {
1211 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301212 .name = "core_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001213 .start = MSM_SDC2_BASE,
1214 .end = MSM_SDC2_DML_BASE - 1,
1215 .flags = IORESOURCE_MEM,
1216 },
1217 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301218 .name = "core_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001219 .start = SDC2_IRQ_0,
1220 .end = SDC2_IRQ_0,
1221 .flags = IORESOURCE_IRQ,
1222 },
1223#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1224 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301225 .name = "dml_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001226 .start = MSM_SDC2_DML_BASE,
1227 .end = MSM_SDC2_BAM_BASE - 1,
1228 .flags = IORESOURCE_MEM,
1229 },
1230 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301231 .name = "bam_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001232 .start = MSM_SDC2_BAM_BASE,
1233 .end = MSM_SDC2_BAM_BASE + (2 * SZ_4K) - 1,
1234 .flags = IORESOURCE_MEM,
1235 },
1236 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301237 .name = "bam_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001238 .start = SDC2_BAM_IRQ,
1239 .end = SDC2_BAM_IRQ,
1240 .flags = IORESOURCE_IRQ,
1241 },
1242#else
1243 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301244 .name = "dma_chnl",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001245 .start = DMOV_SDC2_CHAN,
1246 .end = DMOV_SDC2_CHAN,
1247 .flags = IORESOURCE_DMA,
1248 },
Krishna Konda25786ec2011-07-25 16:21:36 -07001249 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301250 .name = "dma_crci",
Krishna Konda25786ec2011-07-25 16:21:36 -07001251 .start = DMOV_SDC2_CRCI,
1252 .end = DMOV_SDC2_CRCI,
1253 .flags = IORESOURCE_DMA,
1254 }
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001255#endif /* CONFIG_MMC_MSM_SPS_SUPPORT */
1256};
1257
1258static struct resource resources_sdc3[] = {
1259 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301260 .name = "core_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001261 .start = MSM_SDC3_BASE,
1262 .end = MSM_SDC3_DML_BASE - 1,
1263 .flags = IORESOURCE_MEM,
1264 },
1265 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301266 .name = "core_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001267 .start = SDC3_IRQ_0,
1268 .end = SDC3_IRQ_0,
1269 .flags = IORESOURCE_IRQ,
1270 },
1271#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1272 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301273 .name = "dml_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001274 .start = MSM_SDC3_DML_BASE,
1275 .end = MSM_SDC3_BAM_BASE - 1,
1276 .flags = IORESOURCE_MEM,
1277 },
1278 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301279 .name = "bam_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001280 .start = MSM_SDC3_BAM_BASE,
1281 .end = MSM_SDC3_BAM_BASE + (2 * SZ_4K) - 1,
1282 .flags = IORESOURCE_MEM,
1283 },
1284 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301285 .name = "bam_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001286 .start = SDC3_BAM_IRQ,
1287 .end = SDC3_BAM_IRQ,
1288 .flags = IORESOURCE_IRQ,
1289 },
1290#else
1291 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301292 .name = "dma_chnl",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001293 .start = DMOV_SDC3_CHAN,
1294 .end = DMOV_SDC3_CHAN,
1295 .flags = IORESOURCE_DMA,
1296 },
Krishna Konda25786ec2011-07-25 16:21:36 -07001297 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301298 .name = "dma_crci",
Krishna Konda25786ec2011-07-25 16:21:36 -07001299 .start = DMOV_SDC3_CRCI,
1300 .end = DMOV_SDC3_CRCI,
1301 .flags = IORESOURCE_DMA,
1302 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001303#endif /* CONFIG_MMC_MSM_SPS_SUPPORT */
1304};
1305
1306static struct resource resources_sdc4[] = {
1307 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301308 .name = "core_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001309 .start = MSM_SDC4_BASE,
1310 .end = MSM_SDC4_DML_BASE - 1,
1311 .flags = IORESOURCE_MEM,
1312 },
1313 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301314 .name = "core_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001315 .start = SDC4_IRQ_0,
1316 .end = SDC4_IRQ_0,
1317 .flags = IORESOURCE_IRQ,
1318 },
1319#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1320 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301321 .name = "dml_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001322 .start = MSM_SDC4_DML_BASE,
1323 .end = MSM_SDC4_BAM_BASE - 1,
1324 .flags = IORESOURCE_MEM,
1325 },
1326 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301327 .name = "bam_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001328 .start = MSM_SDC4_BAM_BASE,
1329 .end = MSM_SDC4_BAM_BASE + (2 * SZ_4K) - 1,
1330 .flags = IORESOURCE_MEM,
1331 },
1332 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301333 .name = "bam_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001334 .start = SDC4_BAM_IRQ,
1335 .end = SDC4_BAM_IRQ,
1336 .flags = IORESOURCE_IRQ,
1337 },
1338#else
1339 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301340 .name = "dma_chnl",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001341 .start = DMOV_SDC4_CHAN,
1342 .end = DMOV_SDC4_CHAN,
1343 .flags = IORESOURCE_DMA,
1344 },
Krishna Konda25786ec2011-07-25 16:21:36 -07001345 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301346 .name = "dma_crci",
Krishna Konda25786ec2011-07-25 16:21:36 -07001347 .start = DMOV_SDC4_CRCI,
1348 .end = DMOV_SDC4_CRCI,
1349 .flags = IORESOURCE_DMA,
1350 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001351#endif /* CONFIG_MMC_MSM_SPS_SUPPORT */
1352};
1353
1354static struct resource resources_sdc5[] = {
1355 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301356 .name = "core_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001357 .start = MSM_SDC5_BASE,
1358 .end = MSM_SDC5_DML_BASE - 1,
1359 .flags = IORESOURCE_MEM,
1360 },
1361 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301362 .name = "core_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001363 .start = SDC5_IRQ_0,
1364 .end = SDC5_IRQ_0,
1365 .flags = IORESOURCE_IRQ,
1366 },
1367#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1368 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301369 .name = "dml_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001370 .start = MSM_SDC5_DML_BASE,
1371 .end = MSM_SDC5_BAM_BASE - 1,
1372 .flags = IORESOURCE_MEM,
1373 },
1374 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301375 .name = "bam_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001376 .start = MSM_SDC5_BAM_BASE,
1377 .end = MSM_SDC5_BAM_BASE + (2 * SZ_4K) - 1,
1378 .flags = IORESOURCE_MEM,
1379 },
1380 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301381 .name = "bam_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001382 .start = SDC5_BAM_IRQ,
1383 .end = SDC5_BAM_IRQ,
1384 .flags = IORESOURCE_IRQ,
1385 },
1386#else
1387 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301388 .name = "dma_chnl",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001389 .start = DMOV_SDC5_CHAN,
1390 .end = DMOV_SDC5_CHAN,
1391 .flags = IORESOURCE_DMA,
1392 },
Krishna Konda25786ec2011-07-25 16:21:36 -07001393 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301394 .name = "dma_crci",
Krishna Konda25786ec2011-07-25 16:21:36 -07001395 .start = DMOV_SDC5_CRCI,
1396 .end = DMOV_SDC5_CRCI,
1397 .flags = IORESOURCE_DMA,
1398 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001399#endif /* CONFIG_MMC_MSM_SPS_SUPPORT */
1400};
1401
1402struct platform_device msm_device_sdc1 = {
1403 .name = "msm_sdcc",
1404 .id = 1,
1405 .num_resources = ARRAY_SIZE(resources_sdc1),
1406 .resource = resources_sdc1,
1407 .dev = {
1408 .coherent_dma_mask = 0xffffffff,
1409 },
1410};
1411
1412struct platform_device msm_device_sdc2 = {
1413 .name = "msm_sdcc",
1414 .id = 2,
1415 .num_resources = ARRAY_SIZE(resources_sdc2),
1416 .resource = resources_sdc2,
1417 .dev = {
1418 .coherent_dma_mask = 0xffffffff,
1419 },
1420};
1421
1422struct platform_device msm_device_sdc3 = {
1423 .name = "msm_sdcc",
1424 .id = 3,
1425 .num_resources = ARRAY_SIZE(resources_sdc3),
1426 .resource = resources_sdc3,
1427 .dev = {
1428 .coherent_dma_mask = 0xffffffff,
1429 },
1430};
1431
1432struct platform_device msm_device_sdc4 = {
1433 .name = "msm_sdcc",
1434 .id = 4,
1435 .num_resources = ARRAY_SIZE(resources_sdc4),
1436 .resource = resources_sdc4,
1437 .dev = {
1438 .coherent_dma_mask = 0xffffffff,
1439 },
1440};
1441
1442struct platform_device msm_device_sdc5 = {
1443 .name = "msm_sdcc",
1444 .id = 5,
1445 .num_resources = ARRAY_SIZE(resources_sdc5),
1446 .resource = resources_sdc5,
1447 .dev = {
1448 .coherent_dma_mask = 0xffffffff,
1449 },
1450};
1451
1452static struct platform_device *msm_sdcc_devices[] __initdata = {
1453 &msm_device_sdc1,
1454 &msm_device_sdc2,
1455 &msm_device_sdc3,
1456 &msm_device_sdc4,
1457 &msm_device_sdc5,
1458};
1459
1460int __init msm_add_sdcc(unsigned int controller, struct mmc_platform_data *plat)
1461{
1462 struct platform_device *pdev;
1463
1464 if (controller < 1 || controller > 5)
1465 return -EINVAL;
1466
1467 pdev = msm_sdcc_devices[controller-1];
1468 pdev->dev.platform_data = plat;
1469 return platform_device_register(pdev);
1470}
1471
Kevin Chan3be11612012-03-22 20:05:40 -07001472#ifdef CONFIG_MSM_CAMERA_V4L2
1473static struct resource msm_csic0_resources[] = {
1474 {
1475 .name = "csic",
1476 .start = 0x04800000,
1477 .end = 0x04800000 + 0x00000400 - 1,
1478 .flags = IORESOURCE_MEM,
1479 },
1480 {
1481 .name = "csic",
1482 .start = CSI_0_IRQ,
1483 .end = CSI_0_IRQ,
1484 .flags = IORESOURCE_IRQ,
1485 },
1486};
1487
1488static struct resource msm_csic1_resources[] = {
1489 {
1490 .name = "csic",
1491 .start = 0x04900000,
1492 .end = 0x04900000 + 0x00000400 - 1,
1493 .flags = IORESOURCE_MEM,
1494 },
1495 {
1496 .name = "csic",
1497 .start = CSI_1_IRQ,
1498 .end = CSI_1_IRQ,
1499 .flags = IORESOURCE_IRQ,
1500 },
1501};
1502
1503struct resource msm_vfe_resources[] = {
1504 {
1505 .name = "msm_vfe",
1506 .start = 0x04500000,
1507 .end = 0x04500000 + SZ_1M - 1,
1508 .flags = IORESOURCE_MEM,
1509 },
1510 {
1511 .name = "msm_vfe",
1512 .start = VFE_IRQ,
1513 .end = VFE_IRQ,
1514 .flags = IORESOURCE_IRQ,
1515 },
1516};
1517
1518static struct resource msm_vpe_resources[] = {
1519 {
1520 .name = "vpe",
1521 .start = 0x05300000,
1522 .end = 0x05300000 + SZ_1M - 1,
1523 .flags = IORESOURCE_MEM,
1524 },
1525 {
1526 .name = "vpe",
1527 .start = INT_VPE,
1528 .end = INT_VPE,
1529 .flags = IORESOURCE_IRQ,
1530 },
1531};
1532
1533struct platform_device msm_device_csic0 = {
1534 .name = "msm_csic",
1535 .id = 0,
1536 .resource = msm_csic0_resources,
1537 .num_resources = ARRAY_SIZE(msm_csic0_resources),
1538};
1539
1540struct platform_device msm_device_csic1 = {
1541 .name = "msm_csic",
1542 .id = 1,
1543 .resource = msm_csic1_resources,
1544 .num_resources = ARRAY_SIZE(msm_csic1_resources),
1545};
1546
1547struct platform_device msm_device_vfe = {
1548 .name = "msm_vfe",
1549 .id = 0,
1550 .resource = msm_vfe_resources,
1551 .num_resources = ARRAY_SIZE(msm_vfe_resources),
1552};
1553
1554struct platform_device msm_device_vpe = {
1555 .name = "msm_vpe",
1556 .id = 0,
1557 .resource = msm_vpe_resources,
1558 .num_resources = ARRAY_SIZE(msm_vpe_resources),
1559};
1560
1561#endif
1562
1563
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001564#define MIPI_DSI_HW_BASE 0x04700000
1565#define ROTATOR_HW_BASE 0x04E00000
1566#define TVENC_HW_BASE 0x04F00000
1567#define MDP_HW_BASE 0x05100000
1568
1569static struct resource msm_mipi_dsi_resources[] = {
1570 {
1571 .name = "mipi_dsi",
1572 .start = MIPI_DSI_HW_BASE,
kuogee hsiehf12acf52011-09-06 10:49:43 -07001573 .end = MIPI_DSI_HW_BASE + 0x000F0000 - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001574 .flags = IORESOURCE_MEM,
1575 },
1576 {
1577 .start = DSI_IRQ,
1578 .end = DSI_IRQ,
1579 .flags = IORESOURCE_IRQ,
1580 },
1581};
1582
1583static struct platform_device msm_mipi_dsi_device = {
1584 .name = "mipi_dsi",
1585 .id = 1,
1586 .num_resources = ARRAY_SIZE(msm_mipi_dsi_resources),
1587 .resource = msm_mipi_dsi_resources,
1588};
1589
1590static struct resource msm_mdp_resources[] = {
1591 {
1592 .name = "mdp",
1593 .start = MDP_HW_BASE,
kuogee hsiehf12acf52011-09-06 10:49:43 -07001594 .end = MDP_HW_BASE + 0x000F0000 - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001595 .flags = IORESOURCE_MEM,
1596 },
1597 {
1598 .start = INT_MDP,
1599 .end = INT_MDP,
1600 .flags = IORESOURCE_IRQ,
1601 },
1602};
1603
1604static struct platform_device msm_mdp_device = {
1605 .name = "mdp",
1606 .id = 0,
1607 .num_resources = ARRAY_SIZE(msm_mdp_resources),
1608 .resource = msm_mdp_resources,
1609};
1610#ifdef CONFIG_MSM_ROTATOR
1611static struct resource resources_msm_rotator[] = {
1612 {
1613 .start = 0x04E00000,
1614 .end = 0x04F00000 - 1,
1615 .flags = IORESOURCE_MEM,
1616 },
1617 {
1618 .start = ROT_IRQ,
1619 .end = ROT_IRQ,
1620 .flags = IORESOURCE_IRQ,
1621 },
1622};
1623
1624static struct msm_rot_clocks rotator_clocks[] = {
1625 {
Matt Wagantallbb90da92011-10-25 15:07:52 -07001626 .clk_name = "core_clk",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001627 .clk_type = ROTATOR_CORE_CLK,
1628 .clk_rate = 160 * 1000 * 1000,
1629 },
1630 {
Matt Wagantallbb90da92011-10-25 15:07:52 -07001631 .clk_name = "iface_clk",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001632 .clk_type = ROTATOR_PCLK,
1633 .clk_rate = 0,
1634 },
1635};
1636
1637static struct msm_rotator_platform_data rotator_pdata = {
1638 .number_of_clocks = ARRAY_SIZE(rotator_clocks),
1639 .hardware_version_number = 0x01010307,
1640 .rotator_clks = rotator_clocks,
Nagamalleswararao Ganji5fabbd62011-11-06 23:10:43 -08001641#ifdef CONFIG_MSM_BUS_SCALING
1642 .bus_scale_table = &rotator_bus_scale_pdata,
1643#endif
Olav Hauganef95ae32012-05-15 09:50:30 -07001644 .rot_iommu_split_domain = 0,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001645};
1646
1647struct platform_device msm_rotator_device = {
1648 .name = "msm_rotator",
1649 .id = 0,
1650 .num_resources = ARRAY_SIZE(resources_msm_rotator),
1651 .resource = resources_msm_rotator,
1652 .dev = {
1653 .platform_data = &rotator_pdata,
1654 },
1655};
1656#endif
1657
1658
1659/* Sensors DSPS platform data */
1660#ifdef CONFIG_MSM_DSPS
1661
1662#define PPSS_REG_PHYS_BASE 0x12080000
karthik karuppasamy9dac5492012-06-19 15:03:10 -07001663#define PPSS_PAUSE_REG 0x1804
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001664
1665#define MHZ (1000*1000)
1666
Wentao Xu7a1c9302011-09-19 17:57:43 -04001667#define TCSR_GSBI_IRQ_MUX_SEL 0x0044
1668
1669#define GSBI_IRQ_MUX_SEL_MASK 0xF
1670#define GSBI_IRQ_MUX_SEL_DSPS 0xB
1671
1672static void dsps_init1(struct msm_dsps_platform_data *data)
1673{
1674 int val;
1675
1676 /* route GSBI12 interrutps to DSPS */
1677 val = secure_readl(MSM_TCSR_BASE + TCSR_GSBI_IRQ_MUX_SEL);
1678 val &= ~GSBI_IRQ_MUX_SEL_MASK;
1679 val |= GSBI_IRQ_MUX_SEL_DSPS;
1680 secure_writel(val, MSM_TCSR_BASE + TCSR_GSBI_IRQ_MUX_SEL);
1681}
1682
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001683static struct dsps_clk_info dsps_clks[] = {
1684 {
Matt Wagantall5bb16ca2012-04-19 11:34:01 -07001685 .name = "iface_clk",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001686 .rate = 0, /* no rate just on/off */
1687 },
1688 {
Matt Wagantalld86d6832011-08-17 14:06:55 -07001689 .name = "mem_clk",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001690 .rate = 0, /* no rate just on/off */
1691 },
1692 {
1693 .name = "gsbi_qup_clk",
1694 .rate = 24 * MHZ, /* See clk_tbl_gsbi_qup[] */
1695 },
1696 {
1697 .name = "dfab_dsps_clk",
1698 .rate = 64 * MHZ, /* Same rate as USB. */
1699 }
1700};
1701
1702static struct dsps_regulator_info dsps_regs[] = {
1703 {
1704 .name = "8058_l5",
1705 .volt = 2850000, /* in uV */
1706 },
1707 {
1708 .name = "8058_s3",
1709 .volt = 1800000, /* in uV */
1710 }
1711};
1712
1713/*
1714 * Note: GPIOs field is intialized in run-time at the function
1715 * msm8x60_init_dsps().
1716 */
1717
1718struct msm_dsps_platform_data msm_dsps_pdata = {
1719 .clks = dsps_clks,
1720 .clks_num = ARRAY_SIZE(dsps_clks),
1721 .gpios = NULL,
1722 .gpios_num = 0,
1723 .regs = dsps_regs,
1724 .regs_num = ARRAY_SIZE(dsps_regs),
Wentao Xu7a1c9302011-09-19 17:57:43 -04001725 .init = dsps_init1,
karthik karuppasamy9dac5492012-06-19 15:03:10 -07001726 .ppss_pause_reg = PPSS_PAUSE_REG,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001727 .signature = DSPS_SIGNATURE,
1728};
1729
1730static struct resource msm_dsps_resources[] = {
1731 {
1732 .start = PPSS_REG_PHYS_BASE,
1733 .end = PPSS_REG_PHYS_BASE + SZ_8K - 1,
1734 .name = "ppss_reg",
1735 .flags = IORESOURCE_MEM,
1736 },
1737};
1738
1739struct platform_device msm_dsps_device = {
1740 .name = "msm_dsps",
1741 .id = 0,
1742 .num_resources = ARRAY_SIZE(msm_dsps_resources),
1743 .resource = msm_dsps_resources,
1744 .dev.platform_data = &msm_dsps_pdata,
1745};
1746
1747#endif /* CONFIG_MSM_DSPS */
1748
1749#ifdef CONFIG_FB_MSM_TVOUT
1750static struct resource msm_tvenc_resources[] = {
1751 {
1752 .name = "tvenc",
1753 .start = TVENC_HW_BASE,
1754 .end = TVENC_HW_BASE + PAGE_SIZE - 1,
1755 .flags = IORESOURCE_MEM,
1756 }
1757};
1758
1759static struct resource tvout_device_resources[] = {
1760 {
1761 .name = "tvout_device_irq",
1762 .start = TV_ENC_IRQ,
1763 .end = TV_ENC_IRQ,
1764 .flags = IORESOURCE_IRQ,
1765 },
1766};
1767#endif
1768static void __init msm_register_device(struct platform_device *pdev, void *data)
1769{
1770 int ret;
1771
1772 pdev->dev.platform_data = data;
1773
1774 ret = platform_device_register(pdev);
1775 if (ret)
1776 dev_err(&pdev->dev,
1777 "%s: platform_device_register() failed = %d\n",
1778 __func__, ret);
1779}
1780
Padmanabhan Komandurue77bcf52012-07-26 12:43:39 +05301781struct platform_device msm_lcdc_device = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001782 .name = "lcdc",
1783 .id = 0,
1784};
1785
1786#ifdef CONFIG_FB_MSM_TVOUT
1787static struct platform_device msm_tvenc_device = {
1788 .name = "tvenc",
1789 .id = 0,
1790 .num_resources = ARRAY_SIZE(msm_tvenc_resources),
1791 .resource = msm_tvenc_resources,
1792};
1793
1794static struct platform_device msm_tvout_device = {
1795 .name = "tvout_device",
1796 .id = 0,
1797 .num_resources = ARRAY_SIZE(tvout_device_resources),
1798 .resource = tvout_device_resources,
1799};
1800#endif
1801
1802#ifdef CONFIG_MSM_BUS_SCALING
1803static struct platform_device msm_dtv_device = {
1804 .name = "dtv",
1805 .id = 0,
1806};
1807#endif
1808
1809void __init msm_fb_register_device(char *name, void *data)
1810{
1811 if (!strncmp(name, "mdp", 3))
1812 msm_register_device(&msm_mdp_device, data);
1813 else if (!strncmp(name, "lcdc", 4))
1814 msm_register_device(&msm_lcdc_device, data);
1815 else if (!strncmp(name, "mipi_dsi", 8))
1816 msm_register_device(&msm_mipi_dsi_device, data);
1817#ifdef CONFIG_FB_MSM_TVOUT
1818 else if (!strncmp(name, "tvenc", 5))
1819 msm_register_device(&msm_tvenc_device, data);
1820 else if (!strncmp(name, "tvout_device", 12))
1821 msm_register_device(&msm_tvout_device, data);
1822#endif
1823#ifdef CONFIG_MSM_BUS_SCALING
1824 else if (!strncmp(name, "dtv", 3))
1825 msm_register_device(&msm_dtv_device, data);
1826#endif
1827 else
1828 printk(KERN_ERR "%s: unknown device! %s\n", __func__, name);
1829}
1830
1831static struct resource resources_otg[] = {
1832 {
1833 .start = 0x12500000,
1834 .end = 0x12500000 + SZ_1K - 1,
1835 .flags = IORESOURCE_MEM,
1836 },
1837 {
1838 .start = USB1_HS_IRQ,
1839 .end = USB1_HS_IRQ,
1840 .flags = IORESOURCE_IRQ,
1841 },
1842};
1843
1844struct platform_device msm_device_otg = {
1845 .name = "msm_otg",
1846 .id = -1,
1847 .num_resources = ARRAY_SIZE(resources_otg),
1848 .resource = resources_otg,
1849};
1850
1851static u64 dma_mask = 0xffffffffULL;
1852struct platform_device msm_device_gadget_peripheral = {
1853 .name = "msm_hsusb",
1854 .id = -1,
1855 .dev = {
1856 .dma_mask = &dma_mask,
1857 .coherent_dma_mask = 0xffffffffULL,
1858 },
1859};
1860#ifdef CONFIG_USB_EHCI_MSM_72K
1861static struct resource resources_hsusb_host[] = {
1862 {
1863 .start = 0x12500000,
1864 .end = 0x12500000 + SZ_1K - 1,
1865 .flags = IORESOURCE_MEM,
1866 },
1867 {
1868 .start = USB1_HS_IRQ,
1869 .end = USB1_HS_IRQ,
1870 .flags = IORESOURCE_IRQ,
1871 },
1872};
1873
1874struct platform_device msm_device_hsusb_host = {
1875 .name = "msm_hsusb_host",
1876 .id = 0,
1877 .num_resources = ARRAY_SIZE(resources_hsusb_host),
1878 .resource = resources_hsusb_host,
1879 .dev = {
1880 .dma_mask = &dma_mask,
1881 .coherent_dma_mask = 0xffffffffULL,
1882 },
1883};
1884
1885static struct platform_device *msm_host_devices[] = {
1886 &msm_device_hsusb_host,
1887};
1888
1889int msm_add_host(unsigned int host, struct msm_usb_host_platform_data *plat)
1890{
1891 struct platform_device *pdev;
1892
1893 pdev = msm_host_devices[host];
1894 if (!pdev)
1895 return -ENODEV;
1896 pdev->dev.platform_data = plat;
1897 return platform_device_register(pdev);
1898}
1899#endif
1900
1901#define MSM_TSIF0_PHYS (0x18200000)
1902#define MSM_TSIF1_PHYS (0x18201000)
1903#define MSM_TSIF_SIZE (0x200)
1904#define TCSR_ADM_0_A_CRCI_MUX_SEL 0x0070
1905
1906#define TSIF_0_CLK GPIO_CFG(93, 1, GPIO_CFG_INPUT, \
1907 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
1908#define TSIF_0_EN GPIO_CFG(94, 1, GPIO_CFG_INPUT, \
1909 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
1910#define TSIF_0_DATA GPIO_CFG(95, 1, GPIO_CFG_INPUT, \
1911 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
1912#define TSIF_0_SYNC GPIO_CFG(96, 1, GPIO_CFG_INPUT, \
1913 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
1914#define TSIF_1_CLK GPIO_CFG(97, 1, GPIO_CFG_INPUT, \
1915 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
1916#define TSIF_1_EN GPIO_CFG(98, 1, GPIO_CFG_INPUT, \
1917 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
1918#define TSIF_1_DATA GPIO_CFG(99, 1, GPIO_CFG_INPUT, \
1919 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
1920#define TSIF_1_SYNC GPIO_CFG(100, 1, GPIO_CFG_INPUT, \
1921 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
1922
1923static const struct msm_gpio tsif0_gpios[] = {
1924 { .gpio_cfg = TSIF_0_CLK, .label = "tsif_clk", },
1925 { .gpio_cfg = TSIF_0_EN, .label = "tsif_en", },
1926 { .gpio_cfg = TSIF_0_DATA, .label = "tsif_data", },
1927 { .gpio_cfg = TSIF_0_SYNC, .label = "tsif_sync", },
1928};
1929
1930static const struct msm_gpio tsif1_gpios[] = {
1931 { .gpio_cfg = TSIF_1_CLK, .label = "tsif_clk", },
1932 { .gpio_cfg = TSIF_1_EN, .label = "tsif_en", },
1933 { .gpio_cfg = TSIF_1_DATA, .label = "tsif_data", },
1934 { .gpio_cfg = TSIF_1_SYNC, .label = "tsif_sync", },
1935};
1936
1937static void tsif_release(struct device *dev)
1938{
1939}
1940
1941static void tsif_init1(struct msm_tsif_platform_data *data)
1942{
1943 int val;
1944
1945 /* configure mux to use correct tsif instance */
1946 val = secure_readl(MSM_TCSR_BASE + TCSR_ADM_0_A_CRCI_MUX_SEL);
1947 val |= 0x80000000;
1948 secure_writel(val, MSM_TCSR_BASE + TCSR_ADM_0_A_CRCI_MUX_SEL);
1949}
1950
1951struct msm_tsif_platform_data tsif1_platform_data = {
1952 .num_gpios = ARRAY_SIZE(tsif1_gpios),
1953 .gpios = tsif1_gpios,
Matt Wagantall640e5fd2011-08-17 16:08:53 -07001954 .tsif_pclk = "iface_clk",
1955 .tsif_ref_clk = "ref_clk",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001956 .init = tsif_init1
1957};
1958
1959struct resource tsif1_resources[] = {
1960 [0] = {
1961 .flags = IORESOURCE_IRQ,
1962 .start = TSIF2_IRQ,
1963 .end = TSIF2_IRQ,
1964 },
1965 [1] = {
1966 .flags = IORESOURCE_MEM,
1967 .start = MSM_TSIF1_PHYS,
1968 .end = MSM_TSIF1_PHYS + MSM_TSIF_SIZE - 1,
1969 },
1970 [2] = {
1971 .flags = IORESOURCE_DMA,
1972 .start = DMOV_TSIF_CHAN,
1973 .end = DMOV_TSIF_CRCI,
1974 },
1975};
1976
1977static void tsif_init0(struct msm_tsif_platform_data *data)
1978{
1979 int val;
1980
1981 /* configure mux to use correct tsif instance */
1982 val = secure_readl(MSM_TCSR_BASE + TCSR_ADM_0_A_CRCI_MUX_SEL);
1983 val &= 0x7FFFFFFF;
1984 secure_writel(val, MSM_TCSR_BASE + TCSR_ADM_0_A_CRCI_MUX_SEL);
1985}
1986
1987struct msm_tsif_platform_data tsif0_platform_data = {
1988 .num_gpios = ARRAY_SIZE(tsif0_gpios),
1989 .gpios = tsif0_gpios,
Matt Wagantall640e5fd2011-08-17 16:08:53 -07001990 .tsif_pclk = "iface_clk",
1991 .tsif_ref_clk = "ref_clk",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001992 .init = tsif_init0
1993};
1994struct resource tsif0_resources[] = {
1995 [0] = {
1996 .flags = IORESOURCE_IRQ,
1997 .start = TSIF1_IRQ,
1998 .end = TSIF1_IRQ,
1999 },
2000 [1] = {
2001 .flags = IORESOURCE_MEM,
2002 .start = MSM_TSIF0_PHYS,
2003 .end = MSM_TSIF0_PHYS + MSM_TSIF_SIZE - 1,
2004 },
2005 [2] = {
2006 .flags = IORESOURCE_DMA,
2007 .start = DMOV_TSIF_CHAN,
2008 .end = DMOV_TSIF_CRCI,
2009 },
2010};
2011
2012struct platform_device msm_device_tsif[2] = {
2013 {
2014 .name = "msm_tsif",
2015 .id = 0,
2016 .num_resources = ARRAY_SIZE(tsif0_resources),
2017 .resource = tsif0_resources,
2018 .dev = {
2019 .release = tsif_release,
2020 .platform_data = &tsif0_platform_data
2021 },
2022 },
2023 {
2024 .name = "msm_tsif",
2025 .id = 1,
2026 .num_resources = ARRAY_SIZE(tsif1_resources),
2027 .resource = tsif1_resources,
2028 .dev = {
2029 .release = tsif_release,
2030 .platform_data = &tsif1_platform_data
2031 },
2032 }
2033};
2034
2035struct platform_device msm_device_smd = {
2036 .name = "msm_smd",
2037 .id = -1,
2038};
2039
Jeff Ohlstein7e668552011-10-06 16:17:25 -07002040static struct msm_watchdog_pdata msm_watchdog_pdata = {
2041 .pet_time = 10000,
2042 .bark_time = 11000,
2043 .has_secure = true,
Rohit Vaswanic77e4a62012-08-09 18:10:28 -07002044 .base = MSM_TMR0_BASE + WDT0_OFFSET,
2045};
2046
2047static struct resource msm_watchdog_resources[] = {
2048 {
2049 .start = WDT0_ACCSCSSNBARK_INT,
2050 .end = WDT0_ACCSCSSNBARK_INT,
2051 .flags = IORESOURCE_IRQ,
2052 },
Jeff Ohlstein7e668552011-10-06 16:17:25 -07002053};
2054
2055struct platform_device msm8660_device_watchdog = {
2056 .name = "msm_watchdog",
2057 .id = -1,
2058 .dev = {
2059 .platform_data = &msm_watchdog_pdata,
2060 },
Rohit Vaswanic77e4a62012-08-09 18:10:28 -07002061 .num_resources = ARRAY_SIZE(msm_watchdog_resources),
2062 .resource = msm_watchdog_resources,
Jeff Ohlstein7e668552011-10-06 16:17:25 -07002063};
2064
Jeff Ohlstein905f1ce2011-09-07 18:50:18 -07002065static struct resource msm_dmov_resource_adm0[] = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002066 {
2067 .start = INT_ADM0_AARM,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002068 .flags = IORESOURCE_IRQ,
2069 },
Jeff Ohlstein905f1ce2011-09-07 18:50:18 -07002070 {
2071 .start = 0x18320000,
2072 .end = 0x18320000 + SZ_1M - 1,
2073 .flags = IORESOURCE_MEM,
2074 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002075};
2076
Jeff Ohlstein905f1ce2011-09-07 18:50:18 -07002077static struct resource msm_dmov_resource_adm1[] = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002078 {
2079 .start = INT_ADM1_AARM,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002080 .flags = IORESOURCE_IRQ,
2081 },
Jeff Ohlstein905f1ce2011-09-07 18:50:18 -07002082 {
2083 .start = 0x18420000,
2084 .end = 0x18420000 + SZ_1M - 1,
2085 .flags = IORESOURCE_MEM,
2086 },
2087};
2088
2089static struct msm_dmov_pdata msm_dmov_pdata_adm0 = {
2090 .sd = 1,
2091 .sd_size = 0x800,
2092};
2093
2094static struct msm_dmov_pdata msm_dmov_pdata_adm1 = {
2095 .sd = 1,
2096 .sd_size = 0x800,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002097};
2098
2099struct platform_device msm_device_dmov_adm0 = {
2100 .name = "msm_dmov",
2101 .id = 0,
2102 .resource = msm_dmov_resource_adm0,
2103 .num_resources = ARRAY_SIZE(msm_dmov_resource_adm0),
Jeff Ohlstein905f1ce2011-09-07 18:50:18 -07002104 .dev = {
2105 .platform_data = &msm_dmov_pdata_adm0,
2106 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002107};
2108
2109struct platform_device msm_device_dmov_adm1 = {
2110 .name = "msm_dmov",
2111 .id = 1,
2112 .resource = msm_dmov_resource_adm1,
2113 .num_resources = ARRAY_SIZE(msm_dmov_resource_adm1),
Jeff Ohlstein905f1ce2011-09-07 18:50:18 -07002114 .dev = {
2115 .platform_data = &msm_dmov_pdata_adm1,
2116 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002117};
2118
2119/* MSM Video core device */
2120#ifdef CONFIG_MSM_BUS_SCALING
2121static struct msm_bus_vectors vidc_init_vectors[] = {
2122 {
2123 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
2124 .dst = MSM_BUS_SLAVE_SMI,
2125 .ab = 0,
2126 .ib = 0,
2127 },
2128 {
2129 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
2130 .dst = MSM_BUS_SLAVE_SMI,
2131 .ab = 0,
2132 .ib = 0,
2133 },
2134 {
2135 .src = MSM_BUS_MASTER_AMPSS_M0,
2136 .dst = MSM_BUS_SLAVE_EBI_CH0,
2137 .ab = 0,
2138 .ib = 0,
2139 },
2140 {
2141 .src = MSM_BUS_MASTER_AMPSS_M0,
2142 .dst = MSM_BUS_SLAVE_SMI,
2143 .ab = 0,
2144 .ib = 0,
2145 },
2146};
2147static struct msm_bus_vectors vidc_venc_vga_vectors[] = {
2148 {
2149 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
2150 .dst = MSM_BUS_SLAVE_SMI,
2151 .ab = 54525952,
2152 .ib = 436207616,
2153 },
2154 {
2155 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
2156 .dst = MSM_BUS_SLAVE_SMI,
2157 .ab = 72351744,
2158 .ib = 289406976,
2159 },
2160 {
2161 .src = MSM_BUS_MASTER_AMPSS_M0,
2162 .dst = MSM_BUS_SLAVE_EBI_CH0,
2163 .ab = 500000,
2164 .ib = 1000000,
2165 },
2166 {
2167 .src = MSM_BUS_MASTER_AMPSS_M0,
2168 .dst = MSM_BUS_SLAVE_SMI,
2169 .ab = 500000,
2170 .ib = 1000000,
2171 },
2172};
2173static struct msm_bus_vectors vidc_vdec_vga_vectors[] = {
2174 {
2175 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
2176 .dst = MSM_BUS_SLAVE_SMI,
2177 .ab = 40894464,
2178 .ib = 327155712,
2179 },
2180 {
2181 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
2182 .dst = MSM_BUS_SLAVE_SMI,
2183 .ab = 48234496,
2184 .ib = 192937984,
2185 },
2186 {
2187 .src = MSM_BUS_MASTER_AMPSS_M0,
2188 .dst = MSM_BUS_SLAVE_EBI_CH0,
2189 .ab = 500000,
2190 .ib = 2000000,
2191 },
2192 {
2193 .src = MSM_BUS_MASTER_AMPSS_M0,
2194 .dst = MSM_BUS_SLAVE_SMI,
2195 .ab = 500000,
2196 .ib = 2000000,
2197 },
2198};
2199static struct msm_bus_vectors vidc_venc_720p_vectors[] = {
2200 {
2201 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
2202 .dst = MSM_BUS_SLAVE_SMI,
2203 .ab = 163577856,
2204 .ib = 1308622848,
2205 },
2206 {
2207 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
2208 .dst = MSM_BUS_SLAVE_SMI,
2209 .ab = 219152384,
2210 .ib = 876609536,
2211 },
2212 {
2213 .src = MSM_BUS_MASTER_AMPSS_M0,
2214 .dst = MSM_BUS_SLAVE_EBI_CH0,
2215 .ab = 1750000,
2216 .ib = 3500000,
2217 },
2218 {
2219 .src = MSM_BUS_MASTER_AMPSS_M0,
2220 .dst = MSM_BUS_SLAVE_SMI,
2221 .ab = 1750000,
2222 .ib = 3500000,
2223 },
2224};
2225static struct msm_bus_vectors vidc_vdec_720p_vectors[] = {
2226 {
2227 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
2228 .dst = MSM_BUS_SLAVE_SMI,
2229 .ab = 121634816,
2230 .ib = 973078528,
2231 },
2232 {
2233 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
2234 .dst = MSM_BUS_SLAVE_SMI,
2235 .ab = 155189248,
2236 .ib = 620756992,
2237 },
2238 {
2239 .src = MSM_BUS_MASTER_AMPSS_M0,
2240 .dst = MSM_BUS_SLAVE_EBI_CH0,
2241 .ab = 1750000,
2242 .ib = 7000000,
2243 },
2244 {
2245 .src = MSM_BUS_MASTER_AMPSS_M0,
2246 .dst = MSM_BUS_SLAVE_SMI,
2247 .ab = 1750000,
2248 .ib = 7000000,
2249 },
2250};
2251static struct msm_bus_vectors vidc_venc_1080p_vectors[] = {
2252 {
2253 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
2254 .dst = MSM_BUS_SLAVE_SMI,
2255 .ab = 372244480,
2256 .ib = 1861222400,
2257 },
2258 {
2259 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
2260 .dst = MSM_BUS_SLAVE_SMI,
2261 .ab = 501219328,
2262 .ib = 2004877312,
2263 },
2264 {
2265 .src = MSM_BUS_MASTER_AMPSS_M0,
2266 .dst = MSM_BUS_SLAVE_EBI_CH0,
2267 .ab = 2500000,
2268 .ib = 5000000,
2269 },
2270 {
2271 .src = MSM_BUS_MASTER_AMPSS_M0,
2272 .dst = MSM_BUS_SLAVE_SMI,
2273 .ab = 2500000,
2274 .ib = 5000000,
2275 },
2276};
2277static struct msm_bus_vectors vidc_vdec_1080p_vectors[] = {
2278 {
2279 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
2280 .dst = MSM_BUS_SLAVE_SMI,
2281 .ab = 222298112,
2282 .ib = 1778384896,
2283 },
2284 {
2285 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
2286 .dst = MSM_BUS_SLAVE_SMI,
2287 .ab = 330301440,
2288 .ib = 1321205760,
2289 },
2290 {
2291 .src = MSM_BUS_MASTER_AMPSS_M0,
2292 .dst = MSM_BUS_SLAVE_EBI_CH0,
2293 .ab = 2500000,
2294 .ib = 700000000,
2295 },
2296 {
2297 .src = MSM_BUS_MASTER_AMPSS_M0,
2298 .dst = MSM_BUS_SLAVE_SMI,
2299 .ab = 2500000,
2300 .ib = 10000000,
2301 },
2302};
2303
2304static struct msm_bus_paths vidc_bus_client_config[] = {
2305 {
2306 ARRAY_SIZE(vidc_init_vectors),
2307 vidc_init_vectors,
2308 },
2309 {
2310 ARRAY_SIZE(vidc_venc_vga_vectors),
2311 vidc_venc_vga_vectors,
2312 },
2313 {
2314 ARRAY_SIZE(vidc_vdec_vga_vectors),
2315 vidc_vdec_vga_vectors,
2316 },
2317 {
2318 ARRAY_SIZE(vidc_venc_720p_vectors),
2319 vidc_venc_720p_vectors,
2320 },
2321 {
2322 ARRAY_SIZE(vidc_vdec_720p_vectors),
2323 vidc_vdec_720p_vectors,
2324 },
2325 {
2326 ARRAY_SIZE(vidc_venc_1080p_vectors),
2327 vidc_venc_1080p_vectors,
2328 },
2329 {
2330 ARRAY_SIZE(vidc_vdec_1080p_vectors),
2331 vidc_vdec_1080p_vectors,
2332 },
2333};
2334
2335static struct msm_bus_scale_pdata vidc_bus_client_data = {
2336 vidc_bus_client_config,
2337 ARRAY_SIZE(vidc_bus_client_config),
2338 .name = "vidc",
2339};
2340
2341#endif
2342
2343#define MSM_VIDC_BASE_PHYS 0x04400000
2344#define MSM_VIDC_BASE_SIZE 0x00100000
2345
2346static struct resource msm_device_vidc_resources[] = {
2347 {
2348 .start = MSM_VIDC_BASE_PHYS,
2349 .end = MSM_VIDC_BASE_PHYS + MSM_VIDC_BASE_SIZE - 1,
2350 .flags = IORESOURCE_MEM,
2351 },
2352 {
2353 .start = VCODEC_IRQ,
2354 .end = VCODEC_IRQ,
2355 .flags = IORESOURCE_IRQ,
2356 },
2357};
2358
2359struct msm_vidc_platform_data vidc_platform_data = {
2360#ifdef CONFIG_MSM_BUS_SCALING
2361 .vidc_bus_client_pdata = &vidc_bus_client_data,
2362#endif
Riaz Rahamanca0b72b2012-07-23 14:28:50 +05302363#ifdef CONFIG_MSM_VIDC_CONTENT_PROTECTION
2364 .cp_enabled = 1,
2365#else
2366 .cp_enabled = 0,
2367#endif
Deepak Koturcb4f6722011-10-31 14:06:57 -07002368#ifdef CONFIG_MSM_MULTIMEDIA_USE_ION
Deepak Kotur59955cb2011-12-08 10:23:01 -08002369 .memtype = ION_CP_MM_HEAP_ID,
Deepak Koturcb4f6722011-10-31 14:06:57 -07002370 .enable_ion = 1,
Riaz Rahaman84f8c682012-05-30 13:32:10 +05302371 .secure_wb_heap = 1,
Deepak Koturcb4f6722011-10-31 14:06:57 -07002372#else
Deepak Kotur12301a72011-11-09 18:30:29 -08002373 .memtype = MEMTYPE_SMI_KERNEL,
Deepak Koturcb4f6722011-10-31 14:06:57 -07002374 .enable_ion = 0,
Riaz Rahaman84f8c682012-05-30 13:32:10 +05302375 .secure_wb_heap = 0,
Deepak Koturcb4f6722011-10-31 14:06:57 -07002376#endif
Rajeshwar Kurapatyc155c352011-12-17 06:35:32 +05302377 .disable_dmx = 0,
Mohan Kumar Gubbihalli Lachma Naiked9dc912012-03-01 19:11:14 -08002378 .disable_fullhd = 0,
Deva Ramasubramanian837ae362012-05-12 23:26:53 -07002379 .cont_mode_dpb_count = 8,
2380 .disable_turbo = 1,
Riaz Rahaman84f8c682012-05-30 13:32:10 +05302381 .fw_addr = 0x38000000,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002382};
2383
2384struct platform_device msm_device_vidc = {
2385 .name = "msm_vidc",
2386 .id = 0,
2387 .num_resources = ARRAY_SIZE(msm_device_vidc_resources),
2388 .resource = msm_device_vidc_resources,
2389 .dev = {
2390 .platform_data = &vidc_platform_data,
2391 },
2392};
2393
Praveen Chidambaram78499012011-11-01 17:15:17 -06002394#if defined(CONFIG_MSM_RPM_LOG) || defined(CONFIG_MSM_RPM_LOG_MODULE)
2395static struct msm_rpm_log_platform_data msm_rpm_log_pdata = {
2396 .phys_addr_base = 0x00106000,
2397 .reg_offsets = {
2398 [MSM_RPM_LOG_PAGE_INDICES] = 0x00000C80,
2399 [MSM_RPM_LOG_PAGE_BUFFER] = 0x00000CA0,
2400 },
2401 .phys_size = SZ_8K,
2402 .log_len = 4096, /* log's buffer length in bytes */
2403 .log_len_mask = (4096 >> 2) - 1, /* length mask in units of u32 */
2404};
2405
2406struct platform_device msm8660_rpm_log_device = {
2407 .name = "msm_rpm_log",
2408 .id = -1,
2409 .dev = {
2410 .platform_data = &msm_rpm_log_pdata,
2411 },
2412};
2413#endif
2414
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002415#if defined(CONFIG_MSM_RPM_STATS_LOG)
2416static struct msm_rpmstats_platform_data msm_rpm_stat_pdata = {
2417 .phys_addr_base = 0x00107E04,
2418 .phys_size = SZ_8K,
2419};
2420
Praveen Chidambaram78499012011-11-01 17:15:17 -06002421struct platform_device msm8660_rpm_stat_device = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002422 .name = "msm_rpm_stat",
2423 .id = -1,
2424 .dev = {
2425 .platform_data = &msm_rpm_stat_pdata,
2426 },
2427};
2428#endif
2429
Mona Hossainceca6152012-04-10 09:55:41 -07002430#define SHARED_IMEM_TZ_BASE 0x2a05f720
2431static struct resource tzlog_resources[] = {
2432 {
2433 .start = SHARED_IMEM_TZ_BASE,
2434 .end = SHARED_IMEM_TZ_BASE + SZ_4K - 1,
2435 .flags = IORESOURCE_MEM,
2436 },
2437};
2438
2439struct platform_device msm_device_tz_log = {
2440 .name = "tz_log",
2441 .id = 0,
2442 .num_resources = ARRAY_SIZE(tzlog_resources),
2443 .resource = tzlog_resources,
2444};
2445
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002446#ifdef CONFIG_MSM_MPM
Praveen Chidambaram78499012011-11-01 17:15:17 -06002447static uint16_t msm_mpm_irqs_m2a[MSM_MPM_NR_MPM_IRQS] __initdata = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002448 [1] = MSM_GPIO_TO_INT(61),
2449 [4] = MSM_GPIO_TO_INT(87),
2450 [5] = MSM_GPIO_TO_INT(88),
2451 [6] = MSM_GPIO_TO_INT(89),
2452 [7] = MSM_GPIO_TO_INT(90),
2453 [8] = MSM_GPIO_TO_INT(91),
2454 [9] = MSM_GPIO_TO_INT(34),
2455 [10] = MSM_GPIO_TO_INT(38),
2456 [11] = MSM_GPIO_TO_INT(42),
2457 [12] = MSM_GPIO_TO_INT(46),
2458 [13] = MSM_GPIO_TO_INT(50),
2459 [14] = MSM_GPIO_TO_INT(54),
2460 [15] = MSM_GPIO_TO_INT(58),
2461 [16] = MSM_GPIO_TO_INT(63),
2462 [17] = MSM_GPIO_TO_INT(160),
2463 [18] = MSM_GPIO_TO_INT(162),
2464 [19] = MSM_GPIO_TO_INT(144),
2465 [20] = MSM_GPIO_TO_INT(146),
2466 [25] = USB1_HS_IRQ,
2467 [26] = TV_ENC_IRQ,
2468 [27] = HDMI_IRQ,
2469 [29] = MSM_GPIO_TO_INT(123),
2470 [30] = MSM_GPIO_TO_INT(172),
2471 [31] = MSM_GPIO_TO_INT(99),
2472 [32] = MSM_GPIO_TO_INT(96),
2473 [33] = MSM_GPIO_TO_INT(67),
2474 [34] = MSM_GPIO_TO_INT(71),
2475 [35] = MSM_GPIO_TO_INT(105),
2476 [36] = MSM_GPIO_TO_INT(117),
2477 [37] = MSM_GPIO_TO_INT(29),
2478 [38] = MSM_GPIO_TO_INT(30),
2479 [39] = MSM_GPIO_TO_INT(31),
2480 [40] = MSM_GPIO_TO_INT(37),
2481 [41] = MSM_GPIO_TO_INT(40),
2482 [42] = MSM_GPIO_TO_INT(41),
2483 [43] = MSM_GPIO_TO_INT(45),
2484 [44] = MSM_GPIO_TO_INT(51),
2485 [45] = MSM_GPIO_TO_INT(52),
2486 [46] = MSM_GPIO_TO_INT(57),
2487 [47] = MSM_GPIO_TO_INT(73),
2488 [48] = MSM_GPIO_TO_INT(93),
2489 [49] = MSM_GPIO_TO_INT(94),
2490 [50] = MSM_GPIO_TO_INT(103),
2491 [51] = MSM_GPIO_TO_INT(104),
2492 [52] = MSM_GPIO_TO_INT(106),
2493 [53] = MSM_GPIO_TO_INT(115),
2494 [54] = MSM_GPIO_TO_INT(124),
2495 [55] = MSM_GPIO_TO_INT(125),
2496 [56] = MSM_GPIO_TO_INT(126),
2497 [57] = MSM_GPIO_TO_INT(127),
2498 [58] = MSM_GPIO_TO_INT(128),
2499 [59] = MSM_GPIO_TO_INT(129),
2500};
2501
Praveen Chidambaram78499012011-11-01 17:15:17 -06002502static uint16_t msm_mpm_bypassed_apps_irqs[] __initdata = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002503 TLMM_MSM_SUMMARY_IRQ,
2504 RPM_SCSS_CPU0_GP_HIGH_IRQ,
2505 RPM_SCSS_CPU0_GP_MEDIUM_IRQ,
2506 RPM_SCSS_CPU0_GP_LOW_IRQ,
2507 RPM_SCSS_CPU0_WAKE_UP_IRQ,
2508 RPM_SCSS_CPU1_GP_HIGH_IRQ,
2509 RPM_SCSS_CPU1_GP_MEDIUM_IRQ,
2510 RPM_SCSS_CPU1_GP_LOW_IRQ,
2511 RPM_SCSS_CPU1_WAKE_UP_IRQ,
2512 MARM_SCSS_GP_IRQ_0,
2513 MARM_SCSS_GP_IRQ_1,
2514 MARM_SCSS_GP_IRQ_2,
2515 MARM_SCSS_GP_IRQ_3,
2516 MARM_SCSS_GP_IRQ_4,
2517 MARM_SCSS_GP_IRQ_5,
2518 MARM_SCSS_GP_IRQ_6,
2519 MARM_SCSS_GP_IRQ_7,
2520 MARM_SCSS_GP_IRQ_8,
2521 MARM_SCSS_GP_IRQ_9,
2522 LPASS_SCSS_GP_LOW_IRQ,
2523 LPASS_SCSS_GP_MEDIUM_IRQ,
2524 LPASS_SCSS_GP_HIGH_IRQ,
2525 SDC4_IRQ_0,
2526 SPS_MTI_31,
2527};
2528
Praveen Chidambaram78499012011-11-01 17:15:17 -06002529struct msm_mpm_device_data msm8660_mpm_dev_data __initdata = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002530 .irqs_m2a = msm_mpm_irqs_m2a,
2531 .irqs_m2a_size = ARRAY_SIZE(msm_mpm_irqs_m2a),
2532 .bypassed_apps_irqs = msm_mpm_bypassed_apps_irqs,
2533 .bypassed_apps_irqs_size = ARRAY_SIZE(msm_mpm_bypassed_apps_irqs),
2534 .mpm_request_reg_base = MSM_RPM_BASE + 0x9d8,
2535 .mpm_status_reg_base = MSM_RPM_BASE + 0xdf8,
2536 .mpm_apps_ipc_reg = MSM_GCC_BASE + 0x008,
2537 .mpm_apps_ipc_val = BIT(1),
2538 .mpm_ipc_irq = RPM_SCSS_CPU0_GP_MEDIUM_IRQ,
2539
2540};
2541#endif
2542
2543
2544#ifdef CONFIG_MSM_BUS_SCALING
2545struct platform_device msm_bus_sys_fabric = {
2546 .name = "msm_bus_fabric",
2547 .id = MSM_BUS_FAB_SYSTEM,
2548};
2549struct platform_device msm_bus_apps_fabric = {
2550 .name = "msm_bus_fabric",
2551 .id = MSM_BUS_FAB_APPSS,
2552};
2553struct platform_device msm_bus_mm_fabric = {
2554 .name = "msm_bus_fabric",
2555 .id = MSM_BUS_FAB_MMSS,
2556};
2557struct platform_device msm_bus_sys_fpb = {
2558 .name = "msm_bus_fabric",
2559 .id = MSM_BUS_FAB_SYSTEM_FPB,
2560};
2561struct platform_device msm_bus_cpss_fpb = {
2562 .name = "msm_bus_fabric",
2563 .id = MSM_BUS_FAB_CPSS_FPB,
2564};
2565#endif
2566
Lei Zhou01366a42011-08-19 13:12:00 -04002567#ifdef CONFIG_SND_SOC_MSM8660_APQ
2568struct platform_device msm_pcm = {
2569 .name = "msm-pcm-dsp",
2570 .id = -1,
2571};
2572
2573struct platform_device msm_pcm_routing = {
2574 .name = "msm-pcm-routing",
2575 .id = -1,
2576};
2577
2578struct platform_device msm_cpudai0 = {
2579 .name = "msm-dai-q6",
2580 .id = PRIMARY_I2S_RX,
2581};
2582
2583struct platform_device msm_cpudai1 = {
2584 .name = "msm-dai-q6",
2585 .id = PRIMARY_I2S_TX,
2586};
2587
2588struct platform_device msm_cpudai_hdmi_rx = {
2589 .name = "msm-dai-q6",
2590 .id = HDMI_RX,
2591};
2592
2593struct platform_device msm_cpudai_bt_rx = {
2594 .name = "msm-dai-q6",
2595 .id = INT_BT_SCO_RX,
2596};
2597
2598struct platform_device msm_cpudai_bt_tx = {
2599 .name = "msm-dai-q6",
2600 .id = INT_BT_SCO_TX,
2601};
2602
2603struct platform_device msm_cpudai_fm_rx = {
2604 .name = "msm-dai-q6",
2605 .id = INT_FM_RX,
2606};
2607
2608struct platform_device msm_cpudai_fm_tx = {
2609 .name = "msm-dai-q6",
2610 .id = INT_FM_TX,
2611};
2612
2613struct platform_device msm_cpu_fe = {
2614 .name = "msm-dai-fe",
2615 .id = -1,
2616};
2617
2618struct platform_device msm_stub_codec = {
2619 .name = "msm-stub-codec",
2620 .id = 1,
2621};
2622
2623struct platform_device msm_voice = {
2624 .name = "msm-pcm-voice",
2625 .id = -1,
2626};
2627
2628struct platform_device msm_voip = {
2629 .name = "msm-voip-dsp",
2630 .id = -1,
2631};
2632
2633struct platform_device msm_lpa_pcm = {
2634 .name = "msm-pcm-lpa",
2635 .id = -1,
2636};
2637
2638struct platform_device msm_pcm_hostless = {
2639 .name = "msm-pcm-hostless",
2640 .id = -1,
2641};
2642#endif
2643
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002644struct platform_device asoc_msm_pcm = {
2645 .name = "msm-dsp-audio",
2646 .id = 0,
2647};
2648
2649struct platform_device asoc_msm_dai0 = {
2650 .name = "msm-codec-dai",
2651 .id = 0,
2652};
2653
2654struct platform_device asoc_msm_dai1 = {
2655 .name = "msm-cpu-dai",
2656 .id = 0,
2657};
2658
2659#if defined (CONFIG_MSM_8x60_VOIP)
2660struct platform_device asoc_msm_mvs = {
2661 .name = "msm-mvs-audio",
2662 .id = 0,
2663};
2664
2665struct platform_device asoc_mvs_dai0 = {
2666 .name = "mvs-codec-dai",
2667 .id = 0,
2668};
2669
2670struct platform_device asoc_mvs_dai1 = {
2671 .name = "mvs-cpu-dai",
2672 .id = 0,
2673};
2674#endif
2675
Matt Wagantall1f65d9d2012-04-25 14:24:20 -07002676static struct fs_driver_data gfx2d0_fs_data = {
2677 .clks = (struct fs_clk_data[]){
2678 { .name = "core_clk" },
2679 { .name = "iface_clk" },
2680 { 0 }
2681 },
2682 .bus_port0 = MSM_BUS_MASTER_GRAPHICS_2D_CORE0,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002683};
Matt Wagantall1f65d9d2012-04-25 14:24:20 -07002684
2685static struct fs_driver_data gfx2d1_fs_data = {
2686 .clks = (struct fs_clk_data[]){
2687 { .name = "core_clk" },
2688 { .name = "iface_clk" },
2689 { 0 }
2690 },
2691 .bus_port0 = MSM_BUS_MASTER_GRAPHICS_2D_CORE1,
2692};
2693
2694static struct fs_driver_data gfx3d_fs_data = {
2695 .clks = (struct fs_clk_data[]){
2696 { .name = "core_clk", .reset_rate = 27000000 },
2697 { .name = "iface_clk" },
2698 { 0 }
2699 },
2700 .bus_port0 = MSM_BUS_MASTER_GRAPHICS_3D,
2701};
2702
2703static struct fs_driver_data ijpeg_fs_data = {
2704 .clks = (struct fs_clk_data[]){
2705 { .name = "core_clk" },
2706 { .name = "iface_clk" },
2707 { .name = "bus_clk" },
2708 { 0 }
2709 },
2710 .bus_port0 = MSM_BUS_MASTER_JPEG_ENC,
2711};
2712
2713static struct fs_driver_data mdp_fs_data = {
2714 .clks = (struct fs_clk_data[]){
2715 { .name = "core_clk" },
2716 { .name = "iface_clk" },
2717 { .name = "bus_clk" },
2718 { .name = "vsync_clk" },
2719 { .name = "tv_src_clk" },
2720 { .name = "tv_clk" },
2721 { .name = "pixel_mdp_clk" },
2722 { .name = "pixel_lcdc_clk" },
2723 { 0 }
2724 },
2725 .bus_port0 = MSM_BUS_MASTER_MDP_PORT0,
2726 .bus_port1 = MSM_BUS_MASTER_MDP_PORT1,
2727};
2728
2729static struct fs_driver_data rot_fs_data = {
2730 .clks = (struct fs_clk_data[]){
2731 { .name = "core_clk" },
2732 { .name = "iface_clk" },
2733 { .name = "bus_clk" },
2734 { 0 }
2735 },
2736 .bus_port0 = MSM_BUS_MASTER_ROTATOR,
2737};
2738
2739static struct fs_driver_data ved_fs_data = {
2740 .clks = (struct fs_clk_data[]){
2741 { .name = "core_clk" },
2742 { .name = "iface_clk" },
2743 { .name = "bus_clk" },
2744 { 0 }
2745 },
2746 .bus_port0 = MSM_BUS_MASTER_HD_CODEC_PORT0,
2747 .bus_port1 = MSM_BUS_MASTER_HD_CODEC_PORT1,
2748};
2749
2750static struct fs_driver_data vfe_fs_data = {
2751 .clks = (struct fs_clk_data[]){
2752 { .name = "core_clk" },
2753 { .name = "iface_clk" },
2754 { .name = "bus_clk" },
2755 { 0 }
2756 },
2757 .bus_port0 = MSM_BUS_MASTER_VFE,
2758};
2759
2760static struct fs_driver_data vpe_fs_data = {
2761 .clks = (struct fs_clk_data[]){
2762 { .name = "core_clk" },
2763 { .name = "iface_clk" },
2764 { .name = "bus_clk" },
2765 { 0 }
2766 },
2767 .bus_port0 = MSM_BUS_MASTER_VPE,
2768};
2769
2770struct platform_device *msm8660_footswitch[] __initdata = {
Matt Wagantalle4454b82012-05-03 20:48:01 -07002771 FS_8X60(FS_IJPEG, "vdd", "msm_gemini.0", &ijpeg_fs_data),
Matt Wagantalld4aab1e2012-05-03 20:26:56 -07002772 FS_8X60(FS_MDP, "vdd", "mdp.0", &mdp_fs_data),
Matt Wagantall316f2fc2012-05-03 20:41:42 -07002773 FS_8X60(FS_ROT, "vdd", "msm_rotator.0", &rot_fs_data),
Matt Wagantall5e46aac2012-05-03 20:20:18 -07002774 FS_8X60(FS_VED, "vdd", "msm_vidc.0", &ved_fs_data),
Kiran Kumar H Nfa18a032012-06-25 14:34:18 -07002775 FS_8X60(FS_VFE, "vdd", "msm_vfe.0", &vfe_fs_data),
2776 FS_8X60(FS_VPE, "vdd", "msm_vpe.0", &vpe_fs_data),
Matt Wagantalld6fbf232012-05-03 20:09:28 -07002777 FS_8X60(FS_GFX3D, "vdd", "kgsl-3d0.0", &gfx3d_fs_data),
2778 FS_8X60(FS_GFX2D0, "vdd", "kgsl-2d0.0", &gfx2d0_fs_data),
2779 FS_8X60(FS_GFX2D1, "vdd", "kgsl-2d1.1", &gfx2d1_fs_data),
Matt Wagantall1f65d9d2012-04-25 14:24:20 -07002780};
2781unsigned msm8660_num_footswitch __initdata = ARRAY_SIZE(msm8660_footswitch);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002782
Praveen Chidambaram78499012011-11-01 17:15:17 -06002783struct msm_rpm_platform_data msm8660_rpm_data __initdata = {
2784 .reg_base_addrs = {
2785 [MSM_RPM_PAGE_STATUS] = MSM_RPM_BASE,
2786 [MSM_RPM_PAGE_CTRL] = MSM_RPM_BASE + 0x400,
2787 [MSM_RPM_PAGE_REQ] = MSM_RPM_BASE + 0x600,
2788 [MSM_RPM_PAGE_ACK] = MSM_RPM_BASE + 0xa00,
2789 },
2790 .irq_ack = RPM_SCSS_CPU0_GP_HIGH_IRQ,
Stephen Boydf61255e2012-02-24 14:31:09 -08002791 .irq_err = RPM_SCSS_CPU0_GP_LOW_IRQ,
Praveen Chidambarame396ce62012-03-30 11:15:57 -06002792 .irq_wakeup = RPM_SCSS_CPU0_WAKE_UP_IRQ,
Praveen Chidambaram78499012011-11-01 17:15:17 -06002793 .ipc_rpm_reg = MSM_GCC_BASE + 0x008,
2794 .ipc_rpm_val = 4,
2795 .target_id = {
2796 MSM_RPM_MAP(8660, NOTIFICATION_CONFIGURED_0, NOTIFICATION, 8),
2797 MSM_RPM_MAP(8660, NOTIFICATION_REGISTERED_0, NOTIFICATION, 8),
2798 MSM_RPM_MAP(8660, INVALIDATE_0, INVALIDATE, 8),
2799 MSM_RPM_MAP(8660, TRIGGER_TIMED_TO, TRIGGER_TIMED, 1),
2800 MSM_RPM_MAP(8660, TRIGGER_TIMED_SCLK_COUNT, TRIGGER_TIMED, 1),
2801 MSM_RPM_MAP(8660, TRIGGER_SET_FROM, TRIGGER_SET, 1),
2802 MSM_RPM_MAP(8660, TRIGGER_SET_TO, TRIGGER_SET, 1),
2803 MSM_RPM_MAP(8660, TRIGGER_SET_TRIGGER, TRIGGER_SET, 1),
2804 MSM_RPM_MAP(8660, TRIGGER_CLEAR_FROM, TRIGGER_CLEAR, 1),
2805 MSM_RPM_MAP(8660, TRIGGER_CLEAR_TO, TRIGGER_CLEAR, 1),
2806 MSM_RPM_MAP(8660, TRIGGER_CLEAR_TRIGGER, TRIGGER_CLEAR, 1),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002807
Praveen Chidambaram78499012011-11-01 17:15:17 -06002808 MSM_RPM_MAP(8660, CXO_CLK, CXO_CLK, 1),
2809 MSM_RPM_MAP(8660, PXO_CLK, PXO_CLK, 1),
2810 MSM_RPM_MAP(8660, PLL_4, PLL_4, 1),
2811 MSM_RPM_MAP(8660, APPS_FABRIC_CLK, APPS_FABRIC_CLK, 1),
2812 MSM_RPM_MAP(8660, SYSTEM_FABRIC_CLK, SYSTEM_FABRIC_CLK, 1),
2813 MSM_RPM_MAP(8660, MM_FABRIC_CLK, MM_FABRIC_CLK, 1),
2814 MSM_RPM_MAP(8660, DAYTONA_FABRIC_CLK, DAYTONA_FABRIC_CLK, 1),
2815 MSM_RPM_MAP(8660, SFPB_CLK, SFPB_CLK, 1),
2816 MSM_RPM_MAP(8660, CFPB_CLK, CFPB_CLK, 1),
2817 MSM_RPM_MAP(8660, MMFPB_CLK, MMFPB_CLK, 1),
2818 MSM_RPM_MAP(8660, SMI_CLK, SMI_CLK, 1),
2819 MSM_RPM_MAP(8660, EBI1_CLK, EBI1_CLK, 1),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002820
Praveen Chidambaram78499012011-11-01 17:15:17 -06002821 MSM_RPM_MAP(8660, APPS_L2_CACHE_CTL, APPS_L2_CACHE_CTL, 1),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002822
Praveen Chidambaram78499012011-11-01 17:15:17 -06002823 MSM_RPM_MAP(8660, APPS_FABRIC_HALT_0, APPS_FABRIC_HALT, 2),
2824 MSM_RPM_MAP(8660, APPS_FABRIC_CLOCK_MODE_0,
2825 APPS_FABRIC_CLOCK_MODE, 3),
2826 MSM_RPM_MAP(8660, APPS_FABRIC_ARB_0, APPS_FABRIC_ARB, 6),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002827
Praveen Chidambaram78499012011-11-01 17:15:17 -06002828 MSM_RPM_MAP(8660, SYSTEM_FABRIC_HALT_0, SYSTEM_FABRIC_HALT, 2),
2829 MSM_RPM_MAP(8660, SYSTEM_FABRIC_CLOCK_MODE_0,
2830 SYSTEM_FABRIC_CLOCK_MODE, 3),
2831 MSM_RPM_MAP(8660, SYSTEM_FABRIC_ARB_0, SYSTEM_FABRIC_ARB, 22),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002832
Praveen Chidambaram78499012011-11-01 17:15:17 -06002833 MSM_RPM_MAP(8660, MM_FABRIC_HALT_0, MM_FABRIC_HALT, 2),
2834 MSM_RPM_MAP(8660, MM_FABRIC_CLOCK_MODE_0,
2835 MM_FABRIC_CLOCK_MODE, 3),
2836 MSM_RPM_MAP(8660, MM_FABRIC_ARB_0, MM_FABRIC_ARB, 23),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002837
Praveen Chidambaram78499012011-11-01 17:15:17 -06002838 MSM_RPM_MAP(8660, SMPS0B_0, SMPS0B, 2),
2839 MSM_RPM_MAP(8660, SMPS1B_0, SMPS1B, 2),
2840 MSM_RPM_MAP(8660, SMPS2B_0, SMPS2B, 2),
2841 MSM_RPM_MAP(8660, SMPS3B_0, SMPS3B, 2),
2842 MSM_RPM_MAP(8660, SMPS4B_0, SMPS4B, 2),
2843 MSM_RPM_MAP(8660, LDO0B_0, LDO0B, 2),
2844 MSM_RPM_MAP(8660, LDO1B_0, LDO1B, 2),
2845 MSM_RPM_MAP(8660, LDO2B_0, LDO2B, 2),
2846 MSM_RPM_MAP(8660, LDO3B_0, LDO3B, 2),
2847 MSM_RPM_MAP(8660, LDO4B_0, LDO4B, 2),
2848 MSM_RPM_MAP(8660, LDO5B_0, LDO5B, 2),
2849 MSM_RPM_MAP(8660, LDO6B_0, LDO6B, 2),
2850 MSM_RPM_MAP(8660, LVS0B, LVS0B, 1),
2851 MSM_RPM_MAP(8660, LVS1B, LVS1B, 1),
2852 MSM_RPM_MAP(8660, LVS2B, LVS2B, 1),
2853 MSM_RPM_MAP(8660, LVS3B, LVS3B, 1),
2854 MSM_RPM_MAP(8660, MVS, MVS, 1),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002855
Praveen Chidambaram78499012011-11-01 17:15:17 -06002856 MSM_RPM_MAP(8660, SMPS0_0, SMPS0, 2),
2857 MSM_RPM_MAP(8660, SMPS1_0, SMPS1, 2),
2858 MSM_RPM_MAP(8660, SMPS2_0, SMPS2, 2),
2859 MSM_RPM_MAP(8660, SMPS3_0, SMPS3, 2),
2860 MSM_RPM_MAP(8660, SMPS4_0, SMPS4, 2),
2861 MSM_RPM_MAP(8660, LDO0_0, LDO0, 2),
2862 MSM_RPM_MAP(8660, LDO1_0, LDO1, 2),
2863 MSM_RPM_MAP(8660, LDO2_0, LDO2, 2),
2864 MSM_RPM_MAP(8660, LDO3_0, LDO3, 2),
2865 MSM_RPM_MAP(8660, LDO4_0, LDO4, 2),
2866 MSM_RPM_MAP(8660, LDO5_0, LDO5, 2),
2867 MSM_RPM_MAP(8660, LDO6_0, LDO6, 2),
2868 MSM_RPM_MAP(8660, LDO7_0, LDO7, 2),
2869 MSM_RPM_MAP(8660, LDO8_0, LDO8, 2),
2870 MSM_RPM_MAP(8660, LDO9_0, LDO9, 2),
2871 MSM_RPM_MAP(8660, LDO10_0, LDO10, 2),
2872 MSM_RPM_MAP(8660, LDO11_0, LDO11, 2),
2873 MSM_RPM_MAP(8660, LDO12_0, LDO12, 2),
2874 MSM_RPM_MAP(8660, LDO13_0, LDO13, 2),
2875 MSM_RPM_MAP(8660, LDO14_0, LDO14, 2),
2876 MSM_RPM_MAP(8660, LDO15_0, LDO15, 2),
2877 MSM_RPM_MAP(8660, LDO16_0, LDO16, 2),
2878 MSM_RPM_MAP(8660, LDO17_0, LDO17, 2),
2879 MSM_RPM_MAP(8660, LDO18_0, LDO18, 2),
2880 MSM_RPM_MAP(8660, LDO19_0, LDO19, 2),
2881 MSM_RPM_MAP(8660, LDO20_0, LDO20, 2),
2882 MSM_RPM_MAP(8660, LDO21_0, LDO21, 2),
2883 MSM_RPM_MAP(8660, LDO22_0, LDO22, 2),
2884 MSM_RPM_MAP(8660, LDO23_0, LDO23, 2),
2885 MSM_RPM_MAP(8660, LDO24_0, LDO24, 2),
2886 MSM_RPM_MAP(8660, LDO25_0, LDO25, 2),
2887 MSM_RPM_MAP(8660, LVS0, LVS0, 1),
2888 MSM_RPM_MAP(8660, LVS1, LVS1, 1),
2889 MSM_RPM_MAP(8660, NCP_0, NCP, 2),
2890 MSM_RPM_MAP(8660, CXO_BUFFERS, CXO_BUFFERS, 1),
2891 },
2892 .target_status = {
2893 MSM_RPM_STATUS_ID_MAP(8660, VERSION_MAJOR),
2894 MSM_RPM_STATUS_ID_MAP(8660, VERSION_MINOR),
2895 MSM_RPM_STATUS_ID_MAP(8660, VERSION_BUILD),
2896 MSM_RPM_STATUS_ID_MAP(8660, SUPPORTED_RESOURCES_0),
2897 MSM_RPM_STATUS_ID_MAP(8660, SUPPORTED_RESOURCES_1),
2898 MSM_RPM_STATUS_ID_MAP(8660, SUPPORTED_RESOURCES_2),
2899 MSM_RPM_STATUS_ID_MAP(8660, SEQUENCE),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002900
Praveen Chidambaram78499012011-11-01 17:15:17 -06002901 MSM_RPM_STATUS_ID_MAP(8660, CXO_CLK),
2902 MSM_RPM_STATUS_ID_MAP(8660, PXO_CLK),
2903 MSM_RPM_STATUS_ID_MAP(8660, PLL_4),
2904 MSM_RPM_STATUS_ID_MAP(8660, APPS_FABRIC_CLK),
2905 MSM_RPM_STATUS_ID_MAP(8660, SYSTEM_FABRIC_CLK),
2906 MSM_RPM_STATUS_ID_MAP(8660, MM_FABRIC_CLK),
2907 MSM_RPM_STATUS_ID_MAP(8660, DAYTONA_FABRIC_CLK),
2908 MSM_RPM_STATUS_ID_MAP(8660, SFPB_CLK),
2909 MSM_RPM_STATUS_ID_MAP(8660, CFPB_CLK),
2910 MSM_RPM_STATUS_ID_MAP(8660, MMFPB_CLK),
2911 MSM_RPM_STATUS_ID_MAP(8660, SMI_CLK),
2912 MSM_RPM_STATUS_ID_MAP(8660, EBI1_CLK),
2913
2914 MSM_RPM_STATUS_ID_MAP(8660, APPS_L2_CACHE_CTL),
2915
2916 MSM_RPM_STATUS_ID_MAP(8660, APPS_FABRIC_HALT),
2917 MSM_RPM_STATUS_ID_MAP(8660, APPS_FABRIC_CLOCK_MODE),
2918 MSM_RPM_STATUS_ID_MAP(8660, APPS_FABRIC_ARB),
2919
2920 MSM_RPM_STATUS_ID_MAP(8660, SYSTEM_FABRIC_HALT),
2921 MSM_RPM_STATUS_ID_MAP(8660, SYSTEM_FABRIC_CLOCK_MODE),
2922 MSM_RPM_STATUS_ID_MAP(8660, SYSTEM_FABRIC_ARB),
2923
2924 MSM_RPM_STATUS_ID_MAP(8660, MM_FABRIC_HALT),
2925 MSM_RPM_STATUS_ID_MAP(8660, MM_FABRIC_CLOCK_MODE),
2926 MSM_RPM_STATUS_ID_MAP(8660, MM_FABRIC_ARB),
2927
2928
2929 MSM_RPM_STATUS_ID_MAP(8660, SMPS0B_0),
2930 MSM_RPM_STATUS_ID_MAP(8660, SMPS0B_1),
2931 MSM_RPM_STATUS_ID_MAP(8660, SMPS1B_0),
2932 MSM_RPM_STATUS_ID_MAP(8660, SMPS1B_1),
2933 MSM_RPM_STATUS_ID_MAP(8660, SMPS2B_0),
2934 MSM_RPM_STATUS_ID_MAP(8660, SMPS2B_1),
2935 MSM_RPM_STATUS_ID_MAP(8660, SMPS3B_0),
2936 MSM_RPM_STATUS_ID_MAP(8660, SMPS3B_1),
2937 MSM_RPM_STATUS_ID_MAP(8660, SMPS4B_0),
2938 MSM_RPM_STATUS_ID_MAP(8660, SMPS4B_1),
2939 MSM_RPM_STATUS_ID_MAP(8660, LDO0B_0),
2940 MSM_RPM_STATUS_ID_MAP(8660, LDO0B_1),
2941 MSM_RPM_STATUS_ID_MAP(8660, LDO1B_0),
2942 MSM_RPM_STATUS_ID_MAP(8660, LDO1B_1),
2943 MSM_RPM_STATUS_ID_MAP(8660, LDO2B_0),
2944 MSM_RPM_STATUS_ID_MAP(8660, LDO2B_1),
2945 MSM_RPM_STATUS_ID_MAP(8660, LDO3B_0),
2946 MSM_RPM_STATUS_ID_MAP(8660, LDO3B_1),
2947 MSM_RPM_STATUS_ID_MAP(8660, LDO4B_0),
2948 MSM_RPM_STATUS_ID_MAP(8660, LDO4B_1),
2949 MSM_RPM_STATUS_ID_MAP(8660, LDO5B_0),
2950 MSM_RPM_STATUS_ID_MAP(8660, LDO5B_1),
2951 MSM_RPM_STATUS_ID_MAP(8660, LDO6B_0),
2952 MSM_RPM_STATUS_ID_MAP(8660, LDO6B_1),
2953 MSM_RPM_STATUS_ID_MAP(8660, LVS0B),
2954 MSM_RPM_STATUS_ID_MAP(8660, LVS1B),
2955 MSM_RPM_STATUS_ID_MAP(8660, LVS2B),
2956 MSM_RPM_STATUS_ID_MAP(8660, LVS3B),
2957 MSM_RPM_STATUS_ID_MAP(8660, MVS),
2958
2959
2960 MSM_RPM_STATUS_ID_MAP(8660, SMPS0_0),
2961 MSM_RPM_STATUS_ID_MAP(8660, SMPS0_1),
2962 MSM_RPM_STATUS_ID_MAP(8660, SMPS1_0),
2963 MSM_RPM_STATUS_ID_MAP(8660, SMPS1_1),
2964 MSM_RPM_STATUS_ID_MAP(8660, SMPS2_0),
2965 MSM_RPM_STATUS_ID_MAP(8660, SMPS2_1),
2966 MSM_RPM_STATUS_ID_MAP(8660, SMPS3_0),
2967 MSM_RPM_STATUS_ID_MAP(8660, SMPS3_1),
2968 MSM_RPM_STATUS_ID_MAP(8660, SMPS4_0),
2969 MSM_RPM_STATUS_ID_MAP(8660, SMPS4_1),
2970 MSM_RPM_STATUS_ID_MAP(8660, LDO0_0),
2971 MSM_RPM_STATUS_ID_MAP(8660, LDO0_1),
2972 MSM_RPM_STATUS_ID_MAP(8660, LDO1_0),
2973 MSM_RPM_STATUS_ID_MAP(8660, LDO1_1),
2974 MSM_RPM_STATUS_ID_MAP(8660, LDO2_0),
2975 MSM_RPM_STATUS_ID_MAP(8660, LDO2_1),
2976 MSM_RPM_STATUS_ID_MAP(8660, LDO3_0),
2977 MSM_RPM_STATUS_ID_MAP(8660, LDO3_1),
2978 MSM_RPM_STATUS_ID_MAP(8660, LDO4_0),
2979 MSM_RPM_STATUS_ID_MAP(8660, LDO4_1),
2980 MSM_RPM_STATUS_ID_MAP(8660, LDO5_0),
2981 MSM_RPM_STATUS_ID_MAP(8660, LDO5_1),
2982 MSM_RPM_STATUS_ID_MAP(8660, LDO6_0),
2983 MSM_RPM_STATUS_ID_MAP(8660, LDO6_1),
2984 MSM_RPM_STATUS_ID_MAP(8660, LDO7_0),
2985 MSM_RPM_STATUS_ID_MAP(8660, LDO7_1),
2986 MSM_RPM_STATUS_ID_MAP(8660, LDO8_0),
2987 MSM_RPM_STATUS_ID_MAP(8660, LDO8_1),
2988 MSM_RPM_STATUS_ID_MAP(8660, LDO9_0),
2989 MSM_RPM_STATUS_ID_MAP(8660, LDO9_1),
2990 MSM_RPM_STATUS_ID_MAP(8660, LDO10_0),
2991 MSM_RPM_STATUS_ID_MAP(8660, LDO10_1),
2992 MSM_RPM_STATUS_ID_MAP(8660, LDO11_0),
2993 MSM_RPM_STATUS_ID_MAP(8660, LDO11_1),
2994 MSM_RPM_STATUS_ID_MAP(8660, LDO12_0),
2995 MSM_RPM_STATUS_ID_MAP(8660, LDO12_1),
2996 MSM_RPM_STATUS_ID_MAP(8660, LDO13_0),
2997 MSM_RPM_STATUS_ID_MAP(8660, LDO13_1),
2998 MSM_RPM_STATUS_ID_MAP(8660, LDO14_0),
2999 MSM_RPM_STATUS_ID_MAP(8660, LDO14_1),
3000 MSM_RPM_STATUS_ID_MAP(8660, LDO15_0),
3001 MSM_RPM_STATUS_ID_MAP(8660, LDO15_1),
3002 MSM_RPM_STATUS_ID_MAP(8660, LDO16_0),
3003 MSM_RPM_STATUS_ID_MAP(8660, LDO16_1),
3004 MSM_RPM_STATUS_ID_MAP(8660, LDO17_0),
3005 MSM_RPM_STATUS_ID_MAP(8660, LDO17_1),
3006 MSM_RPM_STATUS_ID_MAP(8660, LDO18_0),
3007 MSM_RPM_STATUS_ID_MAP(8660, LDO18_1),
3008 MSM_RPM_STATUS_ID_MAP(8660, LDO19_0),
3009 MSM_RPM_STATUS_ID_MAP(8660, LDO19_1),
3010 MSM_RPM_STATUS_ID_MAP(8660, LDO20_0),
3011 MSM_RPM_STATUS_ID_MAP(8660, LDO20_1),
3012 MSM_RPM_STATUS_ID_MAP(8660, LDO21_0),
3013 MSM_RPM_STATUS_ID_MAP(8660, LDO21_1),
3014 MSM_RPM_STATUS_ID_MAP(8660, LDO22_0),
3015 MSM_RPM_STATUS_ID_MAP(8660, LDO22_1),
3016 MSM_RPM_STATUS_ID_MAP(8660, LDO23_0),
3017 MSM_RPM_STATUS_ID_MAP(8660, LDO23_1),
3018 MSM_RPM_STATUS_ID_MAP(8660, LDO24_0),
3019 MSM_RPM_STATUS_ID_MAP(8660, LDO24_1),
3020 MSM_RPM_STATUS_ID_MAP(8660, LDO25_0),
3021 MSM_RPM_STATUS_ID_MAP(8660, LDO25_1),
3022 MSM_RPM_STATUS_ID_MAP(8660, LVS0),
3023 MSM_RPM_STATUS_ID_MAP(8660, LVS1),
3024 MSM_RPM_STATUS_ID_MAP(8660, NCP_0),
3025 MSM_RPM_STATUS_ID_MAP(8660, NCP_1),
3026 MSM_RPM_STATUS_ID_MAP(8660, CXO_BUFFERS),
3027 },
3028 .target_ctrl_id = {
3029 MSM_RPM_CTRL_MAP(8660, VERSION_MAJOR),
3030 MSM_RPM_CTRL_MAP(8660, VERSION_MINOR),
3031 MSM_RPM_CTRL_MAP(8660, VERSION_BUILD),
3032 MSM_RPM_CTRL_MAP(8660, REQ_CTX_0),
3033 MSM_RPM_CTRL_MAP(8660, REQ_SEL_0),
3034 MSM_RPM_CTRL_MAP(8660, ACK_CTX_0),
3035 MSM_RPM_CTRL_MAP(8660, ACK_SEL_0),
3036 },
3037 .sel_invalidate = MSM_RPM_8660_SEL_INVALIDATE,
3038 .sel_notification = MSM_RPM_8660_SEL_NOTIFICATION,
3039 .sel_last = MSM_RPM_8660_SEL_LAST,
3040 .ver = {2, 0, 0},
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003041};
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003042
Praveen Chidambaram78499012011-11-01 17:15:17 -06003043struct platform_device msm8660_rpm_device = {
Maheshkumar Sivasubramanian9c8cdc92011-09-12 14:11:30 -06003044 .name = "msm_rpm",
3045 .id = -1,
3046};
Laura Abbottd92be422012-06-04 15:11:09 -07003047
3048struct msm_iommu_domain_name msm8660_iommu_ctx_names[] = {
3049 /* Camera */
3050 {
Laura Abbottd92be422012-06-04 15:11:09 -07003051 .name = "ijpeg_src",
3052 .domain = CAMERA_DOMAIN,
3053 },
3054 /* Camera */
3055 {
3056 .name = "ijpeg_dst",
3057 .domain = CAMERA_DOMAIN,
3058 },
3059 /* Camera */
3060 {
3061 .name = "jpegd_src",
3062 .domain = CAMERA_DOMAIN,
3063 },
3064 /* Camera */
3065 {
3066 .name = "jpegd_dst",
3067 .domain = CAMERA_DOMAIN,
3068 },
3069 /* Rotator */
3070 {
3071 .name = "rot_src",
Olav Hauganef95ae32012-05-15 09:50:30 -07003072 .domain = ROTATOR_SRC_DOMAIN,
Laura Abbottd92be422012-06-04 15:11:09 -07003073 },
3074 /* Rotator */
3075 {
3076 .name = "rot_dst",
Olav Hauganef95ae32012-05-15 09:50:30 -07003077 .domain = ROTATOR_SRC_DOMAIN,
Laura Abbottd92be422012-06-04 15:11:09 -07003078 },
3079 /* Video */
3080 {
3081 .name = "vcodec_a_mm1",
3082 .domain = VIDEO_DOMAIN,
3083 },
3084 /* Video */
3085 {
3086 .name = "vcodec_b_mm2",
3087 .domain = VIDEO_DOMAIN,
3088 },
3089 /* Video */
3090 {
3091 .name = "vcodec_a_stream",
3092 .domain = VIDEO_DOMAIN,
3093 },
3094};
3095
3096static struct mem_pool msm8660_video_pools[] = {
3097 /*
3098 * Video hardware has the following requirements:
3099 * 1. All video addresses used by the video hardware must be at a higher
3100 * address than video firmware address.
3101 * 2. Video hardware can only access a range of 256MB from the base of
3102 * the video firmware.
3103 */
3104 [VIDEO_FIRMWARE_POOL] =
3105 /* Low addresses, intended for video firmware */
3106 {
3107 .paddr = SZ_128K,
3108 .size = SZ_16M - SZ_128K,
3109 },
3110 [VIDEO_MAIN_POOL] =
3111 /* Main video pool */
3112 {
3113 .paddr = SZ_16M,
3114 .size = SZ_256M - SZ_16M,
3115 },
3116 [GEN_POOL] =
3117 /* Remaining address space up to 2G */
3118 {
3119 .paddr = SZ_256M,
3120 .size = SZ_2G - SZ_256M,
3121 },
3122};
3123
3124static struct mem_pool msm8660_camera_pools[] = {
3125 [GEN_POOL] =
3126 /* One address space for camera */
3127 {
3128 .paddr = SZ_128K,
3129 .size = SZ_2G - SZ_128K,
3130 },
3131};
3132
3133static struct mem_pool msm8660_display_pools[] = {
3134 [GEN_POOL] =
3135 /* One address space for display */
3136 {
3137 .paddr = SZ_128K,
3138 .size = SZ_2G - SZ_128K,
3139 },
3140};
3141
3142static struct mem_pool msm8660_rotator_pools[] = {
3143 [GEN_POOL] =
3144 /* One address space for rotator */
3145 {
3146 .paddr = SZ_128K,
3147 .size = SZ_2G - SZ_128K,
3148 },
3149};
3150
3151static struct msm_iommu_domain msm8660_iommu_domains[] = {
3152 [VIDEO_DOMAIN] = {
3153 .iova_pools = msm8660_video_pools,
3154 .npools = ARRAY_SIZE(msm8660_video_pools),
3155 },
3156 [CAMERA_DOMAIN] = {
3157 .iova_pools = msm8660_camera_pools,
3158 .npools = ARRAY_SIZE(msm8660_camera_pools),
3159 },
Olav Hauganef95ae32012-05-15 09:50:30 -07003160 [DISPLAY_READ_DOMAIN] = {
Laura Abbottd92be422012-06-04 15:11:09 -07003161 .iova_pools = msm8660_display_pools,
3162 .npools = ARRAY_SIZE(msm8660_display_pools),
3163 },
Olav Hauganef95ae32012-05-15 09:50:30 -07003164 [ROTATOR_SRC_DOMAIN] = {
Laura Abbottd92be422012-06-04 15:11:09 -07003165 .iova_pools = msm8660_rotator_pools,
3166 .npools = ARRAY_SIZE(msm8660_rotator_pools),
3167 },
3168};
3169
3170struct iommu_domains_pdata msm8660_iommu_domain_pdata = {
3171 .domains = msm8660_iommu_domains,
3172 .ndomains = ARRAY_SIZE(msm8660_iommu_domains),
3173 .domain_names = msm8660_iommu_ctx_names,
3174 .nnames = ARRAY_SIZE(msm8660_iommu_ctx_names),
3175 .domain_alloc_flags = 0,
3176};
3177
3178struct platform_device msm8660_iommu_domain_device = {
3179 .name = "iommu_domains",
3180 .id = -1,
3181 .dev = {
3182 .platform_data = &msm8660_iommu_domain_pdata,
3183 }
3184};
Praveen Chidambaramf27a5152013-02-01 11:44:53 -07003185
3186struct platform_device msm8660_pm_8x60 = {
3187 .name = "pm-8x60",
3188 .id = -1,
3189};
3190