diff options
| author | Dhaval Patel <pdhaval@codeaurora.org> | 2015-02-21 12:41:58 -0800 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:38:11 -0700 |
| commit | a3eab01e8db60fa87f939a915065a79b0fa730a6 (patch) | |
| tree | c66b6d51db1012883f546f22ca6783674bd17a2e | |
| parent | 11f814f19a34b0b658b6fae8b6c2f4c50a5c6b3f (diff) | |
msm: mdss: enable mmagic gdsc before turning on mdp gdsc
MDP, DSI, HDMI and PLL modules turn on mdp gdsc independently.
It is illegal to turn on mdp gdsc without turning on mmagic
gdsc on thulium target. This change adds mmagic vote
for these modules.
Change-Id: I765fcc42477b9e46d0da48cb0cf5b298f58b7815
[veeras@codeaurora.org: As part of 3.18 upgrade,
remove msmthulium-mdss-pll.dtsi, msmthulium-mdss.dtsi changes
from this gerit]
Signed-off-by: Dhaval Patel <pdhaval@codeaurora.org>
Signed-off-by: Veera Sundaram Sankaran <veeras@codeaurora.org>
| -rw-r--r-- | drivers/video/fbdev/msm/mdss.h | 1 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp.c | 25 |
2 files changed, 26 insertions, 0 deletions
diff --git a/drivers/video/fbdev/msm/mdss.h b/drivers/video/fbdev/msm/mdss.h index 1a24a2de4b1d..d5972c7f22a3 100644 --- a/drivers/video/fbdev/msm/mdss.h +++ b/drivers/video/fbdev/msm/mdss.h @@ -183,6 +183,7 @@ struct mdss_data_type { u32 mdp_rev; struct clk *mdp_clk[MDSS_MAX_CLK]; struct regulator *fs; + struct regulator *mmagic_mdss; struct regulator *vdd_cx; bool batfet_required; struct regulator *batfet; diff --git a/drivers/video/fbdev/msm/mdss_mdp.c b/drivers/video/fbdev/msm/mdss_mdp.c index fef1ca18b1ee..e6286973184b 100644 --- a/drivers/video/fbdev/msm/mdss_mdp.c +++ b/drivers/video/fbdev/msm/mdss_mdp.c @@ -880,6 +880,14 @@ static int mdss_mdp_irq_clk_setup(struct mdss_data_type *mdata) pr_err("unable to get gdsc regulator\n"); return -EINVAL; } + + mdata->mmagic_mdss = devm_regulator_get(&mdata->pdev->dev, + "gdsc-mmagic-mdss"); + if (IS_ERR_OR_NULL(mdata->mmagic_mdss)) { + mdata->mmagic_mdss = NULL; + pr_debug("unable to get mmagic gdsc regulator\n"); + } + mdata->fs_ena = false; mdata->gdsc_cb.notifier_call = mdss_mdp_gdsc_notifier_call; @@ -1086,6 +1094,12 @@ void mdss_mdp_footswitch_ctrl_splash(int on) if (mdata != NULL) { if (on) { pr_debug("Enable MDP FS for splash.\n"); + if (mdata->mmagic_mdss) { + ret = regulator_enable(mdata->mmagic_mdss); + if (ret) + pr_err("Mmagic MDSS failed to enable\n"); + } + ret = regulator_enable(mdata->fs); if (ret) pr_err("Footswitch failed to enable\n"); @@ -1095,6 +1109,8 @@ void mdss_mdp_footswitch_ctrl_splash(int on) pr_debug("Disable MDP FS for splash.\n"); mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF); regulator_disable(mdata->fs); + if (mdata->mmagic_mdss) + regulator_disable(mdata->mmagic_mdss); mdata->handoff_pending = false; } } else { @@ -3211,9 +3227,16 @@ static void mdss_mdp_footswitch_ctrl(struct mdss_data_type *mdata, int on) if (on) { if (!mdata->fs_ena) { pr_debug("Enable MDP FS\n"); + if (mdata->mmagic_mdss) { + ret = regulator_enable(mdata->mmagic_mdss); + if (ret) + pr_warn("mmagic mdss failed to enable\n"); + } + ret = regulator_enable(mdata->fs); if (ret) pr_warn("Footswitch failed to enable\n"); + if (!mdata->idle_pc) { mdss_mdp_cx_ctrl(mdata, true); mdss_mdp_batfet_ctrl(mdata, true); @@ -3237,6 +3260,8 @@ static void mdss_mdp_footswitch_ctrl(struct mdss_data_type *mdata, int on) mdss_mdp_batfet_ctrl(mdata, false); } regulator_disable(mdata->fs); + if (mdata->mmagic_mdss) + regulator_disable(mdata->mmagic_mdss); } mdata->fs_ena = false; } |
