diff --git a/app/aboot/aboot.c b/app/aboot/aboot.c
index 6058aa2..7cd33ad 100755
--- a/app/aboot/aboot.c
+++ b/app/aboot/aboot.c
@@ -2,7 +2,7 @@
  * Copyright (c) 2009, Google Inc.
  * All rights reserved.
  *
- * Copyright (c) 2009-2013, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2009-2014, 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 met:
@@ -98,7 +98,7 @@
 
 /* make 4096 as default size to ensure EFS,EXT4's erasing */
 #define DEFAULT_ERASE_SIZE  4096
-#define MAX_PANEL_BUF_SIZE 64
+#define MAX_PANEL_BUF_SIZE 128
 
 #define UBI_MAGIC      "UBI#"
 #define UBI_MAGIC_SIZE 0x04
diff --git a/dev/gcdb/display/gcdb_display.c b/dev/gcdb/display/gcdb_display.c
index 9c36a3c..3c1ff7b 100755
--- a/dev/gcdb/display/gcdb_display.c
+++ b/dev/gcdb/display/gcdb_display.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -59,17 +59,9 @@
 extern int msm_display_init(struct msm_fb_panel_data *pdata);
 extern int msm_display_off();
 
-/* TODO: add other backlight type support */
 static uint32_t panel_backlight_ctrl(uint8_t enable)
 {
-	uint32_t ret = NO_ERROR;
-
-	if (panelstruct.backlightinfo->bl_pmic_controltype != BL_DCS) {
-		/* deal with non-dcs backlight */
-		ret = target_backlight_ctrl(enable);
-	}
-
-	return ret;
+	return target_backlight_ctrl(panelstruct.backlightinfo, enable);
 }
 
 static uint32_t mdss_dsi_panel_reset(uint8_t enable)
@@ -171,14 +163,20 @@
 {
 	char *dsi_id = NULL;
 	char *panel_node = NULL;
-	uint16_t dsi_id_len = 0;
+	char *slave_panel_node = NULL;
+	uint16_t dsi_id_len = 0, panel_node_len = 0, slave_panel_node_len = 0;
+	uint32_t arg_size = 0;
 	bool ret = true;
 	char *default_str;
+	int panel_mode = SPLIT_DISPLAY_FLAG | DUAL_PIPE_FLAG;
 
 	if (panelstruct.paneldata)
 	{
 		dsi_id = panelstruct.paneldata->panel_controller;
 		panel_node = panelstruct.paneldata->panel_node_id;
+		panel_mode = panelstruct.paneldata->panel_operating_mode &
+							panel_mode;
+		slave_panel_node = panelstruct.paneldata->slave_panel_node_id;
 	}
 	else
 	{
@@ -194,31 +192,57 @@
 		return true;
 	}
 
-	if (dsi_id == NULL || panel_node == NULL)
+	if (dsi_id == NULL || panel_node == NULL) {
+		dprintf(CRITICAL, "panel node or dsi ctrl not present\n");
 		return false;
+	}
+
+	if (panel_mode && slave_panel_node == NULL) {
+		dprintf(CRITICAL, "slave node not present in dual dsi case\n");
+		return false;
+	}
 
 	dsi_id_len = strlen(dsi_id);
+	panel_node_len = strlen(panel_node);
+	slave_panel_node_len = strlen(slave_panel_node);
 
-	if (buf_size < (strlen(panel_node) + dsi_id_len +
-			MAX_PANEL_FORMAT_STRING + 1) ||
-		!strlen(panel_node) ||
-		!strlen(dsi_id))
+	arg_size = dsi_id_len + panel_node_len + LK_OVERRIDE_PANEL_LEN + 1;
+
+	/* For dual pipe or split display */
+	if (panel_mode)
+		arg_size += DSI_1_STRING_LEN + slave_panel_node_len;
+
+	if (buf_size < arg_size)
 	{
+		dprintf(CRITICAL, "display command line buffer is small\n");
 		ret = false;
 	}
 	else
 	{
-		pbuf[0] = '1'; // 1 indicates that LK is overriding the panel
-		pbuf[1] = ':'; // seperator
-		pbuf += MAX_PANEL_FORMAT_STRING;
-		buf_size -= MAX_PANEL_FORMAT_STRING;
+		strlcpy(pbuf, LK_OVERRIDE_PANEL, buf_size);
+		pbuf += LK_OVERRIDE_PANEL_LEN;
+		buf_size -= LK_OVERRIDE_PANEL_LEN;
 
 		strlcpy(pbuf, dsi_id, buf_size);
 		pbuf += dsi_id_len;
 		buf_size -= dsi_id_len;
 
 		strlcpy(pbuf, panel_node, buf_size);
+
+		/* Return string for single dsi */
+		if (!panel_mode)
+			goto end;
+
+		pbuf += panel_node_len;
+		buf_size -= panel_node_len;
+
+		strlcpy(pbuf, DSI_1_STRING, buf_size);
+		pbuf += DSI_1_STRING_LEN;
+		buf_size -= DSI_1_STRING_LEN;
+
+		strlcpy(pbuf, slave_panel_node, buf_size);
 	}
+end:
 	return ret;
 }
 
diff --git a/dev/gcdb/display/gcdb_display.h b/dev/gcdb/display/gcdb_display.h
index 4811015..6259896 100755
--- a/dev/gcdb/display/gcdb_display.h
+++ b/dev/gcdb/display/gcdb_display.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -43,13 +43,16 @@
 #define BIST_SIZE 6
 #define LANE_SIZE 45
 
-#define MAX_PANEL_FORMAT_STRING 2
+#define LK_OVERRIDE_PANEL      "1:"
+#define LK_OVERRIDE_PANEL_LEN  2
+#define DSI_1_STRING           ":1:"
+#define DSI_1_STRING_LEN       3
 
 /*---------------------------------------------------------------------------*/
 /* API                                                                       */
 /*---------------------------------------------------------------------------*/
 
-int target_backlight_ctrl(uint8_t enable);
+int target_backlight_ctrl(struct backlight *bl, uint8_t enable);
 int target_panel_clock(uint8_t enable, struct msm_panel_info *pinfo);
 int target_panel_reset(uint8_t enable, struct panel_reset_sequence *resetseq,
 						struct msm_panel_info *pinfo);
diff --git a/dev/gcdb/display/include/panel.h b/dev/gcdb/display/include/panel.h
index 88cbcb6..0350885 100755
--- a/dev/gcdb/display/include/panel.h
+++ b/dev/gcdb/display/include/panel.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -57,16 +57,15 @@
 	uint16_t panel_channelid;
 	uint16_t dsi_virtualchannel_id;
 	uint16_t panel_broadcast_mode;
-	uint16_t dsi_lp11_atinit;
-	uint16_t dsi_initmaster_time;
+	uint16_t panel_lp11_init;
+	uint16_t panel_init_delay;
 	uint16_t dsi_stream;
 	uint8_t  interleave_mode;
 	uint32_t panel_bitclock_freq;
 	uint32_t panel_operating_mode;
 	uint32_t panel_with_enable_gpio;
 	uint8_t  mode_gpio_state;
