summaryrefslogtreecommitdiff
path: root/drivers/video
diff options
context:
space:
mode:
authorAravind Venkateswaran <aravindh@codeaurora.org>2016-05-26 13:58:52 -0700
committerKyle Yan <kyan@codeaurora.org>2016-05-31 15:22:52 -0700
commitb8dbd377af79309592626ae514b103a964ebf437 (patch)
tree2ed06177cc78606f6e6800a440d941361edb5fb1 /drivers/video
parent2caa570df22d3575080174c7df14ab57d1d2cbb9 (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.c1
-rw-r--r--drivers/video/fbdev/msm/mdss_dsi.h1
-rw-r--r--drivers/video/fbdev/msm/mdss_dsi_clk.c15
-rw-r--r--drivers/video/fbdev/msm/mdss_dsi_clk.h1
-rw-r--r--drivers/video/fbdev/msm/msm_mdss_io_8974.c8
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);