Initialize clocks only after we get the DSI host version. This will allow
us to get clocks using a pre-defined list based on the DSI major/minor
version of the host. This is required since clock requirements of
different major DSI revisions(v2 vs 6g) aren't the same.

Modify dsi_get_version to get the interface clock, and then put it after
it is used.

Signed-off-by: Archit Taneja <arch...@codeaurora.org>
---
 drivers/gpu/drm/msm/dsi/dsi_host.c | 32 ++++++++++++++++++++++----------
 1 file changed, 22 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c 
b/drivers/gpu/drm/msm/dsi/dsi_host.c
index 8e8fcc7..cbcf8dd 100644
--- a/drivers/gpu/drm/msm/dsi/dsi_host.c
+++ b/drivers/gpu/drm/msm/dsi/dsi_host.c
@@ -177,21 +177,31 @@ static const struct msm_dsi_cfg_handler *dsi_get_config(
                                                struct msm_dsi_host *msm_host)
 {
        const struct msm_dsi_cfg_handler *cfg_hnd = NULL;
+       struct device *dev = &msm_host->pdev->dev;
        struct regulator *gdsc_reg;
+       struct clk *ahb_clk;
        int ret;
        u32 major = 0, minor = 0;
 
-       gdsc_reg = regulator_get(&msm_host->pdev->dev, "gdsc");
+       gdsc_reg = regulator_get(dev, "gdsc");
        if (IS_ERR(gdsc_reg)) {
                pr_err("%s: cannot get gdsc\n", __func__);
                goto exit;
        }
+
+       ahb_clk = clk_get(dev, "iface_clk");
+       if (IS_ERR(ahb_clk)) {
+               pr_err("%s: cannot get interface clock\n", __func__);
+               goto put_gdsc;
+       }
+
        ret = regulator_enable(gdsc_reg);
        if (ret) {
                pr_err("%s: unable to enable gdsc\n", __func__);
-               goto put_gdsc;
+               goto put_clk;
        }
-       ret = clk_prepare_enable(msm_host->ahb_clk);
+
+       ret = clk_prepare_enable(ahb_clk);
        if (ret) {
                pr_err("%s: unable to enable ahb_clk\n", __func__);
                goto disable_gdsc;
@@ -208,9 +218,11 @@ static const struct msm_dsi_cfg_handler *dsi_get_config(
        DBG("%s: Version %x:%x\n", __func__, major, minor);
 
 disable_clks:
-       clk_disable_unprepare(msm_host->ahb_clk);
+       clk_disable_unprepare(ahb_clk);
 disable_gdsc:
        regulator_disable(gdsc_reg);
+put_clk:
+       clk_put(ahb_clk);
 put_gdsc:
        regulator_put(gdsc_reg);
 exit:
@@ -1420,12 +1432,6 @@ int msm_dsi_host_init(struct msm_dsi *msm_dsi)
                goto fail;
        }
 
-       ret = dsi_clk_init(msm_host);
-       if (ret) {
-               pr_err("%s: unable to initialize dsi clks\n", __func__);
-               goto fail;
-       }
-
        msm_host->ctrl_base = msm_ioremap(pdev, "dsi_ctrl", "DSI CTRL");
        if (IS_ERR(msm_host->ctrl_base)) {
                pr_err("%s: unable to map Dsi ctrl base\n", __func__);
@@ -1449,6 +1455,12 @@ int msm_dsi_host_init(struct msm_dsi *msm_dsi)
                goto fail;
        }
 
+       ret = dsi_clk_init(msm_host);
+       if (ret) {
+               pr_err("%s: unable to initialize dsi clks\n", __func__);
+               goto fail;
+       }
+
        msm_host->rx_buf = devm_kzalloc(&pdev->dev, SZ_4K, GFP_KERNEL);
        if (!msm_host->rx_buf) {
                pr_err("%s: alloc rx temp buf failed\n", __func__);
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
hosted by The Linux Foundation

--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to