blob: e1f67e1939215dc8f05f683cf7c8270042da0467 [file] [log] [blame]
Amol Jadica4f4c92011-01-13 20:19:34 -08001/*
2 * Copyright (c) 2009, Google Inc.
3 * All rights reserved.
Shashank Mittalb3be37f2012-01-16 22:59:49 -08004 * Copyright (c) 2009-2012, Code Aurora Forum. 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
Neeti Desai6e015252012-08-13 13:22:37 -0700110 if((platform_id == MSM8960) ||
111 (platform_id == MSM8960AB) ||
112 (platform_id == APQ8060AB) ||
113 (platform_id == MSM8260AB) ||
114 (platform_id == MSM8660AB))
Shashank Mittalb3be37f2012-01-16 22:59:49 -0800115 {
116 msm8960_keypad_init();
117 }
Neeti Desai5ccd8642012-07-17 12:43:43 -0700118 else if((platform_id == MSM8230) ||
119 (platform_id == MSM8630) ||
120 (platform_id == MSM8930) ||
121 (platform_id == MSM8230AA) ||
122 (platform_id == MSM8630AA) ||
123 (platform_id == MSM8930AA))
Shashank Mittalb3be37f2012-01-16 22:59:49 -0800124 {
125 msm8930_keypad_init();
126 }
Amol Jadi6d7f1d22012-04-13 15:33:41 -0700127 else if( (platform_id == APQ8064) ||
128 (platform_id == MPQ8064))
Amol Jadi76071672012-02-03 12:19:36 -0800129 {
130 apq8064_keypad_init();
131 }
Amol Jadi6db9fe32011-04-15 17:19:00 -0700132
Kinson Chikce306ff2011-07-08 15:23:33 -0700133 /* Display splash screen if enabled */
134#if DISPLAY_SPLASH_SCREEN
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700135 display_init();
136 dprintf(SPEW, "Diplay initialized\n");
Kinson Chikce306ff2011-07-08 15:23:33 -0700137#endif
138
Neeti Desai6e015252012-08-13 13:22:37 -0700139 if ((platform_id == MSM8960) || (platform_id == MSM8960AB) ||
140 (platform_id == APQ8060AB) || (platform_id == MSM8260AB) ||
141 (platform_id == MSM8660AB) || (platform_id == MSM8660A) ||
142 (platform_id == MSM8260A) || (platform_id == APQ8060A))
Deepa Dinamani5e5c21a2012-02-16 18:59:57 -0800143 /* Enable Hardware CE */
144 platform_ce_type = CRYPTO_ENGINE_TYPE_HW;
145
Shashank Mittalda89a682011-03-14 19:18:38 -0700146 /* Trying Slot 1 first */
147 slot = 1;
Ajay Dudanib01e5062011-12-03 23:23:42 -0800148 base_addr = mmc_sdc_base[slot - 1];
149 if (mmc_boot_main(slot, base_addr)) {
Shashank Mittalda89a682011-03-14 19:18:38 -0700150 /* Trying Slot 3 next */
151 slot = 3;
Ajay Dudanib01e5062011-12-03 23:23:42 -0800152 base_addr = mmc_sdc_base[slot - 1];
153 if (mmc_boot_main(slot, base_addr)) {
Shashank Mittalda89a682011-03-14 19:18:38 -0700154 dprintf(CRITICAL, "mmc init failed!");
155 ASSERT(0);
156 }
Amol Jadica4f4c92011-01-13 20:19:34 -0800157 }
158}
159
160unsigned board_machtype(void)
161{
Shashank Mittala635abf2012-03-28 18:11:43 -0700162 return board_target_id();
Amol Jadia63aaff2012-02-01 15:51:50 -0800163}
164
Deepa Dinamani5e5c21a2012-02-16 18:59:57 -0800165crypto_engine_type board_ce_type(void)
166{
167 return platform_ce_type;
168}
169
Ajay Dudani403bc492011-09-30 16:17:21 -0700170unsigned target_baseband()
171{
Shashank Mittala635abf2012-03-28 18:11:43 -0700172 return board_baseband();
Ajay Dudani403bc492011-09-30 16:17:21 -0700173}
174
Ajay Dudani23a18c32011-11-18 08:37:01 -0800175static unsigned target_check_power_on_reason(void)
176{
177 unsigned power_on_status = 0;
178 unsigned int status_len = sizeof(power_on_status);
179 unsigned smem_status;
180
181 smem_status = smem_read_alloc_entry(SMEM_POWER_ON_STATUS_INFO,
Ajay Dudanib01e5062011-12-03 23:23:42 -0800182 &power_on_status, status_len);
Ajay Dudani23a18c32011-11-18 08:37:01 -0800183
Ajay Dudanib01e5062011-12-03 23:23:42 -0800184 if (smem_status) {
185 dprintf(CRITICAL,
186 "ERROR: unable to read shared memory for power on reason\n");
Ajay Dudani23a18c32011-11-18 08:37:01 -0800187 }
Ajay Dudanib01e5062011-12-03 23:23:42 -0800188 dprintf(INFO, "Power on reason %u\n", power_on_status);
Ajay Dudani23a18c32011-11-18 08:37:01 -0800189 return power_on_status;
190}
191
Amol Jadica4f4c92011-01-13 20:19:34 -0800192void reboot_device(unsigned reboot_reason)
193{
Trevor Bourgeta5c4a242011-11-08 15:37:08 -0800194 writel(reboot_reason, RESTART_REASON_ADDR);
195
Shashank Mittal6239b162011-06-28 17:59:33 -0700196 /* Actually reset the chip */
Shashank Mittal39503262011-07-19 11:41:35 -0700197 pm8921_config_reset_pwr_off(1);
Shashank Mittal6239b162011-06-28 17:59:33 -0700198 writel(0, MSM_PSHOLD_CTL_SU);
Amol Jadica4f4c92011-01-13 20:19:34 -0800199 mdelay(10000);
Shashank Mittal39503262011-07-19 11:41:35 -0700200
Ajay Dudanib01e5062011-12-03 23:23:42 -0800201 dprintf(CRITICAL, "PSHOLD failed, trying watchdog reset\n");
Trevor Bourgetcc278352011-11-08 15:49:30 -0800202 writel(1, MSM_WDT0_RST);
203 writel(0, MSM_WDT0_EN);
204 writel(0x31F3, MSM_WDT0_BT);
205 writel(3, MSM_WDT0_EN);
206 dmb();
207 writel(3, MSM_TCSR_BASE + TCSR_WDOG_CFG);
208 mdelay(10000);
209
Ajay Dudanib01e5062011-12-03 23:23:42 -0800210 dprintf(CRITICAL, "Rebooting failed\n");
Amol Jadica4f4c92011-01-13 20:19:34 -0800211}
212
213unsigned check_reboot_mode(void)
214{
215 unsigned restart_reason = 0;
Amol Jadica4f4c92011-01-13 20:19:34 -0800216
217 /* Read reboot reason and scrub it */
Shashank Mittal0207df72011-06-15 15:20:43 -0700218 restart_reason = readl(RESTART_REASON_ADDR);
219 writel(0x00, RESTART_REASON_ADDR);
Amol Jadica4f4c92011-01-13 20:19:34 -0800220
221 return restart_reason;
222}
223
Ajay Dudani23a18c32011-11-18 08:37:01 -0800224unsigned target_pause_for_battery_charge(void)
225{
Ajay Dudaniba822332011-11-25 13:37:31 -0800226 if (target_check_power_on_reason() == PWR_ON_EVENT_WALL_CHG)
Ajay Dudani23a18c32011-11-18 08:37:01 -0800227 return 1;
228
229 return 0;
230}
231
Ajay Dudani12091e22011-05-06 17:13:23 -0700232void target_serialno(unsigned char *buf)
233{
234 unsigned int serialno;
Ajay Dudanib01e5062011-12-03 23:23:42 -0800235 if (target_is_emmc_boot()) {
236 serialno = mmc_get_psn();
237 snprintf((char *)buf, 13, "%x", serialno);
Ajay Dudani12091e22011-05-06 17:13:23 -0700238 }
239}
240
Amol Jadica4f4c92011-01-13 20:19:34 -0800241void target_battery_charging_enable(unsigned enable, unsigned disconnect)
242{
243}
Amol Jadi57abe4c2011-05-24 15:47:27 -0700244
245/* Do any target specific intialization needed before entering fastboot mode */
246void target_fastboot_init(void)
247{
248 /* Set the BOOT_DONE flag in PM8921 */
249 pm8921_boot_done();
250}
Amol Jadic52c8a32011-07-12 11:27:04 -0700251
Amol Jadia63aaff2012-02-01 15:51:50 -0800252void target_uart_init(void)
Amol Jadic52c8a32011-07-12 11:27:04 -0700253{
Shashank Mittala635abf2012-03-28 18:11:43 -0700254 unsigned target_id = board_machtype();
255
Ajay Dudanib01e5062011-12-03 23:23:42 -0800256 switch (target_id) {
257 case LINUX_MACHTYPE_8960_SIM:
258 case LINUX_MACHTYPE_8960_RUMI3:
259 case LINUX_MACHTYPE_8960_CDP:
260 case LINUX_MACHTYPE_8960_MTP:
261 case LINUX_MACHTYPE_8960_FLUID:
262 case LINUX_MACHTYPE_8960_APQ:
263 case LINUX_MACHTYPE_8960_LIQUID:
Amol Jadi0c04df82011-10-14 17:40:21 -0700264
Neeti Desai46940292012-07-17 14:28:35 -0700265 if(board_baseband() == BASEBAND_SGLTE)
266 {
267 uart_dm_init(8, 0x1A000000, 0x1A040000);;
268 }
269 else
270 {
271 uart_dm_init(5, 0x16400000, 0x16440000);
272 }
Amol Jadia63aaff2012-02-01 15:51:50 -0800273 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700274
Ajay Dudanib01e5062011-12-03 23:23:42 -0800275 case LINUX_MACHTYPE_8930_CDP:
276 case LINUX_MACHTYPE_8930_MTP:
277 case LINUX_MACHTYPE_8930_FLUID:
Amol Jadi0c04df82011-10-14 17:40:21 -0700278
Amol Jadia63aaff2012-02-01 15:51:50 -0800279 uart_dm_init(5, 0x16400000, 0x16440000);
280 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700281
Ajay Dudanib01e5062011-12-03 23:23:42 -0800282 case LINUX_MACHTYPE_8064_SIM:
283 case LINUX_MACHTYPE_8064_RUMI3:
Amol Jadia63aaff2012-02-01 15:51:50 -0800284 uart_dm_init(3, 0x16200000, 0x16240000);
285 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700286
Amol Jadia63aaff2012-02-01 15:51:50 -0800287 case LINUX_MACHTYPE_8064_CDP:
288 case LINUX_MACHTYPE_8064_MTP:
289 case LINUX_MACHTYPE_8064_LIQUID:
290 uart_dm_init(7, 0x16600000, 0x16640000);
291 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700292
Amol Jadic4263042012-03-29 16:18:11 -0700293 case LINUX_MACHTYPE_8064_MPQ_CDP:
Amol Jadi0d501382012-05-24 11:16:41 -0700294 case LINUX_MACHTYPE_8064_MPQ_HRD:
295 case LINUX_MACHTYPE_8064_MPQ_DTV:
Amol Jadic4263042012-03-29 16:18:11 -0700296 uart_dm_init(5, 0x1A200000, 0x1A240000);
297 break;
298
Ajay Dudanib01e5062011-12-03 23:23:42 -0800299 case LINUX_MACHTYPE_8627_CDP:
300 case LINUX_MACHTYPE_8627_MTP:
Shashank Mittal26309ed2011-12-01 16:05:45 -0800301
Amol Jadia63aaff2012-02-01 15:51:50 -0800302 uart_dm_init(5, 0x16400000, 0x16440000);
303 break;
Shashank Mittal26309ed2011-12-01 16:05:45 -0800304
Ajay Dudanib01e5062011-12-03 23:23:42 -0800305 default:
306 dprintf(CRITICAL, "uart gsbi not defined for target: %d\n",
307 target_id);
Amol Jadi0c04df82011-10-14 17:40:21 -0700308
Ajay Dudanib01e5062011-12-03 23:23:42 -0800309 ASSERT(0);
Amol Jadi0c04df82011-10-14 17:40:21 -0700310 }
Amol Jadic52c8a32011-07-12 11:27:04 -0700311}
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700312
Amol Jadi5c61a952012-05-04 17:05:35 -0700313/* Detect the target type */
314void target_detect(struct board_data *board)
315{
316 uint32_t platform;
317 uint32_t platform_hw;
318 uint32_t target_id;
319
320 platform = board->platform;
321 platform_hw = board->platform_hw;
322
323 /* Detect the board we are running on */
Neeti Desai6e015252012-08-13 13:22:37 -0700324 if ((platform == MSM8960) || (platform == MSM8960AB) ||
325 (platform == APQ8060AB) || (platform == MSM8260AB) ||
326 (platform == MSM8660AB) ||(platform == MSM8660A) ||
327 (platform == MSM8260A) || (platform == APQ8060A)) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700328 switch (platform_hw) {
329 case HW_PLATFORM_SURF:
330 target_id = LINUX_MACHTYPE_8960_CDP;
331 break;
332 case HW_PLATFORM_MTP:
333 target_id = LINUX_MACHTYPE_8960_MTP;
334 break;
335 case HW_PLATFORM_FLUID:
336 target_id = LINUX_MACHTYPE_8960_FLUID;
337 break;
338 case HW_PLATFORM_LIQUID:
339 target_id = LINUX_MACHTYPE_8960_LIQUID;
340 break;
341 default:
342 target_id = LINUX_MACHTYPE_8960_CDP;
343 }
Neeti Desai5ccd8642012-07-17 12:43:43 -0700344 } else if ((platform == MSM8230) || (platform == MSM8630) ||
345 (platform == MSM8930) || (platform == MSM8230AA) ||
346 (platform == MSM8630AA) || (platform == MSM8930AA) ||
347 (platform == APQ8030)) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700348 switch (platform_hw) {
349 case HW_PLATFORM_SURF:
350 target_id = LINUX_MACHTYPE_8930_CDP;
351 break;
352 case HW_PLATFORM_MTP:
353 target_id = LINUX_MACHTYPE_8930_MTP;
354 break;
355 case HW_PLATFORM_FLUID:
356 target_id = LINUX_MACHTYPE_8930_FLUID;
357 break;
358 default:
359 target_id = LINUX_MACHTYPE_8930_CDP;
360 }
361 } else if ((platform == MSM8227) || (platform == MSM8627)) {
362 switch (platform_hw) {
363 case HW_PLATFORM_SURF:
364 target_id = LINUX_MACHTYPE_8627_CDP;
365 break;
366 case HW_PLATFORM_MTP:
367 target_id = LINUX_MACHTYPE_8627_MTP;
368 break;
369 default:
370 target_id = LINUX_MACHTYPE_8627_CDP;
371 }
372 } else if (platform == MPQ8064) {
373 switch (platform_hw) {
374 case HW_PLATFORM_SURF:
375 target_id = LINUX_MACHTYPE_8064_MPQ_CDP;
376 break;
377 case HW_PLATFORM_HRD:
Amol Jadi0d501382012-05-24 11:16:41 -0700378 target_id = LINUX_MACHTYPE_8064_MPQ_HRD;
Amol Jadi5c61a952012-05-04 17:05:35 -0700379 break;
380 case HW_PLATFORM_DTV:
Amol Jadi0d501382012-05-24 11:16:41 -0700381 target_id = LINUX_MACHTYPE_8064_MPQ_DTV;
Amol Jadi5c61a952012-05-04 17:05:35 -0700382 break;
383 default:
384 target_id = LINUX_MACHTYPE_8064_MPQ_CDP;
385 }
386 } else if ((platform == APQ8064)) {
387 switch (platform_hw) {
388 case HW_PLATFORM_SURF:
389 target_id = LINUX_MACHTYPE_8064_CDP;
390 break;
391 case HW_PLATFORM_MTP:
392 target_id = LINUX_MACHTYPE_8064_MTP;
393 break;
394 case HW_PLATFORM_LIQUID:
395 target_id = LINUX_MACHTYPE_8064_LIQUID;
396 break;
397 default:
398 target_id = LINUX_MACHTYPE_8064_CDP;
399 }
400 } else {
401 dprintf(CRITICAL, "platform (%d) is not identified.\n",
402 platform);
403 ASSERT(0);
404 }
405 board->target = target_id;
406}
407
408/* Detect the modem type */
409void target_baseband_detect(struct board_data *board)
410{
411 uint32_t baseband;
412 uint32_t platform;
413 uint32_t platform_subtype;
414
415 platform = board->platform;
416 platform_subtype = board->platform_subtype;
417
418 /* Check for baseband variants. Default to MSM */
419 if (platform_subtype == HW_PLATFORM_SUBTYPE_MDM)
420 baseband = BASEBAND_MDM;
421 else if (platform_subtype == HW_PLATFORM_SUBTYPE_SGLTE)
422 baseband = BASEBAND_SGLTE;
423 else if (platform == APQ8060)
424 baseband = BASEBAND_APQ;
425 else if (platform == APQ8064)
426 baseband = BASEBAND_APQ;
427 else if (platform == MPQ8064)
428 baseband = BASEBAND_APQ;
429 else
430 baseband = BASEBAND_MSM;
431
432 board->baseband = baseband;
433}
434
Amol Jadi6834f1a2012-06-29 14:42:59 -0700435/* Returns 1 if target supports continuous splash screen. */
436int target_cont_splash_screen()
437{
438 switch(board_platform_id())
439 {
440 case MSM8960:
Neeti Desai6e015252012-08-13 13:22:37 -0700441 case MSM8960AB:
442 case APQ8060AB:
443 case MSM8260AB:
444 case MSM8660AB:
Amol Jadi6834f1a2012-06-29 14:42:59 -0700445 return 1;
446
447 default:
448 return 0;
449 }
450}
Amol Jadida118b92012-07-06 19:53:18 -0700451
452void apq8064_ext_3p3V_enable()
453{
454 /* Configure GPIO for output */
455 gpio_tlmm_config(77, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_8MA, GPIO_ENABLE);
456
457 /* Output High */
458 gpio_set(77, 2);
459}
460
461/* Do target specific usb initialization */
462void target_usb_init(void)
463{
464 if(board_target_id() == LINUX_MACHTYPE_8064_LIQUID)
465 {
466 apq8064_ext_3p3V_enable();
467 }
468}
Channagoud Kadabi7d84dd62012-08-24 21:20:56 +0530469
470int target_mmc_bus_width()
471{
472 return MMC_BOOT_BUS_WIDTH_8_BIT;
473}