diff options
author | Aravind Venkateswaran <aravindh@codeaurora.org> | 2016-05-26 13:58:52 -0700 |
---|---|---|
committer | Kyle Yan <kyan@codeaurora.org> | 2016-05-31 15:22:52 -0700 |
commit | b8dbd377af79309592626ae514b103a964ebf437 (patch) | |
tree | 2ed06177cc78606f6e6800a440d941361edb5fb1 /drivers/video | |
parent | 2caa570df22d3575080174c7df14ab57d1d2cbb9 (diff) |
msm: mdss: dsi: enable additional clocks for register access on msmcobalt
MMMS mnoc_ahb clock needs to be enabled prior to enabling the mdss_ahb
clock on msmcobalt as there is a core fsm dependency between these
clocks.
Change-Id: I475b44619b68e731abc8b1a91a214c6cdf8cfc5e
Signed-off-by: Aravind Venkateswaran <aravindh@codeaurora.org>
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/fbdev/msm/mdss_dsi.c | 1 | ||||
-rw-r--r-- | drivers/video/fbdev/msm/mdss_dsi.h | 1 | ||||
-rw-r--r-- | drivers/video/fbdev/msm/mdss_dsi_clk.c | 15 | ||||
-rw-r--r-- | drivers/video/fbdev/msm/mdss_dsi_clk.h | 1 | ||||
-rw-r--r-- | drivers/video/fbdev/msm/msm_mdss_io_8974.c | 8 |
5 files changed, 25 insertions, 1 deletions
diff --git a/drivers/video/fbdev/msm/mdss_dsi.c b/drivers/video/fbdev/msm/mdss_dsi.c index de4c4c7c2762..cdc597bebf52 100644 --- a/drivers/video/fbdev/msm/mdss_dsi.c +++ b/drivers/video/fbdev/msm/mdss_dsi.c @@ -2780,6 +2780,7 @@ static int mdss_dsi_ctrl_clock_init(struct platform_device *ctrl_pdev, memset(&info, 0x0, sizeof(info)); info.core_clks.mdp_core_clk = ctrl_pdata->shared_data->mdp_core_clk; + info.core_clks.mnoc_clk = ctrl_pdata->shared_data->mnoc_clk; info.core_clks.ahb_clk = ctrl_pdata->shared_data->ahb_clk; info.core_clks.axi_clk = ctrl_pdata->shared_data->axi_clk; info.core_clks.mmss_misc_ahb_clk = diff --git a/drivers/video/fbdev/msm/mdss_dsi.h b/drivers/video/fbdev/msm/mdss_dsi.h index c91bc29c9bcc..a6f27c0aaee7 100644 --- a/drivers/video/fbdev/msm/mdss_dsi.h +++ b/drivers/video/fbdev/msm/mdss_dsi.h @@ -254,6 +254,7 @@ struct dsi_shared_data { /* DSI bus clocks */ struct clk *mdp_core_clk; + struct clk *mnoc_clk; struct clk *ahb_clk; struct clk *axi_clk; struct clk *mmss_misc_ahb_clk; diff --git a/drivers/video/fbdev/msm/mdss_dsi_clk.c b/drivers/video/fbdev/msm/mdss_dsi_clk.c index a43174d8ce84..5d6fb8722dad 100644 --- a/drivers/video/fbdev/msm/mdss_dsi_clk.c +++ b/drivers/video/fbdev/msm/mdss_dsi_clk.c @@ -78,10 +78,18 @@ static int dsi_core_clk_start(struct dsi_core_clks *c_clks) goto error; } + if (c_clks->clks.mnoc_clk) { + rc = clk_prepare_enable(c_clks->clks.mnoc_clk); + if (rc) { + pr_err("failed to enable mnoc clock. rc=%d\n", rc); + goto disable_core_clk; + } + } + rc = clk_prepare_enable(c_clks->clks.ahb_clk); if (rc) { pr_err("%s: failed to enable ahb clock. rc=%d\n", __func__, rc); - goto disable_core_clk; + goto disable_mnoc_clk; } rc = clk_prepare_enable(c_clks->clks.axi_clk); @@ -115,6 +123,9 @@ disable_axi_clk: clk_disable_unprepare(c_clks->clks.axi_clk); disable_ahb_clk: clk_disable_unprepare(c_clks->clks.ahb_clk); +disable_mnoc_clk: + if (c_clks->clks.mnoc_clk) + clk_disable_unprepare(c_clks->clks.mnoc_clk); disable_core_clk: clk_disable_unprepare(c_clks->clks.mdp_core_clk); error: @@ -134,6 +145,8 @@ static int dsi_core_clk_stop(struct dsi_core_clks *c_clks) clk_disable_unprepare(c_clks->clks.mmss_misc_ahb_clk); clk_disable_unprepare(c_clks->clks.axi_clk); clk_disable_unprepare(c_clks->clks.ahb_clk); + if (c_clks->clks.mnoc_clk) + clk_disable_unprepare(c_clks->clks.mnoc_clk); clk_disable_unprepare(c_clks->clks.mdp_core_clk); pr_debug("%s: CORE CLOCK IS OFF\n", mngr->name); diff --git a/drivers/video/fbdev/msm/mdss_dsi_clk.h b/drivers/video/fbdev/msm/mdss_dsi_clk.h index f4d9c016e0c5..9fe45254fe6d 100644 --- a/drivers/video/fbdev/msm/mdss_dsi_clk.h +++ b/drivers/video/fbdev/msm/mdss_dsi_clk.h @@ -97,6 +97,7 @@ typedef int (*pre_clockon_cb)(void *priv, struct mdss_dsi_core_clk_info { struct clk *mdp_core_clk; + struct clk *mnoc_clk; struct clk *ahb_clk; struct clk *axi_clk; struct clk *mmss_misc_ahb_clk; diff --git a/drivers/video/fbdev/msm/msm_mdss_io_8974.c b/drivers/video/fbdev/msm/msm_mdss_io_8974.c index 909b3b5ccf0c..6da526f647d9 100644 --- a/drivers/video/fbdev/msm/msm_mdss_io_8974.c +++ b/drivers/video/fbdev/msm/msm_mdss_io_8974.c @@ -1266,6 +1266,8 @@ void mdss_dsi_core_clk_deinit(struct device *dev, struct dsi_shared_data *sdata) devm_clk_put(dev, sdata->axi_clk); if (sdata->ahb_clk) devm_clk_put(dev, sdata->ahb_clk); + if (sdata->mnoc_clk) + devm_clk_put(dev, sdata->mnoc_clk); if (sdata->mdp_core_clk) devm_clk_put(dev, sdata->mdp_core_clk); } @@ -1416,6 +1418,12 @@ int mdss_dsi_core_clk_init(struct platform_device *pdev, __func__); } + sdata->mnoc_clk = devm_clk_get(dev, "mnoc_clk"); + if (IS_ERR(sdata->mnoc_clk)) { + pr_debug("%s: Unable to get mnoc clk\n", __func__); + sdata->mnoc_clk = NULL; + } + error: if (rc) mdss_dsi_core_clk_deinit(dev, sdata); |