Пример #1
0
void hdmi_phy_reset(void)
{
	unsigned int phy_reset_polarity = 0x0;
	unsigned int pll_reset_polarity = 0x0;

	unsigned int val = HDMI_INP_ND(HDMI_PHY_CTRL);

	phy_reset_polarity = val >> 3 & 0x1;
	pll_reset_polarity = val >> 1 & 0x1;

	if (phy_reset_polarity == 0)
		HDMI_OUTP(HDMI_PHY_CTRL, val | SW_RESET);
	else
		HDMI_OUTP(HDMI_PHY_CTRL, val & (~SW_RESET));

	if (pll_reset_polarity == 0)
		HDMI_OUTP(HDMI_PHY_CTRL, val | SW_RESET_PLL);
	else
		HDMI_OUTP(HDMI_PHY_CTRL, val & (~SW_RESET_PLL));

#ifdef CONFIG_SHLCDC_BOARD /* CUST_ID_00048 */
	mipi_sharp_delay_us(100000);
#else	/* CONFIG_SHLCDC_BOARD */
	msleep(100);
#endif	/* CONFIG_SHLCDC_BOARD */

	if (phy_reset_polarity == 0)
		HDMI_OUTP(HDMI_PHY_CTRL, val & (~SW_RESET));
	else
		HDMI_OUTP(HDMI_PHY_CTRL, val | SW_RESET);

	if (pll_reset_polarity == 0)
		HDMI_OUTP(HDMI_PHY_CTRL, val & (~SW_RESET_PLL));
	else
		HDMI_OUTP(HDMI_PHY_CTRL, val | SW_RESET_PLL);
}
Пример #2
0
void mipi_dsi_phy_init(int panel_ndx, struct msm_panel_info const *panel_info,
	int target_type)
{
	struct mipi_dsi_phy_ctrl *pd;
	int i, off;

	MIPI_OUTP(MIPI_DSI_BASE + 0x128, 0x0001);/* start phy sw reset */
	wmb();
#ifdef CONFIG_SHLCDC_BOARD /* CUST_ID_00049 */ /* CUST_ID_00082 */
	mipi_sharp_delay_us(1);
#else	/* CONFIG_SHLCDC_BOARD */
	usleep(1);
#endif	/* CONFIG_SHLCDC_BOARD */
	MIPI_OUTP(MIPI_DSI_BASE + 0x128, 0x0000);/* end phy w reset */
	wmb();
#ifdef CONFIG_SHLCDC_BOARD /* CUST_ID_00049 */ /* CUST_ID_00082 */
	mipi_sharp_delay_us(1);
#else	/* CONFIG_SHLCDC_BOARD */
	usleep(1);
#endif	/* CONFIG_SHLCDC_BOARD */
	MIPI_OUTP(MIPI_DSI_BASE + 0x500, 0x0003);/* regulator_ctrl_0 */
	MIPI_OUTP(MIPI_DSI_BASE + 0x504, 0x0001);/* regulator_ctrl_1 */
	MIPI_OUTP(MIPI_DSI_BASE + 0x508, 0x0001);/* regulator_ctrl_2 */
	MIPI_OUTP(MIPI_DSI_BASE + 0x50c, 0x0000);/* regulator_ctrl_3 */
	MIPI_OUTP(MIPI_DSI_BASE + 0x510, 0x0100);/* regulator_ctrl_4 */

	MIPI_OUTP(MIPI_DSI_BASE + 0x4b0, 0x04);/* DSIPHY_LDO_CNTRL */

	pd = (panel_info->mipi).dsi_phy_db;

	off = 0x0480;	/* strength 0 - 2 */
	for (i = 0; i < 3; i++) {
		MIPI_OUTP(MIPI_DSI_BASE + off, pd->strength[i]);
		wmb();
		off += 4;
	}

	off = 0x0470;	/* ctrl 0 - 3 */
	for (i = 0; i < 4; i++) {
		MIPI_OUTP(MIPI_DSI_BASE + off, pd->ctrl[i]);
		wmb();
		off += 4;
	}

	off = 0x0500;	/* regulator ctrl 0 - 4 */
	for (i = 0; i < 5; i++) {
		MIPI_OUTP(MIPI_DSI_BASE + off, pd->regulator[i]);
		wmb();
		off += 4;
	}
	mipi_dsi_calibration();
	mipi_dsi_lane_cfg(); /* lane cfgs */
	mipi_dsi_bist_ctrl(); /* bist ctrl */

	off = 0x0204;	/* pll ctrl 1 - 19, skip 0 */
	for (i = 1; i < 20; i++) {
		MIPI_OUTP(MIPI_DSI_BASE + off, pd->pll[i]);
		wmb();
		off += 4;
	}

#ifndef CONFIG_SHLCDC_BOARD /* CUST_ID_00005 */
	if (panel_info)
		mipi_dsi_phy_pll_config(panel_info->clk_rate);
#endif /* CONFIG_SHLCDC_BOARD */

	/* pll ctrl 0 */
	MIPI_OUTP(MIPI_DSI_BASE + 0x200, pd->pll[0]);
	wmb();

	off = 0x0440;	/* phy timing ctrl 0 - 11 */
	for (i = 0; i < 12; i++) {
		MIPI_OUTP(MIPI_DSI_BASE + off, pd->timing[i]);
		wmb();
		off += 4;
	}

	if (target_type == 1)
		mipi_dsi_configure_serdes();
}
Пример #3
0
void msm_lcd_recovery(void)
{
	struct msm_fb_data_type *mfd;
	struct fb_info *info = NULL;
	int ret;
	int i;
	int vsync_status;

	suspended_recovery_flg = 0;

	if (!num_registered_fb){
		mipi_sharp_lcd_init_det_info();
		return;
	}
	info = registered_fb[0];
	if (!info){
		mipi_sharp_lcd_init_det_info();
		return;
	}

	
	lock_recovery();
    if(mipi_dsi_get_err_contention_lp1_flag() == 3) {
        SHLCDC_ERRLOG_REC(FB,LCD,MSM_FB_KERL,EEVENTID_FB_RECOVERY_ERR,0);
        MSM_FB_WARNING("msm_lcd_recovery already retry over. return\n");
    	unlock_recovery();
        return;
    }

    mfd = (struct msm_fb_data_type *)info->par;

    if(!mfd->panel_power_on) {
        SHLCDC_ERRLOG_REC(FB,LCD,MSM_FB_KERL,EEVENTID_FB_RECOVERY_ERR,1);
        MSM_FB_WARNING("msm_lcd_recovery already suspend. return\n");
        suspended_recovery_flg = 1;
        unlock_recovery();
        return;
    }

	mipi_sharp_stat_inc(SHDISP_STAT_INC_RECOVERY);

	mdp_clk_ctrl(1);

	vsync_status = mdp4_overlay_vsync_get_status();

	if(vsync_status){
		ret = mdp4_overlay_vsync_ctrl(info, 0);
	}

	SHLCDC_EVENTLOG_REC(FB,LCD,MSM_FB_KERL,EEVENTID_FB_RECOVERY,0);

	MSM_FB_WARNING("msm_lcd_recovery start\n");

	lcd_recovering = LCD_RECOVERY_ACTIVE;

	for (i=0; i<LCD_RECOVERY_LOOP_MAX; i++) {

		
		msm_fb_suspend_sub_recovery(mfd);
		
		
		mipi_sharp_delay_us(40000);
	
		
		shdisp_api_do_recovery();

		
		msm_fb_resume_sub_recovery(mfd);

		msm_fb_resume_sub_recovery_phase2(info);
		ret = shdisp_api_check_recovery();

		
		if (ret == SHDISP_RESULT_SUCCESS) {
			
			lcd_recovering = LCD_RECOVERY_STOP;
			
			mipi_sharp_lcd_init_det_info();

			SHLCDC_EVENTLOG_REC(FB,LCD,MSM_FB_KERL,EEVENTID_FB_RECOVERY,1);

			MSM_FB_WARNING("msm_lcd_recovery completed\n");

			if(vsync_status){
				ret = mdp4_overlay_vsync_ctrl(info, 1);
			}

			mdp_clk_ctrl(0);
			
			unlock_recovery();
			return;
		}
	}

	
	
	

	lcd_recovering = LCD_RECOVERY_STOP;

    if(shdisp_api_get_mipi_dsi_det_recovery_flag()) {
        mipi_dsi_clr_err_int_mask0_b25();
    }

	SHLCDC_ERRLOG_REC(FB,LCD,MSM_FB_KERL,EEVENTID_FB_RECOVERY_OVER,0);

	MSM_FB_ERR("msm_lcd_recovery retry over\n");

	
	unlock_recovery();

}