-	uint8_t panel_lp11_init;
-	uint32_t  panel_init_delay;
+	char  *slave_panel_node_id;
 };
 
 typedef struct panel_resolution{
@@ -152,7 +151,6 @@
 	BL_PWM = 0,
 	BL_WLED,
 	BL_DCS,
-	BL_LPG,
 };
 
 typedef struct panel_reset_sequence {
diff --git a/dev/gcdb/display/include/panel_jdi_qhd_dualdsi_cmd.h b/dev/gcdb/display/include/panel_jdi_qhd_dualdsi_cmd.h
new file mode 100644
index 0000000..2f05288
--- /dev/null
+++ b/dev/gcdb/display/include/panel_jdi_qhd_dualdsi_cmd.h
@@ -0,0 +1,216 @@
+/* Copyright (c) 2014, 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 met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *  * Neither the name of The Linux Foundation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*---------------------------------------------------------------------------
+ * This file is autogenerated file using gcdb parser. Please do not edit it.
+ * Update input XML file to add a new entry or update variable in this file
+ * VERSION = "1.0"
+ *---------------------------------------------------------------------------*/
+
+#ifndef _PANEL_JDI_QHD_DUALDSI_CMD_H_
+#define _PANEL_JDI_QHD_DUALDSI_CMD_H_
+/*---------------------------------------------------------------------------*/
+/* HEADER files                                                              */
+/*---------------------------------------------------------------------------*/
+#include "panel.h"
+
+/*---------------------------------------------------------------------------*/
+/* Panel configuration                                                       */
+/*---------------------------------------------------------------------------*/
+static struct panel_config jdi_qhd_dualdsi_cmd_panel_data = {
+	"qcom,mdss_dsi_jdi_qhd_dualmipi0_cmd", "dsi:0:", "qcom,mdss-dsi-panel",
+	10, 1, "DISPLAY_1", 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 0, 11, 0, 0,
+	"qcom,mdss_dsi_jdi_qhd_dualmipi1_cmd"
+};
+
+/*---------------------------------------------------------------------------*/
+/* Panel resolution                                                          */
+/*---------------------------------------------------------------------------*/
+static struct panel_resolution jdi_qhd_dualdsi_cmd_panel_res = {
+	2560, 1440, 120, 44, 16, 0, 8, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+/*---------------------------------------------------------------------------*/
+/* Panel color information                                                   */
+/*---------------------------------------------------------------------------*/
+static struct color_info jdi_qhd_dualdsi_cmd_color = {
+	24, 0, 0xff, 0, 0, 0
+};
+
+/*---------------------------------------------------------------------------*/
+/* Panel on/off command information                                          */
+/*---------------------------------------------------------------------------*/
+static char jdi_qhd_dualdsi_cmd_on_cmd0[] = {
+	0x01, 0x00, 0x05, 0x80
+};
+
+static char jdi_qhd_dualdsi_cmd_on_cmd1[] = {
+	0x3a, 0x77, 0x15, 0x80
+};
+
+static char jdi_qhd_dualdsi_cmd_on_cmd2[] = {
+	0x05, 0x00, 0x39, 0xC0,
+	0x2a, 0x00, 0x00, 0x04,
+	0xff, 0xFF, 0xFF, 0xFF,
+};
+
+static char jdi_qhd_dualdsi_cmd_on_cmd3[] = {
+	0x05, 0x00, 0x39, 0xC0,
+	0x2b, 0x00, 0x00, 0x05,
+	0x9f, 0xFF, 0xFF, 0xFF,
+};
+
+static char jdi_qhd_dualdsi_cmd_on_cmd4[] = {
+	0x51, 0xff, 0x15, 0x80
+};
+
+static char jdi_qhd_dualdsi_cmd_on_cmd5[] = {
+	0x11, 0x00, 0x05, 0x80
+};
+
+static char jdi_qhd_dualdsi_cmd_on_cmd6[] = {
+	0xb0, 0x00, 0x23, 0x80
+};
+
+static char jdi_qhd_dualdsi_cmd_on_cmd7[] = {
+	0x02, 0x00, 0x29, 0xC0,
+	0xb3, 0x0c, 0xFF, 0xFF,
+};
+
+static char jdi_qhd_dualdsi_cmd_on_cmd8[] = {
+	0x14, 0x00, 0x29, 0xC0,
+	0xce, 0x7d, 0x40, 0x48,
+	0x56, 0x67, 0x78, 0x88,
+	0x98, 0xa7, 0xb5, 0xc3,
+	0xd1, 0xde, 0xe9, 0xf2,
+	0xfa, 0xff, 0x04, 0x00,
+};
+
+static char jdi_qhd_dualdsi_cmd_on_cmd9[] = {
+	0xb0, 0x03, 0x23, 0x80
+};
+
+static char jdi_qhd_dualdsi_cmd_on_cmd10[] = {
+	0x29, 0x00, 0x05, 0x80
+};
+
+static char jdi_qhd_dualdsi_cmd_on_cmd11[] = {
+	0x35, 0x00, 0x15, 0x80
+};
+
+static char jdi_qhd_dualdsi_cmd_on_cmd12[] = {
+	0x53, 0x24, 0x15, 0x80
+};
+
+static struct mipi_dsi_cmd jdi_qhd_dualdsi_cmd_on_command[] = {
+	{0x4, jdi_qhd_dualdsi_cmd_on_cmd0, 0x05},
+	{0x4, jdi_qhd_dualdsi_cmd_on_cmd1, 0x05},
+	{0xc, jdi_qhd_dualdsi_cmd_on_cmd2, 0x05},
+	{0xc, jdi_qhd_dualdsi_cmd_on_cmd3, 0x05},
+	{0x4, jdi_qhd_dualdsi_cmd_on_cmd4, 0x05},
+	{0x4, jdi_qhd_dualdsi_cmd_on_cmd5, 0x78},
+	{0x4, jdi_qhd_dualdsi_cmd_on_cmd6, 0x05},
+	{0x8, jdi_qhd_dualdsi_cmd_on_cmd7, 0x05},
+	{0x18, jdi_qhd_dualdsi_cmd_on_cmd8, 0x05},
+	{0x4, jdi_qhd_dualdsi_cmd_on_cmd9, 0x05},
+	{0x4, jdi_qhd_dualdsi_cmd_on_cmd10, 0x14},
+	{0x4, jdi_qhd_dualdsi_cmd_on_cmd11, 0x05},
+	{0x4, jdi_qhd_dualdsi_cmd_on_cmd12, 0x05},
+};
+
+#define JDI_QHD_DUALDSI_CMD_ON_COMMAND 13
+
+
+static char jdi_qhd_dualdsi_cmdoff_cmd0[] = {
+	0x28, 0x00, 0x05, 0x80
+};
+
+static char jdi_qhd_dualdsi_cmdoff_cmd1[] = {
+	0x10, 0x00, 0x05, 0x80
+};
+
+static struct mipi_dsi_cmd jdi_qhd_dualdsi_cmd_off_command[] = {
+	{0x4, jdi_qhd_dualdsi_cmdoff_cmd0, 0x32},
+	{0x4, jdi_qhd_dualdsi_cmdoff_cmd1, 0x78}
+};
+
+#define JDI_QHD_DUALDSI_CMD_OFF_COMMAND 2
+
+
+static struct command_state jdi_qhd_dualdsi_cmd_state = {
+	0, 1
+};
+
+/*---------------------------------------------------------------------------*/
+/* Command mode panel information                                            */
+/*---------------------------------------------------------------------------*/
+static struct commandpanel_info jdi_qhd_dualdsi_cmd_command_panel = {
+	1, 1, 1, 0, 0, 0x2c, 0, 0, 0, 1, 0, 0
+};
+
+/*---------------------------------------------------------------------------*/
+/* Video mode panel information                                              */
+/*---------------------------------------------------------------------------*/
+static struct videopanel_info jdi_qhd_dualdsi_cmd_video_panel = {
+	0, 0, 0, 0, 1, 1, 1, 0, 0
+};
+
+/*---------------------------------------------------------------------------*/
+/* Lane configuration                                                        */
+/*---------------------------------------------------------------------------*/
+static struct lane_configuration jdi_qhd_dualdsi_cmd_lane_config = {
+	4, 0, 1, 1, 1, 1
+};
+
+/*---------------------------------------------------------------------------*/
+/* Panel timing                                                              */
+/*---------------------------------------------------------------------------*/
+static const uint32_t jdi_qhd_dualdsi_cmd_timings[] = {
+	0xcd, 0x32, 0x22, 0x00, 0x60, 0x64, 0x26, 0x34, 0x29, 0x03, 0x04, 0x00
+};
+
+static struct panel_timing jdi_qhd_dualdsi_cmd_timing_info = {
+	0x0, 0x04, 0x03, 0x27
+};
+
+/*---------------------------------------------------------------------------*/
+/* Panel reset sequence                                                      */
+/*---------------------------------------------------------------------------*/
+static struct panel_reset_sequence jdi_qhd_dualdsi_cmd_reset_seq = {
+	{1, 0, 1, }, {20, 200, 20, }, 2
+};
+
+/*---------------------------------------------------------------------------*/
+/* Backlight setting                                                         */
+/*---------------------------------------------------------------------------*/
+static struct backlight jdi_qhd_dualdsi_cmd_backlight = {
+	0, 1, 4095, 100, 1, "PMIC_8941"
+};
+
+#endif /*_PANEL_JDI_QHD_DUALDSI_CMD_H_*/
diff --git a/dev/gcdb/display/include/panel_jdi_qhd_dualdsi_video.h b/dev/gcdb/display/include/panel_jdi_qhd_dualdsi_video.h
index cd0301c..cfdd490 100644
--- a/dev/gcdb/display/include/panel_jdi_qhd_dualdsi_video.h
+++ b/dev/gcdb/display/include/panel_jdi_qhd_dualdsi_video.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -44,8 +44,9 @@
 /* Panel configuration                                                       */
 /*---------------------------------------------------------------------------*/
 static struct panel_config jdi_qhd_dualdsi_video_panel_data = {
-	"", "", "qcom,mdss-dsi-panel",
-	10, 0, "DISPLAY_1", 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 0, 11, 0
+	"qcom,dsi_jdi_qhd_video_0", "dsi:0:", "qcom,mdss-dsi-panel",
+	10, 0, "DISPLAY_1", 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 0, 11, 0, 0,
+	"qcom,dsi_jdi_qhd_video_1",
 };
 
 /*---------------------------------------------------------------------------*/
@@ -220,7 +221,7 @@
 /* Backlight setting                                                         */
 /*---------------------------------------------------------------------------*/
 static struct backlight jdi_qhd_dualdsi_video_backlight = {
-	0, 1, 4095, 100, 0, 0
+	0, 1, 4095, 100, 1, "PMIC_8941"
 };
 
 #endif /*_PANEL_JDI_QHD_DUALDSI_VIDEO_H_*/
diff --git a/dev/gcdb/display/include/panel_ssd2080m_720p_video.h b/dev/gcdb/display/include/panel_ssd2080m_720p_video.h
index 841579b..7a1c8e5 100755
--- a/dev/gcdb/display/include/panel_ssd2080m_720p_video.h
+++ b/dev/gcdb/display/include/panel_ssd2080m_720p_video.h
@@ -45,14 +45,14 @@
 /*---------------------------------------------------------------------------*/
 static struct panel_config ssd2080m_720p_video_panel_data = {
 	"qcom,mdss_dsi_ssd2080m_720p_video", "dsi:0:", "qcom,mdss-dsi-panel",
-	10, 0, "DISPLAY_1", 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 50000
+	10, 0, "DISPLAY_1", 0, 0, 60, 0, 0, 0, 1, 50000, 0, 0, 0, 0, 0, 0
 };
 
 /*---------------------------------------------------------------------------*/
 /* Panel resolution                                                          */
 /*---------------------------------------------------------------------------*/
 static struct panel_resolution ssd2080m_720p_video_panel_res = {
-	720, 1280, 80, 24, 14, 0, 30, 14, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0
+	720, 1280, 80, 24, 14, 0, 25, 14, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0
 };
 
 /*---------------------------------------------------------------------------*/
@@ -70,287 +70,292 @@
 };
 
 static char ssd2080m_720p_video_on_cmd1[] = {
+	0x02, 0x00, 0x29, 0xC0,
+	0x53, 0x00, 0xFF, 0xFF,
+};
+
+static char ssd2080m_720p_video_on_cmd2[] = {
 	0x05, 0x00, 0x29, 0xC0,
 	0xC6, 0x63, 0x00, 0x81,
 	0x31, 0xFF, 0xFF, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd2[] = {
+static char ssd2080m_720p_video_on_cmd3[] = {
 	0x05, 0x00, 0x29, 0xC0,
 	0xCB, 0xE7, 0x80, 0x73,
 	0x33, 0xFF, 0xFF, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd3[] = {
+static char ssd2080m_720p_video_on_cmd4[] = {
 	0x02, 0x00, 0x29, 0xC0,
 	0xEC, 0xD2, 0xFF, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd4[] = {
+static char ssd2080m_720p_video_on_cmd5[] = {
 	0x03, 0x00, 0x29, 0xC0,
 	0xB3, 0x04, 0x9F, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd5[] = {
-	0x04, 0x00, 0x29, 0xC0,
-	0xB2, 0x16, 0x1E, 0x10,
-};
-
 static char ssd2080m_720p_video_on_cmd6[] = {
-	0x02, 0x00, 0x29, 0xC0,
-	0xB4, 0x00, 0xFF, 0xFF,
+	0x04, 0x00, 0x29, 0xC0,
+	0xB2, 0x16, 0x26, 0x10,
 };
 
 static char ssd2080m_720p_video_on_cmd7[] = {
 	0x02, 0x00, 0x29, 0xC0,
-	0xC1, 0x04, 0xFF, 0xFF,
+	0xB4, 0x00, 0xFF, 0xFF,
 };
 
 static char ssd2080m_720p_video_on_cmd8[] = {
+	0x02, 0x00, 0x29, 0xC0,
+	0xC1, 0x04, 0xFF, 0xFF,
+};
+
+static char ssd2080m_720p_video_on_cmd9[] = {
 	0x04, 0x00, 0x29, 0xC0,
 	0xC2, 0xBE, 0x00, 0x58,
 };
 
-static char ssd2080m_720p_video_on_cmd9[] = {
+static char ssd2080m_720p_video_on_cmd10[] = {
 	0x09, 0x00, 0x29, 0xC0,
 	0xC3, 0x01, 0x22, 0x11,
 	0x21, 0x0E, 0x80, 0x80,
 	0x24, 0xFF, 0xFF, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd10[] = {
+static char ssd2080m_720p_video_on_cmd11[] = {
 	0x08, 0x00, 0x29, 0xC0,
 	0xB6, 0x09, 0x16, 0x42,
 	0x01, 0x13, 0x00, 0x00,
 };
 
-static char ssd2080m_720p_video_on_cmd11[] = {
+static char ssd2080m_720p_video_on_cmd12[] = {
 	0x04, 0x00, 0x29, 0xC0,
 	0xB7, 0x24, 0x26, 0x43,
 };
 
-static char ssd2080m_720p_video_on_cmd12[] = {
+static char ssd2080m_720p_video_on_cmd13[] = {
 	0x06, 0x00, 0x29, 0xC0,
 	0xB8, 0x16, 0x08, 0x25,
 	0x44, 0x08, 0xFF, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd13[] = {
+static char ssd2080m_720p_video_on_cmd14[] = {
 	0x09, 0x00, 0x29, 0xC0,
 	0xB9, 0x06, 0x08, 0x07,
 	0x09, 0x00, 0x00, 0x00,
 	0x00, 0xFF, 0xFF, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd14[] = {
+static char ssd2080m_720p_video_on_cmd15[] = {
 	0x09, 0x00, 0x29, 0xC0,
 	0xBA, 0x0E, 0x10, 0x0A,
 	0x0C, 0x16, 0x05, 0x00,
 	0x00, 0xFF, 0xFF, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd15[] = {
+static char ssd2080m_720p_video_on_cmd16[] = {
 	0x09, 0x00, 0x29, 0xC0,
 	0xBB, 0xA1, 0xA1, 0xA1,
 	0xA1, 0x00, 0x00, 0x00,
 	0x00, 0xFF, 0xFF, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd16[] = {
+static char ssd2080m_720p_video_on_cmd17[] = {
 	0x09, 0x00, 0x29, 0xC0,
 	0xBC, 0x0F, 0x11, 0x0B,
 	0x0D, 0x16, 0x05, 0x00,
 	0x00, 0xFF, 0xFF, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd17[] = {
+static char ssd2080m_720p_video_on_cmd18[] = {
 	0x09, 0x00, 0x29, 0xC0,
 	0xBD, 0xA1, 0xA1, 0xA1,
 	0xA1, 0x00, 0x00, 0x00,
 	0x00, 0xFF, 0xFF, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd18[] = {
+static char ssd2080m_720p_video_on_cmd19[] = {
 	0x04, 0x00, 0x29, 0xC0,
 	0xE6, 0xFF, 0xFF, 0x0F,
 };
 
-static char ssd2080m_720p_video_on_cmd19[] = {
+static char ssd2080m_720p_video_on_cmd20[] = {
 	0x02, 0x00, 0x29, 0xC0,
 	0xC7, 0x3F, 0xFF, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd20[] = {
+static char ssd2080m_720p_video_on_cmd21[] = {
 	0x07, 0x00, 0x29, 0xC0,
 	0xB5, 0x47, 0x00, 0x00,
 	0x08, 0x00, 0x01, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd21[] = {
-	0x08, 0x00, 0x29, 0xC0,
-	0xC4, 0xDF, 0x72, 0x12,
-	0x12, 0x66, 0xE3, 0x99,
-};
-
 static char ssd2080m_720p_video_on_cmd22[] = {
-	0x07, 0x00, 0x29, 0xC0,
-	0xD0, 0x0A, 0x00, 0x0D,
-	0x15, 0x1F, 0x2E, 0xFF,
+	0x08, 0x00, 0x29, 0xC0,
+	0xC4, 0xDF, 0xC2, 0x0C,
+	0x0C, 0x63, 0xE3, 0x99,
 };
 
 static char ssd2080m_720p_video_on_cmd23[] = {
-	0x06, 0x00, 0x29, 0xC0,
-	0xD1, 0x28, 0x27, 0x14,
-	0x02, 0x01, 0xFF, 0xFF,
+	0x07, 0x00, 0x29, 0xC0,
+	0xD0, 0x0A, 0x00, 0x06,
+	0x09, 0x10, 0x20, 0xFF,
 };
 
 static char ssd2080m_720p_video_on_cmd24[] = {
-	0x07, 0x00, 0x29, 0xC0,
-	0xD2, 0x0A, 0x00, 0x0D,
-	0x15, 0x1F, 0x2E, 0xFF,
+	0x06, 0x00, 0x29, 0xC0,
+	0xD1, 0x1D, 0x32, 0x1B,
+	0x00, 0x00, 0xFF, 0xFF,
 };
 
 static char ssd2080m_720p_video_on_cmd25[] = {
-	0x06, 0x00, 0x29, 0xC0,
-	0xD3, 0x28, 0x27, 0x14,
-	0x02, 0x01, 0xFF, 0xFF,
+	0x07, 0x00, 0x29, 0xC0,
+	0xD2, 0x0A, 0x00, 0x06,
+	0x09, 0x10, 0x20, 0xFF,
 };
 
 static char ssd2080m_720p_video_on_cmd26[] = {
-	0x07, 0x00, 0x29, 0xC0,
-	0xD4, 0x0A, 0x00, 0x0D,
-	0x15, 0x1F, 0x2E, 0xFF,
+	0x06, 0x00, 0x29, 0xC0,
+	0xD3, 0x1D, 0x32, 0x1B,
+	0x00, 0x00, 0xFF, 0xFF,
 };
 
 static char ssd2080m_720p_video_on_cmd27[] = {
-	0x06, 0x00, 0x29, 0xC0,
-	0xD5, 0x28, 0x27, 0x14,
-	0x02, 0x01, 0xFF, 0xFF,
+	0x07, 0x00, 0x29, 0xC0,
+	0xD4, 0x0A, 0x00, 0x06,
+	0x09, 0x10, 0x20, 0xFF,
 };
 
 static char ssd2080m_720p_video_on_cmd28[] = {
-	0x07, 0x00, 0x29, 0xC0,
-	0xD6, 0x0A, 0x00, 0x0D,
-	0x15, 0x1F, 0x2E, 0xFF,
+	0x06, 0x00, 0x29, 0xC0,
+	0xD5, 0x1D, 0x32, 0x1B,
+	0x00, 0x00, 0xFF, 0xFF,
 };
 
 static char ssd2080m_720p_video_on_cmd29[] = {
-	0x06, 0x00, 0x29, 0xC0,
-	0xD7, 0x28, 0x27, 0x14,
-	0x02, 0x01, 0xFF, 0xFF,
+	0x07, 0x00, 0x29, 0xC0,
+	0xD6, 0x0A, 0x00, 0x06,
+	0x09, 0x10, 0x20, 0xFF,
 };
 
 static char ssd2080m_720p_video_on_cmd30[] = {
-	0x07, 0x00, 0x29, 0xC0,
-	0xD8, 0x0A, 0x00, 0x0D,
-	0x15, 0x1F, 0x2E, 0xFF,
+	0x06, 0x00, 0x29, 0xC0,
+	0xD7, 0x1D, 0x32, 0x1B,
+	0x00, 0x00, 0xFF, 0xFF,
 };
 
 static char ssd2080m_720p_video_on_cmd31[] = {
-	0x06, 0x00, 0x29, 0xC0,
-	0xD9, 0x28, 0x27, 0x14,
-	0x02, 0x01, 0xFF, 0xFF,
+	0x07, 0x00, 0x29, 0xC0,
+	0xD8, 0x0A, 0x00, 0x06,
+	0x09, 0x10, 0x20, 0xFF,
 };
 
 static char ssd2080m_720p_video_on_cmd32[] = {
-	0x07, 0x00, 0x29, 0xC0,
-	0xDA, 0x0A, 0x00, 0x0D,
-	0x15, 0x1F, 0x2E, 0xFF,
+	0x06, 0x00, 0x29, 0xC0,
+	0xD9, 0x1D, 0x32, 0x1B,
+	0x00, 0x00, 0xFF, 0xFF,
 };
 
 static char ssd2080m_720p_video_on_cmd33[] = {
-	0x06, 0x00, 0x29, 0xC0,
-	0xDB, 0x28, 0x27, 0x14,
-	0x02, 0x01, 0xFF, 0xFF,
+	0x07, 0x00, 0x29, 0xC0,
+	0xDA, 0x0A, 0x00, 0x06,
+	0x09, 0x10, 0x20, 0xFF,
 };
 
 static char ssd2080m_720p_video_on_cmd34[] = {
+	0x06, 0x00, 0x29, 0xC0,
+	0xDB, 0x1D, 0x32, 0x1B,
+	0x00, 0x00, 0xFF, 0xFF,
+};
+
+static char ssd2080m_720p_video_on_cmd35[] = {
 	0x03, 0x00, 0x29, 0xC0,
 	0xCC, 0x10, 0x00, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd35[] = {
+static char ssd2080m_720p_video_on_cmd36[] = {
 	0x04, 0x00, 0x29, 0xC0,
 	0xCE, 0x4E, 0x55, 0xA5,
 };
 
-static char ssd2080m_720p_video_on_cmd36[] = {
+static char ssd2080m_720p_video_on_cmd37[] = {
 	0x04, 0x00, 0x29, 0xC0,
 	0xE0, 0x01, 0x02, 0x02,
 };
 
-static char ssd2080m_720p_video_on_cmd37[] = {
+static char ssd2080m_720p_video_on_cmd38[] = {
 	0x05, 0x00, 0x29, 0xC0,
 	0xF6, 0x00, 0x00, 0x00,
 	0x00, 0xFF, 0xFF, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd38[] = {
+static char ssd2080m_720p_video_on_cmd39[] = {
 	0x05, 0x00, 0x29, 0xC0,
 	0xF7, 0x00, 0x00, 0x00,
 	0x00, 0xFF, 0xFF, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd39[] = {
+static char ssd2080m_720p_video_on_cmd40[] = {
 	0x03, 0x00, 0x29, 0xC0,
 	0xE1, 0x90, 0x00, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd40[] = {
+static char ssd2080m_720p_video_on_cmd41[] = {
 	0x07, 0x00, 0x29, 0xC0,
 	0xDE, 0x95, 0xCF, 0xE2,
 	0xCE, 0x11, 0x15, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd41[] = {
+static char ssd2080m_720p_video_on_cmd42[] = {
 	0x02, 0x00, 0x29, 0xC0,
 	0xCF, 0x46, 0xFF, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd42[] = {
-	0x03, 0x00, 0x29, 0xC0,
-	0xC5, 0x77, 0x47, 0xFF,
+static char ssd2080m_720p_video_on_cmd43[] = {
+	0x02, 0x00, 0x29, 0xC0,
+	0xC5, 0x66, 0xFF, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd43[] = {
+static char ssd2080m_720p_video_on_cmd44[] = {
 	0x03, 0x00, 0x29, 0xC0,
 	0xED, 0x00, 0x20, 0xFF,
 };
 
-static char ssd2080m_720p_video_on_cmd44[] = {
-	0x11, 0x00, 0x05, 0x80
-};
-
 static char ssd2080m_720p_video_on_cmd45[] = {
-	0x29, 0x00, 0x05, 0x80
+	0x53, 0x2c, 0x15, 0x80
 };
 
 static char ssd2080m_720p_video_on_cmd46[] = {
-	0x53, 0x2c, 0x15, 0x80
+	0x11, 0x00, 0x05, 0x80
+};
+
+static char ssd2080m_720p_video_on_cmd47[] = {
+	0x29, 0x00, 0x05, 0x80
 };
 
 static struct mipi_dsi_cmd ssd2080m_720p_video_on_command[] = {
 	{0x4, ssd2080m_720p_video_on_cmd0, 0x00},
-	{0xc, ssd2080m_720p_video_on_cmd1, 0x00},
+	{0x8, ssd2080m_720p_video_on_cmd1, 0x00},
 	{0xc, ssd2080m_720p_video_on_cmd2, 0x00},
-	{0x8, ssd2080m_720p_video_on_cmd3, 0x00},
+	{0xc, ssd2080m_720p_video_on_cmd3, 0x00},
 	{0x8, ssd2080m_720p_video_on_cmd4, 0x00},
 	{0x8, ssd2080m_720p_video_on_cmd5, 0x00},
 	{0x8, ssd2080m_720p_video_on_cmd6, 0x00},
 	{0x8, ssd2080m_720p_video_on_cmd7, 0x00},
 	{0x8, ssd2080m_720p_video_on_cmd8, 0x00},
-	{0x10, ssd2080m_720p_video_on_cmd9, 0x00},
-	{0xc, ssd2080m_720p_video_on_cmd10, 0x00},
-	{0x8, ssd2080m_720p_video_on_cmd11, 0x00},
-	{0xc, ssd2080m_720p_video_on_cmd12, 0x00},
-	{0x10, ssd2080m_720p_video_on_cmd13, 0x00},
+	{0x8, ssd2080m_720p_video_on_cmd9, 0x00},
+	{0x10, ssd2080m_720p_video_on_cmd10, 0x00},
+	{0xc, ssd2080m_720p_video_on_cmd11, 0x00},
+	{0x8, ssd2080m_720p_video_on_cmd12, 0x00},
+	{0xc, ssd2080m_720p_video_on_cmd13, 0x00},
 	{0x10, ssd2080m_720p_video_on_cmd14, 0x00},
 	{0x10, ssd2080m_720p_video_on_cmd15, 0x00},
 	{0x10, ssd2080m_720p_video_on_cmd16, 0x00},
 	{0x10, ssd2080m_720p_video_on_cmd17, 0x00},
-	{0x8, ssd2080m_720p_video_on_cmd18, 0x00},
+	{0x10, ssd2080m_720p_video_on_cmd18, 0x00},
 	{0x8, ssd2080m_720p_video_on_cmd19, 0x00},
-	{0xc, ssd2080m_720p_video_on_cmd20, 0x00},
+	{0x8, ssd2080m_720p_video_on_cmd20, 0x00},
 	{0xc, ssd2080m_720p_video_on_cmd21, 0x00},
 	{0xc, ssd2080m_720p_video_on_cmd22, 0x00},
 	{0xc, ssd2080m_720p_video_on_cmd23, 0x00},
@@ -364,34 +369,37 @@
 	{0xc, ssd2080m_720p_video_on_cmd31, 0x00},
 	{0xc, ssd2080m_720p_video_on_cmd32, 0x00},
 	{0xc, ssd2080m_720p_video_on_cmd33, 0x00},
-	{0x8, ssd2080m_720p_video_on_cmd34, 0x00},
+	{0xc, ssd2080m_720p_video_on_cmd34, 0x00},
 	{0x8, ssd2080m_720p_video_on_cmd35, 0x00},
 	{0x8, ssd2080m_720p_video_on_cmd36, 0x00},
-	{0xc, ssd2080m_720p_video_on_cmd37, 0x00},
+	{0x8, ssd2080m_720p_video_on_cmd37, 0x00},
 	{0xc, ssd2080m_720p_video_on_cmd38, 0x00},
-	{0x8, ssd2080m_720p_video_on_cmd39, 0x00},
-	{0xc, ssd2080m_720p_video_on_cmd40, 0x00},
-	{0x8, ssd2080m_720p_video_on_cmd41, 0x00},
+	{0xc, ssd2080m_720p_video_on_cmd39, 0x00},
+	{0x8, ssd2080m_720p_video_on_cmd40, 0x00},
+	{0xc, ssd2080m_720p_video_on_cmd41, 0x00},
 	{0x8, ssd2080m_720p_video_on_cmd42, 0x00},
 	{0x8, ssd2080m_720p_video_on_cmd43, 0x00},
-	{0x4, ssd2080m_720p_video_on_cmd44, 0xB4},
-	{0x4, ssd2080m_720p_video_on_cmd45, 0x82},
-	{0x4, ssd2080m_720p_video_on_cmd46, 0x00}
+	{0x8, ssd2080m_720p_video_on_cmd44, 0x00},
+	{0x4, ssd2080m_720p_video_on_cmd45, 0x00},
+	{0x4, ssd2080m_720p_video_on_cmd46, 0x20},
+	{0x4, ssd2080m_720p_video_on_cmd47, 0x20}
 };
 
-#define SSD2080M_720P_VIDEO_ON_COMMAND 47
+#define SSD2080M_720P_VIDEO_ON_COMMAND 48
 
 
 static char ssd2080m_720p_videooff_cmd0[] = {
-	0x10, 0x00, 0x15, 0x80
+	0x10, 0x00, 0x05, 0x80
 };
 
 static char ssd2080m_720p_videooff_cmd1[] = {
-	0x53, 0x00, 0x15, 0x80
+	0x02, 0x00, 0x39, 0xC0,
+	0x53, 0x00, 0xFF, 0xFF,
 };
 
 static char ssd2080m_720p_videooff_cmd2[] = {
-	0xc2, 0x00, 0x15, 0x80
+	0x02, 0x00, 0x39, 0xC0,
+	0xc2, 0x00, 0xFF, 0xFF,
 };
 
 static char ssd2080m_720p_videooff_cmd3[] = {
@@ -400,7 +408,8 @@
 };
 
 static char ssd2080m_720p_videooff_cmd4[] = {
-	0xde, 0x84, 0x00, 0xFF, 0x15, 0x80
+	0x03, 0x00, 0x39, 0xC0,
+	0xde, 0x84, 0x00, 0xFF,
 };
 
 static char ssd2080m_720p_videooff_cmd5[] = {
@@ -409,17 +418,18 @@
 };
 
 static char ssd2080m_720p_videooff_cmd6[] = {
-	0xc3, 0x00, 0x15, 0x80
+	0x02, 0x00, 0x39, 0xC0,
+	0xc3, 0x00, 0xFF, 0xFF,
 };
 
 static struct mipi_dsi_cmd ssd2080m_720p_video_off_command[] = {
 	{0x4, ssd2080m_720p_videooff_cmd0, 0x32},
-	{0x4, ssd2080m_720p_videooff_cmd1, 0x32},
-	{0x4, ssd2080m_720p_videooff_cmd2, 0x00},
+	{0x8, ssd2080m_720p_videooff_cmd1, 0x20},
+	{0x8, ssd2080m_720p_videooff_cmd2, 0x20},
 	{0x8, ssd2080m_720p_videooff_cmd3, 0x00},
-	{0x4, ssd2080m_720p_videooff_cmd4, 0x50},
+	{0x8, ssd2080m_720p_videooff_cmd4, 0x20},
 	{0x8, ssd2080m_720p_videooff_cmd5, 0x00},
-	{0x4, ssd2080m_720p_videooff_cmd6, 0x00}
+	{0x8, ssd2080m_720p_videooff_cmd6, 0x00}
 };
 
 #define SSD2080M_720P_VIDEO_OFF_COMMAND 7
@@ -433,7 +443,7 @@
 /* Command mode panel information                                            */
 /*---------------------------------------------------------------------------*/
 static struct commandpanel_info ssd2080m_720p_video_command_panel = {
-	1, 1, 1, 0, 0, 0x2c, 0, 0, 0, 1, 0, 0
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 };
 
 /*---------------------------------------------------------------------------*/
diff --git a/dev/gcdb/display/panel_display.c b/dev/gcdb/display/panel_display.c
index 8503760..4651051 100644
--- a/dev/gcdb/display/panel_display.c
+++ b/dev/gcdb/display/panel_display.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -108,7 +108,6 @@
 	pinfo->rotation = pstruct->paneldata->panel_orientation;
 	pinfo->mipi.interleave_mode = pstruct->paneldata->interleave_mode;
 	pinfo->mipi.broadcast = pstruct->paneldata->panel_broadcast_mode;
-	pinfo->lowpowerstop = pstruct->paneldata->dsi_lp11_atinit;
 	pinfo->mipi.vc = pstruct->paneldata->dsi_virtualchannel_id;
 	pinfo->mipi.frame_rate = pstruct->paneldata->panel_framerate;
 	pinfo->mipi.stream = pstruct->paneldata->dsi_stream;
@@ -235,7 +234,7 @@
 			pinfo->mipi.dst_format,
 			pinfo->mipi.traffic_mode,
 			lane_enable,
-			pinfo->lowpowerstop,
+			pinfo->mipi.hsa_power_stop,
 			pinfo->mipi.eof_bllp_power,
 			pinfo->mipi.interleave_mode,
 			MIPI_DSI0_BASE);
@@ -255,7 +254,7 @@
 			pinfo->mipi.dst_format,
 			pinfo->mipi.traffic_mode,
 			lane_enable,
-			pinfo->lowpowerstop,
+			pinfo->mipi.hsa_power_stop,
 			pinfo->mipi.eof_bllp_power,
 			pinfo->mipi.interleave_mode,
 			MIPI_DSI1_BASE);
@@ -269,6 +268,10 @@
 	int ret = NO_ERROR;
 	uint8_t lane_en = 0;
 	uint8_t ystride = pinfo->bpp / 8;
+	uint32_t panel_width = pinfo->xres;
+
+	if (pinfo->mipi.dual_dsi)
+		panel_width = panel_width / 2;
 
 	if (pinfo->mipi.data_lane0)
 		lane_en |= (1 << 0);
@@ -279,12 +282,22 @@
 	if (pinfo->mipi.data_lane3)
 		lane_en |= (1 << 3);
 
-	ret = mdss_dsi_cmd_mode_config((pinfo->xres + plcdc->xres_pad),
+	ret = mdss_dsi_cmd_mode_config((panel_width + plcdc->xres_pad),
 			(pinfo->yres + plcdc->yres_pad),
-			(pinfo->xres), (pinfo->yres),
+			panel_width, (pinfo->yres),
 			pinfo->mipi.dst_format,
 			ystride, lane_en,
-			pinfo->mipi.interleave_mode);
+			pinfo->mipi.interleave_mode,
+			MIPI_DSI0_BASE);
+
+	if (pinfo->mipi.dual_dsi)
+		ret = mdss_dsi_cmd_mode_config((panel_width + plcdc->xres_pad),
+			(pinfo->yres + plcdc->yres_pad),
+			panel_width, (pinfo->yres),
+			pinfo->mipi.dst_format,
+			ystride, lane_en,
+			pinfo->mipi.interleave_mode,
+			MIPI_DSI1_BASE);
 
 	return ret;
 }
diff --git a/dev/pmic/pm8x41/include/pm8x41.h b/dev/pmic/pm8x41/include/pm8x41.h
index ce0ea10..34c4b9c 100644
--- a/dev/pmic/pm8x41/include/pm8x41.h
+++ b/dev/pmic/pm8x41/include/pm8x41.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2014, 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
@@ -186,6 +186,7 @@
 	enum mpp_mode_en_source_select mode;
 };
 
+#define PM8x41_MMP2_BASE                      0xA100
 #define PM8x41_MMP3_BASE                      0xA200
 
 void pm8x41_lpg_write(uint8_t chan, uint8_t off, uint8_t val);
diff --git a/dev/pmic/pm8x41/include/pm8x41_wled.h b/dev/pmic/pm8x41/include/pm8x41_wled.h
index 92632ca..8ad7370 100644
--- a/dev/pmic/pm8x41/include/pm8x41_wled.h
+++ b/dev/pmic/pm8x41/include/pm8x41_wled.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -32,7 +32,7 @@
 
 #define PM_WLED_BASE                 0x0D800
 #define PM_WLED_CTNL_REG(n)          (PM_WLED_BASE + n)
-#define PM_WLED_LED_CTNL_REG(n)      (PM_WLED_BASE + 0x60 + (n-1)*10)
+#define PM_WLED_LED_CTNL_REG(n)      (PM_WLED_BASE + 0x60 + (n-1)*0x10)
 
 #define PM_WLED_LED1_BRIGHTNESS_LSB  PM_WLED_CTNL_REG(0x40)
 #define PM_WLED_LED1_BRIGHTNESS_MSB  PM_WLED_CTNL_REG(0x41)
diff --git a/include/dev/udc.h b/include/dev/udc.h
index 0dd1f86..f550410 100644
--- a/include/dev/udc.h
+++ b/include/dev/udc.h
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 2009, Google Inc.
  * All rights reserved.
- * Copyright (c) 2013, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2014, 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
@@ -120,6 +120,10 @@
 #define PORTSC_PTC_SE0_NAK	 (0x03 << 16)
 #define PORTSC_PTC_TST_PKT   (0x4 << 16)
 
+#define USB_EP_NUM_MASK      0x0f
+#define USB_EP_DIR_MASK      0x80
+#define USB_EP_DIR_IN        0x80
+
 struct setup_packet {
 	unsigned char type;
 	unsigned char request;
diff --git a/platform/apq8084/include/platform/iomap.h b/platform/apq8084/include/platform/iomap.h
index 3cdf317..9ab0b30 100644
--- a/platform/apq8084/include/platform/iomap.h
+++ b/platform/apq8084/include/platform/iomap.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -229,6 +229,12 @@
 #define TRIG_CTRL                   0x084
 #define CTRL                        0x004
 #define COMMAND_MODE_DMA_CTRL       0x03C
+#define COMMAND_MODE_MDP_CTRL       0x040
+#define COMMAND_MODE_MDP_DCS_CMD_CTRL   0x044
+#define COMMAND_MODE_MDP_STREAM0_CTRL   0x058
+#define COMMAND_MODE_MDP_STREAM0_TOTAL  0x05C
+#define COMMAND_MODE_MDP_STREAM1_CTRL   0x060
+#define COMMAND_MODE_MDP_STREAM1_TOTAL  0x064
 #define ERR_INT_MASK0               0x10C
 
 #define LANE_SWAP_CTL               0x0B0
@@ -253,6 +259,7 @@
 #define CMD_MODE_DMA_SW_TRIGGER     0x090
 
 #define EOT_PACKET_CTRL             0x0C8
+#define MISR_CMD_CTRL               0x0A0
 #define MISR_VIDEO_CTRL             0x0A4
 #define VIDEO_MODE_CTRL             0x010
 #define HS_TIMER_CTRL               0x0BC
diff --git a/platform/apq8084/rules.mk b/platform/apq8084/rules.mk
index bd022b3..d3f97c2 100644
--- a/platform/apq8084/rules.mk
+++ b/platform/apq8084/rules.mk
@@ -11,7 +11,7 @@
 DEFINES += PERIPH_BLK_BLSP=1
 DEFINES += WITH_CPU_EARLY_INIT=0 WITH_CPU_WARM_BOOT=0 \
 	   MMC_SLOT=$(MMC_SLOT) SSD_ENABLE
-#DEFINES += TZ_SAVE_KERNEL_HASH
+DEFINES += TZ_SAVE_KERNEL_HASH
 
 INCLUDES += -I$(LOCAL_DIR)/include -I$(LK_TOP_DIR)/platform/msm_shared/include
 
diff --git a/platform/mdm9x15/include/platform/iomap.h b/platform/mdm9x15/include/platform/iomap.h
index 4171c73..e577a07 100644
--- a/platform/mdm9x15/include/platform/iomap.h
+++ b/platform/mdm9x15/include/platform/iomap.h
@@ -68,6 +68,7 @@
 #define DGT_COUNT_VAL     TMR_REG(0x0028)
 #define DGT_ENABLE        TMR_REG(0x002C)
 #define DGT_CLEAR         TMR_REG(0x0030)
+#define DGT_CLK_CTL       TMR_REG(0x0034)
 /* TMR_STS - status of SCSS timers */
 #define SPSS_TIMER_STATUS TMR_REG(0x0088)
 
diff --git a/platform/mdm9x15/platform.c b/platform/mdm9x15/platform.c
index d05b28e..15724d1 100644
--- a/platform/mdm9x15/platform.c
+++ b/platform/mdm9x15/platform.c
@@ -76,7 +76,12 @@
 	/* disable timer */
 	writel(0, DGT_ENABLE);
 
-	ticks_per_sec = 19200000; /* Uses CXO (19.2 MHz) */
+	/* DGT uses CXO source which is 19.2MHz.
+	* Set clock divider to 4.
+	*/
+	writel(3, DGT_CLK_CTL);
+
+	ticks_per_sec = 4800000; /* (19.2MHz/4) */
 }
 
 /* Returns timer ticks per sec */
diff --git a/platform/mdmkrypton/acpuclock.c b/platform/mdm9x35/acpuclock.c
similarity index 100%
rename from platform/mdmkrypton/acpuclock.c
rename to platform/mdm9x35/acpuclock.c
diff --git a/platform/mdmkrypton/gpio.c b/platform/mdm9x35/gpio.c
similarity index 100%
rename from platform/mdmkrypton/gpio.c
rename to platform/mdm9x35/gpio.c
diff --git a/platform/mdmkrypton/include/platform/clock.h b/platform/mdm9x35/include/platform/clock.h
similarity index 95%
rename from platform/mdmkrypton/include/platform/clock.h
rename to platform/mdm9x35/include/platform/clock.h
index f066bfd..a45a79e 100755
--- a/platform/mdmkrypton/include/platform/clock.h
+++ b/platform/mdm9x35/include/platform/clock.h
@@ -26,8 +26,8 @@
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef __PLATFORM_MDMKRYPTON_CLOCK_H
-#define __PLATFORM_MDMKRYPTON_CLOCK_H
+#ifndef __PLATFORM_MDM9635_CLOCK_H
+#define __PLATFORM_MDM9635_CLOCK_H
 
 #define UART_DM_CLK_RX_TX_BIT_RATE 0xCC
 
diff --git a/platform/mdmkrypton/include/platform/gpio.h b/platform/mdm9x35/include/platform/gpio.h
similarity index 96%
rename from platform/mdmkrypton/include/platform/gpio.h
rename to platform/mdm9x35/include/platform/gpio.h
index 4176864..38367c2 100755
--- a/platform/mdmkrypton/include/platform/gpio.h
+++ b/platform/mdm9x35/include/platform/gpio.h
@@ -26,8 +26,8 @@
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef __PLATFORM_MDMKRYPTON_GPIO_H
-#define __PLATFORM_MDMKRYPTON_GPIO_H
+#ifndef __PLATFORM_MDM9635_GPIO_H
+#define __PLATFORM_MDM9635_GPIO_H
 
 /* GPIO TLMM: Direction */
 #define GPIO_INPUT      0
diff --git a/platform/mdmkrypton/include/platform/iomap.h b/platform/mdm9x35/include/platform/iomap.h
similarity index 98%
rename from platform/mdmkrypton/include/platform/iomap.h
rename to platform/mdm9x35/include/platform/iomap.h
index 30cc6e6..cf84ee7 100755
--- a/platform/mdmkrypton/include/platform/iomap.h
+++ b/platform/mdm9x35/include/platform/iomap.h
@@ -26,8 +26,8 @@
  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef _PLATFORM_MDMKRYPTON_IOMAP_H_
-#define _PLATFORM_MDMKRYPTON_IOMAP_H_
+#ifndef _PLATFORM_MDM9635_IOMAP_H_
+#define _PLATFORM_MDM9635_IOMAP_H_
 
 #define MSM_IOMAP_BASE            0xF9000000
 #define MSM_IOMAP_END             0xFEFFFFFF
diff --git a/platform/mdmkrypton/include/platform/irqs.h b/platform/mdm9x35/include/platform/irqs.h
similarity index 97%
rename from platform/mdmkrypton/include/platform/irqs.h
rename to platform/mdm9x35/include/platform/irqs.h
index f8bb0de..c45f76c 100755
--- a/platform/mdmkrypton/include/platform/irqs.h
+++ b/platform/mdm9x35/include/platform/irqs.h
@@ -26,8 +26,8 @@
  *
  */
 
-#ifndef __IRQS_MDMKRYPTON_H
-#define __IRQS_MDMKRYPTON_H
+#ifndef __IRQS_MDM9635_H
+#define __IRQS_MDM9635_H
 
 /* TBD: The numbers need to be reviewed */
 
diff --git a/platform/mdmkrypton/mdmkrypton-clock.c b/platform/mdm9x35/mdm9x35-clock.c
similarity index 100%
rename from platform/mdmkrypton/mdmkrypton-clock.c
rename to platform/mdm9x35/mdm9x35-clock.c
diff --git a/platform/mdmkrypton/platform.c b/platform/mdm9x35/platform.c
similarity index 100%
rename from platform/mdmkrypton/platform.c
rename to platform/mdm9x35/platform.c
diff --git a/platform/mdmkrypton/rules.mk b/platform/mdm9x35/rules.mk
similarity index 91%
rename from platform/mdmkrypton/rules.mk
rename to platform/mdm9x35/rules.mk
index 975feeb..556aea9 100755
--- a/platform/mdmkrypton/rules.mk
+++ b/platform/mdm9x35/rules.mk
@@ -12,7 +12,7 @@
 	$(LOCAL_DIR)/platform.o \
 	$(LOCAL_DIR)/gpio.o \
 	$(LOCAL_DIR)/acpuclock.o \
-	$(LOCAL_DIR)/mdmkrypton-clock.o
+	$(LOCAL_DIR)/mdm9x35-clock.o
 
 LINKER_SCRIPT += $(BUILDDIR)/system-onesegment.ld
 
diff --git a/platform/mpq8092/acpuclock.c b/platform/mpq8092/acpuclock.c
index 1e2ee63..e93788a 100644
--- a/platform/mpq8092/acpuclock.c
+++ b/platform/mpq8092/acpuclock.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -114,7 +114,6 @@
 	char clk_name[64];
 
 	snprintf(clk_name, sizeof(clk_name), "sdc%u_core_clk", interface);
-	mmc_boot_mci_clk_disable();
 	if(freq == MMC_CLK_400KHZ)
 	{
 		ret = clk_get_set_enable(clk_name, 400000, 1);
@@ -142,8 +141,6 @@
 		dprintf(CRITICAL, "failed to set sdc%u_core_clk ret = %d\n", interface, ret);
 		ASSERT(0);
 	}
-	/* Enable MCI clk */
-	mmc_boot_mci_clk_enable();
 }
 
 /* Configure UART clock based on the UART block id*/
diff --git a/platform/mpq8092/include/platform/iomap.h b/platform/mpq8092/include/platform/iomap.h
index 4957aa0..d942192 100644
--- a/platform/mpq8092/include/platform/iomap.h
+++ b/platform/mpq8092/include/platform/iomap.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -53,12 +53,14 @@
 #define MSM_SDC1_BAM_BASE           (PERIPH_SS_BASE + 0x00004000)
 #define MSM_SDC1_BASE               (PERIPH_SS_BASE + 0x00024000)
 #define MSM_SDC1_DML_BASE           (PERIPH_SS_BASE + 0x00024800)
+#define MSM_SDC1_SDHCI_BASE         (PERIPH_SS_BASE + 0x00024900)
 #define MSM_SDC3_BAM_BASE           (PERIPH_SS_BASE + 0x00044000)
 #define MSM_SDC3_BASE               (PERIPH_SS_BASE + 0x00064000)
 #define MSM_SDC3_DML_BASE           (PERIPH_SS_BASE + 0x00064800)
 #define MSM_SDC2_BAM_BASE           (PERIPH_SS_BASE + 0x00084000)
 #define MSM_SDC2_BASE               (PERIPH_SS_BASE + 0x000A4000)
 #define MSM_SDC2_DML_BASE           (PERIPH_SS_BASE + 0x000A4800)
+#define MSM_SDC2_SDHCI_BASE         (PERIPH_SS_BASE + 0x000A4900)
 #define MSM_SDC4_BAM_BASE           (PERIPH_SS_BASE + 0x000C4000)
 #define MSM_SDC4_BASE               (PERIPH_SS_BASE + 0x000E4000)
 #define MSM_SDC4_DML_BASE           (PERIPH_SS_BASE + 0x000E4800)
@@ -144,6 +146,24 @@
 
 #define SDC1_HDRV_PULL_CTL          (TLMM_BASE_ADDR + 0x00002044)
 
+/* SDCC2 */
+#define SDCC2_BCR                   (CLK_CTL_BASE + 0x500) /* block reset */
+#define SDCC2_APPS_CBCR             (CLK_CTL_BASE + 0x504) /* branch control */
+#define SDCC2_AHB_CBCR              (CLK_CTL_BASE + 0x508)
+#define SDCC2_INACTIVITY_TIMER_CBCR (CLK_CTL_BASE + 0x50C)
+#define SDCC2_CMD_RCGR              (CLK_CTL_BASE + 0x510) /* cmd */
+#define SDCC2_CFG_RCGR              (CLK_CTL_BASE + 0x514) /* cfg */
+#define SDCC2_M                     (CLK_CTL_BASE + 0x518) /* m */
+#define SDCC2_N                     (CLK_CTL_BASE + 0x51C) /* n */
+#define SDCC2_D                     (CLK_CTL_BASE + 0x520) /* d */
+
+/* SDHCI */
+#define SDCC_MCI_HC_MODE            (0x00000078)
+#define SDCC_HC_PWRCTL_STATUS_REG   (0x000000DC)
+#define SDCC_HC_PWRCTL_MASK_REG     (0x000000E0)
+#define SDCC_HC_PWRCTL_CLEAR_REG    (0x000000E4)
+#define SDCC_HC_PWRCTL_CTL_REG      (0x000000E8)
+
 /* UART */
 #define BLSP1_UART2_APPS_CBCR       (CLK_CTL_BASE + 0x704)
 #define BLSP1_UART2_APPS_CMD_RCGR   (CLK_CTL_BASE + 0x70C)
diff --git a/platform/mpq8092/include/platform/irqs.h b/platform/mpq8092/include/platform/irqs.h
index 33430cb..ce914af 100644
--- a/platform/mpq8092/include/platform/irqs.h
+++ b/platform/mpq8092/include/platform/irqs.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -47,6 +47,8 @@
 #define USB1_HS_BAM_IRQ                        (GIC_SPI_START + 135)
 #define USB1_HS_IRQ                            (GIC_SPI_START + 134)
 
+#define SDCC1_PWRCTL_IRQ                       (GIC_SPI_START + 138)
+#define SDCC2_PWRCTL_IRQ                       (GIC_SPI_START + 221)
 /* Retrofit universal macro names */
 #define INT_USB_HS                             USB1_HS_IRQ
 
diff --git a/platform/mpq8092/mpq8092-clock.c b/platform/mpq8092/mpq8092-clock.c
index 2da2809..9fa9095 100644
--- a/platform/mpq8092/mpq8092-clock.c
+++ b/platform/mpq8092/mpq8092-clock.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -282,6 +282,46 @@
 	},
 };
 
+static struct rcg_clk sdcc2_apps_clk_src = {
+
+	.cmd_reg      = (uint32_t *) SDCC2_CMD_RCGR,
+	.cfg_reg      = (uint32_t *) SDCC2_CFG_RCGR,
+	.m_reg        = (uint32_t *) SDCC2_M,
+	.n_reg        = (uint32_t *) SDCC2_N,
+	.d_reg        = (uint32_t *) SDCC2_D,
+
+	.set_rate     = clock_lib2_rcg_set_rate_mnd,
+	.freq_tbl     = ftbl_gcc_sdcc1_2_apps_clk,
+	.current_freq = &rcg_dummy_freq,
+
+	.c = {
+		.dbg_name = "sdc2_clk",
+		.ops      = &clk_ops_rcg_mnd,
+	},
+};
+
+static struct branch_clk gcc_sdcc2_apps_clk = {
+
+	.cbcr_reg     = (uint32_t *) SDCC2_APPS_CBCR,
+	.parent       = &sdcc2_apps_clk_src.c,
+
+	.c = {
+		.dbg_name = "gcc_sdcc2_apps_clk",
+		.ops      = &clk_ops_branch,
+	},
+};
+
+static struct branch_clk gcc_sdcc2_ahb_clk = {
+
+	.cbcr_reg     = (uint32_t *) SDCC2_AHB_CBCR,
+	.has_sibling  = 1,
+
+	.c = {
+		.dbg_name = "gcc_sdcc2_ahb_clk",
+		.ops      = &clk_ops_branch,
+	},
+};
+
 
 /* Clock lookup table */
 static struct clk_lookup msm_clocks_8092[] =
@@ -289,6 +329,9 @@
 	CLK_LOOKUP("sdc1_iface_clk", gcc_sdcc1_ahb_clk.c),
 	CLK_LOOKUP("sdc1_core_clk",  gcc_sdcc1_apps_clk.c),
 
+	CLK_LOOKUP("sdc2_iface_clk", gcc_sdcc2_ahb_clk.c),
+	CLK_LOOKUP("sdc2_core_clk",  gcc_sdcc2_apps_clk.c),
+
 	CLK_LOOKUP("uart4_iface_clk", gcc_blsp1_ahb_clk.c),
 	CLK_LOOKUP("uart4_core_clk",  gcc_blsp1_uart5_apps_clk.c),
 
diff --git a/platform/msm8226/include/platform/iomap.h b/platform/msm8226/include/platform/iomap.h
index 5418229..1f1b335 100644
--- a/platform/msm8226/include/platform/iomap.h
+++ b/platform/msm8226/include/platform/iomap.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2014, 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
@@ -178,6 +178,12 @@
 #define TRIG_CTRL                   0x084
 #define CTRL                        0x004
 #define COMMAND_MODE_DMA_CTRL       0x03C
+#define COMMAND_MODE_MDP_CTRL       0x040
+#define COMMAND_MODE_MDP_DCS_CMD_CTRL   0x044
+#define COMMAND_MODE_MDP_STREAM0_CTRL   0x058
+#define COMMAND_MODE_MDP_STREAM0_TOTAL  0x05C
+#define COMMAND_MODE_MDP_STREAM1_CTRL   0x060
+#define COMMAND_MODE_MDP_STREAM1_TOTAL  0x064
 #define ERR_INT_MASK0               0x10C
 
 #define LANE_SWAP_CTL               0x0B0
@@ -197,6 +203,7 @@
 #define CMD_MODE_DMA_SW_TRIGGER     0x090
 
 #define EOT_PACKET_CTRL             0x0C8
+#define MISR_CMD_CTRL               0x0A0
 #define MISR_VIDEO_CTRL             0x0A4
 #define VIDEO_MODE_CTRL             0x010
 #define HS_TIMER_CTRL               0x0BC
diff --git a/platform/msm8610/include/platform/iomap.h b/platform/msm8610/include/platform/iomap.h
index 7999453..bbbbf58 100644
--- a/platform/msm8610/include/platform/iomap.h
+++ b/platform/msm8610/include/platform/iomap.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
  *
  * Copyright (c) 2008, Google Inc.
  * All rights reserved.
@@ -168,7 +168,14 @@
 #define TRIG_CTRL                   0x080
 #define CTRL                        0x000
 #define COMMAND_MODE_DMA_CTRL       0x038
+#define COMMAND_MODE_MDP_CTRL       0x03C
+#define COMMAND_MODE_MDP_DCS_CMD_CTRL   0x040
+#define COMMAND_MODE_MDP_STREAM0_CTRL   0x054
+#define COMMAND_MODE_MDP_STREAM0_TOTAL  0x058
+#define COMMAND_MODE_MDP_STREAM1_CTRL   0x05C
+#define COMMAND_MODE_MDP_STREAM1_TOTAL  0x060
 #define ERR_INT_MASK0               0x108
+#define RDBK_DATA0                  0x068
 
 #define LANE_SWAP_CTL               0x0AC
 #define TIMING_CTL                  0x0C0
@@ -187,6 +194,7 @@
 #define CMD_MODE_DMA_SW_TRIGGER     0x08C
 
 #define EOT_PACKET_CTRL             0x0C8
+#define MISR_CMD_CTRL               0x09C
 #define MISR_VIDEO_CTRL             0x0A0
 #define VIDEO_MODE_CTRL             0x00C
 #define HS_TIMER_CTRL               0x0B8
diff --git a/platform/msm8916/acpuclock.c b/platform/msm8916/acpuclock.c
new file mode 100644
index 0000000..9197be9
--- /dev/null
+++ b/platform/msm8916/acpuclock.c
@@ -0,0 +1,92 @@
+/* Copyright (c) 2014, 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
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <err.h>
+#include <assert.h>
+#include <debug.h>
+#include <reg.h>
+#include <platform/timer.h>
+#include <platform/iomap.h>
+#include <mmc.h>
+#include <clock.h>
+#include <platform/clock.h>
+
+void hsusb_clock_init(void)
+{
+
+}
+
+void clock_init_mmc(uint32_t interface)
+{
+
+}
+
+/* Configure MMC clock */
+void clock_config_mmc(uint32_t interface, uint32_t freq)
+{
+	mmc_boot_mci_clk_enable();
+}
+
+/* Configure UART clock based on the UART block id*/
+void clock_config_uart_dm(uint8_t id)
+{
+
+}
+
+/* Function to asynchronously reset CE.
+ * Function assumes that all the CE clocks are off.
+ */
+static void ce_async_reset(uint8_t instance)
+{
+
+}
+
+static void clock_ce_enable(uint8_t instance)
+{
+
+}
+
+static void clock_ce_disable(uint8_t instance)
+{
+
+}
+
+void clock_config_ce(uint8_t instance)
+{
+	/* Need to enable the clock before disabling since the clk_disable()
+	 * has a check to default to nop when the clk_enable() is not called
+	 * on that particular clock.
+	 */
+	clock_ce_enable(instance);
+
+	clock_ce_disable(instance);
+
+	ce_async_reset(instance);
+
+	clock_ce_enable(instance);
+}
diff --git a/platform/msm8916/gpio.c b/platform/msm8916/gpio.c
new file mode 100644
index 0000000..1eb900e
--- /dev/null
+++ b/platform/msm8916/gpio.c
@@ -0,0 +1,63 @@
+/* Copyright (c) 2014, 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
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <debug.h>
+#include <reg.h>
+#include <platform/iomap.h>
+#include <platform/gpio.h>
+
+void gpio_tlmm_config(uint32_t gpio, uint8_t func,
+			uint8_t dir, uint8_t pull,
+			uint8_t drvstr, uint32_t enable)
+{
+	uint32_t val = 0;
+	val |= pull;
+	val |= func << 2;
+	val |= drvstr << 6;
+	val |= enable << 9;
+	writel(val, (uint32_t *)GPIO_CONFIG_ADDR(gpio));
+	return;
+}
+
+void gpio_set(uint32_t gpio, uint32_t dir)
+{
+	writel(dir, (uint32_t *)GPIO_IN_OUT_ADDR(gpio));
+	return;
+}
+
+/* Configure gpio for blsp uart 2 */
+void gpio_config_uart_dm(uint8_t id)
+{
+	/* configure rx gpio */
+	gpio_tlmm_config(5, 2, GPIO_INPUT, GPIO_NO_PULL,
+				GPIO_8MA, GPIO_DISABLE);
+
+	/* configure tx gpio */
+	gpio_tlmm_config(4, 2, GPIO_OUTPUT, GPIO_NO_PULL,
+				GPIO_8MA, GPIO_DISABLE);
+}
diff --git a/platform/msm8916/include/platform/clock.h b/platform/msm8916/include/platform/clock.h
new file mode 100644
index 0000000..58403da
--- /dev/null
+++ b/platform/msm8916/include/platform/clock.h
@@ -0,0 +1,45 @@
+/* Copyright (c) 2014, 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
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __MSM8916_CLOCK_H
+#define __MSM8916_CLOCK_H
+
+#include <clock.h>
+#include <clock_lib2.h>
+
+#define UART_DM_CLK_RX_TX_BIT_RATE 0xCC
+
+void platform_clock_init(void);
+
+void clock_init_mmc(uint32_t interface);
+void clock_config_mmc(uint32_t interface, uint32_t freq);
+void clock_config_uart_dm(uint8_t id);
+void hsusb_clock_init(void);
+void clock_config_ce(uint8_t instance);
+
+#endif
diff --git a/platform/msm8916/include/platform/gpio.h b/platform/msm8916/include/platform/gpio.h
new file mode 100644
index 0000000..2e7c070
--- /dev/null
+++ b/platform/msm8916/include/platform/gpio.h
@@ -0,0 +1,58 @@
+/* Copyright (c) 2014, 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
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __PLATFORM_MSM8916_GPIO_H
+#define __PLATFORM_MSM8916_GPIO_H
+
+/* GPIO TLMM: Direction */
+#define GPIO_INPUT      0
+#define GPIO_OUTPUT     1
+
+/* GPIO TLMM: Pullup/Pulldown */
+#define GPIO_NO_PULL    0
+#define GPIO_PULL_DOWN  1
+#define GPIO_KEEPER     2
+#define GPIO_PULL_UP    3
+
+/* GPIO TLMM: Drive Strength */
+#define GPIO_2MA        0
+#define GPIO_4MA        1
+#define GPIO_6MA        2
+#define GPIO_8MA        3
+#define GPIO_10MA       4
+#define GPIO_12MA       5
+#define GPIO_14MA       6
+#define GPIO_16MA       7
+
+/* GPIO TLMM: Status */
+#define GPIO_ENABLE     0
+#define GPIO_DISABLE    1
+
+void gpio_config_uart_dm(uint8_t id);
+
+#endif
diff --git a/platform/msm8916/include/platform/iomap.h b/platform/msm8916/include/platform/iomap.h
new file mode 100644
index 0000000..00c6bdf
--- /dev/null
+++ b/platform/msm8916/include/platform/iomap.h
@@ -0,0 +1,116 @@
+/* Copyright (c) 2014, 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
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _PLATFORM_MSM8916_IOMAP_H_
+#define _PLATFORM_MSM8916_IOMAP_H_
+
+#define MSM_IOMAP_BASE              0xF9000000
+#define MSM_IOMAP_END               0xFEFFFFFF
+
+#define SDRAM_START_ADDR            0x80000000
+
+#define MSM_SHARED_BASE             0xFA000000
+
+#define APPS_SS_BASE                0x0B000000
+
+#define MSM_GIC_DIST_BASE           APPS_SS_BASE
+#define MSM_GIC_CPU_BASE            (APPS_SS_BASE + 0x2000)
+#define APPS_APCS_QTMR_AC_BASE      (APPS_SS_BASE + 0x00020000)
+#define APPS_APCS_F0_QTMR_V1_BASE   (APPS_SS_BASE + 0x00021000)
+#define QTMR_BASE                   APPS_APCS_F0_QTMR_V1_BASE
+
+#define PERIPH_SS_BASE              0x07800000
+
+#define MSM_SDC1_BASE               (PERIPH_SS_BASE + 0x00024000)
+#define MSM_SDC2_BASE               (PERIPH_SS_BASE + 0x00064000)
+
+#define BLSP1_UART0_BASE            (PERIPH_SS_BASE + 0x000AF000)
+#define BLSP1_UART1_BASE            (PERIPH_SS_BASE + 0x000B0000)
+#define MSM_USB_BASE                (PERIPH_SS_BASE + 0x000D9000)
+
+#define CLK_CTL_BASE                0x1800000
+
+#define GCC_WDOG_DEBUG              (CLK_CTL_BASE +  0x00001780)
+
+#define USB_HS_BCR                  (CLK_CTL_BASE + 0x480)
+#define USB_BOOT_CLOCK_CTL          (CLK_CTL_BASE + 0x1A00)
+
+#define SPMI_BASE                   0xFC4C0000
+#define SPMI_GENI_BASE              (SPMI_BASE + 0xA000)
+#define SPMI_PIC_BASE               (SPMI_BASE + 0xB000)
+
+#define MSM_CE1_BAM_BASE            0xFD404000
+#define MSM_CE1_BASE                0xFD41A000
+
+#define TLMM_BASE_ADDR              0xFD510000
+#define GPIO_CONFIG_ADDR(x)         (TLMM_BASE_ADDR + 0x1000 + (x)*0x10)
+#define GPIO_IN_OUT_ADDR(x)         (TLMM_BASE_ADDR + 0x1004 + (x)*0x10)
+
+#define MPM2_MPM_CTRL_BASE          0xFC4A1000
+#define MPM2_MPM_PS_HOLD            0xFC4AB000
+
+/* CE 2 */
+#define  GCC_CE2_BCR                (CLK_CTL_BASE + 0x1080)
+#define  GCC_CE2_CMD_RCGR           (CLK_CTL_BASE + 0x1090)
+#define  GCC_CE2_CFG_RCGR           (CLK_CTL_BASE + 0x1094)
+#define  GCC_CE2_CBCR               (CLK_CTL_BASE + 0x1084)
+#define  GCC_CE2_AXI_CBCR           (CLK_CTL_BASE + 0x1088)
+#define  GCC_CE2_AHB_CBCR           (CLK_CTL_BASE + 0x108C)
+
+/* GPLL */
+#define GPLL0_STATUS                (CLK_CTL_BASE + 0x001C)
+#define APCS_GPLL_ENA_VOTE          (CLK_CTL_BASE + 0x1480)
+#define APCS_CLOCK_BRANCH_ENA_VOTE  (CLK_CTL_BASE + 0x1484)
+
+/* SDCC */
+#define SDCC1_BCR                   (CLK_CTL_BASE + 0x4C0) /* block reset */
+#define SDCC1_APPS_CBCR             (CLK_CTL_BASE + 0x4C4) /* branch control */
+#define SDCC1_AHB_CBCR              (CLK_CTL_BASE + 0x4C8)
+#define SDCC1_INACTIVITY_TIMER_CBCR (CLK_CTL_BASE + 0x4CC)
+#define SDCC1_CMD_RCGR              (CLK_CTL_BASE + 0x4D0) /* cmd */
+#define SDCC1_CFG_RCGR              (CLK_CTL_BASE + 0x4D4) /* cfg */
+#define SDCC1_M                     (CLK_CTL_BASE + 0x4D8) /* m */
+#define SDCC1_N                     (CLK_CTL_BASE + 0x4DC) /* n */
+#define SDCC1_D                     (CLK_CTL_BASE + 0x4E0) /* d */
+
+/* UART */
+#define BLSP1_AHB_CBCR              (CLK_CTL_BASE + 0x5C4)
+#define BLSP1_UART2_APPS_CBCR       (CLK_CTL_BASE + 0x704)
+#define BLSP1_UART2_APPS_CMD_RCGR   (CLK_CTL_BASE + 0x70C)
+#define BLSP1_UART2_APPS_CFG_RCGR   (CLK_CTL_BASE + 0x710)
+#define BLSP1_UART2_APPS_M          (CLK_CTL_BASE + 0x714)
+#define BLSP1_UART2_APPS_N          (CLK_CTL_BASE + 0x718)
+#define BLSP1_UART2_APPS_D          (CLK_CTL_BASE + 0x71C)
+
+/* USB */
+#define USB_HS_SYSTEM_CBCR          (CLK_CTL_BASE + 0x484)
+#define USB_HS_AHB_CBCR             (CLK_CTL_BASE + 0x488)
+#define USB_HS_SYSTEM_CMD_RCGR      (CLK_CTL_BASE + 0x490)
+#define USB_HS_SYSTEM_CFG_RCGR      (CLK_CTL_BASE + 0x494)
+
+#endif
diff --git a/platform/msm8916/include/platform/irqs.h b/platform/msm8916/include/platform/irqs.h
new file mode 100644
index 0000000..f371854
--- /dev/null
+++ b/platform/msm8916/include/platform/irqs.h
@@ -0,0 +1,61 @@
+/* Copyright (c) 2014, 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
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __IRQS_MSM8916_H
+#define __IRQS_MSM8916_H
+
+/* MSM ACPU Interrupt Numbers */
+
+/* 0-15:  STI/SGI (software triggered/generated interrupts)
+ * 16-31: PPI (private peripheral interrupts)
+ * 32+:   SPI (shared peripheral interrupts)
+ */
+
+#define GIC_PPI_START                          16
+#define GIC_SPI_START                          32
+
+#define INT_QTMR_NON_SECURE_PHY_TIMER_EXP      (GIC_PPI_START + 3)
+#define INT_QTMR_VIRTUAL_TIMER_EXP             (GIC_PPI_START + 4)
+
+#define INT_QTMR_FRM_0_PHYSICAL_TIMER_EXP      (GIC_SPI_START + 8)
+
+#define USB1_HS_BAM_IRQ                        (GIC_SPI_START + 135)
+#define USB1_HS_IRQ                            (GIC_SPI_START + 134)
+
+/* Retrofit universal macro names */
+#define INT_USB_HS                             USB1_HS_IRQ
+
+#define EE0_KRAIT_HLOS_SPMI_PERIPH_IRQ         (GIC_SPI_START + 190)
+
+#define NR_MSM_IRQS                            256
+#define NR_GPIO_IRQS                           173
+#define NR_BOARD_IRQS                          0
+
+#define NR_IRQS                                (NR_MSM_IRQS + NR_GPIO_IRQS + \
+                                               NR_BOARD_IRQS)
+#endif /* __IRQS_MSM8916_H */
diff --git a/platform/msm8916/platform.c b/platform/msm8916/platform.c
new file mode 100644
index 0000000..8aaef9c
--- /dev/null
+++ b/platform/msm8916/platform.c
@@ -0,0 +1,49 @@
+/* Copyright (c) 2014, 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
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <debug.h>
+#include <reg.h>
+#include <platform/iomap.h>
+#include <qgic.h>
+#include <qtimer.h>
+
+void platform_early_init(void)
+{
+	qgic_init();
+	qtimer_init();
+}
+
+void platform_init(void)
+{
+	dprintf(INFO, "platform_init()\n");
+}
+
+void platform_uninit(void)
+{
+	qtimer_uninit();
+}
diff --git a/platform/msm8916/rules.mk b/platform/msm8916/rules.mk
new file mode 100644
index 0000000..e30edd3
--- /dev/null
+++ b/platform/msm8916/rules.mk
@@ -0,0 +1,25 @@
+LOCAL_DIR := $(GET_LOCAL_DIR)
+
+ARCH    := arm
+#Compiling this as cortex-a8 until the compiler supports krait
+ARM_CPU := cortex-a8
+CPU     := generic
+
+DEFINES += ARM_CPU_CORE_A7
+
+MMC_SLOT         := 1
+
+DEFINES += PERIPH_BLK_BLSP=1
+DEFINES += WITH_CPU_EARLY_INIT=0 WITH_CPU_WARM_BOOT=0 \
+          MMC_SLOT=$(MMC_SLOT)
+
+INCLUDES += -I$(LOCAL_DIR)/include -I$(LK_TOP_DIR)/platform/msm_shared/include
+
+OBJS += \
+       $(LOCAL_DIR)/platform.o \
+       $(LOCAL_DIR)/acpuclock.o \
+       $(LOCAL_DIR)/gpio.o
+
+LINKER_SCRIPT += $(BUILDDIR)/system-onesegment.ld
+
+include platform/msm_shared/rules.mk
diff --git a/platform/msm8974/include/platform/iomap.h b/platform/msm8974/include/platform/iomap.h
index c9481cf..eb5e349 100644
--- a/platform/msm8974/include/platform/iomap.h
+++ b/platform/msm8974/include/platform/iomap.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2014, 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
@@ -235,6 +235,12 @@
 #define TRIG_CTRL                   0x084
 #define CTRL                        0x004
 #define COMMAND_MODE_DMA_CTRL       0x03C
+#define COMMAND_MODE_MDP_CTRL       0x040
+#define COMMAND_MODE_MDP_DCS_CMD_CTRL   0x044
+#define COMMAND_MODE_MDP_STREAM0_CTRL   0x058
+#define COMMAND_MODE_MDP_STREAM0_TOTAL  0x05C
+#define COMMAND_MODE_MDP_STREAM1_CTRL   0x060
+#define COMMAND_MODE_MDP_STREAM1_TOTAL  0x064
 #define ERR_INT_MASK0               0x10C
 
 #define LANE_SWAP_CTL               0x0B0
@@ -254,6 +260,7 @@
 #define CMD_MODE_DMA_SW_TRIGGER     0x090
 
 #define EOT_PACKET_CTRL             0x0C8
+#define MISR_CMD_CTRL               0x0A0
 #define MISR_VIDEO_CTRL             0x0A4
 #define VIDEO_MODE_CTRL             0x010
 #define HS_TIMER_CTRL               0x0BC
diff --git a/platform/msm_shared/clock_lib2.c b/platform/msm_shared/clock_lib2.c
index 218b585..c97c6cf 100644
--- a/platform/msm_shared/clock_lib2.c
+++ b/platform/msm_shared/clock_lib2.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2014, 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 met:
@@ -223,7 +223,4 @@
 	vote_regval = readl(vclk->vote_reg);
 	vote_regval &= ~vclk->en_mask;
     writel_relaxed(vote_regval, vclk->vote_reg);
-
-    /* wait until status shows it is disabled */
-	while(!(readl(vclk->cbcr_reg) & CBCR_BRANCH_OFF_BIT));
 }
diff --git a/platform/msm_shared/crypto5_eng.c b/platform/msm_shared/crypto5_eng.c
index ce9cf32..e9ea428 100644
--- a/platform/msm_shared/crypto5_eng.c
+++ b/platform/msm_shared/crypto5_eng.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2014, 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
@@ -434,19 +434,45 @@
 	crypto_SHA256_ctx *sha256_ctx = (crypto_SHA256_ctx *) ctx_ptr;
 	uint32_t wr_flags = BAM_DESC_NWD_FLAG | BAM_DESC_INT_FLAG | BAM_DESC_EOT_FLAG;
 	uint32_t ret_status;
+	uint32_t minor_ver = 0;
+	uint8_t *buffer = NULL;
 
-	/* A H/W bug on Crypto 5.0.0 enforces a rule that the desc lengths must be burst aligned. */
-	if ((uint32_t) data_ptr & (CRYPTO_BURST_LEN - 1))
+	/* Bits 23:16 - minor version */
+	minor_ver = (readl(CRYPTO_VERSION(dev->base)) & 0x00FF0000) >> 16;
+
+	/* A H/W bug on Crypto 5.0.0 enforces a rule that the desc lengths must be burst aligned.
+	 * This bug is fixed in 5.1.0 onwards.*/
+
+	if(minor_ver == 0)
 	{
-		dprintf(CRITICAL, "Crypto send data failed\n");
-		dprintf(CRITICAL, "Data start not aligned at burst length.\n");
-		ret_status = CRYPTO_ERR_FAIL;
-		goto CRYPTO_SEND_DATA_ERR;
+		if ((uint32_t) data_ptr & (CRYPTO_BURST_LEN - 1))
+		{
+			dprintf(CRITICAL, "Data start not aligned at burst length.\n");
+
+			buffer = (uint8_t *)memalign(CRYPTO_BURST_LEN, sha256_ctx->bytes_to_write);
+			if(!buffer)
+			{
+				dprintf(CRITICAL, "ERROR: Failed to allocate burst aligned crypto buffer\n");
+				ret_status = CRYPTO_ERR_FAIL;
+				goto CRYPTO_SEND_DATA_ERR;
+			}
+
+			memset(buffer, 0, sha256_ctx->bytes_to_write);
+			memcpy(buffer, data_ptr, sha256_ctx->bytes_to_write);
+		}
 	}
 
-	arch_clean_invalidate_cache_range((addr_t) data_ptr, sha256_ctx->bytes_to_write);
+	if(buffer)
+	{
+		arch_clean_invalidate_cache_range((addr_t) buffer, sha256_ctx->bytes_to_write);
 
-	bam_status = ADD_WRITE_DESC(&dev->bam, data_ptr, sha256_ctx->bytes_to_write, wr_flags);
+		bam_status = ADD_WRITE_DESC(&dev->bam, buffer, sha256_ctx->bytes_to_write, wr_flags);
+	}
+	else
+	{
+		arch_clean_invalidate_cache_range((addr_t) data_ptr, sha256_ctx->bytes_to_write);
+		bam_status = ADD_WRITE_DESC(&dev->bam, data_ptr, sha256_ctx->bytes_to_write, wr_flags);
+	}
 
 	if (bam_status)
 	{
@@ -479,6 +505,9 @@
 
 CRYPTO_SEND_DATA_ERR:
 
+	if(buffer)
+		free(buffer);
+
 	return ret_status;
 }
 
diff --git a/platform/msm_shared/include/mdp5.h b/platform/msm_shared/include/mdp5.h
index f87bdda..8b68ca0 100644
--- a/platform/msm_shared/include/mdp5.h
+++ b/platform/msm_shared/include/mdp5.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2014, 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
@@ -110,9 +110,9 @@
 #define CTL_FLUSH                               0x18
 #define CTL_START                               0x1C
 
-#define MDP_TG_SINK                             REG_MDP(0x4F0)
 #define MDP_REG_SPLIT_DISPLAY_EN                REG_MDP(0x3F4)
 #define MDP_REG_SPLIT_DISPLAY_UPPER_PIPE_CTL    REG_MDP(0x3F8)
+#define MDP_REG_SPLIT_DISPLAY_LOWER_PIPE_CTL    REG_MDP(0x4F0)
 
 #define MDP_INTF_0_BASE                         REG_MDP(0x12500)
 #define MDP_INTF_1_BASE                         REG_MDP(0x12700)
diff --git a/platform/msm_shared/include/mipi_dsi.h b/platform/msm_shared/include/mipi_dsi.h
index dd8910c..477ed97 100755
--- a/platform/msm_shared/include/mipi_dsi.h
+++ b/platform/msm_shared/include/mipi_dsi.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2010-2014, 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
@@ -83,7 +83,7 @@
 #define DTYPE_GEN_LWRITE 0x29	/* 4th Byte is 0xc0 */
 #define DTYPE_DCS_WRITE1 0x15	/* 4th Byte is 0x80 */
 
-#define DSI_RDBK_DATA0 0x06C
+#define RDBK_DATA0 0x06C
 
 //BEGINNING OF Tochiba Config- video mode
 
diff --git a/platform/msm_shared/include/mmc.h b/platform/msm_shared/include/mmc.h
index 15375e4..222c01b 100644
--- a/platform/msm_shared/include/mmc.h
+++ b/platform/msm_shared/include/mmc.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2010-2014, 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
@@ -610,6 +610,14 @@
 #define MMC_CLK_ENABLE      1
 #define MMC_CLK_DISABLE     0
 
+/* SDHC mode & core sw reset related macros */
+#define MMC_BOOT_MCI_HC_MODE                       MMC_BOOT_MCI_REG(0x078)
+#define SDHCI_HC_START_BIT                         0x0
+#define SDHCI_HC_WIDTH                             0x1
+
+#define CORE_SW_RST_START                          0x7
+#define CORE_SW_RST_WIDTH                          0x1
+
 unsigned int mmc_boot_main(unsigned char slot, unsigned int base);
 unsigned int mmc_write(unsigned long long data_addr,
 		       unsigned int data_len, unsigned int *in);
diff --git a/platform/msm_shared/mdp5.c b/platform/msm_shared/mdp5.c
index 82a7f09..50e1cd5 100644
--- a/platform/msm_shared/mdp5.c
+++ b/platform/msm_shared/mdp5.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2014, 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 met:
@@ -251,7 +251,7 @@
 	if (pinfo->lcdc.split_display) {
 		adjust_xres /= 2;
 		if (intf_base == MDP_INTF_1_BASE) {
-			writel(BIT(8), MDP_TG_SINK);
+			writel(BIT(8), MDP_REG_SPLIT_DISPLAY_LOWER_PIPE_CTL);
 			writel(0x0, MDP_REG_SPLIT_DISPLAY_UPPER_PIPE_CTL);
 			writel(0x1, MDP_REG_SPLIT_DISPLAY_EN);
 		}
@@ -363,6 +363,27 @@
 	}
 }
 
+void mdss_qos_remapper_setup(void)
+{
+	uint32_t mdp_hw_rev = readl(MDP_HW_REV);
+	uint32_t map;
+
+	if (MDSS_IS_MAJOR_MINOR_MATCHING(mdp_hw_rev, MDSS_MDP_HW_REV_100) ||
+		MDSS_IS_MAJOR_MINOR_MATCHING(mdp_hw_rev,
+						MDSS_MDP_HW_REV_102))
+		map = 0xE9;
+	else if (MDSS_IS_MAJOR_MINOR_MATCHING(mdp_hw_rev,
+						MDSS_MDP_HW_REV_101))
+		map = 0xA5;
+	else if (MDSS_IS_MAJOR_MINOR_MATCHING(mdp_hw_rev,
+						MDSS_MDP_HW_REV_103))
+		map = 0xFA;
+	else
+		return;
+
+	writel(map, MDP_QOS_REMAPPER_CLASS_0);
+}
+
 int mdp_dsi_video_config(struct msm_panel_info *pinfo,
 		struct fbcon_config *fb)
 {
@@ -380,7 +401,7 @@
 	mdss_vbif_setup();
 	mdss_smp_setup(pinfo);
 
-	writel(0x0E9, MDP_QOS_REMAPPER_CLASS_0);
+	mdss_qos_remapper_setup();
 
 	mdss_rgb_pipe_config(fb, pinfo, MDP_VP_0_RGB_0_BASE);
 	if (pinfo->lcdc.dual_pipe)
@@ -416,7 +437,7 @@
 	mdss_vbif_setup();
 	mdss_smp_setup(pinfo);
 
-	writel(0x0E9, MDP_QOS_REMAPPER_CLASS_0);
+	mdss_qos_remapper_setup();
 
 	mdss_rgb_pipe_config(fb, pinfo, MDP_VP_0_RGB_0_BASE);
 	if (pinfo->lcdc.dual_pipe)
@@ -442,6 +463,7 @@
 int mdp_dsi_cmd_config(struct msm_panel_info *pinfo,
                 struct fbcon_config *fb)
 {
+	uint32_t intf_sel = BIT(8);
 	int ret = NO_ERROR;
 
 	struct lcdc_panel_info *lcdc = NULL;
@@ -454,21 +476,38 @@
 	if (lcdc == NULL)
 		return ERR_INVALID_ARGS;
 
+	if (pinfo->lcdc.split_display) {
+		writel(0x102, MDP_REG_SPLIT_DISPLAY_UPPER_PIPE_CTL);
+		writel(0x2, MDP_REG_SPLIT_DISPLAY_LOWER_PIPE_CTL);
+		writel(0x1, MDP_REG_SPLIT_DISPLAY_EN);
+	}
+
 	mdss_mdp_intf_off = mdss_mdp_intf_offset();
 
 	mdp_clk_gating_ctrl();
 
-	writel(0x0100, MDP_DISP_INTF_SEL);
+	if (pinfo->mipi.dual_dsi)
+		intf_sel |= BIT(16); /* INTF 2 enable */
+
+	writel(intf_sel, MDP_DISP_INTF_SEL);
 
 	mdss_vbif_setup();
 	mdss_smp_setup(pinfo);
+	mdss_qos_remapper_setup();
+
 	mdss_rgb_pipe_config(fb, pinfo, MDP_VP_0_RGB_0_BASE);
+	if (pinfo->lcdc.dual_pipe)
+		mdss_rgb_pipe_config(fb, pinfo, MDP_VP_0_RGB_1_BASE);
 
 	mdss_layer_mixer_setup(fb, pinfo);
 
 	writel(0x213F, MDP_INTF_1_BASE + MDP_PANEL_FORMAT + mdss_mdp_intf_off);
+	writel(0x21f20, MDP_CTL_0_BASE + CTL_TOP);
 
-	writel(0x20020, MDP_CTL_0_BASE + CTL_TOP);
+	if (pinfo->mipi.dual_dsi) {
+		writel(0x213F, MDP_INTF_2_BASE + MDP_PANEL_FORMAT + mdss_mdp_intf_off);
+		writel(0x21F30, MDP_CTL_1_BASE + CTL_TOP);
+	}
 
 	return ret;
 }
@@ -515,6 +554,7 @@
 int mdp_dma_on(void)
 {
 	writel(0x32048, MDP_CTL_0_BASE + CTL_FLUSH);
+	writel(0x32090, MDP_CTL_1_BASE + CTL_FLUSH);
 	writel(0x01, MDP_CTL_0_BASE + CTL_START);
 	return NO_ERROR;
 }
diff --git a/platform/msm_shared/mipi_dsi.c b/platform/msm_shared/mipi_dsi.c
index 3b18833..d67061f 100644
--- a/platform/msm_shared/mipi_dsi.c
+++ b/platform/msm_shared/mipi_dsi.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2010-2014, 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
@@ -272,7 +272,7 @@
 	if (rlen > 4)
 		rlen = 4;	/* 4 x 32 bits registers only */
 
-	off = DSI_RDBK_DATA0;
+	off = RDBK_DATA0;
 	off += ((rlen - 1) * 4);
 
 	for (i = 0; i < rlen; i++) {
@@ -1157,7 +1157,8 @@
 	uint16_t dst_format,
 	uint8_t ystride,
 	uint8_t lane_en,
-	uint8_t interleav)
+	uint8_t interleav,
+	uint32_t ctl_base)
 {
 	uint16_t dst_fmt = 0;
 
@@ -1178,36 +1179,36 @@
 	}
 
 #if (DISPLAY_TYPE_MDSS == 1)
-	writel(0x00000000, DSI_CLK_CTRL);
-	writel(0x00000000, DSI_CLK_CTRL);
-	writel(0x00000000, DSI_CLK_CTRL);
-	writel(0x00000000, DSI_CLK_CTRL);
-	writel(0x00000002, DSI_CLK_CTRL);
-	writel(0x00000006, DSI_CLK_CTRL);
-	writel(0x0000000e, DSI_CLK_CTRL);
-	writel(0x0000001e, DSI_CLK_CTRL);
-	writel(0x0000023f, DSI_CLK_CTRL);
+	writel(0x00000000, ctl_base + CLK_CTRL);
+	writel(0x00000000, ctl_base + CLK_CTRL);
+	writel(0x00000000, ctl_base + CLK_CTRL);
+	writel(0x00000000, ctl_base + CLK_CTRL);
+	writel(0x00000002, ctl_base + CLK_CTRL);
+	writel(0x00000006, ctl_base + CLK_CTRL);
+	writel(0x0000000e, ctl_base + CLK_CTRL);
+	writel(0x0000001e, ctl_base + CLK_CTRL);
+	writel(0x0000023f, ctl_base + CLK_CTRL);
 
-	writel(0, DSI_CTRL);
+	writel(0, ctl_base + CTRL);
 
-	writel(0, DSI_ERR_INT_MASK0);
+	writel(0, ctl_base + ERR_INT_MASK0);
 
-	writel(0x02020202, DSI_INT_CTRL);
+	writel(0x02020202, ctl_base + INT_CTRL);
 
-	writel(dst_fmt, DSI_COMMAND_MODE_MDP_CTRL);
+	writel(dst_fmt, ctl_base + COMMAND_MODE_MDP_CTRL);
 	writel((img_width * ystride + 1) << 16 | 0x0039,
-	       DSI_COMMAND_MODE_MDP_STREAM0_CTRL);
+	       ctl_base + COMMAND_MODE_MDP_STREAM0_CTRL);
 	writel((img_width * ystride + 1) << 16 | 0x0039,
-	       DSI_COMMAND_MODE_MDP_STREAM1_CTRL);
+	       ctl_base + COMMAND_MODE_MDP_STREAM1_CTRL);
 	writel(img_height << 16 | img_width,
-	       DSI_COMMAND_MODE_MDP_STREAM0_TOTAL);
+	       ctl_base + COMMAND_MODE_MDP_STREAM0_TOTAL);
 	writel(img_height << 16 | img_width,
-	       DSI_COMMAND_MODE_MDP_STREAM1_TOTAL);
-	writel(0x13c2c, DSI_COMMAND_MODE_MDP_DCS_CMD_CTRL);
+	       ctl_base + COMMAND_MODE_MDP_STREAM1_TOTAL);
+	writel(0x13c2c, ctl_base + COMMAND_MODE_MDP_DCS_CMD_CTRL);
 	writel(interleav << 30 | 0 << 24 | 0 << 20 | lane_en << 4 | 0x105,
-	       DSI_CTRL);
-	writel(0x10000000, DSI_COMMAND_MODE_DMA_CTRL);
-	writel(0x10000000, DSI_MISR_CMD_CTRL);
+	       ctl_base + CTRL);
+	writel(0x10000000, ctl_base + COMMAND_MODE_DMA_CTRL);
+	writel(0x10000000, ctl_base + MISR_CMD_CTRL);
 #endif
 
 	return 0;
diff --git a/platform/msm_shared/mmc.c b/platform/msm_shared/mmc.c
index 2c9636a..ec6a88b 100644
--- a/platform/msm_shared/mmc.c
+++ b/platform/msm_shared/mmc.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2010-2014, 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
@@ -1905,6 +1905,18 @@
 	host->ocr = MMC_BOOT_OCR_27_36 | MMC_BOOT_OCR_SEC_MODE;
 	host->cmd_retry = MMC_BOOT_MAX_COMMAND_RETRY;
 
+	/* Disable sdhc mode */
+	RMWREG32(MMC_BOOT_MCI_HC_MODE, SDHCI_HC_START_BIT, SDHCI_HC_WIDTH, 0);
+
+	/* Wait for the MMC_BOOT_MCI_POWER write to go through. */
+	mmc_mclk_reg_wr_delay();
+
+	/* Reset controller */
+	RMWREG32(MMC_BOOT_MCI_POWER, CORE_SW_RST_START, CORE_SW_RST_WIDTH, 1);
+
+	/* Wait for the MMC_BOOT_MCI_POWER write to go through. */
+	mmc_mclk_reg_wr_delay();
+
 	/* Initialize any clocks needed for SDC controller */
 	clock_init_mmc(mmc_slot);
 
diff --git a/platform/msm_shared/rules.mk b/platform/msm_shared/rules.mk
index 1105cdd..06169a5 100755
--- a/platform/msm_shared/rules.mk
+++ b/platform/msm_shared/rules.mk
@@ -152,6 +152,22 @@
 			$(LOCAL_DIR)/gpio.o \
 			$(LOCAL_DIR)/dev_tree.o
 endif
+ifeq ($(PLATFORM),msm8916)
+	OBJS += $(LOCAL_DIR)/qgic.o \
+		$(LOCAL_DIR)/qtimer.o \
+		$(LOCAL_DIR)/qtimer_mmap.o \
+		$(LOCAL_DIR)/interrupts.o \
+		$(LOCAL_DIR)/clock.o \
+		$(LOCAL_DIR)/clock_pll.o \
+		$(LOCAL_DIR)/clock_lib2.o \
+		$(LOCAL_DIR)/uart_dm.o \
+		$(LOCAL_DIR)/board.o \
+		$(LOCAL_DIR)/spmi.o \
+		$(LOCAL_DIR)/bam.o \
+		$(LOCAL_DIR)/qpic_nand.o \
+		$(LOCAL_DIR)/dev_tree.o
+endif
+
 
 ifeq ($(PLATFORM),msm8610)
 DEFINES += DISPLAY_TYPE_MDSS=1
@@ -208,7 +224,13 @@
 			$(LOCAL_DIR)/uic.o \
 			$(LOCAL_DIR)/ucs.o \
 			$(LOCAL_DIR)/ufs_hci.o \
-			$(LOCAL_DIR)/dme.o
+			$(LOCAL_DIR)/dme.o \
+			$(LOCAL_DIR)/certificate.o \
+			$(LOCAL_DIR)/image_verify.o \
+			$(LOCAL_DIR)/crypto_hash.o \
+			$(LOCAL_DIR)/crypto5_eng.o \
+			$(LOCAL_DIR)/crypto5_wrapper.o
+
 endif
 
 ifeq ($(PLATFORM),msm7x27a)
@@ -276,7 +298,7 @@
 			$(LOCAL_DIR)/clock_lib2.o
 endif
 
-ifeq ($(PLATFORM),mdmkrypton)
+ifeq ($(PLATFORM),mdm9x35)
 	OBJS += $(LOCAL_DIR)/qgic.o \
 			$(LOCAL_DIR)/uart_dm.o \
 			$(LOCAL_DIR)/interrupts.o \
diff --git a/platform/msm_shared/smem.h b/platform/msm_shared/smem.h
index fb76c46..423de3f 100644
--- a/platform/msm_shared/smem.h
+++ b/platform/msm_shared/smem.h
@@ -315,7 +315,7 @@
 	APQ8074   = 184,
 	MSM8274   = 185,
 	MSM8674   = 186,
-	MDMKRYPTON   = 187,
+	MDM9635   = 187,
 	FSM9900   = 188,
 	FSM9905   = 189,
 	FSM9955   = 190,
@@ -330,6 +330,7 @@
 	APQ8026   = 199,
 	MSM8926   = 200,
 	MSM8326   = 205,
+	MSM8916   = 206,
 	APQ8074AA  = 208,
 	APQ8074AB  = 209,
 	APQ8074AC  = 210,
diff --git a/platform/msm_shared/usb30_udc.c b/platform/msm_shared/usb30_udc.c
index 072330b..765391e 100644
--- a/platform/msm_shared/usb30_udc.c
+++ b/platform/msm_shared/usb30_udc.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -610,8 +610,40 @@
 		break;
 	case SETUP(ENDPOINT_WRITE, CLEAR_FEATURE):
 		{
-			DBG("\n DEVICE_WRITE : CLEAR_FEATURE");
-			goto stall;
+			uint8_t usb_epnum;
+			uint8_t dir;
+
+			DBG("\n ENDPOINT_WRITE : CLEAR_FEATURE");
+
+			/*
+			 * setup packet received from the host has
+			 * index field containing information about the USB
+			 * endpoint as below:
+			 *  __________________________________
+			 * | (7)  |   (6 - 4)   |  (3 - 0)    |
+			 * |DIR   |  Reserved   |  EP number  |
+			 * |______|_____________|_____________|
+			 */
+			usb_epnum = (s.index & USB_EP_NUM_MASK);
+			dir = (s.index & USB_EP_DIR_MASK == USB_EP_DIR_IN) ? 0x1 : 0x0;
+
+			/*
+			 * Convert the logical ep number to physical before
+			 * sending the clear stall command.
+			 * As per the data book we use fixed mapping as
+			 * below:
+			 * physical ep 0 --> logical ep0 OUT
+			 * physical ep 1 --> logical ep0 IN
+			 * physical ep 2 --> logical ep 1 OUT
+			 * physical ep 3 --> logical ep 1 IN
+			 * :
+			 * :
+			 * physical ep 30 --> logical ep 15 OUT
+			 * physical ep 31 --> logical ep 15 IN
+			 */
+			dwc_ep_cmd_clear_stall(dwc, DWC_EP_PHY_NUM(usb_epnum, dir));
+
+			return DWC_SETUP_2_STAGE;
 		}
 		break;
 	case SETUP(DEVICE_WRITE, SET_SEL):
diff --git a/project/mdmkrypton.mk b/project/mdm9635.mk
similarity index 78%
rename from project/mdmkrypton.mk
rename to project/mdm9635.mk
index e96867d..10abd74 100644
--- a/project/mdmkrypton.mk
+++ b/project/mdm9635.mk
@@ -1,8 +1,8 @@
-# top level project rules for the mdmkrypton project
+# top level project rules for the mdm9635 project
 #
 LOCAL_DIR := $(GET_LOCAL_DIR)
 
-TARGET := mdmkrypton
+TARGET := mdm9635
 
 MODULES += app/aboot
 
diff --git a/project/mpq8092.mk b/project/mpq8092.mk
index be71729..36be395 100644
--- a/project/mpq8092.mk
+++ b/project/mpq8092.mk
@@ -7,7 +7,7 @@
 MODULES += app/aboot
 
 DEBUG := 1
-
+ENABLE_SDHCI_SUPPORT := 1
 #DEFINES += WITH_DEBUG_DCC=1
 DEFINES += WITH_DEBUG_UART=1
 #DEFINES += WITH_DEBUG_FBCON=1
@@ -20,3 +20,7 @@
 DEFINES += ABOOT_FORCE_KERNEL_ADDR=0x00008000
 DEFINES += ABOOT_FORCE_RAMDISK_ADDR=0x02000000
 DEFINES += ABOOT_FORCE_TAGS_ADDR=0x01e00000
+
+ifeq ($(ENABLE_SDHCI_SUPPORT),1)
+DEFINES += MMC_SDHCI_SUPPORT=1
+endif
diff --git a/project/msm8610.mk b/project/msm8610.mk
index 72eaf81..3f7dcbb 100644
--- a/project/msm8610.mk
+++ b/project/msm8610.mk
@@ -12,6 +12,7 @@
 
 #DEFINES += WITH_DEBUG_DCC=1
 DEFINES += WITH_DEBUG_UART=1
+DEFINES += WITH_DEBUG_LOG_BUF=1
 #DEFINES += WITH_DEBUG_FBCON=1
 DEFINES += DEVICE_TREE=1
 #DEFINES += MMC_BOOT_BAM=1
diff --git a/project/msm8916.mk b/project/msm8916.mk
new file mode 100644
index 0000000..93bfa8a
--- /dev/null
+++ b/project/msm8916.mk
@@ -0,0 +1,24 @@
+# top level project rules for the msm8916 project
+#
+LOCAL_DIR := $(GET_LOCAL_DIR)
+
+TARGET := msm8916
+
+MODULES += app/aboot
+
+DEBUG := 1
+
+#DEFINES += WITH_DEBUG_DCC=1
+DEFINES += WITH_DEBUG_UART=1
+#DEFINES += WITH_DEBUG_FBCON=1
+DEFINES += DEVICE_TREE=1
+#DEFINES += MMC_BOOT_BAM=1
+#DEFINES += CRYPTO_BAM=1
+DEFINES += ABOOT_IGNORE_BOOT_HEADER_ADDRS=1
+
+DEFINES += ABOOT_FORCE_KERNEL_ADDR=0x80008000
+DEFINES += ABOOT_FORCE_RAMDISK_ADDR=0x82000000
+DEFINES += ABOOT_FORCE_TAGS_ADDR=0x81E00000
+
+#Disable thumb mode
+ENABLE_THUMB := false
diff --git a/target/apq8084/include/target/display.h b/target/apq8084/include/target/display.h
index 5861791..728d7bf 100644
--- a/target/apq8084/include/target/display.h
+++ b/target/apq8084/include/target/display.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -104,4 +104,6 @@
 #define MIPI_VSYNC_BACK_PORCH_LINES  3
 #define MIPI_VSYNC_FRONT_PORCH_LINES 9
 
+#define PWM_BL_LPG_CHAN_ID           3
+
 #endif
diff --git a/target/apq8084/init.c b/target/apq8084/init.c
index 4d9e889..7e3bae7 100644
--- a/target/apq8084/init.c
+++ b/target/apq8084/init.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -62,6 +62,15 @@
 
 #define SSD_CE_INSTANCE         1
 
+#define CE2_INSTANCE            2
+#define CE_EE                   1
+#define CE_FIFO_SIZE            64
+#define CE_READ_PIPE            3
+#define CE_WRITE_PIPE           2
+#define CE_READ_PIPE_LOCK_GRP   0
+#define CE_WRITE_PIPE_LOCK_GRP  0
+#define CE_ARRAY_SIZE           20
+
 enum cdp_subtype
 {
 	CDP_SUBTYPE_SMB349 = 0,
@@ -298,6 +307,9 @@
 
 	target_keystatus();
 
+	if (target_use_signed_kernel())
+		target_crypto_init_params();
+
 	boot_device = target_read_boot_config();
 
 	if (target_boot_device_emmc())
@@ -637,3 +649,39 @@
 	udelay(10);
 	writel(val & ~BIT(0), GCC_USB30_PHY_COM_BCR);
 }
+
+/* Set up params for h/w CE. */
+void target_crypto_init_params()
+{
+	struct crypto_init_params ce_params;
+
+	/* Set up base addresses and instance. */
+	ce_params.crypto_instance  = CE2_INSTANCE;
+	ce_params.crypto_base      = MSM_CE2_BASE;
+	ce_params.bam_base         = MSM_CE2_BAM_BASE;
+
+	/* Set up BAM config. */
+	ce_params.bam_ee               = CE_EE;
+	ce_params.pipes.read_pipe      = CE_READ_PIPE;
+	ce_params.pipes.write_pipe     = CE_WRITE_PIPE;
+	ce_params.pipes.read_pipe_grp  = CE_READ_PIPE_LOCK_GRP;
+	ce_params.pipes.write_pipe_grp = CE_WRITE_PIPE_LOCK_GRP;
+
+	/* Assign buffer sizes. */
+	ce_params.num_ce           = CE_ARRAY_SIZE;
+	ce_params.read_fifo_size   = CE_FIFO_SIZE;
+	ce_params.write_fifo_size  = CE_FIFO_SIZE;
+
+	/* BAM is initialized by TZ for this platform.
+	 * Do not do it again as the initialization address space
+	 * is locked.
+	 */
+	ce_params.do_bam_init      = 0;
+
+	crypto_init_params(&ce_params);
+}
+
+crypto_engine_type board_ce_type(void)
+{
+	return CRYPTO_ENGINE_TYPE_HW;
+}
diff --git a/target/apq8084/oem_panel.c b/target/apq8084/oem_panel.c
index dd86314..eeae271 100644
--- a/target/apq8084/oem_panel.c
+++ b/target/apq8084/oem_panel.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -42,6 +42,7 @@
 /*---------------------------------------------------------------------------*/
 #include "include/panel_jdi_1080p_video.h"
 #include "include/panel_jdi_qhd_dualdsi_video.h"
+#include "include/panel_jdi_qhd_dualdsi_cmd.h"
 
 /*---------------------------------------------------------------------------*/
 /* static panel selection variable                                           */
@@ -49,6 +50,7 @@
 enum {
 JDI_1080P_VIDEO_PANEL,
 JDI_QHD_DUALDSI_VIDEO_PANEL,
+JDI_QHD_DUALDSI_CMD_PANEL,
 UNKNOWN_PANEL
 };
 
@@ -123,6 +125,26 @@
 		memcpy(phy_db->timing,
 			jdi_qhd_dualdsi_video_timings, TIMING_SIZE);
 		break;
+	case JDI_QHD_DUALDSI_CMD_PANEL:
+		panelstruct->paneldata    = &jdi_qhd_dualdsi_cmd_panel_data;
+		panelstruct->panelres     = &jdi_qhd_dualdsi_cmd_panel_res;
+		panelstruct->color        = &jdi_qhd_dualdsi_cmd_color;
+		panelstruct->videopanel   = &jdi_qhd_dualdsi_cmd_video_panel;
+		panelstruct->commandpanel = &jdi_qhd_dualdsi_cmd_command_panel;
+		panelstruct->state        = &jdi_qhd_dualdsi_cmd_state;
+		panelstruct->laneconfig   = &jdi_qhd_dualdsi_cmd_lane_config;
+		panelstruct->paneltiminginfo
+			= &jdi_qhd_dualdsi_cmd_timing_info;
+		panelstruct->panelresetseq
+					 = &jdi_qhd_dualdsi_cmd_reset_seq;
+		panelstruct->backlightinfo = &jdi_qhd_dualdsi_cmd_backlight;
+		pinfo->mipi.panel_cmds
+			= jdi_qhd_dualdsi_cmd_on_command;
+		pinfo->mipi.num_of_panel_cmds
+			= JDI_QHD_DUALDSI_CMD_ON_COMMAND;
+		memcpy(phy_db->timing,
+			jdi_qhd_dualdsi_cmd_timings, TIMING_SIZE);
+		break;
 	default:
 	case UNKNOWN_PANEL:
 		ret = false;
diff --git a/target/apq8084/target_display.c b/target/apq8084/target_display.c
index 54589dc..3321073 100644
--- a/target/apq8084/target_display.c
+++ b/target/apq8084/target_display.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -86,7 +86,7 @@
 	return rc;
 }
 
-int target_backlight_ctrl(uint8_t enable)
+int target_backlight_ctrl(struct backlight *bl, uint8_t enable)
 {
 	struct pm8x41_gpio pwmgpio_param = {
 		.direction = PM_GPIO_DIR_OUT,
@@ -96,18 +96,19 @@
 		.output_buffer = PM_GPIO_OUT_CMOS,
 		.out_strength = 0x03,
 	};
+
 	if (enable) {
-		pm8x41_gpio_config(7, &pwmgpio_param);
+		pm8x41_gpio_config(pwm_gpio.pin_id, &pwmgpio_param);
 
 		/* lpg channel 2 */
-		pm8x41_lpg_write(3, 0x41, 0x33); /* LPG_PWM_SIZE_CLK, */
-		pm8x41_lpg_write(3, 0x42, 0x01); /* LPG_PWM_FREQ_PREDIV */
-		pm8x41_lpg_write(3, 0x43, 0x20); /* LPG_PWM_TYPE_CONFIG */
-		pm8x41_lpg_write(3, 0x44, 0xcc); /* LPG_VALUE_LSB */
-		pm8x41_lpg_write(3, 0x45, 0x00);  /* LPG_VALUE_MSB */
-		pm8x41_lpg_write(3, 0x46, 0xe4); /* LPG_ENABLE_CONTROL */
+		pm8x41_lpg_write(PWM_BL_LPG_CHAN_ID, 0x41, 0x33); /* LPG_PWM_SIZE_CLK, */
+		pm8x41_lpg_write(PWM_BL_LPG_CHAN_ID, 0x42, 0x01); /* LPG_PWM_FREQ_PREDIV */
+		pm8x41_lpg_write(PWM_BL_LPG_CHAN_ID, 0x43, 0x20); /* LPG_PWM_TYPE_CONFIG */
+		pm8x41_lpg_write(PWM_BL_LPG_CHAN_ID, 0x44, 0xcc); /* LPG_VALUE_LSB */
+		pm8x41_lpg_write(PWM_BL_LPG_CHAN_ID, 0x45, 0x00);  /* LPG_VALUE_MSB */
+		pm8x41_lpg_write(PWM_BL_LPG_CHAN_ID, 0x46, 0xe4); /* LPG_ENABLE_CONTROL */
 	} else {
-		pm8x41_lpg_write(3, 0x46, 0x0); /* LPG_ENABLE_CONTROL */
+		pm8x41_lpg_write(PWM_BL_LPG_CHAN_ID, 0x46, 0x0); /* LPG_ENABLE_CONTROL */
 	}
 
 	return NO_ERROR;
@@ -224,7 +225,6 @@
 	writel(0xCCCCC0C0, MDP_CLK_CTRL5);
 	writel(0x00CCC000, MDP_CLK_CTRL7);
 
-	writel(0x00000001, VBIF_VBIF_DDR_FORCE_CLK_ON);
 	writel(0x00080808, VBIF_VBIF_IN_RD_LIM_CONF0);
 	writel(0x08000808, VBIF_VBIF_IN_RD_LIM_CONF1);
 	writel(0x00080808, VBIF_VBIF_IN_RD_LIM_CONF2);
diff --git a/target/mdmkrypton/init.c b/target/mdm9635/init.c
similarity index 100%
rename from target/mdmkrypton/init.c
rename to target/mdm9635/init.c
diff --git a/target/mdmkrypton/keypad.c b/target/mdm9635/keypad.c
similarity index 100%
rename from target/mdmkrypton/keypad.c
rename to target/mdm9635/keypad.c
diff --git a/target/mdmkrypton/meminfo.c b/target/mdm9635/meminfo.c
similarity index 100%
rename from target/mdmkrypton/meminfo.c
rename to target/mdm9635/meminfo.c
diff --git a/target/mdmkrypton/rules.mk b/target/mdm9635/rules.mk
similarity index 97%
rename from target/mdmkrypton/rules.mk
rename to target/mdm9635/rules.mk
index b6d36d8..62fb3e2 100644
--- a/target/mdmkrypton/rules.mk
+++ b/target/mdm9635/rules.mk
@@ -2,7 +2,7 @@
 
 INCLUDES += -I$(LOCAL_DIR)/include -I$(LK_TOP_DIR)/platform/msm_shared
 
-PLATFORM := mdmkrypton
+PLATFORM := mdm9x35
 
 MEMBASE                             := 0x07E00000
 MEMSIZE                             := 0x00100000 # 1MB
diff --git a/target/mdmkrypton/tools/makefile b/target/mdm9635/tools/makefile
similarity index 100%
rename from target/mdmkrypton/tools/makefile
rename to target/mdm9635/tools/makefile
diff --git a/target/mdmkrypton/tools/mkheader.c b/target/mdm9635/tools/mkheader.c
similarity index 100%
rename from target/mdmkrypton/tools/mkheader.c
rename to target/mdm9635/tools/mkheader.c
diff --git a/target/mpq8092/init.c b/target/mpq8092/init.c
index 12b0d97..1ac2c80 100644
--- a/target/mpq8092/init.c
+++ b/target/mpq8092/init.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -41,16 +41,24 @@
 #include <dev/keys.h>
 #include <pm8x41.h>
 #include <platform/gpio.h>
+#include <platform/irqs.h>
 
 #define PMIC_ARB_CHANNEL_NUM    0
 #define PMIC_ARB_OWNER_ID       0
 #define FASTBOOT_MODE           0x77665500
 
-static uint32_t mmc_sdc_base[] =
+static uint32_t mmc_pwrctl_base[] =
 	{ MSM_SDC1_BASE, MSM_SDC2_BASE, MSM_SDC3_BASE, MSM_SDC4_BASE };
 
+static uint32_t mmc_sdhci_base[] =
+	{ MSM_SDC1_SDHCI_BASE, MSM_SDC2_SDHCI_BASE };
+
+static uint32_t  mmc_sdc_pwrctl_irq[] =
+	{ SDCC1_PWRCTL_IRQ, SDCC2_PWRCTL_IRQ };
+
 static void set_sdc_power_ctrl();
 
+struct mmc_device *dev;
 void target_early_init(void)
 {
 #if WITH_DEBUG_UART
@@ -58,37 +66,6 @@
 #endif
 }
 
-void target_mmc_caps(struct mmc_host *host)
-{
-	host->caps.ddr_mode = 0;
-	host->caps.hs200_mode = 0;
-	host->caps.bus_width = MMC_BOOT_BUS_WIDTH_8_BIT;
-	host->caps.hs_clk_rate = MMC_CLK_50MHZ;
-}
-
-/* Return 1 if vol_up pressed */
-static int target_volume_up()
-{
-	uint8_t status = 0;
-	struct pm8x41_gpio gpio;
-
-	/* Configure the GPIO */
-	gpio.direction = PM_GPIO_DIR_IN;
-	gpio.function  = 0;
-	gpio.pull      = PM_GPIO_PULL_UP_30;
-	gpio.vin_sel   = 2;
-
-	pm8x41_gpio_config(2, &gpio);
-
-	/* Wait for the pmic gpio configuration to take effect */
-	thread_sleep(1);
-
-	/* Get status of P_GPIO_2 */
-	pm8x41_gpio_get(2, &status);
-
-	return !status; /* active low */
-}
-
 /* Return 1 if vol_down pressed */
 uint32_t target_volume_down()
 {
@@ -101,9 +78,6 @@
 
 	if(target_volume_down())
 		keys_post_event(KEY_VOLUMEDOWN, 1);
-
-	if(target_volume_up())
-		keys_post_event(KEY_VOLUMEUP, 1);
 }
 
 static void set_sdc_power_ctrl()
@@ -130,33 +104,71 @@
 	tlmm_set_pull_ctrl(sdc1_pull_cfg, ARRAY_SIZE(sdc1_pull_cfg));
 }
 
+void target_sdc_init()
+{
+	struct mmc_config_data config;
+
+	/* Set drive strength & pull ctrl values */
+	set_sdc_power_ctrl();
+
+	config.bus_width = DATA_BUS_WIDTH_8BIT;
+	config.max_clk_rate = MMC_CLK_200MHZ;
+
+	/* Try slot 1*/
+	config.slot = 1;
+	config.sdhc_base    = mmc_sdhci_base[config.slot - 1];
+	config.pwrctl_base  = mmc_pwrctl_base[config.slot - 1];
+	config.pwr_irq      = mmc_sdc_pwrctl_irq[config.slot - 1];
+
+	if (!(dev = mmc_init(&config))) {
+		/* Try slot 2 */
+		config.slot = 2;
+		config.sdhc_base    = mmc_sdhci_base[config.slot - 1];
+		config.pwrctl_base  = mmc_pwrctl_base[config.slot - 1];
+		config.pwr_irq      = mmc_sdc_pwrctl_irq[config.slot - 1];
+
+		if (!(dev = mmc_init(&config))) {
+			dprintf(CRITICAL, "mmc init failed!");
+			ASSERT(0);
+		}
+	}
+}
+
+
+/*Turn on DVB tuner regulator required by
+ * kernel drivers for probing devices*/
+static void dvb_tuner_enable(void)
+{
+	struct pm8x41_mpp mpp;
+	mpp.base = PM8x41_MMP2_BASE;
+	mpp.mode = MPP_HIGH;
+	mpp.vin = MPP_VIN3;
+
+	pm8x41_config_output_mpp(&mpp);
+	pm8x41_enable_mpp(&mpp, MPP_ENABLE);
+
+	/* Need delay before power on regulators */
+	mdelay(20);
+}
+
 void target_init(void)
 {
-	uint32_t base_addr;
-	uint8_t slot;
-
 	dprintf(INFO, "target_init()\n");
 
 	spmi_init(PMIC_ARB_CHANNEL_NUM, PMIC_ARB_OWNER_ID);
 
 	target_keystatus();
 
-	set_sdc_power_ctrl();
+	target_sdc_init();
 
-	/* Trying Slot 1*/
-	slot = 1;
-	base_addr = mmc_sdc_base[slot - 1];
-	if (mmc_boot_main(slot, base_addr))
+	/* Storage initialization is complete, read the partition table info */
+	if (partition_read_table())
 	{
-
-	/* Trying Slot 2 next */
-	slot = 2;
-	base_addr = mmc_sdc_base[slot - 1];
-	if (mmc_boot_main(slot, base_addr)) {
-		dprintf(CRITICAL, "mmc init failed!");
+		dprintf(CRITICAL, "Error reading the partition table info\n");
 		ASSERT(0);
 	}
-	}
+
+	dvb_tuner_enable();
 }
 
 void target_serialno(unsigned char *buf)
@@ -236,6 +248,17 @@
 	dprintf(CRITICAL, "Rebooting failed\n");
 }
 
+unsigned check_reboot_mode(void)
+{
+	uint32_t restart_reason = 0;
+
+	/* Read reboot reason and scrub it */
+	restart_reason = readl(RESTART_REASON_ADDR);
+	writel(0x00, RESTART_REASON_ADDR);
+
+	return restart_reason;
+}
+
 /* Detect the target type */
 void target_detect(struct board_data *board)
 {
@@ -262,3 +285,14 @@
 {
 	return board_baseband();
 }
+
+void *target_mmc_device()
+{
+	return (void *) dev;
+}
+
+
+int emmc_recovery_init(void)
+{
+	return _emmc_recovery_init();
+}
diff --git a/target/msm8226/init.c b/target/msm8226/init.c
index 73e1981..a72f592 100644
--- a/target/msm8226/init.c
+++ b/target/msm8226/init.c
@@ -506,8 +506,8 @@
 	/* Drive strength configs for sdc pins */
 	struct tlmm_cfgs sdc1_hdrv_cfg[] =
 	{
-		{ SDC1_CLK_HDRV_CTL_OFF,  TLMM_CUR_VAL_6MA, TLMM_HDRV_MASK },
-		{ SDC1_CMD_HDRV_CTL_OFF,  TLMM_CUR_VAL_6MA, TLMM_HDRV_MASK },
+		{ SDC1_CLK_HDRV_CTL_OFF,  TLMM_CUR_VAL_16MA, TLMM_HDRV_MASK },
+		{ SDC1_CMD_HDRV_CTL_OFF,  TLMM_CUR_VAL_10MA, TLMM_HDRV_MASK },
 		{ SDC1_DATA_HDRV_CTL_OFF, TLMM_CUR_VAL_6MA, TLMM_HDRV_MASK },
 	};
 
diff --git a/target/msm8226/target_display.c b/target/msm8226/target_display.c
index 8ddfa89..c89c1ac 100755
--- a/target/msm8226/target_display.c
+++ b/target/msm8226/target_display.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -198,10 +198,21 @@
 	return pll_locked;
 }
 
-int target_backlight_ctrl(uint8_t enable)
+int target_backlight_ctrl(struct backlight *bl, uint8_t enable)
 {
 	dprintf(SPEW, "target_backlight_ctrl\n");
 
+	if (!bl) {
+		dprintf(CRITICAL, "backlight structure is not available\n");
+		return ERR_INVALID_ARGS;
+	}
+
+	if (bl->bl_interface_type != BL_WLED) {
+		dprintf(CRITICAL, "backlight type:%d not supported\n",
+							bl->bl_interface_type);
+		return ERR_NOT_SUPPORTED;
+	}
+
 	if (enable) {
 		pm8x41_wled_config(&wled_ctrl);
 		pm8x41_wled_sink_control(enable);
diff --git a/target/msm8610/init.c b/target/msm8610/init.c
index ff7d733..78412fb 100644
--- a/target/msm8610/init.c
+++ b/target/msm8610/init.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -351,25 +351,51 @@
 	dprintf(CRITICAL, "Rebooting failed\n");
 }
 
-int target_cont_splash_screen()
+/* Returns 1 if autopanel detection is enabled for the target. */
+uint8_t target_panel_auto_detect_enabled()
 {
 	int ret = 0;
 
 	switch(board_hardware_id())
 	{
-		case HW_PLATFORM_QRD:
 		case HW_PLATFORM_MTP:
 		case HW_PLATFORM_SURF:
-			dprintf(SPEW, "Target_cont_splash=1\n");
-			ret = 1;
-			break;
+		case HW_PLATFORM_QRD:
 		default:
-			dprintf(SPEW, "Target_cont_splash=0\n");
+			dprintf(SPEW, "Panel auto-detection is disabled\n");
 			ret = 0;
 	}
 	return ret;
 }
 
+static uint8_t splash_override;
+
+/* Returns 1 if target supports continuous splash screen. */
+int target_cont_splash_screen()
+{
+	uint8_t splash_screen = 0;
+	if(!splash_override) {
+		switch(board_hardware_id())
+		{
+			case HW_PLATFORM_QRD:
+			case HW_PLATFORM_MTP:
+			case HW_PLATFORM_SURF:
+				dprintf(SPEW, "Target_cont_splash=1\n");
+				splash_screen = 1;
+				break;
+			default:
+				dprintf(SPEW, "Target_cont_splash=0\n");
+				splash_screen = 0;
+		}
+	}
+	return splash_screen;
+}
+
+void target_force_cont_splash_disable(uint8_t override)
+{
+	splash_override = override;
+}
+
 unsigned target_pause_for_battery_charge(void)
 {
 	uint8_t pon_reason = pm8x41_get_pon_reason();
diff --git a/target/msm8610/oem_panel.c b/target/msm8610/oem_panel.c
index 8ea0a5e..d6f0537 100644
--- a/target/msm8610/oem_panel.c
+++ b/target/msm8610/oem_panel.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -47,6 +47,9 @@
 #include "include/panel_otm8018b_fwvga_video.h"
 #include "include/panel_nt35590_720p_video.h"
 
+/* Number of dectectable panels */
+#define DISPLAY_MAX_PANEL_DETECTION 2
+
 /*---------------------------------------------------------------------------*/
 /* static panel selection variable                                           */
 /*---------------------------------------------------------------------------*/
@@ -54,9 +57,10 @@
 TRULY_WVGA_CMD_PANEL,
 TRULY_WVGA_VIDEO_PANEL,
 HX8379A_WVGA_VIDEO_PANEL,
-OTM8018B_FWVGA_VIDEO_PANEL,
 NT35590_720P_VIDEO_PANEL,
 HX8389B_QHD_VIDEO_PANEL,
+OTM8018B_FWVGA_VIDEO_PANEL,
+UNKNOWN_PANEL
 };
 
 enum {
@@ -214,6 +218,14 @@
 		memcpy(phy_db->timing,
 				hx8389b_qhd_video_timings, TIMING_SIZE);
 		break;
+	case UNKNOWN_PANEL:
+		memset(panelstruct, 0, sizeof(struct panel_struct));
+		memset(pinfo->mipi.panel_cmds, 0, sizeof(struct mipi_dsi_cmd));
+		pinfo->mipi.num_of_panel_cmds = 0;
+		memset(phy_db->timing, 0, TIMING_SIZE);
+		pinfo->mipi.signature = 0;
+		dprintf(CRITICAL, "Unknown Panel");
+		return false;
 	default:
 		dprintf(CRITICAL, "Panel ID not detected %d\n", panel_id);
 		return false;
@@ -221,6 +233,12 @@
 	return true;
 }
 
+uint32_t oem_panel_max_auto_detect_panels()
+{
+	return target_panel_auto_detect_enabled() ?
+			DISPLAY_MAX_PANEL_DETECTION : 0;
+}
+
 bool oem_panel_select(struct panel_struct *panelstruct,
 			struct msm_panel_info *pinfo,
 			struct mdss_dsi_phy_ctrl *phy_db)
diff --git a/target/msm8610/target_display.c b/target/msm8610/target_display.c
index e352c46..8a74e42 100644
--- a/target/msm8610/target_display.c
+++ b/target/msm8610/target_display.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -53,7 +53,7 @@
 #define PWM_DUTY_US 13
 #define PWM_PERIOD_US 27
 
-int target_backlight_ctrl(uint8_t enable)
+int target_backlight_ctrl(struct backlight *bl, uint8_t enable)
 {
 	struct pm8x41_mpp mpp;
 	int rc;
@@ -164,7 +164,20 @@
 
 void display_init(void)
 {
-	gcdb_display_init(MDP_REV_304, MIPI_FB_ADDR);
+	uint32_t panel_loop = 0;
+	uint32_t ret = 0;
+	do {
+		ret = gcdb_display_init(MDP_REV_304, MIPI_FB_ADDR);
+		if (ret) {
+			/*Panel signature did not match, turn off the display*/
+			target_force_cont_splash_disable(true);
+			msm_display_off();
+			target_force_cont_splash_disable(false);
+		} else {
+			break;
+		}
+	} while (++panel_loop <= oem_panel_max_auto_detect_panels());
+
 }
 
 void display_shutdown(void)
diff --git a/target/msm8916/init.c b/target/msm8916/init.c
new file mode 100644
index 0000000..285b866
--- /dev/null
+++ b/target/msm8916/init.c
@@ -0,0 +1,100 @@
+/* Copyright (c) 2014, 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
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <debug.h>
+#include <platform/iomap.h>
+#include <reg.h>
+#include <target.h>
+#include <platform.h>
+#include <uart_dm.h>
+#include <mmc.h>
+#include <spmi.h>
+#include <board.h>
+
+#define PMIC_ARB_CHANNEL_NUM    0
+#define PMIC_ARB_OWNER_ID       0
+
+static uint32_t mmc_sdc_base[] =
+	{ MSM_SDC1_BASE, MSM_SDC2_BASE };
+
+void target_early_init(void)
+{
+#if WITH_DEBUG_UART
+	uart_dm_init(1, 0, BLSP1_UART1_BASE);
+#endif
+}
+void target_mmc_caps(struct mmc_host *host)
+{
+	host->caps.ddr_mode = 0;
+	host->caps.hs200_mode = 0;
+	host->caps.bus_width = MMC_BOOT_BUS_WIDTH_8_BIT;
+	host->caps.hs_clk_rate = MMC_CLK_50MHZ;
+}
+static void target_keystatus()
+{
+}
+
+void target_init(void)
+{
+	uint32_t base_addr;
+	uint8_t slot;
+
+	dprintf(INFO, "target_init()\n");
+
+	spmi_init(PMIC_ARB_CHANNEL_NUM, PMIC_ARB_OWNER_ID);
+
+	target_keystatus();
+
+	/* Trying Slot 1*/
+	slot = 1;
+	base_addr = mmc_sdc_base[slot - 1];
+	if (mmc_boot_main(slot, base_addr))
+	{
+
+	/* Trying Slot 2 next */
+	slot = 2;
+	base_addr = mmc_sdc_base[slot - 1];
+	if (mmc_boot_main(slot, base_addr)) {
+		dprintf(CRITICAL, "mmc init failed!");
+		ASSERT(0);
+	}
+	}
+}
+
+void target_serialno(unsigned char *buf)
+{
+	uint32_t serialno;
+	if (target_is_emmc_boot()) {
+		serialno = mmc_get_psn();
+		snprintf((char *)buf, 13, "%x", serialno);
+	}
+}
+
+unsigned board_machtype(void)
+{
+}
diff --git a/target/msm8916/meminfo.c b/target/msm8916/meminfo.c
new file mode 100644
index 0000000..708cde3
--- /dev/null
+++ b/target/msm8916/meminfo.c
@@ -0,0 +1,80 @@
+/* Copyright (c) 2014, 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
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <reg.h>
+#include <debug.h>
+#include <malloc.h>
+#include <smem.h>
+#include <stdint.h>
+#include <libfdt.h>
+#include <platform/iomap.h>
+#include <dev_tree.h>
+
+/* Funtion to add the ram partition entries into device tree.
+ * The function assumes that all the entire fixed memory regions should
+ * be listed in the first bank of the passed in ddr regions.
+ */
+uint32_t target_dev_tree_mem(void *fdt, uint32_t memory_node_offset)
+{
+	struct smem_ram_ptable ram_ptable;
+	uint32_t i;
+	int ret = 0;
+
+	/* Make sure RAM partition table is initialized */
+	ASSERT(smem_ram_ptable_init(&ram_ptable));
+
+	/* Calculating the size of the mem_info_ptr */
+	for (i = 0 ; i < ram_ptable.len; i++)
+	{
+		if ((ram_ptable.parts[i].category == SDRAM) &&
+			(ram_ptable.parts[i].type == SYS_MEMORY)) {
+
+			/* Pass along all other usable memory regions to Linux */
+			ret = dev_tree_add_mem_info(fdt,
+					memory_node_offset,
+					ram_ptable.parts[i].start,
+					ram_ptable.parts[i].size);
+			if (ret) {
+				dprintf(CRITICAL, "Failed to add secondary banks memory addresses\n");
+				goto target_dev_tree_mem_err;
+			}
+		}
+	}
+target_dev_tree_mem_err:
+	return ret;
+}
+
+void *target_get_scratch_address(void)
+{
+	return ((void *)SCRATCH_ADDR);
+}
+
+unsigned target_get_max_flash_size(void)
+{
+	return (256 * 1024 * 1024);
+}
diff --git a/target/msm8916/rules.mk b/target/msm8916/rules.mk
new file mode 100644
index 0000000..2f24cbe
--- /dev/null
+++ b/target/msm8916/rules.mk
@@ -0,0 +1,28 @@
+LOCAL_DIR := $(GET_LOCAL_DIR)
+
+INCLUDES += -I$(LOCAL_DIR)/include -I$(LK_TOP_DIR)/platform/msm_shared
+
+PLATFORM := msm8916
+
+MEMBASE := 0x8F100000 # SDRAM
+MEMSIZE := 0x00100000 # 1MB
+
+BASE_ADDR        := 0x80000000
+SCRATCH_ADDR     := 0x90000000
+
+MODULES += \
+	dev/keys \
+	lib/ptable \
+	dev/pmic/pm8x41 \
+	lib/libfdt
+
+DEFINES += \
+	MEMSIZE=$(MEMSIZE) \
+	MEMBASE=$(MEMBASE) \
+	BASE_ADDR=$(BASE_ADDR) \
+	SCRATCH_ADDR=$(SCRATCH_ADDR)
+
+
+OBJS += \
+	$(LOCAL_DIR)/init.o \
+	$(LOCAL_DIR)/meminfo.o
diff --git a/target/msm8916/tools/makefile b/target/msm8916/tools/makefile
new file mode 100644
index 0000000..2757e07
--- /dev/null
+++ b/target/msm8916/tools/makefile
@@ -0,0 +1,44 @@
+#Makefile to generate appsboot.mbn
+
+ifeq ($(BOOTLOADER_OUT),.)
+APPSBOOTHEADER_DIR  := $(BUILDDIR)
+else
+APPSBOOTHEADER_DIR  := $(BOOTLOADER_OUT)/../..
+endif
+
+SRC_DIR  := target/$(TARGET)/tools
+COMPILER := gcc
+
+ifeq ($(EMMC_BOOT), 1)
+  APPSBOOTHDR_FILES := EMMCBOOT.MBN
+else
+  ifeq ($(BUILD_NANDWRITE), 1)
+    APPSBOOTHDR_FILES :=
+  else
+    APPSBOOTHDR_FILES := appsboot.mbn
+  endif
+endif
+
+APPSBOOTHEADER: $(APPSBOOTHDR_FILES)
+
+
+appsboot.mbn: appsboothd.mbn $(OUTBIN)
+	cp $(OUTBIN) $(APPSBOOTHEADER_DIR)/appsboot.raw
+	cat $(APPSBOOTHEADER_DIR)/appsboothd.mbn $(OUTBIN) > $(APPSBOOTHEADER_DIR)/appsboot.mbn
+	rm -f $(APPSBOOTHEADER_DIR)/appsboothd.mbn
+
+appsboothd.mbn: mkheader $(OUTBIN)
+	$(BUILDDIR)/mkheader $(OUTBIN) $(APPSBOOTHEADER_DIR)/appsboothd.mbn
+
+EMMCBOOT.MBN: emmc_appsboothd.mbn $(OUTBIN)
+	cp $(OUTBIN) $(APPSBOOTHEADER_DIR)/emmc_appsboot.raw
+	cat $(APPSBOOTHEADER_DIR)/emmc_appsboothd.mbn $(OUTBIN) > $(APPSBOOTHEADER_DIR)/EMMCBOOT.MBN
+	cat $(APPSBOOTHEADER_DIR)/emmc_appsboothd.mbn $(OUTBIN) > $(APPSBOOTHEADER_DIR)/emmc_appsboot.mbn
+	rm -f $(APPSBOOTHEADER_DIR)/emmc_appsboothd.mbn
+
+emmc_appsboothd.mbn: mkheader $(OUTBIN)
+	$(BUILDDIR)/mkheader $(OUTBIN) $(APPSBOOTHEADER_DIR)/emmc_appsboothd.mbn
+
+mkheader: $(SRC_DIR)/mkheader.c
+	@mkdir -p $(BUILDDIR)
+	${COMPILER} -DMEMBASE=$(MEMBASE) $(SRC_DIR)/mkheader.c -o $(BUILDDIR)/mkheader
diff --git a/target/msm8916/tools/mkheader.c b/target/msm8916/tools/mkheader.c
new file mode 100644
index 0000000..4975a78
--- /dev/null
+++ b/target/msm8916/tools/mkheader.c
@@ -0,0 +1,341 @@
+/*
+ * Copyright (c) 2007, Google Inc.
+ *
+ * Copyright (c) 2014, 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
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+
+#include <sys/stat.h>
+
+int print_usage()
+{
+	fprintf(stderr, "usage: mkheader <bin> <hdr> <none|unified-boot>\n");
+	fprintf(stderr, "       mkheader <bin> <hdr> <unsecure-boot>"
+		" <outbin>\n");
+	fprintf(stderr, "       mkheader <bin> <hdr> <secure-boot> <outbin>"
+		" <maxsize>\n");
+	fprintf(stderr, "       mkheader <bin> <hdr> <secure-boot> <outbin>"
+		" <maxsize> <certchain> <files...>\n\n");
+	fprintf(stderr, "bin:               Input raw appsbl binary\n");
+	fprintf(stderr,
+		"hdr:               Output of appsbl header location\n");
+	fprintf(stderr,
+		"outbin:            Output of the signed or unsigned"
+		"apps boot location\n");
+	fprintf(stderr,
+		"maxsize:           Maximum size for certificate" " chain\n");
+	fprintf(stderr,
+		"certchain:         Output of the certchain location\n");
+	fprintf(stderr,
+		"files:             Input format <bin signature>"
+		"<certifcate file(s) for certificate chain>...\n");
+	fprintf(stderr,
+		"certificate chain: Files will be concatenated in order"
+		"to create the certificate chain\n\n");
+	return -1;
+}
+
+int cat(FILE * in, FILE * out, unsigned size, unsigned buff_size)
+{
+	unsigned bytes_left = size;
+	char buf[buff_size];
+	int ret = 0;
+
+	while (bytes_left) {
+		fread(buf, sizeof(char), buff_size, in);
+		if (!feof(in)) {
+			bytes_left -= fwrite(buf, sizeof(char), buff_size, out);
+		} else
+			bytes_left = 0;
+       }
+	ret = ferror(in) | ferror(out);
+	if (ret)
+		fprintf(stderr, "ERROR: Occured during file concatenation\n");
+	return ret;
+}
+
+int main(int argc, char *argv[])
+{
+	struct stat s;
+	unsigned size, base;
+	int unified_boot = 0;
+	unsigned unified_boot_magic[20];
+	unsigned non_unified_boot_magic[10];
+	unsigned magic_len = 0;
+	unsigned *magic;
+	unsigned cert_chain_size = 0;
+	unsigned signature_size = 0;
+	int secure_boot = 0;
+	int fd;
+
+	if (argc < 3) {
+		return print_usage();
+       }
+
+	if (argc == 4) {
+		if (!strcmp("unified-boot", argv[3])) {
+			unified_boot = 1;
+		} else if (!strcmp("secure-boot", argv[3])) {
+			fprintf(stderr,
+				"ERROR: Missing arguments: [outbin maxsize] |"
+				" [outbin, maxsize, certchain,"
+				" signature + certifcate(s)]\n");
+				return print_usage();
+		} else if (!strcmp("unsecure-boot", argv[3])) {
+				fprintf(stderr, "ERROR: Missing arguments:"
+				" outbin directory\n");
+			return print_usage();
+              }
+       }
+
+       if (argc > 4) {
+		if (!strcmp("secure-boot", argv[3])) {
+			if (argc < 9 && argc != 6) {
+				fprintf(stderr,"ERROR: Missing argument(s):"
+					" [outbin maxsize] | [outbin, maxsize,"
+					" certchain,"
+					" signature + certifcate(s)]\n");
+				return print_usage();
+			}
+		secure_boot = 1;
+		signature_size = 256;  //Support SHA 256
+		cert_chain_size = atoi(argv[5]);
+              }
+       }
+
+	if (stat(argv[1], &s)) {
+		perror("cannot stat binary");
+		return -1;
+	}
+
+	if (unified_boot) {
+		magic = unified_boot_magic;
+		magic_len = sizeof(unified_boot_magic);
+	} else {
+		magic = non_unified_boot_magic;
+		magic_len = sizeof(non_unified_boot_magic);
+	}
+
+	size = s.st_size;
+#if MEMBASE
+	base = MEMBASE;
+#else
+	base = 0;
+#endif
+
+	printf("Image Destination Pointer: 0x%x\n", base);
+
+	magic[0] = 0x00000005; /* appsbl */
+	magic[1] = 0x00000003; //Flash_partition_version /* nand */
+	magic[2] = 0x00000000; //image source pointer
+	magic[3] = base;       //image destination pointer
+	magic[4] = size + cert_chain_size + signature_size;    //image size
+	magic[5] = size;       //code size
+	magic[6] = base + size;
+	magic[7] = signature_size;
+	magic[8] = size + base + signature_size;
+	magic[9] = cert_chain_size;
+
+	if (unified_boot == 1) {
+		magic[10] = 0x33836685;        /* cookie magic number */
+		magic[11] = 0x00000001;        /* cookie version */
+		magic[12] = 0x00000002;        /* file formats */
+		magic[13] = 0x00000000;
+		magic[14] = 0x00000000;        /* not setting size for boot.img */
+		magic[15] = 0x00000000;
+		magic[16] = 0x00000000;
+		magic[17] = 0x00000000;
+		magic[18] = 0x00000000;
+		magic[19] = 0x00000000;
+}
+
+fd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0644);
+if (fd < 0) {
+       perror("cannot open header for writing");
+       return -1;
+}
+if (write(fd, magic, magic_len) != magic_len) {
+       perror("cannot write header");
+       close(fd);
+       unlink(argv[2]);
+       return -1;
+}
+close(fd);
+
+if (secure_boot && argc > 6) {
+       FILE *input_file;
+       FILE *output_file;
+       unsigned buff_size = 1;
+       char buf[buff_size];
+       unsigned bytes_left;
+       unsigned current_cert_chain_size = 0;
+       int padding_size = 0;
+       int i;
+
+       if ((output_file = fopen(argv[6], "wb")) == NULL) {
+              perror("ERROR: Occured during fopen");
+              return -1;
+       }
+       printf("Certificate Chain Output File: %s\n", argv[6]);
+
+       for (i = 8; i < argc; i++) {
+              if ((input_file = fopen(argv[i], "rb")) == NULL) {
+                            perror("ERROR: Occured during fopen");
+              return -1;
+       }
+       stat(argv[i], &s);
+       bytes_left = s.st_size;
+       current_cert_chain_size += bytes_left;
+       if (cat(input_file, output_file, bytes_left, buff_size))
+              return -1;
+              fclose(input_file);
+       }
+
+       //Pad certifcate chain to the max expected size from input
+       memset(buf, 0xFF, sizeof(buf));
+       padding_size = cert_chain_size - current_cert_chain_size;
+
+       if (padding_size < 0) {
+              fprintf(stderr, "ERROR: Input certificate chain"
+              " (Size=%d) is larger than the maximum"
+              " specified (Size=%d)\n",
+              current_cert_chain_size, cert_chain_size);
+              return -1;
+       }
+
+       bytes_left = (padding_size > 0) ? padding_size : 0;
+       while (bytes_left) {
+              if (!ferror(output_file))
+                     bytes_left -= fwrite(buf,
+                           sizeof(buf),
+                           buff_size, output_file);
+              else {
+                     fprintf(stderr, "ERROR: Occured during"
+                            " certifcate chain padding\n");
+                     return -1;
+              }
+       }
+       fclose(output_file);
+
+       /* Concat and combine to signed image.
+        * Format [HDR][RAW APPSBOOT][PADDED CERT CHAIN]
+        */
+       if ((output_file = fopen(argv[4], "wb")) == NULL) {
+              perror("ERROR: Occured during fopen");
+              return -1;
+       }
+       printf("Image Output File: %s\n", argv[4]);
+
+              //Header
+              if ((input_file = fopen(argv[2], "rb")) == NULL) {
+                     perror("ERROR: Occured during fopen");
+                     return -1;
+              }
+              stat(argv[2], &s);
+              if (cat(input_file, output_file, s.st_size, buff_size))
+                     return -1;
+              fclose(input_file);
+
+              //Raw Appsbl
+              if ((input_file = fopen(argv[1], "rb")) == NULL) {
+                     perror("ERROR: Occured during fopen");
+                     return -1;
+              }
+              stat(argv[1], &s);
+              if (cat(input_file, output_file, s.st_size, buff_size))
+                     return -1;
+              fclose(input_file);
+
+              //Signature
+              if ((input_file = fopen(argv[7], "rb")) == NULL) {
+                     perror("ERROR: Occured during fopen");
+                     return -1;
+              }
+              stat(argv[7], &s);
+              if (cat(input_file, output_file, s.st_size, buff_size))
+                     return -1;
+              fclose(input_file);
+
+              //Certifcate Chain
+              if ((input_file = fopen(argv[6], "rb")) == NULL) {
+                     perror("ERROR: Occured during fopen");
+                     return -1;
+              }
+              if (cat(input_file, output_file,
+                     (current_cert_chain_size + padding_size), buff_size))
+                     return -1;
+              fclose(input_file);
+
+              fclose(output_file);
+
+       } else if (argc == 5 || argc == 6) {
+              FILE *input_file;
+              FILE *output_file;
+              unsigned buff_size = 1;
+              char buf[buff_size];
+
+              /* Concat and combine to unsigned image.
+               * Format [HDR][RAW APPSBOOT]
+               */
+              if ((output_file = fopen(argv[4], "wb")) == NULL) {
+                     perror("ERROR: Occured during fopen");
+                     return -1;
+              }
+              printf("Image Output File: %s\n", argv[4]);
+
+              //Header
+              if ((input_file = fopen(argv[2], "rb")) == NULL) {
+                     perror("ERROR: Occured during fopen");
+                     return -1;
+              }
+              stat(argv[2], &s);
+              if (cat(input_file, output_file, s.st_size, buff_size))
+                     return -1;
+              fclose(input_file);
+
+              //Raw Appsbl
+              if ((input_file = fopen(argv[1], "rb")) == NULL) {
+                     perror("ERROR: Occured during fopen");
+                     return -1;
+              }
+              stat(argv[1], &s);
+              if (cat(input_file, output_file, s.st_size, buff_size))
+                     return -1;
+              fclose(input_file);
+              fclose(output_file);
+       }
+
+       printf("Done execution\n");
+
+       return 0;
+}
diff --git a/target/msm8974/include/target/display.h b/target/msm8974/include/target/display.h
index 8897239..b827cf6 100644
--- a/target/msm8974/include/target/display.h
+++ b/target/msm8974/include/target/display.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2014, 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
@@ -45,6 +45,9 @@
   "msmgpio", 58, 3, 1, 0, 1
 };
 
+static struct gpio_pin pwm_gpio = {
+  "pm8941_gpios", 36, 3, 1, 0, 1
+};
 
 /*---------------------------------------------------------------------------*/
 /* LDO configuration                                                         */
@@ -100,6 +103,8 @@
 #define MIPI_VSYNC_BACK_PORCH_LINES  3
 #define MIPI_VSYNC_FRONT_PORCH_LINES 9
 
+#define PWM_BL_LPG_CHAN_ID           8
+
 extern int mdss_dsi_phy_init(struct mipi_dsi_panel_config *, uint32_t ctl_base);
 
 #endif
diff --git a/target/msm8974/oem_panel.c b/target/msm8974/oem_panel.c
index c9b87c2..0bda609 100755
--- a/target/msm8974/oem_panel.c
+++ b/target/msm8974/oem_panel.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -44,6 +44,8 @@
 #include "include/panel_sharp_qhd_video.h"
 #include "include/panel_jdi_1080p_video.h"
 #include "include/panel_generic_720p_cmd.h"
+#include "include/panel_jdi_qhd_dualdsi_video.h"
+#include "include/panel_jdi_qhd_dualdsi_cmd.h"
 
 #define DISPLAY_MAX_PANEL_DETECTION 3
 
@@ -55,6 +57,8 @@
 TOSHIBA_720P_VIDEO_PANEL,
 SHARP_QHD_VIDEO_PANEL,
 GENERIC_720P_CMD_PANEL,
+JDI_QHD_DUALDSI_VIDEO_PANEL,
+JDI_QHD_DUALDSI_CMD_PANEL,
 UNKNOWN_PANEL
 };
 
@@ -170,6 +174,46 @@
 			generic_720p_cmd_timings, TIMING_SIZE);
 		pinfo->mipi.signature = GENERIC_720P_CMD_SIGNATURE;
 		break;
+	case JDI_QHD_DUALDSI_VIDEO_PANEL:
+		panelstruct->paneldata    = &jdi_qhd_dualdsi_video_panel_data;
+		panelstruct->panelres     = &jdi_qhd_dualdsi_video_panel_res;
+		panelstruct->color        = &jdi_qhd_dualdsi_video_color;
+		panelstruct->videopanel   = &jdi_qhd_dualdsi_video_video_panel;
+		panelstruct->commandpanel = &jdi_qhd_dualdsi_video_command_panel;
+		panelstruct->state        = &jdi_qhd_dualdsi_video_state;
+		panelstruct->laneconfig   = &jdi_qhd_dualdsi_video_lane_config;
+		panelstruct->paneltiminginfo
+			= &jdi_qhd_dualdsi_video_timing_info;
+		panelstruct->panelresetseq
+					 = &jdi_qhd_dualdsi_video_reset_seq;
+		panelstruct->backlightinfo = &jdi_qhd_dualdsi_video_backlight;
+		pinfo->mipi.panel_cmds
+			= jdi_qhd_dualdsi_video_on_command;
+		pinfo->mipi.num_of_panel_cmds
+			= JDI_QHD_DUALDSI_VIDEO_ON_COMMAND;
+		memcpy(phy_db->timing,
+			jdi_qhd_dualdsi_video_timings, TIMING_SIZE);
+		break;
+	case JDI_QHD_DUALDSI_CMD_PANEL:
+		panelstruct->paneldata    = &jdi_qhd_dualdsi_cmd_panel_data;
+		panelstruct->panelres     = &jdi_qhd_dualdsi_cmd_panel_res;
+		panelstruct->color        = &jdi_qhd_dualdsi_cmd_color;
+		panelstruct->videopanel   = &jdi_qhd_dualdsi_cmd_video_panel;
+		panelstruct->commandpanel = &jdi_qhd_dualdsi_cmd_command_panel;
+		panelstruct->state        = &jdi_qhd_dualdsi_cmd_state;
+		panelstruct->laneconfig   = &jdi_qhd_dualdsi_cmd_lane_config;
+		panelstruct->paneltiminginfo
+			= &jdi_qhd_dualdsi_cmd_timing_info;
+		panelstruct->panelresetseq
+					 = &jdi_qhd_dualdsi_cmd_reset_seq;
+		panelstruct->backlightinfo = &jdi_qhd_dualdsi_cmd_backlight;
+		pinfo->mipi.panel_cmds
+			= jdi_qhd_dualdsi_cmd_on_command;
+		pinfo->mipi.num_of_panel_cmds
+			= JDI_QHD_DUALDSI_CMD_ON_COMMAND;
+		memcpy(phy_db->timing,
+			jdi_qhd_dualdsi_cmd_timings, TIMING_SIZE);
+		break;
 	case UNKNOWN_PANEL:
 		memset(panelstruct, 0, sizeof(struct panel_struct));
 		memset(pinfo->mipi.panel_cmds, 0, sizeof(struct mipi_dsi_cmd));
diff --git a/target/msm8974/target_display.c b/target/msm8974/target_display.c
index ddee155..c32cef0 100644
--- a/target/msm8974/target_display.c
+++ b/target/msm8974/target_display.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2014, 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
@@ -94,7 +94,7 @@
 	return rc;
 }
 
-int target_backlight_ctrl(uint8_t enable)
+static int msm8974_wled_backlight_ctrl(uint8_t enable)
 {
 	uint32_t platform_id = board_platform_id();
 	uint32_t hardware_id = board_hardware_id();
@@ -117,6 +117,62 @@
 	return NO_ERROR;
 }
 
+static int msm8974_pwm_backlight_ctrl(int gpio_num, int lpg_chan, int enable)
+{
+	struct pm8x41_gpio gpio_param = {
+		.direction = PM_GPIO_DIR_OUT,
+		.function = PM_GPIO_FUNC_2,
+		.vin_sel = 2,   /* VIN_2 */
+		.pull = PM_GPIO_PULL_UP_1_5 | PM_GPIO_PULLDOWN_10,
+		.output_buffer = PM_GPIO_OUT_CMOS,
+		.out_strength = PM_GPIO_OUT_DRIVE_HIGH,
+	};
+
+	dprintf(SPEW, "%s: gpio=%d lpg=%d enable=%d\n", __func__,
+				gpio_num, lpg_chan, enable);
+
+	if (enable) {
+		pm8x41_gpio_config(gpio_num, &gpio_param);
+		pm8x41_lpg_write(lpg_chan, 0x41, 0x33); /* LPG_PWM_SIZE_CLK, */
+		pm8x41_lpg_write(lpg_chan, 0x42, 0x01); /* LPG_PWM_FREQ_PREDIV */
+		pm8x41_lpg_write(lpg_chan, 0x43, 0x20); /* LPG_PWM_TYPE_CONFIG */
+		pm8x41_lpg_write(lpg_chan, 0x44, 0xb2); /* LPG_VALUE_LSB */
+		pm8x41_lpg_write(lpg_chan, 0x45, 0x01);  /* LPG_VALUE_MSB */
+		pm8x41_lpg_write(lpg_chan, 0x46, 0xe4); /* LPG_ENABLE_CONTROL */
+	} else {
+		pm8x41_lpg_write(lpg_chan, 0x46, 0x00);
+	}
+
+	return NO_ERROR;
+}
+
+int target_backlight_ctrl(struct backlight *bl, uint8_t enable)
+{
+	uint32_t ret = NO_ERROR;
+
+	if (!bl) {
+		dprintf(CRITICAL, "backlight structure is not available\n");
+		return ERR_INVALID_ARGS;
+	}
+
+	switch (bl->bl_interface_type) {
+		case BL_WLED:
+			ret = msm8974_wled_backlight_ctrl(enable);
+			break;
+		case BL_PWM:
+			ret = msm8974_pwm_backlight_ctrl(pwm_gpio.pin_id,
+							PWM_BL_LPG_CHAN_ID,
+							enable);
+			break;
+		default:
+			dprintf(CRITICAL, "backlight type:%d not supported\n",
+							bl->bl_interface_type);
+			return ERR_NOT_SUPPORTED;
+	}
+
+	return ret;
+}
+
 int target_panel_clock(uint8_t enable, struct msm_panel_info *pinfo)
 {
 	struct mdss_dsi_pll_config *pll_data;
@@ -234,22 +290,6 @@
 	return 0;
 }
 
-static void msm8974_lpg_backlight_enable(void)
-{
-	/* lpg channel 8 */
-	pm8x41_lpg_write(8, 0x41, 0x33); /* LPG_PWM_SIZE_CLK, */
-	pm8x41_lpg_write(8, 0x42, 0x01); /* LPG_PWM_FREQ_PREDIV */
-	pm8x41_lpg_write(8, 0x43, 0x20); /* LPG_PWM_TYPE_CONFIG */
-	pm8x41_lpg_write(8, 0x44, 0xb2); /* LPG_VALUE_LSB */
-	pm8x41_lpg_write(8, 0x45, 0x01);  /* LPG_VALUE_MSB */
-	pm8x41_lpg_write(8, 0x46, 0xe4); /* LPG_ENABLE_CONTROL */
-}
-
-static void msm8974_lpg_backlight_disable(void)
-{
-	pm8x41_lpg_write(8, 0x46, 0x00); /* LPG_ENABLE_CONTROL */
-}
-
 static int msm8974_edp_panel_power(int enable)
 {
 	struct pm8x41_gpio gpio36_param = {
@@ -266,8 +306,7 @@
 	if (enable) {
 		/* Enable backlight */
 		dprintf(SPEW, "Enable Backlight\n");
-		pm8x41_gpio_config(36, &gpio36_param);
-		msm8974_lpg_backlight_enable();
+		msm8974_pwm_backlight_ctrl(36, 8, 1);
 		dprintf(SPEW, "Enable Backlight Done\n");
 
 		/* Turn on LDO12 for edp vdda */
@@ -285,7 +324,7 @@
 	} else {
 		/* Keep LDO12 on, otherwise kernel will not boot */
 		gpio_set(58, 0);
-		msm8974_lpg_backlight_disable();
+		msm8974_pwm_backlight_ctrl(36, 8, 0);
 	}
 
 	return 0;
