From a3eab01e8db60fa87f939a915065a79b0fa730a6 Mon Sep 17 00:00:00 2001 From: Dhaval Patel Date: Sat, 21 Feb 2015 12:41:58 -0800 Subject: [PATCH] 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 Signed-off-by: Veera Sundaram Sankaran --- drivers/video/fbdev/msm/mdss.h | 1 + drivers/video/fbdev/msm/mdss_mdp.c | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) 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; }