diff options
-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); |