diff options
Diffstat (limited to 'drivers/clk')
-rw-r--r-- | drivers/clk/msm/mdss/mdss-dsi-pll-28hpm.c | 16 | ||||
-rw-r--r-- | drivers/clk/msm/mdss/mdss-pll-util.c | 20 | ||||
-rw-r--r-- | drivers/clk/msm/mdss/mdss-pll.c | 9 | ||||
-rw-r--r-- | drivers/clk/msm/mdss/mdss-pll.h | 9 |
4 files changed, 11 insertions, 43 deletions
diff --git a/drivers/clk/msm/mdss/mdss-dsi-pll-28hpm.c b/drivers/clk/msm/mdss/mdss-dsi-pll-28hpm.c index 8e6da378c304..b7c698802ed7 100644 --- a/drivers/clk/msm/mdss/mdss-dsi-pll-28hpm.c +++ b/drivers/clk/msm/mdss/mdss-dsi-pll-28hpm.c @@ -94,20 +94,12 @@ static struct lpfr_cfg lpfr_lut_struct[] = { int set_byte_mux_sel(struct mux_clk *clk, int sel) { - int rc; struct mdss_pll_resources *dsi_pll_res = clk->priv; - rc = mdss_pll_resource_enable(dsi_pll_res, true); - if (rc) { - pr_err("Failed to enable mdss dsi pll resources\n"); - return rc; - } - pr_debug("byte mux set to %s mode\n", sel ? "indirect" : "direct"); MDSS_PLL_REG_W(dsi_pll_res->pll_base, DSI_PHY_PLL_UNIPHY_PLL_VREG_CFG, (sel << 1)); - mdss_pll_resource_enable(dsi_pll_res, false); return 0; } @@ -147,6 +139,13 @@ int dsi_pll_mux_prepare(struct clk *c) { struct mux_clk *mux = to_mux_clk(c); int i, rc, sel = 0; + struct mdss_pll_resources *dsi_pll_res = mux->priv; + + rc = mdss_pll_resource_enable(dsi_pll_res, true); + if (rc) { + pr_err("Failed to enable mdss dsi pll resources\n"); + return rc; + } for (i = 0; i < mux->num_parents; i++) if (mux->parents[i].src == c->parent) { @@ -164,6 +163,7 @@ int dsi_pll_mux_prepare(struct clk *c) rc = mux->ops->set_mux_sel(mux, sel); error: + mdss_pll_resource_enable(dsi_pll_res, false); return rc; } diff --git a/drivers/clk/msm/mdss/mdss-pll-util.c b/drivers/clk/msm/mdss/mdss-pll-util.c index c5d5cf385248..918ff0ad2f95 100644 --- a/drivers/clk/msm/mdss/mdss-pll-util.c +++ b/drivers/clk/msm/mdss/mdss-pll-util.c @@ -75,11 +75,6 @@ int mdss_pll_util_resource_enable(struct mdss_pll_resources *pll_res, struct dss_module_power *mp = &pll_res->mp; if (enable) { - if (pll_res->resource_refcount) { - pll_res->resource_refcount++; - return 0; - } - rc = msm_dss_enable_vreg(mp->vreg_config, mp->num_vreg, enable); if (rc) { pr_err("Failed to enable vregs rc=%d\n", rc); @@ -97,21 +92,10 @@ int mdss_pll_util_resource_enable(struct mdss_pll_resources *pll_res, pr_err("clock enable failed rc:%d\n", rc); goto clk_err; } - pll_res->resource_refcount++; } else { - if (pll_res->resource_refcount) { - pll_res->resource_refcount--; - } else { - pr_err("Trying to disable the resources without enabling them\n"); - return -EINVAL; - } + msm_dss_enable_clk(mp->clk_config, mp->num_clk, enable); - if (!pll_res->resource_refcount) { - msm_dss_enable_clk(mp->clk_config, mp->num_clk, enable); - - msm_dss_enable_vreg(mp->vreg_config, mp->num_vreg, - enable); - } + msm_dss_enable_vreg(mp->vreg_config, mp->num_vreg, enable); } return rc; diff --git a/drivers/clk/msm/mdss/mdss-pll.c b/drivers/clk/msm/mdss/mdss-pll.c index b2de68eab067..60b742e2cba3 100644 --- a/drivers/clk/msm/mdss/mdss-pll.c +++ b/drivers/clk/msm/mdss/mdss-pll.c @@ -39,18 +39,16 @@ int mdss_pll_resource_enable(struct mdss_pll_resources *pll_res, bool enable) * 1 refcount. */ if (pll_res->handoff_resources && - (!enable || (enable && pll_res->resource_refcount == 1))) { + (!enable || (enable & pll_res->resource_enable))) { pr_debug("Do not turn on/off pll resources during handoff case\n"); return rc; } - mutex_lock(&pll_res->resource_lock); rc = mdss_pll_util_resource_enable(pll_res, enable); if (rc) pr_err("Resource update failed rc=%d\n", rc); else pll_res->resource_enable = enable; - mutex_unlock(&pll_res->resource_lock); return rc; } @@ -191,9 +189,6 @@ static int mdss_pll_probe(struct platform_device *pdev) } platform_set_drvdata(pdev, pll_res); - mutex_init(&pll_res->resource_lock); - pll_res->resource_refcount = 0; - pll_base_reg = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pll_base"); if (!pll_base_reg) { @@ -259,7 +254,6 @@ phy_io_error: res_parse_error: iounmap(pll_res->pll_base); io_error: - mutex_destroy(&pll_res->resource_lock); devm_kfree(&pdev->dev, pll_res); error: return rc; @@ -280,7 +274,6 @@ static int mdss_pll_remove(struct platform_device *pdev) iounmap(pll_res->phy_base); mdss_pll_resource_release(pdev, pll_res); iounmap(pll_res->pll_base); - mutex_destroy(&pll_res->resource_lock); devm_kfree(&pdev->dev, pll_res); return 0; } diff --git a/drivers/clk/msm/mdss/mdss-pll.h b/drivers/clk/msm/mdss/mdss-pll.h index 023eb0bbb4f6..27b7b4fd4d1b 100644 --- a/drivers/clk/msm/mdss/mdss-pll.h +++ b/drivers/clk/msm/mdss/mdss-pll.h @@ -64,15 +64,6 @@ struct mdss_pll_resources { * feature is disabled. */ bool handoff_resources; - - /* - * Keep refrence count of pll resource client to avoid releasing them - * before all clients are finished with their tasks - */ - unsigned int resource_refcount; - - /* Lock status to provide updated resource status to all clients */ - struct mutex resource_lock; }; int mdss_pll_resource_enable(struct mdss_pll_resources *pll_res, bool enable); |