blob: d0c15fc5c136ba6df52f9a0210b012619d088b6a [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
Neeti Desai46940292012-07-17 14:28:35 -0700279 if(board_baseband() == BASEBAND_SGLTE)
280 {
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:
Amol Jadi0c04df82011-10-14 17:40:21 -0700292
Amol Jadia63aaff2012-02-01 15:51:50 -0800293 uart_dm_init(5, 0x16400000, 0x16440000);
294 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700295
Ajay Dudanib01e5062011-12-03 23:23:42 -0800296 case LINUX_MACHTYPE_8064_SIM:
297 case LINUX_MACHTYPE_8064_RUMI3:
Amol Jadia63aaff2012-02-01 15:51:50 -0800298 uart_dm_init(3, 0x16200000, 0x16240000);
299 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700300
Amol Jadia63aaff2012-02-01 15:51:50 -0800301 case LINUX_MACHTYPE_8064_CDP:
302 case LINUX_MACHTYPE_8064_MTP:
303 case LINUX_MACHTYPE_8064_LIQUID:
304 uart_dm_init(7, 0x16600000, 0x16640000);
305 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700306
V S Ramanjaneya Kumar Tc633fe12013-01-08 14:55:54 -0500307 case LINUX_MACHTYPE_8064_EP:
308 uart_dm_init(2, 0x12480000, 0x12490000);
309 break;
310
Amol Jadic4263042012-03-29 16:18:11 -0700311 case LINUX_MACHTYPE_8064_MPQ_CDP:
Amol Jadi0d501382012-05-24 11:16:41 -0700312 case LINUX_MACHTYPE_8064_MPQ_HRD:
313 case LINUX_MACHTYPE_8064_MPQ_DTV:
Aparna Mallavarapu2715be02013-02-05 19:24:10 +0530314 case LINUX_MACHTYPE_8064_MPQ_DMA:
Amol Jadic4263042012-03-29 16:18:11 -0700315 uart_dm_init(5, 0x1A200000, 0x1A240000);
316 break;
317
Ajay Dudanib01e5062011-12-03 23:23:42 -0800318 case LINUX_MACHTYPE_8627_CDP:
319 case LINUX_MACHTYPE_8627_MTP:
Shashank Mittal26309ed2011-12-01 16:05:45 -0800320
Amol Jadia63aaff2012-02-01 15:51:50 -0800321 uart_dm_init(5, 0x16400000, 0x16440000);
322 break;
Shashank Mittal26309ed2011-12-01 16:05:45 -0800323
Ajay Dudanib01e5062011-12-03 23:23:42 -0800324 default:
325 dprintf(CRITICAL, "uart gsbi not defined for target: %d\n",
326 target_id);
Amol Jadi0c04df82011-10-14 17:40:21 -0700327
Ajay Dudanib01e5062011-12-03 23:23:42 -0800328 ASSERT(0);
Amol Jadi0c04df82011-10-14 17:40:21 -0700329 }
Amol Jadic52c8a32011-07-12 11:27:04 -0700330}
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700331
Amol Jadi5c61a952012-05-04 17:05:35 -0700332/* Detect the target type */
333void target_detect(struct board_data *board)
334{
335 uint32_t platform;
336 uint32_t platform_hw;
337 uint32_t target_id;
338
339 platform = board->platform;
340 platform_hw = board->platform_hw;
341
342 /* Detect the board we are running on */
Neeti Desai6e015252012-08-13 13:22:37 -0700343 if ((platform == MSM8960) || (platform == MSM8960AB) ||
344 (platform == APQ8060AB) || (platform == MSM8260AB) ||
345 (platform == MSM8660AB) ||(platform == MSM8660A) ||
346 (platform == MSM8260A) || (platform == APQ8060A)) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700347 switch (platform_hw) {
348 case HW_PLATFORM_SURF:
349 target_id = LINUX_MACHTYPE_8960_CDP;
350 break;
351 case HW_PLATFORM_MTP:
352 target_id = LINUX_MACHTYPE_8960_MTP;
353 break;
354 case HW_PLATFORM_FLUID:
355 target_id = LINUX_MACHTYPE_8960_FLUID;
356 break;
357 case HW_PLATFORM_LIQUID:
358 target_id = LINUX_MACHTYPE_8960_LIQUID;
359 break;
360 default:
361 target_id = LINUX_MACHTYPE_8960_CDP;
362 }
David Ng0f56e932013-02-12 18:11:56 -0800363 } else if ((platform == MSM8130) ||
364 (platform == MSM8130AA) || (platform == MSM8130AB) ||
365 (platform == MSM8230) || (platform == MSM8630) ||
Neeti Desai5ccd8642012-07-17 12:43:43 -0700366 (platform == MSM8930) || (platform == MSM8230AA) ||
367 (platform == MSM8630AA) || (platform == MSM8930AA) ||
Amol Jadi6d913742012-10-16 12:12:23 -0700368 (platform == MSM8930AB) || (platform == MSM8630AB) ||
369 (platform == MSM8230AB) || (platform == APQ8030AB) ||
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530370 (platform == APQ8030) || platform == APQ8030AA) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700371 switch (platform_hw) {
372 case HW_PLATFORM_SURF:
373 target_id = LINUX_MACHTYPE_8930_CDP;
374 break;
375 case HW_PLATFORM_MTP:
376 target_id = LINUX_MACHTYPE_8930_MTP;
377 break;
378 case HW_PLATFORM_FLUID:
379 target_id = LINUX_MACHTYPE_8930_FLUID;
380 break;
381 default:
382 target_id = LINUX_MACHTYPE_8930_CDP;
383 }
384 } else if ((platform == MSM8227) || (platform == MSM8627)) {
385 switch (platform_hw) {
386 case HW_PLATFORM_SURF:
387 target_id = LINUX_MACHTYPE_8627_CDP;
388 break;
389 case HW_PLATFORM_MTP:
390 target_id = LINUX_MACHTYPE_8627_MTP;
391 break;
392 default:
393 target_id = LINUX_MACHTYPE_8627_CDP;
394 }
395 } else if (platform == MPQ8064) {
396 switch (platform_hw) {
397 case HW_PLATFORM_SURF:
398 target_id = LINUX_MACHTYPE_8064_MPQ_CDP;
399 break;
400 case HW_PLATFORM_HRD:
Amol Jadi0d501382012-05-24 11:16:41 -0700401 target_id = LINUX_MACHTYPE_8064_MPQ_HRD;
Amol Jadi5c61a952012-05-04 17:05:35 -0700402 break;
403 case HW_PLATFORM_DTV:
Amol Jadi0d501382012-05-24 11:16:41 -0700404 target_id = LINUX_MACHTYPE_8064_MPQ_DTV;
Amol Jadi5c61a952012-05-04 17:05:35 -0700405 break;
Aparna Mallavarapu2715be02013-02-05 19:24:10 +0530406 case HW_PLATFORM_DMA:
407 target_id = LINUX_MACHTYPE_8064_MPQ_DMA;
408 break;
Amol Jadi5c61a952012-05-04 17:05:35 -0700409 default:
410 target_id = LINUX_MACHTYPE_8064_MPQ_CDP;
411 }
Aparna Mallavarapu2269a2f2013-01-07 19:44:48 +0530412 } else if ((platform == APQ8064) || (platform == APQ8064AA)
413 || (platform == APQ8064AB)) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700414 switch (platform_hw) {
415 case HW_PLATFORM_SURF:
416 target_id = LINUX_MACHTYPE_8064_CDP;
417 break;
418 case HW_PLATFORM_MTP:
419 target_id = LINUX_MACHTYPE_8064_MTP;
420 break;
421 case HW_PLATFORM_LIQUID:
422 target_id = LINUX_MACHTYPE_8064_LIQUID;
423 break;
V S Ramanjaneya Kumar Tc633fe12013-01-08 14:55:54 -0500424 case HW_PLATFORM_BTS:
425 target_id = LINUX_MACHTYPE_8064_EP;
426 break;
Amol Jadi5c61a952012-05-04 17:05:35 -0700427 default:
428 target_id = LINUX_MACHTYPE_8064_CDP;
429 }
430 } else {
431 dprintf(CRITICAL, "platform (%d) is not identified.\n",
432 platform);
433 ASSERT(0);
434 }
435 board->target = target_id;
436}
437
438/* Detect the modem type */
439void target_baseband_detect(struct board_data *board)
440{
441 uint32_t baseband;
442 uint32_t platform;
443 uint32_t platform_subtype;
444
445 platform = board->platform;
446 platform_subtype = board->platform_subtype;
447
448 /* Check for baseband variants. Default to MSM */
449 if (platform_subtype == HW_PLATFORM_SUBTYPE_MDM)
450 baseband = BASEBAND_MDM;
451 else if (platform_subtype == HW_PLATFORM_SUBTYPE_SGLTE)
452 baseband = BASEBAND_SGLTE;
Channagoud Kadabi141f2982012-10-31 11:23:02 +0530453 else if (platform_subtype == HW_PLATFORM_SUBTYPE_DSDA)
454 baseband = BASEBAND_DSDA;
Amol Jadi2a15a272013-01-22 12:03:36 -0800455 else if (platform_subtype == HW_PLATFORM_SUBTYPE_DSDA2)
456 baseband = BASEBAND_DSDA2;
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530457 else {
458 switch(platform) {
459 case APQ8060:
460 case APQ8064:
Aparna Mallavarapu2269a2f2013-01-07 19:44:48 +0530461 case APQ8064AA:
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530462 case APQ8064AB:
463 case APQ8030AB:
464 case MPQ8064:
465 case APQ8030:
466 case APQ8030AA:
467 baseband = BASEBAND_APQ;
468 break;
469 default:
470 baseband = BASEBAND_MSM;
471 };
472 }
Amol Jadi5c61a952012-05-04 17:05:35 -0700473 board->baseband = baseband;
474}
475
Amol Jadi6834f1a2012-06-29 14:42:59 -0700476/* Returns 1 if target supports continuous splash screen. */
477int target_cont_splash_screen()
478{
479 switch(board_platform_id())
480 {
481 case MSM8960:
Neeti Desai6e015252012-08-13 13:22:37 -0700482 case MSM8960AB:
483 case APQ8060AB:
484 case MSM8260AB:
485 case MSM8660AB:
Amol Jadi6834f1a2012-06-29 14:42:59 -0700486 return 1;
487
488 default:
489 return 0;
490 }
491}
Amol Jadida118b92012-07-06 19:53:18 -0700492
493void apq8064_ext_3p3V_enable()
494{
495 /* Configure GPIO for output */
496 gpio_tlmm_config(77, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_8MA, GPIO_ENABLE);
497
498 /* Output High */
499 gpio_set(77, 2);
500}
501
502/* Do target specific usb initialization */
503void target_usb_init(void)
504{
505 if(board_target_id() == LINUX_MACHTYPE_8064_LIQUID)
506 {
507 apq8064_ext_3p3V_enable();
508 }
509}
Channagoud Kadabi7d84dd62012-08-24 21:20:56 +0530510
511int target_mmc_bus_width()
512{
513 return MMC_BOOT_BUS_WIDTH_8_BIT;
514}