Merge changes I751e4525,Ic8e66d82 into lk.lnx.1.0-dev.1.0

* changes:
  platform : msm8952: add sec app region support for 8937
  app: aboot: update commandline for keymaster 1.0
diff --git a/dev/gcdb/display/include/panel_r69006_1080p_cmd.h b/dev/gcdb/display/include/panel_r69006_1080p_cmd.h
index 01c8d17..06f6a36 100755
--- a/dev/gcdb/display/include/panel_r69006_1080p_cmd.h
+++ b/dev/gcdb/display/include/panel_r69006_1080p_cmd.h
@@ -357,6 +357,14 @@
 	0x6E, 0x3F, 0x36, 0x00, 0x5A, 0x4F, 0x38, 0x41, 0x54, 0x03, 0x04, 0x00
 };
 
+static const uint32_t r69006_1080p_14nm_cmd_timings[] = {
+	0x24, 0x1f, 0x08, 0x09, 0x05, 0x03, 0x04, 0xa0,
+	0x24, 0x1f, 0x08, 0x09, 0x05, 0x03, 0x04, 0xa0,
+	0x24, 0x1f, 0x08, 0x09, 0x05, 0x03, 0x04, 0xa0,
+	0x24, 0x1f, 0x08, 0x09, 0x05, 0x03, 0x04, 0xa0,
+	0x24, 0x1b, 0x08, 0x09, 0x05, 0x03, 0x04, 0xa0,
+};
+
 static struct panel_timing r69006_1080p_cmd_timing_info = {
 	0, 4, 0x20, 0x2c
 };
diff --git a/dev/gcdb/display/include/panel_r69006_1080p_video.h b/dev/gcdb/display/include/panel_r69006_1080p_video.h
index 82be298..d2beedb 100755
--- a/dev/gcdb/display/include/panel_r69006_1080p_video.h
+++ b/dev/gcdb/display/include/panel_r69006_1080p_video.h
@@ -296,6 +296,14 @@
 	0x7d, 0x25, 0x1d, 0x00, 0x37, 0x33, 0x22, 0x27, 0x1e, 0x03, 0x04, 0x00
 };
 
+static const uint32_t r69006_1080p_14nm_video_timings[] = {
+	0x24, 0x1f, 0x08, 0x09, 0x05, 0x03, 0x04, 0xa0,
+	0x24, 0x1f, 0x08, 0x09, 0x05, 0x03, 0x04, 0xa0,
+	0x24, 0x1f, 0x08, 0x09, 0x05, 0x03, 0x04, 0xa0,
+	0x24, 0x1f, 0x08, 0x09, 0x05, 0x03, 0x04, 0xa0,
+	0x24, 0x1b, 0x08, 0x09, 0x05, 0x03, 0x04, 0xa0,
+};
+
 static struct panel_timing r69006_1080p_video_timing_info = {
 	0, 4, 0x20, 0x2c
 };
diff --git a/dev/vib/include/vibrator.h b/dev/vib/include/vibrator.h
index b6aee2f..364e91b 100644
--- a/dev/vib/include/vibrator.h
+++ b/dev/vib/include/vibrator.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2014-2016, The Linux Foundation. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -48,4 +48,5 @@
 void vib_turn_off(void);
 void vib_timed_turn_on(const uint32_t);
 void wait_vib_timeout(void);
+void turn_off_vib_early(void);
 #endif				/* __DEV_VIB_VIBRATOR_H */
diff --git a/dev/vib/vibrator.c b/dev/vib/vibrator.c
index 764300c..03b7a87 100644
--- a/dev/vib/vibrator.c
+++ b/dev/vib/vibrator.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2014-2016, The Linux Foundation. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -63,8 +63,10 @@
 static enum handler_return vib_timer_func(struct timer *v_timer, time_t t, void *arg)
 {
 	timer_cancel(&vib_timer);
-	vib_turn_off();
-	vib_timeout=1;
+	if(!vib_timeout){
+		vib_turn_off();
+		vib_timeout = 1;
+	}
 
 	return INT_RESCHEDULE;
 }
@@ -74,8 +76,10 @@
 	while((--vib_time)){
 		thread_sleep(CHECK_VIB_TIMER_FREQUENCY);
 	}
-	vib_turn_off();
-	vib_timeout = 1;
+	if(!vib_timeout){
+		vib_turn_off();
+		vib_timeout = 1;
+	}
 	return 0;
 }
 #endif
@@ -110,3 +114,12 @@
 		thread_sleep(CHECK_VIB_TIMER_FREQUENCY);
 	}
 }
