blob: f0514c78a6a22a5e6fabe551c637f9928b71a84f [file] [log] [blame]
Amol Jadica4f4c92011-01-13 20:19:34 -08001/*
2 * Copyright (c) 2009, Google Inc.
3 * All rights reserved.
Aravind Venkateswarandd50c1a2014-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
Aravind Venkateswarandd50c1a2014-02-25 14:42:43 -080093void target_uninit(void)
94{
95 target_display_shutdown();
96}
97
Amol Jadica4f4c92011-01-13 20:19:34 -080098void target_init(void)
99{
Shashank Mittalda89a682011-03-14 19:18:38 -0700100 unsigned base_addr;
101 unsigned char slot;
Shashank Mittala635abf2012-03-28 18:11:43 -0700102 unsigned platform_id = board_platform_id();
Amol Jadi0c04df82011-10-14 17:40:21 -0700103
Amol Jadica4f4c92011-01-13 20:19:34 -0800104 dprintf(INFO, "target_init()\n");
105
Amol Jadi57abe4c2011-05-24 15:47:27 -0700106 /* Initialize PMIC driver */
Ajay Dudanib01e5062011-12-03 23:23:42 -0800107 pmic.read = (pm8921_read_func) & pa1_ssbi2_read_bytes;
108 pmic.write = (pm8921_write_func) & pa1_ssbi2_write_bytes;
Amol Jadi57abe4c2011-05-24 15:47:27 -0700109
110 pm8921_init(&pmic);
Amol Jadi0c04df82011-10-14 17:40:21 -0700111
Amol Jadi6db9fe32011-04-15 17:19:00 -0700112 /* Keypad init */
113 keys_init();
Shashank Mittalb3be37f2012-01-16 22:59:49 -0800114
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530115 switch(platform_id) {
116 case MSM8960:
117 case MSM8960AB:
118 case APQ8060AB:
119 case MSM8260AB:
120 case MSM8660AB:
Shashank Mittalb3be37f2012-01-16 22:59:49 -0800121 msm8960_keypad_init();
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530122 break;
David Ng0f56e932013-02-12 18:11:56 -0800123 case MSM8130:
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530124 case MSM8230:
125 case MSM8630:
126 case MSM8930:
David Ng0f56e932013-02-12 18:11:56 -0800127 case MSM8130AA:
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530128 case MSM8230AA:
129 case MSM8630AA:
130 case MSM8930AA:
131 case MSM8930AB:
132 case MSM8630AB:
133 case MSM8230AB:
David Ng0f56e932013-02-12 18:11:56 -0800134 case MSM8130AB:
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530135 case APQ8030AB:
136 case APQ8030:
137 case APQ8030AA:
Shashank Mittalb3be37f2012-01-16 22:59:49 -0800138 msm8930_keypad_init();
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530139 break;
140 case APQ8064:
141 case MPQ8064:
Aparna Mallavarapu2269a2f2013-01-07 19:44:48 +0530142 case APQ8064AA:
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530143 case APQ8064AB:
Amol Jadi76071672012-02-03 12:19:36 -0800144 apq8064_keypad_init();
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530145 break;
146 default:
147 dprintf(CRITICAL,"Keyboard is not supported for platform: %d\n",platform_id);
148 };
Amol Jadi6db9fe32011-04-15 17:19:00 -0700149
Kinson Chikce306ff2011-07-08 15:23:33 -0700150 /* Display splash screen if enabled */
151#if DISPLAY_SPLASH_SCREEN
Aravind Venkateswarandd50c1a2014-02-25 14:42:43 -0800152 target_display_init();
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700153 dprintf(SPEW, "Diplay initialized\n");
Kinson Chikce306ff2011-07-08 15:23:33 -0700154#endif
155
Neeti Desai6e015252012-08-13 13:22:37 -0700156 if ((platform_id == MSM8960) || (platform_id == MSM8960AB) ||
157 (platform_id == APQ8060AB) || (platform_id == MSM8260AB) ||
158 (platform_id == MSM8660AB) || (platform_id == MSM8660A) ||
Neeti Desai992ed6c2012-09-20 11:59:12 -0700159 (platform_id == MSM8260A) || (platform_id == APQ8060A) ||
Aparna Mallavarapu2269a2f2013-01-07 19:44:48 +0530160 (platform_id == APQ8064) || (platform_id == APQ8064AA) ||
161 (platform_id == APQ8064AB))
Deepa Dinamani5e5c21a2012-02-16 18:59:57 -0800162 /* Enable Hardware CE */
163 platform_ce_type = CRYPTO_ENGINE_TYPE_HW;
164
Shashank Mittalda89a682011-03-14 19:18:38 -0700165 /* Trying Slot 1 first */
166 slot = 1;
Ajay Dudanib01e5062011-12-03 23:23:42 -0800167 base_addr = mmc_sdc_base[slot - 1];
168 if (mmc_boot_main(slot, base_addr)) {
Shashank Mittalda89a682011-03-14 19:18:38 -0700169 /* Trying Slot 3 next */
170 slot = 3;
Ajay Dudanib01e5062011-12-03 23:23:42 -0800171 base_addr = mmc_sdc_base[slot - 1];
172 if (mmc_boot_main(slot, base_addr)) {
Shashank Mittalda89a682011-03-14 19:18:38 -0700173 dprintf(CRITICAL, "mmc init failed!");
174 ASSERT(0);
175 }
Amol Jadica4f4c92011-01-13 20:19:34 -0800176 }
177}
178
179unsigned board_machtype(void)
180{
Shashank Mittala635abf2012-03-28 18:11:43 -0700181 return board_target_id();
Amol Jadia63aaff2012-02-01 15:51:50 -0800182}
183
Deepa Dinamani5e5c21a2012-02-16 18:59:57 -0800184crypto_engine_type board_ce_type(void)
185{
186 return platform_ce_type;
187}
188
Ajay Dudani403bc492011-09-30 16:17:21 -0700189unsigned target_baseband()
190{
Shashank Mittala635abf2012-03-28 18:11:43 -0700191 return board_baseband();
Ajay Dudani403bc492011-09-30 16:17:21 -0700192}
193
Ajay Dudani23a18c32011-11-18 08:37:01 -0800194static unsigned target_check_power_on_reason(void)
195{
196 unsigned power_on_status = 0;
197 unsigned int status_len = sizeof(power_on_status);
198 unsigned smem_status;
199
200 smem_status = smem_read_alloc_entry(SMEM_POWER_ON_STATUS_INFO,
Ajay Dudanib01e5062011-12-03 23:23:42 -0800201 &power_on_status, status_len);
Ajay Dudani23a18c32011-11-18 08:37:01 -0800202
Ajay Dudanib01e5062011-12-03 23:23:42 -0800203 if (smem_status) {
204 dprintf(CRITICAL,
205 "ERROR: unable to read shared memory for power on reason\n");
Ajay Dudani23a18c32011-11-18 08:37:01 -0800206 }
Ajay Dudanib01e5062011-12-03 23:23:42 -0800207 dprintf(INFO, "Power on reason %u\n", power_on_status);
Ajay Dudani23a18c32011-11-18 08:37:01 -0800208 return power_on_status;
209}
210
Amol Jadica4f4c92011-01-13 20:19:34 -0800211void reboot_device(unsigned reboot_reason)
212{
Trevor Bourgeta5c4a242011-11-08 15:37:08 -0800213 writel(reboot_reason, RESTART_REASON_ADDR);
214
Shashank Mittal6239b162011-06-28 17:59:33 -0700215 /* Actually reset the chip */
Shashank Mittal39503262011-07-19 11:41:35 -0700216 pm8921_config_reset_pwr_off(1);
Shashank Mittal6239b162011-06-28 17:59:33 -0700217 writel(0, MSM_PSHOLD_CTL_SU);
Amol Jadica4f4c92011-01-13 20:19:34 -0800218 mdelay(10000);
Shashank Mittal39503262011-07-19 11:41:35 -0700219
Ajay Dudanib01e5062011-12-03 23:23:42 -0800220 dprintf(CRITICAL, "PSHOLD failed, trying watchdog reset\n");
Trevor Bourgetcc278352011-11-08 15:49:30 -0800221 writel(1, MSM_WDT0_RST);
222 writel(0, MSM_WDT0_EN);
223 writel(0x31F3, MSM_WDT0_BT);
224 writel(3, MSM_WDT0_EN);
225 dmb();
226 writel(3, MSM_TCSR_BASE + TCSR_WDOG_CFG);
227 mdelay(10000);
228
Ajay Dudanib01e5062011-12-03 23:23:42 -0800229 dprintf(CRITICAL, "Rebooting failed\n");
Amol Jadica4f4c92011-01-13 20:19:34 -0800230}
231
232unsigned check_reboot_mode(void)
233{
234 unsigned restart_reason = 0;
Amol Jadica4f4c92011-01-13 20:19:34 -0800235
236 /* Read reboot reason and scrub it */
Shashank Mittal0207df72011-06-15 15:20:43 -0700237 restart_reason = readl(RESTART_REASON_ADDR);
238 writel(0x00, RESTART_REASON_ADDR);
Amol Jadica4f4c92011-01-13 20:19:34 -0800239
240 return restart_reason;
241}
242
Ajay Dudani23a18c32011-11-18 08:37:01 -0800243unsigned target_pause_for_battery_charge(void)
244{
Ajay Dudaniba822332011-11-25 13:37:31 -0800245 if (target_check_power_on_reason() == PWR_ON_EVENT_WALL_CHG)
Ajay Dudani23a18c32011-11-18 08:37:01 -0800246 return 1;
247
248 return 0;
249}
250
Ajay Dudani12091e22011-05-06 17:13:23 -0700251void target_serialno(unsigned char *buf)
252{
253 unsigned int serialno;
Ajay Dudanib01e5062011-12-03 23:23:42 -0800254 if (target_is_emmc_boot()) {
255 serialno = mmc_get_psn();
256 snprintf((char *)buf, 13, "%x", serialno);
Ajay Dudani12091e22011-05-06 17:13:23 -0700257 }
258}
259
Amol Jadica4f4c92011-01-13 20:19:34 -0800260void target_battery_charging_enable(unsigned enable, unsigned disconnect)
261{
262}
Amol Jadi57abe4c2011-05-24 15:47:27 -0700263
264/* Do any target specific intialization needed before entering fastboot mode */
265void target_fastboot_init(void)
266{
267 /* Set the BOOT_DONE flag in PM8921 */
268 pm8921_boot_done();
269}
Amol Jadic52c8a32011-07-12 11:27:04 -0700270
Amol Jadia63aaff2012-02-01 15:51:50 -0800271void target_uart_init(void)
Amol Jadic52c8a32011-07-12 11:27:04 -0700272{
Shashank Mittala635abf2012-03-28 18:11:43 -0700273 unsigned target_id = board_machtype();
274
Ajay Dudanib01e5062011-12-03 23:23:42 -0800275 switch (target_id) {
276 case LINUX_MACHTYPE_8960_SIM:
277 case LINUX_MACHTYPE_8960_RUMI3:
278 case LINUX_MACHTYPE_8960_CDP:
279 case LINUX_MACHTYPE_8960_MTP:
280 case LINUX_MACHTYPE_8960_FLUID:
281 case LINUX_MACHTYPE_8960_APQ:
282 case LINUX_MACHTYPE_8960_LIQUID:
Amol Jadi0c04df82011-10-14 17:40:21 -0700283
sundarajan srinivasan6e3466a2013-03-04 15:47:22 -0800284 if(board_baseband() == BASEBAND_SGLTE || board_baseband() == BASEBAND_SGLTE2)
Neeti Desai46940292012-07-17 14:28:35 -0700285 {
286 uart_dm_init(8, 0x1A000000, 0x1A040000);;
287 }
288 else
289 {
290 uart_dm_init(5, 0x16400000, 0x16440000);
291 }
Amol Jadia63aaff2012-02-01 15:51:50 -0800292 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700293
Ajay Dudanib01e5062011-12-03 23:23:42 -0800294 case LINUX_MACHTYPE_8930_CDP:
295 case LINUX_MACHTYPE_8930_MTP:
296 case LINUX_MACHTYPE_8930_FLUID:
Amol Jadi0c04df82011-10-14 17:40:21 -0700297
Amol Jadia63aaff2012-02-01 15:51:50 -0800298 uart_dm_init(5, 0x16400000, 0x16440000);
299 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700300
Ajay Dudanib01e5062011-12-03 23:23:42 -0800301 case LINUX_MACHTYPE_8064_SIM:
302 case LINUX_MACHTYPE_8064_RUMI3:
Amol Jadia63aaff2012-02-01 15:51:50 -0800303 uart_dm_init(3, 0x16200000, 0x16240000);
304 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700305
Amol Jadia63aaff2012-02-01 15:51:50 -0800306 case LINUX_MACHTYPE_8064_CDP:
307 case LINUX_MACHTYPE_8064_MTP:
308 case LINUX_MACHTYPE_8064_LIQUID:
309 uart_dm_init(7, 0x16600000, 0x16640000);
310 break;
Amol Jadi0c04df82011-10-14 17:40:21 -0700311
V S Ramanjaneya Kumar Tc633fe12013-01-08 14:55:54 -0500312 case LINUX_MACHTYPE_8064_EP:
313 uart_dm_init(2, 0x12480000, 0x12490000);
314 break;
315
Amol Jadic4263042012-03-29 16:18:11 -0700316 case LINUX_MACHTYPE_8064_MPQ_CDP:
Amol Jadi0d501382012-05-24 11:16:41 -0700317 case LINUX_MACHTYPE_8064_MPQ_HRD:
318 case LINUX_MACHTYPE_8064_MPQ_DTV:
Aparna Mallavarapu2715be02013-02-05 19:24:10 +0530319 case LINUX_MACHTYPE_8064_MPQ_DMA:
Amol Jadic4263042012-03-29 16:18:11 -0700320 uart_dm_init(5, 0x1A200000, 0x1A240000);
321 break;
322
Ajay Dudanib01e5062011-12-03 23:23:42 -0800323 case LINUX_MACHTYPE_8627_CDP:
324 case LINUX_MACHTYPE_8627_MTP:
Shashank Mittal26309ed2011-12-01 16:05:45 -0800325
Amol Jadia63aaff2012-02-01 15:51:50 -0800326 uart_dm_init(5, 0x16400000, 0x16440000);
327 break;
Shashank Mittal26309ed2011-12-01 16:05:45 -0800328
Ajay Dudanib01e5062011-12-03 23:23:42 -0800329 default:
330 dprintf(CRITICAL, "uart gsbi not defined for target: %d\n",
331 target_id);
Amol Jadi0c04df82011-10-14 17:40:21 -0700332 }
Amol Jadic52c8a32011-07-12 11:27:04 -0700333}
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700334
Amol Jadi5c61a952012-05-04 17:05:35 -0700335/* Detect the target type */
336void target_detect(struct board_data *board)
337{
338 uint32_t platform;
339 uint32_t platform_hw;
340 uint32_t target_id;
341
342 platform = board->platform;
343 platform_hw = board->platform_hw;
344
345 /* Detect the board we are running on */
Neeti Desai6e015252012-08-13 13:22:37 -0700346 if ((platform == MSM8960) || (platform == MSM8960AB) ||
347 (platform == APQ8060AB) || (platform == MSM8260AB) ||
348 (platform == MSM8660AB) ||(platform == MSM8660A) ||
349 (platform == MSM8260A) || (platform == APQ8060A)) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700350 switch (platform_hw) {
351 case HW_PLATFORM_SURF:
352 target_id = LINUX_MACHTYPE_8960_CDP;
353 break;
354 case HW_PLATFORM_MTP:
355 target_id = LINUX_MACHTYPE_8960_MTP;
356 break;
357 case HW_PLATFORM_FLUID:
358 target_id = LINUX_MACHTYPE_8960_FLUID;
359 break;
360 case HW_PLATFORM_LIQUID:
361 target_id = LINUX_MACHTYPE_8960_LIQUID;
362 break;
363 default:
364 target_id = LINUX_MACHTYPE_8960_CDP;
365 }
David Ng0f56e932013-02-12 18:11:56 -0800366 } else if ((platform == MSM8130) ||
367 (platform == MSM8130AA) || (platform == MSM8130AB) ||
368 (platform == MSM8230) || (platform == MSM8630) ||
Neeti Desai5ccd8642012-07-17 12:43:43 -0700369 (platform == MSM8930) || (platform == MSM8230AA) ||
370 (platform == MSM8630AA) || (platform == MSM8930AA) ||
Amol Jadi6d913742012-10-16 12:12:23 -0700371 (platform == MSM8930AB) || (platform == MSM8630AB) ||
372 (platform == MSM8230AB) || (platform == APQ8030AB) ||
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530373 (platform == APQ8030) || platform == APQ8030AA) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700374 switch (platform_hw) {
375 case HW_PLATFORM_SURF:
376 target_id = LINUX_MACHTYPE_8930_CDP;
377 break;
378 case HW_PLATFORM_MTP:
379 target_id = LINUX_MACHTYPE_8930_MTP;
380 break;
381 case HW_PLATFORM_FLUID:
382 target_id = LINUX_MACHTYPE_8930_FLUID;
383 break;
Aparna Mallavarapu9711d992013-03-04 16:49:21 +0530384 case HW_PLATFORM_QRD:
385 target_id = LINUX_MACHTYPE_8930_EVT;
386 break;
Amol Jadi5c61a952012-05-04 17:05:35 -0700387 default:
388 target_id = LINUX_MACHTYPE_8930_CDP;
389 }
Aparna Mallavarapu2b4b41a2013-02-19 18:56:06 +0530390 } else if ((platform == MSM8227) || (platform == MSM8627) ||
391 (platform == MSM8227AA) || (platform == MSM8627AA)) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700392 switch (platform_hw) {
393 case HW_PLATFORM_SURF:
394 target_id = LINUX_MACHTYPE_8627_CDP;
395 break;
396 case HW_PLATFORM_MTP:
397 target_id = LINUX_MACHTYPE_8627_MTP;
398 break;
399 default:
400 target_id = LINUX_MACHTYPE_8627_CDP;
401 }
402 } else if (platform == MPQ8064) {
403 switch (platform_hw) {
404 case HW_PLATFORM_SURF:
405 target_id = LINUX_MACHTYPE_8064_MPQ_CDP;
406 break;
407 case HW_PLATFORM_HRD:
Amol Jadi0d501382012-05-24 11:16:41 -0700408 target_id = LINUX_MACHTYPE_8064_MPQ_HRD;
Amol Jadi5c61a952012-05-04 17:05:35 -0700409 break;
410 case HW_PLATFORM_DTV:
Amol Jadi0d501382012-05-24 11:16:41 -0700411 target_id = LINUX_MACHTYPE_8064_MPQ_DTV;
Amol Jadi5c61a952012-05-04 17:05:35 -0700412 break;
Aparna Mallavarapu2715be02013-02-05 19:24:10 +0530413 case HW_PLATFORM_DMA:
414 target_id = LINUX_MACHTYPE_8064_MPQ_DMA;
415 break;
Amol Jadi5c61a952012-05-04 17:05:35 -0700416 default:
417 target_id = LINUX_MACHTYPE_8064_MPQ_CDP;
418 }
Aparna Mallavarapu2269a2f2013-01-07 19:44:48 +0530419 } else if ((platform == APQ8064) || (platform == APQ8064AA)
420 || (platform == APQ8064AB)) {
Amol Jadi5c61a952012-05-04 17:05:35 -0700421 switch (platform_hw) {
422 case HW_PLATFORM_SURF:
423 target_id = LINUX_MACHTYPE_8064_CDP;
424 break;
425 case HW_PLATFORM_MTP:
426 target_id = LINUX_MACHTYPE_8064_MTP;
427 break;
428 case HW_PLATFORM_LIQUID:
429 target_id = LINUX_MACHTYPE_8064_LIQUID;
430 break;
V S Ramanjaneya Kumar Tc633fe12013-01-08 14:55:54 -0500431 case HW_PLATFORM_BTS:
432 target_id = LINUX_MACHTYPE_8064_EP;
433 break;
Amol Jadi5c61a952012-05-04 17:05:35 -0700434 default:
435 target_id = LINUX_MACHTYPE_8064_CDP;
436 }
437 } else {
438 dprintf(CRITICAL, "platform (%d) is not identified.\n",
439 platform);
440 ASSERT(0);
441 }
442 board->target = target_id;
443}
444
445/* Detect the modem type */
446void target_baseband_detect(struct board_data *board)
447{
448 uint32_t baseband;
449 uint32_t platform;
450 uint32_t platform_subtype;
451
452 platform = board->platform;
453 platform_subtype = board->platform_subtype;
454
455 /* Check for baseband variants. Default to MSM */
456 if (platform_subtype == HW_PLATFORM_SUBTYPE_MDM)
457 baseband = BASEBAND_MDM;
458 else if (platform_subtype == HW_PLATFORM_SUBTYPE_SGLTE)
459 baseband = BASEBAND_SGLTE;
Channagoud Kadabi141f2982012-10-31 11:23:02 +0530460 else if (platform_subtype == HW_PLATFORM_SUBTYPE_DSDA)
461 baseband = BASEBAND_DSDA;
Amol Jadi2a15a272013-01-22 12:03:36 -0800462 else if (platform_subtype == HW_PLATFORM_SUBTYPE_DSDA2)
463 baseband = BASEBAND_DSDA2;
sundarajan srinivasan6e3466a2013-03-04 15:47:22 -0800464 else if (platform_subtype == HW_PLATFORM_SUBTYPE_SGLTE2)
465 baseband = BASEBAND_SGLTE2;
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530466 else {
467 switch(platform) {
468 case APQ8060:
469 case APQ8064:
Aparna Mallavarapu2269a2f2013-01-07 19:44:48 +0530470 case APQ8064AA:
Channagoud Kadabi512295f2012-10-23 10:00:42 +0530471 case APQ8064AB:
472 case APQ8030AB:
473 case MPQ8064:
474 case APQ8030:
475 case APQ8030AA:
476 baseband = BASEBAND_APQ;
477 break;
478 default:
479 baseband = BASEBAND_MSM;
480 };
481 }
Amol Jadi5c61a952012-05-04 17:05:35 -0700482 board->baseband = baseband;
483}
484
Amol Jadi6834f1a2012-06-29 14:42:59 -0700485/* Returns 1 if target supports continuous splash screen. */
486int target_cont_splash_screen()
487{
488 switch(board_platform_id())
489 {
490 case MSM8960:
Neeti Desai6e015252012-08-13 13:22:37 -0700491 case MSM8960AB:
492 case APQ8060AB:
493 case MSM8260AB:
494 case MSM8660AB:
Amol Jadi6834f1a2012-06-29 14:42:59 -0700495 return 1;
496
497 default:
498 return 0;
499 }
500}
Amol Jadida118b92012-07-06 19:53:18 -0700501
502void apq8064_ext_3p3V_enable()
503{
504 /* Configure GPIO for output */
505 gpio_tlmm_config(77, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_8MA, GPIO_ENABLE);
506
507 /* Output High */
508 gpio_set(77, 2);
509}
510
511/* Do target specific usb initialization */
512void target_usb_init(void)
513{
514 if(board_target_id() == LINUX_MACHTYPE_8064_LIQUID)
515 {
516 apq8064_ext_3p3V_enable();
517 }
518}
Channagoud Kadabi7d84dd62012-08-24 21:20:56 +0530519
Channagoud Kadabicc427612013-04-02 11:57:09 -0700520
521/*
522 * Function to set the capabilities for the host
523 */
524void target_mmc_caps(struct mmc_host *host)
Channagoud Kadabi7d84dd62012-08-24 21:20:56 +0530525{
Channagoud Kadabicc427612013-04-02 11:57:09 -0700526 host->caps.ddr_mode = 1;
527 host->caps.hs200_mode = 1;
528 host->caps.bus_width = MMC_BOOT_BUS_WIDTH_8_BIT;
529 host->caps.hs_clk_rate = MMC_CLK_96MHZ;
Channagoud Kadabi7d84dd62012-08-24 21:20:56 +0530530}