|
@@ -5381,7 +5381,22 @@ int dsi_display_splash_res_cleanup(struct dsi_display *display)
|
|
|
|
|
|
static int dsi_display_force_update_dsi_clk(struct dsi_display *display)
|
|
|
{
|
|
|
- int rc = 0;
|
|
|
+ int rc = 0, i = 0;
|
|
|
+ struct dsi_display_ctrl *ctrl;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * The force update dsi clock, is the only clock update function that toggles the state of
|
|
|
+ * DSI clocks without any ref count protection. With the addition of ASYNC command wait,
|
|
|
+ * there is a need for adding a check for any queued waits before updating these clocks.
|
|
|
+ */
|
|
|
+ display_for_each_ctrl(i, display) {
|
|
|
+ ctrl = &display->ctrl[i];
|
|
|
+ if (!ctrl->ctrl || !(ctrl->ctrl->post_tx_queued))
|
|
|
+ continue;
|
|
|
+ flush_workqueue(display->post_cmd_tx_workq);
|
|
|
+ cancel_work_sync(&ctrl->ctrl->post_cmd_tx_work);
|
|
|
+ ctrl->ctrl->post_tx_queued = false;
|
|
|
+ }
|
|
|
|
|
|
rc = dsi_display_link_clk_force_update_ctrl(display->dsi_clk_handle);
|
|
|
|