Loading drivers/gpu/drm/msm/dsi-staging/dsi_ctrl.c +2 −2 Original line number Diff line number Diff line Loading @@ -420,9 +420,9 @@ bool dsi_ctrl_validate_host_state(struct dsi_ctrl *dsi_ctrl) } if (!state->host_initialized) return true; return false; return true; } static void dsi_ctrl_update_state(struct dsi_ctrl *dsi_ctrl, Loading drivers/gpu/drm/msm/dsi-staging/dsi_defs.h +3 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,9 @@ }) #define DSI_DEBUG_NAME_LEN 32 #define display_for_each_ctrl(index, display) \ for (index = 0; (index < (display)->ctrl_count) &&\ (index < MAX_DSI_CTRLS_PER_DISPLAY); index++) /** * enum dsi_pixel_format - DSI pixel formats * @DSI_PIXEL_FORMAT_RGB565: Loading drivers/gpu/drm/msm/dsi-staging/dsi_display.c +139 −89 Original line number Diff line number Diff line Loading @@ -65,8 +65,7 @@ static void dsi_display_mask_ctrl_error_interrupts(struct dsi_display *display, if (!display) return; for (i = 0; (i < display->ctrl_count) && (i < MAX_DSI_CTRLS_PER_DISPLAY); i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl) continue; Loading Loading @@ -100,7 +99,7 @@ static int dsi_display_config_clk_gating(struct dsi_display *display, return rc; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == mctrl)) continue; Loading Loading @@ -129,8 +128,7 @@ static void dsi_display_set_ctrl_esd_check_flag(struct dsi_display *display, if (!display) return; for (i = 0; (i < display->ctrl_count) && (i < MAX_DSI_CTRLS_PER_DISPLAY); i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl) continue; Loading @@ -146,8 +144,7 @@ static void dsi_display_ctrl_irq_update(struct dsi_display *display, bool en) if (!display) return; for (i = 0; (i < display->ctrl_count) && (i < MAX_DSI_CTRLS_PER_DISPLAY); i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl) continue; Loading Loading @@ -257,7 +254,7 @@ static int dsi_display_cmd_engine_enable(struct dsi_display *display) goto done; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -297,7 +294,7 @@ static int dsi_display_cmd_engine_disable(struct dsi_display *display) goto done; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -366,7 +363,7 @@ static void dsi_display_aspace_cb_locked(void *cb_data, bool is_detach) } } for (cnt = 0; cnt < display->ctrl_count; cnt++) { display_for_each_ctrl(cnt, display) { display_ctrl = &display->ctrl[cnt]; display_ctrl->ctrl->cmd_buffer_size = display->cmd_buffer_size; display_ctrl->ctrl->cmd_buffer_iova = display->cmd_buffer_iova; Loading Loading @@ -523,7 +520,7 @@ static int dsi_host_alloc_cmd_tx_buffer(struct dsi_display *display) goto put_iova; } for (cnt = 0; cnt < display->ctrl_count; cnt++) { display_for_each_ctrl(cnt, display) { display_ctrl = &display->ctrl[cnt]; display_ctrl->ctrl->cmd_buffer_size = SZ_4K; display_ctrl->ctrl->cmd_buffer_iova = Loading Loading @@ -636,7 +633,7 @@ static int dsi_display_read_status(struct dsi_display_ctrl *ctrl, * report a false ESD failure and hence we defer until next read * happen. */ if (dsi_ctrl_validate_host_state(ctrl->ctrl)) if (!dsi_ctrl_validate_host_state(ctrl->ctrl)) return 1; config = &(panel->esd_config); Loading Loading @@ -727,7 +724,7 @@ static int dsi_display_status_reg_read(struct dsi_display *display) if (!display->panel->sync_broadcast_en) goto exit; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (ctrl == m_ctrl) continue; Loading Loading @@ -885,7 +882,7 @@ static int dsi_display_ctrl_get_host_init_state(struct dsi_display *dsi_display, struct dsi_display_ctrl *ctrl; int i, rc = -EINVAL; for (i = 0 ; i < dsi_display->ctrl_count; i++) { display_for_each_ctrl(i, dsi_display) { ctrl = &dsi_display->ctrl[i]; rc = dsi_ctrl_get_host_engine_init_state(ctrl->ctrl, state); if (rc) Loading Loading @@ -954,7 +951,7 @@ static void _dsi_display_continuous_clk_ctrl(struct dsi_display *display, if (!display || !display->panel->host_config.force_hs_clk_lane) return; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; dsi_ctrl_set_continuous_clk(ctrl->ctrl, enable); } Loading @@ -972,7 +969,7 @@ int dsi_display_soft_reset(void *display) dsi_display = display; for (i = 0 ; i < dsi_display->ctrl_count; i++) { display_for_each_ctrl(i, dsi_display) { ctrl = &dsi_display->ctrl[i]; rc = dsi_ctrl_soft_reset(ctrl->ctrl); if (rc) { Loading Loading @@ -1007,7 +1004,7 @@ static void _dsi_display_setup_misr(struct dsi_display *display) { int i; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { dsi_ctrl_setup_misr(display->ctrl[i].ctrl, display->misr_enable, display->misr_frame_count); Loading @@ -1027,8 +1024,7 @@ static bool dsi_display_get_cont_splash_status(struct dsi_display *display) struct dsi_display_ctrl *ctrl; struct dsi_ctrl_hw *hw; for (i = 0; (i < display->ctrl_count) && (i < MAX_DSI_CTRLS_PER_DISPLAY); i++) { display_for_each_ctrl(i, display) { ctrl = &(display->ctrl[i]); if (!ctrl || !ctrl->ctrl) continue; Loading Loading @@ -1092,7 +1088,7 @@ static ssize_t debugfs_dump_info_read(struct file *file, display->config.video_timing.h_active, display->config.video_timing.v_active); for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { len += snprintf(buf + len, (SZ_4K - len), "\tCTRL_%d:\n\t\tctrl = %s\n\t\tphy = %s\n", i, display->ctrl[i].ctrl->name, Loading Loading @@ -1215,7 +1211,7 @@ static ssize_t debugfs_misr_read(struct file *file, goto error; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { dsi_ctrl = display->ctrl[i].ctrl; misr = dsi_ctrl_collect_misr(display->ctrl[i].ctrl); Loading Loading @@ -1540,7 +1536,7 @@ static int dsi_display_debugfs_init(struct dsi_display *display) goto error_remove_dir; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { struct msm_dsi_phy *phy = display->ctrl[i].phy; if (!phy || !phy->name) Loading Loading @@ -1707,7 +1703,7 @@ static int dsi_display_set_ulps(struct dsi_display *display, bool enable) return rc; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -1770,7 +1766,7 @@ static int dsi_display_set_clamp(struct dsi_display *display, bool enable) return rc; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -1821,7 +1817,7 @@ static int dsi_display_ctrl_setup(struct dsi_display *display) return rc; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -1869,7 +1865,7 @@ static int dsi_display_phy_idle_on(struct dsi_display *display, return rc; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -1901,7 +1897,7 @@ static int dsi_display_phy_idle_off(struct dsi_display *display) return -EINVAL; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { struct msm_dsi_phy *phy = display->ctrl[i].phy; if (!phy) Loading @@ -1922,7 +1918,7 @@ static int dsi_display_phy_idle_off(struct dsi_display *display) return rc; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -1963,7 +1959,7 @@ void dsi_display_enable_event(struct drm_connector *connector, case SDE_CONN_EVENT_VID_FIFO_OVERFLOW: case SDE_CONN_EVENT_CMD_FIFO_UNDERFLOW: if (event_info) { for (i = 0; i < display->ctrl_count; i++) display_for_each_ctrl(i, display) display->ctrl[i].ctrl->recovery_cb = *event_info; } Loading @@ -1974,12 +1970,12 @@ void dsi_display_enable_event(struct drm_connector *connector, } if (enable) { for (i = 0; i < display->ctrl_count; i++) display_for_each_ctrl(i, display) dsi_ctrl_enable_status_interrupt( display->ctrl[i].ctrl, irq_status_idx, event_info); } else { for (i = 0; i < display->ctrl_count; i++) display_for_each_ctrl(i, display) dsi_ctrl_disable_status_interrupt( display->ctrl[i].ctrl, irq_status_idx); } Loading @@ -1999,8 +1995,7 @@ static void dsi_config_host_engine_state_for_cont_splash enum dsi_engine_state host_state = DSI_CTRL_ENGINE_ON; /* Sequence does not matter for split dsi usecases */ for (i = 0; (i < display->ctrl_count) && (i < MAX_DSI_CTRLS_PER_DISPLAY); i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl) continue; Loading @@ -2017,7 +2012,7 @@ static int dsi_display_ctrl_power_on(struct dsi_display *display) struct dsi_display_ctrl *ctrl; /* Sequence does not matter for split dsi usecases */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl) continue; Loading Loading @@ -2050,7 +2045,7 @@ static int dsi_display_ctrl_power_off(struct dsi_display *display) struct dsi_display_ctrl *ctrl; /* Sequence does not matter for split dsi usecases */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl) continue; Loading Loading @@ -2158,7 +2153,7 @@ static int dsi_display_phy_power_on(struct dsi_display *display) struct dsi_display_ctrl *ctrl; /* Sequence does not matter for split dsi usecases */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl) continue; Loading Loading @@ -2189,7 +2184,7 @@ static int dsi_display_phy_power_off(struct dsi_display *display) struct dsi_display_ctrl *ctrl; /* Sequence does not matter for split dsi usecases */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->phy) continue; Loading Loading @@ -2227,7 +2222,7 @@ static int dsi_display_set_clk_src(struct dsi_display *display) } /* Turn on rest of the controllers */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading @@ -2250,7 +2245,7 @@ static int dsi_display_phy_reset_config(struct dsi_display *display, int i; struct dsi_display_ctrl *ctrl; for (i = 0 ; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_phy_reset_config(ctrl->ctrl, enable); if (rc) { Loading @@ -2270,7 +2265,7 @@ static void dsi_display_toggle_resync_fifo(struct dsi_display *display) if (!display) return; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; dsi_phy_toggle_resync_fifo(ctrl->phy); } Loading @@ -2279,7 +2274,7 @@ static void dsi_display_toggle_resync_fifo(struct dsi_display *display) * After retime buffer synchronization we need to turn of clk_en_sel * bit on each phy. */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; dsi_phy_reset_clk_en_sel(ctrl->phy); } Loading @@ -2292,7 +2287,7 @@ static int dsi_display_ctrl_update(struct dsi_display *display) int i; struct dsi_display_ctrl *ctrl; for (i = 0 ; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_host_timing_update(ctrl->ctrl); if (rc) { Loading Loading @@ -2326,7 +2321,7 @@ static int dsi_display_ctrl_init(struct dsi_display *display) * the HW in bad state. */ if (!display->panel->ulps_suspend_enabled || !display->ulps_enabled) { for (i = 0 ; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_host_init(ctrl->ctrl, display->is_cont_splash_enabled); Loading @@ -2337,7 +2332,7 @@ static int dsi_display_ctrl_init(struct dsi_display *display) } } } else { for (i = 0 ; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_update_host_init_state(ctrl->ctrl, true); if (rc) Loading @@ -2360,7 +2355,7 @@ static int dsi_display_ctrl_deinit(struct dsi_display *display) int i; struct dsi_display_ctrl *ctrl; for (i = 0 ; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_host_deinit(ctrl->ctrl); if (rc) { Loading Loading @@ -2395,7 +2390,7 @@ static int dsi_display_ctrl_host_enable(struct dsi_display *display) goto error; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -2423,7 +2418,7 @@ static int dsi_display_ctrl_host_disable(struct dsi_display *display) struct dsi_display_ctrl *m_ctrl, *ctrl; m_ctrl = &display->ctrl[display->cmd_master_idx]; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -2461,7 +2456,7 @@ static int dsi_display_vid_engine_enable(struct dsi_display *display) goto error; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -2490,7 +2485,7 @@ static int dsi_display_vid_engine_disable(struct dsi_display *display) m_ctrl = &display->ctrl[display->video_master_idx]; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -2532,7 +2527,7 @@ static int dsi_display_phy_enable(struct dsi_display *display) goto error; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -2565,7 +2560,7 @@ static int dsi_display_phy_disable(struct dsi_display *display) m_ctrl = &display->ctrl[display->clk_master_idx]; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -2618,7 +2613,7 @@ static int dsi_display_broadcast_cmd(struct dsi_display *display, goto error; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (ctrl == m_ctrl) continue; Loading Loading @@ -2671,7 +2666,7 @@ static int dsi_display_phy_sw_reset(struct dsi_display *display) goto error; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -3003,8 +2998,7 @@ static void dsi_display_ctrl_isr_configure(struct dsi_display *display, bool en) if (!display) return; for (i = 0; (i < display->ctrl_count) && (i < MAX_DSI_CTRLS_PER_DISPLAY); i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl) continue; Loading Loading @@ -3089,7 +3083,7 @@ int dsi_pre_clkoff_cb(void *priv, dsi_display_ctrl_irq_update(display, false); /* cache the MISR values */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl) continue; Loading Loading @@ -3453,7 +3447,7 @@ static int dsi_display_parse_dt(struct dsi_display *display) goto error; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { struct dsi_display_ctrl *ctrl = &display->ctrl[i]; int index; Loading Loading @@ -3494,7 +3488,7 @@ static int dsi_display_res_init(struct dsi_display *display) int i; struct dsi_display_ctrl *ctrl; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; ctrl->ctrl = dsi_ctrl_get(ctrl->ctrl_of_node); if (IS_ERR_OR_NULL(ctrl->ctrl)) { Loading Loading @@ -3558,7 +3552,7 @@ static int dsi_display_res_deinit(struct dsi_display *display) if (rc) pr_err("clocks deinit failed, rc=%d\n", rc); for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; dsi_phy_put(ctrl->phy); dsi_ctrl_put(ctrl->ctrl); Loading @@ -3585,7 +3579,7 @@ static int dsi_display_validate_mode_set(struct dsi_display *display, * 3. Phy should be disabled. */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if ((ctrl->power_state > DSI_CTRL_POWER_VREG_ON) || (ctrl->phy_enabled)) { Loading Loading @@ -3737,7 +3731,7 @@ static int dsi_display_dfps_update(struct dsi_display *display, } /* Update the rest of the controllers */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -3963,7 +3957,7 @@ static int dsi_display_set_mode_sub(struct dsi_display *display, } } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_update_host_config(ctrl->ctrl, &display->config, mode->dsi_mode_flags, display->dsi_clk_handle); Loading @@ -3975,7 +3969,7 @@ static int dsi_display_set_mode_sub(struct dsi_display *display, } if (priv_info->phy_timing_len) { for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_phy_set_timing_params(ctrl->phy, priv_info->phy_timing_val, Loading Loading @@ -4224,7 +4218,7 @@ static int dsi_display_request_update_dsi_bitrate(struct dsi_display *display, display->config.bit_clk_rate_hz_override = bit_clk_rate; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { struct dsi_display_ctrl *dsi_disp_ctrl = &display->ctrl[i]; struct dsi_ctrl *ctrl = dsi_disp_ctrl->ctrl; u32 num_of_lanes = 0; Loading Loading @@ -4470,7 +4464,7 @@ static int dsi_display_bind(struct device *dev, memset(&info, 0x0, sizeof(info)); for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { display_ctrl = &display->ctrl[i]; rc = dsi_ctrl_drv_init(display_ctrl->ctrl, display->root); if (rc) { Loading Loading @@ -4555,7 +4549,7 @@ static int dsi_display_bind(struct device *dev, clk_cb.priv = display; clk_cb.dsi_clk_cb = dsi_display_clk_ctrl_cb; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { display_ctrl = &display->ctrl[i]; rc = dsi_ctrl_clk_cb_register(display_ctrl->ctrl, &clk_cb); Loading Loading @@ -4591,7 +4585,7 @@ static int dsi_display_bind(struct device *dev, pr_info("Successfully bind display panel '%s'\n", display->name); display->drm_dev = drm; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { display_ctrl = &display->ctrl[i]; if (!display_ctrl->phy || !display_ctrl->ctrl) Loading Loading @@ -4668,7 +4662,7 @@ static void dsi_display_unbind(struct device *dev, display->name, rc); for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { display_ctrl = &display->ctrl[i]; rc = dsi_phy_drv_deinit(display_ctrl->phy); Loading Loading @@ -5716,7 +5710,7 @@ int dsi_display_validate_mode(struct dsi_display *display, goto error; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_validate_timing(ctrl->ctrl, &adj_mode.timing); if (rc) { Loading Loading @@ -5807,7 +5801,7 @@ int dsi_display_set_tpg_state(struct dsi_display *display, bool enable) return -EINVAL; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_set_tpg_state(ctrl->ctrl, enable); if (rc) { Loading Loading @@ -5867,13 +5861,40 @@ static int dsi_display_pre_switch(struct dsi_display *display) return rc; } static bool _dsi_display_validate_host_state(struct dsi_display *display) { int i; struct dsi_display_ctrl *ctrl; display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl) continue; if (!dsi_ctrl_validate_host_state(ctrl->ctrl)) return false; } return true; } static void dsi_display_handle_fifo_underflow(struct work_struct *work) { struct dsi_display *display = NULL; display = container_of(work, struct dsi_display, fifo_underflow_work); if (!display) if (!display || !display->panel || atomic_read(&display->panel->esd_recovery_pending)) { pr_debug("Invalid recovery use case\n"); return; } mutex_lock(&display->display_lock); if (!_dsi_display_validate_host_state(display)) { mutex_unlock(&display->display_lock); return; } pr_debug("handle DSI FIFO underflow error\n"); dsi_display_clk_ctrl(display->dsi_clk_handle, Loading @@ -5881,6 +5902,8 @@ static void dsi_display_handle_fifo_underflow(struct work_struct *work) dsi_display_soft_reset(display); dsi_display_clk_ctrl(display->dsi_clk_handle, DSI_ALL_CLKS, DSI_CLK_OFF); mutex_unlock(&display->display_lock); } static void dsi_display_handle_fifo_overflow(struct work_struct *work) Loading @@ -5898,8 +5921,18 @@ static void dsi_display_handle_fifo_overflow(struct work_struct *work) display = container_of(work, struct dsi_display, fifo_overflow_work); if (!display || !display->panel || (display->panel->panel_mode != DSI_OP_VIDEO_MODE)) (display->panel->panel_mode != DSI_OP_VIDEO_MODE) || atomic_read(&display->panel->esd_recovery_pending)) { pr_debug("Invalid recovery use case\n"); return; } mutex_lock(&display->display_lock); if (!_dsi_display_validate_host_state(display)) { mutex_unlock(&display->display_lock); return; } pr_debug("handle DSI FIFO overflow error\n"); dsi_display_clk_ctrl(display->dsi_clk_handle, Loading @@ -5915,7 +5948,7 @@ static void dsi_display_handle_fifo_overflow(struct work_struct *work) goto end; /* reset ctrl and lanes */ for (i = 0 ; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_reset(ctrl->ctrl, mask); rc = dsi_phy_lane_reset(ctrl->phy); Loading @@ -5935,7 +5968,7 @@ static void dsi_display_handle_fifo_overflow(struct work_struct *work) } /* Enable Video mode for DSI controller */ for (i = 0 ; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; dsi_ctrl_vid_engine_en(ctrl->ctrl, true); } Loading @@ -5947,6 +5980,7 @@ static void dsi_display_handle_fifo_overflow(struct work_struct *work) end: dsi_display_clk_ctrl(display->dsi_clk_handle, DSI_ALL_CLKS, DSI_CLK_OFF); mutex_unlock(&display->display_lock); } static void dsi_display_handle_lp_rx_timeout(struct work_struct *work) Loading @@ -5964,8 +5998,19 @@ static void dsi_display_handle_lp_rx_timeout(struct work_struct *work) display = container_of(work, struct dsi_display, lp_rx_timeout_work); if (!display || !display->panel || (display->panel->panel_mode != DSI_OP_VIDEO_MODE)) (display->panel->panel_mode != DSI_OP_VIDEO_MODE) || atomic_read(&display->panel->esd_recovery_pending)) { pr_debug("Invalid recovery use case\n"); return; } mutex_lock(&display->display_lock); if (!_dsi_display_validate_host_state(display)) { mutex_unlock(&display->display_lock); return; } pr_debug("handle DSI LP RX Timeout error\n"); dsi_display_clk_ctrl(display->dsi_clk_handle, Loading @@ -5981,7 +6026,7 @@ static void dsi_display_handle_lp_rx_timeout(struct work_struct *work) goto end; /* reset ctrl and lanes */ for (i = 0 ; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_reset(ctrl->ctrl, mask); rc = dsi_phy_lane_reset(ctrl->phy); Loading @@ -6000,7 +6045,7 @@ static void dsi_display_handle_lp_rx_timeout(struct work_struct *work) } /* Enable Video mode for DSI controller */ for (i = 0 ; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; dsi_ctrl_vid_engine_en(ctrl->ctrl, true); } Loading @@ -6010,9 +6055,11 @@ static void dsi_display_handle_lp_rx_timeout(struct work_struct *work) * pixel transmission as started */ udelay(200); end: dsi_display_clk_ctrl(display->dsi_clk_handle, DSI_ALL_CLKS, DSI_CLK_OFF); mutex_unlock(&display->display_lock); } static int dsi_display_cb_error_handler(void *data, Loading Loading @@ -6070,7 +6117,7 @@ static void dsi_display_register_error_handler(struct dsi_display *display) event_info.event_cb = dsi_display_cb_error_handler; event_info.event_usr_ptr = display; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; ctrl->ctrl->irq_info.irq_err_cb = event_info; } Loading @@ -6084,14 +6131,16 @@ static void dsi_display_unregister_error_handler(struct dsi_display *display) if (!display) return; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; memset(&ctrl->ctrl->irq_info.irq_err_cb, 0, sizeof(struct dsi_event_cb_info)); } if (display->err_workq) if (display->err_workq) { destroy_workqueue(display->err_workq); display->err_workq = NULL; } } int dsi_display_prepare(struct dsi_display *display) Loading Loading @@ -6361,7 +6410,7 @@ static int dsi_display_set_roi(struct dsi_display *display, if (!roi_caps->enabled) return 0; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { struct dsi_display_ctrl *ctrl = &display->ctrl[i]; struct dsi_rect ctrl_roi; bool changed = false; Loading Loading @@ -6437,7 +6486,7 @@ int dsi_display_pre_kickoff(struct drm_connector *connector, * not to impact DRM commit. The clock updating would be * deferred to the next DRM commit. */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { struct dsi_ctrl *ctrl = display->ctrl[i].ctrl; int ret = 0; Loading Loading @@ -6767,15 +6816,16 @@ int dsi_display_unprepare(struct dsi_display *display) /* destrory dsi isr set up */ dsi_display_ctrl_isr_configure(display, false); /* Free up DSI ERROR event callback */ dsi_display_unregister_error_handler(display); rc = dsi_panel_post_unprepare(display->panel); if (rc) pr_err("[%s] panel post-unprepare failed, rc=%d\n", display->name, rc); mutex_unlock(&display->display_lock); /* Free up DSI ERROR event callback */ dsi_display_unregister_error_handler(display); SDE_EVT32(SDE_EVTLOG_FUNC_EXIT); return rc; } Loading drivers/gpu/drm/msm/dsi-staging/dsi_drm.c +1 −1 Original line number Diff line number Diff line Loading @@ -751,7 +751,7 @@ int dsi_conn_post_kickoff(struct drm_connector *connector) } /* Update the rest of the controllers */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading
drivers/gpu/drm/msm/dsi-staging/dsi_ctrl.c +2 −2 Original line number Diff line number Diff line Loading @@ -420,9 +420,9 @@ bool dsi_ctrl_validate_host_state(struct dsi_ctrl *dsi_ctrl) } if (!state->host_initialized) return true; return false; return true; } static void dsi_ctrl_update_state(struct dsi_ctrl *dsi_ctrl, Loading
drivers/gpu/drm/msm/dsi-staging/dsi_defs.h +3 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,9 @@ }) #define DSI_DEBUG_NAME_LEN 32 #define display_for_each_ctrl(index, display) \ for (index = 0; (index < (display)->ctrl_count) &&\ (index < MAX_DSI_CTRLS_PER_DISPLAY); index++) /** * enum dsi_pixel_format - DSI pixel formats * @DSI_PIXEL_FORMAT_RGB565: Loading
drivers/gpu/drm/msm/dsi-staging/dsi_display.c +139 −89 Original line number Diff line number Diff line Loading @@ -65,8 +65,7 @@ static void dsi_display_mask_ctrl_error_interrupts(struct dsi_display *display, if (!display) return; for (i = 0; (i < display->ctrl_count) && (i < MAX_DSI_CTRLS_PER_DISPLAY); i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl) continue; Loading Loading @@ -100,7 +99,7 @@ static int dsi_display_config_clk_gating(struct dsi_display *display, return rc; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == mctrl)) continue; Loading Loading @@ -129,8 +128,7 @@ static void dsi_display_set_ctrl_esd_check_flag(struct dsi_display *display, if (!display) return; for (i = 0; (i < display->ctrl_count) && (i < MAX_DSI_CTRLS_PER_DISPLAY); i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl) continue; Loading @@ -146,8 +144,7 @@ static void dsi_display_ctrl_irq_update(struct dsi_display *display, bool en) if (!display) return; for (i = 0; (i < display->ctrl_count) && (i < MAX_DSI_CTRLS_PER_DISPLAY); i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl) continue; Loading Loading @@ -257,7 +254,7 @@ static int dsi_display_cmd_engine_enable(struct dsi_display *display) goto done; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -297,7 +294,7 @@ static int dsi_display_cmd_engine_disable(struct dsi_display *display) goto done; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -366,7 +363,7 @@ static void dsi_display_aspace_cb_locked(void *cb_data, bool is_detach) } } for (cnt = 0; cnt < display->ctrl_count; cnt++) { display_for_each_ctrl(cnt, display) { display_ctrl = &display->ctrl[cnt]; display_ctrl->ctrl->cmd_buffer_size = display->cmd_buffer_size; display_ctrl->ctrl->cmd_buffer_iova = display->cmd_buffer_iova; Loading Loading @@ -523,7 +520,7 @@ static int dsi_host_alloc_cmd_tx_buffer(struct dsi_display *display) goto put_iova; } for (cnt = 0; cnt < display->ctrl_count; cnt++) { display_for_each_ctrl(cnt, display) { display_ctrl = &display->ctrl[cnt]; display_ctrl->ctrl->cmd_buffer_size = SZ_4K; display_ctrl->ctrl->cmd_buffer_iova = Loading Loading @@ -636,7 +633,7 @@ static int dsi_display_read_status(struct dsi_display_ctrl *ctrl, * report a false ESD failure and hence we defer until next read * happen. */ if (dsi_ctrl_validate_host_state(ctrl->ctrl)) if (!dsi_ctrl_validate_host_state(ctrl->ctrl)) return 1; config = &(panel->esd_config); Loading Loading @@ -727,7 +724,7 @@ static int dsi_display_status_reg_read(struct dsi_display *display) if (!display->panel->sync_broadcast_en) goto exit; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (ctrl == m_ctrl) continue; Loading Loading @@ -885,7 +882,7 @@ static int dsi_display_ctrl_get_host_init_state(struct dsi_display *dsi_display, struct dsi_display_ctrl *ctrl; int i, rc = -EINVAL; for (i = 0 ; i < dsi_display->ctrl_count; i++) { display_for_each_ctrl(i, dsi_display) { ctrl = &dsi_display->ctrl[i]; rc = dsi_ctrl_get_host_engine_init_state(ctrl->ctrl, state); if (rc) Loading Loading @@ -954,7 +951,7 @@ static void _dsi_display_continuous_clk_ctrl(struct dsi_display *display, if (!display || !display->panel->host_config.force_hs_clk_lane) return; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; dsi_ctrl_set_continuous_clk(ctrl->ctrl, enable); } Loading @@ -972,7 +969,7 @@ int dsi_display_soft_reset(void *display) dsi_display = display; for (i = 0 ; i < dsi_display->ctrl_count; i++) { display_for_each_ctrl(i, dsi_display) { ctrl = &dsi_display->ctrl[i]; rc = dsi_ctrl_soft_reset(ctrl->ctrl); if (rc) { Loading Loading @@ -1007,7 +1004,7 @@ static void _dsi_display_setup_misr(struct dsi_display *display) { int i; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { dsi_ctrl_setup_misr(display->ctrl[i].ctrl, display->misr_enable, display->misr_frame_count); Loading @@ -1027,8 +1024,7 @@ static bool dsi_display_get_cont_splash_status(struct dsi_display *display) struct dsi_display_ctrl *ctrl; struct dsi_ctrl_hw *hw; for (i = 0; (i < display->ctrl_count) && (i < MAX_DSI_CTRLS_PER_DISPLAY); i++) { display_for_each_ctrl(i, display) { ctrl = &(display->ctrl[i]); if (!ctrl || !ctrl->ctrl) continue; Loading Loading @@ -1092,7 +1088,7 @@ static ssize_t debugfs_dump_info_read(struct file *file, display->config.video_timing.h_active, display->config.video_timing.v_active); for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { len += snprintf(buf + len, (SZ_4K - len), "\tCTRL_%d:\n\t\tctrl = %s\n\t\tphy = %s\n", i, display->ctrl[i].ctrl->name, Loading Loading @@ -1215,7 +1211,7 @@ static ssize_t debugfs_misr_read(struct file *file, goto error; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { dsi_ctrl = display->ctrl[i].ctrl; misr = dsi_ctrl_collect_misr(display->ctrl[i].ctrl); Loading Loading @@ -1540,7 +1536,7 @@ static int dsi_display_debugfs_init(struct dsi_display *display) goto error_remove_dir; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { struct msm_dsi_phy *phy = display->ctrl[i].phy; if (!phy || !phy->name) Loading Loading @@ -1707,7 +1703,7 @@ static int dsi_display_set_ulps(struct dsi_display *display, bool enable) return rc; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -1770,7 +1766,7 @@ static int dsi_display_set_clamp(struct dsi_display *display, bool enable) return rc; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -1821,7 +1817,7 @@ static int dsi_display_ctrl_setup(struct dsi_display *display) return rc; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -1869,7 +1865,7 @@ static int dsi_display_phy_idle_on(struct dsi_display *display, return rc; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -1901,7 +1897,7 @@ static int dsi_display_phy_idle_off(struct dsi_display *display) return -EINVAL; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { struct msm_dsi_phy *phy = display->ctrl[i].phy; if (!phy) Loading @@ -1922,7 +1918,7 @@ static int dsi_display_phy_idle_off(struct dsi_display *display) return rc; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -1963,7 +1959,7 @@ void dsi_display_enable_event(struct drm_connector *connector, case SDE_CONN_EVENT_VID_FIFO_OVERFLOW: case SDE_CONN_EVENT_CMD_FIFO_UNDERFLOW: if (event_info) { for (i = 0; i < display->ctrl_count; i++) display_for_each_ctrl(i, display) display->ctrl[i].ctrl->recovery_cb = *event_info; } Loading @@ -1974,12 +1970,12 @@ void dsi_display_enable_event(struct drm_connector *connector, } if (enable) { for (i = 0; i < display->ctrl_count; i++) display_for_each_ctrl(i, display) dsi_ctrl_enable_status_interrupt( display->ctrl[i].ctrl, irq_status_idx, event_info); } else { for (i = 0; i < display->ctrl_count; i++) display_for_each_ctrl(i, display) dsi_ctrl_disable_status_interrupt( display->ctrl[i].ctrl, irq_status_idx); } Loading @@ -1999,8 +1995,7 @@ static void dsi_config_host_engine_state_for_cont_splash enum dsi_engine_state host_state = DSI_CTRL_ENGINE_ON; /* Sequence does not matter for split dsi usecases */ for (i = 0; (i < display->ctrl_count) && (i < MAX_DSI_CTRLS_PER_DISPLAY); i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl) continue; Loading @@ -2017,7 +2012,7 @@ static int dsi_display_ctrl_power_on(struct dsi_display *display) struct dsi_display_ctrl *ctrl; /* Sequence does not matter for split dsi usecases */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl) continue; Loading Loading @@ -2050,7 +2045,7 @@ static int dsi_display_ctrl_power_off(struct dsi_display *display) struct dsi_display_ctrl *ctrl; /* Sequence does not matter for split dsi usecases */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl) continue; Loading Loading @@ -2158,7 +2153,7 @@ static int dsi_display_phy_power_on(struct dsi_display *display) struct dsi_display_ctrl *ctrl; /* Sequence does not matter for split dsi usecases */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl) continue; Loading Loading @@ -2189,7 +2184,7 @@ static int dsi_display_phy_power_off(struct dsi_display *display) struct dsi_display_ctrl *ctrl; /* Sequence does not matter for split dsi usecases */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->phy) continue; Loading Loading @@ -2227,7 +2222,7 @@ static int dsi_display_set_clk_src(struct dsi_display *display) } /* Turn on rest of the controllers */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading @@ -2250,7 +2245,7 @@ static int dsi_display_phy_reset_config(struct dsi_display *display, int i; struct dsi_display_ctrl *ctrl; for (i = 0 ; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_phy_reset_config(ctrl->ctrl, enable); if (rc) { Loading @@ -2270,7 +2265,7 @@ static void dsi_display_toggle_resync_fifo(struct dsi_display *display) if (!display) return; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; dsi_phy_toggle_resync_fifo(ctrl->phy); } Loading @@ -2279,7 +2274,7 @@ static void dsi_display_toggle_resync_fifo(struct dsi_display *display) * After retime buffer synchronization we need to turn of clk_en_sel * bit on each phy. */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; dsi_phy_reset_clk_en_sel(ctrl->phy); } Loading @@ -2292,7 +2287,7 @@ static int dsi_display_ctrl_update(struct dsi_display *display) int i; struct dsi_display_ctrl *ctrl; for (i = 0 ; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_host_timing_update(ctrl->ctrl); if (rc) { Loading Loading @@ -2326,7 +2321,7 @@ static int dsi_display_ctrl_init(struct dsi_display *display) * the HW in bad state. */ if (!display->panel->ulps_suspend_enabled || !display->ulps_enabled) { for (i = 0 ; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_host_init(ctrl->ctrl, display->is_cont_splash_enabled); Loading @@ -2337,7 +2332,7 @@ static int dsi_display_ctrl_init(struct dsi_display *display) } } } else { for (i = 0 ; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_update_host_init_state(ctrl->ctrl, true); if (rc) Loading @@ -2360,7 +2355,7 @@ static int dsi_display_ctrl_deinit(struct dsi_display *display) int i; struct dsi_display_ctrl *ctrl; for (i = 0 ; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_host_deinit(ctrl->ctrl); if (rc) { Loading Loading @@ -2395,7 +2390,7 @@ static int dsi_display_ctrl_host_enable(struct dsi_display *display) goto error; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -2423,7 +2418,7 @@ static int dsi_display_ctrl_host_disable(struct dsi_display *display) struct dsi_display_ctrl *m_ctrl, *ctrl; m_ctrl = &display->ctrl[display->cmd_master_idx]; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -2461,7 +2456,7 @@ static int dsi_display_vid_engine_enable(struct dsi_display *display) goto error; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -2490,7 +2485,7 @@ static int dsi_display_vid_engine_disable(struct dsi_display *display) m_ctrl = &display->ctrl[display->video_master_idx]; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -2532,7 +2527,7 @@ static int dsi_display_phy_enable(struct dsi_display *display) goto error; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -2565,7 +2560,7 @@ static int dsi_display_phy_disable(struct dsi_display *display) m_ctrl = &display->ctrl[display->clk_master_idx]; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -2618,7 +2613,7 @@ static int dsi_display_broadcast_cmd(struct dsi_display *display, goto error; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (ctrl == m_ctrl) continue; Loading Loading @@ -2671,7 +2666,7 @@ static int dsi_display_phy_sw_reset(struct dsi_display *display) goto error; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -3003,8 +2998,7 @@ static void dsi_display_ctrl_isr_configure(struct dsi_display *display, bool en) if (!display) return; for (i = 0; (i < display->ctrl_count) && (i < MAX_DSI_CTRLS_PER_DISPLAY); i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl) continue; Loading Loading @@ -3089,7 +3083,7 @@ int dsi_pre_clkoff_cb(void *priv, dsi_display_ctrl_irq_update(display, false); /* cache the MISR values */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl) continue; Loading Loading @@ -3453,7 +3447,7 @@ static int dsi_display_parse_dt(struct dsi_display *display) goto error; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { struct dsi_display_ctrl *ctrl = &display->ctrl[i]; int index; Loading Loading @@ -3494,7 +3488,7 @@ static int dsi_display_res_init(struct dsi_display *display) int i; struct dsi_display_ctrl *ctrl; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; ctrl->ctrl = dsi_ctrl_get(ctrl->ctrl_of_node); if (IS_ERR_OR_NULL(ctrl->ctrl)) { Loading Loading @@ -3558,7 +3552,7 @@ static int dsi_display_res_deinit(struct dsi_display *display) if (rc) pr_err("clocks deinit failed, rc=%d\n", rc); for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; dsi_phy_put(ctrl->phy); dsi_ctrl_put(ctrl->ctrl); Loading @@ -3585,7 +3579,7 @@ static int dsi_display_validate_mode_set(struct dsi_display *display, * 3. Phy should be disabled. */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if ((ctrl->power_state > DSI_CTRL_POWER_VREG_ON) || (ctrl->phy_enabled)) { Loading Loading @@ -3737,7 +3731,7 @@ static int dsi_display_dfps_update(struct dsi_display *display, } /* Update the rest of the controllers */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading Loading @@ -3963,7 +3957,7 @@ static int dsi_display_set_mode_sub(struct dsi_display *display, } } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_update_host_config(ctrl->ctrl, &display->config, mode->dsi_mode_flags, display->dsi_clk_handle); Loading @@ -3975,7 +3969,7 @@ static int dsi_display_set_mode_sub(struct dsi_display *display, } if (priv_info->phy_timing_len) { for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_phy_set_timing_params(ctrl->phy, priv_info->phy_timing_val, Loading Loading @@ -4224,7 +4218,7 @@ static int dsi_display_request_update_dsi_bitrate(struct dsi_display *display, display->config.bit_clk_rate_hz_override = bit_clk_rate; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { struct dsi_display_ctrl *dsi_disp_ctrl = &display->ctrl[i]; struct dsi_ctrl *ctrl = dsi_disp_ctrl->ctrl; u32 num_of_lanes = 0; Loading Loading @@ -4470,7 +4464,7 @@ static int dsi_display_bind(struct device *dev, memset(&info, 0x0, sizeof(info)); for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { display_ctrl = &display->ctrl[i]; rc = dsi_ctrl_drv_init(display_ctrl->ctrl, display->root); if (rc) { Loading Loading @@ -4555,7 +4549,7 @@ static int dsi_display_bind(struct device *dev, clk_cb.priv = display; clk_cb.dsi_clk_cb = dsi_display_clk_ctrl_cb; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { display_ctrl = &display->ctrl[i]; rc = dsi_ctrl_clk_cb_register(display_ctrl->ctrl, &clk_cb); Loading Loading @@ -4591,7 +4585,7 @@ static int dsi_display_bind(struct device *dev, pr_info("Successfully bind display panel '%s'\n", display->name); display->drm_dev = drm; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { display_ctrl = &display->ctrl[i]; if (!display_ctrl->phy || !display_ctrl->ctrl) Loading Loading @@ -4668,7 +4662,7 @@ static void dsi_display_unbind(struct device *dev, display->name, rc); for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { display_ctrl = &display->ctrl[i]; rc = dsi_phy_drv_deinit(display_ctrl->phy); Loading Loading @@ -5716,7 +5710,7 @@ int dsi_display_validate_mode(struct dsi_display *display, goto error; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_validate_timing(ctrl->ctrl, &adj_mode.timing); if (rc) { Loading Loading @@ -5807,7 +5801,7 @@ int dsi_display_set_tpg_state(struct dsi_display *display, bool enable) return -EINVAL; } for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_set_tpg_state(ctrl->ctrl, enable); if (rc) { Loading Loading @@ -5867,13 +5861,40 @@ static int dsi_display_pre_switch(struct dsi_display *display) return rc; } static bool _dsi_display_validate_host_state(struct dsi_display *display) { int i; struct dsi_display_ctrl *ctrl; display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl) continue; if (!dsi_ctrl_validate_host_state(ctrl->ctrl)) return false; } return true; } static void dsi_display_handle_fifo_underflow(struct work_struct *work) { struct dsi_display *display = NULL; display = container_of(work, struct dsi_display, fifo_underflow_work); if (!display) if (!display || !display->panel || atomic_read(&display->panel->esd_recovery_pending)) { pr_debug("Invalid recovery use case\n"); return; } mutex_lock(&display->display_lock); if (!_dsi_display_validate_host_state(display)) { mutex_unlock(&display->display_lock); return; } pr_debug("handle DSI FIFO underflow error\n"); dsi_display_clk_ctrl(display->dsi_clk_handle, Loading @@ -5881,6 +5902,8 @@ static void dsi_display_handle_fifo_underflow(struct work_struct *work) dsi_display_soft_reset(display); dsi_display_clk_ctrl(display->dsi_clk_handle, DSI_ALL_CLKS, DSI_CLK_OFF); mutex_unlock(&display->display_lock); } static void dsi_display_handle_fifo_overflow(struct work_struct *work) Loading @@ -5898,8 +5921,18 @@ static void dsi_display_handle_fifo_overflow(struct work_struct *work) display = container_of(work, struct dsi_display, fifo_overflow_work); if (!display || !display->panel || (display->panel->panel_mode != DSI_OP_VIDEO_MODE)) (display->panel->panel_mode != DSI_OP_VIDEO_MODE) || atomic_read(&display->panel->esd_recovery_pending)) { pr_debug("Invalid recovery use case\n"); return; } mutex_lock(&display->display_lock); if (!_dsi_display_validate_host_state(display)) { mutex_unlock(&display->display_lock); return; } pr_debug("handle DSI FIFO overflow error\n"); dsi_display_clk_ctrl(display->dsi_clk_handle, Loading @@ -5915,7 +5948,7 @@ static void dsi_display_handle_fifo_overflow(struct work_struct *work) goto end; /* reset ctrl and lanes */ for (i = 0 ; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_reset(ctrl->ctrl, mask); rc = dsi_phy_lane_reset(ctrl->phy); Loading @@ -5935,7 +5968,7 @@ static void dsi_display_handle_fifo_overflow(struct work_struct *work) } /* Enable Video mode for DSI controller */ for (i = 0 ; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; dsi_ctrl_vid_engine_en(ctrl->ctrl, true); } Loading @@ -5947,6 +5980,7 @@ static void dsi_display_handle_fifo_overflow(struct work_struct *work) end: dsi_display_clk_ctrl(display->dsi_clk_handle, DSI_ALL_CLKS, DSI_CLK_OFF); mutex_unlock(&display->display_lock); } static void dsi_display_handle_lp_rx_timeout(struct work_struct *work) Loading @@ -5964,8 +5998,19 @@ static void dsi_display_handle_lp_rx_timeout(struct work_struct *work) display = container_of(work, struct dsi_display, lp_rx_timeout_work); if (!display || !display->panel || (display->panel->panel_mode != DSI_OP_VIDEO_MODE)) (display->panel->panel_mode != DSI_OP_VIDEO_MODE) || atomic_read(&display->panel->esd_recovery_pending)) { pr_debug("Invalid recovery use case\n"); return; } mutex_lock(&display->display_lock); if (!_dsi_display_validate_host_state(display)) { mutex_unlock(&display->display_lock); return; } pr_debug("handle DSI LP RX Timeout error\n"); dsi_display_clk_ctrl(display->dsi_clk_handle, Loading @@ -5981,7 +6026,7 @@ static void dsi_display_handle_lp_rx_timeout(struct work_struct *work) goto end; /* reset ctrl and lanes */ for (i = 0 ; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; rc = dsi_ctrl_reset(ctrl->ctrl, mask); rc = dsi_phy_lane_reset(ctrl->phy); Loading @@ -6000,7 +6045,7 @@ static void dsi_display_handle_lp_rx_timeout(struct work_struct *work) } /* Enable Video mode for DSI controller */ for (i = 0 ; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; dsi_ctrl_vid_engine_en(ctrl->ctrl, true); } Loading @@ -6010,9 +6055,11 @@ static void dsi_display_handle_lp_rx_timeout(struct work_struct *work) * pixel transmission as started */ udelay(200); end: dsi_display_clk_ctrl(display->dsi_clk_handle, DSI_ALL_CLKS, DSI_CLK_OFF); mutex_unlock(&display->display_lock); } static int dsi_display_cb_error_handler(void *data, Loading Loading @@ -6070,7 +6117,7 @@ static void dsi_display_register_error_handler(struct dsi_display *display) event_info.event_cb = dsi_display_cb_error_handler; event_info.event_usr_ptr = display; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; ctrl->ctrl->irq_info.irq_err_cb = event_info; } Loading @@ -6084,14 +6131,16 @@ static void dsi_display_unregister_error_handler(struct dsi_display *display) if (!display) return; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; memset(&ctrl->ctrl->irq_info.irq_err_cb, 0, sizeof(struct dsi_event_cb_info)); } if (display->err_workq) if (display->err_workq) { destroy_workqueue(display->err_workq); display->err_workq = NULL; } } int dsi_display_prepare(struct dsi_display *display) Loading Loading @@ -6361,7 +6410,7 @@ static int dsi_display_set_roi(struct dsi_display *display, if (!roi_caps->enabled) return 0; for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { struct dsi_display_ctrl *ctrl = &display->ctrl[i]; struct dsi_rect ctrl_roi; bool changed = false; Loading Loading @@ -6437,7 +6486,7 @@ int dsi_display_pre_kickoff(struct drm_connector *connector, * not to impact DRM commit. The clock updating would be * deferred to the next DRM commit. */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { struct dsi_ctrl *ctrl = display->ctrl[i].ctrl; int ret = 0; Loading Loading @@ -6767,15 +6816,16 @@ int dsi_display_unprepare(struct dsi_display *display) /* destrory dsi isr set up */ dsi_display_ctrl_isr_configure(display, false); /* Free up DSI ERROR event callback */ dsi_display_unregister_error_handler(display); rc = dsi_panel_post_unprepare(display->panel); if (rc) pr_err("[%s] panel post-unprepare failed, rc=%d\n", display->name, rc); mutex_unlock(&display->display_lock); /* Free up DSI ERROR event callback */ dsi_display_unregister_error_handler(display); SDE_EVT32(SDE_EVTLOG_FUNC_EXIT); return rc; } Loading
drivers/gpu/drm/msm/dsi-staging/dsi_drm.c +1 −1 Original line number Diff line number Diff line Loading @@ -751,7 +751,7 @@ int dsi_conn_post_kickoff(struct drm_connector *connector) } /* Update the rest of the controllers */ for (i = 0; i < display->ctrl_count; i++) { display_for_each_ctrl(i, display) { ctrl = &display->ctrl[i]; if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; Loading