Merge "msm: dsi: Turn off supplies in low power state"

This commit is contained in:
Linux Build Service Account 2017-04-27 07:06:55 -07:00 committed by Gerrit - the friendly Code Review server
commit f19ae4651f
4 changed files with 34 additions and 8 deletions

View file

@ -50,6 +50,8 @@ Optional properties:
-- qcom,supply-post-on-sleep: time to sleep (ms) after turning on
-- qcom,supply-pre-off-sleep: time to sleep (ms) before turning off
-- qcom,supply-post-off-sleep: time to sleep (ms) after turning off
-- qcom,supply-lp-mode-disable-allowed: supply can be turned off in
low power state.
- pll-src-config Specified the source PLL for the DSI
link clocks:
"PLL0" - Clocks sourced out of DSI PLL0

View file

@ -662,7 +662,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,
@ -672,8 +676,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;
}

View file

@ -2615,9 +2615,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);
@ -2627,6 +2634,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;
}
}
@ -2666,7 +2679,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,
@ -2676,6 +2689,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;
}

View file

@ -1,4 +1,4 @@
/* Copyright (c) 2012, 2016, The Linux Foundation. All rights reserved.
/* Copyright (c) 2012, 2016-2017, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@ -58,6 +58,8 @@ struct dss_vreg {
int post_on_sleep;
int pre_off_sleep;
int post_off_sleep;
bool lp_disable_allowed;
bool disabled;
};
struct dss_gpio {