Merge "target: add support to skip panel configuration in LK"
diff --git a/app/aboot/aboot.c b/app/aboot/aboot.c
index d7c9786..aa02cda 100644
--- a/app/aboot/aboot.c
+++ b/app/aboot/aboot.c
@@ -355,8 +355,8 @@
if (cmdline) {
if ((strstr(cmdline, DISPLAY_DEFAULT_PREFIX) == NULL) &&
- target_display_panel_node(device.display_panel,
- display_panel_buf, MAX_PANEL_BUF_SIZE) &&
+ target_display_panel_node(display_panel_buf,
+ MAX_PANEL_BUF_SIZE) &&
strlen(display_panel_buf)) {
cmdline_len += strlen(display_panel_buf);
}
diff --git a/dev/gcdb/display/fastboot_oem_display.h b/dev/gcdb/display/fastboot_oem_display.h
new file mode 100644
index 0000000..7492d2f
--- /dev/null
+++ b/dev/gcdb/display/fastboot_oem_display.h
@@ -0,0 +1,92 @@
+/* Copyright (c) 2013-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 _FASTBOOT_OEM_DISPLAY_H_
+#define _FASTBOOT_OEM_DISPLAY_H_
+
+/*---------------------------------------------------------------------------*/
+/* Lookup table for skip panels */
+/*---------------------------------------------------------------------------*/
+
+struct panel_lookup_list {
+ char name[MAX_PANEL_ID_LEN];
+ char panel_dt_string[MAX_PANEL_ID_LEN];
+ bool is_split_dsi;
+};
+
+struct panel_lookup_list lookup_skip_panels[] = {
+ {"adv7533_1080p_video", "qcom,mdss_dsi_adv7533_1080p60_video", false},
+ {"adv7533_720p_video", "qcom,mdss_dsi_adv7533_720p60_video", false},
+ {"auo_qvga_cmd", "qcom,mdss_dsi_auo_qvga_cmd", false},
+ {"generic_720p_cmd", "qcom,mdss_dsi_generic_720p_cmd", false},
+ {"hx8279a_wsvga_video", "qcom,mdss_dsi_hx8279a_wsvga_video", false},
+ {"hx8379a_wvga_video", "qcom,mdss_dsi_hx8379a_fwvga_video", false},
+ {"hx8379a_truly_fwvga_video", "qcom,mdss_dsi_hx8379a_truly_fwvga_video", false},
+ {"hx8379a_wvga_video", "qcom,mdss_dsi_hx8379a_wvga_video", false},
+ {"hx8379c_fwvga_video", "qcom,mdss_dsi_hx8379c_fwvga_video", false},
+ {"hx8389b_qhd_video", "qcom,mdss_dsi_hx8389b_qhd_video", false},
+ {"hx8394a_720p_video", "qcom,mdss_dsi_hx8394a_720p_video", false},
+ {"hx8394d_720p_video", "qcom,mdss_dsi_hx8394d_720p_video", false},
+ {"hx8394d_qhd_video", "qcom,mdss_dsi_hx8394d_qhd_video", false},
+ {"ili9806e_fwvga_video", "qcom,mdss_dsi_ili9806e_fwvga_video", false},
+ {"innolux_720p_video", "qcom,mdss_dsi_innolux_720p_video", false},
+ {"jdi_4k_dualdsi_video", "qcom,dsi_jdi_4k_video", true},
+ {"jdi_1080p_video", "qcom,mdss_dsi_jdi_1080p_video", false},
+ {"jdi_a216_fhd_video", "qcom,mdss_dsi_jdi_a216_fhd_video", false},
+ {"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},
+ {"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},
+ {"nt35590_720p_video", "qcom,mdss_dsi_nt35590_720p_video", false},
+ {"nt35590_qvga_cmd", "qcom,mdss_dsi_nt35590_qvga_cmd", false},
+ {"nt35596_1080p_video", "qcom,mdss_dsi_nt35596_1080p_skuk_video", false},
+ {"nt35597_wqxga_cmd", "qcom,dsi_nt35597_wqxga_cmd", false},
+ {"nt35597_wqxga_video", "qcom,dsi_nt35597_wqxga_video", false},
+ {"nt35597_wqxga_dualdsi_video", "qcom,mdss_dsi_nt35597_wqxga_video", true},
+ {"otm1283a_720p_video", "qcom,mdss_dsi_otm1283a_720p_video", false},
+ {"otm1906c_1080p_cmd", "qcom,mdss_dsi_otm1906c_1080p_cmd", false},
+ {"otm8018b_fwvga_video", "qcom,mdss_dsi_otm8018b_fwvga_video", false},
+ {"otm8019a_fwvga_video", "qcom,mdss_dsi_otm8019a_fwvga_video", false},
+ {"r61318_hd_video", "qcom,mdss_dsi_r61318_hd_video", false},
+ {"r63417_1080p_video", "qcom,mdss_dsi_r63417_1080p_video", false},
+ {"samsung_wxga_video", "qcom,mdss_dsi_samsung_wxga_video", false},
+ {"sharp_1080p_cmd", "qcom,mdss_dsi_sharp_1080p_cmd", false},
+ {"sharp_qhd_video", "qcom,mdss_dsi_sharp_qhd_video", false},
+ {"sharp_wqxga_dualdsi_video", "qcom,mdss_dsi_sharp_wqxga_video", true},
+ {"ssd2080m_720p_video", "qcom,mdss_dsi_ssd2080m_720p_video", false},
+ {"toshiba_720p_video", "qcom,mdss_dsi_toshiba_720p_video", false},
+ {"truly_1080p_cmd", "qcom,mdss_dsi_truly_1080p_cmd", false},
+ {"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},
+};
+
+#endif /*_FASTBOOT_OEM_DISPLAY_H_ */
diff --git a/dev/gcdb/display/gcdb_display.c b/dev/gcdb/display/gcdb_display.c
index ccc47cd..bfb1153 100644
--- a/dev/gcdb/display/gcdb_display.c
+++ b/dev/gcdb/display/gcdb_display.c
@@ -329,138 +329,6 @@
return ret;
}
-static bool mdss_dsi_set_panel_node(char *panel_name, char **dsi_id,
- char **panel_node, char **slave_panel_node, int *panel_mode)
-{
- if (!strcmp(panel_name, SIM_VIDEO_PANEL)) {
- *dsi_id = SIM_DSI_ID;
- *panel_node = SIM_VIDEO_PANEL_NODE;
- *panel_mode = 0;
- } else if (!strcmp(panel_name, SIM_DUALDSI_VIDEO_PANEL)) {
- *dsi_id = SIM_DSI_ID;
- *panel_node = SIM_DUALDSI_VIDEO_PANEL_NODE;
- *slave_panel_node = SIM_DUALDSI_VIDEO_SLAVE_PANEL_NODE;
- *panel_mode = 1;
- } else if (!strcmp(panel_name, SIM_CMD_PANEL)) {
- *dsi_id = SIM_DSI_ID;
- *panel_node = SIM_CMD_PANEL_NODE;
- *panel_mode = 0;
- } else if (!strcmp(panel_name, SIM_DUALDSI_CMD_PANEL)) {
- *dsi_id = SIM_DSI_ID;
- *panel_node = SIM_DUALDSI_CMD_PANEL_NODE;
- *slave_panel_node = SIM_DUALDSI_CMD_SLAVE_PANEL_NODE;
- *panel_mode = 1;
- } else {
- return false;
- }
- return true;
-}
-
-bool gcdb_display_cmdline_arg(char *panel_name, char *pbuf, uint16_t buf_size)
-{
- char *dsi_id = NULL;
- char *panel_node = NULL;
- 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;
- bool rc;
- char *default_str;
- int panel_mode = SPLIT_DISPLAY_FLAG | DUAL_PIPE_FLAG | DST_SPLIT_FLAG;
- int prefix_string_len = strlen(DISPLAY_CMDLINE_PREFIX);
- char *sctl_string;
-
- panel_name += strspn(panel_name, " ");
-
- rc = mdss_dsi_set_panel_node(panel_name, &dsi_id, &panel_node,
- &slave_panel_node, &panel_mode);
- if (!rc) {
- if (panelstruct.paneldata && target_cont_splash_screen()) {
- 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 {
- if (target_is_edp())
- default_str = "0:edp:";
- else
- default_str = "0:dsi:0:";
-
- arg_size = prefix_string_len + strlen(default_str);
- if (buf_size < arg_size) {
- dprintf(CRITICAL, "display command line buffer is small\n");
- return false;
- }
-
- strlcpy(pbuf, DISPLAY_CMDLINE_PREFIX, buf_size);
- pbuf += prefix_string_len;
- buf_size -= prefix_string_len;
-
- strlcpy(pbuf, default_str, buf_size);
- return true;
- }
- }
-
- if (dsi_id == NULL || panel_node == NULL) {
- dprintf(CRITICAL, "panel node or dsi ctrl not present\n");
- return false;
- }
-
- if (((panel_mode & SPLIT_DISPLAY_FLAG) ||
- (panel_mode & DST_SPLIT_FLAG)) && 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);
- if (!slave_panel_node || !strcmp(slave_panel_node, ""))
- slave_panel_node = NO_PANEL_CONFIG;
- slave_panel_node_len = strlen(slave_panel_node);
-
- arg_size = prefix_string_len + dsi_id_len + panel_node_len +
- LK_OVERRIDE_PANEL_LEN + 1;
-
- if (panelstruct.paneldata &&
- !strcmp(panelstruct.paneldata->panel_destination, "DISPLAY_2"))
- sctl_string = DSI_0_STRING;
- else
- sctl_string = DSI_1_STRING;
-
- arg_size += strlen(sctl_string) + slave_panel_node_len;
-
- if (buf_size < arg_size) {
- dprintf(CRITICAL, "display command line buffer is small\n");
- ret = false;
- } else {
- strlcpy(pbuf, DISPLAY_CMDLINE_PREFIX, buf_size);
- pbuf += prefix_string_len;
- buf_size -= prefix_string_len;
-
- 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);
-
- pbuf += panel_node_len;
- buf_size -= panel_node_len;
-
- strlcpy(pbuf, sctl_string, buf_size);
- pbuf += strlen(sctl_string);
- buf_size -= strlen(sctl_string);
- strlcpy(pbuf, slave_panel_node, buf_size);
- }
- return ret;
-}
-
static void mdss_edp_panel_init(struct msm_panel_info *pinfo)
{
return target_edp_panel_init(pinfo);
@@ -535,6 +403,11 @@
return target_display_dsi2hdmi_config(pinfo);
}
+struct panel_struct mdss_dsi_get_panel_data(void)
+{
+ return panelstruct;
+}
+
int gcdb_display_init(const char *panel_name, uint32_t rev, void *base)
{
int ret = NO_ERROR;
diff --git a/dev/gcdb/display/gcdb_display.h b/dev/gcdb/display/gcdb_display.h
index d1f1df5..1fbc2f7 100755
--- a/dev/gcdb/display/gcdb_display.h
+++ b/dev/gcdb/display/gcdb_display.h
@@ -56,22 +56,18 @@
int target_dsi_phy_config(struct mdss_dsi_phy_ctrl *phy_db);
int gcdb_display_init(const char *panel_name, uint32_t rev, void *base);
-int gcdb_display_cmdline_arg(char *panel_name, char *pbuf, uint16_t buf_size);
+int gcdb_display_cmdline_arg(char *pbuf, uint16_t buf_size);
void gcdb_display_shutdown();
int oem_panel_select(const char *panel_name, struct panel_struct *panelstruct,
struct msm_panel_info *pinfo, struct mdss_dsi_phy_ctrl *phy_db);
+void set_panel_cmd_string(const char *panel_name);
+struct oem_panel_data mdss_dsi_get_oem_data(void);
+struct panel_struct mdss_dsi_get_panel_data(void);
-static inline void set_panel_cmd_string(const char *panel_name,
- char *cont_splash)
-{
- char *ch = NULL;
- ch = strchr((char *) panel_name, ':');
- if (ch) {
- *cont_splash = *(ch + 1);
- *ch = '\0';
- } else {
- *cont_splash = '\0';
- }
-}
+struct oem_panel_data {
+ char panel[MAX_PANEL_ID_LEN];
+ bool cont_splash;
+ bool skip;
+};
#endif /*_GCDB_DISPLAY_H_ */
diff --git a/dev/gcdb/display/gcdb_display_param.c b/dev/gcdb/display/gcdb_display_param.c
new file mode 100644
index 0000000..1b4f25e
--- /dev/null
+++ b/dev/gcdb/display/gcdb_display_param.c
@@ -0,0 +1,243 @@
+/* Copyright (c) 2013-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.
+ */
+
+#include <debug.h>
+#include <err.h>
+#include <string.h>
+#include <stdlib.h>
+#include <mdp5.h>
+
+#include "gcdb_display.h"
+#include "target/display.h"
+#include "fastboot_oem_display.h"
+
+struct oem_panel_data oem_data = {{'\0'}, false, false};
+
+void panel_name_to_dt_string(struct panel_lookup_list supp_panels[],
+ uint32_t supp_panels_size,
+ const char *panel_name, char **panel_node,
+ char **slave_panel_node, int *panel_mode)
+{
+ uint32_t i;
+
+ if (!panel_name) {
+ dprintf(CRITICAL, "Invalid panel name\n");
+ return;
+ }
+
+ for (i = 0; i < supp_panels_size; i++) {
+ if (!strncmp(panel_name, supp_panels[i].name,
+ MAX_PANEL_ID_LEN)) {
+ *panel_node = supp_panels[i].panel_dt_string;
+ if (supp_panels[i].is_split_dsi) {
+ *slave_panel_node =
+ supp_panels[i].panel_dt_string;
+ *panel_mode = DUAL_DSI_FLAG;
+ } else {
+ *panel_mode = 0;
+ }
+ break;
+ }
+ }
+
+ if (i == supp_panels_size)
+ dprintf(CRITICAL, "Panel_name:%s not found in lookup table\n",
+ panel_name);
+}
+
+struct oem_panel_data mdss_dsi_get_oem_data(void)
+{
+ return oem_data;
+}
+
+void set_panel_cmd_string(const char *panel_name)
+{
+ char *ch = NULL;
+ int i;
+
+ panel_name += strspn(panel_name, " ");
+
+ /* Panel string */
+ ch = strchr((char *) panel_name, ':');
+ if (ch) {
+ for (i = 0; (panel_name + i) < ch; i++)
+ oem_data.panel[i] = *(panel_name + i);
+ oem_data.panel[i] = '\0';
+ } else {
+ strlcpy(oem_data.panel, panel_name, MAX_PANEL_ID_LEN);
+ }
+
+ /* Skip LK configuration */
+ ch = strstr((char *) panel_name, ":skip");
+ oem_data.skip = ch ? true : false;
+
+ /* Cont. splash status */
+ ch = strstr((char *) panel_name, ":disable");
+ oem_data.cont_splash = ch ? false : true;
+}
+
+static bool mdss_dsi_set_panel_node(char *panel_name, char **dsi_id,
+ char **panel_node, char **slave_panel_node, int *panel_mode)
+{
+ if (!strcmp(panel_name, SIM_VIDEO_PANEL)) {
+ *dsi_id = SIM_DSI_ID;
+ *panel_node = SIM_VIDEO_PANEL_NODE;
+ *panel_mode = 0;
+ } else if (!strcmp(panel_name, SIM_DUALDSI_VIDEO_PANEL)) {
+ *dsi_id = SIM_DSI_ID;
+ *panel_node = SIM_DUALDSI_VIDEO_PANEL_NODE;
+ *slave_panel_node = SIM_DUALDSI_VIDEO_SLAVE_PANEL_NODE;
+ *panel_mode = DUAL_DSI_FLAG;
+ } else if (!strcmp(panel_name, SIM_CMD_PANEL)) {
+ *dsi_id = SIM_DSI_ID;
+ *panel_node = SIM_CMD_PANEL_NODE;
+ *panel_mode = 0;
+ } else if (!strcmp(panel_name, SIM_DUALDSI_CMD_PANEL)) {
+ *dsi_id = SIM_DSI_ID;
+ *panel_node = SIM_DUALDSI_CMD_PANEL_NODE;
+ *slave_panel_node = SIM_DUALDSI_CMD_SLAVE_PANEL_NODE;
+ *panel_mode = DUAL_DSI_FLAG;
+ } else if (oem_data.skip) {
+ /* For skip panel case, check the lookup table */
+ *dsi_id = SIM_DSI_ID;
+ panel_name_to_dt_string(lookup_skip_panels,
+ ARRAY_SIZE(lookup_skip_panels), panel_name,
+ panel_node, slave_panel_node, panel_mode);
+ } else {
+ return false;
+ }
+ return true;
+}
+
+bool gcdb_display_cmdline_arg(char *pbuf, uint16_t buf_size)
+{
+ char *dsi_id = NULL;
+ char *panel_node = NULL;
+ 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;
+ bool rc;
+ char *default_str;
+ struct panel_struct panelstruct;
+ int panel_mode = SPLIT_DISPLAY_FLAG | DUAL_PIPE_FLAG | DST_SPLIT_FLAG;
+ int prefix_string_len = strlen(DISPLAY_CMDLINE_PREFIX);
+ char *sctl_string;
+
+ panelstruct = mdss_dsi_get_panel_data();
+
+ rc = mdss_dsi_set_panel_node(oem_data.panel, &dsi_id, &panel_node,
+ &slave_panel_node, &panel_mode);
+
+ if (!rc) {
+ if (panelstruct.paneldata && target_cont_splash_screen()) {
+ 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 {
+ if (target_is_edp())
+ default_str = "0:edp:";
+ else
+ default_str = "0:dsi:0:";
+
+ arg_size = prefix_string_len + strlen(default_str);
+ if (buf_size < arg_size) {
+ dprintf(CRITICAL, "display command line buffer is small\n");
+ return false;
+ }
+
+ strlcpy(pbuf, DISPLAY_CMDLINE_PREFIX, buf_size);
+ pbuf += prefix_string_len;
+ buf_size -= prefix_string_len;
+
+ strlcpy(pbuf, default_str, buf_size);
+ return true;
+ }
+ }
+
+ if (dsi_id == NULL || panel_node == NULL) {
+ dprintf(CRITICAL, "panel node or dsi ctrl not present\n");
+ return false;
+ }
+
+ if (((panel_mode & SPLIT_DISPLAY_FLAG) ||
+ (panel_mode & DST_SPLIT_FLAG)) && 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);
+ if (!slave_panel_node || !strcmp(slave_panel_node, ""))
+ slave_panel_node = NO_PANEL_CONFIG;
+ slave_panel_node_len = strlen(slave_panel_node);
+
+ arg_size = prefix_string_len + dsi_id_len + panel_node_len +
+ LK_OVERRIDE_PANEL_LEN + 1;
+
+ if (panelstruct.paneldata &&
+ !strcmp(panelstruct.paneldata->panel_destination, "DISPLAY_2"))
+ sctl_string = DSI_0_STRING;
+ else
+ sctl_string = DSI_1_STRING;
+
+ arg_size += strlen(sctl_string) + slave_panel_node_len;
+
+ if (buf_size < arg_size) {
+ dprintf(CRITICAL, "display command line buffer is small\n");
+ ret = false;
+ } else {
+ strlcpy(pbuf, DISPLAY_CMDLINE_PREFIX, buf_size);
+ pbuf += prefix_string_len;
+ buf_size -= prefix_string_len;
+
+ 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);
+
+ pbuf += panel_node_len;
+ buf_size -= panel_node_len;
+
+ strlcpy(pbuf, sctl_string, buf_size);
+ pbuf += strlen(sctl_string);
+ buf_size -= strlen(sctl_string);
+ strlcpy(pbuf, slave_panel_node, buf_size);
+ }
+ return ret;
+}
diff --git a/dev/gcdb/display/panel_display.c b/dev/gcdb/display/panel_display.c
index 2555274..4ea95d1 100755
--- a/dev/gcdb/display/panel_display.c
+++ b/dev/gcdb/display/panel_display.c
@@ -484,8 +484,6 @@
return panel_id;
}
- /* Remove any leading whitespaces */
- panel_name += strspn(panel_name, " ");
for (i = 0; i < supp_panels_size; i++) {
if (!strncmp(panel_name, supp_panels[i].name,
MAX_PANEL_ID_LEN)) {
diff --git a/dev/gcdb/display/rules.mk b/dev/gcdb/display/rules.mk
index 71e35f2..da81eae 100755
--- a/dev/gcdb/display/rules.mk
+++ b/dev/gcdb/display/rules.mk
@@ -4,5 +4,6 @@
OBJS += \
$(LOCAL_DIR)/gcdb_display.o \
+ $(LOCAL_DIR)/gcdb_display_param.o \
$(LOCAL_DIR)/panel_display.o \
$(LOCAL_DIR)/gcdb_autopll.o
diff --git a/include/target.h b/include/target.h
index 2a3579a..84e93c0 100644
--- a/include/target.h
+++ b/include/target.h
@@ -60,8 +60,7 @@
void *target_mmc_device();
uint32_t is_user_force_reset(void);
-bool target_display_panel_node(char *panel_name, char *pbuf,
- uint16_t buf_size);
+bool target_display_panel_node(char *pbuf, uint16_t buf_size);
void target_display_init(const char *panel_name);
void target_display_shutdown(void);
diff --git a/target/apq8084/oem_panel.c b/target/apq8084/oem_panel.c
index 6a3ac0b..72f58ec 100644
--- a/target/apq8084/oem_panel.c
+++ b/target/apq8084/oem_panel.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-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
@@ -201,13 +201,13 @@
if (panel_override_id < 0) {
dprintf(CRITICAL, "Not able to search the panel:%s\n",
- panel_name + strspn(panel_name, " "));
+ panel_name);
} else if (panel_override_id < UNKNOWN_PANEL) {
/* panel override using fastboot oem command */
panel_id = panel_override_id;
dprintf(INFO, "OEM panel override:%s\n",
- panel_name + strspn(panel_name, " "));
+ panel_name);
goto panel_init;
}
}
diff --git a/target/apq8084/target_display.c b/target/apq8084/target_display.c
index 9ae3ea1..1b42981 100755
--- a/target/apq8084/target_display.c
+++ b/target/apq8084/target_display.c
@@ -488,14 +488,13 @@
return target_backlight_ctrl(&edp_bklt, enable);
}
-bool target_display_panel_node(char *panel_name, char *pbuf, uint16_t buf_size)
+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();
- panel_name += strspn(panel_name, " ");
-
- if (!strcmp(panel_name, HDMI_PANEL_NAME)) {
+ if (!strcmp(oem.panel, HDMI_PANEL_NAME)) {
if (buf_size < (prefix_string_len + LK_OVERRIDE_PANEL_LEN +
strlen(HDMI_CONTROLLER_STRING))) {
dprintf(CRITICAL, "command line argument is greater than buffer size\n");
@@ -508,7 +507,7 @@
buf_size -= LK_OVERRIDE_PANEL_LEN;
strlcat(pbuf, HDMI_CONTROLLER_STRING, buf_size);
} else {
- ret = gcdb_display_cmdline_arg(panel_name, pbuf, buf_size);
+ ret = gcdb_display_cmdline_arg(pbuf, buf_size);
}
return ret;
@@ -517,32 +516,33 @@
void target_display_init(const char *panel_name)
{
uint32_t ret = 0;
- char cont_splash = '\0';
+ struct oem_panel_data oem;
- set_panel_cmd_string(panel_name, &cont_splash);
- panel_name += strspn(panel_name, " ");
+ set_panel_cmd_string(panel_name);
+ oem = mdss_dsi_get_oem_data();
- if (!strcmp(panel_name, NO_PANEL_CONFIG)
- || !strcmp(panel_name, SIM_VIDEO_PANEL)
- || !strcmp(panel_name, SIM_DUALDSI_VIDEO_PANEL)
- || !strcmp(panel_name, SIM_CMD_PANEL)
- || !strcmp(panel_name, SIM_DUALDSI_CMD_PANEL)) {
+ if (!strcmp(oem.panel, NO_PANEL_CONFIG)
+ || !strcmp(oem.panel, SIM_VIDEO_PANEL)
+ || !strcmp(oem.panel, SIM_DUALDSI_VIDEO_PANEL)
+ || !strcmp(oem.panel, SIM_CMD_PANEL)
+ || !strcmp(oem.panel, SIM_DUALDSI_CMD_PANEL)
+ || oem.skip) {
dprintf(INFO, "Selected panel: %s\nSkip panel configuration\n",
- panel_name);
+ oem.panel);
return;
- } else if (!strcmp(panel_name, HDMI_PANEL_NAME)) {
+ } else if (!strcmp(oem.panel, HDMI_PANEL_NAME)) {
dprintf(INFO, "%s: HDMI is primary\n", __func__);
mdss_hdmi_display_init(MDP_REV_50, HDMI_FB_ADDR);
return;
}
- ret = gcdb_display_init(panel_name, MDP_REV_50, MIPI_FB_ADDR);
+ ret = gcdb_display_init(oem.panel, MDP_REV_50, MIPI_FB_ADDR);
if (ret) {
target_force_cont_splash_disable(true);
msm_display_off();
}
- if (cont_splash == '0') {
+ if (!oem.cont_splash) {
dprintf(INFO, "Forcing continuous splash disable\n");
target_force_cont_splash_disable(true);
}
diff --git a/target/init.c b/target/init.c
index 9191572..fba226c 100644
--- a/target/init.c
+++ b/target/init.c
@@ -164,8 +164,7 @@
{
}
-__WEAK bool target_display_panel_node(char *panel_name, char *pbuf,
- uint16_t buf_size)
+__WEAK bool target_display_panel_node(char *pbuf, uint16_t buf_size)
{
return false;
}
diff --git a/target/msm8226/oem_panel.c b/target/msm8226/oem_panel.c
index 442fa29..7113c65 100755
--- a/target/msm8226/oem_panel.c
+++ b/target/msm8226/oem_panel.c
@@ -422,13 +422,13 @@
if (panel_override_id < 0) {
dprintf(CRITICAL, "Not able to search the panel:%s\n",
- panel_name + strspn(panel_name, " "));
+ panel_name);
} else if (panel_override_id < UNKNOWN_PANEL) {
/* panel override using fastboot oem command */
panel_id = panel_override_id;
dprintf(INFO, "OEM panel override:%s\n",
- panel_name + strspn(panel_name, " "));
+ panel_name);
goto panel_init;
}
}
diff --git a/target/msm8226/target_display.c b/target/msm8226/target_display.c
index 0bc1173..4d2e513 100755
--- a/target/msm8226/target_display.c
+++ b/target/msm8226/target_display.c
@@ -400,9 +400,9 @@
return NO_ERROR;
}
-bool target_display_panel_node(char *panel_name, char *pbuf, uint16_t buf_size)
+bool target_display_panel_node(char *pbuf, uint16_t buf_size)
{
- return gcdb_display_cmdline_arg(panel_name, pbuf, buf_size);
+ return gcdb_display_cmdline_arg(pbuf, buf_size);
}
void target_display_init(const char *panel_name)
@@ -410,15 +410,17 @@
uint32_t panel_loop = 0;
uint32_t ret = 0;
uint32_t fb_addr = MIPI_FB_ADDR;
- char cont_splash = '\0';
+ struct oem_panel_data oem;
- set_panel_cmd_string(panel_name, &cont_splash);
+ set_panel_cmd_string(panel_name);
+ oem = mdss_dsi_get_oem_data();
- if (!strcmp(panel_name, NO_PANEL_CONFIG)
- || !strcmp(panel_name, SIM_VIDEO_PANEL)
- || !strcmp(panel_name, SIM_CMD_PANEL)) {
+ if (!strcmp(oem.panel, NO_PANEL_CONFIG)
+ || !strcmp(oem.panel, SIM_VIDEO_PANEL)
+ || !strcmp(oem.panel, SIM_CMD_PANEL)
+ || oem.skip) {
dprintf(INFO, "Selected panel: %s\nSkip panel configuration\n",
- panel_name);
+ oem.panel);
return;
}
@@ -427,7 +429,7 @@
do {
target_force_cont_splash_disable(false);
- ret = gcdb_display_init(panel_name, MDP_REV_50, fb_addr);
+ ret = gcdb_display_init(oem.panel, MDP_REV_50, fb_addr);
if (!ret || ret == ERR_NOT_SUPPORTED) {
break;
} else {
@@ -436,7 +438,7 @@
}
} while (++panel_loop <= oem_panel_max_auto_detect_panels());
- if (cont_splash == '0') {
+ if (!oem.cont_splash) {
dprintf(INFO, "Forcing continuous splash disable\n");
target_force_cont_splash_disable(true);
}
diff --git a/target/msm8610/target_display.c b/target/msm8610/target_display.c
index 1213bd3..bcf2285 100755
--- a/target/msm8610/target_display.c
+++ b/target/msm8610/target_display.c
@@ -193,27 +193,29 @@
return NO_ERROR;
}
-bool target_display_panel_node(char *panel_name, char *pbuf, uint16_t buf_size)
+bool target_display_panel_node(char *pbuf, uint16_t buf_size)
{
- return gcdb_display_cmdline_arg(panel_name, pbuf, buf_size);
+ return gcdb_display_cmdline_arg(pbuf, buf_size);
}
void target_display_init(const char *panel_name)
{
uint32_t panel_loop = 0;
uint32_t ret = 0;
- char cont_splash = '\0';
+ struct oem_panel_data oem;
- set_panel_cmd_string(panel_name, &cont_splash);
+ set_panel_cmd_string(panel_name);
+ oem = mdss_dsi_get_oem_data();
- if (!strcmp(panel_name, NO_PANEL_CONFIG)) {
+ if (!strcmp(oem.panel, NO_PANEL_CONFIG)
+ || oem.skip) {
dprintf(INFO, "Skip panel configuration\n");
return;
}
do {
target_force_cont_splash_disable(false);
- ret = gcdb_display_init(panel_name, MDP_REV_304,(void *)MIPI_FB_ADDR);
+ ret = gcdb_display_init(oem.panel, MDP_REV_304,(void *)MIPI_FB_ADDR);
if (ret) {
/*Panel signature did not match, turn off the display*/
target_force_cont_splash_disable(true);
@@ -223,7 +225,7 @@
}
} while (++panel_loop <= (uint32_t)oem_panel_max_auto_detect_panels());
- if (cont_splash == '0') {
+ if (!oem.cont_splash) {
dprintf(INFO, "Forcing continuous splash disable\n");
target_force_cont_splash_disable(true);
}
diff --git a/target/msm8909/oem_panel.c b/target/msm8909/oem_panel.c
index 215a33a..6d84eef 100644
--- a/target/msm8909/oem_panel.c
+++ b/target/msm8909/oem_panel.c
@@ -356,13 +356,13 @@
if (panel_override_id < 0) {
dprintf(CRITICAL, "Not able to search the panel:%s\n",
- panel_name + strspn(panel_name, " "));
+ panel_name);
} else if (panel_override_id < UNKNOWN_PANEL) {
/* panel override using fastboot oem command */
panel_id = panel_override_id;
dprintf(INFO, "OEM panel override:%s\n",
- panel_name + strspn(panel_name, " "));
+ panel_name);
goto panel_init;
}
}
diff --git a/target/msm8909/target_display.c b/target/msm8909/target_display.c
index 9af712e..6a7f3b8 100755
--- a/target/msm8909/target_display.c
+++ b/target/msm8909/target_display.c
@@ -334,31 +334,32 @@
return NO_ERROR;
}
-bool target_display_panel_node(char *panel_name, char *pbuf, uint16_t buf_size)
+bool target_display_panel_node(char *pbuf, uint16_t buf_size)
{
- return gcdb_display_cmdline_arg(panel_name, pbuf, buf_size);
+ return gcdb_display_cmdline_arg(pbuf, buf_size);
}
void target_display_init(const char *panel_name)
{
uint32_t panel_loop = 0;
uint32_t ret = 0;
- char cont_splash = '\0';
+ struct oem_panel_data oem;
- set_panel_cmd_string(panel_name, &cont_splash);
+ set_panel_cmd_string(panel_name);
+ oem = mdss_dsi_get_oem_data();
- panel_name += strspn(panel_name, " ");
- if (!strcmp(panel_name, NO_PANEL_CONFIG)
- || !strcmp(panel_name, SIM_VIDEO_PANEL)
- || !strcmp(panel_name, SIM_CMD_PANEL)) {
+ if (!strcmp(oem.panel, NO_PANEL_CONFIG)
+ || !strcmp(oem.panel, SIM_VIDEO_PANEL)
+ || !strcmp(oem.panel, SIM_CMD_PANEL)
+ || oem.skip) {
dprintf(INFO, "Selected %s: Skip panel configuration\n",
- panel_name);
+ oem.panel);
return;
}
do {
target_force_cont_splash_disable(false);
- ret = gcdb_display_init(panel_name, MDP_REV_305, MIPI_FB_ADDR);
+ ret = gcdb_display_init(oem.panel, MDP_REV_305, MIPI_FB_ADDR);
if (!ret || ret == ERR_NOT_SUPPORTED) {
break;
} else {
@@ -367,7 +368,7 @@
}
} while (++panel_loop <= oem_panel_max_auto_detect_panels());
- if (cont_splash == '0') {
+ if (!oem.cont_splash) {
dprintf(INFO, "Forcing continuous splash disable\n");
target_force_cont_splash_disable(true);
}
diff --git a/target/msm8916/oem_panel.c b/target/msm8916/oem_panel.c
index 0562017..3d57f24 100644
--- a/target/msm8916/oem_panel.c
+++ b/target/msm8916/oem_panel.c
@@ -632,13 +632,13 @@
if (panel_override_id < 0) {
dprintf(CRITICAL, "Not able to search the panel:%s\n",
- panel_name + strspn(panel_name, " "));
+ panel_name);
} else if (panel_override_id < UNKNOWN_PANEL) {
/* panel override using fastboot oem command */
panel_id = panel_override_id;
dprintf(INFO, "OEM panel override:%s\n",
- panel_name + strspn(panel_name, " "));
+ panel_name);
goto panel_init;
}
}
diff --git a/target/msm8916/target_display.c b/target/msm8916/target_display.c
index 56ee921..8a873a5 100644
--- a/target/msm8916/target_display.c
+++ b/target/msm8916/target_display.c
@@ -566,9 +566,9 @@
return NO_ERROR;
}
-bool target_display_panel_node(char *panel_name, char *pbuf, uint16_t buf_size)
+bool target_display_panel_node(char *pbuf, uint16_t buf_size)
{
- return gcdb_display_cmdline_arg(panel_name, pbuf, buf_size);
+ return gcdb_display_cmdline_arg(pbuf, buf_size);
}
void target_set_switch_gpio(int enable_dsi2HdmiBridge)
@@ -589,22 +589,23 @@
{
uint32_t panel_loop = 0;
uint32_t ret = 0;
- char cont_splash = '\0';
+ struct oem_panel_data oem;
- set_panel_cmd_string(panel_name, &cont_splash);
- panel_name += strspn(panel_name, " ");
+ set_panel_cmd_string(panel_name);
+ oem = mdss_dsi_get_oem_data();
- if (!strcmp(panel_name, NO_PANEL_CONFIG)
- || !strcmp(panel_name, SIM_VIDEO_PANEL)
- || !strcmp(panel_name, SIM_CMD_PANEL)) {
+ if (!strcmp(oem.panel, NO_PANEL_CONFIG)
+ || !strcmp(oem.panel, SIM_VIDEO_PANEL)
+ || !strcmp(oem.panel, SIM_CMD_PANEL)
+ || oem.skip) {
dprintf(INFO, "Selected panel: %s\nSkip panel configuration\n",
- panel_name);
+ oem.panel);
return;
}
do {
target_force_cont_splash_disable(false);
- ret = gcdb_display_init(panel_name, MDP_REV_50, MIPI_FB_ADDR);
+ ret = gcdb_display_init(oem.panel, MDP_REV_50, MIPI_FB_ADDR);
if (!ret || ret == ERR_NOT_SUPPORTED) {
break;
} else {
@@ -613,7 +614,7 @@
}
} while (++panel_loop <= oem_panel_max_auto_detect_panels());
- if (cont_splash == '0') {
+ if (!oem.cont_splash) {
dprintf(INFO, "Forcing continuous splash disable\n");
target_force_cont_splash_disable(true);
}
diff --git a/target/msm8952/oem_panel.c b/target/msm8952/oem_panel.c
index 276919f..b64ac32 100644
--- a/target/msm8952/oem_panel.c
+++ b/target/msm8952/oem_panel.c
@@ -315,13 +315,13 @@
if (panel_override_id < 0) {
dprintf(CRITICAL, "Not able to search the panel:%s\n",
- panel_name + strspn(panel_name, " "));
+ panel_name);
} else if (panel_override_id < UNKNOWN_PANEL) {
/* panel override using fastboot oem command */
panel_id = panel_override_id;
dprintf(INFO, "OEM panel override:%s\n",
- panel_name + strspn(panel_name, " "));
+ panel_name);
goto panel_init;
}
}
diff --git a/target/msm8952/target_display.c b/target/msm8952/target_display.c
index 517de58..e89beb5 100644
--- a/target/msm8952/target_display.c
+++ b/target/msm8952/target_display.c
@@ -514,32 +514,33 @@
return NO_ERROR;
}
-bool target_display_panel_node(char *panel_name, char *pbuf, uint16_t buf_size)
+bool target_display_panel_node(char *pbuf, uint16_t buf_size)
{
- return gcdb_display_cmdline_arg(panel_name, pbuf, buf_size);
+ return gcdb_display_cmdline_arg(pbuf, buf_size);
}
void target_display_init(const char *panel_name)
{
- char cont_splash = '\0';
+ struct oem_panel_data oem;
- set_panel_cmd_string(panel_name, &cont_splash);
- panel_name += strspn(panel_name, " ");
+ set_panel_cmd_string(panel_name);
+ oem = mdss_dsi_get_oem_data();
- if (!strcmp(panel_name, NO_PANEL_CONFIG)
- || !strcmp(panel_name, SIM_VIDEO_PANEL)
- || !strcmp(panel_name, SIM_CMD_PANEL)) {
+ if (!strcmp(oem.panel, NO_PANEL_CONFIG)
+ || !strcmp(oem.panel, SIM_VIDEO_PANEL)
+ || !strcmp(oem.panel, SIM_CMD_PANEL)
+ || oem.skip) {
dprintf(INFO, "Selected panel: %s\nSkip panel configuration\n",
- panel_name);
+ oem.panel);
return;
}
- if (gcdb_display_init(panel_name, MDP_REV_50, (void *)MIPI_FB_ADDR)) {
+ if (gcdb_display_init(oem.panel, MDP_REV_50, (void *)MIPI_FB_ADDR)) {
target_force_cont_splash_disable(true);
msm_display_off();
}
- if (cont_splash == '0') {
+ if (!oem.cont_splash) {
dprintf(INFO, "Forcing continuous splash disable\n");
target_force_cont_splash_disable(true);
}
diff --git a/target/msm8974/oem_panel.c b/target/msm8974/oem_panel.c
index 45b00d9..8544a24 100755
--- a/target/msm8974/oem_panel.c
+++ b/target/msm8974/oem_panel.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-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
@@ -293,13 +293,13 @@
if (panel_override_id < 0) {
dprintf(CRITICAL, "Not able to search the panel:%s\n",
- panel_name + strspn(panel_name, " "));
+ panel_name);
} else if (panel_override_id < UNKNOWN_PANEL) {
/* panel override using fastboot oem command */
panel_id = panel_override_id;
dprintf(INFO, "OEM panel override:%s\n",
- panel_name + strspn(panel_name, " "));
+ panel_name);
goto panel_init;
}
}
diff --git a/target/msm8974/target_display.c b/target/msm8974/target_display.c
index eae18f0..adacf1d 100755
--- a/target/msm8974/target_display.c
+++ b/target/msm8974/target_display.c
@@ -392,14 +392,13 @@
return 0;
}
-bool target_display_panel_node(char *panel_name, char *pbuf, uint16_t buf_size)
+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();
- panel_name += strspn(panel_name, " ");
-
- if (!strcmp(panel_name, HDMI_PANEL_NAME)) {
+ if (!strcmp(oem.panel, HDMI_PANEL_NAME)) {
if (buf_size < (prefix_string_len + LK_OVERRIDE_PANEL_LEN +
strlen(HDMI_CONTROLLER_STRING))) {
dprintf(CRITICAL, "command line argument is greater than buffer size\n");
@@ -412,7 +411,7 @@
buf_size -= LK_OVERRIDE_PANEL_LEN;
strlcat(pbuf, HDMI_CONTROLLER_STRING, buf_size);
} else {
- ret = gcdb_display_cmdline_arg(panel_name, pbuf, buf_size);
+ ret = gcdb_display_cmdline_arg(pbuf, buf_size);
}
return ret;
@@ -423,23 +422,24 @@
uint32_t hw_id = board_hardware_id();
uint32_t panel_loop = 0;
int ret = 0;
- char cont_splash = '\0';
+ struct oem_panel_data oem;
if (target_hw_interposer())
return;
- set_panel_cmd_string(panel_name, &cont_splash);
- panel_name += strspn(panel_name, " ");
+ set_panel_cmd_string(panel_name);
+ oem = mdss_dsi_get_oem_data();
- if (!strcmp(panel_name, NO_PANEL_CONFIG)
- || !strcmp(panel_name, SIM_VIDEO_PANEL)
- || !strcmp(panel_name, SIM_DUALDSI_VIDEO_PANEL)
- || !strcmp(panel_name, SIM_CMD_PANEL)
- || !strcmp(panel_name, SIM_DUALDSI_CMD_PANEL)) {
+ if (!strcmp(oem.panel, NO_PANEL_CONFIG)
+ || !strcmp(oem.panel, SIM_VIDEO_PANEL)
+ || !strcmp(oem.panel, SIM_DUALDSI_VIDEO_PANEL)
+ || !strcmp(oem.panel, SIM_CMD_PANEL)
+ || !strcmp(oem.panel, SIM_DUALDSI_CMD_PANEL)
+ || oem.skip) {
dprintf(INFO, "Selected panel: %s\nSkip panel configuration\n",
- panel_name);
+ oem.panel);
return;
- } else if (!strcmp(panel_name, HDMI_PANEL_NAME)) {
+ } else if (!strcmp(oem.panel, HDMI_PANEL_NAME)) {
dprintf(INFO, "%s: HDMI is primary\n", __func__);
return;
}
@@ -463,7 +463,7 @@
default:
do {
target_force_cont_splash_disable(false);
- ret = gcdb_display_init(panel_name, MDP_REV_50,
+ ret = gcdb_display_init(oem.panel, MDP_REV_50,
(void *)MIPI_FB_ADDR);
if (!ret || ret == ERR_NOT_SUPPORTED) {
break;
@@ -475,7 +475,7 @@
break;
}
- if (cont_splash == '0') {
+ if (!oem.cont_splash) {
dprintf(INFO, "Forcing continuous splash disable\n");
target_force_cont_splash_disable(true);
}
diff --git a/target/msm8994/oem_panel.c b/target/msm8994/oem_panel.c
index 419b4c3..de71ef9 100644
--- a/target/msm8994/oem_panel.c
+++ b/target/msm8994/oem_panel.c
@@ -415,13 +415,13 @@
if (panel_override_id < 0) {
dprintf(CRITICAL, "Not able to search the panel:%s\n",
- panel_name + strspn(panel_name, " "));
+ panel_name);
} else if (panel_override_id < UNKNOWN_PANEL) {
/* panel override using fastboot oem command */
panel_id = panel_override_id;
dprintf(INFO, "OEM panel override:%s\n",
- panel_name + strspn(panel_name, " "));
+ panel_name);
goto panel_init;
}
}
diff --git a/target/msm8994/target_display.c b/target/msm8994/target_display.c
index 2384b1f..8b3b977 100644
--- a/target/msm8994/target_display.c
+++ b/target/msm8994/target_display.c
@@ -600,15 +600,14 @@
return 0;
}
-bool target_display_panel_node(char *panel_name, char *pbuf, uint16_t buf_size)
+bool target_display_panel_node(char *pbuf, uint16_t buf_size)
{
int prefix_string_len = strlen(DISPLAY_CMDLINE_PREFIX);
bool ret = true;
char vic_buf[HDMI_VIC_LEN] = "0";
+ struct oem_panel_data oem = mdss_dsi_get_oem_data();
- panel_name += strspn(panel_name, " ");
-
- if (!strcmp(panel_name, HDMI_PANEL_NAME)) {
+ if (!strcmp(oem.panel, HDMI_PANEL_NAME)) {
if (buf_size < (prefix_string_len + LK_OVERRIDE_PANEL_LEN +
strlen(HDMI_CONTROLLER_STRING))) {
dprintf(CRITICAL, "command line argument is greater than buffer size\n");
@@ -624,7 +623,7 @@
mdss_hdmi_get_vic(vic_buf);
strlcat(pbuf, vic_buf, buf_size);
} else {
- ret = gcdb_display_cmdline_arg(panel_name, pbuf, buf_size);
+ ret = gcdb_display_cmdline_arg(pbuf, buf_size);
}
return ret;
@@ -632,30 +631,32 @@
void target_display_init(const char *panel_name)
{
- char cont_splash = '\0';
+ struct oem_panel_data oem;
- set_panel_cmd_string(panel_name, &cont_splash);
- panel_name += strspn(panel_name, " ");
- if (!strcmp(panel_name, NO_PANEL_CONFIG)
- || !strcmp(panel_name, SIM_VIDEO_PANEL)
- || !strcmp(panel_name, SIM_DUALDSI_VIDEO_PANEL)
- || !strcmp(panel_name, SIM_CMD_PANEL)
- || !strcmp(panel_name, SIM_DUALDSI_CMD_PANEL)) {
+ set_panel_cmd_string(panel_name);
+ oem = mdss_dsi_get_oem_data();
+
+ if (!strcmp(oem.panel, NO_PANEL_CONFIG)
+ || !strcmp(oem.panel, SIM_VIDEO_PANEL)
+ || !strcmp(oem.panel, SIM_DUALDSI_VIDEO_PANEL)
+ || !strcmp(oem.panel, SIM_CMD_PANEL)
+ || !strcmp(oem.panel, SIM_DUALDSI_CMD_PANEL)
+ || oem.skip) {
dprintf(INFO, "Selected panel: %s\nSkip panel configuration\n",
- panel_name);
+ oem.panel);
return;
- } else if (!strcmp(panel_name, HDMI_PANEL_NAME)) {
+ } else if (!strcmp(oem.panel, HDMI_PANEL_NAME)) {
dprintf(INFO, "%s: HDMI is primary\n", __func__);
mdss_hdmi_display_init(MDP_REV_50, (void *) MIPI_FB_ADDR);
return;
}
- if (gcdb_display_init(panel_name, MDP_REV_50, (void *)MIPI_FB_ADDR)) {
+ if (gcdb_display_init(oem.panel, MDP_REV_50, (void *)MIPI_FB_ADDR)) {
target_force_cont_splash_disable(true);
msm_display_off();
}
- if (cont_splash == '0') {
+ if (!oem.cont_splash) {
dprintf(INFO, "Forcing continuous splash disable\n");
target_force_cont_splash_disable(true);
}
diff --git a/target/msm8996/oem_panel.c b/target/msm8996/oem_panel.c
index 785ad9d..654c849 100644
--- a/target/msm8996/oem_panel.c
+++ b/target/msm8996/oem_panel.c
@@ -279,13 +279,13 @@
if (panel_override_id < 0) {
dprintf(CRITICAL, "Not able to search the panel:%s\n",
- panel_name + strspn(panel_name, " "));
+ panel_name);
} else if (panel_override_id < UNKNOWN_PANEL) {
/* panel override using fastboot oem command */
panel_id = panel_override_id;
dprintf(INFO, "OEM panel override:%s\n",
- panel_name + strspn(panel_name, " "));
+ panel_name);
goto panel_init;
}
}
diff --git a/target/msm8996/target_display.c b/target/msm8996/target_display.c
index d555223..e96c79d 100644
--- a/target/msm8996/target_display.c
+++ b/target/msm8996/target_display.c
@@ -463,14 +463,13 @@
return NO_ERROR;
}
-bool target_display_panel_node(char *panel_name, char *pbuf, uint16_t buf_size)
+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();
- panel_name += strspn(panel_name, " ");
-
- if (!strcmp(panel_name, HDMI_PANEL_NAME)) {
+ if (!strcmp(oem.panel, HDMI_PANEL_NAME)) {
if (buf_size < (prefix_string_len + LK_OVERRIDE_PANEL_LEN +
strlen(HDMI_CONTROLLER_STRING))) {
dprintf(CRITICAL, "command line argument is greater than buffer size\n");
@@ -482,7 +481,7 @@
strlcat(pbuf, LK_OVERRIDE_PANEL, buf_size);
buf_size -= LK_OVERRIDE_PANEL_LEN;
strlcat(pbuf, HDMI_CONTROLLER_STRING, buf_size);
- } else if (!strcmp(panel_name, DSC_CMD_PANEL)) {
+ } else 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");
@@ -492,7 +491,7 @@
buf_size -= prefix_string_len;
pbuf += prefix_string_len;
strlcpy(pbuf, DSC_CMD_PANEL_STRING, buf_size);
- } else if (!strcmp(panel_name, DSC_VID_PANEL)) {
+ } 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");
@@ -503,7 +502,7 @@
pbuf += prefix_string_len;
strlcpy(pbuf, DSC_VID_PANEL_STRING, buf_size);
} else {
- ret = gcdb_display_cmdline_arg(panel_name, pbuf, buf_size);
+ ret = gcdb_display_cmdline_arg(pbuf, buf_size);
}
return ret;
@@ -511,30 +510,31 @@
void target_display_init(const char *panel_name)
{
- char cont_splash = '\0';
+ struct oem_panel_data oem;
- set_panel_cmd_string(panel_name, &cont_splash);
- panel_name += strspn(panel_name, " ");
- if (!strcmp(panel_name, NO_PANEL_CONFIG)
- || !strcmp(panel_name, SIM_VIDEO_PANEL)
- || !strcmp(panel_name, SIM_DUALDSI_VIDEO_PANEL)
- || !strcmp(panel_name, SIM_CMD_PANEL)
- || !strcmp(panel_name, SIM_DUALDSI_CMD_PANEL)
- || !strcmp(panel_name, DSC_CMD_PANEL)
- || !strcmp(panel_name, DSC_VID_PANEL)) {
+ set_panel_cmd_string(panel_name);
+ oem = mdss_dsi_get_oem_data();
+ if (!strcmp(oem.panel, NO_PANEL_CONFIG)
+ || !strcmp(oem.panel, SIM_VIDEO_PANEL)
+ || !strcmp(oem.panel, SIM_DUALDSI_VIDEO_PANEL)
+ || !strcmp(oem.panel, SIM_CMD_PANEL)
+ || !strcmp(oem.panel, SIM_DUALDSI_CMD_PANEL)
+ || !strcmp(oem.panel, DSC_CMD_PANEL)
+ || !strcmp(oem.panel, DSC_VID_PANEL)
+ || oem.skip) {
dprintf(INFO, "Selected panel: %s\nSkip panel configuration\n",
- panel_name);
+ oem.panel);
return;
- } else if (!strcmp(panel_name, HDMI_PANEL_NAME)) {
+ } else if (!strcmp(oem.panel, HDMI_PANEL_NAME)) {
return;
}
- if (gcdb_display_init(panel_name, MDP_REV_50, (void *)MIPI_FB_ADDR)) {
+ if (gcdb_display_init(oem.panel, MDP_REV_50, (void *)MIPI_FB_ADDR)) {
target_force_cont_splash_disable(true);
msm_display_off();
}
- if (cont_splash == '0') {
+ if (!oem.cont_splash) {
dprintf(INFO, "Forcing continuous splash disable\n");
target_force_cont_splash_disable(true);
}