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