summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDhaval Patel <pdhaval@codeaurora.org>2015-05-11 14:32:37 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:41:01 -0700
commitec3e1e02fc89869144d2da987cfe01977f92f38b (patch)
tree5e342bff6d178dde468090b2656d97b428b4b8b5
parent0e4cb72b71dfa0503a9ac9f16f67e1cdee112cd0 (diff)
msm: mdss: add venus gdsc support in mdp
Venus gdsc has to be turned on before turning on mdss gdsc due to hardware limitation for msm8996 v2 target. This change adds venus gdsc support in mdp driver. Change-Id: I2d6db6d43ac20d2e5196f5e31187246da38365d0 Signed-off-by: Dhaval Patel <pdhaval@codeaurora.org>
-rw-r--r--drivers/video/fbdev/msm/mdss.h1
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp.c24
2 files changed, 25 insertions, 0 deletions
diff --git a/drivers/video/fbdev/msm/mdss.h b/drivers/video/fbdev/msm/mdss.h
index 3339b264988a..8d015640796c 100644
--- a/drivers/video/fbdev/msm/mdss.h
+++ b/drivers/video/fbdev/msm/mdss.h
@@ -206,6 +206,7 @@ struct mdss_data_type {
u32 mdp_rev;
struct clk *mdp_clk[MDSS_MAX_CLK];
struct regulator *fs;
+ struct regulator *venus;
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 e9302b100c8d..6b69865abf54 100644
--- a/drivers/video/fbdev/msm/mdss_mdp.c
+++ b/drivers/video/fbdev/msm/mdss_mdp.c
@@ -943,6 +943,14 @@ static int mdss_mdp_irq_clk_setup(struct mdss_data_type *mdata)
pr_err("unable to get gdsc regulator\n");
return -EINVAL;
}
+
+ mdata->venus = devm_regulator_get_optional(&mdata->pdev->dev,
+ "gdsc-venus");
+ if (IS_ERR_OR_NULL(mdata->venus)) {
+ mdata->venus = NULL;
+ pr_debug("unable to get venus gdsc regulator\n");
+ }
+
mdata->fs_ena = false;
mdata->gdsc_cb.notifier_call = mdss_mdp_gdsc_notifier_call;
@@ -1203,6 +1211,12 @@ void mdss_mdp_footswitch_ctrl_splash(int on)
if (mdata != NULL) {
if (on) {
pr_debug("Enable MDP FS for splash.\n");
+ if (mdata->venus) {
+ ret = regulator_enable(mdata->venus);
+ if (ret)
+ pr_err("venus failed to enable\n");
+ }
+
ret = regulator_enable(mdata->fs);
if (ret)
pr_err("Footswitch failed to enable\n");
@@ -1212,6 +1226,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->venus)
+ regulator_disable(mdata->venus);
mdata->handoff_pending = false;
}
} else {
@@ -3497,6 +3513,12 @@ 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->venus) {
+ ret = regulator_enable(mdata->venus);
+ if (ret)
+ pr_err("venus failed to enable\n");
+ }
+
ret = regulator_enable(mdata->fs);
if (ret)
pr_warn("Footswitch failed to enable\n");
@@ -3527,6 +3549,8 @@ static void mdss_mdp_footswitch_ctrl(struct mdss_data_type *mdata, int on)
if (mdata->en_svs_high)
mdss_mdp_config_cx_voltage(mdata, false);
regulator_disable(mdata->fs);
+ if (mdata->venus)
+ regulator_disable(mdata->venus);
}
mdata->fs_ena = false;
}