From ec3e1e02fc89869144d2da987cfe01977f92f38b Mon Sep 17 00:00:00 2001 From: Dhaval Patel Date: Mon, 11 May 2015 14:32:37 -0700 Subject: 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 --- drivers/video/fbdev/msm/mdss.h | 1 + drivers/video/fbdev/msm/mdss_mdp.c | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) (limited to 'drivers/video/fbdev') 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; } -- cgit v1.2.3