diff --git a/msm/dsi/dsi_display.c b/msm/dsi/dsi_display.c index cc93a68857..6e859f9ade 100644 --- a/msm/dsi/dsi_display.c +++ b/msm/dsi/dsi_display.c @@ -5590,6 +5590,38 @@ static int dsi_display_pre_acquire(void *data) return 0; } +static int dsi_display_init_ctrl(struct dsi_display *display) +{ + struct dsi_display_ctrl *display_ctrl; + int i, rc = 0; + struct clk_ctrl_cb clk_cb; + + clk_cb.priv = display; + clk_cb.dsi_clk_cb = dsi_display_clk_ctrl_cb; + + display_for_each_ctrl(i, display) { + display_ctrl = &display->ctrl[i]; + + display_ctrl->ctrl->post_cmd_tx_workq = display->post_cmd_tx_workq; + + rc = dsi_ctrl_clk_cb_register(display_ctrl->ctrl, &clk_cb); + if (rc) { + DSI_ERR("[%s] failed to register ctrl clk_cb[%d], rc=%d\n", + display->name, i, rc); + return rc; + } + + rc = dsi_phy_clk_cb_register(display_ctrl->phy, &clk_cb); + if (rc) { + DSI_ERR("[%s] failed to register phy clk_cb[%d], rc=%d\n", + display->name, i, rc); + return rc; + } + } + + return rc; +} + /** * dsi_display_bind - bind dsi device with controlling device * @dev: Pointer to base of platform device @@ -5605,7 +5637,6 @@ static int dsi_display_bind(struct device *dev, struct drm_device *drm; struct dsi_display *display; struct dsi_clk_info info; - struct clk_ctrl_cb clk_cb; void *handle = NULL; struct platform_device *pdev = to_platform_device(dev); char *client1 = "dsi_clk_client"; @@ -5686,7 +5717,6 @@ static int dsi_display_bind(struct device *dev, goto error_ctrl_deinit; } - display_ctrl->ctrl->post_cmd_tx_workq = display->post_cmd_tx_workq; memcpy(&info.c_clks[i], (&display_ctrl->ctrl->clk_info.core_clks), sizeof(struct dsi_core_clk_info)); @@ -5742,27 +5772,6 @@ static int dsi_display_bind(struct device *dev, display->mdp_clk_handle = handle; } - clk_cb.priv = display; - clk_cb.dsi_clk_cb = dsi_display_clk_ctrl_cb; - - display_for_each_ctrl(i, display) { - display_ctrl = &display->ctrl[i]; - - rc = dsi_ctrl_clk_cb_register(display_ctrl->ctrl, &clk_cb); - if (rc) { - DSI_ERR("[%s] failed to register ctrl clk_cb[%d], rc=%d\n", - display->name, i, rc); - goto error_ctrl_deinit; - } - - rc = dsi_phy_clk_cb_register(display_ctrl->phy, &clk_cb); - if (rc) { - DSI_ERR("[%s] failed to register phy clk_cb[%d], rc=%d\n", - display->name, i, rc); - goto error_ctrl_deinit; - } - } - dsi_display_update_byte_intf_div(display); rc = dsi_display_mipi_host_init(display); if (rc) { @@ -8202,6 +8211,8 @@ int dsi_display_prepare(struct dsi_display *display) display->hw_ownership = true; mode = display->panel->cur_mode; + dsi_display_init_ctrl(display); + dsi_display_set_ctrl_esd_check_flag(display, false); /* Set up ctrl isr before enabling core clk */