dev: gcdb: Fix dual dsi support in GCDB

* Support split display option in GCDB

* Fix broadcast mode support in GCDB

* Fix pixel clock calculation for dual DSI
  case

Change-Id: I9871f88ee5059bf3ef9aff4190ec9053a2664876
diff --git a/dev/gcdb/display/gcdb_autopll.c b/dev/gcdb/display/gcdb_autopll.c
index 5cbe292..e7d7a0e 100755
--- a/dev/gcdb/display/gcdb_autopll.c
+++ b/dev/gcdb/display/gcdb_autopll.c
@@ -41,8 +41,12 @@
 {
 	uint32_t ret = NO_ERROR;
 	uint32_t h_period = 0, v_period = 0;
+	uint32_t width = pinfo->xres;
 
-	h_period = pinfo->xres + pinfo->lcdc.h_back_porch +
+	if (pinfo->mipi.dual_dsi)
+		width = pinfo->xres / 2;
+
+	h_period = width + pinfo->lcdc.h_back_porch +
 		pinfo->lcdc.h_front_porch + pinfo->lcdc.h_pulse_width +
 		pinfo->lcdc.xres_pad;
 
diff --git a/dev/gcdb/display/panel_display.c b/dev/gcdb/display/panel_display.c
index 38d1721..aed0ac8 100644
--- a/dev/gcdb/display/panel_display.c
+++ b/dev/gcdb/display/panel_display.c
@@ -67,10 +67,12 @@
 	pinfo->lcdc.yres_pad = pstruct->panelres->vtop_border +
 				 pstruct->panelres->vbottom_border;
 
-	pinfo->lcdc.dual_pipe = (pstruct->paneldata->panel_operating_mode
-								 & 0x2);
-	pinfo->lcdc.pipe_swap = (pstruct->paneldata->panel_operating_mode
-								 & 0x4);
+	if (pstruct->paneldata->panel_operating_mode & DUAL_PIPE_FLAG)
+		pinfo->lcdc.dual_pipe = 1;
+	if (pstruct->paneldata->panel_operating_mode & PIPE_SWAP_FLAG)
+		pinfo->lcdc.pipe_swap = 1;
+	if (pstruct->paneldata->panel_operating_mode & SPLIT_DISPLAY_FLAG)
+		pinfo->lcdc.split_display = 1;
 
 	/* Color setting*/
 	pinfo->lcdc.border_clr = pstruct->color->border_color;
@@ -105,13 +107,13 @@
 	pinfo->clk_rate = pstruct->paneldata->panel_clockrate;
 	pinfo->rotation = pstruct->paneldata->panel_orientation;
 	pinfo->mipi.interleave_mode = pstruct->paneldata->interleave_mode;
-	pinfo->broadcastmode = pstruct->paneldata->panel_broadcast_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;
-	pinfo->mipi.dual_dsi = (pstruct->paneldata->panel_operating_mode
-								 & 0x1);
+	if (pstruct->paneldata->panel_operating_mode & DUAL_DSI_FLAG)
+		pinfo->mipi.dual_dsi = 1;
 	pinfo->mipi.mode_gpio_state = pstruct->paneldata->mode_gpio_state;
 	pinfo->mipi.bitclock = pstruct->paneldata->panel_bitclock_freq;
 	pinfo->mipi.use_enable_gpio =
diff --git a/dev/gcdb/display/panel_display.h b/dev/gcdb/display/panel_display.h
index e141a0c..1f08326 100755
--- a/dev/gcdb/display/panel_display.h
+++ b/dev/gcdb/display/panel_display.h
@@ -39,6 +39,11 @@
 #define BPP_24 24
 
 #define TIMING_SIZE 48
+
+#define DUAL_DSI_FLAG 0x1
+#define DUAL_PIPE_FLAG 0x2
+#define PIPE_SWAP_FLAG 0x4
+#define SPLIT_DISPLAY_FLAG 0x8
 /*---------------------------------------------------------------------------*/
 /* struct definition                                                         */
 /*---------------------------------------------------------------------------*/