blob: dcee3b48750354ae189f91c82bbada4539192f4c [file] [log] [blame]
Amol Jadica4f4c92011-01-13 20:19:34 -08001/*
2 * Copyright (c) 2009, Google Inc.
3 * All rights reserved.
Aravind Venkateswaran497653f2014-02-25 14:42:43 -08004 * Copyright (c) 2009-2014, The Linux Foundation. All rights reserved.
Amol Jadica4f4c92011-01-13 20:19:34 -08005 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 * * Neither the name of Google, Inc. nor the names of its contributors
16 * may be used to endorse or promote products derived from this
17 * software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
22 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
23 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
24 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
25 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
26 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
29 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 * SUCH DAMAGE.
31 */
32
33#include <debug.h>
34#include <lib/ptable.h>
35#include <smem.h>
36#include <platform/iomap.h>
Greg Griscod6250552011-06-29 14:40:23 -070037#include <mmc.h>
38#include <platform/timer.h>
Amol Jadida118b92012-07-06 19:53:18 -070039#include <platform/gpio.h>
Amol Jadica4f4c92011-01-13 20:19:34 -080040#include <reg.h>
Amol Jadi6db9fe32011-04-15 17:19:00 -070041#include <dev/keys.h>
Amol Jadi57abe4c2011-05-24 15:47:27 -070042#include <dev/pm8921.h>
Kinson Chikea646242011-09-01 13:53:16 -070043#include <dev/ssbi.h>
Amol Jadic52c8a32011-07-12 11:27:04 -070044#include <gsbi.h>
Greg Griscod2471ef2011-07-14 13:00:42 -070045#include <target.h>
Greg Grisco1073a5e2011-07-28 18:59:18 -070046#include <platform.h>
Ajay Dudani403bc492011-09-30 16:17:21 -070047#include <baseband.h>
Amol Jadia63aaff2012-02-01 15:51:50 -080048#include <uart_dm.h>
Deepa Dinamani5e5c21a2012-02-16 18:59:57 -080049#include <crypto_hash.h>
Shashank Mittala635abf2012-03-28 18:11:43 -070050#include <board.h>
Neeti Desai465491e2012-07-31 12:53:35 -070051#include <target/board.h>
Amol Jadi0c04df82011-10-14 17:40:21 -070052
Amol Jadicd43ea02011-02-15 20:56:04 -080053extern void dmb(void);
Shashank Mittalb3be37f2012-01-16 22:59:49 -080054extern void msm8960_keypad_init(void);
55extern void msm8930_keypad_init(void);
Greg Griscod2471ef2011-07-14 13:00:42 -070056extern void panel_backlight_on(void);
Amol Jadicd43ea02011-02-15 20:56:04 -080057
Ajay Dudanib01e5062011-12-03 23:23:42 -080058static unsigned mmc_sdc_base[] =
59 { MSM_SDC1_BASE, MSM_SDC2_BASE, MSM_SDC3_BASE, MSM_SDC4_BASE };
Shashank Mittalda89a682011-03-14 19:18:38 -070060
Amol Jadi57abe4c2011-05-24 15:47:27 -070061static pm8921_dev_t pmic;
62
Deepa Dinamani5e5c21a2012-02-16 18:59:57 -080063/* Setting this variable to different values defines the
64 * behavior of CE engine:
65 * platform_ce_type = CRYPTO_ENGINE_TYPE_NONE : No CE engine
66 * platform_ce_type = CRYPTO_ENGINE_TYPE_SW : Software CE engine
67 * platform_ce_type = CRYPTO_ENGINE_TYPE_HW : Hardware CE engine
68 * Behavior is determined in the target code.
69 */
70static crypto_engine_type platform_ce_type = CRYPTO_ENGINE_TYPE_SW;
71
Amol Jadia63aaff2012-02-01 15:51:50 -080072static void target_uart_init(void);
Amol Jadi0c04df82011-10-14 17:40:21 -070073
74void target_early_init(void)
75{
Amol Jadi0c04df82011-10-14 17:40:21 -070076#if WITH_DEBUG_UART
Amol Jadia63aaff2012-02-01 15:51:50 -080077 target_uart_init();
Amol Jadi0c04df82011-10-14 17:40:21 -070078#endif
79}
Amol Jadic52c8a32011-07-12 11:27:04 -070080
Shashank Mittal39503262011-07-19 11:41:35 -070081void shutdown_device(void)
82{
83 dprintf(CRITICAL, "Shutdown system.\n");
84 pm8921_config_reset_pwr_off(0);
85
86 /* Actually reset the chip */
87 writel(0, MSM_PSHOLD_CTL_SU);
88 mdelay(5000);
89
Ajay Dudanib01e5062011-12-03 23:23:42 -080090 dprintf(CRITICAL, "Shutdown failed.\n");
Shashank Mittal39503262011-07-19 11:41:35 -070091}
92
Amol Jadica4f4c92011-01-13 20:19:34 -080093void target_init(void)
94{
Shashank Mittalda89a682011-03-14 19:18:38 -070095 unsigned base_addr;
96 unsigned char slot;
Shashank Mittala635abf2012-03-28 18:11:43 -070097 unsigned platform_id = board_platform_id();
Amol Jadi0c04df82011-10-14 17:40:21 -070098
Amol Jadica4f4c92011-01-13 20:19:34 -080099 dprintf(INFO, "target_init()\n");
100
Amol Jadi57abe4c2011-05-24 15:47:27 -0700101 /* Initialize PMIC driver */
Ajay Dudanib01e5062011-12-03 23:23:42 -0800102 pmic.read = (pm8921_read_func) & pa1_ssbi2_read_bytes;
103 pmic.write = (pm8921_write_func) & pa1_ssbi2_write_bytes;
Amol Jadi57abe4c2011-05-24 15:47:27 -0700104
105 pm8921_init(&pmic);
Amol Jadi0c04df82011-10-14 17:40:21 -0700106
Amol Jadi6db9fe32011-04-15 17:19:00 -0700107 /* Keypad init */
108 keys_init();
Shashank Mittalb3be37f2012-01-16 22:59:49 -0800109
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530110 switch(platform_id) {
111 case MSM8960:
112 case MSM8960AB:
113 case APQ8060AB:
114 case MSM8260AB:
115 case MSM8660AB:
Shashank Mittalb3be37f2012-01-16 22:59:49 -0800116 msm8960_keypad_init();
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530117 break;
David Ng0f56e932013-02-12 18:11:56 -0800118 case MSM8130:
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530119 case MSM8230:
120 case MSM8630:
121 case MSM8930:
David Ng0f56e932013-02-12 18:11:56 -0800122 case MSM8130AA:
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530123 case MSM8230AA:
124 case MSM8630AA:
125 case MSM8930AA:
126 case MSM8930AB:
127 case MSM8630AB:
128 case MSM8230AB:
David Ng0f56e932013-02-12 18:11:56 -0800129 case MSM8130AB:
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530130 case APQ8030AB:
131 case APQ8030:
132 case APQ8030AA:
Shashank Mittalb3be37f2012-01-16 22:59:49 -0800133 msm8930_keypad_init();
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530134 break;
135 case APQ8064:
136 case MPQ8064:
Aparna Mallavarapu2269a2f2013-01-07 19:44:48 +0530137 case APQ8064AA:
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530138 case APQ8064AB:
Amol Jadi76071672012-02-03 12:19:36 -0800139 apq8064_keypad_init();
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530140 break;
141 default:
142 dprintf(CRITICAL,"Keyboard is not supported for platform: %d\n",platform_id);
143 };
Amol Jadi6db9fe32011-04-15 17:19:00 -0700144
Neeti Desai6e015252012-08-13 13:22:37 -0700145 if ((platform_id == MSM8960) || (platform_id == MSM8960AB) ||
146 (platform_id == APQ8060AB) || (platform_id == MSM8260AB) ||
147 (platform_id == MSM8660AB) || (platform_id == MSM8660A) ||
Neeti Desai992ed6c2012-09-20 11:59:12 -0700148 (platform_id == MSM8260A) || (platform_id == APQ8060A) ||
Aparna Mallavarapu2269a2f2013-01-07 19:44:48 +0530149 (platform_id == APQ8064) || (platform_id == APQ8064AA) ||
150 (platform_id == APQ8064AB))
Deepa Dinamani5e5c21a2012-02-16 18:59:57 -0800151 /* Enable Hardware CE */
152 platform_ce_type = CRYPTO_ENGINE_TYPE_HW;
153
Shashank Mittalda89a682011-03-14 19:18:38 -0700154 /* Trying Slot 1 first */
155 slot = 1;
Ajay Dudanib01e5062011-12-03 23:23:42 -0800156 base_addr = mmc_sdc_base[slot - 1];
157 if (mmc_boot_main(slot, base_addr)) {
Shashank Mittalda89a682011-03-14 19:18:38 -0700158 /* Trying Slot 3 next */
159 slot = 3;
Ajay Dudanib01e5062011-12-03 23:23:42 -0800160 base_addr = mmc_sdc_base[slot - 1];
161 if (mmc_boot_main(slot, base_addr)) {
Shashank Mittalda89a682011-03-14 19:18:38 -0700162 dprintf(CRITICAL, "mmc init failed!");
163 ASSERT(0);
164 }
Amol Jadica4f4c92011-01-13 20:19:34 -0800165 }
166}
167
168unsigned board_machtype(void)
169{
Shashank Mittala635abf2012-03-28 18:11:43 -0700170 return board_target_id();
Amol Jadia63aaff2012-02-01 15:51:50 -0800171}
172
Deepa Dinamani5e5c21a2012-02-16 18:59:57 -0800173crypto_engine_type board_ce_type(void)
174{
175 return platform_ce_type;
176}
177
Ajay Dudani403bc492011-09-30 16:17:21 -0700178unsigned target_baseband()
179{
Shashank Mittala635abf2012-03-28 18:11:43 -0700180 return board_baseband();
Ajay Dudani403bc492011-09-30 16:17:21 -0700181}
182
Ajay Dudani23a18c32011-11-18 08:37:01 -0800183static unsigned target_check_power_on_reason(void)
184{
185 unsigned power_on_status = 0;
186 unsigned int status_len = sizeof(power_on_status);
187 unsigned smem_status;
188
189 smem_status = smem_read_alloc_entry(SMEM_POWER_ON_STATUS_INFO,
Ajay Dudanib01e5062011-12-03 23:23:42 -0800190 &power_on_status, status_len);
Ajay Dudani23a18c32011-11-18 08:37:01 -0800191
Ajay Dudanib01e5062011-12-03 23:23:42 -0800192 if (smem_status) {
193 dprintf(CRITICAL,
194 "ERROR: unable to read shared memory for power on reason\n");
Ajay Dudani23a18c32011-11-18 08:37:01 -0800195 }
Ajay Dudanib01e5062011-12-03 23:23:42 -0800196 dprintf(INFO, "Power on reason %u\n", power_on_status);
Ajay Dudani23a18c32011-11-18 08:37:01 -0800197 return power_on_status;
198}
199
Amol Jadica4f4c92011-01-13 20:19:34 -0800200void reboot_device(unsigned reboot_reason)
201{
Trevor Bourgeta5c4a242011-11-08 15:37:08 -0800202 writel(reboot_reason, RESTART_REASON_ADDR);
203
Shashank Mittal6239b162011-06-28 17:59:33 -0700204 /* Actually reset the chip */
Shashank Mittal39503262011-07-19 11:41:35 -0700205 pm8921_config_reset_pwr_off(1);
Shashank Mittal6239b162011-06-28 17:59:33 -0700206 writel(0, MSM_PSHOLD_CTL_SU);
Amol Jadica4f4c92011-01-13 20:19:34 -0800207 mdelay(10000);
Shashank Mittal39503262011-07-19 11:41:35 -0700208
Ajay Dudanib01e5062011-12-03 23:23:42 -0800209 dprintf(CRITICAL, "PSHOLD failed, trying watchdog reset\n");
Trevor Bourgetcc278352011-11-08 15:49:30 -0800210 writel(1, MSM_WDT0_RST);
211 writel(0, MSM_WDT0_EN);
212 writel(0x31F3, MSM_WDT0_BT);
213 writel(3, MSM_WDT0_EN);
214 dmb();
215 writel(3, MSM_TCSR_BASE + TCSR_WDOG_CFG);
216 mdelay(10000);
217
Ajay Dudanib01e5062011-12-03 23:23:42 -0800218 dprintf(CRITICAL, "Rebooting failed\n");
Amol Jadica4f4c92011-01-13 20:19:34 -0800219}
220
221unsigned check_reboot_mode(void)
222{
223 unsigned restart_reason = 0;
Amol Jadica4f4c92011-01-13 20:19:34 -0800224
225 /* Read reboot reason and scrub it */
Shashank Mittal0207df72011-06-15 15:20:43 -0700226 restart_reason = readl(RESTART_REASON_ADDR);
227 writel(0x00, RESTART_REASON_ADDR);
Amol Jadica4f4c92011-01-13 20:19:34 -0800228
229 return restart_reason;
230}
231
Ajay Dudani23a18c32011-11-18 08:37:01 -0800232unsigned target_pause_for_battery_charge(void)
233{
Ajay Dudaniba822332011-11-25 13:37:31 -0800234 if (target_check_power_on_reason() == PWR_ON_EVENT_WALL_CHG)
Ajay Dudani23a18c32011-11-18 08:37:01 -0800235 return 1;
236
237 return 0;
238}
239
Ajay Dudani12091e22011-05-06 17:13:23 -0700240void target_serialno(unsigned char *buf)
241{
242 unsigned int serialno;
Ajay Dudanib01e5062011-12-03 23:23:42 -0800243 if (target_is_emmc_boot()) {
244 serialno = mmc_get_psn();
245 snprintf((char *)buf, 13, "%x", serialno);
Ajay Dudani12091e22011-05-06 17:13:23 -0700246 }
247}
248
Amol Jadica4f4c92011-01-13 20:19:34 -0800249void target_battery_charging_enable(unsigned enable, unsigned disconnect)
250{
251}
Amol Jadi57abe4c2011-05-24 15:47:27 -0700252
253/* Do any target specific intialization needed before entering fastboot mode */
254void target_fastboot_init(void)
255{
256 /* Set the BOOT_DONE flag in PM8921 */
257 pm8921_boot_done();
258}
Amol Jadic52c8a32011-07-12 11:27:04 -0700259
Amol Jadia63aaff2012-02-01 15:51:50 -0800260void target_uart_init(void)
Amol Jadic52c8a32011-07-12 11:27:04 -0700261{
Shashank Mittala635abf2012-03-28 18:11:43 -0700262 unsigned target_id = board_machtype();
263
Ajay Dudanib01e5062011-12-03 23:23:42 -0800264 switch (target_id) {
265 case LINUX_MACHTYPE_8960_SIM:
266 case LINUX_MACHTYPE_8960_RUMI3:
267 case LINUX_MACHTYPE_8960_CDP:
268 case LINUX_MACHTYPE_8960_MTP:
269 case LINUX_MACHTYPE_8960_FLUID:
270 case LINUX_MACHTYPE_8960_APQ:
271 case LINUX_MACHTYPE_8960_LIQUID:
Amol Jadi0c04df82011-10-14 17:40:21 -0700272
sundarajan srinivasan6e3466a2013-03-04 15:47:22 -0800273 if(board_baseband() == BASEBAND_SGLTE || board_baseband() == BASEBAND_SGLTE2)
Neeti Desai46940292012-07-17 14:28:35 -0700274 {
275 uart_dm_init(8, 0x1A000000, 0x1A040000);;
276 }
277 else
278 {
279 uart_dm_init(5, 0x16400000, 0x16440000);
280 }
Amol Jadia63aaff2012-02-01 15:51:50 -0800281 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700282
Ajay Dudanib01e5062011-12-03 23:23:42 -0800283 case LINUX_MACHTYPE_8930_CDP:
284 case LINUX_MACHTYPE_8930_MTP:
285 case LINUX_MACHTYPE_8930_FLUID:
Amol Jadi0c04df82011-10-14 17:40:21 -0700286
Amol Jadia63aaff2012-02-01 15:51:50 -0800287 uart_dm_init(5, 0x16400000, 0x16440000);
288 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700289
Ajay Dudanib01e5062011-12-03 23:23:42 -0800290 case LINUX_MACHTYPE_8064_SIM:
291 case LINUX_MACHTYPE_8064_RUMI3:
Amol Jadia63aaff2012-02-01 15:51:50 -0800292 uart_dm_init(3, 0x16200000, 0x16240000);
293 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700294
Amol Jadia63aaff2012-02-01 15:51:50 -0800295 case LINUX_MACHTYPE_8064_CDP:
296 case LINUX_MACHTYPE_8064_MTP:
297 case LINUX_MACHTYPE_8064_LIQUID:
298 uart_dm_init(7, 0x16600000, 0x16640000);
299 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700300
V S Ramanjaneya Kumar Tc633fe12013-01-08 14:55:54 -0500301 case LINUX_MACHTYPE_8064_EP:
302 uart_dm_init(2, 0x12480000, 0x12490000);
303 break;
304
Amol Jadic4263042012-03-29 16:18:11 -0700305 case LINUX_MACHTYPE_8064_MPQ_CDP:
Amol Jadi0d501382012-05-24 11:16:41 -0700306 case LINUX_MACHTYPE_8064_MPQ_HRD:
307 case LINUX_MACHTYPE_8064_MPQ_DTV:
Aparna Mallavarapu2715be02013-02-05 19:24:10 +0530308 case LINUX_MACHTYPE_8064_MPQ_DMA:
Amol Jadic4263042012-03-29 16:18:11 -0700309 uart_dm_init(5, 0x1A200000, 0x1A240000);
310 break;
311
Ajay Dudanib01e5062011-12-03 23:23:42 -0800312 case LINUX_MACHTYPE_8627_CDP:
313 case LINUX_MACHTYPE_8627_MTP:
Shashank Mittal26309ed2011-12-01 16:05:45 -0800314
Amol Jadia63aaff2012-02-01 15:51:50 -0800315 uart_dm_init(5, 0x16400000, 0x16440000);
316 break;
Shashank Mittal26309ed2011-12-01 16:05:45 -0800317
Ajay Dudanib01e5062011-12-03 23:23:42 -0800318 default:
319 dprintf(CRITICAL, "uart gsbi not defined for target: %d\n",
320 target_id);
Amol Jadi0c04df82011-10-14 17:40:21 -0700321 }
Amol Jadic52c8a32011-07-12 11:27:04 -0700322}
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700323
Amol Jadi5c61a952012-05-04 17:05:35 -0700324/* Detect the target type */
325void target_detect(struct board_data *board)
326{
327 uint32_t platform;
328 uint32_t platform_hw;
329 uint32_t target_id;
330
331 platform = board->platform;
332 platform_hw = board->platform_hw;
333
334 /* Detect the board we are running on */
Neeti Desai6e015252012-08-13 13:22:37 -0700335 if ((platform == MSM8960) || (platform == MSM8960AB) ||
336 (platform == APQ8060AB) || (platform == MSM8260AB) ||
337 (platform == MSM8660AB) ||(platform == MSM8660A) ||
338 (platform == MSM8260A) || (platform == APQ8060A)) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700339 switch (platform_hw) {
340 case HW_PLATFORM_SURF:
341 target_id = LINUX_MACHTYPE_8960_CDP;
342 break;
343 case HW_PLATFORM_MTP:
344 target_id = LINUX_MACHTYPE_8960_MTP;
345 break;
346 case HW_PLATFORM_FLUID:
347 target_id = LINUX_MACHTYPE_8960_FLUID;
348 break;
349 case HW_PLATFORM_LIQUID:
350 target_id = LINUX_MACHTYPE_8960_LIQUID;
351 break;
352 default:
353 target_id = LINUX_MACHTYPE_8960_CDP;
354 }
David Ng0f56e932013-02-12 18:11:56 -0800355 } else if ((platform == MSM8130) ||
356 (platform == MSM8130AA) || (platform == MSM8130AB) ||
357 (platform == MSM8230) || (platform == MSM8630) ||
Neeti Desai5ccd8642012-07-17 12:43:43 -0700358 (platform == MSM8930) || (platform == MSM8230AA) ||
359 (platform == MSM8630AA) || (platform == MSM8930AA) ||
Amol Jadi6d913742012-10-16 12:12:23 -0700360 (platform == MSM8930AB) || (platform == MSM8630AB) ||
361 (platform == MSM8230AB) || (platform == APQ8030AB) ||
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530362 (platform == APQ8030) || platform == APQ8030AA) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700363 switch (platform_hw) {
364 case HW_PLATFORM_SURF:
365 target_id = LINUX_MACHTYPE_8930_CDP;
366 break;
367 case HW_PLATFORM_MTP:
368 target_id = LINUX_MACHTYPE_8930_MTP;
369 break;
370 case HW_PLATFORM_FLUID:
371 target_id = LINUX_MACHTYPE_8930_FLUID;
372 break;
Aparna Mallavarapu9711d992013-03-04 16:49:21 +0530373 case HW_PLATFORM_QRD:
374 target_id = LINUX_MACHTYPE_8930_EVT;
375 break;
Amol Jadi5c61a952012-05-04 17:05:35 -0700376 default:
377 target_id = LINUX_MACHTYPE_8930_CDP;
378 }
Aparna Mallavarapu2b4b41a2013-02-19 18:56:06 +0530379 } else if ((platform == MSM8227) || (platform == MSM8627) ||
380 (platform == MSM8227AA) || (platform == MSM8627AA)) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700381 switch (platform_hw) {
382 case HW_PLATFORM_SURF:
383 target_id = LINUX_MACHTYPE_8627_CDP;
384 break;
385 case HW_PLATFORM_MTP:
386 target_id = LINUX_MACHTYPE_8627_MTP;
387 break;
388 default:
389 target_id = LINUX_MACHTYPE_8627_CDP;
390 }
391 } else if (platform == MPQ8064) {
392 switch (platform_hw) {
393 case HW_PLATFORM_SURF:
394 target_id = LINUX_MACHTYPE_8064_MPQ_CDP;
395 break;
396 case HW_PLATFORM_HRD:
Amol Jadi0d501382012-05-24 11:16:41 -0700397 target_id = LINUX_MACHTYPE_8064_MPQ_HRD;
Amol Jadi5c61a952012-05-04 17:05:35 -0700398 break;
399 case HW_PLATFORM_DTV:
Amol Jadi0d501382012-05-24 11:16:41 -0700400 target_id = LINUX_MACHTYPE_8064_MPQ_DTV;
Amol Jadi5c61a952012-05-04 17:05:35 -0700401 break;
Aparna Mallavarapu2715be02013-02-05 19:24:10 +0530402 case HW_PLATFORM_DMA:
403 target_id = LINUX_MACHTYPE_8064_MPQ_DMA;
404 break;
Amol Jadi5c61a952012-05-04 17:05:35 -0700405 default:
406 target_id = LINUX_MACHTYPE_8064_MPQ_CDP;
407 }
Aparna Mallavarapu2269a2f2013-01-07 19:44:48 +0530408 } else if ((platform == APQ8064) || (platform == APQ8064AA)
409 || (platform == APQ8064AB)) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700410 switch (platform_hw) {
411 case HW_PLATFORM_SURF:
412 target_id = LINUX_MACHTYPE_8064_CDP;
413 break;
414 case HW_PLATFORM_MTP:
415 target_id = LINUX_MACHTYPE_8064_MTP;
416 break;
417 case HW_PLATFORM_LIQUID:
418 target_id = LINUX_MACHTYPE_8064_LIQUID;
419 break;
V S Ramanjaneya Kumar Tc633fe12013-01-08 14:55:54 -0500420 case HW_PLATFORM_BTS:
421 target_id = LINUX_MACHTYPE_8064_EP;
422 break;
Amol Jadi5c61a952012-05-04 17:05:35 -0700423 default:
424 target_id = LINUX_MACHTYPE_8064_CDP;
425 }
426 } else {
427 dprintf(CRITICAL, "platform (%d) is not identified.\n",
428 platform);
429 ASSERT(0);
430 }
431 board->target = target_id;
432}
433
434/* Detect the modem type */
435void target_baseband_detect(struct board_data *board)
436{
437 uint32_t baseband;
438 uint32_t platform;
439 uint32_t platform_subtype;
440
441 platform = board->platform;
442 platform_subtype = board->platform_subtype;
443
444 /* Check for baseband variants. Default to MSM */
445 if (platform_subtype == HW_PLATFORM_SUBTYPE_MDM)
446 baseband = BASEBAND_MDM;
447 else if (platform_subtype == HW_PLATFORM_SUBTYPE_SGLTE)
448 baseband = BASEBAND_SGLTE;
Channagoud Kadabi141f2982012-10-31 11:23:02 +0530449 else if (platform_subtype == HW_PLATFORM_SUBTYPE_DSDA)
450 baseband = BASEBAND_DSDA;
Amol Jadi2a15a272013-01-22 12:03:36 -0800451 else if (platform_subtype == HW_PLATFORM_SUBTYPE_DSDA2)
452 baseband = BASEBAND_DSDA2;
sundarajan srinivasan6e3466a2013-03-04 15:47:22 -0800453 else if (platform_subtype == HW_PLATFORM_SUBTYPE_SGLTE2)
454 baseband = BASEBAND_SGLTE2;
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530455 else {
456 switch(platform) {
457 case APQ8060:
458 case APQ8064:
Aparna Mallavarapu2269a2f2013-01-07 19:44:48 +0530459 case APQ8064AA:
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530460 case APQ8064AB:
461 case APQ8030AB:
462 case MPQ8064:
463 case APQ8030:
464 case APQ8030AA:
465 baseband = BASEBAND_APQ;
466 break;
467 default:
468 baseband = BASEBAND_MSM;
469 };
470 }
Amol Jadi5c61a952012-05-04 17:05:35 -0700471 board->baseband = baseband;
472}
473
Amol Jadi6834f1a2012-06-29 14:42:59 -0700474/* Returns 1 if target supports continuous splash screen. */
475int target_cont_splash_screen()
476{
477 switch(board_platform_id())
478 {
479 case MSM8960:
Neeti Desai6e015252012-08-13 13:22:37 -0700480 case MSM8960AB:
481 case APQ8060AB:
482 case MSM8260AB:
483 case MSM8660AB:
Amol Jadi6834f1a2012-06-29 14:42:59 -0700484 return 1;
485
486 default:
487 return 0;
488 }
489}
Amol Jadida118b92012-07-06 19:53:18 -0700490
491void apq8064_ext_3p3V_enable()
492{
493 /* Configure GPIO for output */
494 gpio_tlmm_config(77, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_8MA, GPIO_ENABLE);
495
496 /* Output High */
497 gpio_set(77, 2);
498}
499
500/* Do target specific usb initialization */
501void target_usb_init(void)
502{
503 if(board_target_id() == LINUX_MACHTYPE_8064_LIQUID)
504 {
505 apq8064_ext_3p3V_enable();
506 }
507}
Channagoud Kadabi7d84dd62012-08-24 21:20:56 +0530508
Channagoud Kadabicc427612013-04-02 11:57:09 -0700509
510/*
511 * Function to set the capabilities for the host
512 */
513void target_mmc_caps(struct mmc_host *host)
Channagoud Kadabi7d84dd62012-08-24 21:20:56 +0530514{
Channagoud Kadabicc427612013-04-02 11:57:09 -0700515 host->caps.ddr_mode = 1;
516 host->caps.hs200_mode = 1;
517 host->caps.bus_width = MMC_BOOT_BUS_WIDTH_8_BIT;
518 host->caps.hs_clk_rate = MMC_CLK_96MHZ;
Channagoud Kadabi7d84dd62012-08-24 21:20:56 +0530519}