/* * mdss_dsi_cmds_tx: * thread context only */ int mdss_dsi_cmds_tx(struct mdss_dsi_ctrl_pdata *ctrl, struct dsi_cmd_desc *cmds, int cnt) { u32 dsi_ctrl, data; int video_mode, ret = 0; u32 left_dsi_ctrl = 0; bool left_ctrl_restore = false; if (ctrl->shared_pdata.broadcast_enable) { if (ctrl->ndx == DSI_CTRL_0) { pr_debug("%s: Broadcast mode. 1st ctrl\n", __func__); return 0; } } if (ctrl->shared_pdata.broadcast_enable) { if ((ctrl->ndx == DSI_CTRL_1) && (left_ctrl_pdata != NULL)) { left_dsi_ctrl = MIPI_INP(left_ctrl_pdata->ctrl_base + 0x0004); video_mode = left_dsi_ctrl & 0x02; /* VIDEO_MODE_EN */ if (video_mode) { data = left_dsi_ctrl | 0x04; /* CMD_MODE_EN */ MIPI_OUTP(left_ctrl_pdata->ctrl_base + 0x0004, data); left_ctrl_restore = true; } } } /* turn on cmd mode * for video mode, do not send cmds more than * one pixel line, since it only transmit it * during BLLP. */ dsi_ctrl = MIPI_INP((ctrl->ctrl_base) + 0x0004); video_mode = dsi_ctrl & 0x02; /* VIDEO_MODE_EN */ if (video_mode) { data = dsi_ctrl | 0x04; /* CMD_MODE_EN */ MIPI_OUTP((ctrl->ctrl_base) + 0x0004, data); } ret = mdss_dsi_cmds2buf_tx(ctrl, cmds, cnt); if (IS_ERR_VALUE(ret)) { pr_err("%s: failed to call\n", __func__); cnt = -EINVAL; } if (left_ctrl_restore) MIPI_OUTP(left_ctrl_pdata->ctrl_base + 0x0004, left_dsi_ctrl); /*restore */ if (video_mode) MIPI_OUTP((ctrl->ctrl_base) + 0x0004, dsi_ctrl); /* restore */ return cnt; }
/* * mdss_dsi_cmds_tx: * thread context only */ int mdss_dsi_cmds_tx(struct mdss_dsi_ctrl_pdata *ctrl, struct dsi_cmd_desc *cmds, int cnt) { int ret = 0; struct mdss_dsi_ctrl_pdata *mctrl = NULL; /* * Turn on cmd mode in order to transmit the commands. * For video mode, do not send cmds more than one pixel line, * since it only transmit it during BLLP. */ if (mdss_dsi_sync_wait_enable(ctrl)) { if (mdss_dsi_sync_wait_trigger(ctrl)) { mctrl = mdss_dsi_get_other_ctrl(ctrl); if (!mctrl) { pr_warn("%s: sync_wait, NULL at other control\n", __func__); goto do_send; } mctrl->cmd_cfg_restore = __mdss_dsi_cmd_mode_config(mctrl, 1); } else if (!ctrl->do_unicast) { /* broadcast cmds, let cmd_trigger do it */ return 0; } } pr_debug("%s: ctrl=%d do_unicast=%d\n", __func__, ctrl->ndx, ctrl->do_unicast); do_send: ctrl->cmd_cfg_restore = __mdss_dsi_cmd_mode_config(ctrl, 1); ret = mdss_dsi_cmds2buf_tx(ctrl, cmds, cnt); if (IS_ERR_VALUE(ret)) { pr_err("%s: failed to call\n", __func__); cnt = -EINVAL; } if (!ctrl->do_unicast) { if (mctrl && mctrl->cmd_cfg_restore) { __mdss_dsi_cmd_mode_config(mctrl, 0); mctrl->cmd_cfg_restore = false; } if (ctrl->cmd_cfg_restore) { __mdss_dsi_cmd_mode_config(ctrl, 0); ctrl->cmd_cfg_restore = false; } } return cnt; }
int mdss_dsi_cmds_tx(struct mdss_dsi_ctrl_pdata *ctrl, struct dsi_cmd_desc *cmds, int cnt) { u32 dsi_ctrl, data; int video_mode, ret = 0; u32 left_dsi_ctrl = 0; bool left_ctrl_restore = false; if (ctrl->shared_pdata.broadcast_enable) { if (ctrl->ndx == DSI_CTRL_0) { pr_debug("%s: Broadcast mode. 1st ctrl\n", __func__); return 0; } } if (ctrl->shared_pdata.broadcast_enable) { if ((ctrl->ndx == DSI_CTRL_1) && (left_ctrl_pdata != NULL)) { left_dsi_ctrl = MIPI_INP(left_ctrl_pdata->ctrl_base + 0x0004); video_mode = left_dsi_ctrl & 0x02; if (video_mode) { data = left_dsi_ctrl | 0x04; MIPI_OUTP(left_ctrl_pdata->ctrl_base + 0x0004, data); left_ctrl_restore = true; } } } dsi_ctrl = MIPI_INP((ctrl->ctrl_base) + 0x0004); video_mode = dsi_ctrl & 0x02; if (video_mode) { data = dsi_ctrl | 0x04; MIPI_OUTP((ctrl->ctrl_base) + 0x0004, data); } ret = mdss_dsi_cmds2buf_tx(ctrl, cmds, cnt); if (IS_ERR_VALUE(ret)) { pr_err("%s: failed to call\n", __func__); cnt = -EINVAL; } if (left_ctrl_restore) MIPI_OUTP(left_ctrl_pdata->ctrl_base + 0x0004, left_dsi_ctrl); if (video_mode) MIPI_OUTP((ctrl->ctrl_base) + 0x0004, dsi_ctrl); return cnt; }
/* * mdss_dsi_cmds_tx: * thread context only */ int mdss_dsi_cmds_tx(struct mdss_dsi_ctrl_pdata *ctrl, struct dsi_cmd_desc *cmds, int cnt) { int ret = 0; bool ctrl_restore = false, mctrl_restore = false; struct mdss_dsi_ctrl_pdata *mctrl = NULL; /* * In broadcast mode, the configuration for master controller * would be done when the slave controller is configured */ if (mdss_dsi_is_master_ctrl(ctrl)) { pr_debug("%s: Broadcast mode enabled. skipping config for ctrl%d\n", __func__, ctrl->ndx); return 0; } /* * Turn on cmd mode in order to transmit the commands. * For video mode, do not send cmds more than one pixel line, * since it only transmit it during BLLP. * Ensure that for slave controller, master is also configured */ if (mdss_dsi_is_slave_ctrl(ctrl)) { mctrl = mdss_dsi_get_master_ctrl(); if (!mctrl) pr_warn("%s: Unable to get master control\n", __func__); else mctrl_restore = __mdss_dsi_cmd_mode_config(mctrl, 1); } ctrl_restore = __mdss_dsi_cmd_mode_config(ctrl, 1); ret = mdss_dsi_cmds2buf_tx(ctrl, cmds, cnt); if (IS_ERR_VALUE(ret)) { pr_err("%s: failed to call\n", __func__); cnt = -EINVAL; } if (mctrl_restore) __mdss_dsi_cmd_mode_config(mctrl, 0); if (ctrl_restore) __mdss_dsi_cmd_mode_config(ctrl, 0); return cnt; }
pr_warn("%s: Unable to get master control\n", __func__); #ifdef CONFIG_MACH_LGE else{ mdelay(5); mctrl_restore = __mdss_dsi_cmd_mode_config(mctrl, 1); } #else else mctrl_restore = __mdss_dsi_cmd_mode_config(mctrl, 1); #endif } ctrl_restore = __mdss_dsi_cmd_mode_config(ctrl, 1); ret = mdss_dsi_cmds2buf_tx(ctrl, cmds, cnt); if (IS_ERR_VALUE(ret)) { pr_err("%s: failed to call\n", __func__); cnt = -EINVAL; } if (mctrl_restore) __mdss_dsi_cmd_mode_config(mctrl, 0); if (ctrl_restore) __mdss_dsi_cmd_mode_config(ctrl, 0); return cnt; } /* MIPI_DSI_MRPS, Maximum Return Packet Size */