blob: 6a486467131c4ba16ff53aa076a5773e9059a5fe [file] [log] [blame]
Abhimanyu Kapur440cdde2012-12-04 00:05:40 -08001/* Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
Rohit Vaswaniced9b3b2011-08-23 17:21:49 -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
Abhimanyu Kapur440cdde2012-12-04 00:05:40 -080014#include <linux/err.h>
Rohit Vaswaniced9b3b2011-08-23 17:21:49 -070015#include <linux/kernel.h>
16#include <linux/platform_device.h>
17#include <linux/irq.h>
18#include <linux/io.h>
Ramesh Masavarapuaa28b5b2011-10-21 10:26:03 -070019#include <linux/platform_data/qcom_crypto_device.h>
Amit Blay5e4ec192011-10-20 09:16:54 +020020#include <linux/dma-mapping.h>
Shiv Maliyappanahalli9ec55e92012-01-09 14:44:59 -080021#include <sound/msm-dai-q6.h>
22#include <sound/apr_audio.h>
Ofir Cohen94213a72012-05-03 14:26:32 +030023#include <linux/usb/android.h>
Rohit Vaswaniced9b3b2011-08-23 17:21:49 -070024#include <asm/hardware/gic.h>
Sahitya Tummala38295432011-09-29 10:08:45 +053025#include <asm/mach/flash.h>
Rohit Vaswaniced9b3b2011-08-23 17:21:49 -070026#include <mach/board.h>
27#include <mach/msm_iomap.h>
Amit Blay5e4ec192011-10-20 09:16:54 +020028#include <mach/msm_hsusb.h>
Rohit Vaswaniced9b3b2011-08-23 17:21:49 -070029#include <mach/irqs.h>
30#include <mach/socinfo.h>
Praveen Chidambaramab3b1c42011-08-25 08:44:05 -060031#include <mach/rpm.h>
Gagan Mac7a827642011-09-22 19:42:21 -060032#include <mach/msm_bus_board.h>
Rohit Vaswanif0ce9ae2011-08-23 22:18:38 -070033#include <asm/hardware/cache-l2x0.h>
Yan He092b7272011-09-21 15:25:03 -070034#include <mach/msm_sps.h>
Jeff Ohlsteind19bf442011-09-09 12:48:18 -070035#include <mach/dma.h>
Matt Wagantall7cca4642012-02-01 16:43:24 -080036#include "pm.h"
Rohit Vaswaniced9b3b2011-08-23 17:21:49 -070037#include "devices.h"
Rohit Vaswani341c2032012-11-08 18:49:29 -080038#include <mach/gpio.h>
Subhash Jadavani909e04f2012-04-12 10:52:50 +053039#include <mach/mpm.h>
Praveen Chidambaramab3b1c42011-08-25 08:44:05 -060040#include "spm.h"
Praveen Chidambaramab3b1c42011-08-25 08:44:05 -060041#include "rpm_resources.h"
Jeff Ohlstein7e668552011-10-06 16:17:25 -070042#include "msm_watchdog.h"
Praveen Chidambaram78499012011-11-01 17:15:17 -060043#include "rpm_stats.h"
44#include "rpm_log.h"
Rohit Vaswaniced9b3b2011-08-23 17:21:49 -070045
Harini Jayaramaneba52672011-09-08 15:13:00 -060046/* Address of GSBI blocks */
47#define MSM_GSBI1_PHYS 0x16000000
48#define MSM_GSBI2_PHYS 0x16100000
49#define MSM_GSBI3_PHYS 0x16200000
Rohit Vaswani09666872011-08-23 17:41:54 -070050#define MSM_GSBI4_PHYS 0x16300000
Harini Jayaramaneba52672011-09-08 15:13:00 -060051#define MSM_GSBI5_PHYS 0x16400000
52
Rohit Vaswani09666872011-08-23 17:41:54 -070053#define MSM_UART4DM_PHYS (MSM_GSBI4_PHYS + 0x40000)
54
Harini Jayaramaneba52672011-09-08 15:13:00 -060055/* GSBI QUP devices */
56#define MSM_GSBI1_QUP_PHYS (MSM_GSBI1_PHYS + 0x80000)
57#define MSM_GSBI2_QUP_PHYS (MSM_GSBI2_PHYS + 0x80000)
58#define MSM_GSBI3_QUP_PHYS (MSM_GSBI3_PHYS + 0x80000)
59#define MSM_GSBI4_QUP_PHYS (MSM_GSBI4_PHYS + 0x80000)
60#define MSM_GSBI5_QUP_PHYS (MSM_GSBI5_PHYS + 0x80000)
61#define MSM_QUP_SIZE SZ_4K
62
Kenneth Heitkeaf3d3cf2011-09-08 11:45:31 -070063/* Address of SSBI CMD */
64#define MSM_PMIC1_SSBI_CMD_PHYS 0x00500000
65#define MSM_PMIC_SSBI_SIZE SZ_4K
66
Venkat Sudhir5efc4912012-05-15 17:10:35 -070067#define MSM_GPIO_I2C_CLK 16
68#define MSM_GPIO_I2C_SDA 17
Anji Jonnala93129922012-10-09 20:57:53 +053069#define MSM9615_RPM_MASTER_STATS_BASE 0x10A700
Venkat Sudhir5efc4912012-05-15 17:10:35 -070070
Jeff Ohlstein7e668552011-10-06 16:17:25 -070071static struct msm_watchdog_pdata msm_watchdog_pdata = {
72 .pet_time = 10000,
73 .bark_time = 11000,
Rohit Vaswaniead426f2012-01-05 20:24:52 -080074 .has_secure = false,
75 .use_kernel_fiq = true,
Rohit Vaswanic77e4a62012-08-09 18:10:28 -070076 .base = MSM_TMR_BASE + WDT0_OFFSET,
77};
78
79static struct resource msm_watchdog_resources[] = {
80 {
81 .start = WDT0_ACCSCSSNBARK_INT,
82 .end = WDT0_ACCSCSSNBARK_INT,
83 .flags = IORESOURCE_IRQ,
84 },
Jeff Ohlstein7e668552011-10-06 16:17:25 -070085};
86
87struct platform_device msm9615_device_watchdog = {
88 .name = "msm_watchdog",
89 .id = -1,
90 .dev = {
91 .platform_data = &msm_watchdog_pdata,
92 },
Rohit Vaswanic77e4a62012-08-09 18:10:28 -070093 .num_resources = ARRAY_SIZE(msm_watchdog_resources),
94 .resource = msm_watchdog_resources,
Jeff Ohlstein7e668552011-10-06 16:17:25 -070095};
96
Jeff Ohlsteind19bf442011-09-09 12:48:18 -070097static struct resource msm_dmov_resource[] = {
98 {
99 .start = ADM_0_SCSS_1_IRQ,
Jeff Ohlsteind19bf442011-09-09 12:48:18 -0700100 .flags = IORESOURCE_IRQ,
101 },
Jeff Ohlstein905f1ce2011-09-07 18:50:18 -0700102 {
103 .start = 0x18320000,
104 .end = 0x18320000 + SZ_1M - 1,
105 .flags = IORESOURCE_MEM,
106 },
107};
108
109static struct msm_dmov_pdata msm_dmov_pdata = {
110 .sd = 1,
111 .sd_size = 0x800,
Jeff Ohlsteind19bf442011-09-09 12:48:18 -0700112};
113
114struct platform_device msm9615_device_dmov = {
115 .name = "msm_dmov",
116 .id = -1,
117 .resource = msm_dmov_resource,
118 .num_resources = ARRAY_SIZE(msm_dmov_resource),
Jeff Ohlstein905f1ce2011-09-07 18:50:18 -0700119 .dev = {
120 .platform_data = &msm_dmov_pdata,
121 },
Jeff Ohlsteind19bf442011-09-09 12:48:18 -0700122};
123
Matt Wagantallbf430eb2012-03-22 11:45:49 -0700124struct platform_device msm9615_device_acpuclk = {
125 .name = "acpuclk-9615",
126 .id = -1,
127};
128
Ofir Cohen40a4e862011-12-08 15:17:52 +0200129#define MSM_USB_BAM_BASE 0x12502000
Ofir Cohen010009b2012-01-26 16:49:17 +0200130#define MSM_USB_BAM_SIZE SZ_16K
131#define MSM_HSIC_BAM_BASE 0x12542000
132#define MSM_HSIC_BAM_SIZE SZ_16K
Ofir Cohen40a4e862011-12-08 15:17:52 +0200133
Amit Blay5e4ec192011-10-20 09:16:54 +0200134static struct resource resources_otg[] = {
135 {
136 .start = MSM9615_HSUSB_PHYS,
137 .end = MSM9615_HSUSB_PHYS + MSM9615_HSUSB_SIZE - 1,
138 .flags = IORESOURCE_MEM,
139 },
140 {
141 .start = USB1_HS_IRQ,
142 .end = USB1_HS_IRQ,
143 .flags = IORESOURCE_IRQ,
144 },
145};
146
147struct platform_device msm_device_otg = {
148 .name = "msm_otg",
149 .id = -1,
150 .num_resources = ARRAY_SIZE(resources_otg),
151 .resource = resources_otg,
152 .dev = {
153 .coherent_dma_mask = DMA_BIT_MASK(32),
154 },
155};
156
Amit Blay9b033682012-05-24 16:59:23 +0300157#define MSM_HSUSB_RESUME_GPIO 79
158
Amit Blay5e4ec192011-10-20 09:16:54 +0200159static struct resource resources_hsusb[] = {
160 {
161 .start = MSM9615_HSUSB_PHYS,
162 .end = MSM9615_HSUSB_PHYS + MSM9615_HSUSB_SIZE - 1,
163 .flags = IORESOURCE_MEM,
164 },
165 {
166 .start = USB1_HS_IRQ,
167 .end = USB1_HS_IRQ,
168 .flags = IORESOURCE_IRQ,
169 },
Amit Blay9b033682012-05-24 16:59:23 +0300170 {
171 .start = MSM_HSUSB_RESUME_GPIO,
172 .end = MSM_HSUSB_RESUME_GPIO,
173 .name = "USB_RESUME",
174 .flags = IORESOURCE_IO,
175 },
Amit Blay5e4ec192011-10-20 09:16:54 +0200176};
177
Ofir Cohen40a4e862011-12-08 15:17:52 +0200178static struct resource resources_usb_bam[] = {
179 {
Manu Gautam6afd5872012-07-25 09:16:55 +0530180 .name = "hsusb",
Ofir Cohen40a4e862011-12-08 15:17:52 +0200181 .start = MSM_USB_BAM_BASE,
Ofir Cohen010009b2012-01-26 16:49:17 +0200182 .end = MSM_USB_BAM_BASE + MSM_USB_BAM_SIZE - 1,
Ofir Cohen40a4e862011-12-08 15:17:52 +0200183 .flags = IORESOURCE_MEM,
184 },
185 {
Manu Gautam6afd5872012-07-25 09:16:55 +0530186 .name = "hsusb",
Ofir Cohen40a4e862011-12-08 15:17:52 +0200187 .start = USB1_HS_BAM_IRQ,
188 .end = USB1_HS_BAM_IRQ,
189 .flags = IORESOURCE_IRQ,
190 },
Ofir Cohen010009b2012-01-26 16:49:17 +0200191 {
Manu Gautam6afd5872012-07-25 09:16:55 +0530192 .name = "hsic",
Ofir Cohen010009b2012-01-26 16:49:17 +0200193 .start = MSM_HSIC_BAM_BASE,
194 .end = MSM_HSIC_BAM_BASE + MSM_HSIC_BAM_SIZE - 1,
195 .flags = IORESOURCE_MEM,
196 },
197 {
Manu Gautam6afd5872012-07-25 09:16:55 +0530198 .name = "hsic",
Ofir Cohen010009b2012-01-26 16:49:17 +0200199 .start = USB_HSIC_BAM_IRQ,
200 .end = USB_HSIC_BAM_IRQ,
201 .flags = IORESOURCE_IRQ,
202 },
Ofir Cohen40a4e862011-12-08 15:17:52 +0200203};
204
205struct platform_device msm_device_usb_bam = {
206 .name = "usb_bam",
207 .id = -1,
208 .num_resources = ARRAY_SIZE(resources_usb_bam),
209 .resource = resources_usb_bam,
210};
211
Amit Blay5e4ec192011-10-20 09:16:54 +0200212struct platform_device msm_device_gadget_peripheral = {
213 .name = "msm_hsusb",
214 .id = -1,
215 .num_resources = ARRAY_SIZE(resources_hsusb),
216 .resource = resources_hsusb,
217 .dev = {
218 .coherent_dma_mask = DMA_BIT_MASK(32),
219 },
220};
221
Ofir Cohen06789f12012-01-16 09:43:13 +0200222static struct resource resources_hsic_peripheral[] = {
223 {
224 .start = MSM9615_HSIC_PHYS,
225 .end = MSM9615_HSIC_PHYS + MSM9615_HSIC_SIZE - 1,
226 .flags = IORESOURCE_MEM,
227 },
228 {
229 .start = USB_HSIC_IRQ,
230 .end = USB_HSIC_IRQ,
231 .flags = IORESOURCE_IRQ,
232 },
233};
234
235struct platform_device msm_device_hsic_peripheral = {
236 .name = "msm_hsic_peripheral",
237 .id = -1,
238 .num_resources = ARRAY_SIZE(resources_hsic_peripheral),
239 .resource = resources_hsic_peripheral,
240 .dev = {
241 .coherent_dma_mask = DMA_BIT_MASK(32),
242 },
243};
244
Amit Blay6a8d4f32011-11-21 10:36:25 +0200245static struct resource resources_hsusb_host[] = {
246 {
247 .start = MSM9615_HSUSB_PHYS,
248 .end = MSM9615_HSUSB_PHYS + MSM9615_HSUSB_PHYS - 1,
249 .flags = IORESOURCE_MEM,
250 },
251 {
252 .start = USB1_HS_IRQ,
253 .end = USB1_HS_IRQ,
254 .flags = IORESOURCE_IRQ,
255 },
256};
257
258static u64 dma_mask = DMA_BIT_MASK(32);
259struct platform_device msm_device_hsusb_host = {
260 .name = "msm_hsusb_host",
261 .id = -1,
262 .num_resources = ARRAY_SIZE(resources_hsusb_host),
263 .resource = resources_hsusb_host,
264 .dev = {
265 .dma_mask = &dma_mask,
266 .coherent_dma_mask = 0xffffffff,
267 },
268};
269
Lena Salman65bcf372012-02-14 15:33:32 +0200270static struct resource resources_hsic_host[] = {
271 {
272 .start = MSM9615_HSIC_PHYS,
273 .end = MSM9615_HSIC_PHYS + MSM9615_HSIC_SIZE - 1,
274 .flags = IORESOURCE_MEM,
275 },
276 {
277 .start = USB_HSIC_IRQ,
278 .end = USB_HSIC_IRQ,
279 .flags = IORESOURCE_IRQ,
280 },
281};
282
283struct platform_device msm_device_hsic_host = {
284 .name = "msm_hsic_host",
285 .id = -1,
286 .num_resources = ARRAY_SIZE(resources_hsic_host),
287 .resource = resources_hsic_host,
288 .dev = {
289 .dma_mask = &dma_mask,
290 .coherent_dma_mask = 0xffffffff,
291 },
292};
293
Rohit Vaswani09666872011-08-23 17:41:54 -0700294static struct resource resources_uart_gsbi4[] = {
295 {
296 .start = GSBI4_UARTDM_IRQ,
297 .end = GSBI4_UARTDM_IRQ,
298 .flags = IORESOURCE_IRQ,
299 },
300 {
301 .start = MSM_UART4DM_PHYS,
302 .end = MSM_UART4DM_PHYS + PAGE_SIZE - 1,
303 .name = "uartdm_resource",
304 .flags = IORESOURCE_MEM,
305 },
306 {
307 .start = MSM_GSBI4_PHYS,
308 .end = MSM_GSBI4_PHYS + PAGE_SIZE - 1,
309 .name = "gsbi_resource",
310 .flags = IORESOURCE_MEM,
311 },
312};
313
314struct platform_device msm9615_device_uart_gsbi4 = {
315 .name = "msm_serial_hsl",
316 .id = 0,
317 .num_resources = ARRAY_SIZE(resources_uart_gsbi4),
318 .resource = resources_uart_gsbi4,
319};
320
Harini Jayaramaneba52672011-09-08 15:13:00 -0600321static struct resource resources_qup_i2c_gsbi5[] = {
322 {
323 .name = "gsbi_qup_i2c_addr",
324 .start = MSM_GSBI5_PHYS,
Harini Jayaraman7a60bc12011-09-15 14:58:54 -0600325 .end = MSM_GSBI5_PHYS + 4 - 1,
Harini Jayaramaneba52672011-09-08 15:13:00 -0600326 .flags = IORESOURCE_MEM,
327 },
328 {
329 .name = "qup_phys_addr",
330 .start = MSM_GSBI5_QUP_PHYS,
Harini Jayaraman7a60bc12011-09-15 14:58:54 -0600331 .end = MSM_GSBI5_QUP_PHYS + MSM_QUP_SIZE - 1,
Harini Jayaramaneba52672011-09-08 15:13:00 -0600332 .flags = IORESOURCE_MEM,
333 },
334 {
335 .name = "qup_err_intr",
336 .start = GSBI5_QUP_IRQ,
337 .end = GSBI5_QUP_IRQ,
338 .flags = IORESOURCE_IRQ,
339 },
Venkat Sudhir5efc4912012-05-15 17:10:35 -0700340 {
341 .name = "i2c_clk",
342 .start = MSM_GPIO_I2C_CLK,
343 .end = MSM_GPIO_I2C_CLK,
344 .flags = IORESOURCE_IO,
345 },
346 {
347 .name = "i2c_sda",
348 .start = MSM_GPIO_I2C_SDA,
349 .end = MSM_GPIO_I2C_SDA,
350 .flags = IORESOURCE_IO,
351
352 },
Harini Jayaramaneba52672011-09-08 15:13:00 -0600353};
354
355struct platform_device msm9615_device_qup_i2c_gsbi5 = {
356 .name = "qup_i2c",
357 .id = 0,
358 .num_resources = ARRAY_SIZE(resources_qup_i2c_gsbi5),
359 .resource = resources_qup_i2c_gsbi5,
360};
361
Harini Jayaraman738c9312011-09-08 15:22:38 -0600362static struct resource resources_qup_spi_gsbi3[] = {
363 {
364 .name = "spi_base",
365 .start = MSM_GSBI3_QUP_PHYS,
366 .end = MSM_GSBI3_QUP_PHYS + SZ_4K - 1,
367 .flags = IORESOURCE_MEM,
368 },
369 {
370 .name = "gsbi_base",
371 .start = MSM_GSBI3_PHYS,
372 .end = MSM_GSBI3_PHYS + 4 - 1,
373 .flags = IORESOURCE_MEM,
374 },
375 {
376 .name = "spi_irq_in",
377 .start = GSBI3_QUP_IRQ,
378 .end = GSBI3_QUP_IRQ,
379 .flags = IORESOURCE_IRQ,
380 },
381};
382
383struct platform_device msm9615_device_qup_spi_gsbi3 = {
384 .name = "spi_qsd",
385 .id = 0,
386 .num_resources = ARRAY_SIZE(resources_qup_spi_gsbi3),
387 .resource = resources_qup_spi_gsbi3,
388};
389
Sagar Dharia2a5378d2011-12-01 20:00:11 -0700390#define LPASS_SLIMBUS_PHYS 0x28080000
391#define LPASS_SLIMBUS_BAM_PHYS 0x28084000
392#define LPASS_SLIMBUS_SLEW (MSM9615_TLMM_PHYS + 0x207C)
393/* Board info for the slimbus slave device */
394static struct resource slimbus_res[] = {
395 {
396 .start = LPASS_SLIMBUS_PHYS,
397 .end = LPASS_SLIMBUS_PHYS + 8191,
398 .flags = IORESOURCE_MEM,
399 .name = "slimbus_physical",
400 },
401 {
402 .start = LPASS_SLIMBUS_BAM_PHYS,
403 .end = LPASS_SLIMBUS_BAM_PHYS + 8191,
404 .flags = IORESOURCE_MEM,
405 .name = "slimbus_bam_physical",
406 },
407 {
408 .start = LPASS_SLIMBUS_SLEW,
409 .end = LPASS_SLIMBUS_SLEW + 4 - 1,
410 .flags = IORESOURCE_MEM,
411 .name = "slimbus_slew_reg",
412 },
413 {
414 .start = SLIMBUS0_CORE_EE1_IRQ,
415 .end = SLIMBUS0_CORE_EE1_IRQ,
416 .flags = IORESOURCE_IRQ,
417 .name = "slimbus_irq",
418 },
419 {
420 .start = SLIMBUS0_BAM_EE1_IRQ,
421 .end = SLIMBUS0_BAM_EE1_IRQ,
422 .flags = IORESOURCE_IRQ,
423 .name = "slimbus_bam_irq",
424 },
425};
426
427struct platform_device msm9615_slim_ctrl = {
428 .name = "msm_slim_ctrl",
429 .id = 1,
430 .num_resources = ARRAY_SIZE(slimbus_res),
431 .resource = slimbus_res,
432 .dev = {
433 .coherent_dma_mask = 0xffffffffULL,
434 },
435};
436
Shiv Maliyappanahalli9ec55e92012-01-09 14:44:59 -0800437struct platform_device msm_pcm = {
438 .name = "msm-pcm-dsp",
439 .id = -1,
440};
441
442struct platform_device msm_multi_ch_pcm = {
443 .name = "msm-multi-ch-pcm-dsp",
444 .id = -1,
445};
446
447struct platform_device msm_pcm_routing = {
448 .name = "msm-pcm-routing",
449 .id = -1,
450};
451
452struct platform_device msm_cpudai0 = {
453 .name = "msm-dai-q6",
454 .id = 0x4000,
455};
456
457struct platform_device msm_cpudai1 = {
458 .name = "msm-dai-q6",
459 .id = 0x4001,
460};
461
462struct platform_device msm_cpudai_bt_rx = {
463 .name = "msm-dai-q6",
464 .id = 0x3000,
465};
466
467struct platform_device msm_cpudai_bt_tx = {
468 .name = "msm-dai-q6",
469 .id = 0x3001,
470};
471
472/*
473 * Machine specific data for AUX PCM Interface
474 * which the driver will be unware of.
475 */
Shiv Maliyappanahalli19e86e22012-03-28 17:27:26 -0700476struct msm_dai_auxpcm_pdata auxpcm_pdata = {
Shiv Maliyappanahalli9ec55e92012-01-09 14:44:59 -0800477 .clk = "pcm_clk",
Kuirong Wang547a9982012-05-04 18:29:11 -0700478 .mode_8k = {
479 .mode = AFE_PCM_CFG_MODE_PCM,
480 .sync = AFE_PCM_CFG_SYNC_INT,
481 .frame = AFE_PCM_CFG_FRM_256BPF,
482 .quant = AFE_PCM_CFG_QUANT_LINEAR_NOPAD,
483 .slot = 0,
484 .data = AFE_PCM_CFG_CDATAOE_MASTER,
485 .pcm_clk_rate = 2048000,
486 },
487 .mode_16k = {
488 .mode = AFE_PCM_CFG_MODE_PCM,
489 .sync = AFE_PCM_CFG_SYNC_INT,
490 .frame = AFE_PCM_CFG_FRM_256BPF,
491 .quant = AFE_PCM_CFG_QUANT_LINEAR_NOPAD,
492 .slot = 0,
493 .data = AFE_PCM_CFG_CDATAOE_MASTER,
494 .pcm_clk_rate = 4096000,
495 }
Shiv Maliyappanahalli9ec55e92012-01-09 14:44:59 -0800496};
497
498struct platform_device msm_cpudai_auxpcm_rx = {
499 .name = "msm-dai-q6",
500 .id = 2,
501 .dev = {
Shiv Maliyappanahalli19e86e22012-03-28 17:27:26 -0700502 .platform_data = &auxpcm_pdata,
Shiv Maliyappanahalli9ec55e92012-01-09 14:44:59 -0800503 },
504};
505
506struct platform_device msm_cpudai_auxpcm_tx = {
507 .name = "msm-dai-q6",
508 .id = 3,
Shiv Maliyappanahalli19e86e22012-03-28 17:27:26 -0700509 .dev = {
510 .platform_data = &auxpcm_pdata,
511 },
Shiv Maliyappanahalli9ec55e92012-01-09 14:44:59 -0800512};
513
Shiv Maliyappanahalli7f4dec52012-06-01 16:06:08 -0700514struct msm_dai_auxpcm_pdata sec_auxpcm_pdata = {
515 .clk = "sec_pcm_clk",
516 .mode_8k = {
517 .mode = AFE_PCM_CFG_MODE_PCM,
518 .sync = AFE_PCM_CFG_SYNC_INT,
519 .frame = AFE_PCM_CFG_FRM_256BPF,
520 .quant = AFE_PCM_CFG_QUANT_LINEAR_NOPAD,
521 .slot = 0,
522 .data = AFE_PCM_CFG_CDATAOE_MASTER,
523 .pcm_clk_rate = 2048000,
524 },
525 .mode_16k = {
526 .mode = AFE_PCM_CFG_MODE_PCM,
527 .sync = AFE_PCM_CFG_SYNC_INT,
528 .frame = AFE_PCM_CFG_FRM_256BPF,
529 .quant = AFE_PCM_CFG_QUANT_LINEAR_NOPAD,
530 .slot = 0,
531 .data = AFE_PCM_CFG_CDATAOE_MASTER,
532 .pcm_clk_rate = 4096000,
533 }
534};
535
536struct platform_device msm_cpudai_sec_auxpcm_rx = {
537 .name = "msm-dai-q6",
538 .id = 12,
539 .dev = {
540 .platform_data = &sec_auxpcm_pdata,
541 },
542};
543
544struct platform_device msm_cpudai_sec_auxpcm_tx = {
545 .name = "msm-dai-q6",
546 .id = 13,
547 .dev = {
548 .platform_data = &sec_auxpcm_pdata,
549 },
550};
551
Shiv Maliyappanahalli9ec55e92012-01-09 14:44:59 -0800552struct platform_device msm_cpu_fe = {
553 .name = "msm-dai-fe",
554 .id = -1,
555};
556
557struct platform_device msm_stub_codec = {
558 .name = "msm-stub-codec",
559 .id = 1,
560};
561
562struct platform_device msm_voice = {
563 .name = "msm-pcm-voice",
564 .id = -1,
565};
566
Prashanth Reddy14c862f2012-11-14 20:03:25 -0800567struct platform_device msm_cpudai_incall_music_rx = {
568 .name = "msm-dai-q6",
569 .id = 0x8005,
570};
571
572struct platform_device msm_cpudai_incall_record_rx = {
573 .name = "msm-dai-q6",
574 .id = 0x8004,
575};
576
577struct platform_device msm_cpudai_incall_record_tx = {
578 .name = "msm-dai-q6",
579 .id = 0x8003,
580};
581
Venkat Sudhir5efc4912012-05-15 17:10:35 -0700582struct platform_device msm_i2s_cpudai0 = {
583 .name = "msm-dai-q6",
584 .id = PRIMARY_I2S_RX,
585};
586
587struct platform_device msm_i2s_cpudai1 = {
588 .name = "msm-dai-q6",
589 .id = PRIMARY_I2S_TX,
590};
Damir Didjustoadd54442012-09-21 10:39:54 -0700591struct platform_device msm_i2s_cpudai4 = {
592 .name = "msm-dai-q6",
593 .id = SECONDARY_I2S_RX,
594};
595
596struct platform_device msm_i2s_cpudai5 = {
597 .name = "msm-dai-q6",
598 .id = SECONDARY_I2S_TX,
599};
Shiv Maliyappanahalli9ec55e92012-01-09 14:44:59 -0800600struct platform_device msm_voip = {
601 .name = "msm-voip-dsp",
602 .id = -1,
603};
Shiv Maliyappanahallic2321262012-11-12 15:21:05 -0800604struct platform_device msm_cpudai_stub = {
605 .name = "msm-dai-stub",
606 .id = -1,
607};
Shiv Maliyappanahalli30561a52012-10-28 21:15:07 -0700608struct platform_device msm_dtmf = {
609 .name = "msm-pcm-dtmf",
610 .id = -1,
611};
Shiv Maliyappanahalliebdb3062013-01-16 19:31:25 -0800612struct platform_device msm_host_pcm_voice = {
613 .name = "msm-host-pcm-voice",
614 .id = -1,
615};
Shiv Maliyappanahalli9ec55e92012-01-09 14:44:59 -0800616struct platform_device msm_compr_dsp = {
617 .name = "msm-compr-dsp",
618 .id = -1,
619};
620
621struct platform_device msm_pcm_hostless = {
622 .name = "msm-pcm-hostless",
623 .id = -1,
624};
625
626struct platform_device msm_cpudai_afe_01_rx = {
627 .name = "msm-dai-q6",
628 .id = 0xE0,
629};
630
631struct platform_device msm_cpudai_afe_01_tx = {
632 .name = "msm-dai-q6",
633 .id = 0xF0,
634};
635
636struct platform_device msm_cpudai_afe_02_rx = {
637 .name = "msm-dai-q6",
638 .id = 0xF1,
639};
640
641struct platform_device msm_cpudai_afe_02_tx = {
642 .name = "msm-dai-q6",
643 .id = 0xE1,
644};
645
646struct platform_device msm_pcm_afe = {
647 .name = "msm-pcm-afe",
648 .id = -1,
649};
650
Kenneth Heitkeaf3d3cf2011-09-08 11:45:31 -0700651static struct resource resources_ssbi_pmic1[] = {
652 {
653 .start = MSM_PMIC1_SSBI_CMD_PHYS,
654 .end = MSM_PMIC1_SSBI_CMD_PHYS + MSM_PMIC_SSBI_SIZE - 1,
655 .flags = IORESOURCE_MEM,
656 },
657};
658
659struct platform_device msm9615_device_ssbi_pmic1 = {
660 .name = "msm_ssbi",
661 .id = 0,
662 .resource = resources_ssbi_pmic1,
663 .num_resources = ARRAY_SIZE(resources_ssbi_pmic1),
664};
665
Yan He092b7272011-09-21 15:25:03 -0700666static struct resource resources_sps[] = {
667 {
668 .name = "pipe_mem",
669 .start = 0x12800000,
670 .end = 0x12800000 + 0x4000 - 1,
671 .flags = IORESOURCE_MEM,
672 },
673 {
674 .name = "bamdma_dma",
675 .start = 0x12240000,
676 .end = 0x12240000 + 0x1000 - 1,
677 .flags = IORESOURCE_MEM,
678 },
679 {
680 .name = "bamdma_bam",
681 .start = 0x12244000,
682 .end = 0x12244000 + 0x4000 - 1,
683 .flags = IORESOURCE_MEM,
684 },
685 {
686 .name = "bamdma_irq",
687 .start = SPS_BAM_DMA_IRQ,
688 .end = SPS_BAM_DMA_IRQ,
689 .flags = IORESOURCE_IRQ,
690 },
691};
692
693struct msm_sps_platform_data msm_sps_pdata = {
694 .bamdma_restricted_pipes = 0x06,
695};
696
697struct platform_device msm_device_sps = {
698 .name = "msm_sps",
699 .id = -1,
700 .num_resources = ARRAY_SIZE(resources_sps),
701 .resource = resources_sps,
702 .dev.platform_data = &msm_sps_pdata,
703};
704
Sahitya Tummala38295432011-09-29 10:08:45 +0530705#define MSM_NAND_PHYS 0x1B400000
706static struct resource resources_nand[] = {
707 [0] = {
708 .name = "msm_nand_dmac",
709 .start = DMOV_NAND_CHAN,
710 .end = DMOV_NAND_CHAN,
711 .flags = IORESOURCE_DMA,
712 },
713 [1] = {
714 .name = "msm_nand_phys",
715 .start = MSM_NAND_PHYS,
716 .end = MSM_NAND_PHYS + 0x7FF,
717 .flags = IORESOURCE_MEM,
718 },
719};
720
721struct flash_platform_data msm_nand_data = {
Sujit Reddy Thummaec9b3252012-04-23 15:53:45 +0530722 .version = VERSION_2,
Sahitya Tummala38295432011-09-29 10:08:45 +0530723};
724
725struct platform_device msm_device_nand = {
726 .name = "msm_nand",
727 .id = -1,
728 .num_resources = ARRAY_SIZE(resources_nand),
729 .resource = resources_nand,
Siddartha Mohanadoss5d49cec2011-09-21 10:26:15 -0700730 .dev = {
Sahitya Tummala38295432011-09-29 10:08:45 +0530731 .platform_data = &msm_nand_data,
Siddartha Mohanadoss5d49cec2011-09-21 10:26:15 -0700732 },
733};
734
Jeff Hugo56b933a2011-09-28 14:42:05 -0600735struct platform_device msm_device_smd = {
736 .name = "msm_smd",
737 .id = -1,
738};
739
Eric Holmberg0c96e702011-11-08 18:04:31 -0700740struct platform_device msm_device_bam_dmux = {
741 .name = "BAM_RMNT",
742 .id = -1,
743};
744
Stephen Boyda1cf76b2012-06-13 12:05:35 -0700745static struct resource msm_9615_q6_lpass_resources[] = {
746 {
747 .start = LPASS_Q6SS_WDOG_EXPIRED,
748 .end = LPASS_Q6SS_WDOG_EXPIRED,
749 .flags = IORESOURCE_IRQ,
750 },
751};
752
753struct platform_device msm_9615_q6_lpass = {
754 .name = "pil-q6v4-lpass",
755 .id = -1,
756 .num_resources = ARRAY_SIZE(msm_9615_q6_lpass_resources),
757 .resource = msm_9615_q6_lpass_resources,
758};
759
Stephen Boyd2efa9962012-06-12 14:20:12 -0700760static struct resource msm_9615_q6_mss_resources[] = {
761 {
762 .start = Q6FW_WDOG_EXPIRED_IRQ,
763 .end = Q6FW_WDOG_EXPIRED_IRQ,
764 .flags = IORESOURCE_IRQ,
765 },
766 {
767 .start = Q6SW_WDOG_EXPIRED_IRQ,
768 .end = Q6SW_WDOG_EXPIRED_IRQ,
769 .flags = IORESOURCE_IRQ,
770 },
771};
772
773struct platform_device msm_9615_q6_mss = {
774 .name = "pil-q6v4-modem",
775 .id = -1,
776 .num_resources = ARRAY_SIZE(msm_9615_q6_mss_resources),
777 .resource = msm_9615_q6_mss_resources,
778};
779
Ramesh Masavarapu5ad37392011-10-10 10:44:10 -0700780#ifdef CONFIG_HW_RANDOM_MSM
781/* PRNG device */
782#define MSM_PRNG_PHYS 0x1A500000
783static struct resource rng_resources = {
784 .flags = IORESOURCE_MEM,
785 .start = MSM_PRNG_PHYS,
786 .end = MSM_PRNG_PHYS + SZ_512 - 1,
787};
788
789struct platform_device msm_device_rng = {
790 .name = "msm_rng",
791 .id = 0,
792 .num_resources = 1,
793 .resource = &rng_resources,
794};
795#endif
Krishna Kondadd794462011-10-01 00:19:29 -0700796
Ramesh Masavarapuaa28b5b2011-10-21 10:26:03 -0700797#if defined(CONFIG_CRYPTO_DEV_QCRYPTO) || \
798 defined(CONFIG_CRYPTO_DEV_QCRYPTO_MODULE) || \
799 defined(CONFIG_CRYPTO_DEV_QCEDEV) || \
800 defined(CONFIG_CRYPTO_DEV_QCEDEV_MODULE)
801
802#define QCE_SIZE 0x10000
803#define QCE_0_BASE 0x18500000
804
805#define QCE_HW_KEY_SUPPORT 0
806#define QCE_SHA_HMAC_SUPPORT 1
807#define QCE_SHARE_CE_RESOURCE 1
808#define QCE_CE_SHARED 0
809
810static struct resource qcrypto_resources[] = {
811 [0] = {
812 .start = QCE_0_BASE,
813 .end = QCE_0_BASE + QCE_SIZE - 1,
814 .flags = IORESOURCE_MEM,
815 },
816 [1] = {
817 .name = "crypto_channels",
818 .start = DMOV_CE_IN_CHAN,
819 .end = DMOV_CE_OUT_CHAN,
820 .flags = IORESOURCE_DMA,
821 },
822 [2] = {
823 .name = "crypto_crci_in",
824 .start = DMOV_CE_IN_CRCI,
825 .end = DMOV_CE_IN_CRCI,
826 .flags = IORESOURCE_DMA,
827 },
828 [3] = {
829 .name = "crypto_crci_out",
830 .start = DMOV_CE_OUT_CRCI,
831 .end = DMOV_CE_OUT_CRCI,
832 .flags = IORESOURCE_DMA,
833 },
834};
835
836static struct resource qcedev_resources[] = {
837 [0] = {
838 .start = QCE_0_BASE,
839 .end = QCE_0_BASE + QCE_SIZE - 1,
840 .flags = IORESOURCE_MEM,
841 },
842 [1] = {
843 .name = "crypto_channels",
844 .start = DMOV_CE_IN_CHAN,
845 .end = DMOV_CE_OUT_CHAN,
846 .flags = IORESOURCE_DMA,
847 },
848 [2] = {
849 .name = "crypto_crci_in",
850 .start = DMOV_CE_IN_CRCI,
851 .end = DMOV_CE_IN_CRCI,
852 .flags = IORESOURCE_DMA,
853 },
854 [3] = {
855 .name = "crypto_crci_out",
856 .start = DMOV_CE_OUT_CRCI,
857 .end = DMOV_CE_OUT_CRCI,
858 .flags = IORESOURCE_DMA,
859 },
860};
861
862#endif
863
864#if defined(CONFIG_CRYPTO_DEV_QCRYPTO) || \
865 defined(CONFIG_CRYPTO_DEV_QCRYPTO_MODULE)
866
867static struct msm_ce_hw_support qcrypto_ce_hw_suppport = {
868 .ce_shared = QCE_CE_SHARED,
869 .shared_ce_resource = QCE_SHARE_CE_RESOURCE,
870 .hw_key_support = QCE_HW_KEY_SUPPORT,
871 .sha_hmac = QCE_SHA_HMAC_SUPPORT,
Ramesh Masavarapu49259682011-12-02 14:00:18 -0800872 .bus_scale_table = NULL,
Ramesh Masavarapuaa28b5b2011-10-21 10:26:03 -0700873};
874
875struct platform_device msm9615_qcrypto_device = {
876 .name = "qcrypto",
877 .id = 0,
878 .num_resources = ARRAY_SIZE(qcrypto_resources),
879 .resource = qcrypto_resources,
880 .dev = {
881 .coherent_dma_mask = DMA_BIT_MASK(32),
882 .platform_data = &qcrypto_ce_hw_suppport,
883 },
884};
885#endif
886
887#if defined(CONFIG_CRYPTO_DEV_QCEDEV) || \
888 defined(CONFIG_CRYPTO_DEV_QCEDEV_MODULE)
889
890static struct msm_ce_hw_support qcedev_ce_hw_suppport = {
891 .ce_shared = QCE_CE_SHARED,
892 .shared_ce_resource = QCE_SHARE_CE_RESOURCE,
893 .hw_key_support = QCE_HW_KEY_SUPPORT,
894 .sha_hmac = QCE_SHA_HMAC_SUPPORT,
Ramesh Masavarapu49259682011-12-02 14:00:18 -0800895 .bus_scale_table = NULL,
Ramesh Masavarapuaa28b5b2011-10-21 10:26:03 -0700896};
897
898struct platform_device msm9615_qcedev_device = {
899 .name = "qce",
900 .id = 0,
901 .num_resources = ARRAY_SIZE(qcedev_resources),
902 .resource = qcedev_resources,
903 .dev = {
904 .coherent_dma_mask = DMA_BIT_MASK(32),
905 .platform_data = &qcedev_ce_hw_suppport,
906 },
907};
908#endif
909
Krishna Kondadd794462011-10-01 00:19:29 -0700910#define MSM_SDC1_BASE 0x12180000
911#define MSM_SDC1_DML_BASE (MSM_SDC1_BASE + 0x800)
912#define MSM_SDC1_BAM_BASE (MSM_SDC1_BASE + 0x2000)
Krishna Konda71aef182011-10-01 02:27:51 -0700913#define MSM_SDC2_BASE 0x12140000
914#define MSM_SDC2_DML_BASE (MSM_SDC2_BASE + 0x800)
915#define MSM_SDC2_BAM_BASE (MSM_SDC2_BASE + 0x2000)
Krishna Kondadd794462011-10-01 00:19:29 -0700916
917static struct resource resources_sdc1[] = {
918 {
919 .name = "core_mem",
920 .flags = IORESOURCE_MEM,
921 .start = MSM_SDC1_BASE,
922 .end = MSM_SDC1_DML_BASE - 1,
923 },
924 {
925 .name = "core_irq",
926 .flags = IORESOURCE_IRQ,
927 .start = SDC1_IRQ_0,
928 .end = SDC1_IRQ_0
929 },
930#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
931 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +0530932 .name = "dml_mem",
Krishna Kondadd794462011-10-01 00:19:29 -0700933 .start = MSM_SDC1_DML_BASE,
934 .end = MSM_SDC1_BAM_BASE - 1,
935 .flags = IORESOURCE_MEM,
936 },
937 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +0530938 .name = "bam_mem",
Krishna Kondadd794462011-10-01 00:19:29 -0700939 .start = MSM_SDC1_BAM_BASE,
940 .end = MSM_SDC1_BAM_BASE + (2 * SZ_4K) - 1,
941 .flags = IORESOURCE_MEM,
942 },
943 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +0530944 .name = "bam_irq",
Krishna Kondadd794462011-10-01 00:19:29 -0700945 .start = SDC1_BAM_IRQ,
946 .end = SDC1_BAM_IRQ,
947 .flags = IORESOURCE_IRQ,
948 },
949#endif
950};
951
Krishna Konda71aef182011-10-01 02:27:51 -0700952static struct resource resources_sdc2[] = {
953 {
954 .name = "core_mem",
955 .flags = IORESOURCE_MEM,
956 .start = MSM_SDC2_BASE,
957 .end = MSM_SDC2_DML_BASE - 1,
958 },
959 {
960 .name = "core_irq",
961 .flags = IORESOURCE_IRQ,
962 .start = SDC2_IRQ_0,
963 .end = SDC2_IRQ_0
964 },
965#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
966 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +0530967 .name = "dml_mem",
Krishna Konda71aef182011-10-01 02:27:51 -0700968 .start = MSM_SDC2_DML_BASE,
969 .end = MSM_SDC2_BAM_BASE - 1,
970 .flags = IORESOURCE_MEM,
971 },
972 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +0530973 .name = "bam_mem",
Krishna Konda71aef182011-10-01 02:27:51 -0700974 .start = MSM_SDC2_BAM_BASE,
975 .end = MSM_SDC2_BAM_BASE + (2 * SZ_4K) - 1,
976 .flags = IORESOURCE_MEM,
977 },
978 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +0530979 .name = "bam_irq",
Krishna Konda71aef182011-10-01 02:27:51 -0700980 .start = SDC2_BAM_IRQ,
981 .end = SDC2_BAM_IRQ,
982 .flags = IORESOURCE_IRQ,
983 },
984#endif
985};
986
Krishna Kondadd794462011-10-01 00:19:29 -0700987struct platform_device msm_device_sdc1 = {
988 .name = "msm_sdcc",
989 .id = 1,
990 .num_resources = ARRAY_SIZE(resources_sdc1),
991 .resource = resources_sdc1,
992 .dev = {
993 .coherent_dma_mask = 0xffffffff,
994 },
995};
996
Krishna Konda71aef182011-10-01 02:27:51 -0700997struct platform_device msm_device_sdc2 = {
998 .name = "msm_sdcc",
999 .id = 2,
1000 .num_resources = ARRAY_SIZE(resources_sdc2),
1001 .resource = resources_sdc2,
1002 .dev = {
1003 .coherent_dma_mask = 0xffffffff,
1004 },
1005};
1006
Krishna Kondadd794462011-10-01 00:19:29 -07001007static struct platform_device *msm_sdcc_devices[] __initdata = {
1008 &msm_device_sdc1,
Krishna Konda71aef182011-10-01 02:27:51 -07001009 &msm_device_sdc2,
Krishna Kondadd794462011-10-01 00:19:29 -07001010};
1011
1012int __init msm_add_sdcc(unsigned int controller, struct mmc_platform_data *plat)
1013{
1014 struct platform_device *pdev;
1015
1016 if (controller < 1 || controller > 2)
1017 return -EINVAL;
1018
1019 pdev = msm_sdcc_devices[controller - 1];
1020 pdev->dev.platform_data = plat;
1021 return platform_device_register(pdev);
1022}
1023
Zhang Chang Kenc2f2bcc2012-03-30 18:32:02 -04001024#ifdef CONFIG_FB_MSM_EBI2
1025static struct resource msm_ebi2_lcdc_resources[] = {
1026 {
1027 .name = "base",
1028 .start = 0x1B300000,
1029 .end = 0x1B300000 + PAGE_SIZE - 1,
1030 .flags = IORESOURCE_MEM,
1031 },
1032 {
1033 .name = "lcd01",
1034 .start = 0x1FC00000,
1035 .end = 0x1FC00000 + 0x80000 - 1,
1036 .flags = IORESOURCE_MEM,
1037 },
1038};
1039
1040struct platform_device msm_ebi2_lcdc_device = {
1041 .name = "ebi2_lcd",
1042 .id = 0,
1043 .num_resources = ARRAY_SIZE(msm_ebi2_lcdc_resources),
1044 .resource = msm_ebi2_lcdc_resources,
1045};
1046#endif
1047
Rohit Vaswanif0ce9ae2011-08-23 22:18:38 -07001048#ifdef CONFIG_CACHE_L2X0
1049static int __init l2x0_cache_init(void)
1050{
1051 int aux_ctrl = 0;
1052
1053 /* Way Size 010(0x2) 32KB */
1054 aux_ctrl = (0x1 << L2X0_AUX_CTRL_SHARE_OVERRIDE_SHIFT) | \
1055 (0x2 << L2X0_AUX_CTRL_WAY_SIZE_SHIFT) | \
1056 (0x1 << L2X0_AUX_CTRL_EVNT_MON_BUS_EN_SHIFT);
1057
1058 /* L2 Latency setting required by hardware. Default is 0x20
1059 which is no good.
1060 */
1061 writel_relaxed(0x220, MSM_L2CC_BASE + L2X0_DATA_LATENCY_CTRL);
1062 l2x0_init(MSM_L2CC_BASE, aux_ctrl, L2X0_AUX_CTRL_MASK);
1063
1064 return 0;
1065}
1066#else
1067static int __init l2x0_cache_init(void){ return 0; }
1068#endif
1069
Praveen Chidambaram78499012011-11-01 17:15:17 -06001070struct msm_rpm_platform_data msm9615_rpm_data __initdata = {
Praveen Chidambaramab3b1c42011-08-25 08:44:05 -06001071 .reg_base_addrs = {
1072 [MSM_RPM_PAGE_STATUS] = MSM_RPM_BASE,
1073 [MSM_RPM_PAGE_CTRL] = MSM_RPM_BASE + 0x400,
1074 [MSM_RPM_PAGE_REQ] = MSM_RPM_BASE + 0x600,
1075 [MSM_RPM_PAGE_ACK] = MSM_RPM_BASE + 0xa00,
1076 },
Praveen Chidambaramab3b1c42011-08-25 08:44:05 -06001077 .irq_ack = RPM_APCC_CPU0_GP_HIGH_IRQ,
Stephen Boydf61255e2012-02-24 14:31:09 -08001078 .irq_err = RPM_APCC_CPU0_GP_LOW_IRQ,
Praveen Chidambarame396ce62012-03-30 11:15:57 -06001079 .irq_wakeup = RPM_APCC_CPU0_WAKE_UP_IRQ,
Praveen Chidambaram78499012011-11-01 17:15:17 -06001080 .ipc_rpm_reg = MSM_APCS_GCC_BASE + 0x008,
1081 .ipc_rpm_val = 4,
1082 .target_id = {
1083 MSM_RPM_MAP(9615, NOTIFICATION_CONFIGURED_0, NOTIFICATION, 4),
1084 MSM_RPM_MAP(9615, NOTIFICATION_REGISTERED_0, NOTIFICATION, 4),
1085 MSM_RPM_MAP(9615, INVALIDATE_0, INVALIDATE, 8),
1086 MSM_RPM_MAP(9615, TRIGGER_TIMED_TO, TRIGGER_TIMED, 1),
1087 MSM_RPM_MAP(9615, TRIGGER_TIMED_SCLK_COUNT, TRIGGER_TIMED, 1),
1088 MSM_RPM_MAP(9615, RPM_CTL, RPM_CTL, 1),
1089 MSM_RPM_MAP(9615, CXO_CLK, CXO_CLK, 1),
1090 MSM_RPM_MAP(9615, SYSTEM_FABRIC_CLK, SYSTEM_FABRIC_CLK, 1),
1091 MSM_RPM_MAP(9615, DAYTONA_FABRIC_CLK, DAYTONA_FABRIC_CLK, 1),
1092 MSM_RPM_MAP(9615, SFPB_CLK, SFPB_CLK, 1),
1093 MSM_RPM_MAP(9615, CFPB_CLK, CFPB_CLK, 1),
1094 MSM_RPM_MAP(9615, EBI1_CLK, EBI1_CLK, 1),
1095 MSM_RPM_MAP(9615, SYS_FABRIC_CFG_HALT_0,
1096 SYS_FABRIC_CFG_HALT, 2),
1097 MSM_RPM_MAP(9615, SYS_FABRIC_CFG_CLKMOD_0,
1098 SYS_FABRIC_CFG_CLKMOD, 3),
1099 MSM_RPM_MAP(9615, SYS_FABRIC_CFG_IOCTL,
1100 SYS_FABRIC_CFG_IOCTL, 1),
1101 MSM_RPM_MAP(9615, SYSTEM_FABRIC_ARB_0,
1102 SYSTEM_FABRIC_ARB, 27),
1103 MSM_RPM_MAP(9615, PM8018_S1_0, PM8018_S1, 2),
1104 MSM_RPM_MAP(9615, PM8018_S2_0, PM8018_S2, 2),
1105 MSM_RPM_MAP(9615, PM8018_S3_0, PM8018_S3, 2),
1106 MSM_RPM_MAP(9615, PM8018_S4_0, PM8018_S4, 2),
1107 MSM_RPM_MAP(9615, PM8018_S5_0, PM8018_S5, 2),
1108 MSM_RPM_MAP(9615, PM8018_L1_0, PM8018_L1, 2),
1109 MSM_RPM_MAP(9615, PM8018_L2_0, PM8018_L2, 2),
1110 MSM_RPM_MAP(9615, PM8018_L3_0, PM8018_L3, 2),
1111 MSM_RPM_MAP(9615, PM8018_L4_0, PM8018_L4, 2),
1112 MSM_RPM_MAP(9615, PM8018_L5_0, PM8018_L5, 2),
1113 MSM_RPM_MAP(9615, PM8018_L6_0, PM8018_L6, 2),
1114 MSM_RPM_MAP(9615, PM8018_L7_0, PM8018_L7, 2),
1115 MSM_RPM_MAP(9615, PM8018_L8_0, PM8018_L8, 2),
1116 MSM_RPM_MAP(9615, PM8018_L9_0, PM8018_L9, 2),
1117 MSM_RPM_MAP(9615, PM8018_L10_0, PM8018_L10, 2),
1118 MSM_RPM_MAP(9615, PM8018_L11_0, PM8018_L11, 2),
1119 MSM_RPM_MAP(9615, PM8018_L12_0, PM8018_L12, 2),
1120 MSM_RPM_MAP(9615, PM8018_L13_0, PM8018_L13, 2),
1121 MSM_RPM_MAP(9615, PM8018_L14_0, PM8018_L14, 2),
1122 MSM_RPM_MAP(9615, PM8018_LVS1, PM8018_LVS1, 1),
1123 MSM_RPM_MAP(9615, NCP_0, NCP, 2),
1124 MSM_RPM_MAP(9615, CXO_BUFFERS, CXO_BUFFERS, 1),
1125 MSM_RPM_MAP(9615, USB_OTG_SWITCH, USB_OTG_SWITCH, 1),
1126 MSM_RPM_MAP(9615, HDMI_SWITCH, HDMI_SWITCH, 1),
Mahesh Sivasubramanian36f361b2012-02-01 16:00:19 -07001127 MSM_RPM_MAP(9615, VOLTAGE_CORNER, VOLTAGE_CORNER, 1),
Praveen Chidambaram78499012011-11-01 17:15:17 -06001128 },
1129 .target_status = {
1130 MSM_RPM_STATUS_ID_MAP(9615, VERSION_MAJOR),
1131 MSM_RPM_STATUS_ID_MAP(9615, VERSION_MINOR),
1132 MSM_RPM_STATUS_ID_MAP(9615, VERSION_BUILD),
1133 MSM_RPM_STATUS_ID_MAP(9615, SUPPORTED_RESOURCES_0),
1134 MSM_RPM_STATUS_ID_MAP(9615, SUPPORTED_RESOURCES_1),
1135 MSM_RPM_STATUS_ID_MAP(9615, SUPPORTED_RESOURCES_2),
1136 MSM_RPM_STATUS_ID_MAP(9615, RESERVED_SUPPORTED_RESOURCES_0),
1137 MSM_RPM_STATUS_ID_MAP(9615, SEQUENCE),
1138 MSM_RPM_STATUS_ID_MAP(9615, RPM_CTL),
1139 MSM_RPM_STATUS_ID_MAP(9615, CXO_CLK),
1140 MSM_RPM_STATUS_ID_MAP(9615, SYSTEM_FABRIC_CLK),
1141 MSM_RPM_STATUS_ID_MAP(9615, DAYTONA_FABRIC_CLK),
1142 MSM_RPM_STATUS_ID_MAP(9615, SFPB_CLK),
1143 MSM_RPM_STATUS_ID_MAP(9615, CFPB_CLK),
1144 MSM_RPM_STATUS_ID_MAP(9615, EBI1_CLK),
1145 MSM_RPM_STATUS_ID_MAP(9615, SYS_FABRIC_CFG_HALT),
1146 MSM_RPM_STATUS_ID_MAP(9615, SYS_FABRIC_CFG_CLKMOD),
1147 MSM_RPM_STATUS_ID_MAP(9615, SYS_FABRIC_CFG_IOCTL),
1148 MSM_RPM_STATUS_ID_MAP(9615, SYSTEM_FABRIC_ARB),
1149 MSM_RPM_STATUS_ID_MAP(9615, PM8018_S1_0),
1150 MSM_RPM_STATUS_ID_MAP(9615, PM8018_S1_1),
1151 MSM_RPM_STATUS_ID_MAP(9615, PM8018_S2_0),
1152 MSM_RPM_STATUS_ID_MAP(9615, PM8018_S2_1),
1153 MSM_RPM_STATUS_ID_MAP(9615, PM8018_S3_0),
1154 MSM_RPM_STATUS_ID_MAP(9615, PM8018_S3_1),
1155 MSM_RPM_STATUS_ID_MAP(9615, PM8018_S4_0),
1156 MSM_RPM_STATUS_ID_MAP(9615, PM8018_S4_1),
1157 MSM_RPM_STATUS_ID_MAP(9615, PM8018_S5_0),
1158 MSM_RPM_STATUS_ID_MAP(9615, PM8018_S5_1),
1159 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L1_0),
1160 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L1_1),
1161 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L2_0),
1162 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L2_1),
1163 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L3_0),
1164 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L3_1),
1165 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L4_0),
1166 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L4_1),
1167 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L5_0),
1168 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L5_1),
1169 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L6_0),
1170 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L6_1),
1171 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L7_0),
1172 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L7_1),
1173 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L8_0),
1174 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L8_1),
1175 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L9_0),
1176 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L9_1),
1177 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L10_0),
1178 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L10_1),
1179 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L11_0),
1180 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L11_1),
1181 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L12_0),
1182 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L12_1),
1183 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L13_0),
1184 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L13_1),
1185 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L14_0),
1186 MSM_RPM_STATUS_ID_MAP(9615, PM8018_L14_1),
1187 MSM_RPM_STATUS_ID_MAP(9615, PM8018_LVS1),
1188 MSM_RPM_STATUS_ID_MAP(9615, NCP_0),
1189 MSM_RPM_STATUS_ID_MAP(9615, NCP_1),
1190 MSM_RPM_STATUS_ID_MAP(9615, CXO_BUFFERS),
1191 MSM_RPM_STATUS_ID_MAP(9615, USB_OTG_SWITCH),
1192 MSM_RPM_STATUS_ID_MAP(9615, HDMI_SWITCH),
Mahesh Sivasubramanian36f361b2012-02-01 16:00:19 -07001193 MSM_RPM_STATUS_ID_MAP(9615, VOLTAGE_CORNER),
Praveen Chidambaram78499012011-11-01 17:15:17 -06001194 },
1195 .target_ctrl_id = {
1196 MSM_RPM_CTRL_MAP(9615, VERSION_MAJOR),
1197 MSM_RPM_CTRL_MAP(9615, VERSION_MINOR),
1198 MSM_RPM_CTRL_MAP(9615, VERSION_BUILD),
1199 MSM_RPM_CTRL_MAP(9615, REQ_CTX_0),
1200 MSM_RPM_CTRL_MAP(9615, REQ_SEL_0),
1201 MSM_RPM_CTRL_MAP(9615, ACK_CTX_0),
1202 MSM_RPM_CTRL_MAP(9615, ACK_SEL_0),
1203 },
1204 .sel_invalidate = MSM_RPM_9615_SEL_INVALIDATE,
1205 .sel_notification = MSM_RPM_9615_SEL_NOTIFICATION,
1206 .sel_last = MSM_RPM_9615_SEL_LAST,
1207 .ver = {3, 0, 0},
Praveen Chidambaramab3b1c42011-08-25 08:44:05 -06001208};
1209
Praveen Chidambaram78499012011-11-01 17:15:17 -06001210struct platform_device msm9615_rpm_device = {
Praveen Chidambaramab3b1c42011-08-25 08:44:05 -06001211 .name = "msm_rpm",
1212 .id = -1,
1213};
1214
Praveen Chidambaram78499012011-11-01 17:15:17 -06001215static uint16_t msm_mpm_irqs_m2a[MSM_MPM_NR_MPM_IRQS] __initdata = {
Maheshkumar Sivasubramanian97450832011-10-31 12:27:25 -06001216 [4] = MSM_GPIO_TO_INT(30),
1217 [5] = MSM_GPIO_TO_INT(59),
1218 [6] = MSM_GPIO_TO_INT(81),
1219 [7] = MSM_GPIO_TO_INT(87),
1220 [8] = MSM_GPIO_TO_INT(86),
1221 [9] = MSM_GPIO_TO_INT(2),
1222 [10] = MSM_GPIO_TO_INT(6),
1223 [11] = MSM_GPIO_TO_INT(10),
1224 [12] = MSM_GPIO_TO_INT(14),
1225 [13] = MSM_GPIO_TO_INT(18),
1226 [14] = MSM_GPIO_TO_INT(7),
1227 [15] = MSM_GPIO_TO_INT(11),
1228 [16] = MSM_GPIO_TO_INT(15),
1229 [19] = MSM_GPIO_TO_INT(26),
1230 [20] = MSM_GPIO_TO_INT(28),
Ofir Cohendca06cb2012-03-08 16:37:45 +02001231 [22] = USB_HSIC_IRQ,
Maheshkumar Sivasubramanian97450832011-10-31 12:27:25 -06001232 [23] = MSM_GPIO_TO_INT(19),
1233 [24] = MSM_GPIO_TO_INT(23),
Maheshkumar Sivasubramanian97450832011-10-31 12:27:25 -06001234 [26] = MSM_GPIO_TO_INT(3),
1235 [27] = MSM_GPIO_TO_INT(68),
1236 [29] = MSM_GPIO_TO_INT(78),
1237 [31] = MSM_GPIO_TO_INT(0),
1238 [32] = MSM_GPIO_TO_INT(4),
1239 [33] = MSM_GPIO_TO_INT(22),
1240 [34] = MSM_GPIO_TO_INT(17),
1241 [37] = MSM_GPIO_TO_INT(20),
1242 [39] = MSM_GPIO_TO_INT(84),
Mahesh Sivasubramanian4ce82182012-01-04 14:34:42 -07001243 [40] = USB1_HS_IRQ,
Maheshkumar Sivasubramanian97450832011-10-31 12:27:25 -06001244 [42] = MSM_GPIO_TO_INT(24),
1245 [43] = MSM_GPIO_TO_INT(79),
1246 [44] = MSM_GPIO_TO_INT(80),
1247 [45] = MSM_GPIO_TO_INT(82),
1248 [46] = MSM_GPIO_TO_INT(85),
1249 [47] = MSM_GPIO_TO_INT(45),
1250 [48] = MSM_GPIO_TO_INT(50),
1251 [49] = MSM_GPIO_TO_INT(51),
1252 [50] = MSM_GPIO_TO_INT(69),
1253 [51] = MSM_GPIO_TO_INT(77),
1254 [52] = MSM_GPIO_TO_INT(1),
1255 [53] = MSM_GPIO_TO_INT(5),
1256 [54] = MSM_GPIO_TO_INT(40),
1257 [55] = MSM_GPIO_TO_INT(27),
Praveen Chidambaramab3b1c42011-08-25 08:44:05 -06001258};
1259
Praveen Chidambaram78499012011-11-01 17:15:17 -06001260static uint16_t msm_mpm_bypassed_apps_irqs[] __initdata = {
Praveen Chidambaramab3b1c42011-08-25 08:44:05 -06001261 TLMM_MSM_SUMMARY_IRQ,
1262 RPM_APCC_CPU0_GP_HIGH_IRQ,
1263 RPM_APCC_CPU0_GP_MEDIUM_IRQ,
1264 RPM_APCC_CPU0_GP_LOW_IRQ,
1265 RPM_APCC_CPU0_WAKE_UP_IRQ,
Mahesh Sivasubramaniandbf2bb62011-12-12 16:03:40 -07001266 MSS_TO_APPS_IRQ_0,
1267 MSS_TO_APPS_IRQ_1,
Praveen Chidambaramab3b1c42011-08-25 08:44:05 -06001268 LPASS_SCSS_GP_LOW_IRQ,
1269 LPASS_SCSS_GP_MEDIUM_IRQ,
1270 LPASS_SCSS_GP_HIGH_IRQ,
1271 SPS_MTI_31,
Mahesh Sivasubramaniandbf2bb62011-12-12 16:03:40 -07001272 A2_BAM_IRQ,
Bar Weinerf51a8022013-05-09 13:29:36 +03001273 USB1_HS_BAM_IRQ,
Praveen Chidambaramab3b1c42011-08-25 08:44:05 -06001274};
1275
Praveen Chidambaram78499012011-11-01 17:15:17 -06001276struct msm_mpm_device_data msm9615_mpm_dev_data __initdata = {
Praveen Chidambaramab3b1c42011-08-25 08:44:05 -06001277 .irqs_m2a = msm_mpm_irqs_m2a,
1278 .irqs_m2a_size = ARRAY_SIZE(msm_mpm_irqs_m2a),
1279 .bypassed_apps_irqs = msm_mpm_bypassed_apps_irqs,
1280 .bypassed_apps_irqs_size = ARRAY_SIZE(msm_mpm_bypassed_apps_irqs),
1281 .mpm_request_reg_base = MSM_RPM_BASE + 0x9d8,
1282 .mpm_status_reg_base = MSM_RPM_BASE + 0xdf8,
1283 .mpm_apps_ipc_reg = MSM_APCS_GCC_BASE + 0x008,
1284 .mpm_apps_ipc_val = BIT(1),
1285 .mpm_ipc_irq = RPM_APCC_CPU0_GP_MEDIUM_IRQ,
Maheshkumar Sivasubramanianf07bd0b2011-09-06 17:33:17 -06001286};
Praveen Chidambaramab3b1c42011-08-25 08:44:05 -06001287
Maheshkumar Sivasubramanianf07bd0b2011-09-06 17:33:17 -06001288static uint8_t spm_wfi_cmd_sequence[] __initdata = {
Maheshkumar Sivasubramanian343c9912011-10-17 11:00:33 -06001289 0x00, 0x03, 0x00, 0x0f,
Maheshkumar Sivasubramanianf07bd0b2011-09-06 17:33:17 -06001290};
1291
1292static uint8_t spm_power_collapse_without_rpm[] __initdata = {
Maheshkumar Sivasubramanian343c9912011-10-17 11:00:33 -06001293 0x34, 0x24, 0x14, 0x04,
1294 0x54, 0x03, 0x54, 0x04,
1295 0x14, 0x24, 0x3e, 0x0f,
Maheshkumar Sivasubramanianf07bd0b2011-09-06 17:33:17 -06001296};
1297
1298static uint8_t spm_power_collapse_with_rpm[] __initdata = {
Maheshkumar Sivasubramanian343c9912011-10-17 11:00:33 -06001299 0x34, 0x24, 0x14, 0x04,
1300 0x54, 0x07, 0x54, 0x04,
1301 0x14, 0x24, 0x3e, 0x0f,
Maheshkumar Sivasubramanianf07bd0b2011-09-06 17:33:17 -06001302};
1303
1304static struct msm_spm_seq_entry msm_spm_seq_list[] __initdata = {
1305 [0] = {
1306 .mode = MSM_SPM_MODE_CLOCK_GATING,
1307 .notify_rpm = false,
1308 .cmd = spm_wfi_cmd_sequence,
1309 },
1310 [1] = {
1311 .mode = MSM_SPM_MODE_POWER_COLLAPSE,
1312 .notify_rpm = false,
1313 .cmd = spm_power_collapse_without_rpm,
1314 },
1315 [2] = {
1316 .mode = MSM_SPM_MODE_POWER_COLLAPSE,
1317 .notify_rpm = true,
1318 .cmd = spm_power_collapse_with_rpm,
1319 },
1320};
1321
1322static struct msm_spm_platform_data msm_spm_data[] __initdata = {
1323 [0] = {
1324 .reg_base_addr = MSM_SAW0_BASE,
1325 .reg_init_values[MSM_SPM_REG_SAW2_SPM_CTL] = 0x01,
Maheshkumar Sivasubramanian343c9912011-10-17 11:00:33 -06001326 .reg_init_values[MSM_SPM_REG_SAW2_CFG] = 0x1001,
Maheshkumar Sivasubramanianf07bd0b2011-09-06 17:33:17 -06001327 .num_modes = ARRAY_SIZE(msm_spm_seq_list),
1328 .modes = msm_spm_seq_list,
1329 },
Praveen Chidambaramab3b1c42011-08-25 08:44:05 -06001330};
1331
1332static struct msm_rpmrs_level msm_rpmrs_levels[] __initdata = {
1333 {
1334 MSM_PM_SLEEP_MODE_WAIT_FOR_INTERRUPT,
1335 MSM_RPMRS_LIMITS(ON, ACTIVE, MAX, ACTIVE),
1336 true,
Maheshkumar Sivasubramanian634e4f62011-10-17 15:49:11 -06001337 100, 8000, 100000, 1,
Praveen Chidambaramab3b1c42011-08-25 08:44:05 -06001338 },
Praveen Chidambaramab3b1c42011-08-25 08:44:05 -06001339 {
1340 MSM_PM_SLEEP_MODE_POWER_COLLAPSE_STANDALONE,
1341 MSM_RPMRS_LIMITS(ON, ACTIVE, MAX, ACTIVE),
1342 true,
Maheshkumar Sivasubramanian634e4f62011-10-17 15:49:11 -06001343 2000, 5000, 60100000, 3000,
Praveen Chidambaramab3b1c42011-08-25 08:44:05 -06001344 },
1345 {
1346 MSM_PM_SLEEP_MODE_POWER_COLLAPSE,
1347 MSM_RPMRS_LIMITS(ON, ACTIVE, MAX, ACTIVE),
1348 false,
Maheshkumar Sivasubramanian634e4f62011-10-17 15:49:11 -06001349 6300, 5000, 60350000, 3500,
1350 },
1351 {
1352 MSM_PM_SLEEP_MODE_POWER_COLLAPSE,
1353 MSM_RPMRS_LIMITS(OFF, HSFS_OPEN, MAX, ACTIVE),
1354 false,
1355 13300, 2000, 71850000, 6800,
1356 },
1357 {
1358 MSM_PM_SLEEP_MODE_POWER_COLLAPSE,
1359 MSM_RPMRS_LIMITS(OFF, HSFS_OPEN, RET_HIGH, RET_LOW),
1360 false,
1361 28300, 0, 76350000, 9800,
Praveen Chidambaramab3b1c42011-08-25 08:44:05 -06001362 },
1363};
1364
Praveen Chidambaram78499012011-11-01 17:15:17 -06001365static struct msm_rpmrs_platform_data msm_rpmrs_data __initdata = {
1366 .levels = &msm_rpmrs_levels[0],
1367 .num_levels = ARRAY_SIZE(msm_rpmrs_levels),
1368 .vdd_mem_levels = {
1369 [MSM_RPMRS_VDD_MEM_RET_LOW] = 750000,
1370 [MSM_RPMRS_VDD_MEM_RET_HIGH] = 750000,
1371 [MSM_RPMRS_VDD_MEM_ACTIVE] = 1050000,
1372 [MSM_RPMRS_VDD_MEM_MAX] = 1150000,
1373 },
1374 .vdd_dig_levels = {
Mahesh Sivasubramanian66768b92012-05-21 11:52:04 -06001375 [MSM_RPMRS_VDD_DIG_RET_LOW] = 0,
1376 [MSM_RPMRS_VDD_DIG_RET_HIGH] = 0,
1377 [MSM_RPMRS_VDD_DIG_ACTIVE] = 1,
1378 [MSM_RPMRS_VDD_DIG_MAX] = 3,
Praveen Chidambaram78499012011-11-01 17:15:17 -06001379 },
1380 .vdd_mask = 0x7FFFFF,
1381 .rpmrs_target_id = {
1382 [MSM_RPMRS_ID_PXO_CLK] = MSM_RPM_ID_CXO_CLK,
1383 [MSM_RPMRS_ID_L2_CACHE_CTL] = MSM_RPM_ID_LAST,
Mahesh Sivasubramanian66768b92012-05-21 11:52:04 -06001384 [MSM_RPMRS_ID_VDD_DIG_0] = MSM_RPM_ID_VOLTAGE_CORNER,
1385 [MSM_RPMRS_ID_VDD_DIG_1] = MSM_RPM_ID_LAST,
Praveen Chidambaram78499012011-11-01 17:15:17 -06001386 [MSM_RPMRS_ID_VDD_MEM_0] = MSM_RPM_ID_PM8018_L9_0,
1387 [MSM_RPMRS_ID_VDD_MEM_1] = MSM_RPM_ID_PM8018_L9_1,
1388 [MSM_RPMRS_ID_RPM_CTL] = MSM_RPM_ID_RPM_CTL,
1389 },
1390};
1391
1392static struct msm_rpmstats_platform_data msm_rpm_stat_pdata = {
Priyanka Mathur71859f42012-10-17 10:54:35 -07001393 .version = 1,
Praveen Chidambaram78499012011-11-01 17:15:17 -06001394};
1395
Priyanka Mathur71859f42012-10-17 10:54:35 -07001396
1397static struct resource msm_rpm_stat_resource[] = {
1398 {
1399 .start = 0x0010D204,
1400 .end = 0x0010D204 + SZ_8K,
1401 .flags = IORESOURCE_MEM,
1402 .name = "phys_addr_base"
1403 },
1404};
1405
1406
1407
Praveen Chidambaram78499012011-11-01 17:15:17 -06001408struct platform_device msm9615_rpm_stat_device = {
1409 .name = "msm_rpm_stat",
1410 .id = -1,
Priyanka Mathur71859f42012-10-17 10:54:35 -07001411 .resource = msm_rpm_stat_resource,
1412 .num_resources = ARRAY_SIZE(msm_rpm_stat_resource),
1413 .dev = {
Praveen Chidambaram78499012011-11-01 17:15:17 -06001414 .platform_data = &msm_rpm_stat_pdata,
Priyanka Mathur71859f42012-10-17 10:54:35 -07001415 }
Praveen Chidambaram78499012011-11-01 17:15:17 -06001416};
1417
Anji Jonnala93129922012-10-09 20:57:53 +05301418static struct resource resources_rpm_master_stats[] = {
1419 {
1420 .start = MSM9615_RPM_MASTER_STATS_BASE,
1421 .end = MSM9615_RPM_MASTER_STATS_BASE + SZ_256,
1422 .flags = IORESOURCE_MEM,
1423 },
1424};
1425
1426static char *master_names[] = {
1427 "KPSS",
1428 "MPSS",
1429 "LPASS",
1430};
1431
1432static struct msm_rpm_master_stats_platform_data msm_rpm_master_stat_pdata = {
1433 .masters = master_names,
Murali Nalajalaa5086a22013-08-01 15:27:07 +05301434 .num_masters = ARRAY_SIZE(master_names),
1435 .master_offset = 32,
Anji Jonnala93129922012-10-09 20:57:53 +05301436};
1437
1438struct platform_device msm9615_rpm_master_stat_device = {
Murali Nalajalaa5086a22013-08-01 15:27:07 +05301439 .name = "msm_rpm_master_stats",
Anji Jonnala93129922012-10-09 20:57:53 +05301440 .id = -1,
1441 .num_resources = ARRAY_SIZE(resources_rpm_master_stats),
1442 .resource = resources_rpm_master_stats,
1443 .dev = {
1444 .platform_data = &msm_rpm_master_stat_pdata,
1445 },
1446};
1447
Praveen Chidambaram78499012011-11-01 17:15:17 -06001448static struct msm_rpm_log_platform_data msm_rpm_log_pdata = {
1449 .phys_addr_base = 0x0010AC00,
1450 .reg_offsets = {
1451 [MSM_RPM_LOG_PAGE_INDICES] = 0x00000080,
1452 [MSM_RPM_LOG_PAGE_BUFFER] = 0x000000A0,
1453 },
1454 .phys_size = SZ_8K,
1455 .log_len = 4096, /* log's buffer length in bytes */
1456 .log_len_mask = (4096 >> 2) - 1, /* length mask in units of u32 */
1457};
1458
1459struct platform_device msm9615_rpm_log_device = {
1460 .name = "msm_rpm_log",
1461 .id = -1,
1462 .dev = {
1463 .platform_data = &msm_rpm_log_pdata,
1464 },
1465};
1466
Girish Mahadevan55944992012-10-26 11:03:07 -06001467static struct msm_pm_init_data_type msm_pm_data = {
1468 .use_sync_timer = false,
1469 .pc_mode = MSM_PM_PC_NOTZ_L2_EXT,
1470};
1471
1472struct platform_device msm9615_pm_8x60 = {
1473 .name = "pm-8x60",
1474 .id = -1,
1475 .dev = {
1476 .platform_data = &msm_pm_data,
1477 },
1478};
1479
Ofir Cohen94213a72012-05-03 14:26:32 +03001480uint32_t __init msm9615_rpm_get_swfi_latency(void)
1481{
1482 int i;
1483
1484 for (i = 0; i < ARRAY_SIZE(msm_rpmrs_levels); i++) {
1485 if (msm_rpmrs_levels[i].sleep_mode ==
1486 MSM_PM_SLEEP_MODE_WAIT_FOR_INTERRUPT)
1487 return msm_rpmrs_levels[i].latency_us;
1488 }
1489 return 0;
1490}
1491
Ido Shayevitz479f2eb2012-06-27 10:39:57 +03001492struct android_usb_platform_data msm_android_usb_pdata = {
1493 .usb_core_id = 0,
1494};
Ofir Cohen94213a72012-05-03 14:26:32 +03001495
1496struct platform_device msm_android_usb_device = {
1497 .name = "android_usb",
1498 .id = -1,
1499 .dev = {
1500 .platform_data = &msm_android_usb_pdata,
1501 },
1502};
1503
Ido Shayevitz479f2eb2012-06-27 10:39:57 +03001504struct android_usb_platform_data msm_android_usb_hsic_pdata = {
1505 .usb_core_id = 1,
1506};
1507
1508struct platform_device msm_android_usb_hsic_device = {
1509 .name = "android_usb_hsic",
1510 .id = -1,
1511 .dev = {
1512 .platform_data = &msm_android_usb_hsic_pdata,
1513 },
1514};
1515
Rohit Vaswanid2001522012-12-05 19:23:44 -08001516static struct resource msm_gpio_resources[] = {
1517 {
1518 .start = TLMM_MSM_SUMMARY_IRQ,
1519 .end = TLMM_MSM_SUMMARY_IRQ,
1520 .flags = IORESOURCE_IRQ,
1521 },
1522};
1523
Rohit Vaswani341c2032012-11-08 18:49:29 -08001524static struct msm_gpio_pdata msm9615_gpio_pdata = {
1525 .ngpio = 88,
Rohit Vaswanied0a4ef2012-12-11 15:14:42 -08001526 .direct_connect_irqs = 8,
Rohit Vaswani341c2032012-11-08 18:49:29 -08001527};
1528
Rohit Vaswanib1cc4932012-07-23 21:30:11 -07001529struct platform_device msm_gpio_device = {
Rohit Vaswani341c2032012-11-08 18:49:29 -08001530 .name = "msmgpio",
1531 .id = -1,
1532 .num_resources = ARRAY_SIZE(msm_gpio_resources),
1533 .resource = msm_gpio_resources,
1534 .dev.platform_data = &msm9615_gpio_pdata,
Rohit Vaswanib1cc4932012-07-23 21:30:11 -07001535};
Ido Shayevitz479f2eb2012-06-27 10:39:57 +03001536
Rohit Vaswaniced9b3b2011-08-23 17:21:49 -07001537void __init msm9615_device_init(void)
1538{
Maheshkumar Sivasubramanianf07bd0b2011-09-06 17:33:17 -06001539 msm_spm_init(msm_spm_data, ARRAY_SIZE(msm_spm_data));
Praveen Chidambaram78499012011-11-01 17:15:17 -06001540 BUG_ON(msm_rpm_init(&msm9615_rpm_data));
1541 BUG_ON(msm_rpmrs_levels_init(&msm_rpmrs_data));
Ofir Cohen94213a72012-05-03 14:26:32 +03001542 msm_android_usb_pdata.swfi_latency =
1543 msm_rpmrs_levels[0].latency_us;
Ido Shayevitz479f2eb2012-06-27 10:39:57 +03001544 msm_android_usb_hsic_pdata.swfi_latency =
1545 msm_rpmrs_levels[0].latency_us;
Rohit Vaswaniced9b3b2011-08-23 17:21:49 -07001546}
1547
Jeff Hugo56b933a2011-09-28 14:42:05 -06001548#define MSM_SHARED_RAM_PHYS 0x40000000
Rohit Vaswaniced9b3b2011-08-23 17:21:49 -07001549void __init msm9615_map_io(void)
1550{
Jeff Hugo56b933a2011-09-28 14:42:05 -06001551 msm_shared_ram_phys = MSM_SHARED_RAM_PHYS;
Rohit Vaswaniced9b3b2011-08-23 17:21:49 -07001552 msm_map_msm9615_io();
Rohit Vaswanif0ce9ae2011-08-23 22:18:38 -07001553 l2x0_cache_init();
Abhimanyu Kapur91a0a502013-01-11 19:24:59 -08001554 if (socinfo_init() < 0)
Jeff Ohlstein3a77f9f2011-09-06 14:50:20 -07001555 pr_err("socinfo_init() failed!\n");
Rohit Vaswaniced9b3b2011-08-23 17:21:49 -07001556}
1557
1558void __init msm9615_init_irq(void)
1559{
Praveen Chidambaram78499012011-11-01 17:15:17 -06001560 struct msm_mpm_device_data *data = NULL;
1561
1562#ifdef CONFIG_MSM_MPM
1563 data = &msm9615_mpm_dev_data;
1564#endif
1565
1566 msm_mpm_irq_extn_init(data);
Rohit Vaswaniced9b3b2011-08-23 17:21:49 -07001567 gic_init(0, GIC_PPI_START, MSM_QGIC_DIST_BASE,
1568 (void *)MSM_QGIC_CPU_BASE);
Rohit Vaswaniced9b3b2011-08-23 17:21:49 -07001569}
Gagan Mac7a827642011-09-22 19:42:21 -06001570
1571struct platform_device msm_bus_9615_sys_fabric = {
1572 .name = "msm_bus_fabric",
1573 .id = MSM_BUS_FAB_SYSTEM,
1574};
1575
1576struct platform_device msm_bus_def_fab = {
1577 .name = "msm_bus_fabric",
1578 .id = MSM_BUS_FAB_DEFAULT,
1579};
Zhang Chang Kenc2f2bcc2012-03-30 18:32:02 -04001580
1581#ifdef CONFIG_FB_MSM_EBI2
1582static void __init msm_register_device(struct platform_device *pdev, void *data)
1583{
1584 int ret;
1585
1586 pdev->dev.platform_data = data;
1587
1588 ret = platform_device_register(pdev);
1589 if (ret)
1590 dev_err(&pdev->dev,
1591 "%s: platform_device_register() failed = %d\n",
1592 __func__, ret);
1593}
1594
1595void __init msm_fb_register_device(char *name, void *data)
1596{
1597 if (!strncmp(name, "ebi2", 4))
1598 msm_register_device(&msm_ebi2_lcdc_device, data);
1599 else
1600 pr_err("%s: unknown device! %s\n", __func__, name);
1601}
1602#endif