blob: 0190bd4acf735f57eec3a08d8466abdb03249e17 [file] [log] [blame]
Abhijeet Dharmapurikar7e37e6e2012-08-23 18:58:44 -07001/* Copyright (c) 2011-2012, 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/list.h>
16#include <linux/platform_device.h>
17#include <linux/msm_rotator.h>
Mitchel Humpherys7e93a652012-09-06 11:36:08 -070018#include <linux/msm_ion.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070019#include <linux/gpio.h>
Pratik Patel1746b8f2012-06-02 21:11:41 -070020#include <linux/coresight.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070021#include <asm/clkdev.h>
Jordan Crouse914de9b2012-07-09 13:49:46 -060022#include <mach/kgsl.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070023#include <linux/android_pmem.h>
24#include <mach/irqs-8960.h>
Mayank Rana9f51f582011-08-04 18:35:59 +053025#include <mach/dma.h>
26#include <linux/dma-mapping.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070027#include <mach/board.h>
28#include <mach/msm_iomap.h>
29#include <mach/msm_hsusb.h>
30#include <mach/msm_sps.h>
31#include <mach/rpm.h>
32#include <mach/msm_bus_board.h>
33#include <mach/msm_memtypes.h>
Eric Holmberg023d25c2012-03-01 12:27:55 -070034#include <mach/msm_smd.h>
Lucille Sylvester6e362412011-12-09 16:21:42 -070035#include <mach/msm_dcvs.h>
Laura Abbott532b2df2012-04-12 10:53:48 -070036#include <mach/msm_rtb.h>
Laura Abbott2ae8f362012-04-12 11:03:04 -070037#include <mach/msm_cache_dump.h>
Matt Wagantalld55b90f2012-02-23 23:27:44 -080038#include <mach/clk-provider.h>
Bhalchandra Gajare0e795c42011-08-15 18:10:30 -070039#include <sound/msm-dai-q6.h>
40#include <sound/apr_audio.h>
Joel Nidera1261942011-09-12 16:30:09 +030041#include <mach/msm_tsif.h>
Stepan Moskovchenko2b4b1cd2012-03-29 18:21:04 -070042#include <mach/msm_serial_hs_lite.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070043#include "clock.h"
44#include "devices.h"
45#include "devices-msm8x60.h"
46#include "footswitch.h"
Jeff Ohlstein7e668552011-10-06 16:17:25 -070047#include "msm_watchdog.h"
Praveen Chidambaram78499012011-11-01 17:15:17 -060048#include "rpm_log.h"
Praveen Chidambaram7a712232011-10-28 13:39:45 -060049#include "rpm_stats.h"
Stephen Boydeb819882011-08-29 14:46:30 -070050#include "pil-q6v4.h"
51#include "scm-pas.h"
Praveen Chidambaram5c8adf22012-02-23 18:44:37 -070052#include <mach/msm_dcvs.h>
Laura Abbott0577d7b2012-04-17 11:14:30 -070053#include <mach/iommu_domains.h>
Arun Menond4837f62012-08-20 15:25:50 -070054#include <mach/socinfo.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070055
56#ifdef CONFIG_MSM_MPM
Subhash Jadavani909e04f2012-04-12 10:52:50 +053057#include <mach/mpm.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070058#endif
59#ifdef CONFIG_MSM_DSPS
60#include <mach/msm_dsps.h>
61#endif
62
63
64/* Address of GSBI blocks */
65#define MSM_GSBI1_PHYS 0x16000000
66#define MSM_GSBI2_PHYS 0x16100000
67#define MSM_GSBI3_PHYS 0x16200000
68#define MSM_GSBI4_PHYS 0x16300000
69#define MSM_GSBI5_PHYS 0x16400000
70#define MSM_GSBI6_PHYS 0x16500000
71#define MSM_GSBI7_PHYS 0x16600000
72#define MSM_GSBI8_PHYS 0x1A000000
73#define MSM_GSBI9_PHYS 0x1A100000
74#define MSM_GSBI10_PHYS 0x1A200000
75#define MSM_GSBI11_PHYS 0x12440000
76#define MSM_GSBI12_PHYS 0x12480000
77
78#define MSM_UART2DM_PHYS (MSM_GSBI2_PHYS + 0x40000)
79#define MSM_UART5DM_PHYS (MSM_GSBI5_PHYS + 0x40000)
Mayank Rana9f51f582011-08-04 18:35:59 +053080#define MSM_UART6DM_PHYS (MSM_GSBI6_PHYS + 0x40000)
Stepan Moskovchenko2b4b1cd2012-03-29 18:21:04 -070081#define MSM_UART8DM_PHYS (MSM_GSBI8_PHYS + 0x40000)
Mayank Ranae009c922012-03-22 03:02:06 +053082#define MSM_UART9DM_PHYS (MSM_GSBI9_PHYS + 0x40000)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070083
84/* GSBI QUP devices */
85#define MSM_GSBI1_QUP_PHYS (MSM_GSBI1_PHYS + 0x80000)
86#define MSM_GSBI2_QUP_PHYS (MSM_GSBI2_PHYS + 0x80000)
87#define MSM_GSBI3_QUP_PHYS (MSM_GSBI3_PHYS + 0x80000)
88#define MSM_GSBI4_QUP_PHYS (MSM_GSBI4_PHYS + 0x80000)
89#define MSM_GSBI5_QUP_PHYS (MSM_GSBI5_PHYS + 0x80000)
90#define MSM_GSBI6_QUP_PHYS (MSM_GSBI6_PHYS + 0x80000)
91#define MSM_GSBI7_QUP_PHYS (MSM_GSBI7_PHYS + 0x80000)
92#define MSM_GSBI8_QUP_PHYS (MSM_GSBI8_PHYS + 0x80000)
93#define MSM_GSBI9_QUP_PHYS (MSM_GSBI9_PHYS + 0x80000)
94#define MSM_GSBI10_QUP_PHYS (MSM_GSBI10_PHYS + 0x80000)
95#define MSM_GSBI11_QUP_PHYS (MSM_GSBI11_PHYS + 0x20000)
96#define MSM_GSBI12_QUP_PHYS (MSM_GSBI12_PHYS + 0x20000)
97#define MSM_QUP_SIZE SZ_4K
98
99#define MSM_PMIC1_SSBI_CMD_PHYS 0x00500000
100#define MSM_PMIC2_SSBI_CMD_PHYS 0x00C00000
101#define MSM_PMIC_SSBI_SIZE SZ_4K
102
Stepan Moskovchenkobe5b45a2011-10-17 19:33:34 -0700103#define MSM8960_HSUSB_PHYS 0x12500000
104#define MSM8960_HSUSB_SIZE SZ_4K
Anji Jonnala2a8bd312012-11-01 13:11:42 +0530105#define MSM8960_RPM_MASTER_STATS_BASE 0x10BB00
Stepan Moskovchenkobe5b45a2011-10-17 19:33:34 -0700106
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700107static struct resource resources_otg[] = {
108 {
109 .start = MSM8960_HSUSB_PHYS,
110 .end = MSM8960_HSUSB_PHYS + MSM8960_HSUSB_SIZE,
111 .flags = IORESOURCE_MEM,
112 },
113 {
114 .start = USB1_HS_IRQ,
115 .end = USB1_HS_IRQ,
116 .flags = IORESOURCE_IRQ,
117 },
118};
119
Stepan Moskovchenko14aa6492011-08-08 15:15:01 -0700120struct platform_device msm8960_device_otg = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700121 .name = "msm_otg",
122 .id = -1,
123 .num_resources = ARRAY_SIZE(resources_otg),
124 .resource = resources_otg,
125 .dev = {
126 .coherent_dma_mask = 0xffffffff,
127 },
128};
129
130static struct resource resources_hsusb[] = {
131 {
132 .start = MSM8960_HSUSB_PHYS,
133 .end = MSM8960_HSUSB_PHYS + MSM8960_HSUSB_SIZE,
134 .flags = IORESOURCE_MEM,
135 },
136 {
137 .start = USB1_HS_IRQ,
138 .end = USB1_HS_IRQ,
139 .flags = IORESOURCE_IRQ,
140 },
141};
142
Stepan Moskovchenko14aa6492011-08-08 15:15:01 -0700143struct platform_device msm8960_device_gadget_peripheral = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700144 .name = "msm_hsusb",
145 .id = -1,
146 .num_resources = ARRAY_SIZE(resources_hsusb),
147 .resource = resources_hsusb,
148 .dev = {
149 .coherent_dma_mask = 0xffffffff,
150 },
151};
152
153static struct resource resources_hsusb_host[] = {
154 {
155 .start = MSM8960_HSUSB_PHYS,
156 .end = MSM8960_HSUSB_PHYS + MSM8960_HSUSB_SIZE - 1,
157 .flags = IORESOURCE_MEM,
158 },
159 {
160 .start = USB1_HS_IRQ,
161 .end = USB1_HS_IRQ,
162 .flags = IORESOURCE_IRQ,
163 },
164};
165
Vijayavardhan Vennapusaeb566482011-09-18 07:48:37 +0530166static u64 dma_mask = DMA_BIT_MASK(32);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700167struct platform_device msm_device_hsusb_host = {
168 .name = "msm_hsusb_host",
169 .id = -1,
170 .num_resources = ARRAY_SIZE(resources_hsusb_host),
171 .resource = resources_hsusb_host,
172 .dev = {
173 .dma_mask = &dma_mask,
174 .coherent_dma_mask = 0xffffffff,
175 },
176};
177
Vijayavardhan Vennapusaeb566482011-09-18 07:48:37 +0530178static struct resource resources_hsic_host[] = {
179 {
Stepan Moskovchenko8e06ae62011-10-17 18:01:29 -0700180 .start = 0x12520000,
181 .end = 0x12520000 + SZ_4K - 1,
Vijayavardhan Vennapusaeb566482011-09-18 07:48:37 +0530182 .flags = IORESOURCE_MEM,
183 },
184 {
185 .start = USB_HSIC_IRQ,
186 .end = USB_HSIC_IRQ,
187 .flags = IORESOURCE_IRQ,
188 },
Vamsi Krishna34f01582011-12-14 19:54:42 -0800189 {
190 .start = MSM_GPIO_TO_INT(69),
191 .end = MSM_GPIO_TO_INT(69),
192 .name = "peripheral_status_irq",
193 .flags = IORESOURCE_IRQ,
194 },
Vijayavardhan Vennapusaeb566482011-09-18 07:48:37 +0530195};
196
197struct platform_device msm_device_hsic_host = {
198 .name = "msm_hsic_host",
199 .id = -1,
200 .num_resources = ARRAY_SIZE(resources_hsic_host),
201 .resource = resources_hsic_host,
202 .dev = {
203 .dma_mask = &dma_mask,
204 .coherent_dma_mask = DMA_BIT_MASK(32),
205 },
206};
207
Matt Wagantallbf430eb2012-03-22 11:45:49 -0700208struct platform_device msm8960_device_acpuclk = {
209 .name = "acpuclk-8960",
210 .id = -1,
211};
212
Patrick Daly6578e0c2012-07-19 18:50:02 -0700213struct platform_device msm8960ab_device_acpuclk = {
214 .name = "acpuclk-8960ab",
215 .id = -1,
216};
217
Mona Hossain11c03ac2011-10-26 12:42:10 -0700218#define SHARED_IMEM_TZ_BASE 0x2a03f720
219static struct resource tzlog_resources[] = {
220 {
221 .start = SHARED_IMEM_TZ_BASE,
222 .end = SHARED_IMEM_TZ_BASE + SZ_4K - 1,
223 .flags = IORESOURCE_MEM,
224 },
225};
226
227struct platform_device msm_device_tz_log = {
228 .name = "tz_log",
229 .id = 0,
230 .num_resources = ARRAY_SIZE(tzlog_resources),
231 .resource = tzlog_resources,
232};
233
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700234static struct resource resources_uart_gsbi2[] = {
235 {
236 .start = MSM8960_GSBI2_UARTDM_IRQ,
237 .end = MSM8960_GSBI2_UARTDM_IRQ,
238 .flags = IORESOURCE_IRQ,
239 },
240 {
241 .start = MSM_UART2DM_PHYS,
242 .end = MSM_UART2DM_PHYS + PAGE_SIZE - 1,
243 .name = "uartdm_resource",
244 .flags = IORESOURCE_MEM,
245 },
246 {
247 .start = MSM_GSBI2_PHYS,
248 .end = MSM_GSBI2_PHYS + PAGE_SIZE - 1,
249 .name = "gsbi_resource",
250 .flags = IORESOURCE_MEM,
251 },
252};
253
254struct platform_device msm8960_device_uart_gsbi2 = {
255 .name = "msm_serial_hsl",
256 .id = 0,
257 .num_resources = ARRAY_SIZE(resources_uart_gsbi2),
258 .resource = resources_uart_gsbi2,
259};
Mayank Rana9f51f582011-08-04 18:35:59 +0530260/* GSBI 6 used into UARTDM Mode */
261static struct resource msm_uart_dm6_resources[] = {
262 {
263 .start = MSM_UART6DM_PHYS,
264 .end = MSM_UART6DM_PHYS + PAGE_SIZE - 1,
265 .name = "uartdm_resource",
266 .flags = IORESOURCE_MEM,
267 },
268 {
269 .start = GSBI6_UARTDM_IRQ,
270 .end = GSBI6_UARTDM_IRQ,
271 .flags = IORESOURCE_IRQ,
272 },
273 {
274 .start = MSM_GSBI6_PHYS,
275 .end = MSM_GSBI6_PHYS + 4 - 1,
276 .name = "gsbi_resource",
277 .flags = IORESOURCE_MEM,
278 },
279 {
280 .start = DMOV_HSUART_GSBI6_TX_CHAN,
281 .end = DMOV_HSUART_GSBI6_RX_CHAN,
282 .name = "uartdm_channels",
283 .flags = IORESOURCE_DMA,
284 },
285 {
286 .start = DMOV_HSUART_GSBI6_TX_CRCI,
287 .end = DMOV_HSUART_GSBI6_RX_CRCI,
288 .name = "uartdm_crci",
289 .flags = IORESOURCE_DMA,
290 },
291};
292static u64 msm_uart_dm6_dma_mask = DMA_BIT_MASK(32);
293struct platform_device msm_device_uart_dm6 = {
294 .name = "msm_serial_hs",
295 .id = 0,
296 .num_resources = ARRAY_SIZE(msm_uart_dm6_resources),
297 .resource = msm_uart_dm6_resources,
298 .dev = {
299 .dma_mask = &msm_uart_dm6_dma_mask,
300 .coherent_dma_mask = DMA_BIT_MASK(32),
301 },
302};
Mayank Rana1f02d952012-07-04 19:11:20 +0530303
304/* GSBI 8 used into UARTDM Mode */
305static struct resource msm_uart_dm8_resources[] = {
306 {
307 .start = MSM_UART8DM_PHYS,
308 .end = MSM_UART8DM_PHYS + PAGE_SIZE - 1,
309 .name = "uartdm_resource",
310 .flags = IORESOURCE_MEM,
311 },
312 {
313 .start = GSBI8_UARTDM_IRQ,
314 .end = GSBI8_UARTDM_IRQ,
315 .flags = IORESOURCE_IRQ,
316 },
317 {
318 .start = MSM_GSBI8_PHYS,
319 .end = MSM_GSBI8_PHYS + 4 - 1,
320 .name = "gsbi_resource",
321 .flags = IORESOURCE_MEM,
322 },
323 {
324 .start = DMOV_HSUART_GSBI8_TX_CHAN,
325 .end = DMOV_HSUART_GSBI8_RX_CHAN,
326 .name = "uartdm_channels",
327 .flags = IORESOURCE_DMA,
328 },
329 {
330 .start = DMOV_HSUART_GSBI8_TX_CRCI,
331 .end = DMOV_HSUART_GSBI8_RX_CRCI,
332 .name = "uartdm_crci",
333 .flags = IORESOURCE_DMA,
334 },
335};
336
337static u64 msm_uart_dm8_dma_mask = DMA_BIT_MASK(32);
338struct platform_device msm_device_uart_dm8 = {
339 .name = "msm_serial_hs",
340 .id = 2,
341 .num_resources = ARRAY_SIZE(msm_uart_dm8_resources),
342 .resource = msm_uart_dm8_resources,
343 .dev = {
344 .dma_mask = &msm_uart_dm8_dma_mask,
345 .coherent_dma_mask = DMA_BIT_MASK(32),
346 },
347};
348
Mayank Ranae009c922012-03-22 03:02:06 +0530349/*
350 * GSBI 9 used into UARTDM Mode
351 * For 8960 Fusion 2.2 Primary IPC
352 */
353static struct resource msm_uart_dm9_resources[] = {
354 {
355 .start = MSM_UART9DM_PHYS,
356 .end = MSM_UART9DM_PHYS + PAGE_SIZE - 1,
357 .name = "uartdm_resource",
358 .flags = IORESOURCE_MEM,
359 },
360 {
361 .start = GSBI9_UARTDM_IRQ,
362 .end = GSBI9_UARTDM_IRQ,
363 .flags = IORESOURCE_IRQ,
364 },
365 {
366 .start = MSM_GSBI9_PHYS,
367 .end = MSM_GSBI9_PHYS + 4 - 1,
368 .name = "gsbi_resource",
369 .flags = IORESOURCE_MEM,
370 },
371 {
372 .start = DMOV_HSUART_GSBI9_TX_CHAN,
373 .end = DMOV_HSUART_GSBI9_RX_CHAN,
374 .name = "uartdm_channels",
375 .flags = IORESOURCE_DMA,
376 },
377 {
378 .start = DMOV_HSUART_GSBI9_TX_CRCI,
379 .end = DMOV_HSUART_GSBI9_RX_CRCI,
380 .name = "uartdm_crci",
381 .flags = IORESOURCE_DMA,
382 },
383};
384static u64 msm_uart_dm9_dma_mask = DMA_BIT_MASK(32);
385struct platform_device msm_device_uart_dm9 = {
386 .name = "msm_serial_hs",
387 .id = 1,
388 .num_resources = ARRAY_SIZE(msm_uart_dm9_resources),
389 .resource = msm_uart_dm9_resources,
390 .dev = {
391 .dma_mask = &msm_uart_dm9_dma_mask,
392 .coherent_dma_mask = DMA_BIT_MASK(32),
393 },
394};
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700395
396static struct resource resources_uart_gsbi5[] = {
397 {
398 .start = GSBI5_UARTDM_IRQ,
399 .end = GSBI5_UARTDM_IRQ,
400 .flags = IORESOURCE_IRQ,
401 },
402 {
403 .start = MSM_UART5DM_PHYS,
404 .end = MSM_UART5DM_PHYS + PAGE_SIZE - 1,
405 .name = "uartdm_resource",
406 .flags = IORESOURCE_MEM,
407 },
408 {
409 .start = MSM_GSBI5_PHYS,
410 .end = MSM_GSBI5_PHYS + PAGE_SIZE - 1,
411 .name = "gsbi_resource",
412 .flags = IORESOURCE_MEM,
413 },
414};
415
416struct platform_device msm8960_device_uart_gsbi5 = {
417 .name = "msm_serial_hsl",
418 .id = 0,
419 .num_resources = ARRAY_SIZE(resources_uart_gsbi5),
420 .resource = resources_uart_gsbi5,
421};
Stepan Moskovchenko2b4b1cd2012-03-29 18:21:04 -0700422
423static struct msm_serial_hslite_platform_data uart_gsbi8_pdata = {
424 .line = 0,
425};
426
427static struct resource resources_uart_gsbi8[] = {
428 {
429 .start = GSBI8_UARTDM_IRQ,
430 .end = GSBI8_UARTDM_IRQ,
431 .flags = IORESOURCE_IRQ,
432 },
433 {
434 .start = MSM_UART8DM_PHYS,
435 .end = MSM_UART8DM_PHYS + PAGE_SIZE - 1,
436 .name = "uartdm_resource",
437 .flags = IORESOURCE_MEM,
438 },
439 {
440 .start = MSM_GSBI8_PHYS,
441 .end = MSM_GSBI8_PHYS + PAGE_SIZE - 1,
442 .name = "gsbi_resource",
443 .flags = IORESOURCE_MEM,
444 },
445};
446
447struct platform_device msm8960_device_uart_gsbi8 = {
448 .name = "msm_serial_hsl",
449 .id = 1,
450 .num_resources = ARRAY_SIZE(resources_uart_gsbi8),
451 .resource = resources_uart_gsbi8,
452 .dev.platform_data = &uart_gsbi8_pdata,
453};
454
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700455/* MSM Video core device */
456#ifdef CONFIG_MSM_BUS_SCALING
457static struct msm_bus_vectors vidc_init_vectors[] = {
458 {
459 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
460 .dst = MSM_BUS_SLAVE_EBI_CH0,
461 .ab = 0,
462 .ib = 0,
463 },
464 {
465 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
466 .dst = MSM_BUS_SLAVE_EBI_CH0,
467 .ab = 0,
468 .ib = 0,
469 },
470 {
471 .src = MSM_BUS_MASTER_AMPSS_M0,
472 .dst = MSM_BUS_SLAVE_EBI_CH0,
473 .ab = 0,
474 .ib = 0,
475 },
476 {
477 .src = MSM_BUS_MASTER_AMPSS_M0,
478 .dst = MSM_BUS_SLAVE_EBI_CH0,
479 .ab = 0,
480 .ib = 0,
481 },
482};
483static struct msm_bus_vectors vidc_venc_vga_vectors[] = {
484 {
485 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
486 .dst = MSM_BUS_SLAVE_EBI_CH0,
487 .ab = 54525952,
488 .ib = 436207616,
489 },
490 {
491 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
492 .dst = MSM_BUS_SLAVE_EBI_CH0,
493 .ab = 72351744,
494 .ib = 289406976,
495 },
496 {
497 .src = MSM_BUS_MASTER_AMPSS_M0,
498 .dst = MSM_BUS_SLAVE_EBI_CH0,
499 .ab = 500000,
500 .ib = 1000000,
501 },
502 {
503 .src = MSM_BUS_MASTER_AMPSS_M0,
504 .dst = MSM_BUS_SLAVE_EBI_CH0,
505 .ab = 500000,
506 .ib = 1000000,
507 },
508};
509static struct msm_bus_vectors vidc_vdec_vga_vectors[] = {
510 {
511 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
512 .dst = MSM_BUS_SLAVE_EBI_CH0,
513 .ab = 40894464,
514 .ib = 327155712,
515 },
516 {
517 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
518 .dst = MSM_BUS_SLAVE_EBI_CH0,
519 .ab = 48234496,
520 .ib = 192937984,
521 },
522 {
523 .src = MSM_BUS_MASTER_AMPSS_M0,
524 .dst = MSM_BUS_SLAVE_EBI_CH0,
525 .ab = 500000,
526 .ib = 2000000,
527 },
528 {
529 .src = MSM_BUS_MASTER_AMPSS_M0,
530 .dst = MSM_BUS_SLAVE_EBI_CH0,
531 .ab = 500000,
532 .ib = 2000000,
533 },
534};
535static struct msm_bus_vectors vidc_venc_720p_vectors[] = {
536 {
537 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
538 .dst = MSM_BUS_SLAVE_EBI_CH0,
539 .ab = 163577856,
540 .ib = 1308622848,
541 },
542 {
543 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
544 .dst = MSM_BUS_SLAVE_EBI_CH0,
545 .ab = 219152384,
546 .ib = 876609536,
547 },
548 {
549 .src = MSM_BUS_MASTER_AMPSS_M0,
550 .dst = MSM_BUS_SLAVE_EBI_CH0,
551 .ab = 1750000,
552 .ib = 3500000,
553 },
554 {
555 .src = MSM_BUS_MASTER_AMPSS_M0,
556 .dst = MSM_BUS_SLAVE_EBI_CH0,
557 .ab = 1750000,
558 .ib = 3500000,
559 },
560};
561static struct msm_bus_vectors vidc_vdec_720p_vectors[] = {
562 {
563 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
564 .dst = MSM_BUS_SLAVE_EBI_CH0,
565 .ab = 121634816,
566 .ib = 973078528,
567 },
568 {
569 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
570 .dst = MSM_BUS_SLAVE_EBI_CH0,
571 .ab = 155189248,
572 .ib = 620756992,
573 },
574 {
575 .src = MSM_BUS_MASTER_AMPSS_M0,
576 .dst = MSM_BUS_SLAVE_EBI_CH0,
577 .ab = 1750000,
578 .ib = 7000000,
579 },
580 {
581 .src = MSM_BUS_MASTER_AMPSS_M0,
582 .dst = MSM_BUS_SLAVE_EBI_CH0,
583 .ab = 1750000,
584 .ib = 7000000,
585 },
586};
587static struct msm_bus_vectors vidc_venc_1080p_vectors[] = {
588 {
589 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
590 .dst = MSM_BUS_SLAVE_EBI_CH0,
591 .ab = 372244480,
Gopikrishnaiah Anandan3e6bdda2011-11-04 16:05:04 -0700592 .ib = 2560000000U,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700593 },
594 {
595 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
596 .dst = MSM_BUS_SLAVE_EBI_CH0,
597 .ab = 501219328,
Gopikrishnaiah Anandan3e6bdda2011-11-04 16:05:04 -0700598 .ib = 2560000000U,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700599 },
600 {
601 .src = MSM_BUS_MASTER_AMPSS_M0,
602 .dst = MSM_BUS_SLAVE_EBI_CH0,
603 .ab = 2500000,
604 .ib = 5000000,
605 },
606 {
607 .src = MSM_BUS_MASTER_AMPSS_M0,
608 .dst = MSM_BUS_SLAVE_EBI_CH0,
609 .ab = 2500000,
610 .ib = 5000000,
611 },
612};
613static struct msm_bus_vectors vidc_vdec_1080p_vectors[] = {
614 {
615 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
616 .dst = MSM_BUS_SLAVE_EBI_CH0,
617 .ab = 222298112,
Gopikrishnaiah Anandan3e6bdda2011-11-04 16:05:04 -0700618 .ib = 2560000000U,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700619 },
620 {
621 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
622 .dst = MSM_BUS_SLAVE_EBI_CH0,
623 .ab = 330301440,
Gopikrishnaiah Anandan3e6bdda2011-11-04 16:05:04 -0700624 .ib = 2560000000U,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700625 },
626 {
627 .src = MSM_BUS_MASTER_AMPSS_M0,
628 .dst = MSM_BUS_SLAVE_EBI_CH0,
629 .ab = 2500000,
630 .ib = 700000000,
631 },
632 {
633 .src = MSM_BUS_MASTER_AMPSS_M0,
634 .dst = MSM_BUS_SLAVE_EBI_CH0,
635 .ab = 2500000,
636 .ib = 10000000,
637 },
638};
Deva Ramasubramanian837ae362012-05-12 23:26:53 -0700639static struct msm_bus_vectors vidc_venc_1080p_turbo_vectors[] = {
640 {
641 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
642 .dst = MSM_BUS_SLAVE_EBI_CH0,
643 .ab = 222298112,
644 .ib = 3522000000U,
645 },
646 {
647 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
648 .dst = MSM_BUS_SLAVE_EBI_CH0,
649 .ab = 330301440,
650 .ib = 3522000000U,
651 },
652 {
653 .src = MSM_BUS_MASTER_AMPSS_M0,
654 .dst = MSM_BUS_SLAVE_EBI_CH0,
655 .ab = 2500000,
656 .ib = 700000000,
657 },
658 {
659 .src = MSM_BUS_MASTER_AMPSS_M0,
660 .dst = MSM_BUS_SLAVE_EBI_CH0,
661 .ab = 2500000,
662 .ib = 10000000,
663 },
664};
665static struct msm_bus_vectors vidc_vdec_1080p_turbo_vectors[] = {
666 {
667 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
668 .dst = MSM_BUS_SLAVE_EBI_CH0,
669 .ab = 222298112,
670 .ib = 3522000000U,
671 },
672 {
673 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
674 .dst = MSM_BUS_SLAVE_EBI_CH0,
675 .ab = 330301440,
676 .ib = 3522000000U,
677 },
678 {
679 .src = MSM_BUS_MASTER_AMPSS_M0,
680 .dst = MSM_BUS_SLAVE_EBI_CH0,
681 .ab = 2500000,
682 .ib = 700000000,
683 },
684 {
685 .src = MSM_BUS_MASTER_AMPSS_M0,
686 .dst = MSM_BUS_SLAVE_EBI_CH0,
687 .ab = 2500000,
688 .ib = 10000000,
689 },
690};
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700691
692static struct msm_bus_paths vidc_bus_client_config[] = {
693 {
694 ARRAY_SIZE(vidc_init_vectors),
695 vidc_init_vectors,
696 },
697 {
698 ARRAY_SIZE(vidc_venc_vga_vectors),
699 vidc_venc_vga_vectors,
700 },
701 {
702 ARRAY_SIZE(vidc_vdec_vga_vectors),
703 vidc_vdec_vga_vectors,
704 },
705 {
706 ARRAY_SIZE(vidc_venc_720p_vectors),
707 vidc_venc_720p_vectors,
708 },
709 {
710 ARRAY_SIZE(vidc_vdec_720p_vectors),
711 vidc_vdec_720p_vectors,
712 },
713 {
714 ARRAY_SIZE(vidc_venc_1080p_vectors),
715 vidc_venc_1080p_vectors,
716 },
717 {
718 ARRAY_SIZE(vidc_vdec_1080p_vectors),
719 vidc_vdec_1080p_vectors,
720 },
Deva Ramasubramanian837ae362012-05-12 23:26:53 -0700721 {
722 ARRAY_SIZE(vidc_venc_1080p_turbo_vectors),
Arun Menond4837f62012-08-20 15:25:50 -0700723 vidc_venc_1080p_turbo_vectors,
Deva Ramasubramanian837ae362012-05-12 23:26:53 -0700724 },
725 {
726 ARRAY_SIZE(vidc_vdec_1080p_turbo_vectors),
727 vidc_vdec_1080p_turbo_vectors,
728 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700729};
730
731static struct msm_bus_scale_pdata vidc_bus_client_data = {
732 vidc_bus_client_config,
733 ARRAY_SIZE(vidc_bus_client_config),
734 .name = "vidc",
735};
Arun Menond4837f62012-08-20 15:25:50 -0700736
737static struct msm_bus_vectors vidc_pro_init_vectors[] = {
738 {
739 .src = MSM_BUS_MASTER_VIDEO_ENC,
740 .dst = MSM_BUS_SLAVE_EBI_CH0,
741 .ab = 0,
742 .ib = 0,
743 },
744 {
745 .src = MSM_BUS_MASTER_VIDEO_DEC,
746 .dst = MSM_BUS_SLAVE_EBI_CH0,
747 .ab = 0,
748 .ib = 0,
749 },
750 {
751 .src = MSM_BUS_MASTER_AMPSS_M0,
752 .dst = MSM_BUS_SLAVE_EBI_CH0,
753 .ab = 0,
754 .ib = 0,
755 },
756 {
757 .src = MSM_BUS_MASTER_AMPSS_M0,
758 .dst = MSM_BUS_SLAVE_EBI_CH0,
759 .ab = 0,
760 .ib = 0,
761 },
762};
763static struct msm_bus_vectors vidc_pro_venc_vga_vectors[] = {
764 {
765 .src = MSM_BUS_MASTER_VIDEO_ENC,
766 .dst = MSM_BUS_SLAVE_EBI_CH0,
767 .ab = 54525952,
768 .ib = 436207616,
769 },
770 {
771 .src = MSM_BUS_MASTER_VIDEO_DEC,
772 .dst = MSM_BUS_SLAVE_EBI_CH0,
773 .ab = 72351744,
774 .ib = 289406976,
775 },
776 {
777 .src = MSM_BUS_MASTER_AMPSS_M0,
778 .dst = MSM_BUS_SLAVE_EBI_CH0,
779 .ab = 500000,
780 .ib = 1000000,
781 },
782 {
783 .src = MSM_BUS_MASTER_AMPSS_M0,
784 .dst = MSM_BUS_SLAVE_EBI_CH0,
785 .ab = 500000,
786 .ib = 1000000,
787 },
788};
789static struct msm_bus_vectors vidc_pro_vdec_vga_vectors[] = {
790 {
791 .src = MSM_BUS_MASTER_VIDEO_ENC,
792 .dst = MSM_BUS_SLAVE_EBI_CH0,
793 .ab = 40894464,
794 .ib = 327155712,
795 },
796 {
797 .src = MSM_BUS_MASTER_VIDEO_DEC,
798 .dst = MSM_BUS_SLAVE_EBI_CH0,
799 .ab = 48234496,
800 .ib = 192937984,
801 },
802 {
803 .src = MSM_BUS_MASTER_AMPSS_M0,
804 .dst = MSM_BUS_SLAVE_EBI_CH0,
805 .ab = 500000,
806 .ib = 2000000,
807 },
808 {
809 .src = MSM_BUS_MASTER_AMPSS_M0,
810 .dst = MSM_BUS_SLAVE_EBI_CH0,
811 .ab = 500000,
812 .ib = 2000000,
813 },
814};
815static struct msm_bus_vectors vidc_pro_venc_720p_vectors[] = {
816 {
817 .src = MSM_BUS_MASTER_VIDEO_ENC,
818 .dst = MSM_BUS_SLAVE_EBI_CH0,
819 .ab = 163577856,
820 .ib = 1308622848,
821 },
822 {
823 .src = MSM_BUS_MASTER_VIDEO_DEC,
824 .dst = MSM_BUS_SLAVE_EBI_CH0,
825 .ab = 219152384,
826 .ib = 876609536,
827 },
828 {
829 .src = MSM_BUS_MASTER_AMPSS_M0,
830 .dst = MSM_BUS_SLAVE_EBI_CH0,
831 .ab = 1750000,
832 .ib = 3500000,
833 },
834 {
835 .src = MSM_BUS_MASTER_AMPSS_M0,
836 .dst = MSM_BUS_SLAVE_EBI_CH0,
837 .ab = 1750000,
838 .ib = 3500000,
839 },
840};
841static struct msm_bus_vectors vidc_pro_vdec_720p_vectors[] = {
842 {
843 .src = MSM_BUS_MASTER_VIDEO_ENC,
844 .dst = MSM_BUS_SLAVE_EBI_CH0,
845 .ab = 121634816,
846 .ib = 973078528,
847 },
848 {
849 .src = MSM_BUS_MASTER_VIDEO_DEC,
850 .dst = MSM_BUS_SLAVE_EBI_CH0,
851 .ab = 155189248,
852 .ib = 620756992,
853 },
854 {
855 .src = MSM_BUS_MASTER_AMPSS_M0,
856 .dst = MSM_BUS_SLAVE_EBI_CH0,
857 .ab = 1750000,
858 .ib = 7000000,
859 },
860 {
861 .src = MSM_BUS_MASTER_AMPSS_M0,
862 .dst = MSM_BUS_SLAVE_EBI_CH0,
863 .ab = 1750000,
864 .ib = 7000000,
865 },
866};
867static struct msm_bus_vectors vidc_pro_venc_1080p_vectors[] = {
868 {
869 .src = MSM_BUS_MASTER_VIDEO_ENC,
870 .dst = MSM_BUS_SLAVE_EBI_CH0,
871 .ab = 372244480,
872 .ib = 2560000000U,
873 },
874 {
875 .src = MSM_BUS_MASTER_VIDEO_DEC,
876 .dst = MSM_BUS_SLAVE_EBI_CH0,
877 .ab = 501219328,
878 .ib = 2560000000U,
879 },
880 {
881 .src = MSM_BUS_MASTER_AMPSS_M0,
882 .dst = MSM_BUS_SLAVE_EBI_CH0,
883 .ab = 2500000,
884 .ib = 5000000,
885 },
886 {
887 .src = MSM_BUS_MASTER_AMPSS_M0,
888 .dst = MSM_BUS_SLAVE_EBI_CH0,
889 .ab = 2500000,
890 .ib = 5000000,
891 },
892};
893static struct msm_bus_vectors vidc_pro_vdec_1080p_vectors[] = {
894 {
895 .src = MSM_BUS_MASTER_VIDEO_ENC,
896 .dst = MSM_BUS_SLAVE_EBI_CH0,
897 .ab = 222298112,
898 .ib = 2560000000U,
899 },
900 {
901 .src = MSM_BUS_MASTER_VIDEO_DEC,
902 .dst = MSM_BUS_SLAVE_EBI_CH0,
903 .ab = 330301440,
904 .ib = 2560000000U,
905 },
906 {
907 .src = MSM_BUS_MASTER_AMPSS_M0,
908 .dst = MSM_BUS_SLAVE_EBI_CH0,
909 .ab = 2500000,
910 .ib = 700000000,
911 },
912 {
913 .src = MSM_BUS_MASTER_AMPSS_M0,
914 .dst = MSM_BUS_SLAVE_EBI_CH0,
915 .ab = 2500000,
916 .ib = 10000000,
917 },
918};
919static struct msm_bus_vectors vidc_pro_venc_1080p_turbo_vectors[] = {
920 {
921 .src = MSM_BUS_MASTER_VIDEO_ENC,
922 .dst = MSM_BUS_SLAVE_EBI_CH0,
923 .ab = 222298112,
924 .ib = 3522000000U,
925 },
926 {
927 .src = MSM_BUS_MASTER_VIDEO_DEC,
928 .dst = MSM_BUS_SLAVE_EBI_CH0,
929 .ab = 330301440,
930 .ib = 3522000000U,
931 },
932 {
933 .src = MSM_BUS_MASTER_AMPSS_M0,
934 .dst = MSM_BUS_SLAVE_EBI_CH0,
935 .ab = 2500000,
936 .ib = 700000000,
937 },
938 {
939 .src = MSM_BUS_MASTER_AMPSS_M0,
940 .dst = MSM_BUS_SLAVE_EBI_CH0,
941 .ab = 2500000,
942 .ib = 10000000,
943 },
944};
945static struct msm_bus_vectors vidc_pro_vdec_1080p_turbo_vectors[] = {
946 {
947 .src = MSM_BUS_MASTER_VIDEO_ENC,
948 .dst = MSM_BUS_SLAVE_EBI_CH0,
949 .ab = 222298112,
950 .ib = 3522000000U,
951 },
952 {
953 .src = MSM_BUS_MASTER_VIDEO_DEC,
954 .dst = MSM_BUS_SLAVE_EBI_CH0,
955 .ab = 330301440,
956 .ib = 3522000000U,
957 },
958 {
959 .src = MSM_BUS_MASTER_AMPSS_M0,
960 .dst = MSM_BUS_SLAVE_EBI_CH0,
961 .ab = 2500000,
962 .ib = 700000000,
963 },
964 {
965 .src = MSM_BUS_MASTER_AMPSS_M0,
966 .dst = MSM_BUS_SLAVE_EBI_CH0,
967 .ab = 2500000,
968 .ib = 10000000,
969 },
970};
971
972static struct msm_bus_paths vidc_pro_bus_client_config[] = {
973 {
974 ARRAY_SIZE(vidc_pro_init_vectors),
975 vidc_pro_init_vectors,
976 },
977 {
978 ARRAY_SIZE(vidc_pro_venc_vga_vectors),
979 vidc_pro_venc_vga_vectors,
980 },
981 {
982 ARRAY_SIZE(vidc_pro_vdec_vga_vectors),
983 vidc_pro_vdec_vga_vectors,
984 },
985 {
986 ARRAY_SIZE(vidc_pro_venc_720p_vectors),
987 vidc_pro_venc_720p_vectors,
988 },
989 {
990 ARRAY_SIZE(vidc_pro_vdec_720p_vectors),
991 vidc_pro_vdec_720p_vectors,
992 },
993 {
994 ARRAY_SIZE(vidc_pro_venc_1080p_vectors),
995 vidc_pro_venc_1080p_vectors,
996 },
997 {
998 ARRAY_SIZE(vidc_pro_vdec_1080p_vectors),
999 vidc_pro_vdec_1080p_vectors,
1000 },
1001 {
1002 ARRAY_SIZE(vidc_pro_venc_1080p_turbo_vectors),
1003 vidc_pro_venc_1080p_turbo_vectors,
1004 },
1005 {
1006 ARRAY_SIZE(vidc_vdec_1080p_turbo_vectors),
1007 vidc_pro_vdec_1080p_turbo_vectors,
1008 },
1009};
1010
1011static struct msm_bus_scale_pdata vidc_pro_bus_client_data = {
1012 vidc_pro_bus_client_config,
1013 ARRAY_SIZE(vidc_bus_client_config),
1014 .name = "vidc",
1015};
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001016#endif
1017
Mona Hossain9c430e32011-07-27 11:04:47 -07001018#ifdef CONFIG_HW_RANDOM_MSM
1019/* PRNG device */
1020#define MSM_PRNG_PHYS 0x1A500000
1021static struct resource rng_resources = {
1022 .flags = IORESOURCE_MEM,
1023 .start = MSM_PRNG_PHYS,
1024 .end = MSM_PRNG_PHYS + SZ_512 - 1,
1025};
1026
1027struct platform_device msm_device_rng = {
1028 .name = "msm_rng",
1029 .id = 0,
1030 .num_resources = 1,
1031 .resource = &rng_resources,
1032};
1033#endif
1034
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001035#define MSM_VIDC_BASE_PHYS 0x04400000
1036#define MSM_VIDC_BASE_SIZE 0x00100000
1037
1038static struct resource msm_device_vidc_resources[] = {
1039 {
1040 .start = MSM_VIDC_BASE_PHYS,
1041 .end = MSM_VIDC_BASE_PHYS + MSM_VIDC_BASE_SIZE - 1,
1042 .flags = IORESOURCE_MEM,
1043 },
1044 {
1045 .start = VCODEC_IRQ,
1046 .end = VCODEC_IRQ,
1047 .flags = IORESOURCE_IRQ,
1048 },
1049};
1050
1051struct msm_vidc_platform_data vidc_platform_data = {
1052#ifdef CONFIG_MSM_BUS_SCALING
1053 .vidc_bus_client_pdata = &vidc_bus_client_data,
1054#endif
Deepak Koturcb4f6722011-10-31 14:06:57 -07001055#ifdef CONFIG_MSM_MULTIMEDIA_USE_ION
Olav Hauganb5be7992011-11-18 14:29:02 -08001056 .memtype = ION_CP_MM_HEAP_ID,
Deepak Koturcb4f6722011-10-31 14:06:57 -07001057 .enable_ion = 1,
Deepak kotur5f10b272012-03-15 22:01:39 -07001058 .cp_enabled = 1,
Deepak Koturcb4f6722011-10-31 14:06:57 -07001059#else
Deepak Kotur12301a72011-11-09 18:30:29 -08001060 .memtype = MEMTYPE_EBI1,
Deepak Koturcb4f6722011-10-31 14:06:57 -07001061 .enable_ion = 0,
1062#endif
Deepika Pepakayalabebc7622011-12-01 15:13:43 -08001063 .disable_dmx = 0,
Rajeshwar Kurapatyc155c352011-12-17 06:35:32 +05301064 .disable_fullhd = 0,
Mohan Kumar Gubbihalli Lachma Naiked9dc912012-03-01 19:11:14 -08001065 .cont_mode_dpb_count = 18,
Riaz Rahaman84f8c682012-05-30 13:32:10 +05301066 .fw_addr = 0x9fe00000,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001067};
1068
1069struct platform_device msm_device_vidc = {
1070 .name = "msm_vidc",
1071 .id = 0,
1072 .num_resources = ARRAY_SIZE(msm_device_vidc_resources),
1073 .resource = msm_device_vidc_resources,
1074 .dev = {
1075 .platform_data = &vidc_platform_data,
1076 },
1077};
1078
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001079#define MSM_SDC1_BASE 0x12400000
1080#define MSM_SDC1_DML_BASE (MSM_SDC1_BASE + 0x800)
1081#define MSM_SDC1_BAM_BASE (MSM_SDC1_BASE + 0x2000)
1082#define MSM_SDC2_BASE 0x12140000
1083#define MSM_SDC2_DML_BASE (MSM_SDC2_BASE + 0x800)
1084#define MSM_SDC2_BAM_BASE (MSM_SDC2_BASE + 0x2000)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001085#define MSM_SDC3_BASE 0x12180000
1086#define MSM_SDC3_DML_BASE (MSM_SDC3_BASE + 0x800)
1087#define MSM_SDC3_BAM_BASE (MSM_SDC3_BASE + 0x2000)
1088#define MSM_SDC4_BASE 0x121C0000
1089#define MSM_SDC4_DML_BASE (MSM_SDC4_BASE + 0x800)
1090#define MSM_SDC4_BAM_BASE (MSM_SDC4_BASE + 0x2000)
1091#define MSM_SDC5_BASE 0x12200000
1092#define MSM_SDC5_DML_BASE (MSM_SDC5_BASE + 0x800)
1093#define MSM_SDC5_BAM_BASE (MSM_SDC5_BASE + 0x2000)
1094
1095static struct resource resources_sdc1[] = {
1096 {
1097 .name = "core_mem",
1098 .flags = IORESOURCE_MEM,
1099 .start = MSM_SDC1_BASE,
1100 .end = MSM_SDC1_DML_BASE - 1,
1101 },
1102 {
1103 .name = "core_irq",
1104 .flags = IORESOURCE_IRQ,
1105 .start = SDC1_IRQ_0,
1106 .end = SDC1_IRQ_0
1107 },
1108#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1109 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301110 .name = "dml_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001111 .start = MSM_SDC1_DML_BASE,
1112 .end = MSM_SDC1_BAM_BASE - 1,
1113 .flags = IORESOURCE_MEM,
1114 },
1115 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301116 .name = "bam_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001117 .start = MSM_SDC1_BAM_BASE,
1118 .end = MSM_SDC1_BAM_BASE + (2 * SZ_4K) - 1,
1119 .flags = IORESOURCE_MEM,
1120 },
1121 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301122 .name = "bam_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001123 .start = SDC1_BAM_IRQ,
1124 .end = SDC1_BAM_IRQ,
1125 .flags = IORESOURCE_IRQ,
1126 },
1127#endif
1128};
1129
1130static struct resource resources_sdc2[] = {
1131 {
1132 .name = "core_mem",
1133 .flags = IORESOURCE_MEM,
1134 .start = MSM_SDC2_BASE,
1135 .end = MSM_SDC2_DML_BASE - 1,
1136 },
1137 {
1138 .name = "core_irq",
1139 .flags = IORESOURCE_IRQ,
1140 .start = SDC2_IRQ_0,
1141 .end = SDC2_IRQ_0
1142 },
1143#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1144 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301145 .name = "dml_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001146 .start = MSM_SDC2_DML_BASE,
1147 .end = MSM_SDC2_BAM_BASE - 1,
1148 .flags = IORESOURCE_MEM,
1149 },
1150 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301151 .name = "bam_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001152 .start = MSM_SDC2_BAM_BASE,
1153 .end = MSM_SDC2_BAM_BASE + (2 * SZ_4K) - 1,
1154 .flags = IORESOURCE_MEM,
1155 },
1156 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301157 .name = "bam_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001158 .start = SDC2_BAM_IRQ,
1159 .end = SDC2_BAM_IRQ,
1160 .flags = IORESOURCE_IRQ,
1161 },
1162#endif
1163};
1164
1165static struct resource resources_sdc3[] = {
1166 {
1167 .name = "core_mem",
1168 .flags = IORESOURCE_MEM,
1169 .start = MSM_SDC3_BASE,
1170 .end = MSM_SDC3_DML_BASE - 1,
1171 },
1172 {
1173 .name = "core_irq",
1174 .flags = IORESOURCE_IRQ,
1175 .start = SDC3_IRQ_0,
1176 .end = SDC3_IRQ_0
1177 },
1178#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1179 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301180 .name = "dml_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001181 .start = MSM_SDC3_DML_BASE,
1182 .end = MSM_SDC3_BAM_BASE - 1,
1183 .flags = IORESOURCE_MEM,
1184 },
1185 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301186 .name = "bam_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001187 .start = MSM_SDC3_BAM_BASE,
1188 .end = MSM_SDC3_BAM_BASE + (2 * SZ_4K) - 1,
1189 .flags = IORESOURCE_MEM,
1190 },
1191 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301192 .name = "bam_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001193 .start = SDC3_BAM_IRQ,
1194 .end = SDC3_BAM_IRQ,
1195 .flags = IORESOURCE_IRQ,
1196 },
1197#endif
1198};
1199
1200static struct resource resources_sdc4[] = {
1201 {
1202 .name = "core_mem",
1203 .flags = IORESOURCE_MEM,
1204 .start = MSM_SDC4_BASE,
1205 .end = MSM_SDC4_DML_BASE - 1,
1206 },
1207 {
1208 .name = "core_irq",
1209 .flags = IORESOURCE_IRQ,
1210 .start = SDC4_IRQ_0,
1211 .end = SDC4_IRQ_0
1212 },
1213#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1214 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301215 .name = "dml_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001216 .start = MSM_SDC4_DML_BASE,
1217 .end = MSM_SDC4_BAM_BASE - 1,
1218 .flags = IORESOURCE_MEM,
1219 },
1220 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301221 .name = "bam_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001222 .start = MSM_SDC4_BAM_BASE,
1223 .end = MSM_SDC4_BAM_BASE + (2 * SZ_4K) - 1,
1224 .flags = IORESOURCE_MEM,
1225 },
1226 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301227 .name = "bam_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001228 .start = SDC4_BAM_IRQ,
1229 .end = SDC4_BAM_IRQ,
1230 .flags = IORESOURCE_IRQ,
1231 },
1232#endif
1233};
1234
1235static struct resource resources_sdc5[] = {
1236 {
1237 .name = "core_mem",
1238 .flags = IORESOURCE_MEM,
1239 .start = MSM_SDC5_BASE,
1240 .end = MSM_SDC5_DML_BASE - 1,
1241 },
1242 {
1243 .name = "core_irq",
1244 .flags = IORESOURCE_IRQ,
1245 .start = SDC5_IRQ_0,
1246 .end = SDC5_IRQ_0
1247 },
1248#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1249 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301250 .name = "dml_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001251 .start = MSM_SDC5_DML_BASE,
1252 .end = MSM_SDC5_BAM_BASE - 1,
1253 .flags = IORESOURCE_MEM,
1254 },
1255 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301256 .name = "bam_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001257 .start = MSM_SDC5_BAM_BASE,
1258 .end = MSM_SDC5_BAM_BASE + (2 * SZ_4K) - 1,
1259 .flags = IORESOURCE_MEM,
1260 },
1261 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301262 .name = "bam_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001263 .start = SDC5_BAM_IRQ,
1264 .end = SDC5_BAM_IRQ,
1265 .flags = IORESOURCE_IRQ,
1266 },
1267#endif
1268};
1269
1270struct platform_device msm_device_sdc1 = {
1271 .name = "msm_sdcc",
1272 .id = 1,
1273 .num_resources = ARRAY_SIZE(resources_sdc1),
1274 .resource = resources_sdc1,
1275 .dev = {
1276 .coherent_dma_mask = 0xffffffff,
1277 },
1278};
1279
1280struct platform_device msm_device_sdc2 = {
1281 .name = "msm_sdcc",
1282 .id = 2,
1283 .num_resources = ARRAY_SIZE(resources_sdc2),
1284 .resource = resources_sdc2,
1285 .dev = {
1286 .coherent_dma_mask = 0xffffffff,
1287 },
1288};
1289
1290struct platform_device msm_device_sdc3 = {
1291 .name = "msm_sdcc",
1292 .id = 3,
1293 .num_resources = ARRAY_SIZE(resources_sdc3),
1294 .resource = resources_sdc3,
1295 .dev = {
1296 .coherent_dma_mask = 0xffffffff,
1297 },
1298};
1299
1300struct platform_device msm_device_sdc4 = {
1301 .name = "msm_sdcc",
1302 .id = 4,
1303 .num_resources = ARRAY_SIZE(resources_sdc4),
1304 .resource = resources_sdc4,
1305 .dev = {
1306 .coherent_dma_mask = 0xffffffff,
1307 },
1308};
1309
1310struct platform_device msm_device_sdc5 = {
1311 .name = "msm_sdcc",
1312 .id = 5,
1313 .num_resources = ARRAY_SIZE(resources_sdc5),
1314 .resource = resources_sdc5,
1315 .dev = {
1316 .coherent_dma_mask = 0xffffffff,
1317 },
1318};
1319
Stephen Boydeb819882011-08-29 14:46:30 -07001320#define MSM_LPASS_QDSP6SS_PHYS 0x28800000
1321#define SFAB_LPASS_Q6_ACLK_CTL (MSM_CLK_CTL_BASE + 0x23A0)
1322
1323static struct resource msm_8960_q6_lpass_resources[] = {
1324 {
1325 .start = MSM_LPASS_QDSP6SS_PHYS,
1326 .end = MSM_LPASS_QDSP6SS_PHYS + SZ_256 - 1,
1327 .flags = IORESOURCE_MEM,
1328 },
1329};
1330
1331static struct pil_q6v4_pdata msm_8960_q6_lpass_data = {
1332 .strap_tcm_base = 0x01460000,
1333 .strap_ahb_upper = 0x00290000,
1334 .strap_ahb_lower = 0x00000280,
1335 .aclk_reg = SFAB_LPASS_Q6_ACLK_CTL,
1336 .name = "q6",
1337 .pas_id = PAS_Q6,
Matt Wagantall6e4aafb2011-09-09 17:53:54 -07001338 .bus_port = MSM_BUS_MASTER_LPASS_PROC,
Stephen Boydeb819882011-08-29 14:46:30 -07001339};
1340
1341struct platform_device msm_8960_q6_lpass = {
1342 .name = "pil_qdsp6v4",
1343 .id = 0,
1344 .num_resources = ARRAY_SIZE(msm_8960_q6_lpass_resources),
1345 .resource = msm_8960_q6_lpass_resources,
1346 .dev.platform_data = &msm_8960_q6_lpass_data,
1347};
1348
1349#define MSM_MSS_ENABLE_PHYS 0x08B00000
1350#define MSM_FW_QDSP6SS_PHYS 0x08800000
1351#define MSS_Q6FW_JTAG_CLK_CTL (MSM_CLK_CTL_BASE + 0x2C6C)
1352#define SFAB_MSS_Q6_FW_ACLK_CTL (MSM_CLK_CTL_BASE + 0x2044)
1353
1354static struct resource msm_8960_q6_mss_fw_resources[] = {
1355 {
1356 .start = MSM_FW_QDSP6SS_PHYS,
1357 .end = MSM_FW_QDSP6SS_PHYS + SZ_256 - 1,
1358 .flags = IORESOURCE_MEM,
1359 },
1360 {
1361 .start = MSM_MSS_ENABLE_PHYS,
1362 .end = MSM_MSS_ENABLE_PHYS + 4 - 1,
1363 .flags = IORESOURCE_MEM,
1364 },
1365};
1366
1367static struct pil_q6v4_pdata msm_8960_q6_mss_fw_data = {
1368 .strap_tcm_base = 0x00400000,
1369 .strap_ahb_upper = 0x00090000,
1370 .strap_ahb_lower = 0x00000080,
1371 .aclk_reg = SFAB_MSS_Q6_FW_ACLK_CTL,
1372 .jtag_clk_reg = MSS_Q6FW_JTAG_CLK_CTL,
1373 .name = "modem_fw",
1374 .depends = "q6",
1375 .pas_id = PAS_MODEM_FW,
Matt Wagantall6e4aafb2011-09-09 17:53:54 -07001376 .bus_port = MSM_BUS_MASTER_MSS_FW_PROC,
Stephen Boydeb819882011-08-29 14:46:30 -07001377};
1378
1379struct platform_device msm_8960_q6_mss_fw = {
1380 .name = "pil_qdsp6v4",
1381 .id = 1,
1382 .num_resources = ARRAY_SIZE(msm_8960_q6_mss_fw_resources),
1383 .resource = msm_8960_q6_mss_fw_resources,
1384 .dev.platform_data = &msm_8960_q6_mss_fw_data,
1385};
1386
1387#define MSM_SW_QDSP6SS_PHYS 0x08900000
1388#define SFAB_MSS_Q6_SW_ACLK_CTL (MSM_CLK_CTL_BASE + 0x2040)
1389#define MSS_Q6SW_JTAG_CLK_CTL (MSM_CLK_CTL_BASE + 0x2C68)
1390
1391static struct resource msm_8960_q6_mss_sw_resources[] = {
1392 {
1393 .start = MSM_SW_QDSP6SS_PHYS,
1394 .end = MSM_SW_QDSP6SS_PHYS + SZ_256 - 1,
1395 .flags = IORESOURCE_MEM,
1396 },
1397 {
1398 .start = MSM_MSS_ENABLE_PHYS,
1399 .end = MSM_MSS_ENABLE_PHYS + 4 - 1,
1400 .flags = IORESOURCE_MEM,
1401 },
1402};
1403
1404static struct pil_q6v4_pdata msm_8960_q6_mss_sw_data = {
1405 .strap_tcm_base = 0x00420000,
1406 .strap_ahb_upper = 0x00090000,
1407 .strap_ahb_lower = 0x00000080,
1408 .aclk_reg = SFAB_MSS_Q6_SW_ACLK_CTL,
1409 .jtag_clk_reg = MSS_Q6SW_JTAG_CLK_CTL,
1410 .name = "modem",
1411 .depends = "modem_fw",
1412 .pas_id = PAS_MODEM_SW,
Matt Wagantall6e4aafb2011-09-09 17:53:54 -07001413 .bus_port = MSM_BUS_MASTER_MSS_SW_PROC,
Stephen Boydeb819882011-08-29 14:46:30 -07001414};
1415
1416struct platform_device msm_8960_q6_mss_sw = {
1417 .name = "pil_qdsp6v4",
1418 .id = 2,
1419 .num_resources = ARRAY_SIZE(msm_8960_q6_mss_sw_resources),
1420 .resource = msm_8960_q6_mss_sw_resources,
1421 .dev.platform_data = &msm_8960_q6_mss_sw_data,
1422};
1423
Stephen Boyd322a9922011-09-20 01:05:54 -07001424static struct resource msm_8960_riva_resources[] = {
1425 {
1426 .start = 0x03204000,
1427 .end = 0x03204000 + SZ_256 - 1,
1428 .flags = IORESOURCE_MEM,
1429 },
1430};
1431
1432struct platform_device msm_8960_riva = {
1433 .name = "pil_riva",
1434 .id = -1,
1435 .num_resources = ARRAY_SIZE(msm_8960_riva_resources),
1436 .resource = msm_8960_riva_resources,
1437};
1438
Stephen Boydd89eebe2011-09-28 23:28:11 -07001439struct platform_device msm_pil_tzapps = {
1440 .name = "pil_tzapps",
1441 .id = -1,
1442};
1443
Stephen Boyd25c4a0b2011-09-20 00:12:36 -07001444struct platform_device msm_pil_dsps = {
1445 .name = "pil_dsps",
1446 .id = -1,
1447 .dev.platform_data = "dsps",
1448};
1449
Stephen Boyd7b973de2012-03-09 12:26:16 -08001450struct platform_device msm_pil_vidc = {
1451 .name = "pil_vidc",
1452 .id = -1,
1453};
1454
Eric Holmberg023d25c2012-03-01 12:27:55 -07001455static struct resource smd_resource[] = {
1456 {
1457 .name = "a9_m2a_0",
1458 .start = INT_A9_M2A_0,
1459 .flags = IORESOURCE_IRQ,
1460 },
1461 {
1462 .name = "a9_m2a_5",
1463 .start = INT_A9_M2A_5,
1464 .flags = IORESOURCE_IRQ,
1465 },
1466 {
1467 .name = "adsp_a11",
1468 .start = INT_ADSP_A11,
1469 .flags = IORESOURCE_IRQ,
1470 },
1471 {
1472 .name = "adsp_a11_smsm",
1473 .start = INT_ADSP_A11_SMSM,
1474 .flags = IORESOURCE_IRQ,
1475 },
1476 {
1477 .name = "dsps_a11",
1478 .start = INT_DSPS_A11,
1479 .flags = IORESOURCE_IRQ,
1480 },
1481 {
1482 .name = "dsps_a11_smsm",
1483 .start = INT_DSPS_A11_SMSM,
1484 .flags = IORESOURCE_IRQ,
1485 },
1486 {
1487 .name = "wcnss_a11",
1488 .start = INT_WCNSS_A11,
1489 .flags = IORESOURCE_IRQ,
1490 },
1491 {
1492 .name = "wcnss_a11_smsm",
1493 .start = INT_WCNSS_A11_SMSM,
1494 .flags = IORESOURCE_IRQ,
1495 },
1496};
1497
1498static struct smd_subsystem_config smd_config_list[] = {
1499 {
1500 .irq_config_id = SMD_MODEM,
1501 .subsys_name = "modem",
1502 .edge = SMD_APPS_MODEM,
1503
1504 .smd_int.irq_name = "a9_m2a_0",
1505 .smd_int.flags = IRQF_TRIGGER_RISING,
1506 .smd_int.irq_id = -1,
1507 .smd_int.device_name = "smd_dev",
1508 .smd_int.dev_id = 0,
1509 .smd_int.out_bit_pos = 1 << 3,
1510 .smd_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
1511 .smd_int.out_offset = 0x8,
1512
1513 .smsm_int.irq_name = "a9_m2a_5",
1514 .smsm_int.flags = IRQF_TRIGGER_RISING,
1515 .smsm_int.irq_id = -1,
1516 .smsm_int.device_name = "smd_smsm",
1517 .smsm_int.dev_id = 0,
1518 .smsm_int.out_bit_pos = 1 << 4,
1519 .smsm_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
1520 .smsm_int.out_offset = 0x8,
1521 },
1522 {
1523 .irq_config_id = SMD_Q6,
1524 .subsys_name = "q6",
1525 .edge = SMD_APPS_QDSP,
1526
1527 .smd_int.irq_name = "adsp_a11",
1528 .smd_int.flags = IRQF_TRIGGER_RISING,
1529 .smd_int.irq_id = -1,
1530 .smd_int.device_name = "smd_dev",
1531 .smd_int.dev_id = 0,
1532 .smd_int.out_bit_pos = 1 << 15,
1533 .smd_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
1534 .smd_int.out_offset = 0x8,
1535
1536 .smsm_int.irq_name = "adsp_a11_smsm",
1537 .smsm_int.flags = IRQF_TRIGGER_RISING,
1538 .smsm_int.irq_id = -1,
1539 .smsm_int.device_name = "smd_smsm",
1540 .smsm_int.dev_id = 0,
1541 .smsm_int.out_bit_pos = 1 << 14,
1542 .smsm_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
1543 .smsm_int.out_offset = 0x8,
1544 },
1545 {
1546 .irq_config_id = SMD_DSPS,
1547 .subsys_name = "dsps",
1548 .edge = SMD_APPS_DSPS,
1549
1550 .smd_int.irq_name = "dsps_a11",
1551 .smd_int.flags = IRQF_TRIGGER_RISING,
1552 .smd_int.irq_id = -1,
1553 .smd_int.device_name = "smd_dev",
1554 .smd_int.dev_id = 0,
1555 .smd_int.out_bit_pos = 1,
1556 .smd_int.out_base = (void __iomem *)MSM_SIC_NON_SECURE_BASE,
1557 .smd_int.out_offset = 0x4080,
1558
1559 .smsm_int.irq_name = "dsps_a11_smsm",
1560 .smsm_int.flags = IRQF_TRIGGER_RISING,
1561 .smsm_int.irq_id = -1,
1562 .smsm_int.device_name = "smd_smsm",
1563 .smsm_int.dev_id = 0,
1564 .smsm_int.out_bit_pos = 1,
1565 .smsm_int.out_base = (void __iomem *)MSM_SIC_NON_SECURE_BASE,
1566 .smsm_int.out_offset = 0x4094,
1567 },
1568 {
1569 .irq_config_id = SMD_WCNSS,
1570 .subsys_name = "wcnss",
1571 .edge = SMD_APPS_WCNSS,
1572
1573 .smd_int.irq_name = "wcnss_a11",
1574 .smd_int.flags = IRQF_TRIGGER_RISING,
1575 .smd_int.irq_id = -1,
1576 .smd_int.device_name = "smd_dev",
1577 .smd_int.dev_id = 0,
1578 .smd_int.out_bit_pos = 1 << 25,
1579 .smd_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
1580 .smd_int.out_offset = 0x8,
1581
1582 .smsm_int.irq_name = "wcnss_a11_smsm",
1583 .smsm_int.flags = IRQF_TRIGGER_RISING,
1584 .smsm_int.irq_id = -1,
1585 .smsm_int.device_name = "smd_smsm",
1586 .smsm_int.dev_id = 0,
1587 .smsm_int.out_bit_pos = 1 << 23,
1588 .smsm_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
1589 .smsm_int.out_offset = 0x8,
1590 },
1591};
1592
Eric Holmberg2bb6ccd2012-03-13 13:05:14 -06001593static struct smd_subsystem_restart_config smd_ssr_config = {
1594 .disable_smsm_reset_handshake = 1,
1595};
1596
Eric Holmberg023d25c2012-03-01 12:27:55 -07001597static struct smd_platform smd_platform_data = {
1598 .num_ss_configs = ARRAY_SIZE(smd_config_list),
1599 .smd_ss_configs = smd_config_list,
Eric Holmberg2bb6ccd2012-03-13 13:05:14 -06001600 .smd_ssr_config = &smd_ssr_config,
Eric Holmberg023d25c2012-03-01 12:27:55 -07001601};
1602
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001603struct platform_device msm_device_smd = {
1604 .name = "msm_smd",
1605 .id = -1,
Eric Holmberg023d25c2012-03-01 12:27:55 -07001606 .resource = smd_resource,
1607 .num_resources = ARRAY_SIZE(smd_resource),
1608 .dev = {
1609 .platform_data = &smd_platform_data,
1610 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001611};
1612
1613struct platform_device msm_device_bam_dmux = {
1614 .name = "BAM_RMNT",
1615 .id = -1,
1616};
1617
Jeff Ohlstein7e668552011-10-06 16:17:25 -07001618static struct msm_watchdog_pdata msm_watchdog_pdata = {
1619 .pet_time = 10000,
1620 .bark_time = 11000,
1621 .has_secure = true,
Rohit Vaswanic77e4a62012-08-09 18:10:28 -07001622 .base = MSM_TMR0_BASE + WDT0_OFFSET,
1623};
1624
1625static struct resource msm_watchdog_resources[] = {
1626 {
1627 .start = WDT0_ACCSCSSNBARK_INT,
1628 .end = WDT0_ACCSCSSNBARK_INT,
1629 .flags = IORESOURCE_IRQ,
1630 },
Jeff Ohlstein7e668552011-10-06 16:17:25 -07001631};
1632
1633struct platform_device msm8960_device_watchdog = {
1634 .name = "msm_watchdog",
1635 .id = -1,
1636 .dev = {
1637 .platform_data = &msm_watchdog_pdata,
1638 },
Rohit Vaswanic77e4a62012-08-09 18:10:28 -07001639 .num_resources = ARRAY_SIZE(msm_watchdog_resources),
1640 .resource = msm_watchdog_resources,
Jeff Ohlstein7e668552011-10-06 16:17:25 -07001641};
1642
Stepan Moskovchenkodf13d342011-08-03 19:01:25 -07001643static struct resource msm_dmov_resource[] = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001644 {
1645 .start = ADM_0_SCSS_1_IRQ,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001646 .flags = IORESOURCE_IRQ,
1647 },
Jeff Ohlstein905f1ce2011-09-07 18:50:18 -07001648 {
1649 .start = 0x18320000,
1650 .end = 0x18320000 + SZ_1M - 1,
1651 .flags = IORESOURCE_MEM,
1652 },
1653};
1654
1655static struct msm_dmov_pdata msm_dmov_pdata = {
1656 .sd = 1,
1657 .sd_size = 0x800,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001658};
1659
Stepan Moskovchenkodf13d342011-08-03 19:01:25 -07001660struct platform_device msm8960_device_dmov = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001661 .name = "msm_dmov",
1662 .id = -1,
1663 .resource = msm_dmov_resource,
1664 .num_resources = ARRAY_SIZE(msm_dmov_resource),
Jeff Ohlstein905f1ce2011-09-07 18:50:18 -07001665 .dev = {
1666 .platform_data = &msm_dmov_pdata,
1667 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001668};
1669
1670static struct platform_device *msm_sdcc_devices[] __initdata = {
1671 &msm_device_sdc1,
1672 &msm_device_sdc2,
1673 &msm_device_sdc3,
1674 &msm_device_sdc4,
1675 &msm_device_sdc5,
1676};
1677
1678int __init msm_add_sdcc(unsigned int controller, struct mmc_platform_data *plat)
1679{
1680 struct platform_device *pdev;
1681
1682 if (controller < 1 || controller > 5)
1683 return -EINVAL;
1684
1685 pdev = msm_sdcc_devices[controller-1];
1686 pdev->dev.platform_data = plat;
1687 return platform_device_register(pdev);
1688}
1689
1690static struct resource resources_qup_i2c_gsbi4[] = {
1691 {
1692 .name = "gsbi_qup_i2c_addr",
1693 .start = MSM_GSBI4_PHYS,
Harini Jayaramand7614a72011-09-15 14:16:02 -06001694 .end = MSM_GSBI4_PHYS + 4 - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001695 .flags = IORESOURCE_MEM,
1696 },
1697 {
1698 .name = "qup_phys_addr",
1699 .start = MSM_GSBI4_QUP_PHYS,
Harini Jayaramand7614a72011-09-15 14:16:02 -06001700 .end = MSM_GSBI4_QUP_PHYS + MSM_QUP_SIZE - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001701 .flags = IORESOURCE_MEM,
1702 },
1703 {
1704 .name = "qup_err_intr",
1705 .start = GSBI4_QUP_IRQ,
1706 .end = GSBI4_QUP_IRQ,
1707 .flags = IORESOURCE_IRQ,
1708 },
1709};
1710
1711struct platform_device msm8960_device_qup_i2c_gsbi4 = {
1712 .name = "qup_i2c",
1713 .id = 4,
1714 .num_resources = ARRAY_SIZE(resources_qup_i2c_gsbi4),
1715 .resource = resources_qup_i2c_gsbi4,
1716};
1717
1718static struct resource resources_qup_i2c_gsbi3[] = {
1719 {
1720 .name = "gsbi_qup_i2c_addr",
1721 .start = MSM_GSBI3_PHYS,
Harini Jayaramand7614a72011-09-15 14:16:02 -06001722 .end = MSM_GSBI3_PHYS + 4 - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001723 .flags = IORESOURCE_MEM,
1724 },
1725 {
1726 .name = "qup_phys_addr",
1727 .start = MSM_GSBI3_QUP_PHYS,
Harini Jayaramand7614a72011-09-15 14:16:02 -06001728 .end = MSM_GSBI3_QUP_PHYS + MSM_QUP_SIZE - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001729 .flags = IORESOURCE_MEM,
1730 },
1731 {
1732 .name = "qup_err_intr",
1733 .start = GSBI3_QUP_IRQ,
1734 .end = GSBI3_QUP_IRQ,
1735 .flags = IORESOURCE_IRQ,
1736 },
1737};
1738
1739struct platform_device msm8960_device_qup_i2c_gsbi3 = {
1740 .name = "qup_i2c",
1741 .id = 3,
1742 .num_resources = ARRAY_SIZE(resources_qup_i2c_gsbi3),
1743 .resource = resources_qup_i2c_gsbi3,
1744};
1745
Harini Jayaramanfe6ff4162012-03-14 11:25:40 -06001746static struct resource resources_qup_i2c_gsbi9[] = {
1747 {
1748 .name = "gsbi_qup_i2c_addr",
1749 .start = MSM_GSBI9_PHYS,
1750 .end = MSM_GSBI9_PHYS + 4 - 1,
1751 .flags = IORESOURCE_MEM,
1752 },
1753 {
1754 .name = "qup_phys_addr",
1755 .start = MSM_GSBI9_QUP_PHYS,
1756 .end = MSM_GSBI9_QUP_PHYS + MSM_QUP_SIZE - 1,
1757 .flags = IORESOURCE_MEM,
1758 },
1759 {
1760 .name = "qup_err_intr",
1761 .start = GSBI9_QUP_IRQ,
1762 .end = GSBI9_QUP_IRQ,
1763 .flags = IORESOURCE_IRQ,
1764 },
1765};
1766
1767struct platform_device msm8960_device_qup_i2c_gsbi9 = {
1768 .name = "qup_i2c",
1769 .id = 0,
1770 .num_resources = ARRAY_SIZE(resources_qup_i2c_gsbi9),
1771 .resource = resources_qup_i2c_gsbi9,
1772};
1773
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001774static struct resource resources_qup_i2c_gsbi10[] = {
1775 {
1776 .name = "gsbi_qup_i2c_addr",
1777 .start = MSM_GSBI10_PHYS,
Harini Jayaramand7614a72011-09-15 14:16:02 -06001778 .end = MSM_GSBI10_PHYS + 4 - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001779 .flags = IORESOURCE_MEM,
1780 },
1781 {
1782 .name = "qup_phys_addr",
1783 .start = MSM_GSBI10_QUP_PHYS,
Harini Jayaramand7614a72011-09-15 14:16:02 -06001784 .end = MSM_GSBI10_QUP_PHYS + MSM_QUP_SIZE - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001785 .flags = IORESOURCE_MEM,
1786 },
1787 {
1788 .name = "qup_err_intr",
1789 .start = GSBI10_QUP_IRQ,
1790 .end = GSBI10_QUP_IRQ,
1791 .flags = IORESOURCE_IRQ,
1792 },
1793};
1794
1795struct platform_device msm8960_device_qup_i2c_gsbi10 = {
1796 .name = "qup_i2c",
1797 .id = 10,
1798 .num_resources = ARRAY_SIZE(resources_qup_i2c_gsbi10),
1799 .resource = resources_qup_i2c_gsbi10,
1800};
1801
1802static struct resource resources_qup_i2c_gsbi12[] = {
1803 {
1804 .name = "gsbi_qup_i2c_addr",
1805 .start = MSM_GSBI12_PHYS,
Harini Jayaramand7614a72011-09-15 14:16:02 -06001806 .end = MSM_GSBI12_PHYS + 4 - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001807 .flags = IORESOURCE_MEM,
1808 },
1809 {
1810 .name = "qup_phys_addr",
1811 .start = MSM_GSBI12_QUP_PHYS,
Harini Jayaramand7614a72011-09-15 14:16:02 -06001812 .end = MSM_GSBI12_QUP_PHYS + MSM_QUP_SIZE - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001813 .flags = IORESOURCE_MEM,
1814 },
1815 {
1816 .name = "qup_err_intr",
1817 .start = GSBI12_QUP_IRQ,
1818 .end = GSBI12_QUP_IRQ,
1819 .flags = IORESOURCE_IRQ,
1820 },
1821};
1822
1823struct platform_device msm8960_device_qup_i2c_gsbi12 = {
1824 .name = "qup_i2c",
1825 .id = 12,
1826 .num_resources = ARRAY_SIZE(resources_qup_i2c_gsbi12),
1827 .resource = resources_qup_i2c_gsbi12,
1828};
1829
1830#ifdef CONFIG_MSM_CAMERA
Kevin Chanbb8ef862012-02-14 13:03:04 -08001831static struct resource msm_cam_gsbi4_i2c_mux_resources[] = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001832 {
Kevin Chanbb8ef862012-02-14 13:03:04 -08001833 .name = "i2c_mux_rw",
Nishant Pandit24153d82011-08-27 16:05:13 +05301834 .start = 0x008003E0,
Kevin Chanbb8ef862012-02-14 13:03:04 -08001835 .end = 0x008003E0 + SZ_8 - 1,
Nishant Pandit24153d82011-08-27 16:05:13 +05301836 .flags = IORESOURCE_MEM,
1837 },
1838 {
Kevin Chanbb8ef862012-02-14 13:03:04 -08001839 .name = "i2c_mux_ctl",
Nishant Pandit24153d82011-08-27 16:05:13 +05301840 .start = 0x008020B8,
Kevin Chanbb8ef862012-02-14 13:03:04 -08001841 .end = 0x008020B8 + SZ_4 - 1,
Nishant Pandit24153d82011-08-27 16:05:13 +05301842 .flags = IORESOURCE_MEM,
1843 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001844};
1845
Kevin Chanbb8ef862012-02-14 13:03:04 -08001846struct platform_device msm8960_device_i2c_mux_gsbi4 = {
1847 .name = "msm_cam_i2c_mux",
1848 .id = 0,
1849 .resource = msm_cam_gsbi4_i2c_mux_resources,
1850 .num_resources = ARRAY_SIZE(msm_cam_gsbi4_i2c_mux_resources),
1851};
Kevin Chanf6216f22011-10-25 18:40:11 -07001852
1853static struct resource msm_csiphy0_resources[] = {
1854 {
1855 .name = "csiphy",
1856 .start = 0x04800C00,
1857 .end = 0x04800C00 + SZ_1K - 1,
1858 .flags = IORESOURCE_MEM,
1859 },
1860 {
1861 .name = "csiphy",
1862 .start = CSIPHY_4LN_IRQ,
1863 .end = CSIPHY_4LN_IRQ,
1864 .flags = IORESOURCE_IRQ,
1865 },
1866};
1867
1868static struct resource msm_csiphy1_resources[] = {
1869 {
1870 .name = "csiphy",
1871 .start = 0x04801000,
1872 .end = 0x04801000 + SZ_1K - 1,
1873 .flags = IORESOURCE_MEM,
1874 },
1875 {
1876 .name = "csiphy",
1877 .start = MSM8960_CSIPHY_2LN_IRQ,
1878 .end = MSM8960_CSIPHY_2LN_IRQ,
1879 .flags = IORESOURCE_IRQ,
1880 },
1881};
1882
Sreesudhan Ramakrish Ramkumarb1edcd02012-01-17 11:33:05 -08001883static struct resource msm_csiphy2_resources[] = {
1884 {
1885 .name = "csiphy",
1886 .start = 0x04801400,
1887 .end = 0x04801400 + SZ_1K - 1,
1888 .flags = IORESOURCE_MEM,
1889 },
1890 {
1891 .name = "csiphy",
1892 .start = MSM8960_CSIPHY_2_2LN_IRQ,
1893 .end = MSM8960_CSIPHY_2_2LN_IRQ,
1894 .flags = IORESOURCE_IRQ,
1895 },
1896};
1897
Kevin Chanf6216f22011-10-25 18:40:11 -07001898struct platform_device msm8960_device_csiphy0 = {
1899 .name = "msm_csiphy",
1900 .id = 0,
1901 .resource = msm_csiphy0_resources,
1902 .num_resources = ARRAY_SIZE(msm_csiphy0_resources),
1903};
1904
1905struct platform_device msm8960_device_csiphy1 = {
1906 .name = "msm_csiphy",
1907 .id = 1,
1908 .resource = msm_csiphy1_resources,
1909 .num_resources = ARRAY_SIZE(msm_csiphy1_resources),
1910};
Kevin Chanc8b52e82011-10-25 23:20:21 -07001911
Sreesudhan Ramakrish Ramkumarb1edcd02012-01-17 11:33:05 -08001912struct platform_device msm8960_device_csiphy2 = {
1913 .name = "msm_csiphy",
1914 .id = 2,
1915 .resource = msm_csiphy2_resources,
1916 .num_resources = ARRAY_SIZE(msm_csiphy2_resources),
1917};
1918
Kevin Chanc8b52e82011-10-25 23:20:21 -07001919static struct resource msm_csid0_resources[] = {
1920 {
1921 .name = "csid",
1922 .start = 0x04800000,
1923 .end = 0x04800000 + SZ_1K - 1,
1924 .flags = IORESOURCE_MEM,
1925 },
1926 {
1927 .name = "csid",
1928 .start = CSI_0_IRQ,
1929 .end = CSI_0_IRQ,
1930 .flags = IORESOURCE_IRQ,
1931 },
1932};
1933
1934static struct resource msm_csid1_resources[] = {
1935 {
1936 .name = "csid",
1937 .start = 0x04800400,
1938 .end = 0x04800400 + SZ_1K - 1,
1939 .flags = IORESOURCE_MEM,
1940 },
1941 {
1942 .name = "csid",
1943 .start = CSI_1_IRQ,
1944 .end = CSI_1_IRQ,
1945 .flags = IORESOURCE_IRQ,
1946 },
1947};
1948
Sreesudhan Ramakrish Ramkumarb1edcd02012-01-17 11:33:05 -08001949static struct resource msm_csid2_resources[] = {
1950 {
1951 .name = "csid",
1952 .start = 0x04801800,
1953 .end = 0x04801800 + SZ_1K - 1,
1954 .flags = IORESOURCE_MEM,
1955 },
1956 {
1957 .name = "csid",
1958 .start = CSI_2_IRQ,
1959 .end = CSI_2_IRQ,
1960 .flags = IORESOURCE_IRQ,
1961 },
1962};
1963
Kevin Chanc8b52e82011-10-25 23:20:21 -07001964struct platform_device msm8960_device_csid0 = {
1965 .name = "msm_csid",
1966 .id = 0,
1967 .resource = msm_csid0_resources,
1968 .num_resources = ARRAY_SIZE(msm_csid0_resources),
1969};
1970
1971struct platform_device msm8960_device_csid1 = {
1972 .name = "msm_csid",
1973 .id = 1,
1974 .resource = msm_csid1_resources,
1975 .num_resources = ARRAY_SIZE(msm_csid1_resources),
1976};
Kevin Chane12c6672011-10-26 11:55:26 -07001977
Sreesudhan Ramakrish Ramkumarb1edcd02012-01-17 11:33:05 -08001978struct platform_device msm8960_device_csid2 = {
1979 .name = "msm_csid",
1980 .id = 2,
1981 .resource = msm_csid2_resources,
1982 .num_resources = ARRAY_SIZE(msm_csid2_resources),
1983};
1984
Kevin Chane12c6672011-10-26 11:55:26 -07001985struct resource msm_ispif_resources[] = {
1986 {
1987 .name = "ispif",
1988 .start = 0x04800800,
1989 .end = 0x04800800 + SZ_1K - 1,
1990 .flags = IORESOURCE_MEM,
1991 },
1992 {
1993 .name = "ispif",
1994 .start = ISPIF_IRQ,
1995 .end = ISPIF_IRQ,
1996 .flags = IORESOURCE_IRQ,
1997 },
1998};
1999
2000struct platform_device msm8960_device_ispif = {
2001 .name = "msm_ispif",
2002 .id = 0,
2003 .resource = msm_ispif_resources,
2004 .num_resources = ARRAY_SIZE(msm_ispif_resources),
2005};
Kevin Chan5827c552011-10-28 18:36:32 -07002006
2007static struct resource msm_vfe_resources[] = {
2008 {
2009 .name = "vfe32",
2010 .start = 0x04500000,
2011 .end = 0x04500000 + SZ_1M - 1,
2012 .flags = IORESOURCE_MEM,
2013 },
2014 {
2015 .name = "vfe32",
2016 .start = VFE_IRQ,
2017 .end = VFE_IRQ,
2018 .flags = IORESOURCE_IRQ,
2019 },
2020};
2021
2022struct platform_device msm8960_device_vfe = {
2023 .name = "msm_vfe",
2024 .id = 0,
2025 .resource = msm_vfe_resources,
2026 .num_resources = ARRAY_SIZE(msm_vfe_resources),
2027};
Kevin Chana0853122011-11-07 19:48:44 -08002028
2029static struct resource msm_vpe_resources[] = {
2030 {
2031 .name = "vpe",
2032 .start = 0x05300000,
2033 .end = 0x05300000 + SZ_1M - 1,
2034 .flags = IORESOURCE_MEM,
2035 },
2036 {
2037 .name = "vpe",
2038 .start = VPE_IRQ,
2039 .end = VPE_IRQ,
2040 .flags = IORESOURCE_IRQ,
2041 },
2042};
2043
2044struct platform_device msm8960_device_vpe = {
2045 .name = "msm_vpe",
2046 .id = 0,
2047 .resource = msm_vpe_resources,
2048 .num_resources = ARRAY_SIZE(msm_vpe_resources),
2049};
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002050#endif
2051
Joel Nidera1261942011-09-12 16:30:09 +03002052#define MSM_TSIF0_PHYS (0x18200000)
2053#define MSM_TSIF1_PHYS (0x18201000)
2054#define MSM_TSIF_SIZE (0x200)
2055
2056#define TSIF_0_CLK GPIO_CFG(75, 1, GPIO_CFG_INPUT, \
2057 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
2058#define TSIF_0_EN GPIO_CFG(76, 1, GPIO_CFG_INPUT, \
2059 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
2060#define TSIF_0_DATA GPIO_CFG(77, 1, GPIO_CFG_INPUT, \
2061 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
2062#define TSIF_0_SYNC GPIO_CFG(82, 1, GPIO_CFG_INPUT, \
2063 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
2064#define TSIF_1_CLK GPIO_CFG(79, 1, GPIO_CFG_INPUT, \
2065 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
2066#define TSIF_1_EN GPIO_CFG(80, 1, GPIO_CFG_INPUT, \
2067 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
2068#define TSIF_1_DATA GPIO_CFG(81, 1, GPIO_CFG_INPUT, \
2069 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
2070#define TSIF_1_SYNC GPIO_CFG(78, 1, GPIO_CFG_INPUT, \
2071 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
2072
2073static const struct msm_gpio tsif0_gpios[] = {
2074 { .gpio_cfg = TSIF_0_CLK, .label = "tsif_clk", },
2075 { .gpio_cfg = TSIF_0_EN, .label = "tsif_en", },
2076 { .gpio_cfg = TSIF_0_DATA, .label = "tsif_data", },
2077 { .gpio_cfg = TSIF_0_SYNC, .label = "tsif_sync", },
2078};
2079
2080static const struct msm_gpio tsif1_gpios[] = {
2081 { .gpio_cfg = TSIF_1_CLK, .label = "tsif_clk", },
2082 { .gpio_cfg = TSIF_1_EN, .label = "tsif_en", },
2083 { .gpio_cfg = TSIF_1_DATA, .label = "tsif_data", },
2084 { .gpio_cfg = TSIF_1_SYNC, .label = "tsif_sync", },
2085};
2086
2087struct msm_tsif_platform_data tsif1_platform_data = {
2088 .num_gpios = ARRAY_SIZE(tsif1_gpios),
2089 .gpios = tsif1_gpios,
Joel Niderdfb793b2012-06-27 12:00:22 +03002090 .tsif_pclk = "iface_clk",
2091 .tsif_ref_clk = "ref_clk",
Joel Nidera1261942011-09-12 16:30:09 +03002092};
2093
2094struct resource tsif1_resources[] = {
2095 [0] = {
2096 .flags = IORESOURCE_IRQ,
2097 .start = TSIF2_IRQ,
2098 .end = TSIF2_IRQ,
2099 },
2100 [1] = {
2101 .flags = IORESOURCE_MEM,
2102 .start = MSM_TSIF1_PHYS,
2103 .end = MSM_TSIF1_PHYS + MSM_TSIF_SIZE - 1,
2104 },
2105 [2] = {
2106 .flags = IORESOURCE_DMA,
2107 .start = DMOV_TSIF_CHAN,
2108 .end = DMOV_TSIF_CRCI,
2109 },
2110};
2111
2112struct msm_tsif_platform_data tsif0_platform_data = {
2113 .num_gpios = ARRAY_SIZE(tsif0_gpios),
2114 .gpios = tsif0_gpios,
Joel Niderdfb793b2012-06-27 12:00:22 +03002115 .tsif_pclk = "iface_clk",
2116 .tsif_ref_clk = "ref_clk",
Joel Nidera1261942011-09-12 16:30:09 +03002117};
2118struct resource tsif0_resources[] = {
2119 [0] = {
2120 .flags = IORESOURCE_IRQ,
2121 .start = TSIF1_IRQ,
2122 .end = TSIF1_IRQ,
2123 },
2124 [1] = {
2125 .flags = IORESOURCE_MEM,
2126 .start = MSM_TSIF0_PHYS,
2127 .end = MSM_TSIF0_PHYS + MSM_TSIF_SIZE - 1,
2128 },
2129 [2] = {
2130 .flags = IORESOURCE_DMA,
2131 .start = DMOV_TSIF_CHAN,
2132 .end = DMOV_TSIF_CRCI,
2133 },
2134};
2135
2136struct platform_device msm_device_tsif[2] = {
2137 {
2138 .name = "msm_tsif",
2139 .id = 0,
2140 .num_resources = ARRAY_SIZE(tsif0_resources),
2141 .resource = tsif0_resources,
2142 .dev = {
2143 .platform_data = &tsif0_platform_data
2144 },
2145 },
2146 {
2147 .name = "msm_tsif",
2148 .id = 1,
2149 .num_resources = ARRAY_SIZE(tsif1_resources),
2150 .resource = tsif1_resources,
2151 .dev = {
2152 .platform_data = &tsif1_platform_data
2153 },
2154 }
2155};
2156
Jay Chokshi33c044a2011-12-07 13:05:40 -08002157static struct resource resources_ssbi_pmic[] = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002158 {
2159 .start = MSM_PMIC1_SSBI_CMD_PHYS,
2160 .end = MSM_PMIC1_SSBI_CMD_PHYS + MSM_PMIC_SSBI_SIZE - 1,
2161 .flags = IORESOURCE_MEM,
2162 },
2163};
2164
Jay Chokshi33c044a2011-12-07 13:05:40 -08002165struct platform_device msm8960_device_ssbi_pmic = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002166 .name = "msm_ssbi",
2167 .id = 0,
Jay Chokshi33c044a2011-12-07 13:05:40 -08002168 .resource = resources_ssbi_pmic,
2169 .num_resources = ARRAY_SIZE(resources_ssbi_pmic),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002170};
2171
2172static struct resource resources_qup_spi_gsbi1[] = {
2173 {
2174 .name = "spi_base",
2175 .start = MSM_GSBI1_QUP_PHYS,
2176 .end = MSM_GSBI1_QUP_PHYS + SZ_4K - 1,
2177 .flags = IORESOURCE_MEM,
2178 },
2179 {
2180 .name = "gsbi_base",
2181 .start = MSM_GSBI1_PHYS,
2182 .end = MSM_GSBI1_PHYS + 4 - 1,
2183 .flags = IORESOURCE_MEM,
2184 },
2185 {
2186 .name = "spi_irq_in",
2187 .start = MSM8960_GSBI1_QUP_IRQ,
2188 .end = MSM8960_GSBI1_QUP_IRQ,
2189 .flags = IORESOURCE_IRQ,
2190 },
Harini Jayaramanaac8e342011-08-09 19:25:23 -06002191 {
2192 .name = "spi_clk",
2193 .start = 9,
2194 .end = 9,
2195 .flags = IORESOURCE_IO,
2196 },
2197 {
Harini Jayaramanaac8e342011-08-09 19:25:23 -06002198 .name = "spi_miso",
2199 .start = 7,
2200 .end = 7,
2201 .flags = IORESOURCE_IO,
2202 },
2203 {
2204 .name = "spi_mosi",
2205 .start = 6,
2206 .end = 6,
2207 .flags = IORESOURCE_IO,
2208 },
Harini Jayaraman8392e432011-11-29 18:26:17 -07002209 {
2210 .name = "spi_cs",
2211 .start = 8,
2212 .end = 8,
2213 .flags = IORESOURCE_IO,
2214 },
2215 {
2216 .name = "spi_cs1",
2217 .start = 14,
2218 .end = 14,
2219 .flags = IORESOURCE_IO,
2220 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002221};
2222
2223struct platform_device msm8960_device_qup_spi_gsbi1 = {
2224 .name = "spi_qsd",
2225 .id = 0,
2226 .num_resources = ARRAY_SIZE(resources_qup_spi_gsbi1),
2227 .resource = resources_qup_spi_gsbi1,
2228};
2229
2230struct platform_device msm_pcm = {
2231 .name = "msm-pcm-dsp",
2232 .id = -1,
2233};
2234
Kiran Kandi5e809b02012-01-31 00:24:33 -08002235struct platform_device msm_multi_ch_pcm = {
2236 .name = "msm-multi-ch-pcm-dsp",
2237 .id = -1,
2238};
2239
Jayasena Sangaraboina99bf09c2012-07-17 12:03:08 -07002240struct platform_device msm_lowlatency_pcm = {
2241 .name = "msm-lowlatency-pcm-dsp",
2242 .id = -1,
2243};
2244
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002245struct platform_device msm_pcm_routing = {
2246 .name = "msm-pcm-routing",
2247 .id = -1,
2248};
2249
2250struct platform_device msm_cpudai0 = {
2251 .name = "msm-dai-q6",
2252 .id = 0x4000,
2253};
2254
2255struct platform_device msm_cpudai1 = {
2256 .name = "msm-dai-q6",
2257 .id = 0x4001,
2258};
2259
Kiran Kandi97fe19d2012-05-20 22:34:04 -07002260struct platform_device msm8960_cpudai_slimbus_2_rx = {
2261 .name = "msm-dai-q6",
2262 .id = 0x4004,
2263};
2264
Kiran Kandi1e6371d2012-03-29 11:48:57 -07002265struct platform_device msm8960_cpudai_slimbus_2_tx = {
2266 .name = "msm-dai-q6",
2267 .id = 0x4005,
2268};
2269
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002270struct platform_device msm_cpudai_hdmi_rx = {
Kiran Kandi5e809b02012-01-31 00:24:33 -08002271 .name = "msm-dai-q6-hdmi",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002272 .id = 8,
2273};
2274
2275struct platform_device msm_cpudai_bt_rx = {
2276 .name = "msm-dai-q6",
2277 .id = 0x3000,
2278};
2279
2280struct platform_device msm_cpudai_bt_tx = {
2281 .name = "msm-dai-q6",
2282 .id = 0x3001,
2283};
2284
2285struct platform_device msm_cpudai_fm_rx = {
2286 .name = "msm-dai-q6",
2287 .id = 0x3004,
2288};
2289
2290struct platform_device msm_cpudai_fm_tx = {
2291 .name = "msm-dai-q6",
2292 .id = 0x3005,
2293};
2294
Helen Zeng0705a5f2011-10-14 15:29:52 -07002295struct platform_device msm_cpudai_incall_music_rx = {
2296 .name = "msm-dai-q6",
2297 .id = 0x8005,
2298};
2299
Helen Zenge3d716a2011-10-14 16:32:16 -07002300struct platform_device msm_cpudai_incall_record_rx = {
2301 .name = "msm-dai-q6",
2302 .id = 0x8004,
2303};
2304
2305struct platform_device msm_cpudai_incall_record_tx = {
2306 .name = "msm-dai-q6",
2307 .id = 0x8003,
2308};
2309
Bhalchandra Gajare0e795c42011-08-15 18:10:30 -07002310/*
2311 * Machine specific data for AUX PCM Interface
2312 * which the driver will be unware of.
2313 */
Kiran Kandi5f4ab692012-02-23 11:23:56 -08002314struct msm_dai_auxpcm_pdata auxpcm_pdata = {
Bhalchandra Gajare0e795c42011-08-15 18:10:30 -07002315 .clk = "pcm_clk",
Kuirong Wang547a9982012-05-04 18:29:11 -07002316 .mode_8k = {
2317 .mode = AFE_PCM_CFG_MODE_PCM,
2318 .sync = AFE_PCM_CFG_SYNC_INT,
Damir Didjustocadb6392012-08-17 00:16:07 -07002319 .frame = AFE_PCM_CFG_FRM_32BPF,
Kuirong Wang547a9982012-05-04 18:29:11 -07002320 .quant = AFE_PCM_CFG_QUANT_LINEAR_NOPAD,
2321 .slot = 0,
2322 .data = AFE_PCM_CFG_CDATAOE_MASTER,
Damir Didjustocadb6392012-08-17 00:16:07 -07002323 .pcm_clk_rate = 256000,
Kuirong Wang547a9982012-05-04 18:29:11 -07002324 },
2325 .mode_16k = {
2326 .mode = AFE_PCM_CFG_MODE_PCM,
2327 .sync = AFE_PCM_CFG_SYNC_INT,
Damir Didjustocadb6392012-08-17 00:16:07 -07002328 .frame = AFE_PCM_CFG_FRM_32BPF,
Kuirong Wang547a9982012-05-04 18:29:11 -07002329 .quant = AFE_PCM_CFG_QUANT_LINEAR_NOPAD,
2330 .slot = 0,
2331 .data = AFE_PCM_CFG_CDATAOE_MASTER,
Damir Didjustocadb6392012-08-17 00:16:07 -07002332 .pcm_clk_rate = 512000,
Kuirong Wang547a9982012-05-04 18:29:11 -07002333 }
Bhalchandra Gajare0e795c42011-08-15 18:10:30 -07002334};
2335
2336struct platform_device msm_cpudai_auxpcm_rx = {
2337 .name = "msm-dai-q6",
2338 .id = 2,
2339 .dev = {
Kiran Kandi5f4ab692012-02-23 11:23:56 -08002340 .platform_data = &auxpcm_pdata,
Bhalchandra Gajare0e795c42011-08-15 18:10:30 -07002341 },
2342};
2343
2344struct platform_device msm_cpudai_auxpcm_tx = {
2345 .name = "msm-dai-q6",
2346 .id = 3,
Kiran Kandi5f4ab692012-02-23 11:23:56 -08002347 .dev = {
2348 .platform_data = &auxpcm_pdata,
2349 },
Bhalchandra Gajare0e795c42011-08-15 18:10:30 -07002350};
2351
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002352struct platform_device msm_cpu_fe = {
2353 .name = "msm-dai-fe",
2354 .id = -1,
2355};
2356
2357struct platform_device msm_stub_codec = {
2358 .name = "msm-stub-codec",
2359 .id = 1,
2360};
2361
2362struct platform_device msm_voice = {
2363 .name = "msm-pcm-voice",
2364 .id = -1,
2365};
2366
2367struct platform_device msm_voip = {
2368 .name = "msm-voip-dsp",
2369 .id = -1,
2370};
2371
2372struct platform_device msm_lpa_pcm = {
2373 .name = "msm-pcm-lpa",
2374 .id = -1,
2375};
2376
Asish Bhattacharya96bb6f42011-11-01 20:36:09 +05302377struct platform_device msm_compr_dsp = {
2378 .name = "msm-compr-dsp",
2379 .id = -1,
2380};
2381
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002382struct platform_device msm_pcm_hostless = {
2383 .name = "msm-pcm-hostless",
2384 .id = -1,
2385};
2386
Laxminath Kasamcee1d602011-08-01 19:26:57 +05302387struct platform_device msm_cpudai_afe_01_rx = {
2388 .name = "msm-dai-q6",
2389 .id = 0xE0,
2390};
2391
2392struct platform_device msm_cpudai_afe_01_tx = {
2393 .name = "msm-dai-q6",
2394 .id = 0xF0,
2395};
2396
2397struct platform_device msm_cpudai_afe_02_rx = {
2398 .name = "msm-dai-q6",
2399 .id = 0xF1,
2400};
2401
2402struct platform_device msm_cpudai_afe_02_tx = {
2403 .name = "msm-dai-q6",
2404 .id = 0xE1,
2405};
2406
2407struct platform_device msm_pcm_afe = {
2408 .name = "msm-pcm-afe",
2409 .id = -1,
2410};
2411
Matt Wagantall1f65d9d2012-04-25 14:24:20 -07002412static struct fs_driver_data gfx2d0_fs_data = {
2413 .clks = (struct fs_clk_data[]){
2414 { .name = "core_clk" },
2415 { .name = "iface_clk" },
2416 { 0 }
2417 },
2418 .bus_port0 = MSM_BUS_MASTER_GRAPHICS_2D_CORE0,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002419};
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002420
Matt Wagantall1f65d9d2012-04-25 14:24:20 -07002421static struct fs_driver_data gfx2d1_fs_data = {
2422 .clks = (struct fs_clk_data[]){
2423 { .name = "core_clk" },
2424 { .name = "iface_clk" },
2425 { 0 }
2426 },
2427 .bus_port0 = MSM_BUS_MASTER_GRAPHICS_2D_CORE1,
2428};
2429
2430static struct fs_driver_data gfx3d_fs_data = {
2431 .clks = (struct fs_clk_data[]){
2432 { .name = "core_clk", .reset_rate = 27000000 },
2433 { .name = "iface_clk" },
2434 { 0 }
2435 },
2436 .bus_port0 = MSM_BUS_MASTER_GRAPHICS_3D,
2437};
2438
Stephen Boyd7a0a6252012-12-05 14:01:17 -08002439static struct fs_driver_data gfx3d_fs_data_8960ab = {
2440 .clks = (struct fs_clk_data[]){
2441 { .name = "core_clk", .reset_rate = 27000000 },
2442 { .name = "iface_clk" },
2443 { .name = "bus_clk" },
2444 { 0 }
2445 },
2446 .bus_port0 = MSM_BUS_MASTER_GRAPHICS_3D,
2447 .bus_port1 = MSM_BUS_MASTER_GRAPHICS_3D_PORT1,
2448};
2449
Matt Wagantall1f65d9d2012-04-25 14:24:20 -07002450static struct fs_driver_data ijpeg_fs_data = {
2451 .clks = (struct fs_clk_data[]){
2452 { .name = "core_clk" },
2453 { .name = "iface_clk" },
2454 { .name = "bus_clk" },
2455 { 0 }
2456 },
2457 .bus_port0 = MSM_BUS_MASTER_JPEG_ENC,
2458};
2459
2460static struct fs_driver_data mdp_fs_data = {
2461 .clks = (struct fs_clk_data[]){
2462 { .name = "core_clk" },
2463 { .name = "iface_clk" },
2464 { .name = "bus_clk" },
2465 { .name = "vsync_clk" },
2466 { .name = "lut_clk" },
2467 { .name = "tv_src_clk" },
2468 { .name = "tv_clk" },
Matt Wagantallc33c1ed2012-07-23 17:19:08 -07002469 { .name = "reset1_clk" },
2470 { .name = "reset2_clk" },
Matt Wagantall1f65d9d2012-04-25 14:24:20 -07002471 { 0 }
2472 },
2473 .bus_port0 = MSM_BUS_MASTER_MDP_PORT0,
2474 .bus_port1 = MSM_BUS_MASTER_MDP_PORT1,
2475};
2476
2477static struct fs_driver_data rot_fs_data = {
2478 .clks = (struct fs_clk_data[]){
2479 { .name = "core_clk" },
2480 { .name = "iface_clk" },
2481 { .name = "bus_clk" },
2482 { 0 }
2483 },
2484 .bus_port0 = MSM_BUS_MASTER_ROTATOR,
2485};
2486
2487static struct fs_driver_data ved_fs_data = {
2488 .clks = (struct fs_clk_data[]){
2489 { .name = "core_clk" },
2490 { .name = "iface_clk" },
2491 { .name = "bus_clk" },
2492 { 0 }
2493 },
2494 .bus_port0 = MSM_BUS_MASTER_HD_CODEC_PORT0,
2495 .bus_port1 = MSM_BUS_MASTER_HD_CODEC_PORT1,
2496};
2497
Matt Wagantall5ac78922012-11-09 16:03:59 -08002498static struct fs_driver_data ved_fs_data_8960ab = {
2499 .clks = (struct fs_clk_data[]){
2500 { .name = "core_clk" },
2501 { .name = "iface_clk" },
2502 { .name = "bus_clk" },
2503 { 0 }
2504 },
2505 .bus_port0 = MSM_BUS_MASTER_VIDEO_DEC,
2506 .bus_port1 = MSM_BUS_MASTER_VIDEO_ENC,
2507};
2508
Matt Wagantall1f65d9d2012-04-25 14:24:20 -07002509static struct fs_driver_data vfe_fs_data = {
2510 .clks = (struct fs_clk_data[]){
2511 { .name = "core_clk" },
2512 { .name = "iface_clk" },
2513 { .name = "bus_clk" },
2514 { 0 }
2515 },
2516 .bus_port0 = MSM_BUS_MASTER_VFE,
2517};
2518
2519static struct fs_driver_data vpe_fs_data = {
2520 .clks = (struct fs_clk_data[]){
2521 { .name = "core_clk" },
2522 { .name = "iface_clk" },
2523 { .name = "bus_clk" },
2524 { 0 }
2525 },
2526 .bus_port0 = MSM_BUS_MASTER_VPE,
2527};
2528
2529struct platform_device *msm8960_footswitch[] __initdata = {
Matt Wagantalld4aab1e2012-05-03 20:26:56 -07002530 FS_8X60(FS_MDP, "vdd", "mdp.0", &mdp_fs_data),
Matt Wagantall316f2fc2012-05-03 20:41:42 -07002531 FS_8X60(FS_ROT, "vdd", "msm_rotator.0", &rot_fs_data),
Matt Wagantalle4454b82012-05-03 20:48:01 -07002532 FS_8X60(FS_IJPEG, "vdd", "msm_gemini.0", &ijpeg_fs_data),
Kiran Kumar H Nfa18a032012-06-25 14:34:18 -07002533 FS_8X60(FS_VFE, "vdd", "msm_vfe.0", &vfe_fs_data),
2534 FS_8X60(FS_VPE, "vdd", "msm_vpe.0", &vpe_fs_data),
Matt Wagantalld6fbf232012-05-03 20:09:28 -07002535 FS_8X60(FS_GFX3D, "vdd", "kgsl-3d0.0", &gfx3d_fs_data),
2536 FS_8X60(FS_GFX2D0, "vdd", "kgsl-2d0.0", &gfx2d0_fs_data),
2537 FS_8X60(FS_GFX2D1, "vdd", "kgsl-2d1.1", &gfx2d1_fs_data),
Matt Wagantall5e46aac2012-05-03 20:20:18 -07002538 FS_8X60(FS_VED, "vdd", "msm_vidc.0", &ved_fs_data),
Matt Wagantall1f65d9d2012-04-25 14:24:20 -07002539};
2540unsigned msm8960_num_footswitch __initdata = ARRAY_SIZE(msm8960_footswitch);
Ravishangar Kalyanam319a83c2012-03-21 18:38:05 -07002541
Stephen Boyd6716bd92012-10-25 11:46:04 -07002542struct platform_device *msm8960ab_footswitch[] __initdata = {
2543 FS_8X60(FS_MDP, "vdd", "mdp.0", &mdp_fs_data),
2544 FS_8X60(FS_ROT, "vdd", "msm_rotator.0", &rot_fs_data),
2545 FS_8X60(FS_IJPEG, "vdd", "msm_gemini.0", &ijpeg_fs_data),
2546 FS_8X60(FS_VFE, "vdd", "msm_vfe.0", &vfe_fs_data),
2547 FS_8X60(FS_VPE, "vdd", "msm_vpe.0", &vpe_fs_data),
Stephen Boyd7a0a6252012-12-05 14:01:17 -08002548 FS_8X60(FS_GFX3D, "vdd", "kgsl-3d0.0", &gfx3d_fs_data_8960ab),
Matt Wagantall5ac78922012-11-09 16:03:59 -08002549 FS_8X60(FS_VED, "vdd", "msm_vidc.0", &ved_fs_data_8960ab),
Stephen Boyd6716bd92012-10-25 11:46:04 -07002550};
2551unsigned msm8960ab_num_footswitch __initdata = ARRAY_SIZE(msm8960ab_footswitch);
2552
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002553#ifdef CONFIG_MSM_ROTATOR
Ravishangar Kalyanam319a83c2012-03-21 18:38:05 -07002554static struct msm_bus_vectors rotator_init_vectors[] = {
2555 {
2556 .src = MSM_BUS_MASTER_ROTATOR,
2557 .dst = MSM_BUS_SLAVE_EBI_CH0,
2558 .ab = 0,
2559 .ib = 0,
2560 },
2561};
2562
2563static struct msm_bus_vectors rotator_ui_vectors[] = {
2564 {
2565 .src = MSM_BUS_MASTER_ROTATOR,
2566 .dst = MSM_BUS_SLAVE_EBI_CH0,
2567 .ab = (1024 * 600 * 4 * 2 * 60),
2568 .ib = (1024 * 600 * 4 * 2 * 60 * 1.5),
2569 },
2570};
2571
2572static struct msm_bus_vectors rotator_vga_vectors[] = {
2573 {
2574 .src = MSM_BUS_MASTER_ROTATOR,
2575 .dst = MSM_BUS_SLAVE_EBI_CH0,
2576 .ab = (640 * 480 * 2 * 2 * 30),
2577 .ib = (640 * 480 * 2 * 2 * 30 * 1.5),
2578 },
2579};
2580static struct msm_bus_vectors rotator_720p_vectors[] = {
2581 {
2582 .src = MSM_BUS_MASTER_ROTATOR,
2583 .dst = MSM_BUS_SLAVE_EBI_CH0,
2584 .ab = (1280 * 736 * 2 * 2 * 30),
2585 .ib = (1280 * 736 * 2 * 2 * 30 * 1.5),
2586 },
2587};
2588
2589static struct msm_bus_vectors rotator_1080p_vectors[] = {
2590 {
2591 .src = MSM_BUS_MASTER_ROTATOR,
2592 .dst = MSM_BUS_SLAVE_EBI_CH0,
2593 .ab = (1920 * 1088 * 2 * 2 * 30),
2594 .ib = (1920 * 1088 * 2 * 2 * 30 * 1.5),
2595 },
2596};
2597
2598static struct msm_bus_paths rotator_bus_scale_usecases[] = {
2599 {
2600 ARRAY_SIZE(rotator_init_vectors),
2601 rotator_init_vectors,
2602 },
2603 {
2604 ARRAY_SIZE(rotator_ui_vectors),
2605 rotator_ui_vectors,
2606 },
2607 {
2608 ARRAY_SIZE(rotator_vga_vectors),
2609 rotator_vga_vectors,
2610 },
2611 {
2612 ARRAY_SIZE(rotator_720p_vectors),
2613 rotator_720p_vectors,
2614 },
2615 {
2616 ARRAY_SIZE(rotator_1080p_vectors),
2617 rotator_1080p_vectors,
2618 },
2619};
2620
2621struct msm_bus_scale_pdata rotator_bus_scale_pdata = {
2622 rotator_bus_scale_usecases,
2623 ARRAY_SIZE(rotator_bus_scale_usecases),
2624 .name = "rotator",
2625};
2626
2627void __init msm_rotator_update_bus_vectors(unsigned int xres,
2628 unsigned int yres)
2629{
2630 rotator_ui_vectors[0].ab = xres * yres * 4 * 2 * 60;
2631 rotator_ui_vectors[0].ib = xres * yres * 4 * 2 * 60 * 3 / 2;
2632}
2633
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002634#define ROTATOR_HW_BASE 0x04E00000
2635static struct resource resources_msm_rotator[] = {
2636 {
2637 .start = ROTATOR_HW_BASE,
2638 .end = ROTATOR_HW_BASE + 0x100000 - 1,
2639 .flags = IORESOURCE_MEM,
2640 },
2641 {
2642 .start = ROT_IRQ,
2643 .end = ROT_IRQ,
2644 .flags = IORESOURCE_IRQ,
2645 },
2646};
2647
2648static struct msm_rot_clocks rotator_clocks[] = {
2649 {
Matt Wagantallbb90da92011-10-25 15:07:52 -07002650 .clk_name = "core_clk",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002651 .clk_type = ROTATOR_CORE_CLK,
Nagamalleswararao Ganji0bb107342011-10-10 20:55:32 -07002652 .clk_rate = 200 * 1000 * 1000,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002653 },
2654 {
Matt Wagantallbb90da92011-10-25 15:07:52 -07002655 .clk_name = "iface_clk",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002656 .clk_type = ROTATOR_PCLK,
2657 .clk_rate = 0,
2658 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002659};
2660
2661static struct msm_rotator_platform_data rotator_pdata = {
2662 .number_of_clocks = ARRAY_SIZE(rotator_clocks),
2663 .hardware_version_number = 0x01020309,
2664 .rotator_clks = rotator_clocks,
Nagamalleswararao Ganji5fabbd62011-11-06 23:10:43 -08002665#ifdef CONFIG_MSM_BUS_SCALING
2666 .bus_scale_table = &rotator_bus_scale_pdata,
2667#endif
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002668};
2669
2670struct platform_device msm_rotator_device = {
2671 .name = "msm_rotator",
2672 .id = 0,
2673 .num_resources = ARRAY_SIZE(resources_msm_rotator),
2674 .resource = resources_msm_rotator,
2675 .dev = {
2676 .platform_data = &rotator_pdata,
2677 },
2678};
Olav Hauganef95ae32012-05-15 09:50:30 -07002679
2680void __init msm_rotator_set_split_iommu_domain(void)
2681{
2682 rotator_pdata.rot_iommu_split_domain = 1;
2683}
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002684#endif
2685
2686#define MIPI_DSI_HW_BASE 0x04700000
2687#define MDP_HW_BASE 0x05100000
2688
2689static struct resource msm_mipi_dsi1_resources[] = {
2690 {
2691 .name = "mipi_dsi",
2692 .start = MIPI_DSI_HW_BASE,
kuogee hsiehf12acf52011-09-06 10:49:43 -07002693 .end = MIPI_DSI_HW_BASE + 0x000F0000 - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002694 .flags = IORESOURCE_MEM,
2695 },
2696 {
2697 .start = DSI1_IRQ,
2698 .end = DSI1_IRQ,
2699 .flags = IORESOURCE_IRQ,
2700 },
2701};
2702
2703struct platform_device msm_mipi_dsi1_device = {
2704 .name = "mipi_dsi",
2705 .id = 1,
2706 .num_resources = ARRAY_SIZE(msm_mipi_dsi1_resources),
2707 .resource = msm_mipi_dsi1_resources,
2708};
2709
2710static struct resource msm_mdp_resources[] = {
2711 {
2712 .name = "mdp",
2713 .start = MDP_HW_BASE,
kuogee hsiehf12acf52011-09-06 10:49:43 -07002714 .end = MDP_HW_BASE + 0x000F0000 - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002715 .flags = IORESOURCE_MEM,
2716 },
2717 {
2718 .start = MDP_IRQ,
2719 .end = MDP_IRQ,
2720 .flags = IORESOURCE_IRQ,
2721 },
2722};
2723
2724static struct platform_device msm_mdp_device = {
2725 .name = "mdp",
2726 .id = 0,
2727 .num_resources = ARRAY_SIZE(msm_mdp_resources),
2728 .resource = msm_mdp_resources,
2729};
2730
2731static void __init msm_register_device(struct platform_device *pdev, void *data)
2732{
2733 int ret;
2734
2735 pdev->dev.platform_data = data;
2736 ret = platform_device_register(pdev);
2737 if (ret)
2738 dev_err(&pdev->dev,
2739 "%s: platform_device_register() failed = %d\n",
2740 __func__, ret);
2741}
2742
Ravishangar Kalyanam882930f2011-07-08 17:51:52 -07002743#ifdef CONFIG_MSM_BUS_SCALING
2744static struct platform_device msm_dtv_device = {
2745 .name = "dtv",
2746 .id = 0,
2747};
2748#endif
2749
Ravishangar Kalyanamc2fee312012-02-09 19:11:22 -08002750struct platform_device msm_lvds_device = {
Huaibin Yang4a084e32011-12-15 15:25:52 -08002751 .name = "lvds",
2752 .id = 0,
2753};
2754
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002755void __init msm_fb_register_device(char *name, void *data)
2756{
2757 if (!strncmp(name, "mdp", 3))
2758 msm_register_device(&msm_mdp_device, data);
2759 else if (!strncmp(name, "mipi_dsi", 8))
2760 msm_register_device(&msm_mipi_dsi1_device, data);
Huaibin Yang4a084e32011-12-15 15:25:52 -08002761 else if (!strncmp(name, "lvds", 4))
2762 msm_register_device(&msm_lvds_device, data);
Ravishangar Kalyanam882930f2011-07-08 17:51:52 -07002763#ifdef CONFIG_MSM_BUS_SCALING
2764 else if (!strncmp(name, "dtv", 3))
2765 msm_register_device(&msm_dtv_device, data);
2766#endif
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002767 else
2768 printk(KERN_ERR "%s: unknown device! %s\n", __func__, name);
2769}
2770
2771static struct resource resources_sps[] = {
2772 {
2773 .name = "pipe_mem",
2774 .start = 0x12800000,
2775 .end = 0x12800000 + 0x4000 - 1,
2776 .flags = IORESOURCE_MEM,
2777 },
2778 {
2779 .name = "bamdma_dma",
2780 .start = 0x12240000,
2781 .end = 0x12240000 + 0x1000 - 1,
2782 .flags = IORESOURCE_MEM,
2783 },
2784 {
2785 .name = "bamdma_bam",
2786 .start = 0x12244000,
2787 .end = 0x12244000 + 0x4000 - 1,
2788 .flags = IORESOURCE_MEM,
2789 },
2790 {
2791 .name = "bamdma_irq",
2792 .start = SPS_BAM_DMA_IRQ,
2793 .end = SPS_BAM_DMA_IRQ,
2794 .flags = IORESOURCE_IRQ,
2795 },
2796};
2797
2798struct msm_sps_platform_data msm_sps_pdata = {
2799 .bamdma_restricted_pipes = 0x06,
2800};
2801
2802struct platform_device msm_device_sps = {
2803 .name = "msm_sps",
2804 .id = -1,
2805 .num_resources = ARRAY_SIZE(resources_sps),
2806 .resource = resources_sps,
2807 .dev.platform_data = &msm_sps_pdata,
2808};
2809
2810#ifdef CONFIG_MSM_MPM
Praveen Chidambaram78499012011-11-01 17:15:17 -06002811static uint16_t msm_mpm_irqs_m2a[MSM_MPM_NR_MPM_IRQS] __initdata = {
Praveen Chidambaramb3d857c2011-05-31 16:28:07 -06002812 [1] = MSM_GPIO_TO_INT(46),
2813 [2] = MSM_GPIO_TO_INT(150),
2814 [4] = MSM_GPIO_TO_INT(103),
2815 [5] = MSM_GPIO_TO_INT(104),
2816 [6] = MSM_GPIO_TO_INT(105),
2817 [7] = MSM_GPIO_TO_INT(106),
2818 [8] = MSM_GPIO_TO_INT(107),
2819 [9] = MSM_GPIO_TO_INT(7),
2820 [10] = MSM_GPIO_TO_INT(11),
2821 [11] = MSM_GPIO_TO_INT(15),
2822 [12] = MSM_GPIO_TO_INT(19),
2823 [13] = MSM_GPIO_TO_INT(23),
2824 [14] = MSM_GPIO_TO_INT(27),
2825 [15] = MSM_GPIO_TO_INT(31),
2826 [16] = MSM_GPIO_TO_INT(35),
2827 [19] = MSM_GPIO_TO_INT(90),
2828 [20] = MSM_GPIO_TO_INT(92),
2829 [23] = MSM_GPIO_TO_INT(85),
2830 [24] = MSM_GPIO_TO_INT(83),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002831 [25] = USB1_HS_IRQ,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002832 [27] = HDMI_IRQ,
Praveen Chidambaramb3d857c2011-05-31 16:28:07 -06002833 [29] = MSM_GPIO_TO_INT(10),
2834 [30] = MSM_GPIO_TO_INT(102),
2835 [31] = MSM_GPIO_TO_INT(81),
2836 [32] = MSM_GPIO_TO_INT(78),
2837 [33] = MSM_GPIO_TO_INT(94),
2838 [34] = MSM_GPIO_TO_INT(72),
2839 [35] = MSM_GPIO_TO_INT(39),
2840 [36] = MSM_GPIO_TO_INT(43),
2841 [37] = MSM_GPIO_TO_INT(61),
2842 [38] = MSM_GPIO_TO_INT(50),
2843 [39] = MSM_GPIO_TO_INT(42),
2844 [41] = MSM_GPIO_TO_INT(62),
2845 [42] = MSM_GPIO_TO_INT(76),
2846 [43] = MSM_GPIO_TO_INT(75),
2847 [44] = MSM_GPIO_TO_INT(70),
2848 [45] = MSM_GPIO_TO_INT(69),
2849 [46] = MSM_GPIO_TO_INT(67),
2850 [47] = MSM_GPIO_TO_INT(65),
2851 [48] = MSM_GPIO_TO_INT(58),
2852 [49] = MSM_GPIO_TO_INT(54),
2853 [50] = MSM_GPIO_TO_INT(52),
2854 [51] = MSM_GPIO_TO_INT(49),
2855 [52] = MSM_GPIO_TO_INT(40),
2856 [53] = MSM_GPIO_TO_INT(37),
2857 [54] = MSM_GPIO_TO_INT(24),
2858 [55] = MSM_GPIO_TO_INT(14),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002859};
2860
Praveen Chidambaram78499012011-11-01 17:15:17 -06002861static uint16_t msm_mpm_bypassed_apps_irqs[] __initdata = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002862 TLMM_MSM_SUMMARY_IRQ,
2863 RPM_APCC_CPU0_GP_HIGH_IRQ,
2864 RPM_APCC_CPU0_GP_MEDIUM_IRQ,
2865 RPM_APCC_CPU0_GP_LOW_IRQ,
2866 RPM_APCC_CPU0_WAKE_UP_IRQ,
2867 RPM_APCC_CPU1_GP_HIGH_IRQ,
2868 RPM_APCC_CPU1_GP_MEDIUM_IRQ,
2869 RPM_APCC_CPU1_GP_LOW_IRQ,
2870 RPM_APCC_CPU1_WAKE_UP_IRQ,
2871 MSS_TO_APPS_IRQ_0,
2872 MSS_TO_APPS_IRQ_1,
2873 MSS_TO_APPS_IRQ_2,
2874 MSS_TO_APPS_IRQ_3,
2875 MSS_TO_APPS_IRQ_4,
2876 MSS_TO_APPS_IRQ_5,
2877 MSS_TO_APPS_IRQ_6,
2878 MSS_TO_APPS_IRQ_7,
2879 MSS_TO_APPS_IRQ_8,
2880 MSS_TO_APPS_IRQ_9,
2881 LPASS_SCSS_GP_LOW_IRQ,
2882 LPASS_SCSS_GP_MEDIUM_IRQ,
2883 LPASS_SCSS_GP_HIGH_IRQ,
David Collins5e2b2fd2011-09-08 15:23:30 -07002884 SPS_MTI_30,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002885 SPS_MTI_31,
David Collins5e2b2fd2011-09-08 15:23:30 -07002886 RIVA_APSS_SPARE_IRQ,
David Collins84ecd0a2011-09-27 21:11:11 -07002887 RIVA_APPS_WLAN_SMSM_IRQ,
2888 RIVA_APPS_WLAN_RX_DATA_AVAIL_IRQ,
2889 RIVA_APPS_WLAN_DATA_XFER_DONE_IRQ,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002890};
2891
Praveen Chidambaram78499012011-11-01 17:15:17 -06002892struct msm_mpm_device_data msm8960_mpm_dev_data __initdata = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002893 .irqs_m2a = msm_mpm_irqs_m2a,
2894 .irqs_m2a_size = ARRAY_SIZE(msm_mpm_irqs_m2a),
2895 .bypassed_apps_irqs = msm_mpm_bypassed_apps_irqs,
2896 .bypassed_apps_irqs_size = ARRAY_SIZE(msm_mpm_bypassed_apps_irqs),
2897 .mpm_request_reg_base = MSM_RPM_BASE + 0x9d8,
2898 .mpm_status_reg_base = MSM_RPM_BASE + 0xdf8,
2899 .mpm_apps_ipc_reg = MSM_APCS_GCC_BASE + 0x008,
2900 .mpm_apps_ipc_val = BIT(1),
2901 .mpm_ipc_irq = RPM_APCC_CPU0_GP_MEDIUM_IRQ,
2902
2903};
2904#endif
2905
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002906#define LPASS_SLIMBUS_PHYS 0x28080000
2907#define LPASS_SLIMBUS_BAM_PHYS 0x28084000
Sagar Dhariacc969452011-09-19 10:34:30 -06002908#define LPASS_SLIMBUS_SLEW (MSM8960_TLMM_PHYS + 0x207C)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002909/* Board info for the slimbus slave device */
2910static struct resource slimbus_res[] = {
2911 {
2912 .start = LPASS_SLIMBUS_PHYS,
2913 .end = LPASS_SLIMBUS_PHYS + 8191,
2914 .flags = IORESOURCE_MEM,
2915 .name = "slimbus_physical",
2916 },
2917 {
2918 .start = LPASS_SLIMBUS_BAM_PHYS,
2919 .end = LPASS_SLIMBUS_BAM_PHYS + 8191,
2920 .flags = IORESOURCE_MEM,
2921 .name = "slimbus_bam_physical",
2922 },
2923 {
Sagar Dhariacc969452011-09-19 10:34:30 -06002924 .start = LPASS_SLIMBUS_SLEW,
2925 .end = LPASS_SLIMBUS_SLEW + 4 - 1,
2926 .flags = IORESOURCE_MEM,
2927 .name = "slimbus_slew_reg",
2928 },
2929 {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002930 .start = SLIMBUS0_CORE_EE1_IRQ,
2931 .end = SLIMBUS0_CORE_EE1_IRQ,
2932 .flags = IORESOURCE_IRQ,
2933 .name = "slimbus_irq",
2934 },
2935 {
2936 .start = SLIMBUS0_BAM_EE1_IRQ,
2937 .end = SLIMBUS0_BAM_EE1_IRQ,
2938 .flags = IORESOURCE_IRQ,
2939 .name = "slimbus_bam_irq",
2940 },
2941};
2942
2943struct platform_device msm_slim_ctrl = {
2944 .name = "msm_slim_ctrl",
2945 .id = 1,
2946 .num_resources = ARRAY_SIZE(slimbus_res),
2947 .resource = slimbus_res,
2948 .dev = {
2949 .coherent_dma_mask = 0xffffffffULL,
2950 },
2951};
2952
Lucille Sylvester6e362412011-12-09 16:21:42 -07002953static struct msm_dcvs_freq_entry grp3d_freq[] = {
Abhijeet Dharmapurikar7e37e6e2012-08-23 18:58:44 -07002954 {0, 900, 0, 0, 0},
2955 {0, 950, 0, 0, 0},
2956 {0, 950, 0, 0, 0},
2957 {0, 1200, 1, 100, 100},
Lucille Sylvester6e362412011-12-09 16:21:42 -07002958};
2959
2960static struct msm_dcvs_freq_entry grp2d_freq[] = {
Abhijeet Dharmapurikar7e37e6e2012-08-23 18:58:44 -07002961 {0, 900, 0, 0, 0},
2962 {0, 950, 1, 100, 100},
Lucille Sylvester6e362412011-12-09 16:21:42 -07002963};
2964
2965static struct msm_dcvs_core_info grp3d_core_info = {
Abhijeet Dharmapurikar7e37e6e2012-08-23 18:58:44 -07002966 .freq_tbl = &grp3d_freq[0],
2967 .core_param = {
2968 .core_type = MSM_DCVS_CORE_TYPE_GPU,
Lucille Sylvester6e362412011-12-09 16:21:42 -07002969 },
Abhijeet Dharmapurikar7e37e6e2012-08-23 18:58:44 -07002970 .algo_param = {
2971 .disable_pc_threshold = 0,
2972 .em_win_size_min_us = 100000,
2973 .em_win_size_max_us = 300000,
2974 .em_max_util_pct = 97,
2975 .group_id = 0,
2976 .max_freq_chg_time_us = 100000,
2977 .slack_mode_dynamic = 0,
2978 .slack_weight_thresh_pct = 0,
2979 .slack_time_min_us = 39000,
2980 .slack_time_max_us = 39000,
2981 .ss_win_size_min_us = 1000000,
2982 .ss_win_size_max_us = 1000000,
2983 .ss_util_pct = 95,
Steve Muckle8d0782e2012-12-06 14:31:00 -08002984 .ss_no_corr_below_freq = 0,
Lucille Sylvester6e362412011-12-09 16:21:42 -07002985 },
Abhijeet Dharmapurikar7e37e6e2012-08-23 18:58:44 -07002986 .energy_coeffs = {
2987 .active_coeff_a = 2492,
2988 .active_coeff_b = 0,
2989 .active_coeff_c = 0,
2990
2991 .leakage_coeff_a = -17720,
2992 .leakage_coeff_b = 37,
2993 .leakage_coeff_c = 2729,
2994 .leakage_coeff_d = -277,
2995 },
2996 .power_param = {
2997 .current_temp = 25,
2998 .num_freq = ARRAY_SIZE(grp3d_freq),
2999 }
Lucille Sylvester6e362412011-12-09 16:21:42 -07003000};
3001
3002static struct msm_dcvs_core_info grp2d_core_info = {
Abhijeet Dharmapurikar7e37e6e2012-08-23 18:58:44 -07003003 .freq_tbl = &grp2d_freq[0],
3004 .core_param = {
3005 .core_type = MSM_DCVS_CORE_TYPE_GPU,
Lucille Sylvester6e362412011-12-09 16:21:42 -07003006 },
Abhijeet Dharmapurikar7e37e6e2012-08-23 18:58:44 -07003007 .algo_param = {
3008 .disable_pc_threshold = 0,
3009 .em_win_size_min_us = 100000,
3010 .em_win_size_max_us = 300000,
3011 .em_max_util_pct = 97,
3012 .group_id = 0,
3013 .max_freq_chg_time_us = 100000,
3014 .slack_mode_dynamic = 0,
3015 .slack_weight_thresh_pct = 0,
3016 .slack_time_min_us = 39000,
3017 .slack_time_max_us = 39000,
3018 .ss_win_size_min_us = 1000000,
3019 .ss_win_size_max_us = 1000000,
3020 .ss_util_pct = 95,
Steve Muckle8d0782e2012-12-06 14:31:00 -08003021 .ss_no_corr_below_freq = 0,
Lucille Sylvester6e362412011-12-09 16:21:42 -07003022 },
Abhijeet Dharmapurikar7e37e6e2012-08-23 18:58:44 -07003023 .energy_coeffs = {
3024 .active_coeff_a = 2492,
3025 .active_coeff_b = 0,
3026 .active_coeff_c = 0,
3027
3028 .leakage_coeff_a = -17720,
3029 .leakage_coeff_b = 37,
3030 .leakage_coeff_c = 2729,
3031 .leakage_coeff_d = -277,
3032 },
3033 .power_param = {
3034 .current_temp = 25,
3035 .num_freq = ARRAY_SIZE(grp2d_freq),
3036 }
Lucille Sylvester6e362412011-12-09 16:21:42 -07003037};
3038
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003039#ifdef CONFIG_MSM_BUS_SCALING
3040static struct msm_bus_vectors grp3d_init_vectors[] = {
3041 {
3042 .src = MSM_BUS_MASTER_GRAPHICS_3D,
3043 .dst = MSM_BUS_SLAVE_EBI_CH0,
3044 .ab = 0,
3045 .ib = 0,
3046 },
3047};
3048
Lucille Sylvester34ec3692011-08-16 16:28:04 -06003049static struct msm_bus_vectors grp3d_low_vectors[] = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003050 {
3051 .src = MSM_BUS_MASTER_GRAPHICS_3D,
3052 .dst = MSM_BUS_SLAVE_EBI_CH0,
3053 .ab = 0,
Lucille Sylvester3efebb52012-01-17 12:58:38 -07003054 .ib = KGSL_CONVERT_TO_MBPS(1000),
Lucille Sylvester34ec3692011-08-16 16:28:04 -06003055 },
3056};
3057
3058static struct msm_bus_vectors grp3d_nominal_low_vectors[] = {
3059 {
3060 .src = MSM_BUS_MASTER_GRAPHICS_3D,
3061 .dst = MSM_BUS_SLAVE_EBI_CH0,
3062 .ab = 0,
Suman Tatiraju0123d182011-09-30 14:59:06 -07003063 .ib = KGSL_CONVERT_TO_MBPS(2048),
Lucille Sylvester34ec3692011-08-16 16:28:04 -06003064 },
3065};
3066
3067static struct msm_bus_vectors grp3d_nominal_high_vectors[] = {
3068 {
3069 .src = MSM_BUS_MASTER_GRAPHICS_3D,
3070 .dst = MSM_BUS_SLAVE_EBI_CH0,
3071 .ab = 0,
Suman Tatiraju0123d182011-09-30 14:59:06 -07003072 .ib = KGSL_CONVERT_TO_MBPS(2656),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003073 },
3074};
3075
3076static struct msm_bus_vectors grp3d_max_vectors[] = {
3077 {
3078 .src = MSM_BUS_MASTER_GRAPHICS_3D,
3079 .dst = MSM_BUS_SLAVE_EBI_CH0,
3080 .ab = 0,
Suman Tatiraju0123d182011-09-30 14:59:06 -07003081 .ib = KGSL_CONVERT_TO_MBPS(3968),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003082 },
3083};
3084
3085static struct msm_bus_paths grp3d_bus_scale_usecases[] = {
3086 {
3087 ARRAY_SIZE(grp3d_init_vectors),
3088 grp3d_init_vectors,
3089 },
3090 {
Lucille Sylvester34ec3692011-08-16 16:28:04 -06003091 ARRAY_SIZE(grp3d_low_vectors),
3092 grp3d_low_vectors,
3093 },
3094 {
3095 ARRAY_SIZE(grp3d_nominal_low_vectors),
3096 grp3d_nominal_low_vectors,
3097 },
3098 {
3099 ARRAY_SIZE(grp3d_nominal_high_vectors),
3100 grp3d_nominal_high_vectors,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003101 },
3102 {
3103 ARRAY_SIZE(grp3d_max_vectors),
3104 grp3d_max_vectors,
3105 },
3106};
3107
3108static struct msm_bus_scale_pdata grp3d_bus_scale_pdata = {
3109 grp3d_bus_scale_usecases,
3110 ARRAY_SIZE(grp3d_bus_scale_usecases),
3111 .name = "grp3d",
3112};
3113
3114static struct msm_bus_vectors grp2d0_init_vectors[] = {
3115 {
3116 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE0,
3117 .dst = MSM_BUS_SLAVE_EBI_CH0,
3118 .ab = 0,
3119 .ib = 0,
3120 },
3121};
3122
Lucille Sylvester808eca22011-11-03 10:26:29 -07003123static struct msm_bus_vectors grp2d0_nominal_vectors[] = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003124 {
3125 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE0,
3126 .dst = MSM_BUS_SLAVE_EBI_CH0,
3127 .ab = 0,
Lucille Sylvester3efebb52012-01-17 12:58:38 -07003128 .ib = KGSL_CONVERT_TO_MBPS(1000),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003129 },
3130};
3131
Lucille Sylvester808eca22011-11-03 10:26:29 -07003132static struct msm_bus_vectors grp2d0_max_vectors[] = {
3133 {
3134 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE0,
3135 .dst = MSM_BUS_SLAVE_EBI_CH0,
3136 .ab = 0,
3137 .ib = KGSL_CONVERT_TO_MBPS(2048),
3138 },
3139};
3140
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003141static struct msm_bus_paths grp2d0_bus_scale_usecases[] = {
3142 {
3143 ARRAY_SIZE(grp2d0_init_vectors),
3144 grp2d0_init_vectors,
3145 },
3146 {
Lucille Sylvester808eca22011-11-03 10:26:29 -07003147 ARRAY_SIZE(grp2d0_nominal_vectors),
3148 grp2d0_nominal_vectors,
3149 },
3150 {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003151 ARRAY_SIZE(grp2d0_max_vectors),
3152 grp2d0_max_vectors,
3153 },
3154};
3155
3156struct msm_bus_scale_pdata grp2d0_bus_scale_pdata = {
3157 grp2d0_bus_scale_usecases,
3158 ARRAY_SIZE(grp2d0_bus_scale_usecases),
3159 .name = "grp2d0",
3160};
3161
3162static struct msm_bus_vectors grp2d1_init_vectors[] = {
3163 {
3164 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE1,
3165 .dst = MSM_BUS_SLAVE_EBI_CH0,
3166 .ab = 0,
3167 .ib = 0,
3168 },
3169};
3170
Lucille Sylvester808eca22011-11-03 10:26:29 -07003171static struct msm_bus_vectors grp2d1_nominal_vectors[] = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003172 {
3173 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE1,
3174 .dst = MSM_BUS_SLAVE_EBI_CH0,
3175 .ab = 0,
Lucille Sylvester3efebb52012-01-17 12:58:38 -07003176 .ib = KGSL_CONVERT_TO_MBPS(1000),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003177 },
3178};
3179
Lucille Sylvester808eca22011-11-03 10:26:29 -07003180static struct msm_bus_vectors grp2d1_max_vectors[] = {
3181 {
3182 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE1,
3183 .dst = MSM_BUS_SLAVE_EBI_CH0,
3184 .ab = 0,
3185 .ib = KGSL_CONVERT_TO_MBPS(2048),
3186 },
3187};
3188
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003189static struct msm_bus_paths grp2d1_bus_scale_usecases[] = {
3190 {
3191 ARRAY_SIZE(grp2d1_init_vectors),
3192 grp2d1_init_vectors,
3193 },
3194 {
Lucille Sylvester808eca22011-11-03 10:26:29 -07003195 ARRAY_SIZE(grp2d1_nominal_vectors),
3196 grp2d1_nominal_vectors,
3197 },
3198 {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003199 ARRAY_SIZE(grp2d1_max_vectors),
3200 grp2d1_max_vectors,
3201 },
3202};
3203
3204struct msm_bus_scale_pdata grp2d1_bus_scale_pdata = {
3205 grp2d1_bus_scale_usecases,
3206 ARRAY_SIZE(grp2d1_bus_scale_usecases),
3207 .name = "grp2d1",
3208};
3209#endif
3210
3211static struct resource kgsl_3d0_resources[] = {
3212 {
3213 .name = KGSL_3D0_REG_MEMORY,
3214 .start = 0x04300000, /* GFX3D address */
3215 .end = 0x0431ffff,
3216 .flags = IORESOURCE_MEM,
3217 },
3218 {
3219 .name = KGSL_3D0_IRQ,
3220 .start = GFX3D_IRQ,
3221 .end = GFX3D_IRQ,
3222 .flags = IORESOURCE_IRQ,
3223 },
3224};
3225
Carter Cooper3852cbb2012-08-20 22:11:42 -06003226static const struct kgsl_iommu_ctx kgsl_3d0_iommu0_ctxs[] = {
Shubhraprakash Daseb6df1d2012-05-01 00:55:35 -06003227 { "gfx3d_user", 0 },
3228 { "gfx3d_priv", 1 },
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003229};
3230
Carter Cooper3852cbb2012-08-20 22:11:42 -06003231static const struct kgsl_iommu_ctx kgsl_3d0_iommu1_ctxs[] = {
3232 { "gfx3d1_user", 0 },
3233 { "gfx3d1_priv", 1 },
3234};
3235
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003236static struct kgsl_device_iommu_data kgsl_3d0_iommu_data[] = {
3237 {
Carter Cooper3852cbb2012-08-20 22:11:42 -06003238 .iommu_ctxs = kgsl_3d0_iommu0_ctxs,
3239 .iommu_ctx_count = ARRAY_SIZE(kgsl_3d0_iommu0_ctxs),
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003240 .physstart = 0x07C00000,
3241 .physend = 0x07C00000 + SZ_1M - 1,
3242 },
Carter Cooper3852cbb2012-08-20 22:11:42 -06003243 {
3244 .iommu_ctxs = kgsl_3d0_iommu1_ctxs,
3245 .iommu_ctx_count = ARRAY_SIZE(kgsl_3d0_iommu1_ctxs),
3246 .physstart = 0x07D00000,
3247 .physend = 0x07D00000 + SZ_1M - 1,
3248 },
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003249};
3250
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003251static struct kgsl_device_platform_data kgsl_3d0_pdata = {
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003252 .pwrlevel = {
3253 {
3254 .gpu_freq = 400000000,
3255 .bus_freq = 4,
3256 .io_fraction = 0,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003257 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003258 {
3259 .gpu_freq = 300000000,
3260 .bus_freq = 3,
3261 .io_fraction = 33,
3262 },
3263 {
3264 .gpu_freq = 200000000,
3265 .bus_freq = 2,
3266 .io_fraction = 100,
3267 },
3268 {
3269 .gpu_freq = 128000000,
3270 .bus_freq = 1,
3271 .io_fraction = 100,
3272 },
3273 {
3274 .gpu_freq = 27000000,
3275 .bus_freq = 0,
3276 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003277 },
Lucille Sylvester67b4c532012-02-08 11:24:31 -08003278 .init_level = 1,
Lucille Sylvester6e362412011-12-09 16:21:42 -07003279 .num_levels = ARRAY_SIZE(grp3d_freq) + 1,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003280 .set_grp_async = NULL,
Lucille Sylvester5dc67512012-03-27 15:07:58 -06003281 .idle_timeout = HZ/12,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003282 .nap_allowed = true,
3283 .clk_map = KGSL_CLK_CORE | KGSL_CLK_IFACE | KGSL_CLK_MEM_IFACE,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003284#ifdef CONFIG_MSM_BUS_SCALING
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003285 .bus_scale_table = &grp3d_bus_scale_pdata,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003286#endif
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003287 .iommu_data = kgsl_3d0_iommu_data,
3288 .iommu_count = ARRAY_SIZE(kgsl_3d0_iommu_data),
Lucille Sylvester6e362412011-12-09 16:21:42 -07003289 .core_info = &grp3d_core_info,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003290};
3291
3292struct platform_device msm_kgsl_3d0 = {
3293 .name = "kgsl-3d0",
3294 .id = 0,
3295 .num_resources = ARRAY_SIZE(kgsl_3d0_resources),
3296 .resource = kgsl_3d0_resources,
3297 .dev = {
3298 .platform_data = &kgsl_3d0_pdata,
3299 },
3300};
3301
3302static struct resource kgsl_2d0_resources[] = {
3303 {
3304 .name = KGSL_2D0_REG_MEMORY,
3305 .start = 0x04100000, /* Z180 base address */
3306 .end = 0x04100FFF,
3307 .flags = IORESOURCE_MEM,
3308 },
3309 {
3310 .name = KGSL_2D0_IRQ,
3311 .start = GFX2D0_IRQ,
3312 .end = GFX2D0_IRQ,
3313 .flags = IORESOURCE_IRQ,
3314 },
3315};
3316
Shubhraprakash Daseb6df1d2012-05-01 00:55:35 -06003317static const struct kgsl_iommu_ctx kgsl_2d0_iommu_ctxs[] = {
3318 { "gfx2d0_2d0", 0 },
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003319};
3320
3321static struct kgsl_device_iommu_data kgsl_2d0_iommu_data[] = {
3322 {
Shubhraprakash Daseb6df1d2012-05-01 00:55:35 -06003323 .iommu_ctxs = kgsl_2d0_iommu_ctxs,
3324 .iommu_ctx_count = ARRAY_SIZE(kgsl_2d0_iommu_ctxs),
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003325 .physstart = 0x07D00000,
3326 .physend = 0x07D00000 + SZ_1M - 1,
3327 },
3328};
3329
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003330static struct kgsl_device_platform_data kgsl_2d0_pdata = {
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003331 .pwrlevel = {
3332 {
3333 .gpu_freq = 200000000,
Lucille Sylvester808eca22011-11-03 10:26:29 -07003334 .bus_freq = 2,
3335 },
3336 {
3337 .gpu_freq = 96000000,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003338 .bus_freq = 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003339 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003340 {
Lucille Sylvester808eca22011-11-03 10:26:29 -07003341 .gpu_freq = 27000000,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003342 .bus_freq = 0,
3343 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003344 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003345 .init_level = 0,
Lucille Sylvester6e362412011-12-09 16:21:42 -07003346 .num_levels = ARRAY_SIZE(grp2d_freq) + 1,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003347 .set_grp_async = NULL,
Lucille Sylvester808eca22011-11-03 10:26:29 -07003348 .idle_timeout = HZ/5,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003349 .nap_allowed = true,
3350 .clk_map = KGSL_CLK_CORE | KGSL_CLK_IFACE,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003351#ifdef CONFIG_MSM_BUS_SCALING
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003352 .bus_scale_table = &grp2d0_bus_scale_pdata,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003353#endif
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003354 .iommu_data = kgsl_2d0_iommu_data,
3355 .iommu_count = ARRAY_SIZE(kgsl_2d0_iommu_data),
Lucille Sylvester6e362412011-12-09 16:21:42 -07003356 .core_info = &grp2d_core_info,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003357};
3358
3359struct platform_device msm_kgsl_2d0 = {
3360 .name = "kgsl-2d0",
3361 .id = 0,
3362 .num_resources = ARRAY_SIZE(kgsl_2d0_resources),
3363 .resource = kgsl_2d0_resources,
3364 .dev = {
3365 .platform_data = &kgsl_2d0_pdata,
3366 },
3367};
3368
Shubhraprakash Daseb6df1d2012-05-01 00:55:35 -06003369static const struct kgsl_iommu_ctx kgsl_2d1_iommu_ctxs[] = {
3370 { "gfx2d1_2d1", 0 },
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003371};
3372
3373static struct kgsl_device_iommu_data kgsl_2d1_iommu_data[] = {
3374 {
Shubhraprakash Daseb6df1d2012-05-01 00:55:35 -06003375 .iommu_ctxs = kgsl_2d1_iommu_ctxs,
3376 .iommu_ctx_count = ARRAY_SIZE(kgsl_2d1_iommu_ctxs),
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003377 .physstart = 0x07E00000,
3378 .physend = 0x07E00000 + SZ_1M - 1,
3379 },
3380};
3381
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003382static struct resource kgsl_2d1_resources[] = {
3383 {
3384 .name = KGSL_2D1_REG_MEMORY,
3385 .start = 0x04200000, /* Z180 device 1 base address */
3386 .end = 0x04200FFF,
3387 .flags = IORESOURCE_MEM,
3388 },
3389 {
3390 .name = KGSL_2D1_IRQ,
3391 .start = GFX2D1_IRQ,
3392 .end = GFX2D1_IRQ,
3393 .flags = IORESOURCE_IRQ,
3394 },
3395};
3396
3397static struct kgsl_device_platform_data kgsl_2d1_pdata = {
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003398 .pwrlevel = {
3399 {
3400 .gpu_freq = 200000000,
Lucille Sylvester808eca22011-11-03 10:26:29 -07003401 .bus_freq = 2,
3402 },
3403 {
3404 .gpu_freq = 96000000,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003405 .bus_freq = 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003406 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003407 {
Lucille Sylvester808eca22011-11-03 10:26:29 -07003408 .gpu_freq = 27000000,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003409 .bus_freq = 0,
3410 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003411 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003412 .init_level = 0,
Lucille Sylvester6e362412011-12-09 16:21:42 -07003413 .num_levels = ARRAY_SIZE(grp2d_freq) + 1,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003414 .set_grp_async = NULL,
Lucille Sylvester808eca22011-11-03 10:26:29 -07003415 .idle_timeout = HZ/5,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003416 .nap_allowed = true,
3417 .clk_map = KGSL_CLK_CORE | KGSL_CLK_IFACE,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003418#ifdef CONFIG_MSM_BUS_SCALING
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003419 .bus_scale_table = &grp2d1_bus_scale_pdata,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003420#endif
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003421 .iommu_data = kgsl_2d1_iommu_data,
3422 .iommu_count = ARRAY_SIZE(kgsl_2d1_iommu_data),
Lucille Sylvester6e362412011-12-09 16:21:42 -07003423 .core_info = &grp2d_core_info,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003424};
3425
3426struct platform_device msm_kgsl_2d1 = {
3427 .name = "kgsl-2d1",
3428 .id = 1,
3429 .num_resources = ARRAY_SIZE(kgsl_2d1_resources),
3430 .resource = kgsl_2d1_resources,
3431 .dev = {
3432 .platform_data = &kgsl_2d1_pdata,
3433 },
3434};
3435
3436#ifdef CONFIG_MSM_GEMINI
Sunid Wilson5d585172012-12-15 17:24:04 -08003437
3438static struct msm_bus_vectors gemini_init_vector[] = {
3439 {
3440 .src = MSM_BUS_MASTER_JPEG_ENC,
3441 .dst = MSM_BUS_SLAVE_EBI_CH0,
3442 .ab = 0,
3443 .ib = 0,
3444 },
3445 {
3446 .src = MSM_BUS_MASTER_JPEG_ENC,
3447 .dst = MSM_BUS_SLAVE_MM_IMEM,
3448 .ab = 0,
3449 .ib = 0,
3450 },
3451};
3452
3453static struct msm_bus_vectors gemini_encode_vector[] = {
3454 {
3455 .src = MSM_BUS_MASTER_JPEG_ENC,
3456 .dst = MSM_BUS_SLAVE_EBI_CH0,
3457 .ab = 540000000,
3458 .ib = 1350000000,
3459 },
3460 {
3461 .src = MSM_BUS_MASTER_JPEG_ENC,
3462 .dst = MSM_BUS_SLAVE_MM_IMEM,
3463 .ab = 43200000,
3464 .ib = 69120000,
3465 },
3466};
3467
3468static struct msm_bus_paths gemini_bus_path[] = {
3469 {
3470 ARRAY_SIZE(gemini_init_vector),
3471 gemini_init_vector,
3472 },
3473 {
3474 ARRAY_SIZE(gemini_encode_vector),
3475 gemini_encode_vector,
3476 },
3477};
3478
3479static struct msm_bus_scale_pdata gemini_bus_scale_pdata = {
3480 gemini_bus_path,
3481 ARRAY_SIZE(gemini_bus_path),
3482 .name = "msm_gemini",
3483};
3484
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003485static struct resource msm_gemini_resources[] = {
3486 {
3487 .start = 0x04600000,
3488 .end = 0x04600000 + SZ_1M - 1,
3489 .flags = IORESOURCE_MEM,
3490 },
3491 {
3492 .start = JPEG_IRQ,
3493 .end = JPEG_IRQ,
3494 .flags = IORESOURCE_IRQ,
3495 },
3496};
3497
3498struct platform_device msm8960_gemini_device = {
3499 .name = "msm_gemini",
3500 .resource = msm_gemini_resources,
3501 .num_resources = ARRAY_SIZE(msm_gemini_resources),
Sunid Wilson5d585172012-12-15 17:24:04 -08003502 .dev = {
3503 .platform_data = &gemini_bus_scale_pdata,
3504 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003505};
3506#endif
3507
Kalyani Oruganti465d1e12012-05-15 10:23:05 -07003508#ifdef CONFIG_MSM_MERCURY
3509static struct resource msm_mercury_resources[] = {
3510 {
3511 .start = 0x05000000,
3512 .end = 0x05000000 + SZ_1M - 1,
3513 .name = "mercury_resource_base",
3514 .flags = IORESOURCE_MEM,
3515 },
3516 {
3517 .start = JPEGD_IRQ,
3518 .end = JPEGD_IRQ,
3519 .flags = IORESOURCE_IRQ,
3520 },
3521};
3522struct platform_device msm8960_mercury_device = {
3523 .name = "msm_mercury",
3524 .resource = msm_mercury_resources,
3525 .num_resources = ARRAY_SIZE(msm_mercury_resources),
3526};
3527#endif
3528
Praveen Chidambaram78499012011-11-01 17:15:17 -06003529struct msm_rpm_platform_data msm8960_rpm_data __initdata = {
3530 .reg_base_addrs = {
3531 [MSM_RPM_PAGE_STATUS] = MSM_RPM_BASE,
3532 [MSM_RPM_PAGE_CTRL] = MSM_RPM_BASE + 0x400,
3533 [MSM_RPM_PAGE_REQ] = MSM_RPM_BASE + 0x600,
3534 [MSM_RPM_PAGE_ACK] = MSM_RPM_BASE + 0xa00,
3535 },
3536 .irq_ack = RPM_APCC_CPU0_GP_HIGH_IRQ,
Stephen Boydf61255e2012-02-24 14:31:09 -08003537 .irq_err = RPM_APCC_CPU0_GP_LOW_IRQ,
Praveen Chidambarame396ce62012-03-30 11:15:57 -06003538 .irq_wakeup = RPM_APCC_CPU0_WAKE_UP_IRQ,
Praveen Chidambaram78499012011-11-01 17:15:17 -06003539 .ipc_rpm_reg = MSM_APCS_GCC_BASE + 0x008,
3540 .ipc_rpm_val = 4,
3541 .target_id = {
3542 MSM_RPM_MAP(8960, NOTIFICATION_CONFIGURED_0, NOTIFICATION, 4),
3543 MSM_RPM_MAP(8960, NOTIFICATION_REGISTERED_0, NOTIFICATION, 4),
3544 MSM_RPM_MAP(8960, INVALIDATE_0, INVALIDATE, 8),
3545 MSM_RPM_MAP(8960, TRIGGER_TIMED_TO, TRIGGER_TIMED, 1),
3546 MSM_RPM_MAP(8960, TRIGGER_TIMED_SCLK_COUNT, TRIGGER_TIMED, 1),
3547 MSM_RPM_MAP(8960, RPM_CTL, RPM_CTL, 1),
3548 MSM_RPM_MAP(8960, CXO_CLK, CXO_CLK, 1),
3549 MSM_RPM_MAP(8960, PXO_CLK, PXO_CLK, 1),
3550 MSM_RPM_MAP(8960, APPS_FABRIC_CLK, APPS_FABRIC_CLK, 1),
3551 MSM_RPM_MAP(8960, SYSTEM_FABRIC_CLK, SYSTEM_FABRIC_CLK, 1),
3552 MSM_RPM_MAP(8960, MM_FABRIC_CLK, MM_FABRIC_CLK, 1),
3553 MSM_RPM_MAP(8960, DAYTONA_FABRIC_CLK, DAYTONA_FABRIC_CLK, 1),
3554 MSM_RPM_MAP(8960, SFPB_CLK, SFPB_CLK, 1),
3555 MSM_RPM_MAP(8960, CFPB_CLK, CFPB_CLK, 1),
3556 MSM_RPM_MAP(8960, MMFPB_CLK, MMFPB_CLK, 1),
3557 MSM_RPM_MAP(8960, EBI1_CLK, EBI1_CLK, 1),
3558 MSM_RPM_MAP(8960, APPS_FABRIC_CFG_HALT_0,
3559 APPS_FABRIC_CFG_HALT, 2),
3560 MSM_RPM_MAP(8960, APPS_FABRIC_CFG_CLKMOD_0,
3561 APPS_FABRIC_CFG_CLKMOD, 3),
3562 MSM_RPM_MAP(8960, APPS_FABRIC_CFG_IOCTL,
3563 APPS_FABRIC_CFG_IOCTL, 1),
3564 MSM_RPM_MAP(8960, APPS_FABRIC_ARB_0, APPS_FABRIC_ARB, 12),
3565 MSM_RPM_MAP(8960, SYS_FABRIC_CFG_HALT_0,
3566 SYS_FABRIC_CFG_HALT, 2),
3567 MSM_RPM_MAP(8960, SYS_FABRIC_CFG_CLKMOD_0,
3568 SYS_FABRIC_CFG_CLKMOD, 3),
3569 MSM_RPM_MAP(8960, SYS_FABRIC_CFG_IOCTL,
3570 SYS_FABRIC_CFG_IOCTL, 1),
3571 MSM_RPM_MAP(8960, SYSTEM_FABRIC_ARB_0,
3572 SYSTEM_FABRIC_ARB, 29),
3573 MSM_RPM_MAP(8960, MMSS_FABRIC_CFG_HALT_0,
3574 MMSS_FABRIC_CFG_HALT, 2),
3575 MSM_RPM_MAP(8960, MMSS_FABRIC_CFG_CLKMOD_0,
3576 MMSS_FABRIC_CFG_CLKMOD, 3),
3577 MSM_RPM_MAP(8960, MMSS_FABRIC_CFG_IOCTL,
3578 MMSS_FABRIC_CFG_IOCTL, 1),
3579 MSM_RPM_MAP(8960, MM_FABRIC_ARB_0, MM_FABRIC_ARB, 23),
3580 MSM_RPM_MAP(8960, PM8921_S1_0, PM8921_S1, 2),
3581 MSM_RPM_MAP(8960, PM8921_S2_0, PM8921_S2, 2),
3582 MSM_RPM_MAP(8960, PM8921_S3_0, PM8921_S3, 2),
3583 MSM_RPM_MAP(8960, PM8921_S4_0, PM8921_S4, 2),
3584 MSM_RPM_MAP(8960, PM8921_S5_0, PM8921_S5, 2),
3585 MSM_RPM_MAP(8960, PM8921_S6_0, PM8921_S6, 2),
3586 MSM_RPM_MAP(8960, PM8921_S7_0, PM8921_S7, 2),
3587 MSM_RPM_MAP(8960, PM8921_S8_0, PM8921_S8, 2),
3588 MSM_RPM_MAP(8960, PM8921_L1_0, PM8921_L1, 2),
3589 MSM_RPM_MAP(8960, PM8921_L2_0, PM8921_L2, 2),
3590 MSM_RPM_MAP(8960, PM8921_L3_0, PM8921_L3, 2),
3591 MSM_RPM_MAP(8960, PM8921_L4_0, PM8921_L4, 2),
3592 MSM_RPM_MAP(8960, PM8921_L5_0, PM8921_L5, 2),
3593 MSM_RPM_MAP(8960, PM8921_L6_0, PM8921_L6, 2),
3594 MSM_RPM_MAP(8960, PM8921_L7_0, PM8921_L7, 2),
3595 MSM_RPM_MAP(8960, PM8921_L8_0, PM8921_L8, 2),
3596 MSM_RPM_MAP(8960, PM8921_L9_0, PM8921_L9, 2),
3597 MSM_RPM_MAP(8960, PM8921_L10_0, PM8921_L10, 2),
3598 MSM_RPM_MAP(8960, PM8921_L11_0, PM8921_L11, 2),
3599 MSM_RPM_MAP(8960, PM8921_L12_0, PM8921_L12, 2),
3600 MSM_RPM_MAP(8960, PM8921_L13_0, PM8921_L13, 2),
3601 MSM_RPM_MAP(8960, PM8921_L14_0, PM8921_L14, 2),
3602 MSM_RPM_MAP(8960, PM8921_L15_0, PM8921_L15, 2),
3603 MSM_RPM_MAP(8960, PM8921_L16_0, PM8921_L16, 2),
3604 MSM_RPM_MAP(8960, PM8921_L17_0, PM8921_L17, 2),
3605 MSM_RPM_MAP(8960, PM8921_L18_0, PM8921_L18, 2),
3606 MSM_RPM_MAP(8960, PM8921_L19_0, PM8921_L19, 2),
3607 MSM_RPM_MAP(8960, PM8921_L20_0, PM8921_L20, 2),
3608 MSM_RPM_MAP(8960, PM8921_L21_0, PM8921_L21, 2),
3609 MSM_RPM_MAP(8960, PM8921_L22_0, PM8921_L22, 2),
3610 MSM_RPM_MAP(8960, PM8921_L23_0, PM8921_L23, 2),
3611 MSM_RPM_MAP(8960, PM8921_L24_0, PM8921_L24, 2),
3612 MSM_RPM_MAP(8960, PM8921_L25_0, PM8921_L25, 2),
3613 MSM_RPM_MAP(8960, PM8921_L26_0, PM8921_L26, 2),
3614 MSM_RPM_MAP(8960, PM8921_L27_0, PM8921_L27, 2),
3615 MSM_RPM_MAP(8960, PM8921_L28_0, PM8921_L28, 2),
3616 MSM_RPM_MAP(8960, PM8921_L29_0, PM8921_L29, 2),
3617 MSM_RPM_MAP(8960, PM8921_CLK1_0, PM8921_CLK1, 2),
3618 MSM_RPM_MAP(8960, PM8921_CLK2_0, PM8921_CLK2, 2),
3619 MSM_RPM_MAP(8960, PM8921_LVS1, PM8921_LVS1, 1),
3620 MSM_RPM_MAP(8960, PM8921_LVS2, PM8921_LVS2, 1),
3621 MSM_RPM_MAP(8960, PM8921_LVS3, PM8921_LVS3, 1),
3622 MSM_RPM_MAP(8960, PM8921_LVS4, PM8921_LVS4, 1),
3623 MSM_RPM_MAP(8960, PM8921_LVS5, PM8921_LVS5, 1),
3624 MSM_RPM_MAP(8960, PM8921_LVS6, PM8921_LVS6, 1),
3625 MSM_RPM_MAP(8960, PM8921_LVS7, PM8921_LVS7, 1),
3626 MSM_RPM_MAP(8960, NCP_0, NCP, 2),
3627 MSM_RPM_MAP(8960, CXO_BUFFERS, CXO_BUFFERS, 1),
3628 MSM_RPM_MAP(8960, USB_OTG_SWITCH, USB_OTG_SWITCH, 1),
3629 MSM_RPM_MAP(8960, HDMI_SWITCH, HDMI_SWITCH, 1),
3630 MSM_RPM_MAP(8960, DDR_DMM_0, DDR_DMM, 2),
3631 MSM_RPM_MAP(8960, QDSS_CLK, QDSS_CLK, 1),
3632 },
3633 .target_status = {
3634 MSM_RPM_STATUS_ID_MAP(8960, VERSION_MAJOR),
3635 MSM_RPM_STATUS_ID_MAP(8960, VERSION_MINOR),
3636 MSM_RPM_STATUS_ID_MAP(8960, VERSION_BUILD),
3637 MSM_RPM_STATUS_ID_MAP(8960, SUPPORTED_RESOURCES_0),
3638 MSM_RPM_STATUS_ID_MAP(8960, SUPPORTED_RESOURCES_1),
3639 MSM_RPM_STATUS_ID_MAP(8960, SUPPORTED_RESOURCES_2),
3640 MSM_RPM_STATUS_ID_MAP(8960, RESERVED_SUPPORTED_RESOURCES_0),
3641 MSM_RPM_STATUS_ID_MAP(8960, SEQUENCE),
3642 MSM_RPM_STATUS_ID_MAP(8960, RPM_CTL),
3643 MSM_RPM_STATUS_ID_MAP(8960, CXO_CLK),
3644 MSM_RPM_STATUS_ID_MAP(8960, PXO_CLK),
3645 MSM_RPM_STATUS_ID_MAP(8960, APPS_FABRIC_CLK),
3646 MSM_RPM_STATUS_ID_MAP(8960, SYSTEM_FABRIC_CLK),
3647 MSM_RPM_STATUS_ID_MAP(8960, MM_FABRIC_CLK),
3648 MSM_RPM_STATUS_ID_MAP(8960, DAYTONA_FABRIC_CLK),
3649 MSM_RPM_STATUS_ID_MAP(8960, SFPB_CLK),
3650 MSM_RPM_STATUS_ID_MAP(8960, CFPB_CLK),
3651 MSM_RPM_STATUS_ID_MAP(8960, MMFPB_CLK),
3652 MSM_RPM_STATUS_ID_MAP(8960, EBI1_CLK),
3653 MSM_RPM_STATUS_ID_MAP(8960, APPS_FABRIC_CFG_HALT),
3654 MSM_RPM_STATUS_ID_MAP(8960, APPS_FABRIC_CFG_CLKMOD),
3655 MSM_RPM_STATUS_ID_MAP(8960, APPS_FABRIC_CFG_IOCTL),
3656 MSM_RPM_STATUS_ID_MAP(8960, APPS_FABRIC_ARB),
3657 MSM_RPM_STATUS_ID_MAP(8960, SYS_FABRIC_CFG_HALT),
3658 MSM_RPM_STATUS_ID_MAP(8960, SYS_FABRIC_CFG_CLKMOD),
3659 MSM_RPM_STATUS_ID_MAP(8960, SYS_FABRIC_CFG_IOCTL),
3660 MSM_RPM_STATUS_ID_MAP(8960, SYSTEM_FABRIC_ARB),
3661 MSM_RPM_STATUS_ID_MAP(8960, MMSS_FABRIC_CFG_HALT),
3662 MSM_RPM_STATUS_ID_MAP(8960, MMSS_FABRIC_CFG_CLKMOD),
3663 MSM_RPM_STATUS_ID_MAP(8960, MMSS_FABRIC_CFG_IOCTL),
3664 MSM_RPM_STATUS_ID_MAP(8960, MM_FABRIC_ARB),
3665 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S1_0),
3666 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S1_1),
3667 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S2_0),
3668 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S2_1),
3669 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S3_0),
3670 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S3_1),
3671 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S4_0),
3672 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S4_1),
3673 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S5_0),
3674 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S5_1),
3675 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S6_0),
3676 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S6_1),
3677 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S7_0),
3678 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S7_1),
3679 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S8_0),
3680 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S8_1),
3681 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L1_0),
3682 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L1_1),
3683 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L2_0),
3684 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L2_1),
3685 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L3_0),
3686 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L3_1),
3687 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L4_0),
3688 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L4_1),
3689 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L5_0),
3690 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L5_1),
3691 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L6_0),
3692 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L6_1),
3693 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L7_0),
3694 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L7_1),
3695 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L8_0),
3696 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L8_1),
3697 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L9_0),
3698 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L9_1),
3699 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L10_0),
3700 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L10_1),
3701 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L11_0),
3702 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L11_1),
3703 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L12_0),
3704 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L12_1),
3705 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L13_0),
3706 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L13_1),
3707 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L14_0),
3708 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L14_1),
3709 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L15_0),
3710 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L15_1),
3711 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L16_0),
3712 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L16_1),
3713 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L17_0),
3714 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L17_1),
3715 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L18_0),
3716 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L18_1),
3717 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L19_0),
3718 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L19_1),
3719 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L20_0),
3720 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L20_1),
3721 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L21_0),
3722 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L21_1),
3723 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L22_0),
3724 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L22_1),
3725 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L23_0),
3726 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L23_1),
3727 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L24_0),
3728 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L24_1),
3729 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L25_0),
3730 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L25_1),
3731 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L26_0),
3732 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L26_1),
3733 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L27_0),
3734 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L27_1),
3735 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L28_0),
3736 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L28_1),
3737 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L29_0),
3738 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L29_1),
3739 MSM_RPM_STATUS_ID_MAP(8960, PM8921_CLK1_0),
3740 MSM_RPM_STATUS_ID_MAP(8960, PM8921_CLK1_1),
3741 MSM_RPM_STATUS_ID_MAP(8960, PM8921_CLK2_0),
3742 MSM_RPM_STATUS_ID_MAP(8960, PM8921_CLK2_1),
3743 MSM_RPM_STATUS_ID_MAP(8960, PM8921_LVS1),
3744 MSM_RPM_STATUS_ID_MAP(8960, PM8921_LVS2),
3745 MSM_RPM_STATUS_ID_MAP(8960, PM8921_LVS3),
3746 MSM_RPM_STATUS_ID_MAP(8960, PM8921_LVS4),
3747 MSM_RPM_STATUS_ID_MAP(8960, PM8921_LVS5),
3748 MSM_RPM_STATUS_ID_MAP(8960, PM8921_LVS6),
3749 MSM_RPM_STATUS_ID_MAP(8960, PM8921_LVS7),
3750 MSM_RPM_STATUS_ID_MAP(8960, NCP_0),
3751 MSM_RPM_STATUS_ID_MAP(8960, NCP_1),
3752 MSM_RPM_STATUS_ID_MAP(8960, CXO_BUFFERS),
3753 MSM_RPM_STATUS_ID_MAP(8960, USB_OTG_SWITCH),
3754 MSM_RPM_STATUS_ID_MAP(8960, HDMI_SWITCH),
3755 MSM_RPM_STATUS_ID_MAP(8960, DDR_DMM_0),
3756 MSM_RPM_STATUS_ID_MAP(8960, DDR_DMM_1),
3757 MSM_RPM_STATUS_ID_MAP(8960, EBI1_CH0_RANGE),
3758 MSM_RPM_STATUS_ID_MAP(8960, EBI1_CH1_RANGE),
3759 },
3760 .target_ctrl_id = {
3761 MSM_RPM_CTRL_MAP(8960, VERSION_MAJOR),
3762 MSM_RPM_CTRL_MAP(8960, VERSION_MINOR),
3763 MSM_RPM_CTRL_MAP(8960, VERSION_BUILD),
3764 MSM_RPM_CTRL_MAP(8960, REQ_CTX_0),
3765 MSM_RPM_CTRL_MAP(8960, REQ_SEL_0),
3766 MSM_RPM_CTRL_MAP(8960, ACK_CTX_0),
3767 MSM_RPM_CTRL_MAP(8960, ACK_SEL_0),
3768 },
3769 .sel_invalidate = MSM_RPM_8960_SEL_INVALIDATE,
3770 .sel_notification = MSM_RPM_8960_SEL_NOTIFICATION,
3771 .sel_last = MSM_RPM_8960_SEL_LAST,
3772 .ver = {3, 0, 0},
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003773};
Praveen Chidambaram8985b012011-12-16 13:38:59 -07003774
Praveen Chidambaram78499012011-11-01 17:15:17 -06003775struct platform_device msm8960_rpm_device = {
Maheshkumar Sivasubramanian9c8cdc92011-09-12 14:11:30 -06003776 .name = "msm_rpm",
3777 .id = -1,
3778};
3779
Praveen Chidambaram78499012011-11-01 17:15:17 -06003780static struct msm_rpm_log_platform_data msm_rpm_log_pdata = {
3781 .phys_addr_base = 0x0010C000,
3782 .reg_offsets = {
3783 [MSM_RPM_LOG_PAGE_INDICES] = 0x00000080,
3784 [MSM_RPM_LOG_PAGE_BUFFER] = 0x000000A0,
3785 },
3786 .phys_size = SZ_8K,
3787 .log_len = 4096, /* log's buffer length in bytes */
3788 .log_len_mask = (4096 >> 2) - 1, /* length mask in units of u32 */
3789};
3790
3791struct platform_device msm8960_rpm_log_device = {
3792 .name = "msm_rpm_log",
3793 .id = -1,
3794 .dev = {
3795 .platform_data = &msm_rpm_log_pdata,
3796 },
3797};
3798
Praveen Chidambaram7a712232011-10-28 13:39:45 -06003799static struct msm_rpmstats_platform_data msm_rpm_stat_pdata = {
Anji Jonnalaa1a1c3b2012-09-18 19:20:21 +05303800 .phys_addr_base = 0x0010DD04,
3801 .phys_size = SZ_256,
Praveen Chidambaram7a712232011-10-28 13:39:45 -06003802};
3803
Praveen Chidambaram78499012011-11-01 17:15:17 -06003804struct platform_device msm8960_rpm_stat_device = {
Praveen Chidambaram7a712232011-10-28 13:39:45 -06003805 .name = "msm_rpm_stat",
3806 .id = -1,
3807 .dev = {
3808 .platform_data = &msm_rpm_stat_pdata,
3809 },
3810};
Maheshkumar Sivasubramanian9c8cdc92011-09-12 14:11:30 -06003811
Anji Jonnala2a8bd312012-11-01 13:11:42 +05303812static struct resource resources_rpm_master_stats[] = {
3813 {
3814 .start = MSM8960_RPM_MASTER_STATS_BASE,
3815 .end = MSM8960_RPM_MASTER_STATS_BASE + SZ_256,
3816 .flags = IORESOURCE_MEM,
3817 },
3818};
3819
3820static char *master_names[] = {
3821 "KPSS",
3822 "GPSS",
3823 "LPASS",
3824 "RIVA",
3825 "DSPS",
3826};
3827
3828static struct msm_rpm_master_stats_platform_data msm_rpm_master_stat_pdata = {
3829 .masters = master_names,
3830 .nomasters = ARRAY_SIZE(master_names),
3831};
3832
3833struct platform_device msm8960_rpm_master_stat_device = {
3834 .name = "msm_rpm_master_stat",
3835 .id = -1,
3836 .num_resources = ARRAY_SIZE(resources_rpm_master_stats),
3837 .resource = resources_rpm_master_stats,
3838 .dev = {
3839 .platform_data = &msm_rpm_master_stat_pdata,
3840 },
3841};
3842
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003843struct platform_device msm_bus_sys_fabric = {
3844 .name = "msm_bus_fabric",
3845 .id = MSM_BUS_FAB_SYSTEM,
3846};
3847struct platform_device msm_bus_apps_fabric = {
3848 .name = "msm_bus_fabric",
3849 .id = MSM_BUS_FAB_APPSS,
3850};
3851struct platform_device msm_bus_mm_fabric = {
3852 .name = "msm_bus_fabric",
3853 .id = MSM_BUS_FAB_MMSS,
3854};
3855struct platform_device msm_bus_sys_fpb = {
3856 .name = "msm_bus_fabric",
3857 .id = MSM_BUS_FAB_SYSTEM_FPB,
3858};
3859struct platform_device msm_bus_cpss_fpb = {
3860 .name = "msm_bus_fabric",
3861 .id = MSM_BUS_FAB_CPSS_FPB,
3862};
3863
3864/* Sensors DSPS platform data */
3865#ifdef CONFIG_MSM_DSPS
3866
Vikram Mulukutlaac682bb2012-09-20 14:06:23 -07003867#define PPSS_DSPS_TCM_CODE_BASE 0x12000000
3868#define PPSS_DSPS_TCM_CODE_SIZE 0x28000
3869#define PPSS_DSPS_TCM_BUF_BASE 0x12040000
3870#define PPSS_DSPS_TCM_BUF_SIZE 0x4000
3871#define PPSS_DSPS_PIPE_BASE 0x12800000
3872#define PPSS_DSPS_PIPE_SIZE 0x4000
3873#define PPSS_DSPS_DDR_BASE 0x8fe00000
3874#define PPSS_DSPS_DDR_SIZE 0x100000
3875#define PPSS_SMEM_BASE 0x80000000
3876#define PPSS_SMEM_SIZE 0x200000
3877#define PPSS_REG_PHYS_BASE 0x12080000
3878#define PPSS_WDOG_UNMASKED_INT_EN 0x1808
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003879
3880static struct dsps_clk_info dsps_clks[] = {};
3881static struct dsps_regulator_info dsps_regs[] = {};
3882
3883/*
3884 * Note: GPIOs field is intialized in run-time at the function
3885 * msm8960_init_dsps().
3886 */
3887
3888struct msm_dsps_platform_data msm_dsps_pdata = {
3889 .clks = dsps_clks,
3890 .clks_num = ARRAY_SIZE(dsps_clks),
3891 .gpios = NULL,
3892 .gpios_num = 0,
3893 .regs = dsps_regs,
3894 .regs_num = ARRAY_SIZE(dsps_regs),
3895 .dsps_pwr_ctl_en = 1,
karthik karuppasamy1a1c6b02012-05-29 15:16:32 -07003896 .tcm_code_start = PPSS_DSPS_TCM_CODE_BASE,
3897 .tcm_code_size = PPSS_DSPS_TCM_CODE_SIZE,
3898 .tcm_buf_start = PPSS_DSPS_TCM_BUF_BASE,
3899 .tcm_buf_size = PPSS_DSPS_TCM_BUF_SIZE,
3900 .pipe_start = PPSS_DSPS_PIPE_BASE,
3901 .pipe_size = PPSS_DSPS_PIPE_SIZE,
3902 .ddr_start = PPSS_DSPS_DDR_BASE,
3903 .ddr_size = PPSS_DSPS_DDR_SIZE,
3904 .smem_start = PPSS_SMEM_BASE,
3905 .smem_size = PPSS_SMEM_SIZE,
Vikram Mulukutlaac682bb2012-09-20 14:06:23 -07003906 .ppss_wdog_unmasked_int_en_reg = PPSS_WDOG_UNMASKED_INT_EN,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003907 .signature = DSPS_SIGNATURE,
3908};
3909
3910static struct resource msm_dsps_resources[] = {
3911 {
3912 .start = PPSS_REG_PHYS_BASE,
3913 .end = PPSS_REG_PHYS_BASE + SZ_8K - 1,
3914 .name = "ppss_reg",
3915 .flags = IORESOURCE_MEM,
3916 },
Wentao Xua55500b2011-08-16 18:15:04 -04003917 {
3918 .start = PPSS_WDOG_TIMER_IRQ,
3919 .end = PPSS_WDOG_TIMER_IRQ,
3920 .name = "ppss_wdog",
3921 .flags = IORESOURCE_IRQ,
3922 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003923};
3924
3925struct platform_device msm_dsps_device = {
3926 .name = "msm_dsps",
3927 .id = 0,
3928 .num_resources = ARRAY_SIZE(msm_dsps_resources),
3929 .resource = msm_dsps_resources,
3930 .dev.platform_data = &msm_dsps_pdata,
3931};
3932
3933#endif /* CONFIG_MSM_DSPS */
Pratik Patel7831c082011-06-08 21:44:37 -07003934
Pratik Patel3b0ca882012-06-01 16:54:14 -07003935#define CORESIGHT_PHYS_BASE 0x01A00000
3936#define CORESIGHT_TPIU_PHYS_BASE (CORESIGHT_PHYS_BASE + 0x3000)
3937#define CORESIGHT_ETB_PHYS_BASE (CORESIGHT_PHYS_BASE + 0x1000)
3938#define CORESIGHT_FUNNEL_PHYS_BASE (CORESIGHT_PHYS_BASE + 0x4000)
3939#define CORESIGHT_STM_PHYS_BASE (CORESIGHT_PHYS_BASE + 0x6000)
3940#define CORESIGHT_ETM0_PHYS_BASE (CORESIGHT_PHYS_BASE + 0x1C000)
3941#define CORESIGHT_ETM1_PHYS_BASE (CORESIGHT_PHYS_BASE + 0x1D000)
Pratik Patel7831c082011-06-08 21:44:37 -07003942
Pratik Patel3b0ca882012-06-01 16:54:14 -07003943#define CORESIGHT_STM_CHANNEL_PHYS_BASE (0x14000000 + 0x280000)
Pratik Patel7831c082011-06-08 21:44:37 -07003944
Pratik Patel3b0ca882012-06-01 16:54:14 -07003945static struct resource coresight_tpiu_resources[] = {
Pratik Patel7831c082011-06-08 21:44:37 -07003946 {
Pratik Patel3b0ca882012-06-01 16:54:14 -07003947 .start = CORESIGHT_TPIU_PHYS_BASE,
3948 .end = CORESIGHT_TPIU_PHYS_BASE + SZ_4K - 1,
Pratik Patel7831c082011-06-08 21:44:37 -07003949 .flags = IORESOURCE_MEM,
3950 },
3951};
3952
Pratik Patel3b0ca882012-06-01 16:54:14 -07003953static struct coresight_platform_data coresight_tpiu_pdata = {
3954 .id = 0,
3955 .name = "coresight-tpiu",
3956 .nr_inports = 1,
3957 .nr_outports = 0,
Pratik Patel7831c082011-06-08 21:44:37 -07003958};
3959
Pratik Patel3b0ca882012-06-01 16:54:14 -07003960struct platform_device coresight_tpiu_device = {
3961 .name = "coresight-tpiu",
3962 .id = 0,
3963 .num_resources = ARRAY_SIZE(coresight_tpiu_resources),
3964 .resource = coresight_tpiu_resources,
3965 .dev = {
3966 .platform_data = &coresight_tpiu_pdata,
3967 },
3968};
3969
3970static struct resource coresight_etb_resources[] = {
Pratik Patel7831c082011-06-08 21:44:37 -07003971 {
Pratik Patel3b0ca882012-06-01 16:54:14 -07003972 .start = CORESIGHT_ETB_PHYS_BASE,
3973 .end = CORESIGHT_ETB_PHYS_BASE + SZ_4K - 1,
Pratik Patel7831c082011-06-08 21:44:37 -07003974 .flags = IORESOURCE_MEM,
3975 },
3976};
3977
Pratik Patel3b0ca882012-06-01 16:54:14 -07003978static struct coresight_platform_data coresight_etb_pdata = {
3979 .id = 1,
3980 .name = "coresight-etb",
3981 .nr_inports = 1,
3982 .nr_outports = 0,
3983 .default_sink = true,
Pratik Patel7831c082011-06-08 21:44:37 -07003984};
3985
Pratik Patel3b0ca882012-06-01 16:54:14 -07003986struct platform_device coresight_etb_device = {
3987 .name = "coresight-etb",
3988 .id = 0,
3989 .num_resources = ARRAY_SIZE(coresight_etb_resources),
3990 .resource = coresight_etb_resources,
3991 .dev = {
3992 .platform_data = &coresight_etb_pdata,
3993 },
3994};
3995
3996static struct resource coresight_funnel_resources[] = {
Pratik Patel7831c082011-06-08 21:44:37 -07003997 {
Pratik Patel3b0ca882012-06-01 16:54:14 -07003998 .start = CORESIGHT_FUNNEL_PHYS_BASE,
3999 .end = CORESIGHT_FUNNEL_PHYS_BASE + SZ_4K - 1,
Pratik Patel7831c082011-06-08 21:44:37 -07004000 .flags = IORESOURCE_MEM,
4001 },
4002};
4003
Pratik Patel3b0ca882012-06-01 16:54:14 -07004004static const int coresight_funnel_outports[] = { 0, 1 };
4005static const int coresight_funnel_child_ids[] = { 0, 1 };
4006static const int coresight_funnel_child_ports[] = { 0, 0 };
4007
4008static struct coresight_platform_data coresight_funnel_pdata = {
4009 .id = 2,
4010 .name = "coresight-funnel",
4011 .nr_inports = 4,
4012 .outports = coresight_funnel_outports,
4013 .child_ids = coresight_funnel_child_ids,
4014 .child_ports = coresight_funnel_child_ports,
4015 .nr_outports = ARRAY_SIZE(coresight_funnel_outports),
Pratik Patel7831c082011-06-08 21:44:37 -07004016};
4017
Pratik Patel3b0ca882012-06-01 16:54:14 -07004018struct platform_device coresight_funnel_device = {
4019 .name = "coresight-funnel",
4020 .id = 0,
4021 .num_resources = ARRAY_SIZE(coresight_funnel_resources),
4022 .resource = coresight_funnel_resources,
4023 .dev = {
4024 .platform_data = &coresight_funnel_pdata,
4025 },
4026};
4027
4028static struct resource coresight_stm_resources[] = {
Pratik Patel7831c082011-06-08 21:44:37 -07004029 {
Pratik Patel3b0ca882012-06-01 16:54:14 -07004030 .start = CORESIGHT_STM_PHYS_BASE,
4031 .end = CORESIGHT_STM_PHYS_BASE + SZ_4K - 1,
4032 .flags = IORESOURCE_MEM,
4033 },
4034 {
4035 .start = CORESIGHT_STM_CHANNEL_PHYS_BASE,
4036 .end = CORESIGHT_STM_CHANNEL_PHYS_BASE + SZ_1M + SZ_512K - 1,
Pratik Patel7831c082011-06-08 21:44:37 -07004037 .flags = IORESOURCE_MEM,
4038 },
4039};
4040
Pratik Patel3b0ca882012-06-01 16:54:14 -07004041static const int coresight_stm_outports[] = { 0 };
4042static const int coresight_stm_child_ids[] = { 2 };
4043static const int coresight_stm_child_ports[] = { 2 };
4044
4045static struct coresight_platform_data coresight_stm_pdata = {
4046 .id = 3,
4047 .name = "coresight-stm",
4048 .nr_inports = 0,
4049 .outports = coresight_stm_outports,
4050 .child_ids = coresight_stm_child_ids,
4051 .child_ports = coresight_stm_child_ports,
4052 .nr_outports = ARRAY_SIZE(coresight_stm_outports),
Pratik Patel7831c082011-06-08 21:44:37 -07004053};
4054
Pratik Patel3b0ca882012-06-01 16:54:14 -07004055struct platform_device coresight_stm_device = {
4056 .name = "coresight-stm",
4057 .id = 0,
4058 .num_resources = ARRAY_SIZE(coresight_stm_resources),
4059 .resource = coresight_stm_resources,
4060 .dev = {
4061 .platform_data = &coresight_stm_pdata,
4062 },
4063};
4064
4065static struct resource coresight_etm0_resources[] = {
4066 {
4067 .start = CORESIGHT_ETM0_PHYS_BASE,
4068 .end = CORESIGHT_ETM0_PHYS_BASE + SZ_4K - 1,
4069 .flags = IORESOURCE_MEM,
4070 },
4071};
4072
4073static const int coresight_etm0_outports[] = { 0 };
4074static const int coresight_etm0_child_ids[] = { 2 };
4075static const int coresight_etm0_child_ports[] = { 0 };
4076
4077static struct coresight_platform_data coresight_etm0_pdata = {
4078 .id = 4,
4079 .name = "coresight-etm0",
4080 .nr_inports = 0,
4081 .outports = coresight_etm0_outports,
4082 .child_ids = coresight_etm0_child_ids,
4083 .child_ports = coresight_etm0_child_ports,
4084 .nr_outports = ARRAY_SIZE(coresight_etm0_outports),
4085};
4086
4087struct platform_device coresight_etm0_device = {
4088 .name = "coresight-etm",
4089 .id = 0,
4090 .num_resources = ARRAY_SIZE(coresight_etm0_resources),
4091 .resource = coresight_etm0_resources,
4092 .dev = {
4093 .platform_data = &coresight_etm0_pdata,
4094 },
4095};
4096
4097static struct resource coresight_etm1_resources[] = {
4098 {
4099 .start = CORESIGHT_ETM1_PHYS_BASE,
4100 .end = CORESIGHT_ETM1_PHYS_BASE + SZ_4K - 1,
4101 .flags = IORESOURCE_MEM,
4102 },
4103};
4104
4105static const int coresight_etm1_outports[] = { 0 };
4106static const int coresight_etm1_child_ids[] = { 2 };
4107static const int coresight_etm1_child_ports[] = { 1 };
4108
4109static struct coresight_platform_data coresight_etm1_pdata = {
4110 .id = 5,
4111 .name = "coresight-etm1",
4112 .nr_inports = 0,
4113 .outports = coresight_etm1_outports,
4114 .child_ids = coresight_etm1_child_ids,
4115 .child_ports = coresight_etm1_child_ports,
4116 .nr_outports = ARRAY_SIZE(coresight_etm1_outports),
4117};
4118
4119struct platform_device coresight_etm1_device = {
4120 .name = "coresight-etm",
4121 .id = 1,
4122 .num_resources = ARRAY_SIZE(coresight_etm1_resources),
4123 .resource = coresight_etm1_resources,
4124 .dev = {
4125 .platform_data = &coresight_etm1_pdata,
4126 },
4127};
Praveen Chidambaram8ea3dcd2011-12-07 14:46:31 -07004128
Stepan Moskovchenkoc0557252012-06-07 17:39:14 -07004129static struct resource msm_ebi1_ch0_erp_resources[] = {
4130 {
4131 .start = HSDDRX_EBI1CH0_IRQ,
4132 .flags = IORESOURCE_IRQ,
4133 },
4134 {
4135 .start = 0x00A40000,
4136 .end = 0x00A40000 + SZ_4K - 1,
4137 .flags = IORESOURCE_MEM,
4138 },
4139};
4140
4141struct platform_device msm8960_device_ebi1_ch0_erp = {
4142 .name = "msm_ebi_erp",
4143 .id = 0,
4144 .num_resources = ARRAY_SIZE(msm_ebi1_ch0_erp_resources),
4145 .resource = msm_ebi1_ch0_erp_resources,
4146};
4147
4148static struct resource msm_ebi1_ch1_erp_resources[] = {
4149 {
4150 .start = HSDDRX_EBI1CH1_IRQ,
4151 .flags = IORESOURCE_IRQ,
4152 },
4153 {
4154 .start = 0x00D40000,
4155 .end = 0x00D40000 + SZ_4K - 1,
4156 .flags = IORESOURCE_MEM,
4157 },
4158};
4159
4160struct platform_device msm8960_device_ebi1_ch1_erp = {
4161 .name = "msm_ebi_erp",
4162 .id = 1,
4163 .num_resources = ARRAY_SIZE(msm_ebi1_ch1_erp_resources),
4164 .resource = msm_ebi1_ch1_erp_resources,
4165};
4166
Stepan Moskovchenko28662c52012-03-01 12:48:45 -08004167static struct resource msm_cache_erp_resources[] = {
4168 {
4169 .name = "l1_irq",
4170 .start = SC_SICCPUXEXTFAULTIRPTREQ,
4171 .flags = IORESOURCE_IRQ,
4172 },
4173 {
4174 .name = "l2_irq",
4175 .start = APCC_QGICL2IRPTREQ,
4176 .flags = IORESOURCE_IRQ,
4177 }
4178};
4179
4180struct platform_device msm8960_device_cache_erp = {
4181 .name = "msm_cache_erp",
4182 .id = -1,
4183 .num_resources = ARRAY_SIZE(msm_cache_erp_resources),
4184 .resource = msm_cache_erp_resources,
4185};
Laura Abbott0577d7b2012-04-17 11:14:30 -07004186
4187struct msm_iommu_domain_name msm8960_iommu_ctx_names[] = {
4188 /* Camera */
4189 {
Laura Abbott0577d7b2012-04-17 11:14:30 -07004190 .name = "ijpeg_src",
4191 .domain = CAMERA_DOMAIN,
4192 },
4193 /* Camera */
4194 {
4195 .name = "ijpeg_dst",
4196 .domain = CAMERA_DOMAIN,
4197 },
4198 /* Camera */
4199 {
4200 .name = "jpegd_src",
4201 .domain = CAMERA_DOMAIN,
4202 },
4203 /* Camera */
4204 {
4205 .name = "jpegd_dst",
4206 .domain = CAMERA_DOMAIN,
4207 },
Mayank Chopra9c4743f2012-06-27 15:31:43 +05304208 /* Rotator */
Laura Abbott0577d7b2012-04-17 11:14:30 -07004209 {
4210 .name = "rot_src",
Olav Hauganef95ae32012-05-15 09:50:30 -07004211 .domain = ROTATOR_SRC_DOMAIN,
Laura Abbott0577d7b2012-04-17 11:14:30 -07004212 },
Mayank Chopra9c4743f2012-06-27 15:31:43 +05304213 /* Rotator */
Laura Abbott0577d7b2012-04-17 11:14:30 -07004214 {
4215 .name = "rot_dst",
Olav Hauganef95ae32012-05-15 09:50:30 -07004216 .domain = ROTATOR_SRC_DOMAIN,
Laura Abbott0577d7b2012-04-17 11:14:30 -07004217 },
4218 /* Video */
4219 {
4220 .name = "vcodec_a_mm1",
4221 .domain = VIDEO_DOMAIN,
4222 },
4223 /* Video */
4224 {
4225 .name = "vcodec_b_mm2",
4226 .domain = VIDEO_DOMAIN,
4227 },
4228 /* Video */
4229 {
4230 .name = "vcodec_a_stream",
4231 .domain = VIDEO_DOMAIN,
4232 },
4233};
4234
4235static struct mem_pool msm8960_video_pools[] = {
4236 /*
4237 * Video hardware has the following requirements:
4238 * 1. All video addresses used by the video hardware must be at a higher
4239 * address than video firmware address.
4240 * 2. Video hardware can only access a range of 256MB from the base of
4241 * the video firmware.
4242 */
4243 [VIDEO_FIRMWARE_POOL] =
4244 /* Low addresses, intended for video firmware */
4245 {
4246 .paddr = SZ_128K,
4247 .size = SZ_16M - SZ_128K,
4248 },
4249 [VIDEO_MAIN_POOL] =
4250 /* Main video pool */
4251 {
4252 .paddr = SZ_16M,
4253 .size = SZ_256M - SZ_16M,
4254 },
4255 [GEN_POOL] =
4256 /* Remaining address space up to 2G */
4257 {
4258 .paddr = SZ_256M,
4259 .size = SZ_2G - SZ_256M,
4260 },
4261};
4262
4263static struct mem_pool msm8960_camera_pools[] = {
4264 [GEN_POOL] =
4265 /* One address space for camera */
4266 {
4267 .paddr = SZ_128K,
4268 .size = SZ_2G - SZ_128K,
4269 },
4270};
4271
Olav Hauganef95ae32012-05-15 09:50:30 -07004272static struct mem_pool msm8960_display_read_pools[] = {
Laura Abbott0577d7b2012-04-17 11:14:30 -07004273 [GEN_POOL] =
Olav Hauganef95ae32012-05-15 09:50:30 -07004274 /* One address space for display reads */
Laura Abbott0577d7b2012-04-17 11:14:30 -07004275 {
4276 .paddr = SZ_128K,
4277 .size = SZ_2G - SZ_128K,
4278 },
4279};
4280
Olav Hauganef95ae32012-05-15 09:50:30 -07004281static struct mem_pool msm8960_rotator_src_pools[] = {
Laura Abbott0577d7b2012-04-17 11:14:30 -07004282 [GEN_POOL] =
Olav Hauganef95ae32012-05-15 09:50:30 -07004283 /* One address space for rotator src */
Laura Abbott0577d7b2012-04-17 11:14:30 -07004284 {
4285 .paddr = SZ_128K,
4286 .size = SZ_2G - SZ_128K,
4287 },
4288};
4289
4290static struct msm_iommu_domain msm8960_iommu_domains[] = {
4291 [VIDEO_DOMAIN] = {
4292 .iova_pools = msm8960_video_pools,
4293 .npools = ARRAY_SIZE(msm8960_video_pools),
4294 },
4295 [CAMERA_DOMAIN] = {
4296 .iova_pools = msm8960_camera_pools,
4297 .npools = ARRAY_SIZE(msm8960_camera_pools),
4298 },
Olav Hauganef95ae32012-05-15 09:50:30 -07004299 [DISPLAY_READ_DOMAIN] = {
4300 .iova_pools = msm8960_display_read_pools,
4301 .npools = ARRAY_SIZE(msm8960_display_read_pools),
Laura Abbott0577d7b2012-04-17 11:14:30 -07004302 },
Olav Hauganef95ae32012-05-15 09:50:30 -07004303 [ROTATOR_SRC_DOMAIN] = {
4304 .iova_pools = msm8960_rotator_src_pools,
4305 .npools = ARRAY_SIZE(msm8960_rotator_src_pools),
Laura Abbott0577d7b2012-04-17 11:14:30 -07004306 },
4307};
4308
4309struct iommu_domains_pdata msm8960_iommu_domain_pdata = {
4310 .domains = msm8960_iommu_domains,
4311 .ndomains = ARRAY_SIZE(msm8960_iommu_domains),
4312 .domain_names = msm8960_iommu_ctx_names,
4313 .nnames = ARRAY_SIZE(msm8960_iommu_ctx_names),
4314 .domain_alloc_flags = 0,
4315};
4316
4317struct platform_device msm8960_iommu_domain_device = {
4318 .name = "iommu_domains",
4319 .id = -1,
4320 .dev = {
4321 .platform_data = &msm8960_iommu_domain_pdata,
Laura Abbott532b2df2012-04-12 10:53:48 -07004322 }
4323};
4324
4325struct msm_rtb_platform_data msm8960_rtb_pdata = {
4326 .size = SZ_1M,
4327};
4328
4329static int __init msm_rtb_set_buffer_size(char *p)
4330{
4331 int s;
4332
4333 s = memparse(p, NULL);
4334 msm8960_rtb_pdata.size = ALIGN(s, SZ_4K);
4335 return 0;
4336}
4337early_param("msm_rtb_size", msm_rtb_set_buffer_size);
4338
4339
4340struct platform_device msm8960_rtb_device = {
4341 .name = "msm_rtb",
4342 .id = -1,
4343 .dev = {
4344 .platform_data = &msm8960_rtb_pdata,
Laura Abbott0577d7b2012-04-17 11:14:30 -07004345 },
4346};
Laura Abbott2ae8f362012-04-12 11:03:04 -07004347
Laura Abbott0a103cf2012-05-25 09:00:23 -07004348#define MSM_8960_L1_SIZE SZ_1M
4349/*
4350 * The actual L2 size is smaller but we need a larger buffer
4351 * size to store other dump information
4352 */
4353#define MSM_8960_L2_SIZE SZ_4M
4354
Laura Abbott2ae8f362012-04-12 11:03:04 -07004355struct msm_cache_dump_platform_data msm8960_cache_dump_pdata = {
Laura Abbott0a103cf2012-05-25 09:00:23 -07004356 .l2_size = MSM_8960_L2_SIZE,
4357 .l1_size = MSM_8960_L1_SIZE,
Laura Abbott2ae8f362012-04-12 11:03:04 -07004358};
4359
4360struct platform_device msm8960_cache_dump_device = {
4361 .name = "msm_cache_dump",
4362 .id = -1,
4363 .dev = {
4364 .platform_data = &msm8960_cache_dump_pdata,
4365 },
4366};
Joel King0cbf5d82012-05-24 15:21:38 -07004367
4368#define MDM2AP_ERRFATAL 40
4369#define AP2MDM_ERRFATAL 80
4370#define MDM2AP_STATUS 24
4371#define AP2MDM_STATUS 77
4372#define AP2MDM_PMIC_PWR_EN 22
4373#define AP2MDM_KPDPWR_N 79
4374#define AP2MDM_SOFT_RESET 78
Ameya Thakur43248fd2012-07-10 18:50:52 -07004375#define USB_SW 25
Joel King0cbf5d82012-05-24 15:21:38 -07004376
4377static struct resource sglte_resources[] = {
4378 {
4379 .start = MDM2AP_ERRFATAL,
4380 .end = MDM2AP_ERRFATAL,
4381 .name = "MDM2AP_ERRFATAL",
4382 .flags = IORESOURCE_IO,
4383 },
4384 {
4385 .start = AP2MDM_ERRFATAL,
4386 .end = AP2MDM_ERRFATAL,
4387 .name = "AP2MDM_ERRFATAL",
4388 .flags = IORESOURCE_IO,
4389 },
4390 {
4391 .start = MDM2AP_STATUS,
4392 .end = MDM2AP_STATUS,
4393 .name = "MDM2AP_STATUS",
4394 .flags = IORESOURCE_IO,
4395 },
4396 {
4397 .start = AP2MDM_STATUS,
4398 .end = AP2MDM_STATUS,
4399 .name = "AP2MDM_STATUS",
4400 .flags = IORESOURCE_IO,
4401 },
4402 {
4403 .start = AP2MDM_PMIC_PWR_EN,
4404 .end = AP2MDM_PMIC_PWR_EN,
4405 .name = "AP2MDM_PMIC_PWR_EN",
4406 .flags = IORESOURCE_IO,
4407 },
4408 {
4409 .start = AP2MDM_KPDPWR_N,
4410 .end = AP2MDM_KPDPWR_N,
4411 .name = "AP2MDM_KPDPWR_N",
4412 .flags = IORESOURCE_IO,
4413 },
4414 {
4415 .start = AP2MDM_SOFT_RESET,
4416 .end = AP2MDM_SOFT_RESET,
4417 .name = "AP2MDM_SOFT_RESET",
4418 .flags = IORESOURCE_IO,
4419 },
Ameya Thakur43248fd2012-07-10 18:50:52 -07004420 {
4421 .start = USB_SW,
4422 .end = USB_SW,
4423 .name = "USB_SW",
4424 .flags = IORESOURCE_IO,
4425 },
Joel King0cbf5d82012-05-24 15:21:38 -07004426};
4427
Rohit Vaswanib1cc4932012-07-23 21:30:11 -07004428struct platform_device msm_gpio_device = {
4429 .name = "msmgpio",
4430 .id = -1,
4431};
4432
Joel King0cbf5d82012-05-24 15:21:38 -07004433struct platform_device mdm_sglte_device = {
4434 .name = "mdm2_modem",
4435 .id = -1,
4436 .num_resources = ARRAY_SIZE(sglte_resources),
4437 .resource = sglte_resources,
4438};
Arun Menond4837f62012-08-20 15:25:50 -07004439
4440struct platform_device *msm8960_vidc_device[] __initdata = {
4441 &msm_device_vidc
4442};
4443
4444void __init msm8960_add_vidc_device(void)
4445{
4446 if (cpu_is_msm8960ab()) {
4447 struct msm_vidc_platform_data *pdata;
4448 pdata = (struct msm_vidc_platform_data *)
4449 msm_device_vidc.dev.platform_data;
4450 pdata->vidc_bus_client_pdata = &vidc_pro_bus_client_data;
4451 }
4452 platform_add_devices(msm8960_vidc_device,
4453 ARRAY_SIZE(msm8960_vidc_device));
4454}