Merge "target: disable continuous splash screen when display init fails"
diff --git a/dev/gcdb/display/gcdb_display.c b/dev/gcdb/display/gcdb_display.c
index 4a15406..785c2a9 100755
--- a/dev/gcdb/display/gcdb_display.c
+++ b/dev/gcdb/display/gcdb_display.c
@@ -168,7 +168,7 @@
 	char *default_str;
 	int panel_mode = SPLIT_DISPLAY_FLAG | DUAL_PIPE_FLAG;
 
-	if(panelstruct.paneldata)
+	if(panelstruct.paneldata && target_cont_splash_screen())
 	{
 		dsi_id = panelstruct.paneldata->panel_controller;
 		panel_node = panelstruct.paneldata->panel_node_id;
diff --git a/target/apq8084/init.c b/target/apq8084/init.c
index ac195da..5515bb5 100644
--- a/target/apq8084/init.c
+++ b/target/apq8084/init.c
@@ -262,23 +262,35 @@
 	}
 }
 
+static uint8_t splash_override;
 /* Returns 1 if target supports continuous splash screen. */
 int target_cont_splash_screen()
 {
-	switch(board_hardware_id())
-	{
-		case HW_PLATFORM_SURF:
-		case HW_PLATFORM_MTP:
-		case HW_PLATFORM_FLUID:
-		case HW_PLATFORM_LIQUID:
-			dprintf(SPEW, "Target_cont_splash=1\n");
-			return 1;
-		default:
-			dprintf(SPEW, "Target_cont_splash=0\n");
-			return 0;
+	uint8_t splash_screen = 0;
+	if(!splash_override) {
+		switch(board_hardware_id())
+		{
+			case HW_PLATFORM_SURF:
+			case HW_PLATFORM_MTP:
+			case HW_PLATFORM_FLUID:
+			case HW_PLATFORM_LIQUID:
+				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_baseband()
 {
 	return board_baseband();
diff --git a/target/apq8084/target_display.c b/target/apq8084/target_display.c
index fd6f766..8af6d1b 100755
--- a/target/apq8084/target_display.c
+++ b/target/apq8084/target_display.c
@@ -247,6 +247,7 @@
 	uint32_t ret = 0;
 	ret = gcdb_display_init(panel_name, MDP_REV_50, MIPI_FB_ADDR);
 	if (ret) {
+		target_force_cont_splash_disable(true);
 		msm_display_off();
 	}
 }
diff --git a/target/msm8226/target_display.c b/target/msm8226/target_display.c
index a6475d8..d36ac56 100755
--- a/target/msm8226/target_display.c
+++ b/target/msm8226/target_display.c
@@ -392,13 +392,13 @@
         uint32_t ret = 0;
 
 	do {
+		target_force_cont_splash_disable(false);
 		ret = gcdb_display_init(panel_name, MDP_REV_50, MIPI_FB_ADDR);
 		if (!ret || ret == ERR_NOT_SUPPORTED) {
 			break;
 		} else {
 			target_force_cont_splash_disable(true);
 			msm_display_off();
-			target_force_cont_splash_disable(false);
 		}
 	} while (++panel_loop <= oem_panel_max_auto_detect_panels());
 
diff --git a/target/msm8610/init.c b/target/msm8610/init.c
index 5132aed..f64acc2 100644
--- a/target/msm8610/init.c
+++ b/target/msm8610/init.c
@@ -344,23 +344,31 @@
 	dprintf(CRITICAL, "Rebooting failed\n");
 }
 
+static uint8_t splash_override;
+
 int target_cont_splash_screen()
 {
-	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;
-		default:
-			dprintf(SPEW, "Target_cont_splash=0\n");
-			ret = 0;
+	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 ret;
+	return splash_screen;
+}
+
+void target_force_cont_splash_disable(uint8_t override)
+{
+        splash_override = override;
 }
 
 unsigned target_pause_for_battery_charge(void)
diff --git a/target/msm8610/target_display.c b/target/msm8610/target_display.c
index 4b963b8..b815501 100755
--- a/target/msm8610/target_display.c
+++ b/target/msm8610/target_display.c
@@ -164,7 +164,14 @@
 
 void target_display_init(const char *panel_name)
 {
-	gcdb_display_init(panel_name, MDP_REV_304, MIPI_FB_ADDR);
+	uint32_t ret = 0;
+
+	ret = gcdb_display_init(panel_name, 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();
+	}
 }
 
 void target_display_shutdown(void)
diff --git a/target/msm8974/target_display.c b/target/msm8974/target_display.c
index c89c483..56a03c1 100755
--- a/target/msm8974/target_display.c
+++ b/target/msm8974/target_display.c
@@ -384,6 +384,7 @@
 		break;
 	default:
 		do {
+			target_force_cont_splash_disable(false);
 			ret = gcdb_display_init(panel_name, MDP_REV_50,
 				MIPI_FB_ADDR);
 			if (!ret || ret == ERR_NOT_SUPPORTED) {
@@ -391,7 +392,6 @@
 			} else {
 				target_force_cont_splash_disable(true);
 				msm_display_off();
-				target_force_cont_splash_disable(false);
 			}
 		} while (++panel_loop <= oem_panel_max_auto_detect_panels());
 		break;