blob: f26f982914e64ba8b312de4a1f6c02a4162a132a [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;
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
Kinson Chikce306ff2011-07-08 15:23:33 -0700145 /* Display splash screen if enabled */
146#if DISPLAY_SPLASH_SCREEN
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700147 display_init();
148 dprintf(SPEW, "Diplay initialized\n");
Kinson Chikce306ff2011-07-08 15:23:33 -0700149#endif
150
Neeti Desai6e015252012-08-13 13:22:37 -0700151 if ((platform_id == MSM8960) || (platform_id == MSM8960AB) ||
152 (platform_id == APQ8060AB) || (platform_id == MSM8260AB) ||
153 (platform_id == MSM8660AB) || (platform_id == MSM8660A) ||
Neeti Desai992ed6c2012-09-20 11:59:12 -0700154 (platform_id == MSM8260A) || (platform_id == APQ8060A) ||
Aparna Mallavarapu2269a2f2013-01-07 19:44:48 +0530155 (platform_id == APQ8064) || (platform_id == APQ8064AA) ||
156 (platform_id == APQ8064AB))
Deepa Dinamani5e5c21a2012-02-16 18:59:57 -0800157 /* Enable Hardware CE */
158 platform_ce_type = CRYPTO_ENGINE_TYPE_HW;
159
Shashank Mittalda89a682011-03-14 19:18:38 -0700160 /* Trying Slot 1 first */
161 slot = 1;
Ajay Dudanib01e5062011-12-03 23:23:42 -0800162 base_addr = mmc_sdc_base[slot - 1];
163 if (mmc_boot_main(slot, base_addr)) {
Shashank Mittalda89a682011-03-14 19:18:38 -0700164 /* Trying Slot 3 next */
165 slot = 3;
Ajay Dudanib01e5062011-12-03 23:23:42 -0800166 base_addr = mmc_sdc_base[slot - 1];
167 if (mmc_boot_main(slot, base_addr)) {
Shashank Mittalda89a682011-03-14 19:18:38 -0700168 dprintf(CRITICAL, "mmc init failed!");
169 ASSERT(0);
170 }
Amol Jadica4f4c92011-01-13 20:19:34 -0800171 }
172}
173
174unsigned board_machtype(void)
175{
Shashank Mittala635abf2012-03-28 18:11:43 -0700176 return board_target_id();
Amol Jadia63aaff2012-02-01 15:51:50 -0800177}
178
Deepa Dinamani5e5c21a2012-02-16 18:59:57 -0800179crypto_engine_type board_ce_type(void)
180{
181 return platform_ce_type;
182}
183
Ajay Dudani403bc492011-09-30 16:17:21 -0700184unsigned target_baseband()
185{
Shashank Mittala635abf2012-03-28 18:11:43 -0700186 return board_baseband();
Ajay Dudani403bc492011-09-30 16:17:21 -0700187}
188
Ajay Dudani23a18c32011-11-18 08:37:01 -0800189static unsigned target_check_power_on_reason(void)
190{
191 unsigned power_on_status = 0;
192 unsigned int status_len = sizeof(power_on_status);
193 unsigned smem_status;
194
195 smem_status = smem_read_alloc_entry(SMEM_POWER_ON_STATUS_INFO,
Ajay Dudanib01e5062011-12-03 23:23:42 -0800196 &power_on_status, status_len);
Ajay Dudani23a18c32011-11-18 08:37:01 -0800197
Ajay Dudanib01e5062011-12-03 23:23:42 -0800198 if (smem_status) {
199 dprintf(CRITICAL,
200 "ERROR: unable to read shared memory for power on reason\n");
Ajay Dudani23a18c32011-11-18 08:37:01 -0800201 }
Ajay Dudanib01e5062011-12-03 23:23:42 -0800202 dprintf(INFO, "Power on reason %u\n", power_on_status);
Ajay Dudani23a18c32011-11-18 08:37:01 -0800203 return power_on_status;
204}
205
Amol Jadica4f4c92011-01-13 20:19:34 -0800206void reboot_device(unsigned reboot_reason)
207{
Trevor Bourgeta5c4a242011-11-08 15:37:08 -0800208 writel(reboot_reason, RESTART_REASON_ADDR);
209
Shashank Mittal6239b162011-06-28 17:59:33 -0700210 /* Actually reset the chip */
Shashank Mittal39503262011-07-19 11:41:35 -0700211 pm8921_config_reset_pwr_off(1);
Shashank Mittal6239b162011-06-28 17:59:33 -0700212 writel(0, MSM_PSHOLD_CTL_SU);
Amol Jadica4f4c92011-01-13 20:19:34 -0800213 mdelay(10000);
Shashank Mittal39503262011-07-19 11:41:35 -0700214
Ajay Dudanib01e5062011-12-03 23:23:42 -0800215 dprintf(CRITICAL, "PSHOLD failed, trying watchdog reset\n");
Trevor Bourgetcc278352011-11-08 15:49:30 -0800216 writel(1, MSM_WDT0_RST);
217 writel(0, MSM_WDT0_EN);
218 writel(0x31F3, MSM_WDT0_BT);
219 writel(3, MSM_WDT0_EN);
220 dmb();
221 writel(3, MSM_TCSR_BASE + TCSR_WDOG_CFG);
222 mdelay(10000);
223
Ajay Dudanib01e5062011-12-03 23:23:42 -0800224 dprintf(CRITICAL, "Rebooting failed\n");
Amol Jadica4f4c92011-01-13 20:19:34 -0800225}
226
227unsigned check_reboot_mode(void)
228{
229 unsigned restart_reason = 0;
Amol Jadica4f4c92011-01-13 20:19:34 -0800230
231 /* Read reboot reason and scrub it */
Shashank Mittal0207df72011-06-15 15:20:43 -0700232 restart_reason = readl(RESTART_REASON_ADDR);
233 writel(0x00, RESTART_REASON_ADDR);
Amol Jadica4f4c92011-01-13 20:19:34 -0800234
235 return restart_reason;
236}
237
Ajay Dudani23a18c32011-11-18 08:37:01 -0800238unsigned target_pause_for_battery_charge(void)
239{
Ajay Dudaniba822332011-11-25 13:37:31 -0800240 if (target_check_power_on_reason() == PWR_ON_EVENT_WALL_CHG)
Ajay Dudani23a18c32011-11-18 08:37:01 -0800241 return 1;
242
243 return 0;
244}
245
Ajay Dudani12091e22011-05-06 17:13:23 -0700246void target_serialno(unsigned char *buf)
247{
248 unsigned int serialno;
Ajay Dudanib01e5062011-12-03 23:23:42 -0800249 if (target_is_emmc_boot()) {
250 serialno = mmc_get_psn();
251 snprintf((char *)buf, 13, "%x", serialno);
Ajay Dudani12091e22011-05-06 17:13:23 -0700252 }
253}
254
Amol Jadica4f4c92011-01-13 20:19:34 -0800255void target_battery_charging_enable(unsigned enable, unsigned disconnect)
256{
257}
Amol Jadi57abe4c2011-05-24 15:47:27 -0700258
259/* Do any target specific intialization needed before entering fastboot mode */
260void target_fastboot_init(void)
261{
262 /* Set the BOOT_DONE flag in PM8921 */
263 pm8921_boot_done();
264}
Amol Jadic52c8a32011-07-12 11:27:04 -0700265
Amol Jadia63aaff2012-02-01 15:51:50 -0800266void target_uart_init(void)
Amol Jadic52c8a32011-07-12 11:27:04 -0700267{
Shashank Mittala635abf2012-03-28 18:11:43 -0700268 unsigned target_id = board_machtype();
269
Ajay Dudanib01e5062011-12-03 23:23:42 -0800270 switch (target_id) {
271 case LINUX_MACHTYPE_8960_SIM:
272 case LINUX_MACHTYPE_8960_RUMI3:
273 case LINUX_MACHTYPE_8960_CDP:
274 case LINUX_MACHTYPE_8960_MTP:
275 case LINUX_MACHTYPE_8960_FLUID:
276 case LINUX_MACHTYPE_8960_APQ:
277 case LINUX_MACHTYPE_8960_LIQUID:
Amol Jadi0c04df82011-10-14 17:40:21 -0700278
sundarajan srinivasan6e3466a2013-03-04 15:47:22 -0800279 if(board_baseband() == BASEBAND_SGLTE || board_baseband() == BASEBAND_SGLTE2)
Neeti Desai46940292012-07-17 14:28:35 -0700280 {
281 uart_dm_init(8, 0x1A000000, 0x1A040000);;
282 }
283 else
284 {
285 uart_dm_init(5, 0x16400000, 0x16440000);
286 }
Amol Jadia63aaff2012-02-01 15:51:50 -0800287 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700288
Ajay Dudanib01e5062011-12-03 23:23:42 -0800289 case LINUX_MACHTYPE_8930_CDP:
290 case LINUX_MACHTYPE_8930_MTP:
291 case LINUX_MACHTYPE_8930_FLUID:
Aparna Mallavarapu9711d992013-03-04 16:49:21 +0530292 case LINUX_MACHTYPE_8930_EVT:
Amol Jadi0c04df82011-10-14 17:40:21 -0700293
Amol Jadia63aaff2012-02-01 15:51:50 -0800294 uart_dm_init(5, 0x16400000, 0x16440000);
295 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700296
Ajay Dudanib01e5062011-12-03 23:23:42 -0800297 case LINUX_MACHTYPE_8064_SIM:
298 case LINUX_MACHTYPE_8064_RUMI3:
Amol Jadia63aaff2012-02-01 15:51:50 -0800299 uart_dm_init(3, 0x16200000, 0x16240000);
300 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700301
Amol Jadia63aaff2012-02-01 15:51:50 -0800302 case LINUX_MACHTYPE_8064_CDP:
303 case LINUX_MACHTYPE_8064_MTP:
304 case LINUX_MACHTYPE_8064_LIQUID:
305 uart_dm_init(7, 0x16600000, 0x16640000);
306 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700307
V S Ramanjaneya Kumar Tc633fe12013-01-08 14:55:54 -0500308 case LINUX_MACHTYPE_8064_EP:
309 uart_dm_init(2, 0x12480000, 0x12490000);
310 break;
311
Amol Jadic4263042012-03-29 16:18:11 -0700312 case LINUX_MACHTYPE_8064_MPQ_CDP:
Amol Jadi0d501382012-05-24 11:16:41 -0700313 case LINUX_MACHTYPE_8064_MPQ_HRD:
314 case LINUX_MACHTYPE_8064_MPQ_DTV:
Aparna Mallavarapu2715be02013-02-05 19:24:10 +0530315 case LINUX_MACHTYPE_8064_MPQ_DMA:
Amol Jadic4263042012-03-29 16:18:11 -0700316 uart_dm_init(5, 0x1A200000, 0x1A240000);
317 break;
318
Ajay Dudanib01e5062011-12-03 23:23:42 -0800319 case LINUX_MACHTYPE_8627_CDP:
320 case LINUX_MACHTYPE_8627_MTP:
Shashank Mittal26309ed2011-12-01 16:05:45 -0800321
Amol Jadia63aaff2012-02-01 15:51:50 -0800322 uart_dm_init(5, 0x16400000, 0x16440000);
323 break;
Shashank Mittal26309ed2011-12-01 16:05:45 -0800324
Ajay Dudanib01e5062011-12-03 23:23:42 -0800325 default:
326 dprintf(CRITICAL, "uart gsbi not defined for target: %d\n",
327 target_id);
Amol Jadi0c04df82011-10-14 17:40:21 -0700328
Ajay Dudanib01e5062011-12-03 23:23:42 -0800329 ASSERT(0);
Amol Jadi0c04df82011-10-14 17:40:21 -0700330 }
Amol Jadic52c8a32011-07-12 11:27:04 -0700331}
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700332
Amol Jadi5c61a952012-05-04 17:05:35 -0700333/* Detect the target type */
334void target_detect(struct board_data *board)
335{
336 uint32_t platform;
337 uint32_t platform_hw;
338 uint32_t target_id;
339
340 platform = board->platform;
341 platform_hw = board->platform_hw;
342
343 /* Detect the board we are running on */
Neeti Desai6e015252012-08-13 13:22:37 -0700344 if ((platform == MSM8960) || (platform == MSM8960AB) ||
345 (platform == APQ8060AB) || (platform == MSM8260AB) ||
346 (platform == MSM8660AB) ||(platform == MSM8660A) ||
347 (platform == MSM8260A) || (platform == APQ8060A)) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700348 switch (platform_hw) {
349 case HW_PLATFORM_SURF:
350 target_id = LINUX_MACHTYPE_8960_CDP;
351 break;
352 case HW_PLATFORM_MTP:
353 target_id = LINUX_MACHTYPE_8960_MTP;
354 break;
355 case HW_PLATFORM_FLUID:
356 target_id = LINUX_MACHTYPE_8960_FLUID;
357 break;
358 case HW_PLATFORM_LIQUID:
359 target_id = LINUX_MACHTYPE_8960_LIQUID;
360 break;
361 default:
362 target_id = LINUX_MACHTYPE_8960_CDP;
363 }
David Ng0f56e932013-02-12 18:11:56 -0800364 } else if ((platform == MSM8130) ||
365 (platform == MSM8130AA) || (platform == MSM8130AB) ||
366 (platform == MSM8230) || (platform == MSM8630) ||
Neeti Desai5ccd8642012-07-17 12:43:43 -0700367 (platform == MSM8930) || (platform == MSM8230AA) ||
368 (platform == MSM8630AA) || (platform == MSM8930AA) ||
Amol Jadi6d913742012-10-16 12:12:23 -0700369 (platform == MSM8930AB) || (platform == MSM8630AB) ||
370 (platform == MSM8230AB) || (platform == APQ8030AB) ||
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530371 (platform == APQ8030) || platform == APQ8030AA) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700372 switch (platform_hw) {
373 case HW_PLATFORM_SURF:
374 target_id = LINUX_MACHTYPE_8930_CDP;
375 break;
376 case HW_PLATFORM_MTP:
377 target_id = LINUX_MACHTYPE_8930_MTP;
378 break;
379 case HW_PLATFORM_FLUID:
380 target_id = LINUX_MACHTYPE_8930_FLUID;
381 break;
Aparna Mallavarapu9711d992013-03-04 16:49:21 +0530382 case HW_PLATFORM_QRD:
383 target_id = LINUX_MACHTYPE_8930_EVT;
384 break;
Amol Jadi5c61a952012-05-04 17:05:35 -0700385 default:
386 target_id = LINUX_MACHTYPE_8930_CDP;
387 }
Aparna Mallavarapu2b4b41a2013-02-19 18:56:06 +0530388 } else if ((platform == MSM8227) || (platform == MSM8627) ||
389 (platform == MSM8227AA) || (platform == MSM8627AA)) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700390 switch (platform_hw) {
391 case HW_PLATFORM_SURF:
392 target_id = LINUX_MACHTYPE_8627_CDP;
393 break;
394 case HW_PLATFORM_MTP:
395 target_id = LINUX_MACHTYPE_8627_MTP;
396 break;
397 default:
398 target_id = LINUX_MACHTYPE_8627_CDP;
399 }
400 } else if (platform == MPQ8064) {
401 switch (platform_hw) {
402 case HW_PLATFORM_SURF:
403 target_id = LINUX_MACHTYPE_8064_MPQ_CDP;
404 break;
405 case HW_PLATFORM_HRD:
Amol Jadi0d501382012-05-24 11:16:41 -0700406 target_id = LINUX_MACHTYPE_8064_MPQ_HRD;
Amol Jadi5c61a952012-05-04 17:05:35 -0700407 break;
408 case HW_PLATFORM_DTV:
Amol Jadi0d501382012-05-24 11:16:41 -0700409 target_id = LINUX_MACHTYPE_8064_MPQ_DTV;
Amol Jadi5c61a952012-05-04 17:05:35 -0700410 break;
Aparna Mallavarapu2715be02013-02-05 19:24:10 +0530411 case HW_PLATFORM_DMA:
412 target_id = LINUX_MACHTYPE_8064_MPQ_DMA;
413 break;
Amol Jadi5c61a952012-05-04 17:05:35 -0700414 default:
415 target_id = LINUX_MACHTYPE_8064_MPQ_CDP;
416 }
Aparna Mallavarapu2269a2f2013-01-07 19:44:48 +0530417 } else if ((platform == APQ8064) || (platform == APQ8064AA)
418 || (platform == APQ8064AB)) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700419 switch (platform_hw) {
420 case HW_PLATFORM_SURF:
421 target_id = LINUX_MACHTYPE_8064_CDP;
422 break;
423 case HW_PLATFORM_MTP:
424 target_id = LINUX_MACHTYPE_8064_MTP;
425 break;
426 case HW_PLATFORM_LIQUID:
427 target_id = LINUX_MACHTYPE_8064_LIQUID;
428 break;
V S Ramanjaneya Kumar Tc633fe12013-01-08 14:55:54 -0500429 case HW_PLATFORM_BTS:
430 target_id = LINUX_MACHTYPE_8064_EP;
431 break;
Amol Jadi5c61a952012-05-04 17:05:35 -0700432 default:
433 target_id = LINUX_MACHTYPE_8064_CDP;
434 }
435 } else {
436 dprintf(CRITICAL, "platform (%d) is not identified.\n",
437 platform);
438 ASSERT(0);
439 }
440 board->target = target_id;
441}
442
443/* Detect the modem type */
444void target_baseband_detect(struct board_data *board)
445{
446 uint32_t baseband;
447 uint32_t platform;
448 uint32_t platform_subtype;
449
450 platform = board->platform;
451 platform_subtype = board->platform_subtype;
452
453 /* Check for baseband variants. Default to MSM */
454 if (platform_subtype == HW_PLATFORM_SUBTYPE_MDM)
455 baseband = BASEBAND_MDM;
456 else if (platform_subtype == HW_PLATFORM_SUBTYPE_SGLTE)
457 baseband = BASEBAND_SGLTE;
Channagoud Kadabi141f2982012-10-31 11:23:02 +0530458 else if (platform_subtype == HW_PLATFORM_SUBTYPE_DSDA)
459 baseband = BASEBAND_DSDA;
Amol Jadi2a15a272013-01-22 12:03:36 -0800460 else if (platform_subtype == HW_PLATFORM_SUBTYPE_DSDA2)
461 baseband = BASEBAND_DSDA2;
sundarajan srinivasan6e3466a2013-03-04 15:47:22 -0800462 else if (platform_subtype == HW_PLATFORM_SUBTYPE_SGLTE2)
463 baseband = BASEBAND_SGLTE2;
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530464 else {
465 switch(platform) {
466 case APQ8060:
467 case APQ8064:
Aparna Mallavarapu2269a2f2013-01-07 19:44:48 +0530468 case APQ8064AA:
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530469 case APQ8064AB:
470 case APQ8030AB:
471 case MPQ8064:
472 case APQ8030:
473 case APQ8030AA:
474 baseband = BASEBAND_APQ;
475 break;
476 default:
477 baseband = BASEBAND_MSM;
478 };
479 }
Amol Jadi5c61a952012-05-04 17:05:35 -0700480 board->baseband = baseband;
481}
482
Amol Jadi6834f1a2012-06-29 14:42:59 -0700483/* Returns 1 if target supports continuous splash screen. */
484int target_cont_splash_screen()
485{
486 switch(board_platform_id())
487 {
488 case MSM8960:
Neeti Desai6e015252012-08-13 13:22:37 -0700489 case MSM8960AB:
490 case APQ8060AB:
491 case MSM8260AB:
492 case MSM8660AB:
Amol Jadi6834f1a2012-06-29 14:42:59 -0700493 return 1;
494
495 default:
496 return 0;
497 }
498}
Amol Jadida118b92012-07-06 19:53:18 -0700499
500void apq8064_ext_3p3V_enable()
501{
502 /* Configure GPIO for output */
503 gpio_tlmm_config(77, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_8MA, GPIO_ENABLE);
504
505 /* Output High */
506 gpio_set(77, 2);
507}
508
509/* Do target specific usb initialization */
510void target_usb_init(void)
511{
512 if(board_target_id() == LINUX_MACHTYPE_8064_LIQUID)
513 {
514 apq8064_ext_3p3V_enable();
515 }
516}
Channagoud Kadabi7d84dd62012-08-24 21:20:56 +0530517
518int target_mmc_bus_width()
519{
520 return MMC_BOOT_BUS_WIDTH_8_BIT;
521}