Ejemplo n.º 1
0
static int __init mipi_video_sony_wxga_init(void)
{
    int ret;

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

/* Try-case
ref-2. 20110420, kkcho
3030->3035 qualcomm-patch이후, 
mipi_dsi.c의 mipi_dsi_phy_pll_config(panel_info->clk_rate);  코드를 막아야 함. 
그렇지 않으면.. clk value변경으로 화면 안나옴. 
*/
        pinfo.xres = 800;
        pinfo.yres = 1280;
		/*
		 *
		 * Panel's Horizontal input timing requirement is to
		 * include dummy(pad) data of 200 clk in addition to
		 * width and porch/sync width values
		 */
#if defined (MIPI_CLOCK_500MBPS)
		pinfo.lcdc.xres_pad = 252;
		pinfo.lcdc.yres_pad = 0;
#endif
        pinfo.type = MIPI_VIDEO_PANEL;
        pinfo.pdest = DISPLAY_1;
        pinfo.wait_cycle = 0;
        pinfo.bpp = 24;
#if defined (MIPI_CLOCK_500MBPS) 
        pinfo.lcdc.h_back_porch = 10;
        pinfo.lcdc.h_front_porch = 16;
        pinfo.lcdc.h_pulse_width = 2;
        pinfo.lcdc.v_back_porch = 2;
        pinfo.lcdc.v_front_porch = 2;
        pinfo.lcdc.v_pulse_width = 2;
#endif
        pinfo.lcdc.border_clr = 0;	/* blk */
        pinfo.lcdc.underflow_clr = 0x00;	/* black */
        pinfo.lcdc.hsync_skew = 0;
        pinfo.bl_max = 28;//24;//BL_MAX;
        pinfo.bl_min = 1;
        pinfo.fb_num = 2;
#if defined (MIPI_CLOCK_500MBPS)
        pinfo.clk_rate = 500000000;
#endif
		//pinfo.lcd.vsync_enable = FALSE;
		//pinfo.lcd.hw_vsync_mode = FALSE;

        pinfo.mipi.mode = DSI_VIDEO_MODE;
#if defined (MIPI_CLOCK_500MBPS)
        pinfo.mipi.pulse_mode_hsa_he = TRUE;
        pinfo.mipi.hfp_power_stop = FALSE;
        pinfo.mipi.hbp_power_stop = FALSE;
        pinfo.mipi.hsa_power_stop = TRUE;
        pinfo.mipi.eof_bllp_power_stop = TRUE;
        pinfo.mipi.bllp_power_stop = TRUE;
        pinfo.mipi.traffic_mode = DSI_BURST_MODE;
#endif
        pinfo.mipi.dst_format = DSI_VIDEO_DST_FORMAT_RGB888;
        pinfo.mipi.vc = 0;
        pinfo.mipi.rgb_swap = DSI_RGB_SWAP_RGB;
        pinfo.mipi.data_lane0 = TRUE;
        pinfo.mipi.data_lane1 = TRUE;
        pinfo.mipi.data_lane2 = TRUE;
        pinfo.mipi.data_lane3 = TRUE;
#if defined (MIPI_CLOCK_500MBPS)
        //500Mbps
	    pinfo.mipi.t_clk_post = 0x22;
		pinfo.mipi.t_clk_pre = 0x30;
	    //pinfo.mipi.t_clk_pre = 0x41;
        //490Mbps
	    //pinfo.mipi.t_clk_post = 0x22; 
	    //pinfo.mipi.t_clk_pre = 0x40;	    
#endif
        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;

	    pinfo.mipi.frame_rate = 60;
		pinfo.lcd.refx100 = 6000; /* 2011.07.29 lived */

        ret = mipi_sony_device_register(&pinfo, MIPI_DSI_PRIM, MIPI_DSI_PANEL_WVGA);
        if (ret)
			printk(KERN_ERR "%s: failed to register device!\n", __func__);

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

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

    pinfo.xres = 800;
    pinfo.yres = 1280;

	/*
	 *
	 * Panel's Horizontal input timing requirement is to
	 * include dummy(pad) data of 200 clk in addition to
	 * width and porch/sync width values
	 */
	//pinfo.mipi.xres_pad = 200;
	//pinfo.mipi.yres_pad = 0;

	pinfo.mipi.xres_pad = 0;
	pinfo.mipi.yres_pad = 0;

	pinfo.type = MIPI_VIDEO_PANEL;
	pinfo.pdest = DISPLAY_1;
	pinfo.wait_cycle = 0;
	pinfo.bpp = 24;
    
    pinfo.lcdc.h_back_porch = 10;
    pinfo.lcdc.h_front_porch = 16;
    pinfo.lcdc.h_pulse_width = 2;
    pinfo.lcdc.v_back_porch = 2;
    pinfo.lcdc.v_front_porch = 2;
    pinfo.lcdc.v_pulse_width = 2;
    
	pinfo.lcdc.border_clr = 0;	/* blk */
	pinfo.lcdc.underflow_clr = 0xff;	/* blue */
	pinfo.lcdc.hsync_skew = 0;
	pinfo.bl_max = 16;
	pinfo.bl_min = 1;
	pinfo.fb_num = 2;
#if defined  MIPI_CLOCK_450MBPS
    pinfo.clk_rate = 450000000;
#elif defined MIPI_CLOCK_500MBPS
    pinfo.clk_rate = 500000000;
#endif
	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 = TRUE;
    pinfo.mipi.eof_bllp_power_stop = TRUE;
    pinfo.mipi.bllp_power_stop = TRUE;
    pinfo.mipi.traffic_mode = DSI_BURST_MODE; 
	pinfo.mipi.dst_format = DSI_VIDEO_DST_FORMAT_RGB888;
	pinfo.mipi.vc = 0;
	pinfo.mipi.rgb_swap = DSI_RGB_SWAP_RGB;
    pinfo.mipi.data_lane0 = TRUE;
    pinfo.mipi.data_lane1 = TRUE;
    pinfo.mipi.data_lane2 = TRUE;
    pinfo.mipi.data_lane3 = TRUE;
#if defined MIPI_CLOCK_450MBPS
    pinfo.mipi.t_clk_post = 0x21; 
	pinfo.mipi.t_clk_pre = 0x2f;
#elif defined MIPI_CLOCK_500MBPS
	pinfo.mipi.t_clk_post = 0x21; 
	pinfo.mipi.t_clk_pre = 0x30;
#endif
	pinfo.mipi.stream = 0; /* dma_p */
	pinfo.mipi.mdp_trigger = 0;
	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.tx_eot_append = TRUE;

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

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

	printk(KERN_INFO "%s: panel info intializing!\n",__func__);

	pinfo.xres = 720;
	pinfo.yres = 1280;

	pinfo.type = MIPI_CMD_PANEL;
	pinfo.pdest = DISPLAY_1;
	pinfo.wait_cycle = 0;
	pinfo.bpp = 24;

	pinfo.lcdc.border_clr = 0;	/* blk */
	pinfo.lcdc.underflow_clr = 0xff;	/* blue */
	pinfo.lcdc.hsync_skew = 0;
	pinfo.bl_max = 255; /*16;*/
	pinfo.bl_min = 1;
	pinfo.fb_num = 2;

#ifdef CONFIG_MIPI_CLOCK_450MBPS
	pinfo.clk_rate = 450000000;
#else
	pinfo.clk_rate = 500000000;
#endif	
	pinfo.lcd.vsync_enable = TRUE;
	pinfo.lcd.hw_vsync_mode = TRUE;
	pinfo.lcd.refx100 = 6700; /* adjust refx100 to prevent tearing */

#if 0
	pinfo.lcdc.h_back_porch = 18;
	pinfo.lcdc.h_front_porch = 156;
	pinfo.lcdc.h_pulse_width = 3;
	pinfo.lcdc.v_back_porch = 3;
	pinfo.lcdc.v_front_porch = 5;
	pinfo.lcdc.v_pulse_width = 2;
#else
	pinfo.lcd.v_back_porch = 1;
	pinfo.lcd.v_front_porch =1;
	pinfo.lcd.v_pulse_width = 2;
#endif
	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_RGB;
	pinfo.mipi.data_lane0 = TRUE;
	pinfo.mipi.data_lane1 = TRUE;
	pinfo.mipi.data_lane2 = TRUE;
	pinfo.mipi.data_lane3 = TRUE;


#ifdef CONFIG_MIPI_CLOCK_450MBPS
	pinfo.mipi.t_clk_post = 0x21;
	pinfo.mipi.t_clk_pre = 0x2f;
#else
	pinfo.mipi.t_clk_post = 0x21;
	pinfo.mipi.t_clk_pre = 0x30;
#endif
	pinfo.mipi.stream = 0;	
	pinfo.mipi.mdp_trigger = DSI_CMD_TRIGGER_NONE;
	pinfo.mipi.dma_trigger = DSI_CMD_TRIGGER_SW;
	pinfo.mipi.frame_rate = 62;
	pinfo.mipi.te_sel = 1;
	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.esc_byte_ratio = 6;
	pinfo.mipi.dsi_phy_db = &dsi_cmd_mode_phy_db;

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

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

	if (msm_fb_detect_client("mipi_cmd_sony_wvga"))
		return 0;
	MSM_FB_INFO("[DISP] panel: mipi_cmd_sony_wvga\n");

	pinfo.xres = 480;
	pinfo.yres = 800;
	pinfo.type = MIPI_CMD_PANEL;
	pinfo.pdest = DISPLAY_1;
	pinfo.wait_cycle = 0;
	pinfo.bpp = 24;
	pinfo.lcdc.h_back_porch = 2;
	pinfo.lcdc.h_front_porch = 2;
	pinfo.lcdc.h_pulse_width = 2;
	pinfo.lcdc.v_back_porch = 2;
	pinfo.lcdc.v_front_porch = 2;
	pinfo.lcdc.v_pulse_width = 2;
	pinfo.lcdc.border_clr = 0;	/* blk */
	pinfo.lcdc.underflow_clr = 0xff;	/* blue */
	pinfo.lcdc.hsync_skew = 0;
	pinfo.lcd.v_back_porch = 2;
	pinfo.lcd.v_front_porch = 2;
	pinfo.lcd.v_pulse_width = 2;
	pinfo.bl_max = 255;
	pinfo.bl_min = 1;
	pinfo.fb_num = 2;
	pinfo.clk_rate = 499000000;
	pinfo.lcd.vsync_enable = TRUE;
	pinfo.lcd.hw_vsync_mode = TRUE;
	pinfo.lcd.refx100 = 6500; /* 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_RGB;
	pinfo.mipi.data_lane0 = TRUE;

	pinfo.mipi.t_clk_post = 0x20;
	pinfo.mipi.t_clk_pre = 0x2c;
	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;
	pinfo.mipi.tx_eot_append = 0x01;
	pinfo.mipi.rx_eot_ignore = 0;
	pinfo.mipi.dlane_swap = 0x01;

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

	return ret;
}