Merge "target: msm8976: Add lra motor support"
diff --git a/app/aboot/aboot.c b/app/aboot/aboot.c
index fdf4abb..531ff4e 100644
--- a/app/aboot/aboot.c
+++ b/app/aboot/aboot.c
@@ -1069,7 +1069,8 @@
* 4. Sanity Check on kernel_addr and ramdisk_addr and copy data.
*/
- dprintf(INFO, "Loading boot image (%d): start\n", imagesize_actual);
+ dprintf(INFO, "Loading (%s) image (%d): start\n",
+ (!boot_into_recovery ? "boot" : "recovery"),imagesize_actual);
bs_set_timestamp(BS_KERNEL_LOAD_START);
/* Read image without signature */
@@ -1079,7 +1080,9 @@
return -1;
}
- dprintf(INFO, "Loading boot image (%d): done\n", imagesize_actual);
+ dprintf(INFO, "Loading (%s) image (%d): done\n",
+ (!boot_into_recovery ? "boot" : "recovery"),imagesize_actual);
+
bs_set_timestamp(BS_KERNEL_LOAD_DONE);
/* Authenticate Kernel */
@@ -1409,7 +1412,8 @@
imagesize_actual = (page_size + kernel_actual + ramdisk_actual);
#endif
- dprintf(INFO, "Loading boot image (%d): start\n", imagesize_actual);
+ dprintf(INFO, "Loading (%s) image (%d): start\n",
+ (!boot_into_recovery ? "boot" : "recovery"),imagesize_actual);
bs_set_timestamp(BS_KERNEL_LOAD_START);
/* Read image without signature */
@@ -1419,7 +1423,8 @@
return -1;
}
- dprintf(INFO, "Loading boot image (%d): done\n", imagesize_actual);
+ dprintf(INFO, "Loading (%s) image (%d): done\n",
+ (!boot_into_recovery ? "boot" : "recovery"), imagesize_actual);
bs_set_timestamp(BS_KERNEL_LOAD_DONE);
offset = imagesize_actual;
@@ -1463,8 +1468,9 @@
ramdisk_actual = ROUND_TO_PAGE(hdr->ramdisk_size, page_mask);
second_actual = ROUND_TO_PAGE(hdr->second_size, page_mask);
- dprintf(INFO, "Loading boot image (%d): start\n",
- kernel_actual + ramdisk_actual);
+ dprintf(INFO, "Loading (%s) image (%d): start\n",
+ (!boot_into_recovery ? "boot" : "recovery"), kernel_actual + ramdisk_actual);
+
bs_set_timestamp(BS_KERNEL_LOAD_START);
if (flash_read(ptn, offset, (void *)hdr->kernel_addr, kernel_actual)) {
@@ -1479,8 +1485,9 @@
}
offset += ramdisk_actual;
- dprintf(INFO, "Loading boot image (%d): done\n",
- kernel_actual + ramdisk_actual);
+ dprintf(INFO, "Loading (%s) image (%d): done\n",
+ (!boot_into_recovery ? "boot" : "recovery"), kernel_actual + ramdisk_actual);
+
bs_set_timestamp(BS_KERNEL_LOAD_DONE);
if(hdr->second_size != 0) {
@@ -3270,6 +3277,8 @@
#endif
dprintf(SPEW, "Display Init: Start\n");
#if ENABLE_WBC
+ /* Wait if the display shutdown is in progress */
+ while(pm_app_display_shutdown_in_prgs());
if (!pm_appsbl_display_init_done())
target_display_init(device.display_panel);
else
diff --git a/dev/gcdb/display/fastboot_oem_display.h b/dev/gcdb/display/fastboot_oem_display.h
index 9dd8b5c..b0a1371 100644
--- a/dev/gcdb/display/fastboot_oem_display.h
+++ b/dev/gcdb/display/fastboot_oem_display.h
@@ -76,6 +76,7 @@
{"jdi_fhd_video", "qcom,mdss_dsi_jdi_fhd_video", false},
{"jdi_qhd_dualdsi_cmd", "qcom,mdss_dsi_jdi_qhd_dualmipi_cmd", true},
{"jdi_qhd_dualdsi_video", "qcom,dsi_jdi_qhd_video", true},
+ {"jdi_4k_dualdsi_video_nofbc", "qcom,dsi_jdi_4k_nofbc_video", true},
{"nt35521_720p_video", "qcom,mdss_dsi_nt35521_720p_video", false},
{"nt35521_wxga_video", "qcom,mdss_dsi_nt35521_wxga_video", false},
{"nt35590_720p_cmd", "qcom,mdss_dsi_nt35590_720p_cmd", false},
@@ -101,6 +102,8 @@
{"truly_1080p_video", "qcom,mdss_dsi_truly_1080p_video", false},
{"truly_wvga_cmd", "qcom,mdss_dsi_truly_wvga_cmd", false},
{"truly_wvga_video", "qcom,mdss_dsi_truly_wvga_video", false},
+ {"adv16", "qcom,mdss_dsi_adv7533_1080p", false},
+ {"adv4", "qcom,mdss_dsi_adv7533_720p", false},
};
struct sim_lookup_list lookup_sim[] = {
diff --git a/dev/gcdb/display/gcdb_autopll.c b/dev/gcdb/display/gcdb_autopll.c
index 1d2db47..b78cecc 100755
--- a/dev/gcdb/display/gcdb_autopll.c
+++ b/dev/gcdb/display/gcdb_autopll.c
@@ -42,6 +42,7 @@
uint32_t h_period = 0, v_period = 0;
uint32_t width = pinfo->xres;
struct dsc_desc *dsc = NULL;
+ int bpp_lane;
if (pinfo->mipi.dual_dsi)
width /= 2;
@@ -62,19 +63,22 @@
pinfo->lcdc.v_front_porch + pinfo->lcdc.v_pulse_width +
pinfo->lcdc.yres_pad;
+ bpp_lane = pinfo->bpp / pinfo->mipi.num_of_lanes;
+
/*
* If a bit clock rate is not specified, calculate it based
* on panel parameters
*/
if (pinfo->mipi.bitclock == 0)
pll_data.bit_clock = (h_period * v_period *
- pinfo->mipi.frame_rate * pinfo->bpp) /
- pinfo->mipi.num_of_lanes;
+ pinfo->mipi.frame_rate * bpp_lane);
else
pll_data.bit_clock = pinfo->mipi.bitclock;
- pll_data.pixel_clock = (pll_data.bit_clock * pinfo->mipi.num_of_lanes) /
- pinfo->bpp;
+ pll_data.pixel_clock = (pll_data.bit_clock / bpp_lane);
+
+ dprintf(SPEW, "%s: bit_clk=%d pix_clk=%d\n", __func__,
+ pll_data.bit_clock, pll_data.pixel_clock);
pll_data.byte_clock = pll_data.bit_clock >> 3;
@@ -273,6 +277,11 @@
return ERROR;
}
+ pll_data.vco_clock = pll_data.bit_clock * pll_data.ndiv *
+ pll_data.n1div;
+
+ rate = pll_data.vco_clock;
+
rate /= pll_data.n1div;
rate /= FIX_PIXEL_CLOCK_DIV;
@@ -287,7 +296,6 @@
__func__, pll_data.n2div);
return ERROR;
}
- pll_data.vco_clock = pll_data.bit_clock * pll_data.ndiv * pll_data.n1div;
dprintf(SPEW, "%s: vco:%u n1div:%d n2div:%d bit_clk:%u pixel_clk:%u\n",
__func__, pll_data.vco_clock, pll_data.n1div, pll_data.n2div,
diff --git a/dev/gcdb/display/gcdb_display.c b/dev/gcdb/display/gcdb_display.c
index d4fe865..6035ec3 100644
--- a/dev/gcdb/display/gcdb_display.c
+++ b/dev/gcdb/display/gcdb_display.c
@@ -408,20 +408,51 @@
return panelstruct;
}
+static void mdss_dsi_check_swap_status(void)
+{
+ char *panel_dest, *dsi_controller;
+ struct oem_panel_data *oem_data = mdss_dsi_get_oem_data_ptr();
+
+ if (!oem_data->swap_dsi_ctrl)
+ return;
+
+ if (panelstruct.paneldata->panel_operating_mode &
+ (SPLIT_DISPLAY_FLAG | DUAL_DSI_FLAG)) {
+ dprintf(CRITICAL, "DSI swap invalid for split DSI panel!\n");
+ return;
+ }
+
+ /* Swap the panel destination and use appropriate PLL */
+ if (!strcmp(panelstruct.paneldata->panel_destination, "DISPLAY_1")) {
+ panel_dest = "DISPLAY_2";
+ dsi_controller = "dsi:1:";
+ panelstruct.paneldata->panel_operating_mode |= USE_DSI1_PLL_FLAG;
+ } else {
+ panel_dest = "DISPLAY_1";
+ dsi_controller = "dsi:0:";
+ panelstruct.paneldata->panel_operating_mode &= ~USE_DSI1_PLL_FLAG;
+ }
+ panelstruct.paneldata->panel_destination = panel_dest;
+ panelstruct.paneldata->panel_controller = dsi_controller;
+}
+
static void mdss_dsi_set_pll_src(void)
{
struct oem_panel_data *oem_data = mdss_dsi_get_oem_data_ptr();
- if (panelstruct.paneldata->panel_operating_mode & USE_DSI1_PLL_FLAG)
+ /* Set PLL_SRC to PLL1 for non dual-DSI cases only */
+ if (!is_dsi_config_dual() &&
+ (panelstruct.paneldata->panel_operating_mode &
+ USE_DSI1_PLL_FLAG))
oem_data->dsi_pll_src = DSI_PLL1;
- if (strcmp(oem_data->sec_panel, "")) {
+ if (is_dsi_config_dual()) {
if (oem_data->dsi_pll_src != DSI_PLL_DEFAULT) {
dprintf(CRITICAL, "Dual DSI config detected!"
"Use default PLL\n");
oem_data->dsi_pll_src = DSI_PLL_DEFAULT;
}
- } else if (panelstruct.paneldata->slave_panel_node_id) {
+ } else if (is_dsi_config_split()) {
if((dsi_video_mode_phy_db.pll_type != DSI_PLL_TYPE_THULIUM)
&& (oem_data->dsi_pll_src == DSI_PLL1)) {
dprintf(CRITICAL, "Split DSI on 28nm/20nm!"
@@ -441,10 +472,9 @@
if (oem_data->dsi_pll_src == DSI_PLL1)
panelstruct.paneldata->panel_operating_mode |=
USE_DSI1_PLL_FLAG;
- else
+ else if (oem_data->dsi_pll_src == DSI_PLL0)
panelstruct.paneldata->panel_operating_mode &=
~USE_DSI1_PLL_FLAG;
-
}
int gcdb_display_init(const char *panel_name, uint32_t rev, void *base)
@@ -458,6 +488,7 @@
if (pan_type == PANEL_TYPE_DSI) {
target_dsi_phy_config(&dsi_video_mode_phy_db);
+ mdss_dsi_check_swap_status();
mdss_dsi_set_pll_src();
if (dsi_panel_init(&(panel.panel_info), &panelstruct)) {
dprintf(CRITICAL, "DSI panel init failed!\n");
diff --git a/dev/gcdb/display/gcdb_display.h b/dev/gcdb/display/gcdb_display.h
index 088aa05..aaed691 100755
--- a/dev/gcdb/display/gcdb_display.h
+++ b/dev/gcdb/display/gcdb_display.h
@@ -72,6 +72,7 @@
char sec_panel[MAX_PANEL_ID_LEN];
bool cont_splash;
bool skip;
+ bool swap_dsi_ctrl;
uint32_t sim_mode;
char dsi_config[DSI_CFG_SIZE];
uint32_t dsi_pll_src;
@@ -83,4 +84,30 @@
DSI_PLL1,
};
+static inline bool is_dsi_config_split(void)
+{
+ struct panel_struct panelstruct = mdss_dsi_get_panel_data();
+
+ return panelstruct.paneldata->panel_node_id &&
+ panelstruct.paneldata->slave_panel_node_id &&
+ (panelstruct.paneldata->panel_operating_mode & (DUAL_DSI_FLAG |
+ SPLIT_DISPLAY_FLAG | DST_SPLIT_FLAG));
+}
+
+static inline bool is_dsi_config_dual(void)
+{
+ struct oem_panel_data *oem_data = mdss_dsi_get_oem_data_ptr();
+
+ return !is_dsi_config_split() && oem_data->sec_panel &&
+ strcmp(oem_data->sec_panel, "");
+}
+
+static inline bool is_dsi_config_single()
+{
+ struct panel_struct panelstruct = mdss_dsi_get_panel_data();
+
+ return panelstruct.paneldata->panel_node_id && !is_dsi_config_split()
+ && !is_dsi_config_dual();
+}
+
#endif /*_GCDB_DISPLAY_H_ */
diff --git a/dev/gcdb/display/gcdb_display_param.c b/dev/gcdb/display/gcdb_display_param.c
index 7bc472f..7d189a5 100644
--- a/dev/gcdb/display/gcdb_display_param.c
+++ b/dev/gcdb/display/gcdb_display_param.c
@@ -37,7 +37,8 @@
#include "target/display.h"
#include "fastboot_oem_display.h"
-struct oem_panel_data oem_data = {{'\0'}, {'\0'}, false, false, SIM_NONE, "single_dsi", DSI_PLL_DEFAULT};
+struct oem_panel_data oem_data = {{'\0'}, {'\0'}, false, false, false, SIM_NONE,
+ "single_dsi", DSI_PLL_DEFAULT};
static int panel_name_to_dt_string(struct panel_lookup_list supp_panels[],
uint32_t supp_panels_size,
@@ -195,6 +196,10 @@
ch = strstr((char *) panel_name, ":disable");
oem_data.cont_splash = ch ? false : true;
+ /* Interposer card to swap DSI0 and DSI1 lanes */
+ ch = strstr((char *) panel_name, ":swap");
+ oem_data.swap_dsi_ctrl = ch ? true : false;
+
/* DSI PLL source */
ch = strstr((char *) panel_name, ":pll0");
if (ch) {
diff --git a/dev/gcdb/display/include/panel_fl10802_fwvga_video.h b/dev/gcdb/display/include/panel_fl10802_fwvga_video.h
index 8e30f57..4a511df 100644
--- a/dev/gcdb/display/include/panel_fl10802_fwvga_video.h
+++ b/dev/gcdb/display/include/panel_fl10802_fwvga_video.h
@@ -210,7 +210,7 @@
static char fl10802_fwvga_video_on_cmd17[] = {
0x02, 0x00, 0x39, 0xC0,
- 0x53, 0x2C, 0xFF, 0xFF,
+ 0x53, 0x24, 0xFF, 0xFF,
};
static char fl10802_fwvga_video_on_cmd18[] = {
@@ -220,7 +220,7 @@
static char fl10802_fwvga_video_on_cmd19[] = {
0x02, 0x00, 0x39, 0xC0,
- 0x51, 0xFF, 0xFF, 0xFF,
+ 0x51, 0x00, 0xFF, 0xFF,
};
static char fl10802_fwvga_video_on_cmd20[] = {
@@ -231,6 +231,11 @@
0x29, 0x00, 0x05, 0x80
};
+static char fl10802_fwvga_video_on_cmd22[] = {
+ 0x02, 0x00, 0x39, 0xC0,
+ 0x51, 0xFF, 0xFF, 0xFF,
+};
+
static struct mipi_dsi_cmd fl10802_fwvga_video_on_command[] = {
{0x8, fl10802_fwvga_video_on_cmd0, 0x00},
{0xc, fl10802_fwvga_video_on_cmd1, 0x00},
@@ -253,10 +258,11 @@
{0x8, fl10802_fwvga_video_on_cmd18, 0x00},
{0x8, fl10802_fwvga_video_on_cmd19, 0x00},
{0x4, fl10802_fwvga_video_on_cmd20, 0x78},
- {0x4, fl10802_fwvga_video_on_cmd21, 0x78}
+ {0x4, fl10802_fwvga_video_on_cmd21, 0x78},
+ {0x8, fl10802_fwvga_video_on_cmd22, 0x00}
};
-#define FL10802_FWVGA_VIDEO_ON_COMMAND 22
+#define FL10802_FWVGA_VIDEO_ON_COMMAND 23
static char fl10802_fwvga_videooff_cmd0[] = {
@@ -322,7 +328,7 @@
/* Backlight setting */
/*---------------------------------------------------------------------------*/
static struct backlight fl10802_fwvga_video_backlight = {
- 1, 1, 255, 100, 2, "PMIC_8941"
+ BL_DCS, 1, 255, 100, 2, "PMIC_8941"
};
#define FL10802_FWVGA_VIDEO_SIGNATURE 0xFFFF
diff --git a/dev/gcdb/display/include/panel_hx8394d_720p_video.h b/dev/gcdb/display/include/panel_hx8394d_720p_video.h
index ac4806f..1c05b35 100644
--- a/dev/gcdb/display/include/panel_hx8394d_720p_video.h
+++ b/dev/gcdb/display/include/panel_hx8394d_720p_video.h
@@ -47,7 +47,7 @@
static struct panel_config hx8394d_720p_video_panel_data = {
"qcom,mdss_dsi_hx8394d_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
+ 10, 0, "DISPLAY_1", 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL
};
/*---------------------------------------------------------------------------*/
@@ -259,14 +259,6 @@
0x79, 0x1a, 0x12, 0x00, 0x3e, 0x42, 0x16, 0x1e, 0x15, 0x03, 0x04, 0x00
};
-
-
-static struct mipi_dsi_cmd hx8394d_720p_video_rotation[] = {
-
-};
-#define HX8394D_720P_VIDEO_ROTATION 0
-
-
static struct panel_timing hx8394d_720p_video_timing_info = {
0, 4, 0x04, 0x1b
};
diff --git a/dev/gcdb/display/include/panel_hx8399a_1080p_video.h b/dev/gcdb/display/include/panel_hx8399a_1080p_video.h
index 0ac37ac..f2d828e 100644
--- a/dev/gcdb/display/include/panel_hx8399a_1080p_video.h
+++ b/dev/gcdb/display/include/panel_hx8399a_1080p_video.h
@@ -40,7 +40,7 @@
/*---------------------------------------------------------------------------*/
static struct panel_config hx8399a_1080p_video_panel_data = {
"qcom,mdss_dsi_hx8399a_1080p_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, NULL
+ 10, 0, "DISPLAY_1", 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 866400000, 0, 0, 0, NULL
};
/*---------------------------------------------------------------------------*/
diff --git a/dev/gcdb/display/include/panel_jdi_4k_dualdsi_video_nofbc.h b/dev/gcdb/display/include/panel_jdi_4k_dualdsi_video_nofbc.h
new file mode 100644
index 0000000..ae73869
--- /dev/null
+++ b/dev/gcdb/display/include/panel_jdi_4k_dualdsi_video_nofbc.h
@@ -0,0 +1,184 @@
+/* Copyright (c) 2015, 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.
+ */
+
+#ifndef _PANEL_JDI_4K_DUALDSI_VIDEO_NOFBC__H_
+#define _PANEL_JDI_4K_DUALDSI_VIDEO_NOFBC__H_
+/*---------------------------------------------------------------------------*/
+/* HEADER files */
+/*---------------------------------------------------------------------------*/
+#include "panel.h"
+
+/*---------------------------------------------------------------------------*/
+/* Panel configuration */
+/*---------------------------------------------------------------------------*/
+static struct panel_config jdi_4k_dualdsi_video_nofbc_panel_data = {
+ "qcom,dsi_jdi_4k_nofbc_video", "dsi:0:", "qcom,mdss-dsi-panel",
+ 10, 0, "DISPLAY_1", 0, 0, 40, 0, 0, 1, 0, 0, 0, 0, 0, 11, 0, 0,
+ "qcom,dsi_jdi_4k_nofbc_video",
+};
+
+/*---------------------------------------------------------------------------*/
+/* Panel resolution */
+/*---------------------------------------------------------------------------*/
+static struct panel_resolution jdi_4k_dualdsi_video_nofbc_panel_res = {
+ 3840, 2160, 100, 80, 12, 0, 16, 16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+/*---------------------------------------------------------------------------*/
+/* Panel color information */
+/*---------------------------------------------------------------------------*/
+static struct color_info jdi_4k_dualdsi_video_nofbc_color = {
+ 24, 0, 0xff, 0, 0, 0
+};
+
+/*---------------------------------------------------------------------------*/
+/* Panel on/off command information */
+/*---------------------------------------------------------------------------*/
+static char jdi_4k_dualdsi_video_on_cmd0[] = {
+ 0x51, 0xff, 0x15, 0x80,
+};
+
+static char jdi_4k_dualdsi_video_on_cmd1[] = {
+ 0x53, 0x24, 0x15, 0x80,
+};
+
+static char jdi_4k_dualdsi_video_on_cmd2[] = {
+ 0x11, 0x00, 0x05, 0x80
+};
+
+static char jdi_4k_dualdsi_video_on_cmd3[] = {
+ 0x29, 0x00, 0x05, 0x80
+};
+
+static char jdi_4k_dualdsi_video_on_cmd_ip_0[] = {
+ 0xb0, 0x04, 0x23, 0x80
+};
+
+static char jdi_4k_dualdsi_video_on_cmd_ip_1[] = {
+ 0x08, 0x00, 0x29, 0xC0,
+ 0xb3, 0x14, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00
+};
+
+static char jdi_4k_dualdsi_video_on_cmd_ip_2[] = {
+ 0xd6, 0x01, 0x23, 0x80
+};
+
+static struct mipi_dsi_cmd jdi_4k_dualdsi_video_nofbc_on_command[] = {
+ {0x4, jdi_4k_dualdsi_video_on_cmd0, 0x0a},
+ {0x4, jdi_4k_dualdsi_video_on_cmd1, 0x0a},
+ {0x4, jdi_4k_dualdsi_video_on_cmd2, 0xc9},
+ {0x4, jdi_4k_dualdsi_video_on_cmd_ip_0, 0x0a},
+ {0xc, jdi_4k_dualdsi_video_on_cmd_ip_1, 0x0a},
+ {0x4, jdi_4k_dualdsi_video_on_cmd_ip_2, 0x0a},
+ {0x4, jdi_4k_dualdsi_video_on_cmd3, 0x78}
+};
+
+#define JDI_4K_DUALDSI_VIDEO_NOFBC_ON_COMMAND 7
+
+static char jdi_4k_dualdsi_videooff_cmd0[] = {
+ 0x28, 0x00, 0x05, 0x80
+};
+
+static char jdi_4k_dualdsi_videooff_cmd1[] = {
+ 0x10, 0x00, 0x05, 0x80
+};
+
+static struct mipi_dsi_cmd jdi_4k_dualdsi_video_nofbc_off_command[] = {
+ {0x4, jdi_4k_dualdsi_videooff_cmd0, 0x32},
+ {0x4, jdi_4k_dualdsi_videooff_cmd1, 0x78}
+};
+
+#define JDI_4K_DUALDSI_VIDEO_NOFBC_OFF_COMMAND 2
+
+
+static struct command_state jdi_4k_dualdsi_video_nofbc_state = {
+ 0, 1
+};
+
+/*---------------------------------------------------------------------------*/
+/* Command mode panel information */
+/*---------------------------------------------------------------------------*/
+static struct commandpanel_info jdi_4k_dualdsi_video_nofbc_command_panel = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+/*---------------------------------------------------------------------------*/
+/* Video mode panel information */
+/*---------------------------------------------------------------------------*/
+static struct videopanel_info jdi_4k_dualdsi_video_nofbc_video_panel = {
+ 0, 0, 0, 0, 1, 1, 1, 0, 0x9
+};
+
+/*---------------------------------------------------------------------------*/
+/* Lane configuration */
+/*---------------------------------------------------------------------------*/
+static struct lane_configuration jdi_4k_dualdsi_video_nofbc_lane_config = {
+ 4, 0, 1, 1, 1, 1, 0
+};
+
+/*---------------------------------------------------------------------------*/
+/* Panel timing */
+/*---------------------------------------------------------------------------*/
+static const uint32_t jdi_4k_dualdsi_video_nofbc_timings[] = {
+ 0x3e, 0x38, 0x26, 0x00, 0x68, 0x6e, 0x2a, 0x3c, 0x2c, 0x03, 0x04, 0x00
+};
+
+
+static const uint32_t jdi_4k_dualdsi_thulium_video_nofbc_timings[] = {
+ 0x2c, 0x27, 0x0e, 0x10, 0x0a, 0x03, 0x04, 0xa0,
+ 0x2c, 0x27, 0x0e, 0x10, 0x0a, 0x03, 0x04, 0xa0,
+ 0x2c, 0x27, 0x0e, 0x10, 0x0a, 0x03, 0x04, 0xa0,
+ 0x2c, 0x27, 0x0e, 0x10, 0x0a, 0x03, 0x04, 0xa0,
+ 0x2c, 0x32, 0x0e, 0x0f, 0x0a, 0x03, 0x04, 0xa0,
+};
+
+static struct panel_timing jdi_4k_dualdsi_video_nofbc_timing_info = {
+ 0x0, 0x04, 0x0d, 0x3e
+};
+
+/*---------------------------------------------------------------------------*/
+/* Panel reset sequence */
+/*---------------------------------------------------------------------------*/
+static struct panel_reset_sequence jdi_4k_dualdsi_video_nofbc_reset_seq = {
+ {0, 0, 1, }, {200, 200, 200, }, 2
+};
+
+/*---------------------------------------------------------------------------*/
+/* Backlight setting */
+/*---------------------------------------------------------------------------*/
+static struct backlight jdi_4k_dualdsi_video_nofbc_backlight = {
+ 0, 1, 4095, 100, 1, "PMIC_8941"
+};
+
+static struct labibb_desc jdi_4k_dualdsi_video_nofbc_labibb = {
+ 0, 1, 5500000, 5500000, 5500000, 5500000, 3, 3, 1
+};
+
+#endif /*_PANEL_JDI_4K_DUALDSI_VIDEO_NOFBC__H_*/
diff --git a/dev/gcdb/display/include/panel_r69007_wqxga_cmd.h b/dev/gcdb/display/include/panel_r69007_wqxga_cmd.h
new file mode 100644
index 0000000..ab68848
--- /dev/null
+++ b/dev/gcdb/display/include/panel_r69007_wqxga_cmd.h
@@ -0,0 +1,381 @@
+/* Copyright (c) 2015, 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 _PANEL_R69007_WQXGA_CMD_H_
+#define _PANEL_R69007_WQXGA_CMD_H_
+/*---------------------------------------------------------------------------*/
+/* HEADER files */
+/*---------------------------------------------------------------------------*/
+#include "panel.h"
+
+/*---------------------------------------------------------------------------*/
+/* Panel configuration */
+/*---------------------------------------------------------------------------*/
+static struct panel_config r69007_wqxga_cmd_panel_data = {
+ "qcom,mdss_dsi_r69007_wqxga_cmd", "dsi:0:", "qcom,mdss-dsi-panel",
+ 10, 1, "DISPLAY_1", 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0,
+ "qcom,mdss_dsi_r69007_wqxga_cmd"
+};
+
+/*---------------------------------------------------------------------------*/
+/* Panel resolution */
+/*---------------------------------------------------------------------------*/
+static struct panel_resolution r69007_wqxga_cmd_panel_res = {
+ 1440, 2560, 112, 70, 10, 0, 9, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+/*---------------------------------------------------------------------------*/
+/* Panel color information */
+/*---------------------------------------------------------------------------*/
+static struct color_info r69007_wqxga_cmd_color = {
+ 24, 0, 0xff, 0, 0, 0
+};
+
+/*---------------------------------------------------------------------------*/
+/* Panel on/off command information */
+/*---------------------------------------------------------------------------*/
+static char r69007_wqxga_cmd_on_cmd0[] = {
+ 0x02, 0x00, 0x29, 0xC0,
+ 0xB0, 0x00, 0xFF, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd1[] = {
+ 0x04, 0x00, 0x29, 0xC0,
+ 0xB3, 0x00, 0x00, 0x00,
+};
+
+static char r69007_wqxga_cmd_on_cmd2[] = {
+ 0x04, 0x00, 0x29, 0xC0,
+ 0xB6, 0x3b, 0xd3, 0x00,
+};
+
+static char r69007_wqxga_cmd_on_cmd3[] = {
+ 0x28, 0x00, 0x29, 0xC0,
+ 0xC1, 0x80, 0x08, 0x11,
+ 0x1F, 0xFC, 0xF2, 0xC9,
+ 0x1F, 0x5F, 0x98, 0xB3,
+ 0xFE, 0xFF, 0xF7, 0xFE,
+ 0xFF, 0xD7, 0x31, 0xF1,
+ 0xCB, 0x3F, 0x3F, 0xFD,
+ 0xEF, 0x03, 0x24, 0x69,
+ 0x18, 0xAA, 0x40, 0x01,
+ 0x42, 0x02, 0x08, 0x00,
+ 0x01, 0x00, 0x01, 0x00,
+};
+
+static char r69007_wqxga_cmd_on_cmd4[] = {
+ 0x0F, 0x00, 0x29, 0xC0,
+ 0xC2, 0x01, 0xFA, 0x00,
+ 0x04, 0x64, 0x08, 0x00,
+ 0x60, 0x00, 0x38, 0x70,
+ 0x00, 0x00, 0x00, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd5[] = {
+ 0x09, 0x00, 0x29, 0xC0,
+ 0xC3, 0x07, 0x01, 0x08,
+ 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd6[] = {
+ 0x12, 0x00, 0x29, 0xC0,
+ 0xC4, 0x70, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x01,
+ 0x00, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd7[] = {
+ 0x11, 0x00, 0x29, 0xC0,
+ 0xC6, 0x3C, 0x00, 0x3C,
+ 0x02, 0x37, 0x01, 0x0E,
+ 0x01, 0x02, 0x01, 0x02,
+ 0x03, 0x0F, 0x04, 0x3C,
+ 0x46, 0xFF, 0xFF, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd8[] = {
+ 0x1F, 0x00, 0x29, 0xC0,
+ 0xC7, 0x00, 0x16, 0x22,
+ 0x2C, 0x3B, 0x48, 0x51,
+ 0x5D, 0x40, 0x47, 0x53,
+ 0x61, 0x6A, 0x71, 0x78,
+ 0x00, 0x16, 0x22, 0x2C,
+ 0x3B, 0x48, 0x51, 0x5D,
+ 0x40, 0x47, 0x53, 0x61,
+ 0x6A, 0x71, 0x78, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd9[] = {
+ 0x14, 0x00, 0x29, 0xC0,
+ 0xC8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFC, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFC, 0x00,
+};
+
+static char r69007_wqxga_cmd_on_cmd10[] = {
+ 0x14, 0x00, 0x29, 0xC0,
+ 0xC9, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFC, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFC, 0x00,
+};
+
+static char r69007_wqxga_cmd_on_cmd11[] = {
+ 0x14, 0x00, 0x29, 0xC0,
+ 0xCB, 0xAA, 0x1E, 0xE3,
+ 0x55, 0xF1, 0xFF, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+static char r69007_wqxga_cmd_on_cmd12[] = {
+ 0x02, 0x00, 0x29, 0xC0,
+ 0xCC, 0x07, 0xFF, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd13[] = {
+ 0x0B, 0x00, 0x29, 0xC0,
+ 0xCD, 0x3A, 0x86, 0x3A,
+ 0x86, 0x8D, 0x8D, 0x04,
+ 0x04, 0x00, 0x00, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd14[] = {
+ 0x11, 0x00, 0x29, 0xC0,
+ 0xD0, 0x2A, 0x01, 0x91,
+ 0x6A, 0xDC, 0x59, 0x19,
+ 0x00, 0x00, 0x00, 0x19,
+ 0x99, 0x04, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd15[] = {
+ 0x21, 0x00, 0x29, 0xC0,
+ 0xD3, 0x1B, 0x3B, 0xBB,
+ 0x77, 0x77, 0x77, 0xBB,
+ 0xB3, 0x33, 0x00, 0x80,
+ 0xA7, 0xAF, 0x5B, 0x5B,
+ 0x33, 0x33, 0x33, 0xC0,
+ 0x00, 0xF2, 0x0F, 0x7D,
+ 0x7C, 0xFF, 0x0F, 0x99,
+ 0x00, 0x33, 0x00, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd16[] = {
+ 0x06, 0x00, 0x29, 0xC0,
+ 0xD4, 0x57, 0x33, 0x05,
+ 0x00, 0xF4, 0xFF, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd17[] = {
+ 0x0C, 0x00, 0x29, 0xC0,
+ 0xD5, 0x66, 0x00, 0x00,
+ 0x01, 0x3D, 0x01, 0x3D,
+ 0x00, 0x38, 0x00, 0x38,
+};
+
+static char r69007_wqxga_cmd_on_cmd18[] = {
+ 0x22, 0x00, 0x29, 0xC0,
+ 0xD7, 0x04, 0xff, 0x23,
+ 0x15, 0x75, 0xa4, 0xc3,
+ 0x1f, 0xc3, 0x1f, 0xd9,
+ 0x07, 0x1c, 0x1f, 0x30,
+ 0x8e, 0x87, 0xc7, 0xe3,
+ 0xf1, 0xcc, 0xf0, 0x1f,
+ 0xf0, 0x0d, 0x70, 0x00,
+ 0x2A, 0x00, 0x7e, 0x1d,
+ 0x07, 0x00, 0xFF, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd19[] = {
+ 0x05, 0x00, 0x29, 0xC0,
+ 0xDE, 0x00, 0x3f, 0xff,
+ 0x10, 0xFF, 0xFF, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd20[] = {
+ 0x02, 0x00, 0x29, 0xC0,
+ 0xD6, 0x01, 0xFF, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd21[] = {
+ 0x02, 0x00, 0x39, 0xC0,
+ 0x35, 0x00, 0xFF, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd22[] = {
+ 0x05, 0x00, 0x39, 0xC0,
+ 0x2A, 0x00, 0x00, 0x05,
+ 0x9F, 0xFF, 0xFF, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd23[] = {
+ 0x05, 0x00, 0x39, 0xC0,
+ 0x2B, 0x00, 0x00, 0x09,
+ 0xFF, 0xFF, 0xFF, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd24[] = {
+ 0x02, 0x00, 0x39, 0xC0,
+ 0x2C, 0x00, 0xFF, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd25[] = {
+ 0x02, 0x00, 0x39, 0xC0,
+ 0x36, 0x40, 0xFF, 0xFF,
+};
+
+static char r69007_wqxga_cmd_on_cmd26[] = {
+ 0x29, 0x00, 0x05, 0x80
+};
+
+static char r69007_wqxga_cmd_on_cmd27[] = {
+ 0x11, 0x00, 0x05, 0x80
+};
+
+static struct mipi_dsi_cmd r69007_wqxga_cmd_on_command[] = {
+ {0x8, r69007_wqxga_cmd_on_cmd0, 0x00},
+ {0x8, r69007_wqxga_cmd_on_cmd1, 0x00},
+ {0x8, r69007_wqxga_cmd_on_cmd2, 0x00},
+ {0x2c, r69007_wqxga_cmd_on_cmd3, 0x00},
+ {0x14, r69007_wqxga_cmd_on_cmd4, 0x00},
+ {0x10, r69007_wqxga_cmd_on_cmd5, 0x00},
+ {0x18, r69007_wqxga_cmd_on_cmd6, 0x00},
+ {0x18, r69007_wqxga_cmd_on_cmd7, 0x00},
+ {0x24, r69007_wqxga_cmd_on_cmd8, 0x00},
+ {0x18, r69007_wqxga_cmd_on_cmd9, 0x00},
+ {0x18, r69007_wqxga_cmd_on_cmd10, 0x00},
+ {0x18, r69007_wqxga_cmd_on_cmd11, 0x00},
+ {0x8, r69007_wqxga_cmd_on_cmd12, 0x00},
+ {0x10, r69007_wqxga_cmd_on_cmd13, 0x00},
+ {0x18, r69007_wqxga_cmd_on_cmd14, 0x00},
+ {0x28, r69007_wqxga_cmd_on_cmd15, 0x00},
+ {0xc, r69007_wqxga_cmd_on_cmd16, 0x00},
+ {0x10, r69007_wqxga_cmd_on_cmd17, 0x00},
+ {0x28, r69007_wqxga_cmd_on_cmd18, 0x00},
+ {0xc, r69007_wqxga_cmd_on_cmd19, 0x00},
+ {0x8, r69007_wqxga_cmd_on_cmd20, 0x00},
+ {0x8, r69007_wqxga_cmd_on_cmd21, 0x00},
+ {0xc, r69007_wqxga_cmd_on_cmd22, 0x00},
+ {0xc, r69007_wqxga_cmd_on_cmd23, 0x00},
+ {0x8, r69007_wqxga_cmd_on_cmd24, 0x00},
+ {0x8, r69007_wqxga_cmd_on_cmd25, 0x00},
+ {0x4, r69007_wqxga_cmd_on_cmd26, 0x78},
+ {0x4, r69007_wqxga_cmd_on_cmd27, 0x14}
+};
+
+#define R69007_WQXGA_CMD_ON_COMMAND 28
+
+
+static char r69007_wqxga_cmdoff_cmd0[] = {
+ 0x28, 0x00, 0x05, 0x80
+};
+
+static char r69007_wqxga_cmdoff_cmd1[] = {
+ 0x10, 0x00, 0x05, 0x80
+};
+
+static struct mipi_dsi_cmd r69007_wqxga_cmd_off_command[] = {
+ {0x4, r69007_wqxga_cmdoff_cmd0, 0x32},
+ {0x4, r69007_wqxga_cmdoff_cmd1, 0x78}
+};
+
+#define R69007_WQXGA_CMD_OFF_COMMAND 2
+
+
+static struct command_state r69007_wqxga_cmd_state = {
+ 0, 1
+};
+
+/*---------------------------------------------------------------------------*/
+/* Command mode panel information */
+/*---------------------------------------------------------------------------*/
+static struct commandpanel_info r69007_wqxga_cmd_command_panel = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+/*---------------------------------------------------------------------------*/
+/* Video mode panel information */
+/*---------------------------------------------------------------------------*/
+static struct videopanel_info r69007_wqxga_cmd_video_panel = {
+ 1, 0, 0, 0, 1, 1, 2, 0, 0x9
+};
+
+/*---------------------------------------------------------------------------*/
+/* Lane configuration */
+/*---------------------------------------------------------------------------*/
+static struct lane_configuration r69007_wqxga_cmd_lane_config = {
+ 4, 0, 1, 1, 1, 1, 0
+};
+
+/*---------------------------------------------------------------------------*/
+/* Panel timing */
+/*---------------------------------------------------------------------------*/
+static const uint32_t r69007_wqxga_cmd_timings[] = {
+ 0xDA, 0x34, 0x24, 0x00, 0x64, 0x68, 0x28, 0x38, 0x2A, 0x03, 0x04, 0x00
+};
+
+static const uint32_t r69007_wqxga_thulium_cmd_timings[] = {
+ 0x23, 0x1F, 0x07, 0x09, 0x05, 0x03, 0x04, 0xa0,
+ 0x23, 0x1F, 0x07, 0x09, 0x05, 0x03, 0x04, 0xa0,
+ 0x23, 0x1F, 0x07, 0x09, 0x05, 0x03, 0x04, 0xa0,
+ 0x23, 0x1F, 0x07, 0x09, 0x05, 0x03, 0x04, 0xa0,
+ 0x23, 0x19, 0x08, 0x08, 0x05, 0x03, 0x04, 0xa0
+};
+
+static struct panel_timing r69007_wqxga_cmd_timing_info = {
+ 0x0, 0x04, 0x03, 0x29
+};
+
+/*---------------------------------------------------------------------------*/
+/* Panel reset sequence */
+/*---------------------------------------------------------------------------*/
+static struct panel_reset_sequence r69007_wqxga_cmd_reset_seq = {
+ {1, 0, 1, }, {2, 5, 120, }, 2
+};
+
+static struct labibb_desc r69007_wqxga_cmd_labibb = {
+ 0, 1, 5500000, 5500000, 5500000, 5500000, 3, 3, 1
+};
+
+/*---------------------------------------------------------------------------*/
+/* Backlight setting */
+/*---------------------------------------------------------------------------*/
+static struct backlight r69007_wqxga_cmd_backlight = {
+ 1, 1, 4095, 100, 1, "PMIC_8941"
+};
+
+#endif /*_PANEL_R69007_WQXGA_CMD_H_*/
diff --git a/dev/pmic/pmi8994/pm_app_smbchg.c b/dev/pmic/pmi8994/pm_app_smbchg.c
index d3d1d6b..4b9693b 100644
--- a/dev/pmic/pmi8994/pm_app_smbchg.c
+++ b/dev/pmic/pmi8994/pm_app_smbchg.c
@@ -40,11 +40,12 @@
#include "pm_smbchg_driver.h"
#include "pm_comm.h"
#include "pm_smbchg_dc_chgpth.h"
+#include <kernel/thread.h>
#include <debug.h>
#include <platform/timer.h>
#include <sys/types.h>
#include <target.h>
-
+#include <pm8x41.h>
/*===========================================================================
@@ -64,16 +65,27 @@
#define PM_MIN_ADC_READY_DELAY 1 * 1000 //1ms
#define PM_MAX_ADC_READY_DELAY 2000 //2s
#define SBL_PACKED_SRAM_CONFIG_SIZE 3
-
+#define PM_CHARGE_DISPLAY_TIMEOUT 5 * 1000 //5 secs
#define boot_log_message(...) dprintf(CRITICAL, __VA_ARGS__)
static pm_smbchg_bat_if_low_bat_thresh_type pm_dbc_bootup_volt_threshold;
+/* Need to maintain flags to track
+ * 1. charge_in_progress: Charging progress and exit the loop once charging is completed.
+ * 2. display_initialized: Track if the display is already initialized to make sure display
+ * thread does not reinitialize the display again.
+ * 3. display_shutdown_in_prgs: To avoid race condition between regualr display initialization and
+ * display shutdown in display thread.
+ */
+
static bool display_initialized;
static bool charge_in_progress;
+static bool display_shutdown_in_prgs;
+
char panel_name[256];
pm_err_flag_type pm_smbchg_get_charger_path(uint32 device_index, pm_smbchg_usb_chgpth_pwr_pth_type* charger_path);
pm_err_flag_type pm_appsbl_chg_config_vbat_low_threshold(uint32 device_index, pm_smbchg_specific_data_type *chg_param_ptr);
+static void display_thread_initialize();
/*===========================================================================
@@ -173,6 +185,7 @@
vbatt_weak_status = FALSE;
break; //bootup
}
+ dprintf(INFO, "Vbatt Level: %u\n", vbat_adc);
}
else
{
@@ -227,14 +240,11 @@
charge_in_progress = true;
#if DISPLAY_SPLASH_SCREEN
- if (!display_initialized)
- target_display_init(panel_name);
- display_initialized = true;
+ display_thread_initialize();
#endif
/* Wait for 500 msecs before looking for vbat */
udelay(PM_WEAK_BATTERY_CHARGING_DELAY); //500ms
-
//Check if Charging in progress
err_flag |= pm_smbchg_chgr_get_chgr_sts(device_index, &vbatt_chging_status);
if ( err_flag != PM_ERR_FLAG__SUCCESS ) { break;}
@@ -584,3 +594,83 @@
return err_flag;
}
+
+static bool is_power_key_pressed()
+{
+ int count = 0;
+
+ if (pm8x41_get_pwrkey_is_pressed())
+ {
+ while(count++ < 10 && pm8x41_get_pwrkey_is_pressed())
+ thread_sleep(100);
+
+ dprintf(INFO, "Power Key Pressed\n");
+ return true;
+ }
+
+ return false;
+}
+
+bool pm_app_display_shutdown_in_prgs()
+{
+ return display_shutdown_in_prgs;
+}
+
+static int display_charger_screen()
+{
+ static bool display_init_first_time;
+
+ /* By default first time display the charger screen
+ * Wait for 5 seconds and turn off the display
+ * If user presses power key & charging is in progress display the charger screen
+ */
+ do {
+ if (!display_init_first_time || (is_power_key_pressed() && charge_in_progress))
+ {
+ /* Display charger screen */
+ target_display_init(panel_name);
+ /* wait for 5 seconds to show the charger screen */
+ display_initialized = true;
+ thread_sleep(PM_CHARGE_DISPLAY_TIMEOUT);
+ /* Shutdown the display: If the charging is complete
+ * continue boot up with display on
+ */
+ if (charge_in_progress)
+ {
+ display_shutdown_in_prgs = true;
+ target_display_shutdown();
+ display_shutdown_in_prgs = false;
+ display_initialized = false;
+ }
+ display_init_first_time = true;
+ }
+ /* Wait for 100ms before reading the pmic interrupt status
+ * again, reading the pmic interrupt status in a loop without delays
+ * reports false key presses */
+ thread_sleep(100);
+ } while (charge_in_progress);
+
+ return 0;
+}
+
+/* Create a thread to monitor power key press events
+ * and turn on/off the display for battery
+ */
+static void display_thread_initialize()
+{
+ thread_t *thr = NULL;
+ static bool is_thread_start;
+
+ if (!is_thread_start)
+ {
+ thr = thread_create("display_charger_screen", &display_charger_screen, NULL, DEFAULT_PRIORITY, DEFAULT_STACK_SIZE);
+ if (!thr)
+ {
+ dprintf(CRITICAL, "Error: Could not create display charger screen thread\n");
+ return;
+ }
+ thread_resume(thr);
+
+ is_thread_start = true;
+ }
+}
diff --git a/include/platform.h b/include/platform.h
index 50ef337..9c8e698 100644
--- a/include/platform.h
+++ b/include/platform.h
@@ -71,4 +71,5 @@
uint32_t platform_get_max_periph();
int platform_is_msm8996();
uint64_t platform_get_ddr_start();
+bool platform_use_qmp_misc_settings();
#endif
diff --git a/platform/mdm9640/include/platform/iomap.h b/platform/mdm9640/include/platform/iomap.h
index 5803acd..f92f556 100644
--- a/platform/mdm9640/include/platform/iomap.h
+++ b/platform/mdm9640/include/platform/iomap.h
@@ -180,6 +180,8 @@
/* SS QMP (Qulacomm Multi Protocol) */
#define QMP_PHY_BASE 0x78000
+#define AHB2_PHY_BASE 0x0007e000
+#define PERIPH_SS_AHB2PHY_TOP_CFG (AHB2_PHY_BASE + 0x10)
/* QMP register offset */
#define PLATFORM_QMP_OFFSET 0x8
diff --git a/platform/msm8952/platform.c b/platform/msm8952/platform.c
index 92cd0c8..2da8ced 100644
--- a/platform/msm8952/platform.c
+++ b/platform/msm8952/platform.c
@@ -118,7 +118,7 @@
sections = 90;
while(sections--)
{
- arm_mmu_map_section(ddr_start + sections * MB, ddr_start + sections* MB, COMMON_MEMORY);
+ arm_mmu_map_section(ddr_start + sections * MB, ddr_start + sections* MB, SCRATCH_MEMORY);
}
diff --git a/platform/msm8996/include/platform/iomap.h b/platform/msm8996/include/platform/iomap.h
index 2ae1d17..d3ba81a 100644
--- a/platform/msm8996/include/platform/iomap.h
+++ b/platform/msm8996/include/platform/iomap.h
@@ -78,6 +78,9 @@
#define QUSB2_PHY_BASE 0x7411000
#define GCC_QUSB2_PHY_BCR (CLK_CTL_BASE + 0x00012038)
+#define AHB2_PHY_BASE 0x7416000
+#define PERIPH_SS_AHB2PHY_TOP_CFG (AHB2_PHY_BASE + 0x10)
+
/* Clocks */
#define CLK_CTL_BASE 0x300000
diff --git a/platform/msm8996/platform.c b/platform/msm8996/platform.c
index 090e81c..08c0025 100644
--- a/platform/msm8996/platform.c
+++ b/platform/msm8996/platform.c
@@ -222,3 +222,11 @@
{
return ddr_start;
}
+
+bool platform_use_qmp_misc_settings()
+{
+ if (board_soc_version() < 0x30000)
+ return true;
+
+ return false;
+}
diff --git a/platform/msm_shared/bam.c b/platform/msm_shared/bam.c
index 723ce00..ef39321 100644
--- a/platform/msm_shared/bam.c
+++ b/platform/msm_shared/bam.c
@@ -139,16 +139,7 @@
/* Reset and initialize the bam module */
void bam_init(struct bam_instance *bam)
{
- /* Check for only one pipe's direction.
- * The other is assumed to be the opposite system
- * transaction.
- */
- if (bam->pipe[0].trans_type == SYS2BAM ||
- bam->pipe[0].trans_type == BAM2SYS)
- {
- /* Program the threshold count */
- writel(bam->threshold, BAM_DESC_CNT_TRSHLD_REG(bam->base));
- }
+ /* bam is initialized by TZ, so nothing needs to be done here */
}
/* Funtion to setup a simple fifo structure.
diff --git a/platform/msm_shared/include/bam.h b/platform/msm_shared/include/bam.h
index bfeb34b..67b2f5f 100644
--- a/platform/msm_shared/include/bam.h
+++ b/platform/msm_shared/include/bam.h
@@ -71,7 +71,6 @@
#define BAM_DATA_READ 0
#define BAM_DATA_WRITE 1
-#define BAM_DESC_CNT_TRSHLD_REG(x) (0x0008 + (x))
#define COUNT_TRESHOLD_MASK 0xFF
#define BAM_IRQ_MASK (1 << 31)
#define P_IRQ_MASK (1)
diff --git a/platform/msm_shared/mipi_dsi.c b/platform/msm_shared/mipi_dsi.c
index 06c4804..0474f37 100644
--- a/platform/msm_shared/mipi_dsi.c
+++ b/platform/msm_shared/mipi_dsi.c
@@ -781,7 +781,7 @@
writel(data, ctl_base + COMMAND_MODE_MDP_STREAM1_TOTAL);
if (dsc->dsi_dsc_config)
- dsc->dsi_dsc_config(pinfo->mipi.ctl_base, DSI_VIDEO_MODE, dsc);
+ dsc->dsi_dsc_config(pinfo->mipi.ctl_base, DSI_CMD_MODE, dsc);
} else {
writel((img_width * ystride + 1) << 16 | 0x0039,
diff --git a/platform/msm_shared/qmp_usb30_phy.c b/platform/msm_shared/qmp_usb30_phy.c
index 54a8831..91aed89 100644
--- a/platform/msm_shared/qmp_usb30_phy.c
+++ b/platform/msm_shared/qmp_usb30_phy.c
@@ -36,6 +36,7 @@
#include <clock.h>
#include <debug.h>
#include <qtimer.h>
+#include <platform.h>
#define HS_PHY_COMMON_CTRL 0xEC
#define USE_CORECLK BIT(14)
@@ -64,15 +65,11 @@
{0x174, 0x30}, /* QSERDES_COM_CLK_SELECT */
{0x194, 0x06}, /* QSERDES_COM_CMN_CONFIG */
{0x19c, 0x01}, /* QSERDES_COM_SVS_MODE_CLK_SEL */
- {0x178, 0x01}, /* QSERDES_COM_HSCLK_SEL */
+ {0x178, 0x00}, /* QSERDES_COM_HSCLK_SEL */
{0x70, 0x0F}, /* USB3PHY_QSERDES_COM_BG_TRIM */
{0x48, 0x0F}, /* USB3PHY_QSERDES_COM_PLL_IVCO */
{0x3C, 0x04}, /* QSERDES_COM_SYS_CLK_CTRL */
- /* Res_code Settings */
- {0xC4, 0x15}, /* USB3PHY_QSERDES_COM_RESCODE_DIV_NUM */
- {0x1B8, 0x1F}, /* QSERDES_COM_CMN_MISC2 */
-
/* PLL & Loop filter settings */
{0xd0, 0x82}, /* QSERDES_COM_DEC_START_MODE0 */
{0xdc, 0x55}, /* QSERDES_COM_DIV_FRAC_START1_MODE0 */
@@ -134,6 +131,15 @@
{0x600, 0x00}, /* USB3_PHY_SW_RESET */
};
+#if PLATFORM_USE_QMP_MISC
+struct qmp_reg qmp_misc_settings_rev2[] =
+{
+ {0x178, 0x01}, /* QSERDES_COM_HSCLK_SEL */
+ {0xC4, 0x15}, /* USB3PHY_QSERDES_COM_RESCODE_DIV_NUM */
+ {0x1B8, 0x1F}, /* QSERDES_COM_CMN_MISC2 */
+};
+#endif
+
__WEAK uint32_t target_override_pll()
{
return 0;
@@ -265,6 +271,11 @@
for (i = 0 ; i < qmp_reg_size; i++)
writel(qmp_settings_rev2[i].val, QMP_PHY_BASE + qmp_settings_rev2[i].off);
+#if PLATFORM_USE_QMP_MISC
+ if (platform_use_qmp_misc_settings())
+ for (i = 0; i < ARRAY_SIZE(qmp_misc_settings_rev2); i++)
+ writel(qmp_misc_settings_rev2[i].val, QMP_PHY_BASE + qmp_misc_settings_rev2[i].off);
+#endif
if (target_override_pll())
{
qmp_reg_size = sizeof(qmp_override_pll_rev2) / sizeof(struct qmp_reg);
diff --git a/platform/msm_shared/qusb2_phy.c b/platform/msm_shared/qusb2_phy.c
index fab6e09..871bbcc 100644
--- a/platform/msm_shared/qusb2_phy.c
+++ b/platform/msm_shared/qusb2_phy.c
@@ -25,7 +25,7 @@
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
+#include <arch/defines.h>
#include <platform/iomap.h>
#include <qusb2_phy.h>
#include <reg.h>
@@ -55,6 +55,10 @@
udelay(10);
writel(val & ~BIT(0), GCC_QUSB2_PHY_BCR);
+ /* configure the abh2 phy to wait state */
+ writel(0x11, PERIPH_SS_AHB2PHY_TOP_CFG);
+ dmb();
+
/* set CLAMP_N_EN and stay with disabled USB PHY */
writel(0x23, QUSB2PHY_PORT_POWERDOWN);
diff --git a/platform/msm_shared/smem.h b/platform/msm_shared/smem.h
index 41390c4..44eb81d 100644
--- a/platform/msm_shared/smem.h
+++ b/platform/msm_shared/smem.h
@@ -427,6 +427,11 @@
FSM9916 = 276,
APQ8076 = 277,
MSM8976 = 278,
+ MDMCALIFORNIUM1 = 279,
+ MDMCALIFORNIUM2 = 283,
+ MDMCALIFORNIUM3 = 284,
+ MDMCALIFORNIUM4 = 285,
+ MDMCALIFORNIUM5 = 286,
APQ8052 = 289,
MDMFERMIUM = 290,
APQ8096 = 291,
diff --git a/project/msm8996.mk b/project/msm8996.mk
index 2dccd59..a5f86f3 100644
--- a/project/msm8996.mk
+++ b/project/msm8996.mk
@@ -98,5 +98,7 @@
ENABLE_REBOOT_MODULE := 1
#fuse for Qusb tun2 config
DEFINES += QFPROM_CORR_CALIB_ROW12_MSB=0x0007424C
+#Use misc settings for qmp
+DEFINES += PLATFORM_USE_QMP_MISC=1
#Use PON register for reboot reason
DEFINES += USE_PON_REBOOT_REG=1
diff --git a/target/msm8909/init.c b/target/msm8909/init.c
index 5db6e08..3cc3923 100644
--- a/target/msm8909/init.c
+++ b/target/msm8909/init.c
@@ -553,7 +553,7 @@
if (is_cold_boot &&
(!(pon_reason & HARD_RST)) &&
(!(pon_reason & KPDPWR_N)) &&
- ((pon_reason & USB_CHG) || (pon_reason & DC_CHG)))
+ ((pon_reason & USB_CHG) || (pon_reason & DC_CHG) || (pon_reason & CBLPWR_N)))
return 1;
else
return 0;
diff --git a/target/msm8909/oem_panel.c b/target/msm8909/oem_panel.c
index 6d84eef..7b6e473 100644
--- a/target/msm8909/oem_panel.c
+++ b/target/msm8909/oem_panel.c
@@ -319,6 +319,7 @@
memcpy(phy_db->timing,
fl10802_fwvga_video_timings, TIMING_SIZE);
pinfo->mipi.signature = FL10802_FWVGA_VIDEO_SIGNATURE;
+ pinfo->mipi.cmds_post_tg = 1;
break;
case UNKNOWN_PANEL:
default:
diff --git a/target/msm8952/oem_panel.c b/target/msm8952/oem_panel.c
index 57e069f..4d448bf 100644
--- a/target/msm8952/oem_panel.c
+++ b/target/msm8952/oem_panel.c
@@ -53,6 +53,7 @@
#include "include/panel_hx8399a_1080p_video.h"
#include "include/panel_nt35597_wqxga_dsc_video.h"
#include "include/panel_nt35597_wqxga_dsc_cmd.h"
+#include "include/panel_hx8394d_720p_video.h"
/*---------------------------------------------------------------------------*/
/* static panel selection variable */
@@ -67,6 +68,7 @@
HX8399A_1080P_VIDEO_PANEL,
NT35597_WQXGA_DSC_VIDEO_PANEL,
NT35597_WQXGA_DSC_CMD_PANEL,
+ HX8394D_720P_VIDEO_PANEL,
UNKNOWN_PANEL
};
@@ -88,6 +90,7 @@
{"hx8399a_1080p_video", HX8399A_1080P_VIDEO_PANEL},
{"nt35597_wqxga_dsc_video", NT35597_WQXGA_DSC_VIDEO_PANEL},
{"nt35597_wqxga_dsc_cmd", NT35597_WQXGA_DSC_CMD_PANEL},
+ {"hx8394d_720p_video", HX8394D_720P_VIDEO_PANEL},
};
static uint32_t panel_id;
@@ -403,6 +406,31 @@
pinfo->dsc.dsi_dsc_config = mdss_dsc_dsi_config;
pinfo->dsc.mdp_dsc_config = mdss_dsc_mdp_config;
break;
+ case HX8394D_720P_VIDEO_PANEL:
+ panelstruct->paneldata = &hx8394d_720p_video_panel_data;
+ panelstruct->panelres = &hx8394d_720p_video_panel_res;
+ panelstruct->color = &hx8394d_720p_video_color;
+ panelstruct->videopanel = &hx8394d_720p_video_video_panel;
+ panelstruct->commandpanel = &hx8394d_720p_video_command_panel;
+ panelstruct->state = &hx8394d_720p_video_state;
+ panelstruct->laneconfig = &hx8394d_720p_video_lane_config;
+ panelstruct->paneltiminginfo
+ = &hx8394d_720p_video_timing_info;
+ panelstruct->panelresetseq
+ = &hx8394d_720p_video_panel_reset_seq;
+ panelstruct->backlightinfo = &hx8394d_720p_video_backlight;
+ pinfo->mipi.panel_on_cmds
+ = hx8394d_720p_video_on_command;
+ pinfo->mipi.num_of_panel_on_cmds
+ = HX8394D_720P_VIDEO_ON_COMMAND;
+ pinfo->mipi.panel_off_cmds
+ = hx8394d_720p_video_off_command;
+ pinfo->mipi.num_of_panel_off_cmds
+ = HX8394D_720P_VIDEO_OFF_COMMAND;
+ memcpy(phy_db->timing,
+ hx8394d_720p_video_timings, TIMING_SIZE);
+ pinfo->mipi.signature = HX8394D_720P_VIDEO_SIGNATURE;
+ break;
case UNKNOWN_PANEL:
default:
memset(panelstruct, 0, sizeof(struct panel_struct));
diff --git a/target/msm8952/target_display.c b/target/msm8952/target_display.c
index f4664ec..b2585fc 100644
--- a/target/msm8952/target_display.c
+++ b/target/msm8952/target_display.c
@@ -51,15 +51,6 @@
#include "include/display_resource.h"
#include "gcdb_display.h"
-#define DSC_CMD_PANEL "dsc_cmd_panel"
-#define DSC_VID_PANEL "dsc_vid_panel"
-#define DSC_VID_PANEL_ADV7533_1080P "dsc_vid_panel_adv7533_1080p"
-#define DSC_CMD_PANEL_ADV7533_1080P "dsc_cmd_panel_adv7533_1080p"
-#define DSC_CMD_PANEL_STRING "1:dsi:0:none:1:qcom,mdss_dsi_nt35597_dsc_wqxga_cmd:cfg:single_dsi"
-#define DSC_VID_PANEL_STRING "1:dsi:0:none:1:qcom,mdss_dsi_nt35597_dsc_wqxga_video:cfg:single_dsi"
-#define DSC_CMD_PANEL_ADV7533_1080P_STRING "1:dsi:0:qcom,mdss_dsi_adv7533_1080p:1:qcom,mdss_dsi_nt35597_dsc_wqxga_cmd:cfg:dual_dsi"
-#define DSC_VID_PANEL_ADV7533_1080P_STRING "1:dsi:0:qcom,mdss_dsi_adv7533_1080p:1:qcom,mdss_dsi_nt35597_dsc_wqxga_video:cfg:dual_dsi"
-
/*---------------------------------------------------------------------------*/
/* GPIO configuration */
/*---------------------------------------------------------------------------*/
@@ -529,55 +520,7 @@
bool target_display_panel_node(char *pbuf, uint16_t buf_size)
{
- int prefix_string_len = strlen(DISPLAY_CMDLINE_PREFIX);
- bool ret = true;
- struct oem_panel_data oem = mdss_dsi_get_oem_data();
-
- if (!strcmp(oem.panel, DSC_CMD_PANEL)) {
- if (buf_size < (prefix_string_len +
- strlen(DSC_CMD_PANEL_STRING))) {
- dprintf(CRITICAL, "DSC command line argument is greater than buffer size\n");
- return false;
- }
- strlcpy(pbuf, DISPLAY_CMDLINE_PREFIX, buf_size);
- buf_size -= prefix_string_len;
- pbuf += prefix_string_len;
- strlcpy(pbuf, DSC_CMD_PANEL_STRING, buf_size);
- } else if (!strcmp(oem.panel, DSC_VID_PANEL)) {
- if (buf_size < (prefix_string_len +
- strlen(DSC_VID_PANEL_STRING))) {
- dprintf(CRITICAL, "DSC command line argument is greater than buffer size\n");
- return false;
- }
- strlcpy(pbuf, DISPLAY_CMDLINE_PREFIX, buf_size);
- buf_size -= prefix_string_len;
- pbuf += prefix_string_len;
- strlcpy(pbuf, DSC_VID_PANEL_STRING, buf_size);
- } else if (!strcmp(oem.panel, DSC_VID_PANEL_ADV7533_1080P)) {
- if (buf_size < (prefix_string_len +
- strlen(DSC_VID_PANEL_ADV7533_1080P_STRING))) {
- dprintf(CRITICAL, "DSC command line argument is greater than buffer size\n");
- return false;
- }
- strlcpy(pbuf, DISPLAY_CMDLINE_PREFIX, buf_size);
- buf_size -= prefix_string_len;
- pbuf += prefix_string_len;
- strlcpy(pbuf, DSC_VID_PANEL_ADV7533_1080P_STRING, buf_size);
- } else if (!strcmp(oem.panel, DSC_CMD_PANEL_ADV7533_1080P)) {
- if (buf_size < (prefix_string_len +
- strlen(DSC_CMD_PANEL_ADV7533_1080P_STRING))) {
- dprintf(CRITICAL, "DSC command line argument is greater than buffer size\n");
- return false;
- }
- strlcpy(pbuf, DISPLAY_CMDLINE_PREFIX, buf_size);
- buf_size -= prefix_string_len;
- pbuf += prefix_string_len;
- strlcpy(pbuf, DSC_CMD_PANEL_ADV7533_1080P_STRING, buf_size);
- } else {
- ret = gcdb_display_cmdline_arg(pbuf, buf_size);
- }
-
- return ret;
+ return gcdb_display_cmdline_arg(pbuf, buf_size);
}
void target_display_init(const char *panel_name)
@@ -592,10 +535,6 @@
if (!strcmp(oem.panel, NO_PANEL_CONFIG)
|| !strcmp(oem.panel, SIM_VIDEO_PANEL)
|| !strcmp(oem.panel, SIM_CMD_PANEL)
- || !strcmp(oem.panel, DSC_CMD_PANEL)
- || !strcmp(oem.panel, DSC_VID_PANEL)
- || !strcmp(oem.panel, DSC_CMD_PANEL_ADV7533_1080P)
- || !strcmp(oem.panel, DSC_VID_PANEL_ADV7533_1080P)
|| oem.skip) {
dprintf(INFO, "Selected panel: %s\nSkip panel configuration\n",
oem.panel);
diff --git a/target/msm8996/init.c b/target/msm8996/init.c
index 4d1fad1..a80ad30 100644
--- a/target/msm8996/init.c
+++ b/target/msm8996/init.c
@@ -293,8 +293,16 @@
* Charging should happen as early as possible, any other driver
* initialization before this should consider the power impact
*/
- if (board_hardware_id() == HW_PLATFORM_MTP)
- pm_appsbl_chg_check_weak_battery_status(1);
+ switch(board_hardware_id())
+ {
+ case HW_PLATFORM_MTP:
+ case HW_PLATFORM_FLUID:
+ pm_appsbl_chg_check_weak_battery_status(1);
+ break;
+ default:
+ /* Charging not supported */
+ break;
+ };
#endif
/* Initialize Qseecom */
@@ -347,12 +355,13 @@
int target_cont_splash_screen()
{
uint8_t splash_screen = 0;
- if(!splash_override) {
+ if(!splash_override && !pm_appsbl_charging_in_progress()) {
switch(board_hardware_id())
{
case HW_PLATFORM_SURF:
case HW_PLATFORM_MTP:
case HW_PLATFORM_FLUID:
+ case HW_PLATFORM_QRD:
dprintf(SPEW, "Target_cont_splash=1\n");
splash_screen = 1;
break;
diff --git a/target/msm8996/oem_panel.c b/target/msm8996/oem_panel.c
index 3fbb979..25ef683 100644
--- a/target/msm8996/oem_panel.c
+++ b/target/msm8996/oem_panel.c
@@ -53,6 +53,7 @@
#include "include/panel_sharp_wqxga_dualdsi_video.h"
#include "include/panel_jdi_qhd_dualdsi_video.h"
#include "include/panel_jdi_qhd_dualdsi_cmd.h"
+#include "include/panel_r69007_wqxga_cmd.h"
/*---------------------------------------------------------------------------*/
/* static panel selection variable */
@@ -65,6 +66,7 @@
NT35597_WQXGA_DSC_CMD_PANEL,
JDI_QHD_DUALDSI_VIDEO_PANEL,
JDI_QHD_DUALDSI_CMD_PANEL,
+ R69007_WQXGA_CMD_PANEL,
UNKNOWN_PANEL
};
@@ -80,6 +82,7 @@
{"nt35597_wqxga_dsc_cmd", NT35597_WQXGA_DSC_CMD_PANEL},
{"jdi_qhd_dualdsi_video", JDI_QHD_DUALDSI_VIDEO_PANEL},
{"jdi_qhd_dualdsi_cmd", JDI_QHD_DUALDSI_CMD_PANEL},
+ {"r69007_wqxga_cmd", R69007_WQXGA_CMD_PANEL},
};
static uint32_t panel_id;
@@ -341,6 +344,36 @@
jdi_qhd_dualdsi_thulium_video_timings,
MAX_TIMING_CONFIG * sizeof(uint32_t));
break;
+ case R69007_WQXGA_CMD_PANEL:
+ pan_type = PANEL_TYPE_DSI;
+ pinfo->lcd_reg_en = 0;
+ panelstruct->paneldata = &r69007_wqxga_cmd_panel_data;
+ panelstruct->panelres = &r69007_wqxga_cmd_panel_res;
+ panelstruct->color = &r69007_wqxga_cmd_color;
+ panelstruct->videopanel = &r69007_wqxga_cmd_video_panel;
+ panelstruct->commandpanel = &r69007_wqxga_cmd_command_panel;
+ panelstruct->state = &r69007_wqxga_cmd_state;
+ panelstruct->laneconfig = &r69007_wqxga_cmd_lane_config;
+ panelstruct->paneltiminginfo
+ = &r69007_wqxga_cmd_timing_info;
+ panelstruct->panelresetseq
+ = &r69007_wqxga_cmd_reset_seq;
+ panelstruct->backlightinfo = &r69007_wqxga_cmd_backlight;
+
+ pinfo->labibb = &r69007_wqxga_cmd_labibb;
+
+ pinfo->mipi.panel_on_cmds
+ = r69007_wqxga_cmd_on_command;
+ pinfo->mipi.num_of_panel_on_cmds
+ = R69007_WQXGA_CMD_ON_COMMAND;
+ pinfo->mipi.panel_off_cmds
+ = r69007_wqxga_cmd_off_command;
+ pinfo->mipi.num_of_panel_off_cmds
+ = R69007_WQXGA_CMD_OFF_COMMAND;
+ memcpy(phy_db->timing,
+ r69007_wqxga_thulium_cmd_timings,
+ MAX_TIMING_CONFIG * sizeof(uint32_t));
+ break;
default:
case UNKNOWN_PANEL:
pan_type = PANEL_TYPE_UNKNOWN;
@@ -381,6 +414,9 @@
case HW_PLATFORM_SURF:
panel_id = SHARP_WQXGA_DUALDSI_VIDEO_PANEL;
break;
+ case HW_PLATFORM_QRD:
+ panel_id = R69007_WQXGA_CMD_PANEL;
+ break;
default:
dprintf(CRITICAL, "Display not enabled for %d HW type\n"
, hw_id);