static int __init mipi_cmd_novatek_blue_qhd_pt_init(void)
{
	int ret;

#ifdef CONFIG_FB_MSM_MIPI_PANEL_DETECT
	if (msm_fb_detect_client("mipi_cmd_novatek_qhd"))
		return 0;
#endif

	pinfo.xres = 540;
	pinfo.yres = 960;
	pinfo.type = MIPI_CMD_PANEL;
	pinfo.pdest = DISPLAY_1;
	pinfo.wait_cycle = 0;
	pinfo.bpp = 24;
	pinfo.lcdc.h_back_porch = 50;
	pinfo.lcdc.h_front_porch = 50;
	pinfo.lcdc.h_pulse_width = 20;
	pinfo.lcdc.v_back_porch = 11;
	pinfo.lcdc.v_front_porch = 10;
	pinfo.lcdc.v_pulse_width = 5;
	pinfo.lcdc.border_clr = 0;	/* blk */
	pinfo.lcdc.underflow_clr = 0xff;	/* blue */
	pinfo.lcdc.hsync_skew = 0;
	pinfo.bl_max = 255;
	pinfo.bl_min = 1;
	pinfo.fb_num = 2;
	pinfo.clk_rate = 454000000;
	pinfo.is_3d_panel = FB_TYPE_3D_PANEL;
	pinfo.lcd.vsync_enable = TRUE;
	pinfo.lcd.hw_vsync_mode = TRUE;
	pinfo.lcd.refx100 = 6000; /* adjust refx100 to prevent tearing */

	pinfo.mipi.mode = DSI_CMD_MODE;
	pinfo.mipi.dst_format = DSI_CMD_DST_FORMAT_RGB888;
	pinfo.mipi.vc = 0;
	pinfo.mipi.rgb_swap = DSI_RGB_SWAP_BGR;
	pinfo.mipi.data_lane0 = TRUE;
#if defined(NOVATEK_TWO_LANE)
	pinfo.mipi.data_lane1 = TRUE;
#endif
	pinfo.mipi.t_clk_post = 0x22;
	pinfo.mipi.t_clk_pre = 0x3f;
	pinfo.mipi.stream = 0;	/* dma_p */
	pinfo.mipi.mdp_trigger = DSI_CMD_TRIGGER_SW;
	pinfo.mipi.dma_trigger = DSI_CMD_TRIGGER_SW;
	pinfo.mipi.te_sel = 1; /* TE from vsycn gpio */
	pinfo.mipi.interleave_max = 1;
	pinfo.mipi.insert_dcs_cmd = TRUE;
	pinfo.mipi.wr_mem_continue = 0x3c;
	pinfo.mipi.wr_mem_start = 0x2c;
	pinfo.mipi.dsi_phy_db = &dsi_cmd_mode_phy_db;

	ret = mipi_novatek_device_register(&pinfo, MIPI_DSI_PRIM,
						MIPI_DSI_PANEL_WVGA_PT);
	if (ret)
		pr_err("%s: failed to register device!\n", __func__);

	return ret;
}
static int __init mipi_video_novatek_qhd_pt_init(void)
{
	int ret;

#ifdef CONFIG_FB_MSM_MIPI_PANEL_DETECT
	if (msm_fb_detect_client("mipi_video_novatek_qhd"))
		return 0;
#endif

	pinfo.xres = 540;
	pinfo.yres = 960;
	pinfo.type = MIPI_VIDEO_PANEL;
	pinfo.pdest = DISPLAY_1;
	pinfo.wait_cycle = 0;
	pinfo.bpp = 24;
	pinfo.lcdc.h_back_porch = 96;
	pinfo.lcdc.h_front_porch = 32;
	pinfo.lcdc.h_pulse_width = 8;
	pinfo.lcdc.v_back_porch = 16;
	pinfo.lcdc.v_front_porch = 8;
	pinfo.lcdc.v_pulse_width = 1;
	pinfo.lcdc.border_clr = 0;	/* blk */
	pinfo.lcdc.underflow_clr = 0xff;	/* blue */
	pinfo.lcdc.hsync_skew = 0;
	pinfo.bl_max = 15;
	pinfo.bl_min = 1;
	pinfo.fb_num = 2;
	pinfo.clk_rate = 500000000;

	pinfo.mipi.mode = DSI_VIDEO_MODE;
	pinfo.mipi.pulse_mode_hsa_he = TRUE;
	pinfo.mipi.hfp_power_stop = TRUE;
	pinfo.mipi.hbp_power_stop = TRUE;
	pinfo.mipi.hsa_power_stop = TRUE;
	pinfo.mipi.eof_bllp_power_stop = TRUE;
	pinfo.mipi.bllp_power_stop = TRUE;
	pinfo.mipi.traffic_mode = DSI_NON_BURST_SYNCH_PULSE;
	pinfo.mipi.dst_format = DSI_VIDEO_DST_FORMAT_RGB888;
	pinfo.mipi.vc = 0;
	pinfo.mipi.rgb_swap = DSI_RGB_SWAP_BGR;
	pinfo.mipi.data_lane0 = TRUE;
#if defined(NOVATEK_TWO_LANE)
	pinfo.mipi.data_lane1 = TRUE;
#endif
	pinfo.mipi.tx_eot_append = TRUE;
	pinfo.mipi.t_clk_post = 10;
	pinfo.mipi.t_clk_pre = 30;
	pinfo.mipi.stream = 0; /* dma_p */
	pinfo.mipi.mdp_trigger = DSI_CMD_TRIGGER_SW;
	pinfo.mipi.dma_trigger = DSI_CMD_TRIGGER_SW;
	pinfo.mipi.dsi_phy_db = &dsi_video_mode_phy_db;

	ret = mipi_novatek_device_register(&pinfo, MIPI_DSI_PRIM,
						MIPI_DSI_PANEL_WVGA_PT);
	if (ret)
		pr_err("%s: failed to register device!\n", __func__);

	return ret;
}
static int __init mipi_cmd_novatek_sony_hd720p_init(void)
{
	int ret;

	if (msm_fb_detect_client("mipi_cmd_novatek_sony_720p"))
		return 0;

	pinfo.xres = 720;
	pinfo.yres = 1280;
	pinfo.type = MIPI_CMD_PANEL;
	pinfo.pdest = DISPLAY_1;
	pinfo.wait_cycle = 0;
	pinfo.bpp = 24;
	pinfo.lcdc.h_back_porch = 104;
	pinfo.lcdc.h_front_porch = 95;
	pinfo.lcdc.h_pulse_width = 1;
	pinfo.lcdc.v_back_porch = 2;
	pinfo.lcdc.v_front_porch = 6;
	pinfo.lcdc.v_pulse_width = 1;
	pinfo.lcdc.border_clr = 0;	/* blk */
	pinfo.lcdc.underflow_clr = 0xff;	/* blue */
	pinfo.lcdc.hsync_skew = 0;
	pinfo.bl_max = 255;
	pinfo.bl_min = 1;
	pinfo.fb_num = 2;
	pinfo.clk_rate = 454000000;
	pinfo.is_3d_panel = FB_TYPE_3D_PANEL;
	pinfo.lcd.vsync_enable = TRUE;
	pinfo.lcd.hw_vsync_mode = TRUE;
	pinfo.lcd.refx100 = 6000; /* adjust refx100 to prevent tearing */
	pinfo.lcd.v_back_porch = 2;
	pinfo.lcd.v_front_porch = 6;
	pinfo.lcd.v_pulse_width = 1;

	pinfo.mipi.mode = DSI_CMD_MODE;
	pinfo.mipi.dst_format = DSI_CMD_DST_FORMAT_RGB888;
	pinfo.mipi.vc = 0;
	pinfo.mipi.data_lane0 = TRUE;
	pinfo.mipi.esc_byte_ratio = 4;
	pinfo.mipi.data_lane0 = TRUE;
	pinfo.mipi.data_lane1 = TRUE;
	pinfo.mipi.data_lane2 = TRUE;
	pinfo.mipi.t_clk_post = 0x10;
	pinfo.mipi.t_clk_pre = 0x21;
	pinfo.mipi.stream = 0;	/* dma_p */
	pinfo.mipi.mdp_trigger = DSI_CMD_TRIGGER_NONE;
	pinfo.mipi.dma_trigger = DSI_CMD_TRIGGER_SW;
	pinfo.mipi.te_sel = 1; /* TE from vsycn gpio */
	pinfo.mipi.interleave_max = 1;
	pinfo.mipi.insert_dcs_cmd = TRUE;
	pinfo.mipi.wr_mem_continue = 0x3c;
	pinfo.mipi.wr_mem_start = 0x2c;
	pinfo.mipi.dsi_phy_db = &mipi_dsi_sony_panel_id28103_phy_ctrl_720p;

	ret = mipi_novatek_device_register(&pinfo, MIPI_DSI_PRIM,
						MIPI_DSI_PANEL_720P_PT);
	if (ret)
		pr_err("%s: failed to register device!\n", __func__);

	return ret;
}
static int __init mipi_video_novatek_wvga_pt_init(void)
{
	int ret;

	if (msm_fb_detect_client("mipi_video_novatek_wvga"))
		return 0;

	pinfo.xres = 480;
	pinfo.yres = 800;
	pinfo.type = MIPI_VIDEO_PANEL;
	pinfo.pdest = DISPLAY_1;
	pinfo.wait_cycle = 0;
	pinfo.bpp = 24;
	pinfo.width = 56;
	pinfo.height = 93;
	pinfo.camera_backlight = 200;

#if defined (CONFIG_MACH_DUMMY)
    pinfo.lcdc.h_back_porch = 14;
    pinfo.lcdc.h_front_porch = 16;
    pinfo.lcdc.h_pulse_width = 4;
    pinfo.lcdc.v_back_porch = 16;
    pinfo.lcdc.v_front_porch = 20;
    pinfo.lcdc.v_pulse_width = 4;
    pinfo.clk_rate = 312000000;
#else
    pinfo.lcdc.h_back_porch = 10;
    pinfo.lcdc.h_front_porch = 14;
    pinfo.lcdc.h_pulse_width = 4;
    pinfo.lcdc.v_back_porch = 10;
    pinfo.lcdc.v_front_porch = 8;
    pinfo.lcdc.v_pulse_width = 2;
    pinfo.clk_rate = 300000000;
#endif

	pinfo.lcdc.border_clr = 0;	
	pinfo.lcdc.underflow_clr = 0xff;	
	pinfo.lcdc.hsync_skew = 0;
	pinfo.bl_max = 255;
	pinfo.bl_min = 1;
	pinfo.fb_num = 2;

	pinfo.mipi.mode = DSI_VIDEO_MODE;
	pinfo.mipi.pulse_mode_hsa_he = TRUE;
	pinfo.mipi.hfp_power_stop = FALSE;
	pinfo.mipi.hbp_power_stop = FALSE;
	pinfo.mipi.hsa_power_stop = FALSE;
	pinfo.mipi.eof_bllp_power_stop = TRUE;
	pinfo.mipi.bllp_power_stop = TRUE;
	pinfo.mipi.traffic_mode = DSI_NON_BURST_SYNCH_PULSE;
	pinfo.mipi.dst_format = DSI_VIDEO_DST_FORMAT_RGB888;
	pinfo.mipi.vc = 0;
	pinfo.mipi.rgb_swap = DSI_RGB_SWAP_BGR;
	pinfo.mipi.data_lane0 = TRUE;
	pinfo.mipi.data_lane1 = TRUE;
	pinfo.mipi.esc_byte_ratio = 3;

	pinfo.mipi.tx_eot_append = TRUE;
	pinfo.mipi.t_clk_post = 0x04;
	pinfo.mipi.t_clk_pre = 0x1c;
	pinfo.mipi.stream = 0; 
	pinfo.mipi.mdp_trigger = DSI_CMD_TRIGGER_SW;
	pinfo.mipi.dma_trigger = DSI_CMD_TRIGGER_SW;
	pinfo.mipi.frame_rate = 60;

	pinfo.mipi.dsi_phy_db = &dsi_video_mode_phy_db;

	ret = mipi_novatek_device_register(&pinfo, MIPI_DSI_PRIM,
						MIPI_DSI_PANEL_WVGA_PT);
	if (ret)
		pr_err("%s: failed to register device!\n", __func__);

	return ret;
}
static int __init mipi_novatek_blue_720p_pt_init(void)
{
	int ret;

    if (g_A68_hwID < A80_EVB)
    {
        printk("[Display] ++++ A68 panel driver init\n");
        pinfo.xres = 720;
        pinfo.yres = 1280;
#ifdef CONFIG_FB_MSM_MIPI_NOVATEK_CMD_MODE
        pinfo.type = MIPI_CMD_PANEL;
        pinfo.bl_max = 255;
        pinfo.clk_rate = 575000000;
        pinfo.lcd.vsync_enable = TRUE;
        pinfo.lcd.hw_vsync_mode = TRUE;
        pinfo.lcd.refx100 = 5830; /* adjust refx100 to prevent tearing */
        pinfo.lcd.v_back_porch = 4;
        pinfo.lcd.v_front_porch = 14;
        pinfo.lcd.v_pulse_width = 2;

        pinfo.mipi.mode = DSI_CMD_MODE;
        pinfo.mipi.dst_format = DSI_CMD_DST_FORMAT_RGB888;
        pinfo.mipi.mdp_trigger = DSI_CMD_TRIGGER_NONE;
        pinfo.mipi.te_sel = 1; /* TE from vsycn gpio */
        pinfo.mipi.interleave_max = 1;
        pinfo.mipi.insert_dcs_cmd = TRUE;
        pinfo.mipi.wr_mem_continue = 0x3c;
        pinfo.mipi.wr_mem_start = 0x2c;
#elif  defined(CONFIG_FB_MSM_MIPI_NOVATEK_VIDEO_MODE)
        pinfo.type = MIPI_VIDEO_PANEL;
        pinfo.bl_max = 15;
        pinfo.mipi.mode = DSI_VIDEO_MODE;
        pinfo.mipi.pulse_mode_hsa_he = TRUE;
        pinfo.mipi.hfp_power_stop = FALSE;
        pinfo.mipi.hbp_power_stop = FALSE;
        pinfo.mipi.hsa_power_stop = FALSE;
        pinfo.mipi.eof_bllp_power_stop = TRUE;
        pinfo.mipi.bllp_power_stop = TRUE;
        pinfo.mipi.traffic_mode = DSI_NON_BURST_SYNCH_PULSE;
        pinfo.mipi.dst_format = DSI_VIDEO_DST_FORMAT_RGB888;
        pinfo.mipi.rgb_swap = DSI_RGB_SWAP_BGR;
        pinfo.mipi.tx_eot_append = TRUE;
        pinfo.mipi.mdp_trigger = DSI_CMD_TRIGGER_SW;
        pinfo.mipi.frame_rate = 60;
#endif
        pinfo.pdest = DISPLAY_1;
        pinfo.wait_cycle = 0;
        pinfo.bpp = 24;
        pinfo.lcdc.h_back_porch = 96;
        pinfo.lcdc.h_front_porch = 96;
        pinfo.lcdc.h_pulse_width = 8;
        pinfo.lcdc.v_back_porch = 4;
        pinfo.lcdc.v_front_porch = 14;
        pinfo.lcdc.v_pulse_width = 2;
        pinfo.lcdc.border_clr = 0;	/* blk */
        pinfo.lcdc.underflow_clr = 0x00;	/* blue */ //Mickey+++, change internal panel underflow color to black
        pinfo.lcdc.hsync_skew = 0;

        pinfo.bl_min = 1;
        pinfo.fb_num = 2;

        pinfo.mipi.vc = 0;
        pinfo.mipi.data_lane0 = TRUE;
        pinfo.mipi.data_lane1 = TRUE;
        pinfo.mipi.data_lane2 = TRUE;

        pinfo.mipi.t_clk_post = 0x0C;
        pinfo.mipi.t_clk_pre = 0x28;
        pinfo.mipi.stream = 0;	/* dma_p */
        pinfo.mipi.esc_byte_ratio = 4;

        pinfo.mipi.dma_trigger = DSI_CMD_TRIGGER_SW;

        pinfo.mipi.dsi_phy_db = &dsi_720p_phy_db;

//Mickey+++, add for DDS architecture
        pinfo.asus_dds_xres = 1280;
        pinfo.asus_dds_yres = 1280;
        pinfo.asus_pad_xres = 1280;
        pinfo.asus_pad_yres = 800;
        pinfo.asus_pad_dpi = 160;
        pinfo.asus_phone_dpi = 320;
//Mickey---

        ret = mipi_novatek_device_register(&pinfo, MIPI_DSI_PRIM,
                            MIPI_DSI_PANEL_720P_PT);
    }
    else
    {
        printk("[Display] ++++ A80 panel driver init\n");
        pinfo.xres = 1080;
        pinfo.yres = 1920;

        pinfo.type = MIPI_VIDEO_PANEL;
        pinfo.pdest = DISPLAY_1;
        pinfo.wait_cycle = 0;
        pinfo.bpp = 24;
        pinfo.lcdc.h_back_porch = 50;
        pinfo.lcdc.h_front_porch = 160;
        pinfo.lcdc.h_pulse_width = 10;
        pinfo.lcdc.v_back_porch = 4;
        pinfo.lcdc.v_front_porch = 4;
        pinfo.lcdc.v_pulse_width = 2;
        pinfo.lcdc.border_clr = 0;  /* blk */
        pinfo.lcdc.underflow_clr = 0x00;    /* blue */ //Mickey+++, change internal panel underflow color to black
        pinfo.lcdc.hsync_skew = 0;
        pinfo.bl_max = 255;
        pinfo.bl_min = 1;
        pinfo.fb_num = 2;
        pinfo.clk_rate = 905000000;//981560000;

        pinfo.mipi.mode = DSI_VIDEO_MODE;
        pinfo.mipi.pulse_mode_hsa_he = TRUE;
        pinfo.mipi.hfp_power_stop = FALSE;
        pinfo.mipi.hbp_power_stop = FALSE;
        pinfo.mipi.hsa_power_stop = FALSE;
        pinfo.mipi.eof_bllp_power_stop = TRUE;
        pinfo.mipi.bllp_power_stop = TRUE;
        pinfo.mipi.traffic_mode = DSI_NON_BURST_SYNCH_PULSE;
        pinfo.mipi.dst_format = DSI_VIDEO_DST_FORMAT_RGB888;
        pinfo.mipi.vc = 0;
        pinfo.mipi.rgb_swap = DSI_RGB_SWAP_BGR;
        pinfo.mipi.data_lane0 = TRUE;
        pinfo.mipi.data_lane1 = TRUE;
        pinfo.mipi.data_lane2 = TRUE;
        pinfo.mipi.data_lane3 = TRUE;
        pinfo.mipi.tx_eot_append = TRUE;
        pinfo.mipi.t_clk_post = 0x1A;//0x04;
        pinfo.mipi.t_clk_pre = 0x32;//0x1c;
        pinfo.mipi.stream = 0; /* dma_p */
        pinfo.mipi.mdp_trigger = DSI_CMD_TRIGGER_SW;
        pinfo.mipi.dma_trigger = DSI_CMD_TRIGGER_SW;
        pinfo.mipi.frame_rate = 60;
        pinfo.mipi.dsi_phy_db = &dsi_video_mode_phy_db;
        pinfo.mipi.esc_byte_ratio = 7;
    //Mickey+++, add for a80 DDS architecture
        pinfo.asus_dds_xres = 1920;
        pinfo.asus_dds_yres = 1920;
        pinfo.asus_pad_xres = 1920;
//ASUS_BSP: joe1_++: support resolution 1920X1200
        if (g_A68_hwID < A80_SR4)
          pinfo.asus_pad_yres = 1080;
		else
		  pinfo.asus_pad_yres = 1200;
//ASUS_BSP: joe1_--: support resolution 1920X1200
        pinfo.asus_pad_dpi = 240;
        pinfo.asus_phone_dpi = 480;
    //Mickey---
        ret = mipi_novatek_device_register(&pinfo, MIPI_DSI_PRIM,
                            MIPI_DSI_PANEL_WUXGA);
    }

	if (ret)
		pr_err("%s: failed to register device!\n", __func__);

	return ret;
}
static int __init mipi_video_novatek_qhd_pt_init(void)
{
	int ret;

	if (msm_fb_detect_client("mipi_video_novatek_qhd"))
		return 0;

	pinfo.xres =720;//480;// 540;
	pinfo.yres =1280;//800;// 960;

	pinfo.pdest = DISPLAY_1;
	pinfo.wait_cycle = 0;
	pinfo.bpp = 24;
	pinfo.lcdc.h_back_porch =60;
	pinfo.lcdc.h_front_porch =60;
	pinfo.lcdc.h_pulse_width =10;
	pinfo.lcdc.v_back_porch = 11;
	pinfo.lcdc.v_front_porch =8;
	pinfo.lcdc.v_pulse_width =3;
	pinfo.lcd.v_back_porch = 11;
	pinfo.lcd.v_front_porch =8;
	pinfo.lcd.v_pulse_width =3;
	pinfo.lcdc.border_clr = 0;	/* blk */
	pinfo.lcdc.underflow_clr = 0;//0xff;	/* blue */
	pinfo.lcdc.hsync_skew = 0;
#ifdef USE_CABC_PANEL	
	pinfo.bl_max =255;
#else
	pinfo.bl_max =28;
#endif
	pinfo.bl_min = 1;
	pinfo.fb_num = 2;
	//pinfo.clk_rate = 416000000;//418332600;//pan 
#ifdef N9810_USE_CMD_MODE
	pinfo.lcd.vsync_enable = TRUE;
	pinfo.lcd.hw_vsync_mode = TRUE;
	pinfo.lcd.refx100 = 5900; /* adjust refx100 to prevent tearing */
	pinfo.mipi.te_sel = 1; /* TE from vsycn gpio */
	pinfo.mipi.interleave_max = 1;
	pinfo.mipi.insert_dcs_cmd = TRUE;
	pinfo.mipi.wr_mem_continue = 0x3c;
	pinfo.mipi.wr_mem_start = 0x2c;

	pinfo.type =MIPI_CMD_PANEL;
	pinfo.mipi.mode =DSI_CMD_MODE;
	pinfo.mipi.dst_format = DSI_CMD_DST_FORMAT_RGB888;
	pinfo.mipi.mdp_trigger =DSI_CMD_TRIGGER_SW_TE;
#else	//video mode
	pinfo.type =MIPI_VIDEO_PANEL;
	pinfo.mipi.mode = DSI_VIDEO_MODE;
	pinfo.mipi.dst_format = DSI_VIDEO_DST_FORMAT_RGB888;
	pinfo.mipi.mdp_trigger =DSI_CMD_TRIGGER_SW;
#endif
	
	pinfo.mipi.pulse_mode_hsa_he = FALSE;
	pinfo.mipi.hfp_power_stop = FALSE;
	pinfo.mipi.hbp_power_stop = FALSE;
	pinfo.mipi.hsa_power_stop = FALSE;
	pinfo.mipi.eof_bllp_power_stop = TRUE;//nt35590 must set true
	pinfo.mipi.bllp_power_stop = FALSE;//set TURE for esd test
	pinfo.mipi.traffic_mode =DSI_NON_BURST_SYNCH_EVENT;// DSI_NON_BURST_SYNCH_PULSE;
	pinfo.mipi.frame_rate = 60;
	pinfo.mipi.vc = 0;
	//pinfo.mipi.rgb_swap = DSI_RGB_SWAP_RGB;//DSI_RGB_SWAP_BGR;
	pinfo.mipi.data_lane0 = TRUE;
	pinfo.mipi.esc_byte_ratio = 4;

	pinfo.mipi.data_lane1 = TRUE;

	pinfo.mipi.data_lane2 = TRUE;
	pinfo.mipi.data_lane3 = TRUE;
	//pinfo.mipi.tx_eot_append = TRUE;
	pinfo.mipi.t_clk_post =0x20;// 0x04;
	pinfo.mipi.t_clk_pre = 0x2f;//0x1c;
	pinfo.mipi.stream = 0; /* dma_p */
	
	pinfo.mipi.dma_trigger = DSI_CMD_TRIGGER_SW;
	pinfo.mipi.dsi_phy_db = dsi_video_mode_phy_dbs;
	pinfo.mipi.dsi_phy_db_count = ARRAY_SIZE(dsi_video_mode_phy_dbs);

	ret = mipi_novatek_device_register(&pinfo, MIPI_DSI_PRIM,
						MIPI_DSI_PANEL_720P_PT);
	if (ret)
		pr_err("%s: failed to register device!\n", __func__);

	return ret;
}