summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);