diff --git a/msm/dsi/dsi_pwr.c b/msm/dsi/dsi_pwr.c index 4dee0409d87c..47ae26cf66ee 100644 --- a/msm/dsi/dsi_pwr.c +++ b/msm/dsi/dsi_pwr.c @@ -22,6 +22,7 @@ static int dsi_pwr_parse_supply_node(struct dsi_parser_utils *utils, int i = 0; u32 tmp = 0; struct device_node *node = NULL; + bool is_always_on = FALSE; dsi_for_each_child_node(root, node) { const char *st = NULL; @@ -112,6 +113,14 @@ static int dsi_pwr_parse_supply_node(struct dsi_parser_utils *utils, regs->vregs[i].post_off_sleep = tmp; } + is_always_on = utils->read_bool(node, "qcom,supply-always-on"); + if (!is_always_on) { + DSI_DEBUG("qcom,supply-always-on not specified\n"); + } else { + regs->vregs[i].is_always_on = is_always_on; + DSI_INFO("%s: always-on is specified\n", regs->vregs[i].vreg_name); + } + DSI_DEBUG("[%s] minv=%d maxv=%d, en_load=%d, dis_load=%d\n", regs->vregs[i].vreg_name, regs->vregs[i].min_voltage, @@ -206,6 +215,12 @@ static int dsi_pwr_enable_vregs(struct dsi_regulator_info *regs, bool enable) pre_off_ms = vreg->pre_off_sleep; post_off_ms = vreg->post_off_sleep; + if (vreg->is_always_on) + { + DSI_INFO("%s is always on\n", vreg->vreg_name); + continue; + } + if (pre_off_ms) usleep_range((pre_off_ms * 1000), (pre_off_ms * 1000) + 10); diff --git a/msm/dsi/dsi_pwr.h b/msm/dsi/dsi_pwr.h index 8e808b63a2f8..aef2feae3121 100644 --- a/msm/dsi/dsi_pwr.h +++ b/msm/dsi/dsi_pwr.h @@ -41,6 +41,7 @@ struct dsi_vreg { u32 post_on_sleep; u32 pre_off_sleep; u32 post_off_sleep; + bool is_always_on; }; /**