/* Copyright (c) 2015-2016, 2018-2019 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 <string.h>
#include <err.h>
#include <smem.h>
#include <msm_panel.h>
#include <board.h>
#include <qtimer.h>
#include <mipi_dsi.h>
#include <mdp5.h>
#include <target/display.h>

#include "gcdb_display.h"
#include "include/panel.h"
#include "panel_display.h"

/*---------------------------------------------------------------------------*/
/* GCDB Panel Database                                                       */
/*---------------------------------------------------------------------------*/
#include "include/panel_truly_1080p_video.h"
#include "include/panel_truly_1080p_cmd.h"
#include "include/panel_otm1906c_1080p_cmd.h"
#include "include/panel_sharp_1080p_cmd.h"
#include "include/panel_nt35597_wqxga_dualdsi_video.h"
#include "include/panel_nt35597_wqxga_dualdsi_cmd.h"
#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"
#include "include/panel_byd_1200p_video.h"
#include "include/panel_r69006_1080p_cmd.h"
#include "include/panel_r69006_1080p_video.h"
#include "include/panel_hx8394f_720p_video.h"
#include "include/panel_truly_720p_video.h"
#include "include/panel_truly_wuxga_video.h"
#include "include/panel_truly_720p_cmd.h"
#include "include/panel_lead_fl10802_fwvga_video.h"
#include "include/panel_hx8399c_fhd_pluse_video.h"
#include "include/panel_hx8399c_hd_plus_video.h"
#include "include/panel_edo_rm67162_qvga_cmd.h"
#include "include/panel_nt35695b_truly_fhd_video.h"
#include "include/panel_nt35695b_truly_fhd_cmd.h"

/*---------------------------------------------------------------------------*/
/* static panel selection variable                                           */
/*---------------------------------------------------------------------------*/
enum {
	TRULY_1080P_VIDEO_PANEL,
	TRULY_1080P_CMD_PANEL,
	OTM1906C_1080P_CMD_PANEL,
	SHARP_1080P_CMD_PANEL,
	NT35597_WQXGA_DUALDSI_VIDEO_PANEL,
	NT35597_WQXGA_DUALDSI_CMD_PANEL,
	HX8399A_1080P_VIDEO_PANEL,
	NT35597_WQXGA_DSC_VIDEO_PANEL,
	NT35597_WQXGA_DSC_CMD_PANEL,
	HX8394D_720P_VIDEO_PANEL,
	BYD_1200P_VIDEO_PANEL,
	R69006_1080P_CMD_PANEL,
	R69006_1080P_VIDEO_PANEL,
	HX8394F_720P_VIDEO_PANEL,
	TRULY_720P_VIDEO_PANEL,
	TRULY_WUXGA_VIDEO_PANEL,
	TRULY_720P_CMD_PANEL,
	LEAD_FL10802_FWVGA_VIDEO_PANEL,
	HX8399C_FHD_PLUSE_VIDEO_PANEL,
	HX8399C_HD_PLUS_VIDEO_PANEL,
	NT35695B_TRULY_FHD_VIDEO_PANEL,
	NT35695B_TRULY_FHD_CMD_PANEL,
	RM67162_QVGA_CMD_PANEL,
	UNKNOWN_PANEL
};

uint32_t panel_regulator_settings[] = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

/*
 * The list of panels that are supported on this target.
 * Any panel in this list can be selected using fastboot oem command.
 */
static struct panel_list supp_panels[] = {
	{"truly_1080p_video", TRULY_1080P_VIDEO_PANEL},
	{"truly_1080p_cmd", TRULY_1080P_CMD_PANEL},
	{"sharp_1080p_cmd", SHARP_1080P_CMD_PANEL},
	{"nt35597_wqxga_dualdsi_video", NT35597_WQXGA_DUALDSI_VIDEO_PANEL},
	{"nt35597_wqxga_dualdsi_cmd", NT35597_WQXGA_DUALDSI_CMD_PANEL},
	{"otm1906c_1080p_cmd", OTM1906C_1080P_CMD_PANEL},
	{"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},
	{"byd_1200p_video", BYD_1200P_VIDEO_PANEL},
	{"r69006_1080p_cmd",R69006_1080P_CMD_PANEL},
	{"r69006_1080p_video",R69006_1080P_VIDEO_PANEL},
	{"hx8394f_720p_video", HX8394F_720P_VIDEO_PANEL},
	{"truly_720p_video", TRULY_720P_VIDEO_PANEL},
	{"truly_wuxga_video", TRULY_WUXGA_VIDEO_PANEL},
	{"truly_720p_cmd", TRULY_720P_CMD_PANEL},
	{"lead_fl10802_fwvga_video", LEAD_FL10802_FWVGA_VIDEO_PANEL},
	{"hx8399c_fhd_plus_video", HX8399C_FHD_PLUSE_VIDEO_PANEL},
	{"hx8399c_hd_plus_video", HX8399C_HD_PLUS_VIDEO_PANEL},
	{"nt35695b_truly_fhd_video", NT35695B_TRULY_FHD_VIDEO_PANEL},
	{"nt35695b_truly_fhd_cmd", NT35695B_TRULY_FHD_CMD_PANEL},
	{"rm67162_qvga_cmd", RM67162_QVGA_CMD_PANEL},
};

static uint32_t panel_id;

#define TRULY_1080P_PANEL_ON_DELAY 40

int oem_panel_rotation()
{
	return NO_ERROR;
}

int oem_panel_on()
{
	/*
	 *OEM can keep their panel specific on instructions in this
	 *function
	*/
	if (panel_id == OTM1906C_1080P_CMD_PANEL) {
		/* needs extra delay to avoid unexpected artifacts */
		mdelay(OTM1906C_1080P_CMD_PANEL_ON_DELAY);
	} else if (panel_id == TRULY_1080P_CMD_PANEL ||
			panel_id == TRULY_1080P_VIDEO_PANEL) {
		mdelay(TRULY_1080P_PANEL_ON_DELAY);
	}else if (panel_id == R69006_1080P_CMD_PANEL) {
		mdelay(R69006_1080P_CMD_PANEL_ON_DELAY);
	}

	return NO_ERROR;
}

int oem_panel_off()
{
	/* OEM can keep their panel specific off instructions
	 * in this function
	 */
	return NO_ERROR;
}

static int init_panel_data(struct panel_struct *panelstruct,
			struct msm_panel_info *pinfo,
			struct mdss_dsi_phy_ctrl *phy_db)
{
	int pan_type = PANEL_TYPE_DSI;
	struct oem_panel_data *oem_data = mdss_dsi_get_oem_data_ptr();

