summaryrefslogtreecommitdiff
path: root/drivers/video/fbdev
diff options
context:
space:
mode:
authorAbhijit Kulkarni <kabhijit@codeaurora.org>2017-02-16 19:02:17 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2017-04-04 17:25:50 -0700
commit6d9f602c728b3f41f24a965ef60db0f273f51cbe (patch)
tree0a7a4bfa4c2a72d6e162df604a7f7c2bb538ac16 /drivers/video/fbdev
parent4c332132fc72dd634004f76d92534995feaad15c (diff)
msm: dsi: Turn off supplies in low power state
This change allows certain phy supplies to be turned off when display transtions to low power state. This change adds funtionality to check each supplies setting and accordingly turns off the the regulator if it is allowed in low power state. CRs-Fixed: 2009863 Change-Id: I764a8e65246b5de733f27e4f73d966b19039895d Signed-off-by: Abhijit Kulkarni <kabhijit@codeaurora.org>
Diffstat (limited to 'drivers/video/fbdev')
-rw-r--r--drivers/video/fbdev/msm/mdss_dsi.c10
-rw-r--r--drivers/video/fbdev/msm/msm_mdss_io_8974.c26
2 files changed, 29 insertions, 7 deletions
diff --git a/drivers/video/fbdev/msm/mdss_dsi.c b/drivers/video/fbdev/msm/mdss_dsi.c
index 17722eac3006..dbf302d76d7b 100644
--- a/drivers/video/fbdev/msm/mdss_dsi.c
+++ b/drivers/video/fbdev/msm/mdss_dsi.c
@@ -570,7 +570,11 @@ static int mdss_dsi_get_dt_vreg_data(struct device *dev,
mp->vreg_config[i].post_off_sleep = tmp;
}
- pr_debug("%s: %s min=%d, max=%d, enable=%d, disable=%d, preonsleep=%d, postonsleep=%d, preoffsleep=%d, postoffsleep=%d\n",
+ mp->vreg_config[i].lp_disable_allowed =
+ of_property_read_bool(supply_node,
+ "qcom,supply-lp-mode-disable-allowed");
+
+ pr_debug("%s: %s min=%d, max=%d, enable=%d, disable=%d, preonsleep=%d, postonsleep=%d, preoffsleep=%d, postoffsleep=%d lp_disable_allowed=%d\n",
__func__,
mp->vreg_config[i].vreg_name,
mp->vreg_config[i].min_voltage,
@@ -580,8 +584,8 @@ static int mdss_dsi_get_dt_vreg_data(struct device *dev,
mp->vreg_config[i].pre_on_sleep,
mp->vreg_config[i].post_on_sleep,
mp->vreg_config[i].pre_off_sleep,
- mp->vreg_config[i].post_off_sleep
- );
+ mp->vreg_config[i].post_off_sleep,
+ mp->vreg_config[i].lp_disable_allowed);
++i;
}
diff --git a/drivers/video/fbdev/msm/msm_mdss_io_8974.c b/drivers/video/fbdev/msm/msm_mdss_io_8974.c
index 03e78733d168..e232d98a7cf7 100644
--- a/drivers/video/fbdev/msm/msm_mdss_io_8974.c
+++ b/drivers/video/fbdev/msm/msm_mdss_io_8974.c
@@ -2419,9 +2419,16 @@ int mdss_dsi_post_clkoff_cb(void *priv,
pdata = &ctrl->panel_data;
for (i = DSI_MAX_PM - 1; i >= DSI_CORE_PM; i--) {
- if ((ctrl->ctrl_state & CTRL_STATE_DSI_ACTIVE) &&
- (i != DSI_CORE_PM))
- continue;
+ /**
+ * If DSI_CTRL is active, proceed to turn off
+ * supplies which support turning off in low power
+ * state
+ */
+ if (ctrl->ctrl_state & CTRL_STATE_DSI_ACTIVE)
+ if (!sdata->power_data[i].vreg_config
+ ->lp_disable_allowed)
+ continue;
+
rc = msm_dss_enable_vreg(
sdata->power_data[i].vreg_config,
sdata->power_data[i].num_vreg, 0);
@@ -2431,6 +2438,12 @@ int mdss_dsi_post_clkoff_cb(void *priv,
__mdss_dsi_pm_name(i));
rc = 0;
} else {
+ pr_debug("%s: disabled vreg for %s panel_state %d\n",
+ __func__,
+ __mdss_dsi_pm_name(i),
+ pdata->panel_info.panel_power_state);
+ sdata->power_data[i].vreg_config->disabled =
+ true;
ctrl->core_power = false;
}
}
@@ -2470,7 +2483,7 @@ int mdss_dsi_pre_clkon_cb(void *priv,
for (i = DSI_CORE_PM; i < DSI_MAX_PM; i++) {
if ((ctrl->ctrl_state & CTRL_STATE_DSI_ACTIVE) &&
(!pdata->panel_info.cont_splash_enabled) &&
- (i != DSI_CORE_PM))
+ (!sdata->power_data[i].vreg_config->disabled))
continue;
rc = msm_dss_enable_vreg(
sdata->power_data[i].vreg_config,
@@ -2480,6 +2493,11 @@ int mdss_dsi_pre_clkon_cb(void *priv,
__func__,
__mdss_dsi_pm_name(i));
} else {
+ pr_debug("%s: enabled vregs for %s\n",
+ __func__,
+ __mdss_dsi_pm_name(i));
+ sdata->power_data[i].vreg_config->disabled =
+ false;
ctrl->core_power = true;
}