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-post-on-sleep: time to sleep (ms) after turning on
-- qcom,supply-pre-off-sleep: time to sleep (ms) before turning off -- 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-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 - pll-src-config Specified the source PLL for the DSI
link clocks: link clocks:
"PLL0" - Clocks sourced out of DSI PLL0 "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; 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__, __func__,
mp->vreg_config[i].vreg_name, mp->vreg_config[i].vreg_name,
mp->vreg_config[i].min_voltage, 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].pre_on_sleep,
mp->vreg_config[i].post_on_sleep, mp->vreg_config[i].post_on_sleep,
mp->vreg_config[i].pre_off_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; ++i;
} }

View file

@ -2615,9 +2615,16 @@ int mdss_dsi_post_clkoff_cb(void *priv,
pdata = &ctrl->panel_data; pdata = &ctrl->panel_data;
for (i = DSI_MAX_PM - 1; i >= DSI_CORE_PM; i--) { for (i = DSI_MAX_PM - 1; i >= DSI_CORE_PM; i--) {
if ((ctrl->ctrl_state & CTRL_STATE_DSI_ACTIVE) && /**
(i != DSI_CORE_PM)) * 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; continue;
rc = msm_dss_enable_vreg( rc = msm_dss_enable_vreg(
sdata->power_data[i].vreg_config, sdata->power_data[i].vreg_config,
sdata->power_data[i].num_vreg, 0); sdata->power_data[i].num_vreg, 0);
@ -2627,6 +2634,12 @@ int mdss_dsi_post_clkoff_cb(void *priv,
__mdss_dsi_pm_name(i)); __mdss_dsi_pm_name(i));
rc = 0; rc = 0;
} else { } 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; 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++) { for (i = DSI_CORE_PM; i < DSI_MAX_PM; i++) {
if ((ctrl->ctrl_state & CTRL_STATE_DSI_ACTIVE) && if ((ctrl->ctrl_state & CTRL_STATE_DSI_ACTIVE) &&
(!pdata->panel_info.cont_splash_enabled) && (!pdata->panel_info.cont_splash_enabled) &&
(i != DSI_CORE_PM)) (!sdata->power_data[i].vreg_config->disabled))
continue; continue;
rc = msm_dss_enable_vreg( rc = msm_dss_enable_vreg(
sdata->power_data[i].vreg_config, sdata->power_data[i].vreg_config,
@ -2676,6 +2689,11 @@ int mdss_dsi_pre_clkon_cb(void *priv,
__func__, __func__,
__mdss_dsi_pm_name(i)); __mdss_dsi_pm_name(i));
} else { } 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; 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 * 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 * 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 post_on_sleep;
int pre_off_sleep; int pre_off_sleep;
int post_off_sleep; int post_off_sleep;
bool lp_disable_allowed;
bool disabled;
}; };
struct dss_gpio { struct dss_gpio {