	switch (panel_id) {
	case TRULY_1080P_VIDEO_PANEL:
		panelstruct->paneldata    = &truly_1080p_video_panel_data;
		panelstruct->backlightinfo = &truly_1080p_video_backlight;
		if (platform_is_sdm439() || platform_is_sdm429()) {
			panelstruct->paneldata->panel_with_enable_gpio = 0;
			panelstruct->backlightinfo->bl_interface_type = 0;
		} else {
			panelstruct->paneldata->panel_with_enable_gpio = 1;
		}
		panelstruct->panelres     = &truly_1080p_video_panel_res;
		panelstruct->color        = &truly_1080p_video_color;
		panelstruct->videopanel   = &truly_1080p_video_video_panel;
		panelstruct->commandpanel = &truly_1080p_video_command_panel;
		panelstruct->state        = &truly_1080p_video_state;
		panelstruct->laneconfig   = &truly_1080p_video_lane_config;
		panelstruct->paneltiminginfo
			= &truly_1080p_video_timing_info;
		panelstruct->panelresetseq
					 = &truly_1080p_video_panel_reset_seq;
		pinfo->labibb = &truly_1080p_video_labibb;
		pinfo->mipi.panel_on_cmds
			= truly_1080p_video_on_command;
		pinfo->mipi.num_of_panel_on_cmds
			= TRULY_1080P_VIDEO_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
			= truly_1080p_video_off_command;
		pinfo->mipi.num_of_panel_off_cmds
			= TRULY_1080P_VIDEO_OFF_COMMAND;
		if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
			memcpy(phy_db->timing,
				truly_1080p_video_12nm_timings,
				TIMING_SIZE_12NM);
		else
			memcpy(phy_db->timing,
				truly_1080p_video_timings, TIMING_SIZE);
		pinfo->mipi.signature 	= TRULY_1080P_VIDEO_SIGNATURE;
		break;
	case TRULY_1080P_CMD_PANEL:
		panelstruct->paneldata    = &truly_1080p_cmd_panel_data;
		panelstruct->backlightinfo = &truly_1080p_cmd_backlight;
		if (platform_is_sdm439() || platform_is_sdm429()) {
			panelstruct->paneldata->panel_with_enable_gpio = 0;
			panelstruct->backlightinfo->bl_interface_type = 0;
		} else {
			panelstruct->paneldata->panel_with_enable_gpio = 1;
		}
		panelstruct->panelres     = &truly_1080p_cmd_panel_res;
		panelstruct->color        = &truly_1080p_cmd_color;
		panelstruct->videopanel   = &truly_1080p_cmd_video_panel;
		panelstruct->commandpanel = &truly_1080p_cmd_command_panel;
		panelstruct->state        = &truly_1080p_cmd_state;
		panelstruct->laneconfig   = &truly_1080p_cmd_lane_config;
		panelstruct->paneltiminginfo
			= &truly_1080p_cmd_timing_info;
		panelstruct->panelresetseq
					 = &truly_1080p_cmd_panel_reset_seq;
		pinfo->labibb = &truly_1080p_cmd_labibb;
		pinfo->mipi.panel_on_cmds
			= truly_1080p_cmd_on_command;
		pinfo->mipi.num_of_panel_on_cmds
			= TRULY_1080P_CMD_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
			= truly_1080p_cmd_off_command;
		pinfo->mipi.num_of_panel_off_cmds
			= TRULY_1080P_CMD_OFF_COMMAND;
		if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
			memcpy(phy_db->timing,
				truly_1080p_cmd_12nm_timings,
				TIMING_SIZE_12NM);
		else
			memcpy(phy_db->timing,
				truly_1080p_cmd_timings, TIMING_SIZE);
		pinfo->mipi.signature 	= TRULY_1080P_CMD_SIGNATURE;
		break;
	case OTM1906C_1080P_CMD_PANEL:
		panelstruct->paneldata    = &otm1906c_1080p_cmd_panel_data;
		panelstruct->paneldata->panel_with_enable_gpio = 1;
		panelstruct->panelres     = &otm1906c_1080p_cmd_panel_res;
		panelstruct->color        = &otm1906c_1080p_cmd_color;
		panelstruct->videopanel   = &otm1906c_1080p_cmd_video_panel;
		panelstruct->commandpanel = &otm1906c_1080p_cmd_command_panel;
		panelstruct->state        = &otm1906c_1080p_cmd_state;
		panelstruct->laneconfig   = &otm1906c_1080p_cmd_lane_config;
		panelstruct->paneltiminginfo
			= &otm1906c_1080p_cmd_timing_info;
		panelstruct->panelresetseq
					 = &otm1906c_1080p_cmd_panel_reset_seq;
		panelstruct->backlightinfo = &otm1906c_1080p_cmd_backlight;
		pinfo->mipi.panel_on_cmds
			= otm1906c_1080p_cmd_on_command;
		pinfo->mipi.num_of_panel_on_cmds
			= OTM1906C_1080P_CMD_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
			= otm1906c_1080p_cmd_off_command;
		pinfo->mipi.num_of_panel_off_cmds
			= OTM1906C_1080P_CMD_OFF_COMMAND;
		memcpy(phy_db->timing,
			otm1906c_1080p_cmd_timings, TIMING_SIZE);
		pinfo->mipi.signature = OTM1906C_1080P_CMD_SIGNATURE;
		break;
	case HX8399A_1080P_VIDEO_PANEL:
		panelstruct->paneldata    = &hx8399a_1080p_video_panel_data;
		panelstruct->panelres     = &hx8399a_1080p_video_panel_res;
		panelstruct->color        = &hx8399a_1080p_video_color;
		panelstruct->videopanel   = &hx8399a_1080p_video_video_panel;
		panelstruct->commandpanel = &hx8399a_1080p_video_command_panel;
		panelstruct->state        = &hx8399a_1080p_video_state;
		panelstruct->laneconfig   = &hx8399a_1080p_video_lane_config;
		panelstruct->paneltiminginfo
			= &hx8399a_1080p_video_timing_info;
		panelstruct->panelresetseq
					 = &hx8399a_1080p_video_reset_seq;
		panelstruct->backlightinfo = &hx8399a_1080p_video_backlight;
		pinfo->mipi.panel_on_cmds
			= hx8399a_1080p_video_on_command;
		pinfo->mipi.num_of_panel_on_cmds
			= HX8399A_1080P_VIDEO_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
			= hx8399a_1080p_video_off_command;
		pinfo->mipi.num_of_panel_off_cmds
			= HX8399A_1080P_VIDEO_OFF_COMMAND;
		memcpy(phy_db->timing,
			hx8399a_1080p_video_timings, TIMING_SIZE);
		pinfo->mipi.signature = HX8399A_1080P_VIDEO_SIGNATURE;
		break;
	case SHARP_1080P_CMD_PANEL:
		panelstruct->paneldata    = &sharp_1080p_cmd_panel_data;
		panelstruct->panelres     = &sharp_1080p_cmd_panel_res;
		panelstruct->paneldata->panel_with_enable_gpio = 1;
		panelstruct->color        = &sharp_1080p_cmd_color;
		panelstruct->videopanel   = &sharp_1080p_cmd_video_panel;
		panelstruct->commandpanel = &sharp_1080p_cmd_command_panel;
		panelstruct->state        = &sharp_1080p_cmd_state;
		panelstruct->laneconfig   = &sharp_1080p_cmd_lane_config;
		panelstruct->paneltiminginfo
					= &sharp_1080p_cmd_timing_info;
		panelstruct->panelresetseq
					= &sharp_1080p_cmd_panel_reset_seq;
		panelstruct->backlightinfo = &sharp_1080p_cmd_backlight;
		pinfo->mipi.panel_on_cmds
					= sharp_1080p_cmd_on_command;
		pinfo->mipi.num_of_panel_on_cmds
					= SHARP_1080P_CMD_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
			= sharp_1080p_cmd_off_command;
		pinfo->mipi.num_of_panel_off_cmds
			= SHARP_1080P_CMD_OFF_COMMAND;
		memcpy(phy_db->timing,
				sharp_1080p_cmd_timings, TIMING_SIZE);
		break;
	case NT35597_WQXGA_DUALDSI_VIDEO_PANEL:
		panelstruct->paneldata    = &nt35597_wqxga_dualdsi_video_panel_data;
		panelstruct->paneldata->panel_operating_mode = DST_SPLIT_FLAG |
					SPLIT_DISPLAY_FLAG | DUAL_DSI_FLAG;
		panelstruct->paneldata->panel_with_enable_gpio = 0;

		panelstruct->panelres     = &nt35597_wqxga_dualdsi_video_panel_res;
		panelstruct->color        = &nt35597_wqxga_dualdsi_video_color;
		panelstruct->videopanel   = &nt35597_wqxga_dualdsi_video_video_panel;
		panelstruct->commandpanel = &nt35597_wqxga_dualdsi_video_command_panel;
		panelstruct->state        = &nt35597_wqxga_dualdsi_video_state;
		panelstruct->laneconfig   = &nt35597_wqxga_dualdsi_video_lane_config;
		panelstruct->paneltiminginfo
					= &nt35597_wqxga_dualdsi_video_timing_info;
		panelstruct->panelresetseq
					= &nt35597_wqxga_dualdsi_video_reset_seq;
		panelstruct->backlightinfo = &nt35597_wqxga_dualdsi_video_backlight;
		pinfo->labibb = &nt35597_wqxga_dualdsi_video_labibb;

		pinfo->mipi.panel_on_cmds
			= nt35597_wqxga_dualdsi_video_on_command;
		pinfo->mipi.num_of_panel_on_cmds
			= NT35597_WQXGA_DUALDSI_VIDEO_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
			= nt35597_wqxga_dualdsi_video_off_command;
		pinfo->mipi.num_of_panel_off_cmds
			= NT35597_WQXGA_DUALDSI_VIDEO_OFF_COMMAND;
		memcpy(phy_db->timing, nt35597_wqxga_dualdsi_video_timings,
			TIMING_SIZE);
		pinfo->mipi.tx_eot_append = true;
		break;
	case NT35597_WQXGA_DUALDSI_CMD_PANEL:
		panelstruct->paneldata    = &nt35597_wqxga_dualdsi_cmd_panel_data;
		panelstruct->paneldata->panel_operating_mode = DST_SPLIT_FLAG |
					SPLIT_DISPLAY_FLAG | DUAL_DSI_FLAG;
		panelstruct->paneldata->panel_with_enable_gpio = 0;

		panelstruct->panelres     = &nt35597_wqxga_dualdsi_cmd_panel_res;
		panelstruct->color        = &nt35597_wqxga_dualdsi_cmd_color;
		panelstruct->videopanel   = &nt35597_wqxga_dualdsi_cmd_video_panel;
		panelstruct->commandpanel = &nt35597_wqxga_dualdsi_cmd_command_panel;
		panelstruct->state        = &nt35597_wqxga_dualdsi_cmd_state;
		panelstruct->laneconfig   = &nt35597_wqxga_dualdsi_cmd_lane_config;
		panelstruct->paneltiminginfo
			= &nt35597_wqxga_dualdsi_cmd_timing_info;
		/* Clkout timings are different for this panel on 8956 */
		panelstruct->paneltiminginfo->tclk_post = 0x2b;
		panelstruct->paneltiminginfo->tclk_pre = 0x28;
		panelstruct->panelresetseq
					 = &nt35597_wqxga_dualdsi_cmd_reset_seq;
		panelstruct->backlightinfo = &nt35597_wqxga_dualdsi_cmd_backlight;

		pinfo->labibb = &nt35597_wqxga_dualdsi_cmd_labibb;

		pinfo->mipi.panel_on_cmds
			= nt35597_wqxga_dualdsi_cmd_on_command;
		pinfo->mipi.num_of_panel_on_cmds
			= NT35597_WQXGA_DUALDSI_CMD_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
			= nt35597_wqxga_dualdsi_cmd_off_command;
		pinfo->mipi.num_of_panel_off_cmds
			= NT35597_WQXGA_DUALDSI_CMD_OFF_COMMAND;
		memcpy(phy_db->timing, nt35597_wqxga_dualdsi_cmd_timings,
			TIMING_SIZE);
		pinfo->mipi.tx_eot_append = true;
		break;
	case NT35597_WQXGA_DSC_VIDEO_PANEL:
		panelstruct->paneldata    = &nt35597_wqxga_dsc_video_panel_data;
		panelstruct->paneldata->panel_with_enable_gpio = 0;
		panelstruct->paneldata->panel_operating_mode = USE_DSI1_PLL_FLAG;
		panelstruct->panelres     = &nt35597_wqxga_dsc_video_panel_res;
		panelstruct->color        = &nt35597_wqxga_dsc_video_color;
		panelstruct->videopanel   = &nt35597_wqxga_dsc_video_video_panel;
		panelstruct->commandpanel = &nt35597_wqxga_dsc_video_command_panel;
		panelstruct->state        = &nt35597_wqxga_dsc_video_state;
		panelstruct->laneconfig   = &nt35597_wqxga_dsc_video_lane_config;
		panelstruct->paneltiminginfo
					= &nt35597_wqxga_dsc_video_timing_info;
		panelstruct->panelresetseq
					= &nt35597_wqxga_dsc_video_reset_seq;
		panelstruct->backlightinfo = &nt35597_wqxga_dsc_video_backlight;
		pinfo->labibb = &nt35597_wqxga_dsc_video_labibb;

		pinfo->mipi.panel_on_cmds
			= nt35597_wqxga_dsc_video_on_command;
		pinfo->mipi.num_of_panel_on_cmds
			= NT35597_WQXGA_DSC_VIDEO_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
			= nt35597_wqxga_dsc_video_off_command;
		pinfo->mipi.num_of_panel_off_cmds
			= NT35597_WQXGA_DSC_VIDEO_OFF_COMMAND;
		memcpy(phy_db->timing, nt35597_wqxga_dsc_video_timings,
			TIMING_SIZE);
		/* Clkout timings are different for this panel on 8956 */
		panelstruct->paneltiminginfo->tclk_post = 0x04;
		panelstruct->paneltiminginfo->tclk_pre = 0x20;
		pinfo->mipi.tx_eot_append = true;

		panelstruct->paneldata->panel_operating_mode &= ~DUAL_PIPE_FLAG;
		panelstruct->config = &nt35597_wqxga_dsc_video_config0;
		if (oem_data) {
			switch (oem_data->cfg_num[0]) {
			case -1: /* default */
			case 0:
				panelstruct->config =
					&nt35597_wqxga_dsc_video_config0;
				break;
			default:
				dprintf(CRITICAL, "topology config%d not supported. fallback to default config0\n",
					oem_data->cfg_num[0]);
				panelstruct->config = &nt35597_wqxga_dsc_video_config0;
			}
		}
		pinfo->lm_split[0] = panelstruct->config->lm_split[0];
		pinfo->lm_split[1] = panelstruct->config->lm_split[1];
		pinfo->num_dsc_enc = panelstruct->config->num_dsc_enc;
		pinfo->compression_mode = COMPRESSION_DSC;

		pinfo->dsc.parameter_calc =  mdss_dsc_parameters_calc;
		pinfo->dsc.dsc2buf = mdss_dsc_to_buf;
		pinfo->dsc.dsi_dsc_config = mdss_dsc_dsi_config;
		pinfo->dsc.mdp_dsc_config = mdss_dsc_mdp_config;
		break;
	case NT35597_WQXGA_DSC_CMD_PANEL:
		panelstruct->paneldata    = &nt35597_wqxga_dsc_cmd_panel_data;
		panelstruct->paneldata->panel_with_enable_gpio = 0;
		panelstruct->paneldata->panel_operating_mode = USE_DSI1_PLL_FLAG;
		panelstruct->panelres     = &nt35597_wqxga_dsc_cmd_panel_res;
		panelstruct->color        = &nt35597_wqxga_dsc_cmd_color;
		panelstruct->videopanel   = &nt35597_wqxga_dsc_cmd_video_panel;
		panelstruct->commandpanel = &nt35597_wqxga_dsc_cmd_command_panel;
		panelstruct->state        = &nt35597_wqxga_dsc_cmd_state;
		panelstruct->laneconfig   = &nt35597_wqxga_dsc_cmd_lane_config;
		panelstruct->paneltiminginfo
					= &nt35597_wqxga_dsc_cmd_timing_info;
		panelstruct->panelresetseq
					= &nt35597_wqxga_dsc_cmd_reset_seq;
		panelstruct->backlightinfo = &nt35597_wqxga_dsc_cmd_backlight;
		pinfo->labibb = &nt35597_wqxga_dsc_cmd_labibb;

		pinfo->mipi.panel_on_cmds
			= nt35597_wqxga_dsc_cmd_on_command;
		pinfo->mipi.num_of_panel_on_cmds
			= NT35597_WQXGA_DSC_CMD_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
			= nt35597_wqxga_dsc_cmd_off_command;
		pinfo->mipi.num_of_panel_off_cmds
			= NT35597_WQXGA_DSC_CMD_OFF_COMMAND;
		memcpy(phy_db->timing, nt35597_wqxga_dsc_cmd_timings,
			TIMING_SIZE);
		/* Clkout timings are different for this panel on 8956 */
		panelstruct->paneltiminginfo->tclk_post = 0x04;
		panelstruct->paneltiminginfo->tclk_pre = 0x20;
		pinfo->mipi.tx_eot_append = true;

		panelstruct->paneldata->panel_operating_mode &= ~DUAL_PIPE_FLAG;
		panelstruct->config = &nt35597_wqxga_dsc_cmd_config0;
		if (oem_data) {
			switch (oem_data->cfg_num[0]) {
			case -1: /* default */
			case 0:
				panelstruct->config =
					&nt35597_wqxga_dsc_cmd_config0;
				break;
			default:
				dprintf(CRITICAL, "topology config%d not supported. fallback to default config0\n",
					oem_data->cfg_num[0]);
				panelstruct->config = &nt35597_wqxga_dsc_cmd_config0;
			}
		}
		pinfo->lm_split[0] = panelstruct->config->lm_split[0];
		pinfo->lm_split[1] = panelstruct->config->lm_split[1];
		pinfo->num_dsc_enc = panelstruct->config->num_dsc_enc;
		pinfo->compression_mode = COMPRESSION_DSC;

		pinfo->dsc.parameter_calc =  mdss_dsc_parameters_calc;
		pinfo->dsc.dsc2buf = mdss_dsc_to_buf;
		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 R69006_1080P_CMD_PANEL:
		panelstruct->paneldata    = &r69006_1080p_cmd_panel_data;
		panelstruct->panelres     = &r69006_1080p_cmd_panel_res;
		panelstruct->color                = &r69006_1080p_cmd_color;
		panelstruct->videopanel   = &r69006_1080p_cmd_video_panel;
		panelstruct->commandpanel = &r69006_1080p_cmd_command_panel;
		panelstruct->state                = &r69006_1080p_cmd_state;
		panelstruct->laneconfig   = &r69006_1080p_cmd_lane_config;
		panelstruct->paneltiminginfo
		                         = &r69006_1080p_cmd_timing_info;
		panelstruct->panelresetseq
		                         = &r69006_1080p_cmd_reset_seq;
		panelstruct->backlightinfo = &r69006_1080p_cmd_backlight;
		pinfo->labibb = &r69006_1080p_cmd_labibb;
		pinfo->mipi.panel_on_cmds
		                        = r69006_1080p_cmd_on_command;
		pinfo->mipi.num_of_panel_on_cmds
		                        = R69006_1080P_CMD_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
		                        = r69006_1080p_cmd_off_command;
		pinfo->mipi.num_of_panel_off_cmds
		                        = R69006_1080P_CMD_OFF_COMMAND;
		memcpy(phy_db->timing,
		                r69006_1080p_cmd_timings, TIMING_SIZE);
		pinfo->mipi.signature = R69006_1080P_CMD_SIGNATURE;
		pinfo->mipi.tx_eot_append = true;
		pinfo->mipi.rx_eot_ignore = true;
		break;
	case R69006_1080P_VIDEO_PANEL:
		panelstruct->paneldata	  = &r69006_1080p_video_panel_data;
		panelstruct->panelres	  = &r69006_1080p_video_panel_res;
		panelstruct->color				  = &r69006_1080p_video_color;
		panelstruct->videopanel   = &r69006_1080p_video_video_panel;
		panelstruct->commandpanel = &r69006_1080p_video_command_panel;
		panelstruct->state				  = &r69006_1080p_video_state;
		panelstruct->laneconfig   = &r69006_1080p_video_lane_config;
		panelstruct->paneltiminginfo
								 = &r69006_1080p_video_timing_info;
		panelstruct->panelresetseq
								 = &r69006_1080p_video_reset_seq;
		panelstruct->backlightinfo = &r69006_1080p_video_backlight;
		pinfo->labibb = &r69006_1080p_video_labibb;
		pinfo->mipi.panel_on_cmds
								= r69006_1080p_video_on_command;
		pinfo->mipi.num_of_panel_on_cmds
								= R69006_1080P_VIDEO_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
								= r69006_1080p_video_off_command;
		pinfo->mipi.num_of_panel_off_cmds
								= R69006_1080P_VIDEO_OFF_COMMAND;
		memcpy(phy_db->timing,
						r69006_1080p_video_timings, TIMING_SIZE);
		pinfo->mipi.signature = R69006_1080P_VIDEO_SIGNATURE;
		break;
	case HX8394F_720P_VIDEO_PANEL:
		panelstruct->paneldata	  = &hx8394f_720p_video_panel_data;
		panelstruct->panelres	  = &hx8394f_720p_video_panel_res;
		panelstruct->color				  = &hx8394f_720p_video_color;
		panelstruct->videopanel   = &hx8394f_720p_video_video_panel;
		panelstruct->commandpanel = &hx8394f_720p_video_command_panel;
		panelstruct->state				  = &hx8394f_720p_video_state;
		panelstruct->laneconfig   = &hx8394f_720p_video_lane_config;
		panelstruct->paneltiminginfo
								 = &hx8394f_720p_video_timing_info;
		panelstruct->panelresetseq
								 = &hx8394f_720p_video_reset_seq;
		panelstruct->backlightinfo = &hx8394f_720p_video_backlight;
		pinfo->mipi.panel_on_cmds
								= hx8394f_720p_video_on_command;
		pinfo->mipi.num_of_panel_on_cmds
								= HX8394F_720P_VIDEO_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
								= hx8394f_720p_video_off_command;
		pinfo->mipi.num_of_panel_off_cmds
								= HX8394F_720P_VIDEO_OFF_COMMAND;
		memcpy(phy_db->timing,
						hx8394f_720p_video_timings, TIMING_SIZE);
		pinfo->mipi.signature = HX8394F_720P_VIDEO_SIGNATURE;
		if ((board_platform_id() == SDM429) || (board_platform_id() == SDM439) ||
				(board_platform_id() == SDA429) || (board_platform_id() == SDA439))
			pinfo->disable_wled_labibb = true;
		break;
	case BYD_1200P_VIDEO_PANEL:
		panelstruct->paneldata    = &byd_1200p_video_panel_data;
		panelstruct->paneldata->panel_with_enable_gpio = 1;
		panelstruct->panelres     = &byd_1200p_video_panel_res;
		panelstruct->color        = &byd_1200p_video_color;
		panelstruct->videopanel   = &byd_1200p_video_video_panel;
		panelstruct->commandpanel = &byd_1200p_video_command_panel;
		panelstruct->state        = &byd_1200p_video_state;
		panelstruct->laneconfig   = &byd_1200p_video_lane_config;
		panelstruct->paneltiminginfo
			= &byd_1200p_video_timing_info;
		panelstruct->panelresetseq
					 = &byd_1200p_video_panel_reset_seq;
		panelstruct->backlightinfo = &byd_1200p_video_backlight;
		pinfo->mipi.panel_on_cmds
			= byd_1200p_video_on_command;
		pinfo->mipi.num_of_panel_on_cmds
			= BYD_1200P_VIDEO_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
			= byd_1200p_video_off_command;
		pinfo->mipi.num_of_panel_off_cmds
			= BYD_1200P_VIDEO_OFF_COMMAND;
		memcpy(phy_db->timing,
			byd_1200p_video_timings, TIMING_SIZE);
		pinfo->mipi.signature 	= BYD_1200P_VIDEO_SIGNATURE;
		phy_db->regulator_mode = DSI_PHY_REGULATOR_LDO_MODE;
		break;
	case TRULY_720P_VIDEO_PANEL:
		panelstruct->paneldata    = &truly_720p_video_panel_data;
		panelstruct->paneldata->panel_with_enable_gpio = 1;
		panelstruct->panelres     = &truly_720p_video_panel_res;
		panelstruct->color        = &truly_720p_video_color;
		panelstruct->videopanel   = &truly_720p_video_video_panel;
		panelstruct->commandpanel = &truly_720p_video_command_panel;
		panelstruct->state        = &truly_720p_video_state;
		panelstruct->laneconfig   = &truly_720p_video_lane_config;
		panelstruct->paneltiminginfo
			= &truly_720p_video_timing_info;
		panelstruct->panelresetseq
					 = &truly_720p_video_panel_reset_seq;
		panelstruct->backlightinfo = &truly_720p_video_backlight;
		pinfo->mipi.panel_on_cmds
			= truly_720p_video_on_command;
		pinfo->mipi.num_of_panel_on_cmds
			= TRULY_720P_VIDEO_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
			= truly_720p_video_off_command;
		pinfo->mipi.num_of_panel_off_cmds
			= TRULY_720P_VIDEO_OFF_COMMAND;
		memcpy(phy_db->timing,
			truly_720p_video_timings, TIMING_SIZE);
		pinfo->mipi.signature 	= TRULY_720P_VIDEO_SIGNATURE;
		pinfo->mipi.tx_eot_append = true;
		break;
	case TRULY_WUXGA_VIDEO_PANEL:
		panelstruct->paneldata    = &truly_wuxga_video_panel_data;
		panelstruct->paneldata->panel_with_enable_gpio = 1;
		panelstruct->panelres     = &truly_wuxga_video_panel_res;
		panelstruct->color        = &truly_wuxga_video_color;
		panelstruct->videopanel   = &truly_wuxga_video_video_panel;
		panelstruct->commandpanel = &truly_wuxga_video_command_panel;
		panelstruct->state        = &truly_wuxga_video_state;
		panelstruct->laneconfig   = &truly_wuxga_video_lane_config;
		panelstruct->paneltiminginfo
			= &truly_wuxga_video_timing_info;
		panelstruct->panelresetseq
					 = &truly_wuxga_video_panel_reset_seq;
		panelstruct->backlightinfo = &truly_wuxga_video_backlight;
		pinfo->mipi.panel_on_cmds
			= truly_wuxga_video_on_command;
		pinfo->mipi.num_of_panel_on_cmds
			= TRULY_WUXGA_VIDEO_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
			= truly_wuxga_video_off_command;
		pinfo->mipi.num_of_panel_off_cmds
			= TRULY_WUXGA_VIDEO_OFF_COMMAND;
		memcpy(phy_db->timing,
			truly_wuxga_video_timings, TIMING_SIZE);
		pinfo->mipi.signature 	= TRULY_WUXGA_VIDEO_SIGNATURE;
		break;
	case TRULY_720P_CMD_PANEL:
		panelstruct->paneldata    = &truly_720p_cmd_panel_data;
		panelstruct->paneldata->panel_with_enable_gpio = 1;
		panelstruct->panelres     = &truly_720p_cmd_panel_res;
		panelstruct->color        = &truly_720p_cmd_color;
		panelstruct->videopanel   = &truly_720p_cmd_video_panel;
		panelstruct->commandpanel = &truly_720p_cmd_command_panel;
		panelstruct->state        = &truly_720p_cmd_state;
		panelstruct->laneconfig   = &truly_720p_cmd_lane_config;
		panelstruct->paneltiminginfo
			= &truly_720p_cmd_timing_info;
		panelstruct->panelresetseq
					 = &truly_720p_cmd_panel_reset_seq;
		panelstruct->backlightinfo = &truly_720p_cmd_backlight;
		pinfo->mipi.panel_on_cmds
			= truly_720p_cmd_on_command;
		pinfo->mipi.num_of_panel_on_cmds
			= TRULY_720P_CMD_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
			= truly_720p_cmd_off_command;
		pinfo->mipi.num_of_panel_off_cmds
			= TRULY_720P_CMD_OFF_COMMAND;
		memcpy(phy_db->timing,
			truly_720p_cmd_timings, TIMING_SIZE);
		pinfo->mipi.signature 	= TRULY_720P_CMD_SIGNATURE;
		pinfo->mipi.tx_eot_append = true;
		break;
	case LEAD_FL10802_FWVGA_VIDEO_PANEL:
		panelstruct->paneldata = &lead_fl10802_fwvga_video_panel_data;
		panelstruct->panelres = &lead_fl10802_fwvga_video_panel_res;
		panelstruct->color = &lead_fl10802_fwvga_video_color;
		panelstruct->videopanel = &lead_fl10802_fwvga_video_video_panel;
		panelstruct->commandpanel
				= &lead_fl10802_fwvga_video_command_panel;
		panelstruct->state = &lead_fl10802_fwvga_video_state;
		panelstruct->laneconfig = &lead_fl10802_fwvga_video_lane_config;
		panelstruct->paneltiminginfo
				= &lead_fl10802_fwvga_video_timing_info;
		panelstruct->panelresetseq
				= &lead_fl10802_fwvga_video_reset_seq;
		panelstruct->backlightinfo
				= &lead_fl10802_fwvga_video_backlight;
		pinfo->mipi.panel_on_cmds
				= lead_fl10802_fwvga_video_on_command;
		pinfo->mipi.num_of_panel_on_cmds
				= LEAD_FL10802_FWVGA_VIDEO_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
				= lead_fl10802_fwvga_video_off_command;
		pinfo->mipi.num_of_panel_off_cmds
				= LEAD_FL10802_FWVGA_VIDEO_OFF_COMMAND;
		memcpy(phy_db->timing,
				lead_fl10802_fwvga_video_timings, TIMING_SIZE);
		pinfo->mipi.signature = LEAD_FL10802_FWVGA_VIDEO_SIGNATURE;
		pinfo->mipi.cmds_post_tg = 1;
		break;
	case HX8399C_FHD_PLUSE_VIDEO_PANEL:
		panelstruct->paneldata    = &hx8399c_fhd_pluse_video_panel_data;
		panelstruct->panelres     = &hx8399c_fhd_pluse_video_panel_res;
		panelstruct->color        = &hx8399c_fhd_pluse_video_color;
		panelstruct->videopanel   =
				&hx8399c_fhd_pluse_video_video_panel;
		panelstruct->commandpanel =
				&hx8399c_fhd_pluse_video_command_panel;
		panelstruct->state        = &hx8399c_fhd_pluse_video_state;
		panelstruct->laneconfig   =
				&hx8399c_fhd_pluse_video_lane_config;
		panelstruct->paneltiminginfo
				= &hx8399c_fhd_pluse_video_timing_info;
		panelstruct->panelresetseq
				= &hx8399c_fhd_pluse_video_panel_reset_seq;
		panelstruct->backlightinfo = &hx8399c_fhd_pluse_video_backlight;
		pinfo->labibb = &hx8399c_fhd_pluse_video_labibb;
		pinfo->mipi.panel_on_cmds
				= hx8399c_fhd_pluse_video_on_command;
		pinfo->mipi.num_of_panel_on_cmds
				= HX8399C_FHD_PLUSE_VIDEO_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
				= hx8399c_fhd_pluse_video_off_command;
		pinfo->mipi.num_of_panel_off_cmds
				= HX8399C_FHD_PLUSE_VIDEO_OFF_COMMAND;
		if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
			memcpy(phy_db->timing,
				hx8399c_fhd_pluse_video_12nm_timings,
				TIMING_SIZE_12NM);
		else
			memcpy(phy_db->timing, hx8399c_fhd_pluse_video_timings,
				TIMING_SIZE);
		pinfo->mipi.signature    = HX8399C_FHD_PLUSE_VIDEO_SIGNATURE;
		break;
	case HX8399C_HD_PLUS_VIDEO_PANEL:
		panelstruct->paneldata    = &hx8399c_hd_plus_video_panel_data;
		panelstruct->panelres     = &hx8399c_hd_plus_video_panel_res;
		panelstruct->color        = &hx8399c_hd_plus_video_color;
		panelstruct->videopanel   =
				&hx8399c_hd_plus_video_video_panel;
		panelstruct->commandpanel =
				&hx8399c_hd_plus_video_command_panel;
		panelstruct->state        = &hx8399c_hd_plus_video_state;
		panelstruct->laneconfig   =
				&hx8399c_hd_plus_video_lane_config;
		panelstruct->paneltiminginfo
				= &hx8399c_hd_plus_video_timing_info;
		panelstruct->panelresetseq
				= &hx8399c_hd_plus_video_panel_reset_seq;
		panelstruct->backlightinfo = &hx8399c_hd_plus_video_backlight;
		pinfo->labibb = &hx8399c_hd_plus_video_labibb;
		pinfo->mipi.panel_on_cmds
				= hx8399c_hd_plus_video_on_command;
		pinfo->mipi.num_of_panel_on_cmds
				= HX8399C_HD_PLUS_VIDEO_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
				= hx8399c_hd_plus_video_off_command;
		pinfo->mipi.num_of_panel_off_cmds
				= HX8399C_HD_PLUS_VIDEO_OFF_COMMAND;
		if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
			memcpy(phy_db->timing,
				hx8399c_hd_plus_video_12nm_timings,
				TIMING_SIZE_12NM);
		else
			memcpy(phy_db->timing, hx8399c_hd_plus_video_timings,
				TIMING_SIZE);
		pinfo->mipi.signature    = HX8399C_HD_PLUS_VIDEO_SIGNATURE;
		pinfo->mipi.tx_eot_append = true;
		break;
	case RM67162_QVGA_CMD_PANEL:
		panelstruct->paneldata    = &edo_rm67162_qvga_cmd_panel_data;
		panelstruct->panelres     = &edo_rm67162_qvga_cmd_panel_res;
		panelstruct->color        = &edo_rm67162_qvga_cmd_color;
		panelstruct->videopanel   =
				&edo_rm67162_qvga_cmd_video_panel;
		panelstruct->commandpanel =
				&edo_rm67162_qvga_cmd_command_panel;
		panelstruct->state        = &edo_rm67162_qvga_cmd_state;
		panelstruct->laneconfig   =
				&edo_rm67162_qvga_cmd_lane_config;
		panelstruct->paneltiminginfo
				= &edo_rm67162_qvga_cmd_timing_info;
		panelstruct->panelresetseq
				= &edo_rm67162_qvga_cmd_reset_seq;
		panelstruct->backlightinfo = &edo_rm67162_qvga_cmd_backlight;
		pinfo->labibb = NULL;
		pinfo->mipi.panel_on_cmds
				= edo_rm67162_qvga_cmd_on_command;
		pinfo->mipi.num_of_panel_on_cmds
				= EDO_RM67162_QVGA_CMD_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
				= edo_rm67162_qvga_cmd_off_command;
		pinfo->mipi.num_of_panel_off_cmds
				= EDO_RM67162_QVGA_CMD_OFF_COMMAND;
		if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
			memcpy(phy_db->timing,
				edo_rm67162_qvga_cmd_12nm_timings,
				TIMING_SIZE_12NM);
		pinfo->mipi.tx_eot_append = true;
		break;
	case NT35695B_TRULY_FHD_VIDEO_PANEL:
		panelstruct->paneldata    = &nt35695b_truly_fhd_video_panel_data;
		panelstruct->panelres     = &nt35695b_truly_fhd_video_panel_res;
		panelstruct->color        = &nt35695b_truly_fhd_video_color;
		panelstruct->videopanel   =
				&nt35695b_truly_fhd_video_video_panel;
		panelstruct->commandpanel =
				&nt35695b_truly_fhd_video_command_panel;
		panelstruct->state        = &nt35695b_truly_fhd_video_state;
		panelstruct->laneconfig   =
				&nt35695b_truly_fhd_video_lane_config;
		panelstruct->paneltiminginfo
				= &nt35695b_truly_fhd_video_timing_info;
		panelstruct->panelresetseq
				= &nt35695b_truly_fhd_video_panel_reset_seq;
		panelstruct->backlightinfo = &nt35695b_truly_fhd_video_backlight;
		pinfo->labibb = &nt35695b_truly_fhd_video_labibb;
		pinfo->mipi.panel_on_cmds
				= nt35695b_truly_fhd_video_on_command;
		pinfo->mipi.num_of_panel_on_cmds
				= NT35695B_TRULY_FHD_VIDEO_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
				= nt35695b_truly_fhd_video_off_command;
		pinfo->mipi.num_of_panel_off_cmds
				= NT35695B_TRULY_FHD_VIDEO_OFF_COMMAND;
		if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
			memcpy(phy_db->timing,
				nt35695b_truly_fhd_video_12nm_timings,
				TIMING_SIZE_12NM);
		else
			memcpy(phy_db->timing, nt35695b_truly_fhd_video_timings,
				TIMING_SIZE);
		pinfo->mipi.signature    = NT35695B_TRULY_FHD_VIDEO_SIGNATURE;
		pinfo->mipi.tx_eot_append = true;
		break;
	case NT35695B_TRULY_FHD_CMD_PANEL:
		panelstruct->paneldata    = &nt35695b_truly_fhd_cmd_panel_data;
		panelstruct->panelres     = &nt35695b_truly_fhd_cmd_panel_res;
		panelstruct->color        = &nt35695b_truly_fhd_cmd_color;
		panelstruct->videopanel   =
				&nt35695b_truly_fhd_cmd_video_panel;
		panelstruct->commandpanel =
				&nt35695b_truly_fhd_cmd_command_panel;
		panelstruct->state        = &nt35695b_truly_fhd_cmd_state;
		panelstruct->laneconfig   =
				&nt35695b_truly_fhd_cmd_lane_config;
		panelstruct->paneltiminginfo
				= &nt35695b_truly_fhd_cmd_timing_info;
		panelstruct->panelresetseq
				= &nt35695b_truly_fhd_cmd_panel_reset_seq;
		panelstruct->backlightinfo = &nt35695b_truly_fhd_cmd_backlight;
		pinfo->labibb = &nt35695b_truly_fhd_cmd_labibb;
		pinfo->mipi.panel_on_cmds
				= nt35695b_truly_fhd_cmd_on_command;
		pinfo->mipi.num_of_panel_on_cmds
				= NT35695B_TRULY_FHD_CMD_ON_COMMAND;
		pinfo->mipi.panel_off_cmds
				= nt35695b_truly_fhd_cmd_off_command;
		pinfo->mipi.num_of_panel_off_cmds
				= NT35695B_TRULY_FHD_CMD_OFF_COMMAND;
		if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
			memcpy(phy_db->timing,
				nt35695b_truly_fhd_cmd_12nm_timings,
				TIMING_SIZE_12NM);
		else
			memcpy(phy_db->timing, nt35695b_truly_fhd_cmd_timings,
				TIMING_SIZE);
		pinfo->mipi.signature    = NT35695B_TRULY_FHD_CMD_SIGNATURE;
		pinfo->mipi.tx_eot_append = true;
		break;
	case UNKNOWN_PANEL:
	default:
		memset(panelstruct, 0, sizeof(struct panel_struct));
		memset(pinfo->mipi.panel_on_cmds, 0,
					sizeof(struct mipi_dsi_cmd));
		pinfo->mipi.num_of_panel_on_cmds = 0;
		memset(pinfo->mipi.panel_off_cmds, 0,
					sizeof(struct mipi_dsi_cmd));
		pinfo->mipi.num_of_panel_off_cmds = 0;
		memset(phy_db->timing, 0, TIMING_SIZE);
		pan_type = PANEL_TYPE_UNKNOWN;
		break;
	}

