static int dsi_panel_handler(struct mdss_panel_data *pdata, int enable) { int rc = 0; struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL; pr_debug("dsi_panel_handler enable=%d\n", enable); if (!pdata) return -ENODEV; ctrl_pdata = container_of(pdata, struct mdss_dsi_ctrl_pdata, panel_data); if (enable) { if (!pdata->panel_info.dynamic_switch_pending) { if (pdata->panel_info.type == MIPI_CMD_PANEL) dsi_ctrl_gpio_request(ctrl_pdata); mdss_dsi_panel_reset(pdata, 1); } pdata->panel_info.panel_power_on = 1; if (!pdata->panel_info.dynamic_switch_pending) { rc = ctrl_pdata->on(pdata); if (rc) pr_err("%s: panel on failed!\n", __func__); } if (pdata->panel_info.type == MIPI_CMD_PANEL && pdata->panel_info.dynamic_switch_pending) { dsi_ctrl_gpio_request(ctrl_pdata); mdss_dsi_set_tear_on(ctrl_pdata); } } else { msm_dsi_sw_reset(); if (dsi_intf.op_mode_config) dsi_intf.op_mode_config(DSI_CMD_MODE, pdata); if (pdata->panel_info.dynamic_switch_pending) { pr_info("%s: switching to %s mode\n", __func__, (pdata->panel_info.mipi.mode ? "video" : "command")); if (pdata->panel_info.type == MIPI_CMD_PANEL) { ctrl_pdata->switch_mode(pdata, DSI_VIDEO_MODE); dsi_ctrl_gpio_free(ctrl_pdata); } else if (pdata->panel_info.type == MIPI_VIDEO_PANEL) { ctrl_pdata->switch_mode(pdata, DSI_CMD_MODE); dsi_ctrl_gpio_request(ctrl_pdata); mdss_dsi_set_tear_off(ctrl_pdata); dsi_ctrl_gpio_free(ctrl_pdata); } } if (!pdata->panel_info.dynamic_switch_pending) rc = ctrl_pdata->off(pdata); pdata->panel_info.panel_power_on = 0; if (!pdata->panel_info.dynamic_switch_pending) { if (pdata->panel_info.type == MIPI_CMD_PANEL) dsi_ctrl_gpio_free(ctrl_pdata); mdss_dsi_panel_reset(pdata, 0); } } return rc; }
static int mdss_dsi_hndl_enable_te(struct mdss_dsi_ctrl_pdata *ctrl, int enable) { if (enable) mdss_dsi_set_tear_on(ctrl); else mdss_dsi_set_tear_off(ctrl); return 0; }
static int mdss_dsi_unblank(struct mdss_panel_data *pdata) { int ret = 0; struct mipi_panel_info *mipi; struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL; static int exec_count = 0; pr_info("%s+:\n", __func__); if (pdata == NULL) { pr_err("%s: Invalid input data\n", __func__); return -EINVAL; } ctrl_pdata = container_of(pdata, struct mdss_dsi_ctrl_pdata, panel_data); mipi = &pdata->panel_info.mipi; if (!(ctrl_pdata->ctrl_state & CTRL_STATE_PANEL_INIT)) { ret = ctrl_pdata->on(pdata); if (ret) { pr_err("%s: unable to initialize the panel\n", __func__); return ret; } ctrl_pdata->ctrl_state |= CTRL_STATE_PANEL_INIT; } if (pdata->panel_info.type == MIPI_CMD_PANEL) { if (mipi->vsync_enable && mipi->hw_vsync_mode && gpio_is_valid(ctrl_pdata->disp_te_gpio)) { mdss_dsi_set_tear_on(ctrl_pdata); } } if( pdata->panel_info.cont_splash_enabled && (exec_count == 0) ) { exec_count = 1; } else { if (mipi->force_clk_lane_hs) { u32 tmp; tmp = MIPI_INP((ctrl_pdata->ctrl_base) + 0xac); tmp &= ~(1<<28); MIPI_OUTP((ctrl_pdata->ctrl_base) + 0xac, tmp); wmb(); } } pr_info("%s-:\n", __func__); return ret; }
static int mdss_dsi_unblank(struct mdss_panel_data *pdata) { int ret = 0; struct mipi_panel_info *mipi; struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL; if (pdata == NULL) { pr_err("%s: Invalid input data\n", __func__); return -EINVAL; } ctrl_pdata = container_of(pdata, struct mdss_dsi_ctrl_pdata, panel_data); mipi = &pdata->panel_info.mipi; pr_err("%s+: ctrl=%p ndx=%d cur_blank_state=%d\n", __func__, ctrl_pdata, ctrl_pdata->ndx, pdata->panel_info.blank_state); mdss_dsi_clk_ctrl(ctrl_pdata, DSI_ALL_CLKS, 1); if (pdata->panel_info.blank_state == MDSS_PANEL_BLANK_LOW_POWER) { pr_debug("%s: dsi_unblank with panel always on\n", __func__); if (ctrl_pdata->low_power_config) ret = ctrl_pdata->low_power_config(pdata, false); goto error; } pr_info("ctrl_state = (%d)\n",ctrl_pdata->ctrl_state); if (!(ctrl_pdata->ctrl_state & CTRL_STATE_PANEL_INIT)) { ret = ctrl_pdata->on(pdata); if (ret) { pr_err("%s: unable to initialize the panel\n", __func__); goto error; } ctrl_pdata->ctrl_state |= CTRL_STATE_PANEL_INIT; } #if 0 /*It is not needed on oled cmd mode panel, The on seq has tear on cmd */ if ((pdata->panel_info.type == MIPI_CMD_PANEL) && mipi->vsync_enable && mipi->hw_vsync_mode) mdss_dsi_set_tear_on(ctrl_pdata); #endif error: mdss_dsi_clk_ctrl(ctrl_pdata, DSI_ALL_CLKS, 0); pr_err("%s-:\n", __func__); return ret; }
static int dsi_panel_handler(struct mdss_panel_data *pdata, int enable) { int rc = 0; struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL; pr_debug("dsi_panel_handler enable=%d\n", enable); if (!pdata) return -ENODEV; ctrl_pdata = container_of(pdata, struct mdss_dsi_ctrl_pdata, panel_data); if (enable && (pdata->panel_info.panel_power_state == MDSS_PANEL_POWER_OFF)) { if (!pdata->panel_info.dynamic_switch_pending) { mdss_dsi_panel_reset(pdata, 1); rc = ctrl_pdata->on(pdata); if (rc) pr_err("dsi_panel_handler panel on failed %d\n", rc); } pdata->panel_info.panel_power_state = MDSS_PANEL_POWER_ON; if (pdata->panel_info.type == MIPI_CMD_PANEL) mdss_dsi_set_tear_on(ctrl_pdata); } else if (!enable && (pdata->panel_info.panel_power_state == MDSS_PANEL_POWER_ON)) { msm_dsi_sw_reset(); if (dsi_intf.op_mode_config) dsi_intf.op_mode_config(DSI_CMD_MODE, pdata); if (pdata->panel_info.dynamic_switch_pending) { pr_info("%s: switching to %s mode\n", __func__, (pdata->panel_info.mipi.mode ? "video" : "command")); if (pdata->panel_info.type == MIPI_CMD_PANEL) { ctrl_pdata->switch_mode(pdata, DSI_VIDEO_MODE); } else if (pdata->panel_info.type == MIPI_VIDEO_PANEL) { ctrl_pdata->switch_mode(pdata, DSI_CMD_MODE); mdss_dsi_set_tear_off(ctrl_pdata); } } pdata->panel_info.panel_power_state = MDSS_PANEL_POWER_OFF; if (!pdata->panel_info.dynamic_switch_pending) { rc = ctrl_pdata->off(pdata); mdss_dsi_panel_reset(pdata, 0); } } return rc; }
static int mdss_dsi_unblank(struct mdss_panel_data *pdata) { int ret = 0; struct mipi_panel_info *mipi; struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL; pr_debug("%s+:\n", __func__); if (pdata == NULL) { pr_err("%s: Invalid input data\n", __func__); return -EINVAL; } ctrl_pdata = container_of(pdata, struct mdss_dsi_ctrl_pdata, panel_data); mipi = &pdata->panel_info.mipi; mdss_dsi_clk_ctrl(ctrl_pdata, DSI_ALL_CLKS, 1); if (!(ctrl_pdata->ctrl_state & CTRL_STATE_PANEL_INIT)) { if (!pdata->panel_info.dynamic_switch_pending) { ret = ctrl_pdata->on(pdata); if (ret) { pr_err("%s: unable to initialize the panel\n", __func__); goto error; } } ctrl_pdata->ctrl_state |= CTRL_STATE_PANEL_INIT; } //+++ #ifdef CONFIG_ZTEMT_LCD_DISP_ENHANCE zte_disp_enhance(); #endif //--- if ((pdata->panel_info.type == MIPI_CMD_PANEL) && mipi->vsync_enable && mipi->hw_vsync_mode) mdss_dsi_set_tear_on(ctrl_pdata); error: mdss_dsi_clk_ctrl(ctrl_pdata, DSI_ALL_CLKS, 0); pr_debug("%s-:\n", __func__); return ret; }
static int mdss_dsi_unblank(struct mdss_panel_data *pdata) { int ret = 0; struct mipi_panel_info *mipi; struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL; pr_debug("%s+:\n", __func__); if (pdata == NULL) { pr_err("%s: Invalid input data\n", __func__); return -EINVAL; } ctrl_pdata = container_of(pdata, struct mdss_dsi_ctrl_pdata, panel_data); mipi = &pdata->panel_info.mipi; if (!(ctrl_pdata->ctrl_state & CTRL_STATE_PANEL_INIT)) { ret = ctrl_pdata->on(pdata); if (ret) { pr_err("%s: unable to initialize the panel\n", __func__); return ret; } ctrl_pdata->ctrl_state |= CTRL_STATE_PANEL_INIT; } #ifdef CONFIG_ZTEMT_LCD_DISP_ENHANCE zte_disp_enhance(); #endif if (pdata->panel_info.type == MIPI_CMD_PANEL) { if (mipi->vsync_enable && mipi->hw_vsync_mode && gpio_is_valid(ctrl_pdata->disp_te_gpio)) { mdss_dsi_set_tear_on(ctrl_pdata); } } pr_debug("%s-:\n", __func__); return ret; }
static int mdss_dsi_unblank(struct mdss_panel_data *pdata) { int ret = 0; struct mipi_panel_info *mipi; struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL; pr_info("%s+:\n", __func__); if (pdata == NULL) { pr_err("%s: Invalid input data\n", __func__); return -EINVAL; } ctrl_pdata = container_of(pdata, struct mdss_dsi_ctrl_pdata, panel_data); mipi = &pdata->panel_info.mipi; if (!(ctrl_pdata->ctrl_state & CTRL_STATE_PANEL_INIT)) { ret = ctrl_pdata->on(pdata); if (ret) { pr_err("%s: unable to initialize the panel\n", __func__); return ret; } ctrl_pdata->ctrl_state |= CTRL_STATE_PANEL_INIT; } if (pdata->panel_info.type == MIPI_CMD_PANEL) { if (mipi->vsync_enable && mipi->hw_vsync_mode && gpio_is_valid(ctrl_pdata->disp_te_gpio)) { mdss_dsi_set_tear_on(ctrl_pdata); } } #ifdef CONFIG_MACH_LGE if (mipi->force_clk_lane_hs) { if (ctrl_pdata->shared_pdata.broadcast_enable) { if (left_dsi_ctrl == NULL){ pr_err("%s, Left dsi ctrl is null\n", __func__); return -EINVAL; } if (ctrl_pdata->ndx == 1) { u32 tmp; tmp = MIPI_INP((ctrl_pdata->ctrl_base) + 0xac); tmp |= (1<<28); MIPI_OUTP((ctrl_pdata->ctrl_base) + 0xac, tmp); tmp = MIPI_INP((left_dsi_ctrl->ctrl_base) + 0xac); tmp |= (1<<28); MIPI_OUTP((left_dsi_ctrl->ctrl_base) + 0xac, tmp); } else { pr_debug("%s, Left DSI ctrl\n", __func__); } } else { u32 tmp; tmp = MIPI_INP((ctrl_pdata->ctrl_base) + 0xac); tmp |= (1<<28); MIPI_OUTP((ctrl_pdata->ctrl_base) + 0xac, tmp); } } #endif pr_info("%s-:\n", __func__); return ret; }