blob: cf57250de70247f9f229281c41c7abbb34333b2b [file] [log] [blame]
Amol Jadica4f4c92011-01-13 20:19:34 -08001/*
2 * Copyright (c) 2009, Google Inc.
3 * All rights reserved.
Aparna Mallavarapu2269a2f2013-01-07 19:44:48 +05304 * Copyright (c) 2009-2013, 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;
118 case MSM8230:
119 case MSM8630:
120 case MSM8930:
121 case MSM8230AA:
122 case MSM8630AA:
123 case MSM8930AA:
124 case MSM8930AB:
125 case MSM8630AB:
126 case MSM8230AB:
127 case APQ8030AB:
128 case APQ8030:
129 case APQ8030AA:
Shashank Mittalb3be37f2012-01-16 22:59:49 -0800130 msm8930_keypad_init();
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530131 break;
132 case APQ8064:
133 case MPQ8064:
Aparna Mallavarapu2269a2f2013-01-07 19:44:48 +0530134 case APQ8064AA:
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530135 case APQ8064AB:
Amol Jadi76071672012-02-03 12:19:36 -0800136 apq8064_keypad_init();
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530137 break;
138 default:
139 dprintf(CRITICAL,"Keyboard is not supported for platform: %d\n",platform_id);
140 };
Amol Jadi6db9fe32011-04-15 17:19:00 -0700141
Kinson Chikce306ff2011-07-08 15:23:33 -0700142 /* Display splash screen if enabled */
143#if DISPLAY_SPLASH_SCREEN
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700144 display_init();
145 dprintf(SPEW, "Diplay initialized\n");
Kinson Chikce306ff2011-07-08 15:23:33 -0700146#endif
147
Neeti Desai6e015252012-08-13 13:22:37 -0700148 if ((platform_id == MSM8960) || (platform_id == MSM8960AB) ||
149 (platform_id == APQ8060AB) || (platform_id == MSM8260AB) ||
150 (platform_id == MSM8660AB) || (platform_id == MSM8660A) ||
Neeti Desai992ed6c2012-09-20 11:59:12 -0700151 (platform_id == MSM8260A) || (platform_id == APQ8060A) ||
Aparna Mallavarapu2269a2f2013-01-07 19:44:48 +0530152 (platform_id == APQ8064) || (platform_id == APQ8064AA) ||
153 (platform_id == APQ8064AB))
Deepa Dinamani5e5c21a2012-02-16 18:59:57 -0800154 /* Enable Hardware CE */
155 platform_ce_type = CRYPTO_ENGINE_TYPE_HW;
156
Shashank Mittalda89a682011-03-14 19:18:38 -0700157 /* Trying Slot 1 first */
158 slot = 1;
Ajay Dudanib01e5062011-12-03 23:23:42 -0800159 base_addr = mmc_sdc_base[slot - 1];
160 if (mmc_boot_main(slot, base_addr)) {
Shashank Mittalda89a682011-03-14 19:18:38 -0700161 /* Trying Slot 3 next */
162 slot = 3;
Ajay Dudanib01e5062011-12-03 23:23:42 -0800163 base_addr = mmc_sdc_base[slot - 1];
164 if (mmc_boot_main(slot, base_addr)) {
Shashank Mittalda89a682011-03-14 19:18:38 -0700165 dprintf(CRITICAL, "mmc init failed!");
166 ASSERT(0);
167 }
Amol Jadica4f4c92011-01-13 20:19:34 -0800168 }
169}
170
171unsigned board_machtype(void)
172{
Shashank Mittala635abf2012-03-28 18:11:43 -0700173 return board_target_id();
Amol Jadia63aaff2012-02-01 15:51:50 -0800174}
175
Deepa Dinamani5e5c21a2012-02-16 18:59:57 -0800176crypto_engine_type board_ce_type(void)
177{
178 return platform_ce_type;
179}
180
Ajay Dudani403bc492011-09-30 16:17:21 -0700181unsigned target_baseband()
182{
Shashank Mittala635abf2012-03-28 18:11:43 -0700183 return board_baseband();
Ajay Dudani403bc492011-09-30 16:17:21 -0700184}
185
Ajay Dudani23a18c32011-11-18 08:37:01 -0800186static unsigned target_check_power_on_reason(void)
187{
188 unsigned power_on_status = 0;
189 unsigned int status_len = sizeof(power_on_status);
190 unsigned smem_status;
191
192 smem_status = smem_read_alloc_entry(SMEM_POWER_ON_STATUS_INFO,
Ajay Dudanib01e5062011-12-03 23:23:42 -0800193 &power_on_status, status_len);
Ajay Dudani23a18c32011-11-18 08:37:01 -0800194
Ajay Dudanib01e5062011-12-03 23:23:42 -0800195 if (smem_status) {
196 dprintf(CRITICAL,
197 "ERROR: unable to read shared memory for power on reason\n");
Ajay Dudani23a18c32011-11-18 08:37:01 -0800198 }
Ajay Dudanib01e5062011-12-03 23:23:42 -0800199 dprintf(INFO, "Power on reason %u\n", power_on_status);
Ajay Dudani23a18c32011-11-18 08:37:01 -0800200 return power_on_status;
201}
202
Amol Jadica4f4c92011-01-13 20:19:34 -0800203void reboot_device(unsigned reboot_reason)
204{
Trevor Bourgeta5c4a242011-11-08 15:37:08 -0800205 writel(reboot_reason, RESTART_REASON_ADDR);
206
Shashank Mittal6239b162011-06-28 17:59:33 -0700207 /* Actually reset the chip */
Shashank Mittal39503262011-07-19 11:41:35 -0700208 pm8921_config_reset_pwr_off(1);
Shashank Mittal6239b162011-06-28 17:59:33 -0700209 writel(0, MSM_PSHOLD_CTL_SU);
Amol Jadica4f4c92011-01-13 20:19:34 -0800210 mdelay(10000);
Shashank Mittal39503262011-07-19 11:41:35 -0700211
Ajay Dudanib01e5062011-12-03 23:23:42 -0800212 dprintf(CRITICAL, "PSHOLD failed, trying watchdog reset\n");
Trevor Bourgetcc278352011-11-08 15:49:30 -0800213 writel(1, MSM_WDT0_RST);
214 writel(0, MSM_WDT0_EN);
215 writel(0x31F3, MSM_WDT0_BT);
216 writel(3, MSM_WDT0_EN);
217 dmb();
218 writel(3, MSM_TCSR_BASE + TCSR_WDOG_CFG);
219 mdelay(10000);
220
Ajay Dudanib01e5062011-12-03 23:23:42 -0800221 dprintf(CRITICAL, "Rebooting failed\n");
Amol Jadica4f4c92011-01-13 20:19:34 -0800222}
223
224unsigned check_reboot_mode(void)
225{
226 unsigned restart_reason = 0;
Amol Jadica4f4c92011-01-13 20:19:34 -0800227
228 /* Read reboot reason and scrub it */
Shashank Mittal0207df72011-06-15 15:20:43 -0700229 restart_reason = readl(RESTART_REASON_ADDR);
230 writel(0x00, RESTART_REASON_ADDR);
Amol Jadica4f4c92011-01-13 20:19:34 -0800231
232 return restart_reason;
233}
234
Ajay Dudani23a18c32011-11-18 08:37:01 -0800235unsigned target_pause_for_battery_charge(void)
236{
Ajay Dudaniba822332011-11-25 13:37:31 -0800237 if (target_check_power_on_reason() == PWR_ON_EVENT_WALL_CHG)
Ajay Dudani23a18c32011-11-18 08:37:01 -0800238 return 1;
239
240 return 0;
241}
242
Ajay Dudani12091e22011-05-06 17:13:23 -0700243void target_serialno(unsigned char *buf)
244{
245 unsigned int serialno;
Ajay Dudanib01e5062011-12-03 23:23:42 -0800246 if (target_is_emmc_boot()) {
247 serialno = mmc_get_psn();
248 snprintf((char *)buf, 13, "%x", serialno);
Ajay Dudani12091e22011-05-06 17:13:23 -0700249 }
250}
251
Amol Jadica4f4c92011-01-13 20:19:34 -0800252void target_battery_charging_enable(unsigned enable, unsigned disconnect)
253{
254}
Amol Jadi57abe4c2011-05-24 15:47:27 -0700255
256/* Do any target specific intialization needed before entering fastboot mode */
257void target_fastboot_init(void)
258{
259 /* Set the BOOT_DONE flag in PM8921 */
260 pm8921_boot_done();
261}
Amol Jadic52c8a32011-07-12 11:27:04 -0700262
Amol Jadia63aaff2012-02-01 15:51:50 -0800263void target_uart_init(void)
Amol Jadic52c8a32011-07-12 11:27:04 -0700264{
Shashank Mittala635abf2012-03-28 18:11:43 -0700265 unsigned target_id = board_machtype();
266
Ajay Dudanib01e5062011-12-03 23:23:42 -0800267 switch (target_id) {
268 case LINUX_MACHTYPE_8960_SIM:
269 case LINUX_MACHTYPE_8960_RUMI3:
270 case LINUX_MACHTYPE_8960_CDP:
271 case LINUX_MACHTYPE_8960_MTP:
272 case LINUX_MACHTYPE_8960_FLUID:
273 case LINUX_MACHTYPE_8960_APQ:
274 case LINUX_MACHTYPE_8960_LIQUID:
Amol Jadi0c04df82011-10-14 17:40:21 -0700275
Neeti Desai46940292012-07-17 14:28:35 -0700276 if(board_baseband() == BASEBAND_SGLTE)
277 {
278 uart_dm_init(8, 0x1A000000, 0x1A040000);;
279 }
280 else
281 {
282 uart_dm_init(5, 0x16400000, 0x16440000);
283 }
Amol Jadia63aaff2012-02-01 15:51:50 -0800284 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700285
Ajay Dudanib01e5062011-12-03 23:23:42 -0800286 case LINUX_MACHTYPE_8930_CDP:
287 case LINUX_MACHTYPE_8930_MTP:
288 case LINUX_MACHTYPE_8930_FLUID:
Amol Jadi0c04df82011-10-14 17:40:21 -0700289
Amol Jadia63aaff2012-02-01 15:51:50 -0800290 uart_dm_init(5, 0x16400000, 0x16440000);
291 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700292
Ajay Dudanib01e5062011-12-03 23:23:42 -0800293 case LINUX_MACHTYPE_8064_SIM:
294 case LINUX_MACHTYPE_8064_RUMI3:
Amol Jadia63aaff2012-02-01 15:51:50 -0800295 uart_dm_init(3, 0x16200000, 0x16240000);
296 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700297
Amol Jadia63aaff2012-02-01 15:51:50 -0800298 case LINUX_MACHTYPE_8064_CDP:
299 case LINUX_MACHTYPE_8064_MTP:
300 case LINUX_MACHTYPE_8064_LIQUID:
301 uart_dm_init(7, 0x16600000, 0x16640000);
302 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700303
V S Ramanjaneya Kumar Tc633fe12013-01-08 14:55:54 -0500304 case LINUX_MACHTYPE_8064_EP:
305 uart_dm_init(2, 0x12480000, 0x12490000);
306 break;
307
Amol Jadic4263042012-03-29 16:18:11 -0700308 case LINUX_MACHTYPE_8064_MPQ_CDP:
Amol Jadi0d501382012-05-24 11:16:41 -0700309 case LINUX_MACHTYPE_8064_MPQ_HRD:
310 case LINUX_MACHTYPE_8064_MPQ_DTV:
Aparna Mallavarapu2715be02013-02-05 19:24:10 +0530311 case LINUX_MACHTYPE_8064_MPQ_DMA:
Amol Jadic4263042012-03-29 16:18:11 -0700312 uart_dm_init(5, 0x1A200000, 0x1A240000);
313 break;
314
Ajay Dudanib01e5062011-12-03 23:23:42 -0800315 case LINUX_MACHTYPE_8627_CDP:
316 case LINUX_MACHTYPE_8627_MTP:
Shashank Mittal26309ed2011-12-01 16:05:45 -0800317
Amol Jadia63aaff2012-02-01 15:51:50 -0800318 uart_dm_init(5, 0x16400000, 0x16440000);
319 break;
Shashank Mittal26309ed2011-12-01 16:05:45 -0800320
Ajay Dudanib01e5062011-12-03 23:23:42 -0800321 default:
322 dprintf(CRITICAL, "uart gsbi not defined for target: %d\n",
323 target_id);
Amol Jadi0c04df82011-10-14 17:40:21 -0700324
Ajay Dudanib01e5062011-12-03 23:23:42 -0800325 ASSERT(0);
Amol Jadi0c04df82011-10-14 17:40:21 -0700326 }
Amol Jadic52c8a32011-07-12 11:27:04 -0700327}
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700328
Amol Jadi5c61a952012-05-04 17:05:35 -0700329/* Detect the target type */
330void target_detect(struct board_data *board)
331{
332 uint32_t platform;
333 uint32_t platform_hw;
334 uint32_t target_id;
335
336 platform = board->platform;
337 platform_hw = board->platform_hw;
338
339 /* Detect the board we are running on */
Neeti Desai6e015252012-08-13 13:22:37 -0700340 if ((platform == MSM8960) || (platform == MSM8960AB) ||
341 (platform == APQ8060AB) || (platform == MSM8260AB) ||
342 (platform == MSM8660AB) ||(platform == MSM8660A) ||
343 (platform == MSM8260A) || (platform == APQ8060A)) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700344 switch (platform_hw) {
345 case HW_PLATFORM_SURF:
346 target_id = LINUX_MACHTYPE_8960_CDP;
347 break;
348 case HW_PLATFORM_MTP:
349 target_id = LINUX_MACHTYPE_8960_MTP;
350 break;
351 case HW_PLATFORM_FLUID:
352 target_id = LINUX_MACHTYPE_8960_FLUID;
353 break;
354 case HW_PLATFORM_LIQUID:
355 target_id = LINUX_MACHTYPE_8960_LIQUID;
356 break;
357 default:
358 target_id = LINUX_MACHTYPE_8960_CDP;
359 }
Neeti Desai5ccd8642012-07-17 12:43:43 -0700360 } else if ((platform == MSM8230) || (platform == MSM8630) ||
361 (platform == MSM8930) || (platform == MSM8230AA) ||
362 (platform == MSM8630AA) || (platform == MSM8930AA) ||
Amol Jadi6d913742012-10-16 12:12:23 -0700363 (platform == MSM8930AB) || (platform == MSM8630AB) ||
364 (platform == MSM8230AB) || (platform == APQ8030AB) ||
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530365 (platform == APQ8030) || platform == APQ8030AA) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700366 switch (platform_hw) {
367 case HW_PLATFORM_SURF:
368 target_id = LINUX_MACHTYPE_8930_CDP;
369 break;
370 case HW_PLATFORM_MTP:
371 target_id = LINUX_MACHTYPE_8930_MTP;
372 break;
373 case HW_PLATFORM_FLUID:
374 target_id = LINUX_MACHTYPE_8930_FLUID;
375 break;
376 default:
377 target_id = LINUX_MACHTYPE_8930_CDP;
378 }
379 } else if ((platform == MSM8227) || (platform == MSM8627)) {
380 switch (platform_hw) {
381 case HW_PLATFORM_SURF:
382 target_id = LINUX_MACHTYPE_8627_CDP;
383 break;
384 case HW_PLATFORM_MTP:
385 target_id = LINUX_MACHTYPE_8627_MTP;
386 break;
387 default:
388 target_id = LINUX_MACHTYPE_8627_CDP;
389 }
390 } else if (platform == MPQ8064) {
391 switch (platform_hw) {
392 case HW_PLATFORM_SURF:
393 target_id = LINUX_MACHTYPE_8064_MPQ_CDP;
394 break;
395 case HW_PLATFORM_HRD:
Amol Jadi0d501382012-05-24 11:16:41 -0700396 target_id = LINUX_MACHTYPE_8064_MPQ_HRD;
Amol Jadi5c61a952012-05-04 17:05:35 -0700397 break;
398 case HW_PLATFORM_DTV:
Amol Jadi0d501382012-05-24 11:16:41 -0700399 target_id = LINUX_MACHTYPE_8064_MPQ_DTV;
Amol Jadi5c61a952012-05-04 17:05:35 -0700400 break;
Aparna Mallavarapu2715be02013-02-05 19:24:10 +0530401 case HW_PLATFORM_DMA:
402 target_id = LINUX_MACHTYPE_8064_MPQ_DMA;
403 break;
Amol Jadi5c61a952012-05-04 17:05:35 -0700404 default:
405 target_id = LINUX_MACHTYPE_8064_MPQ_CDP;
406 }
Aparna Mallavarapu2269a2f2013-01-07 19:44:48 +0530407 } else if ((platform == APQ8064) || (platform == APQ8064AA)
408 || (platform == APQ8064AB)) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700409 switch (platform_hw) {
410 case HW_PLATFORM_SURF:
411 target_id = LINUX_MACHTYPE_8064_CDP;
412 break;
413 case HW_PLATFORM_MTP:
414 target_id = LINUX_MACHTYPE_8064_MTP;
415 break;
416 case HW_PLATFORM_LIQUID:
417 target_id = LINUX_MACHTYPE_8064_LIQUID;
418 break;
V S Ramanjaneya Kumar Tc633fe12013-01-08 14:55:54 -0500419 case HW_PLATFORM_BTS:
420 target_id = LINUX_MACHTYPE_8064_EP;
421 break;
Amol Jadi5c61a952012-05-04 17:05:35 -0700422 default:
423 target_id = LINUX_MACHTYPE_8064_CDP;
424 }
425 } else {
426 dprintf(CRITICAL, "platform (%d) is not identified.\n",
427 platform);
428 ASSERT(0);
429 }
430 board->target = target_id;
431}
432
433/* Detect the modem type */
434void target_baseband_detect(struct board_data *board)
435{
436 uint32_t baseband;
437 uint32_t platform;
438 uint32_t platform_subtype;
439
440 platform = board->platform;
441 platform_subtype = board->platform_subtype;
442
443 /* Check for baseband variants. Default to MSM */
444 if (platform_subtype == HW_PLATFORM_SUBTYPE_MDM)
445 baseband = BASEBAND_MDM;
446 else if (platform_subtype == HW_PLATFORM_SUBTYPE_SGLTE)
447 baseband = BASEBAND_SGLTE;
Channagoud Kadabi141f2982012-10-31 11:23:02 +0530448 else if (platform_subtype == HW_PLATFORM_SUBTYPE_DSDA)
449 baseband = BASEBAND_DSDA;
Amol Jadi2a15a272013-01-22 12:03:36 -0800450 else if (platform_subtype == HW_PLATFORM_SUBTYPE_DSDA2)
451 baseband = BASEBAND_DSDA2;
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530452 else {
453 switch(platform) {
454 case APQ8060:
455 case APQ8064:
Aparna Mallavarapu2269a2f2013-01-07 19:44:48 +0530456 case APQ8064AA:
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530457 case APQ8064AB:
458 case APQ8030AB:
459 case MPQ8064:
460 case APQ8030:
461 case APQ8030AA:
462 baseband = BASEBAND_APQ;
463 break;
464 default:
465 baseband = BASEBAND_MSM;
466 };
467 }
Amol Jadi5c61a952012-05-04 17:05:35 -0700468 board->baseband = baseband;
469}
470
Amol Jadi6834f1a2012-06-29 14:42:59 -0700471/* Returns 1 if target supports continuous splash screen. */
472int target_cont_splash_screen()
473{
474 switch(board_platform_id())
475 {
476 case MSM8960:
Neeti Desai6e015252012-08-13 13:22:37 -0700477 case MSM8960AB:
478 case APQ8060AB:
479 case MSM8260AB:
480 case MSM8660AB:
Amol Jadi6834f1a2012-06-29 14:42:59 -0700481 return 1;
482
483 default:
484 return 0;
485 }
486}
Amol Jadida118b92012-07-06 19:53:18 -0700487
488void apq8064_ext_3p3V_enable()
489{
490 /* Configure GPIO for output */
491 gpio_tlmm_config(77, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_8MA, GPIO_ENABLE);
492
493 /* Output High */
494 gpio_set(77, 2);
495}
496
497/* Do target specific usb initialization */
498void target_usb_init(void)
499{
500 if(board_target_id() == LINUX_MACHTYPE_8064_LIQUID)
501 {
502 apq8064_ext_3p3V_enable();
503 }
504}
Channagoud Kadabi7d84dd62012-08-24 21:20:56 +0530505
506int target_mmc_bus_width()
507{
508 return MMC_BOOT_BUS_WIDTH_8_BIT;
509}