blob: e545f12bcd05d09ce0999b1dcd85233d157149d5 [file] [log] [blame]
Michael Bohan0425f6f2012-01-17 14:36:39 -08001/* Copyright (c) 2011-2012, Code Aurora Forum. All rights reserved.
Sathish Ambleyc58afc22011-10-09 21:55:39 -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#include <linux/kernel.h>
14#include <linux/platform_device.h>
15#include <linux/io.h>
16#include <linux/irq.h>
17#include <linux/irqdomain.h>
18#include <linux/of.h>
19#include <linux/of_address.h>
20#include <linux/of_platform.h>
Michael Bohanc7224532012-01-06 16:02:52 -080021#include <linux/of_irq.h>
Olav Hauganb800c8c2012-01-30 08:50:45 -080022#ifdef CONFIG_ION_MSM
23#include <linux/ion.h>
24#endif
25#include <linux/memory.h>
26#ifdef CONFIG_ANDROID_PMEM
27#include <linux/android_pmem.h>
28#endif
Michael Bohan037a0f52012-02-29 19:13:09 -080029#include <linux/regulator/stub-regulator.h>
Sathish Ambleyc58afc22011-10-09 21:55:39 -070030#include <asm/mach/map.h>
31#include <asm/hardware/gic.h>
32#include <mach/board.h>
33#include <mach/gpio.h>
34#include <mach/gpiomux.h>
35#include <mach/msm_iomap.h>
Olav Hauganb800c8c2012-01-30 08:50:45 -080036#ifdef CONFIG_ION_MSM
37#include <mach/ion.h>
38#endif
39#include <mach/msm_memtypes.h>
Jeff Hugo70946092012-02-10 11:30:43 -070040#include <mach/msm_smd.h>
Michael Bohan115cf652012-01-05 14:32:59 -080041#include <mach/qpnp-int.h>
Vikram Mulukutlaaeadb5f2012-05-04 14:03:07 -070042#include <mach/socinfo.h>
Sathish Ambleyc58afc22011-10-09 21:55:39 -070043#include "clock.h"
Michael Bohan037a0f52012-02-29 19:13:09 -080044#include "devices.h"
Sathish Ambleyc58afc22011-10-09 21:55:39 -070045
Olav Hauganb800c8c2012-01-30 08:50:45 -080046#define MSM_KERNEL_EBI1_MEM_SIZE 0x280000
47#ifdef CONFIG_FB_MSM_HDMI_AS_PRIMARY
48#define MSM_ION_SF_SIZE 0x4000000 /* 64 Mbytes */
49#else
50#define MSM_ION_SF_SIZE 0x2800000 /* 40 Mbytes */
51#endif
52#define MSM_ION_MM_FW_SIZE 0x200000 /* (2MB) */
53#define MSM_ION_MM_SIZE 0x7800000 /* (120MB) */
54#define MSM_ION_QSECOM_SIZE 0x100000 /* (1MB) */
55#define MSM_ION_MFC_SIZE SZ_8K
56#define MSM_ION_AUDIO_SIZE 0x2B4000
57#define MSM_ION_HEAP_NUM 8
58
59#ifdef CONFIG_KERNEL_PMEM_EBI_REGION
60static unsigned kernel_ebi1_mem_size = MSM_KERNEL_EBI1_MEM_SIZE;
61static int __init kernel_ebi1_mem_size_setup(char *p)
62{
63 kernel_ebi1_mem_size = memparse(p, NULL);
64 return 0;
65}
66early_param("kernel_ebi1_mem_size", kernel_ebi1_mem_size_setup);
67#endif
68
69static struct memtype_reserve msm_copper_reserve_table[] __initdata = {
70 [MEMTYPE_SMI] = {
71 },
72 [MEMTYPE_EBI0] = {
73 .flags = MEMTYPE_FLAGS_1M_ALIGN,
74 },
75 [MEMTYPE_EBI1] = {
76 .flags = MEMTYPE_FLAGS_1M_ALIGN,
77 },
78};
79
80static int msm_copper_paddr_to_memtype(unsigned int paddr)
81{
82 return MEMTYPE_EBI1;
83}
84
85#ifdef CONFIG_ION_MSM
86static struct ion_cp_heap_pdata cp_mm_ion_pdata = {
87 .permission_type = IPT_TYPE_MM_CARVEOUT,
88 .align = PAGE_SIZE,
89};
90
91static struct ion_cp_heap_pdata cp_mfc_ion_pdata = {
92 .permission_type = IPT_TYPE_MFC_SHAREDMEM,
93 .align = PAGE_SIZE,
94};
95
96static struct ion_co_heap_pdata co_ion_pdata = {
97 .adjacent_mem_id = INVALID_HEAP_ID,
98 .align = PAGE_SIZE,
99};
100
101static struct ion_co_heap_pdata fw_co_ion_pdata = {
102 .adjacent_mem_id = ION_CP_MM_HEAP_ID,
103 .align = SZ_128K,
104};
105
Olav Haugan9cdfc2f2012-02-15 09:52:57 -0800106/**
107 * These heaps are listed in the order they will be allocated. Due to
108 * video hardware restrictions and content protection the FW heap has to
109 * be allocated adjacent (below) the MM heap and the MFC heap has to be
110 * allocated after the MM heap to ensure MFC heap is not more than 256MB
111 * away from the base address of the FW heap.
112 * However, the order of FW heap and MM heap doesn't matter since these
113 * two heaps are taken care of by separate code to ensure they are adjacent
114 * to each other.
115 * Don't swap the order unless you know what you are doing!
116 */
Olav Hauganb800c8c2012-01-30 08:50:45 -0800117static struct ion_platform_data ion_pdata = {
118 .nr = MSM_ION_HEAP_NUM,
119 .heaps = {
120 {
121 .id = ION_SYSTEM_HEAP_ID,
122 .type = ION_HEAP_TYPE_SYSTEM,
123 .name = ION_VMALLOC_HEAP_NAME,
124 },
125 {
Olav Hauganb800c8c2012-01-30 08:50:45 -0800126 .id = ION_CP_MM_HEAP_ID,
127 .type = ION_HEAP_TYPE_CP,
128 .name = ION_MM_HEAP_NAME,
129 .size = MSM_ION_MM_SIZE,
130 .memory_type = ION_EBI_TYPE,
131 .extra_data = (void *) &cp_mm_ion_pdata,
132 },
133 {
134 .id = ION_MM_FIRMWARE_HEAP_ID,
135 .type = ION_HEAP_TYPE_CARVEOUT,
136 .name = ION_MM_FIRMWARE_HEAP_NAME,
137 .size = MSM_ION_MM_FW_SIZE,
138 .memory_type = ION_EBI_TYPE,
139 .extra_data = (void *) &fw_co_ion_pdata,
140 },
141 {
142 .id = ION_CP_MFC_HEAP_ID,
143 .type = ION_HEAP_TYPE_CP,
144 .name = ION_MFC_HEAP_NAME,
145 .size = MSM_ION_MFC_SIZE,
146 .memory_type = ION_EBI_TYPE,
147 .extra_data = (void *) &cp_mfc_ion_pdata,
148 },
149 {
Olav Haugan9cdfc2f2012-02-15 09:52:57 -0800150 .id = ION_SF_HEAP_ID,
151 .type = ION_HEAP_TYPE_CARVEOUT,
152 .name = ION_SF_HEAP_NAME,
153 .size = MSM_ION_SF_SIZE,
154 .memory_type = ION_EBI_TYPE,
155 .extra_data = (void *) &co_ion_pdata,
156 },
157 {
Olav Hauganb800c8c2012-01-30 08:50:45 -0800158 .id = ION_IOMMU_HEAP_ID,
159 .type = ION_HEAP_TYPE_IOMMU,
160 .name = ION_IOMMU_HEAP_NAME,
161 },
162 {
163 .id = ION_QSECOM_HEAP_ID,
164 .type = ION_HEAP_TYPE_CARVEOUT,
165 .name = ION_QSECOM_HEAP_NAME,
166 .size = MSM_ION_QSECOM_SIZE,
167 .memory_type = ION_EBI_TYPE,
168 .extra_data = (void *) &co_ion_pdata,
169 },
170 {
171 .id = ION_AUDIO_HEAP_ID,
172 .type = ION_HEAP_TYPE_CARVEOUT,
173 .name = ION_AUDIO_HEAP_NAME,
174 .size = MSM_ION_AUDIO_SIZE,
175 .memory_type = ION_EBI_TYPE,
176 .extra_data = (void *) &co_ion_pdata,
177 },
178 }
179};
180
181static struct platform_device ion_dev = {
182 .name = "ion-msm",
183 .id = 1,
184 .dev = { .platform_data = &ion_pdata },
185};
186
Stephen Boyd668d7652012-04-25 11:31:01 -0700187static void __init reserve_ion_memory(void)
Olav Hauganb800c8c2012-01-30 08:50:45 -0800188{
189 msm_copper_reserve_table[MEMTYPE_EBI1].size += MSM_ION_MM_SIZE;
190 msm_copper_reserve_table[MEMTYPE_EBI1].size += MSM_ION_MM_FW_SIZE;
191 msm_copper_reserve_table[MEMTYPE_EBI1].size += MSM_ION_SF_SIZE;
192 msm_copper_reserve_table[MEMTYPE_EBI1].size += MSM_ION_MFC_SIZE;
193 msm_copper_reserve_table[MEMTYPE_EBI1].size += MSM_ION_QSECOM_SIZE;
194 msm_copper_reserve_table[MEMTYPE_EBI1].size += MSM_ION_AUDIO_SIZE;
195#ifdef CONFIG_KERNEL_PMEM_EBI_REGION
196 msm_copper_reserve_table[MEMTYPE_EBI1].size += kernel_ebi1_mem_size;
197#endif
198}
199#endif
200
Jeff Hugo70946092012-02-10 11:30:43 -0700201static struct resource smd_resource[] = {
202 {
203 .name = "modem_smd_in",
204 .start = 32 + 17, /* mss_sw_to_kpss_ipc_irq0 */
205 .flags = IORESOURCE_IRQ,
206 },
207 {
208 .name = "modem_smsm_in",
209 .start = 32 + 18, /* mss_sw_to_kpss_ipc_irq1 */
210 .flags = IORESOURCE_IRQ,
211 },
212 {
213 .name = "adsp_smd_in",
214 .start = 32 + 156, /* lpass_to_kpss_ipc_irq0 */
215 .flags = IORESOURCE_IRQ,
216 },
217 {
218 .name = "adsp_smsm_in",
219 .start = 32 + 157, /* lpass_to_kpss_ipc_irq1 */
220 .flags = IORESOURCE_IRQ,
221 },
222 {
223 .name = "wcnss_smd_in",
224 .start = 32 + 142, /* WcnssAppsSmdMedIrq */
225 .flags = IORESOURCE_IRQ,
226 },
227 {
228 .name = "wcnss_smsm_in",
Jeff Hugo89046272012-03-29 14:45:37 -0600229 .start = 32 + 144, /* RivaAppsWlanSmsmIrq */
Jeff Hugo70946092012-02-10 11:30:43 -0700230 .flags = IORESOURCE_IRQ,
231 },
Jeff Hugo9a5dc6e2012-03-29 14:39:42 -0600232 {
233 .name = "rpm_smd_in",
234 .start = 32 + 168, /* rpm_to_kpss_ipc_irq4 */
235 .flags = IORESOURCE_IRQ,
236 },
Jeff Hugo70946092012-02-10 11:30:43 -0700237};
238
239static struct smd_subsystem_config smd_config_list[] = {
240 {
241 .irq_config_id = SMD_MODEM,
242 .subsys_name = "modem",
243 .edge = SMD_APPS_MODEM,
244
245 .smd_int.irq_name = "modem_smd_in",
246 .smd_int.flags = IRQF_TRIGGER_RISING,
247 .smd_int.irq_id = -1,
248 .smd_int.device_name = "smd_dev",
249 .smd_int.dev_id = 0,
250 .smd_int.out_bit_pos = 1 << 12,
251 .smd_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
252 .smd_int.out_offset = 0x8,
253
254 .smsm_int.irq_name = "modem_smsm_in",
255 .smsm_int.flags = IRQF_TRIGGER_RISING,
256 .smsm_int.irq_id = -1,
257 .smsm_int.device_name = "smsm_dev",
258 .smsm_int.dev_id = 0,
259 .smsm_int.out_bit_pos = 1 << 13,
260 .smsm_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
261 .smsm_int.out_offset = 0x8,
262 },
263 {
264 .irq_config_id = SMD_Q6,
265 .subsys_name = "q6",
266 .edge = SMD_APPS_QDSP,
267
268 .smd_int.irq_name = "adsp_smd_in",
269 .smd_int.flags = IRQF_TRIGGER_RISING,
270 .smd_int.irq_id = -1,
271 .smd_int.device_name = "smd_dev",
272 .smd_int.dev_id = 0,
273 .smd_int.out_bit_pos = 1 << 8,
274 .smd_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
275 .smd_int.out_offset = 0x8,
276
277 .smsm_int.irq_name = "adsp_smsm_in",
278 .smsm_int.flags = IRQF_TRIGGER_RISING,
279 .smsm_int.irq_id = -1,
280 .smsm_int.device_name = "smsm_dev",
281 .smsm_int.dev_id = 0,
282 .smsm_int.out_bit_pos = 1 << 9,
283 .smsm_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
284 .smsm_int.out_offset = 0x8,
285 },
286 {
287 .irq_config_id = SMD_WCNSS,
288 .subsys_name = "wcnss",
289 .edge = SMD_APPS_WCNSS,
290
291 .smd_int.irq_name = "wcnss_smd_in",
292 .smd_int.flags = IRQF_TRIGGER_RISING,
293 .smd_int.irq_id = -1,
294 .smd_int.device_name = "smd_dev",
295 .smd_int.dev_id = 0,
296 .smd_int.out_bit_pos = 1 << 17,
297 .smd_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
298 .smd_int.out_offset = 0x8,
299
300 .smsm_int.irq_name = "wcnss_smsm_in",
301 .smsm_int.flags = IRQF_TRIGGER_RISING,
302 .smsm_int.irq_id = -1,
303 .smsm_int.device_name = "smsm_dev",
304 .smsm_int.dev_id = 0,
305 .smsm_int.out_bit_pos = 1 << 19,
306 .smsm_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
307 .smsm_int.out_offset = 0x8,
308 },
Jeff Hugo9a5dc6e2012-03-29 14:39:42 -0600309 {
310 .irq_config_id = SMD_RPM,
311 .subsys_name = NULL, /* do not use PIL to load RPM */
312 .edge = SMD_APPS_RPM,
313
314 .smd_int.irq_name = "rpm_smd_in",
315 .smd_int.flags = IRQF_TRIGGER_RISING,
316 .smd_int.irq_id = -1,
317 .smd_int.device_name = "smd_dev",
318 .smd_int.dev_id = 0,
319 .smd_int.out_bit_pos = 1 << 0,
320 .smd_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
321 .smd_int.out_offset = 0x8,
322
323 .smsm_int.irq_name = NULL, /* RPM does not support SMSM */
324 .smsm_int.flags = 0,
325 .smsm_int.irq_id = 0,
326 .smsm_int.device_name = NULL,
327 .smsm_int.dev_id = 0,
328 .smsm_int.out_bit_pos = 0,
329 .smsm_int.out_base = NULL,
330 .smsm_int.out_offset = 0,
331 },
332};
333
334static struct smd_smem_regions aux_smem_areas[] = {
335 {
336 .phys_addr = (void *)(0xfc428000),
337 .size = 0x4000,
338 },
Jeff Hugo70946092012-02-10 11:30:43 -0700339};
340
Jeff Hugo3e366292012-03-29 15:19:14 -0600341static struct smd_subsystem_restart_config smd_ssr_cfg = {
342 .disable_smsm_reset_handshake = 1,
343};
344
Jeff Hugo70946092012-02-10 11:30:43 -0700345static struct smd_platform smd_platform_data = {
346 .num_ss_configs = ARRAY_SIZE(smd_config_list),
347 .smd_ss_configs = smd_config_list,
Jeff Hugo3e366292012-03-29 15:19:14 -0600348 .smd_ssr_config = &smd_ssr_cfg,
Jeff Hugo9a5dc6e2012-03-29 14:39:42 -0600349 .num_smem_areas = ARRAY_SIZE(aux_smem_areas),
350 .smd_smem_areas = aux_smem_areas,
Jeff Hugo70946092012-02-10 11:30:43 -0700351};
352
353struct platform_device msm_device_smd_copper = {
354 .name = "msm_smd",
355 .id = -1,
356 .resource = smd_resource,
357 .num_resources = ARRAY_SIZE(smd_resource),
358 .dev = {
359 .platform_data = &smd_platform_data,
360 }
361};
362
Olav Hauganb800c8c2012-01-30 08:50:45 -0800363static void __init msm_copper_calculate_reserve_sizes(void)
364{
365#ifdef CONFIG_ION_MSM
366 reserve_ion_memory();
367#endif
368}
369
370static struct reserve_info msm_copper_reserve_info __initdata = {
371 .memtype_reserve_table = msm_copper_reserve_table,
372 .calculate_reserve_sizes = msm_copper_calculate_reserve_sizes,
373 .paddr_to_memtype = msm_copper_paddr_to_memtype,
374};
375
376static void __init msm_copper_early_memory(void)
377{
378 reserve_info = &msm_copper_reserve_info;
379}
380
381void __init msm_copper_reserve(void)
382{
383 msm_reserve();
384}
385
Pavankumar Kondeti8c447382012-03-29 09:02:09 +0530386static struct platform_device android_usb_device = {
387 .name = "android_usb",
388 .id = -1,
389};
390
Sathish Ambleyc58afc22011-10-09 21:55:39 -0700391void __init msm_copper_add_devices(void)
392{
Olav Hauganb800c8c2012-01-30 08:50:45 -0800393#ifdef CONFIG_ION_MSM
394 platform_device_register(&ion_dev);
395#endif
Jeff Hugo70946092012-02-10 11:30:43 -0700396 platform_device_register(&msm_device_smd_copper);
Pavankumar Kondeti8c447382012-03-29 09:02:09 +0530397 platform_device_register(&android_usb_device);
Michael Bohan037a0f52012-02-29 19:13:09 -0800398 platform_add_devices(msm_copper_stub_regulator_devices,
399 msm_copper_stub_regulator_devices_len);
Sathish Ambleyc58afc22011-10-09 21:55:39 -0700400}
401
Michael Bohane7c2b472012-03-30 14:27:18 -0700402/*
403 * Used to satisfy dependencies for devices that need to be
404 * run early or in a particular order. Most likely your device doesn't fall
405 * into this category, and thus the driver should not be added here. The
406 * EPROBE_DEFER can satisfy most dependency problems.
407 */
408void __init msm_copper_add_drivers(void)
409{
410 regulator_stub_init();
411}
412
Michael Bohanc7224532012-01-06 16:02:52 -0800413static struct of_device_id irq_match[] __initdata = {
414 { .compatible = "qcom,msm-qgic2", .data = gic_of_init, },
Michael Bohan0425f6f2012-01-17 14:36:39 -0800415 { .compatible = "qcom,msm-gpio", .data = msm_gpio_of_init, },
Michael Bohan115cf652012-01-05 14:32:59 -0800416 { .compatible = "qcom,spmi-pmic-arb", .data = qpnpint_of_init, },
Sathish Ambleyc58afc22011-10-09 21:55:39 -0700417 {}
418};
419
420void __init msm_copper_init_irq(void)
421{
Michael Bohanc7224532012-01-06 16:02:52 -0800422 of_irq_init(irq_match);
Sathish Ambleyc58afc22011-10-09 21:55:39 -0700423}
424
425static struct clk_lookup msm_clocks_dummy[] = {
Matt Wagantallb3fe8992011-12-07 19:26:55 -0800426 CLK_DUMMY("xo", XO_CLK, NULL, OFF),
Tianyi Gouc1e049f82011-11-23 14:20:16 -0800427 CLK_DUMMY("xo", XO_CLK, "pil_pronto", OFF),
Sathish Ambley3d50c762011-10-25 15:26:00 -0700428 CLK_DUMMY("core_clk", BLSP2_UART_CLK, "msm_serial_hsl.0", OFF),
429 CLK_DUMMY("iface_clk", BLSP2_UART_CLK, "msm_serial_hsl.0", OFF),
Sujit Reddy Thumma1a4a79e2011-11-04 09:44:32 +0530430 CLK_DUMMY("core_clk", SDC1_CLK, NULL, OFF),
431 CLK_DUMMY("iface_clk", SDC1_P_CLK, NULL, OFF),
432 CLK_DUMMY("core_clk", SDC3_CLK, NULL, OFF),
433 CLK_DUMMY("iface_clk", SDC3_P_CLK, NULL, OFF),
Pavankumar Kondeti0063b842012-01-16 12:19:58 +0530434 CLK_DUMMY("phy_clk", NULL, "msm_otg", OFF),
435 CLK_DUMMY("core_clk", NULL, "msm_otg", OFF),
Pavankumar Kondeti0063b842012-01-16 12:19:58 +0530436 CLK_DUMMY("iface_clk", NULL, "msm_otg", OFF),
Pavankumar Kondeti066bfbf2012-02-20 14:10:20 +0530437 CLK_DUMMY("xo", NULL, "msm_otg", OFF),
Yan He1466daa2011-11-30 17:25:38 -0800438 CLK_DUMMY("dfab_clk", DFAB_CLK, NULL, 0),
439 CLK_DUMMY("dma_bam_pclk", DMA_BAM_P_CLK, NULL, 0),
440 CLK_DUMMY("mem_clk", NULL, NULL, 0),
Harini Jayaraman5f98dbb2011-12-20 13:38:19 -0700441 CLK_DUMMY("core_clk", SPI_CLK, "spi_qsd.1", OFF),
442 CLK_DUMMY("iface_clk", SPI_P_CLK, "spi_qsd.1", OFF),
Sagar Dharia218edb92012-01-15 18:03:01 -0700443 CLK_DUMMY("core_clk", NULL, "f9966000.i2c", 0),
444 CLK_DUMMY("iface_clk", NULL, "f9966000.i2c", 0),
Sagar Dhariaa316a962012-03-21 16:13:22 -0600445 CLK_DUMMY("core_clk", NULL, "fe12f000.slim", OFF),
Sathish Ambleyc58afc22011-10-09 21:55:39 -0700446};
447
448struct clock_init_data msm_dummy_clock_init_data __initdata = {
449 .table = msm_clocks_dummy,
450 .size = ARRAY_SIZE(msm_clocks_dummy),
451};
452
453static struct of_dev_auxdata msm_copper_auxdata_lookup[] __initdata = {
Sathish Ambleyab783ab2011-11-27 22:21:48 -0800454 OF_DEV_AUXDATA("qcom,msm-lsuart-v14", 0xF991F000, \
Sathish Ambley3d50c762011-10-25 15:26:00 -0700455 "msm_serial_hsl.0", NULL),
Pavankumar Kondeti0063b842012-01-16 12:19:58 +0530456 OF_DEV_AUXDATA("qcom,hsusb-otg", 0xF9A55000, \
457 "msm_otg", NULL),
Harini Jayaraman5f98dbb2011-12-20 13:38:19 -0700458 OF_DEV_AUXDATA("qcom,spi-qup-v2", 0xF9924000, \
459 "spi_qsd.1", NULL),
Kenneth Heitkef3c829c2012-01-13 17:02:43 -0700460 OF_DEV_AUXDATA("qcom,spmi-pmic-arb", 0xFC4C0000, \
461 "spmi-pmic-arb.0", NULL),
David Ng665140f2012-04-12 16:03:45 -0700462 OF_DEV_AUXDATA("qcom,msm-sdcc", 0xF980B000, \
463 "msm_sdcc.1", NULL),
464 OF_DEV_AUXDATA("qcom,msm-sdcc", 0xF984B000, \
465 "msm_sdcc.3", NULL),
Matt Wagantallc2bbdc32012-03-21 19:44:50 -0700466 OF_DEV_AUXDATA("qcom,pil-q6v5-lpass", 0xFE200000, \
467 "pil-q6v5-lpass", NULL),
Tianyi Gouc1e049f82011-11-23 14:20:16 -0800468 OF_DEV_AUXDATA("qcom,pil-pronto", 0xFB21B000, \
469 "pil_pronto", NULL),
Sathish Ambleyc58afc22011-10-09 21:55:39 -0700470 {}
471};
472
473void __init msm_copper_init(struct of_dev_auxdata **adata)
474{
Sathish Ambleyb17ec7e2012-04-03 15:20:03 -0700475 msm_copper_init_gpiomux();
Vikram Mulukutlaaeadb5f2012-05-04 14:03:07 -0700476
477 if (machine_is_copper_rumi())
478 msm_clock_init(&msm_dummy_clock_init_data);
479 else
480 msm_clock_init(&msmcopper_clock_init_data);
Sathish Ambleyc58afc22011-10-09 21:55:39 -0700481
482 *adata = msm_copper_auxdata_lookup;
483}
Olav Hauganb800c8c2012-01-30 08:50:45 -0800484
485void __init msm_copper_very_early(void)
486{
487 msm_copper_early_memory();
488}