summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDhaval Patel <pdhaval@codeaurora.org>2015-02-21 12:41:58 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:38:11 -0700
commita3eab01e8db60fa87f939a915065a79b0fa730a6 (patch)
treec66b6d51db1012883f546f22ca6783674bd17a2e
parent11f814f19a34b0b658b6fae8b6c2f4c50a5c6b3f (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.h1
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp.c25
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;
}