+
+void turn_off_vib_early(void)
+{
+	if(vib_timeout) {
+		return;
+	}
+	vib_turn_off();
+	vib_timeout = 1;
+}
diff --git a/target/msm8952/init.c b/target/msm8952/init.c
index 1d577d6..43e1b2e 100644
--- a/target/msm8952/init.c
+++ b/target/msm8952/init.c
@@ -518,6 +518,9 @@
 
 void target_uninit(void)
 {
+#if PON_VIB_SUPPORT
+	turn_off_vib_early();
+#endif
 	mmc_put_card_to_sleep(dev);
 	sdhci_mode_disable(&dev->host);
 	if (crypto_initialized())
diff --git a/target/msmtitanium/oem_panel.c b/target/msmtitanium/oem_panel.c
index 2f38db6..1d5ebb1 100644
--- a/target/msmtitanium/oem_panel.c
+++ b/target/msmtitanium/oem_panel.c
@@ -47,6 +47,9 @@
 /*---------------------------------------------------------------------------*/
 #include "include/panel_truly_1080p_video.h"
 #include "include/panel_truly_1080p_cmd.h"
+#include "include/panel_r69006_1080p_video.h"
+#include "include/panel_r69006_1080p_cmd.h"
+
 
 /*---------------------------------------------------------------------------*/
 /* static panel selection variable                                           */
@@ -54,6 +57,8 @@
 enum {
 	TRULY_1080P_VIDEO_PANEL,
 	TRULY_1080P_CMD_PANEL,
+	R69006_1080P_VIDEO_PANEL,
+	R69006_1080P_CMD_PANEL,
 	UNKNOWN_PANEL
 };
 
@@ -64,6 +69,8 @@
 static struct panel_list supp_panels[] = {
 	{"truly_1080p_video", TRULY_1080P_VIDEO_PANEL},
 	{"truly_1080p_cmd", TRULY_1080P_CMD_PANEL},
+	{"r69006_1080p_video", R69006_1080P_VIDEO_PANEL},
+	{"r69006_1080p_cmd", R69006_1080P_CMD_PANEL},
 };
 
 static uint32_t panel_id;
@@ -79,6 +86,9 @@
 	if (panel_id == TRULY_1080P_CMD_PANEL ||
 			panel_id == TRULY_1080P_VIDEO_PANEL)
 		mdelay(TRULY_1080P_PANEL_ON_DELAY);
+	else if (panel_id == R69006_1080P_CMD_PANEL) {
+		mdelay(R69006_1080P_CMD_PANEL_ON_DELAY);
+	}
 
 	return NO_ERROR;
 }
@@ -153,6 +163,62 @@
 			MAX_TIMING_CONFIG * sizeof(uint32_t));
 		pinfo->mipi.signature 	= TRULY_1080P_CMD_SIGNATURE;
 		break;
+	case R69006_1080P_VIDEO_PANEL:
+		panelstruct->paneldata    = &r69006_1080p_video_panel_data;
+		panelstruct->panelres     = &r69006_1080p_video_panel_res;
+		panelstruct->color        = &r69006_1080p_video_color;
+		panelstruct->videopanel   = &r69006_1080p_video_video_panel;
+		panelstruct->commandpanel = &r69006_1080p_video_command_panel;
+		panelstruct->state        = &r69006_1080p_video_state;
+		panelstruct->laneconfig   = &r69006_1080p_video_lane_config;
+		panelstruct->paneltiminginfo
+			= &r69006_1080p_video_timing_info;
+		panelstruct->panelresetseq
+			= &r69006_1080p_video_reset_seq;
+		panelstruct->backlightinfo = &r69006_1080p_video_backlight;
+		pinfo->labibb = &r69006_1080p_video_labibb;
+		pinfo->mipi.panel_on_cmds
+			= r69006_1080p_video_on_command;
+		pinfo->mipi.num_of_panel_on_cmds
+			= R69006_1080P_VIDEO_ON_COMMAND;
+		pinfo->mipi.panel_off_cmds
+			= r69006_1080p_video_off_command;
+		pinfo->mipi.num_of_panel_off_cmds
+			= R69006_1080P_VIDEO_OFF_COMMAND;
+		memcpy(phy_db->timing,
+			r69006_1080p_14nm_video_timings,
+			MAX_TIMING_CONFIG * sizeof(uint32_t));
+		pinfo->mipi.signature = R69006_1080P_VIDEO_SIGNATURE;
+		break;
+	case R69006_1080P_CMD_PANEL:
+		panelstruct->paneldata    = &r69006_1080p_cmd_panel_data;
+		panelstruct->panelres     = &r69006_1080p_cmd_panel_res;
+		panelstruct->color        = &r69006_1080p_cmd_color;
+		panelstruct->videopanel   = &r69006_1080p_cmd_video_panel;
+		panelstruct->commandpanel = &r69006_1080p_cmd_command_panel;
+		panelstruct->state        = &r69006_1080p_cmd_state;
+		panelstruct->laneconfig   = &r69006_1080p_cmd_lane_config;
+		panelstruct->paneltiminginfo
+			= &r69006_1080p_cmd_timing_info;
+		panelstruct->panelresetseq
+			= &r69006_1080p_cmd_reset_seq;
+		panelstruct->backlightinfo = &r69006_1080p_cmd_backlight;
+		pinfo->labibb = &r69006_1080p_cmd_labibb;
+		pinfo->mipi.panel_on_cmds
+			= r69006_1080p_cmd_on_command;
+		pinfo->mipi.num_of_panel_on_cmds
+			= R69006_1080P_CMD_ON_COMMAND;
+		pinfo->mipi.panel_off_cmds
+			= r69006_1080p_cmd_off_command;
+		pinfo->mipi.num_of_panel_off_cmds
+			= R69006_1080P_CMD_OFF_COMMAND;
+		memcpy(phy_db->timing,
+			r69006_1080p_14nm_cmd_timings,
+			MAX_TIMING_CONFIG * sizeof(uint32_t));
+		pinfo->mipi.signature = R69006_1080P_CMD_SIGNATURE;
+		pinfo->mipi.tx_eot_append = true;
+		pinfo->mipi.rx_eot_ignore = true;
+		break;
 	case UNKNOWN_PANEL:
 	default:
 		memset(panelstruct, 0, sizeof(struct panel_struct));
@@ -208,6 +274,9 @@
 	case HW_PLATFORM_RCM:
 		panel_id = TRULY_1080P_VIDEO_PANEL;
 		break;
+	case HW_PLATFORM_QRD:
+		panel_id = R69006_1080P_CMD_PANEL;
+		break;
 	default:
 		dprintf(CRITICAL, "Display not enabled for %d HW type\n",
 			hw_id);