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 */
/*---------------------------------------------------------------------------*/