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); }
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(); }
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(); }