	dprintf(SPEW, "lm_split[0]=%d lm_split[1]=%d mode=0x%x\n",
		pinfo->lm_split[0], pinfo->lm_split[1],
		panelstruct->paneldata->panel_operating_mode);

	return pan_type;
}

#define DISPLAY_MAX_PANEL_DETECTION 2
static uint32_t auto_pan_loop = 0;

uint32_t oem_panel_max_auto_detect_panels()
{
	return target_panel_auto_detect_enabled() ?
		DISPLAY_MAX_PANEL_DETECTION : 0;
}

int oem_panel_select(const char *panel_name, struct panel_struct *panelstruct,
			struct msm_panel_info *pinfo,
			struct mdss_dsi_phy_ctrl *phy_db)
{
	uint32_t hw_id = board_hardware_id();
	uint32_t hw_subtype = board_hardware_subtype();
	int32_t panel_override_id;
	uint32_t target_id, plat_hw_ver_major;

	if (panel_name) {
		panel_override_id = panel_name_to_id(supp_panels,
				ARRAY_SIZE(supp_panels), panel_name);

		if (panel_override_id < 0) {
			dprintf(CRITICAL, "Not able to search the panel:%s\n",
					 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);
			goto panel_init;
		}
	}

	switch (hw_id) {
	case HW_PLATFORM_MTP:
		if (platform_is_msm8956())
			panel_id = NT35597_WQXGA_DUALDSI_VIDEO_PANEL;
		else if (platform_is_msm8917())
			panel_id = TRULY_720P_VIDEO_PANEL;
		else if (platform_is_sdm439())
			panel_id = HX8399C_FHD_PLUSE_VIDEO_PANEL;
		else if (platform_is_sdm429())
			panel_id = HX8399C_HD_PLUS_VIDEO_PANEL;
		else
			panel_id = TRULY_1080P_VIDEO_PANEL;
		break;
	case HW_PLATFORM_SURF:
	case HW_PLATFORM_RCM:
		if (platform_is_msm8956())
			panel_id = NT35597_WQXGA_DUALDSI_VIDEO_PANEL;
		else if (platform_is_msm8917())
			panel_id = TRULY_720P_VIDEO_PANEL;
		else if (platform_is_sdm439())
			panel_id = HX8399C_FHD_PLUSE_VIDEO_PANEL;
		else if (platform_is_sdm429())
			panel_id = HX8399C_HD_PLUS_VIDEO_PANEL;
		else
			panel_id = TRULY_1080P_VIDEO_PANEL;
		break;
	case HW_PLATFORM_QRD:
		if (platform_is_qm215()) {
			panel_id = HX8399C_HD_PLUS_VIDEO_PANEL;
			break;
		}

		if (hw_subtype == HW_PLATFORM_SUBTYPE_POLARIS) {
			panel_id = BYD_1200P_VIDEO_PANEL;
			break;
		}

		target_id = board_target_id();
		plat_hw_ver_major = ((target_id >> 16) & 0xFF);

		/*
		 * 8952 SKUM DVT2 - HX8399A 1080p video panel
		 * 8952 SKUM EVT1/EVT2 - OTM1906C 1080p cmd panel
		 */
		if (plat_hw_ver_major >= 4)
			panel_id = HX8399A_1080P_VIDEO_PANEL;
		else
			panel_id = OTM1906C_1080P_CMD_PANEL;

		if (platform_is_msm8937()){
			if (hw_subtype == 0x80) {
				/* 8940 SKU7 uses HX8394F */
				panel_id = HX8394F_720P_VIDEO_PANEL;
			} else {
				/* 8937 SKU1 uses R69006, SKU2 uses HX8394F */
				if (plat_hw_ver_major > 16)
					panel_id = HX8394F_720P_VIDEO_PANEL;
				else
					panel_id = R69006_1080P_CMD_PANEL;
			}
		}

		if (platform_is_sdm439()) {
			panel_id = HX8399C_FHD_PLUSE_VIDEO_PANEL;
		}

		if (platform_is_sdm429() || platform_is_sdm429w()) {
			if (hw_subtype == HW_PLATFORM_SUBTYPE_429W_PM660) /* Spyro target */
				panel_id = RM67162_QVGA_CMD_PANEL;
			else
				panel_id = HX8399C_HD_PLUS_VIDEO_PANEL;
		}

		/* QRD EVT1 uses OTM1906C, and EVT2 uses HX8394F */
		if (platform_is_msm8956()) {
			switch (auto_pan_loop) {
				case 0:
					panel_id = HX8399A_1080P_VIDEO_PANEL;
					break;
				case 1:
					panel_id = OTM1906C_1080P_CMD_PANEL;
					break;
				default:
					panel_id = UNKNOWN_PANEL;
					dprintf(CRITICAL, "Unknown panel\n");
					return PANEL_TYPE_UNKNOWN;
			}
			auto_pan_loop++;
		} else if (platform_is_msm8917()) {
			if (hw_subtype == 0x0A) /* TMO target */
				panel_id = LEAD_FL10802_FWVGA_VIDEO_PANEL;
			else
				panel_id = HX8394F_720P_VIDEO_PANEL;
		}

		break;
	default:
		dprintf(CRITICAL, "Display not enabled for %d HW type\n",
			hw_id);
		return PANEL_TYPE_UNKNOWN;
	}

panel_init:
	/*
	 * Update all data structures after 'panel_init' label. Only panel
	 * selection is supposed to happen before that.
	 */
	if (platform_is_sdm439() || platform_is_sdm429() || platform_is_sdm429w()) {
		phy_db->pll_type = DSI_PLL_TYPE_12NM;
		pinfo->lane_config = mdss_dsi_lane_config;
		goto end;
	}

	if (platform_is_msm8956())
		memcpy(panel_regulator_settings,
			dcdc_regulator_settings_hpm, REGULATOR_SIZE);
	else
		memcpy(panel_regulator_settings,
			dcdc_regulator_settings_lpm, REGULATOR_SIZE);
end:
	pinfo->pipe_type = MDSS_MDP_PIPE_TYPE_RGB;
	return init_panel_data(panelstruct, pinfo, phy_db);
}
