regulator: qpnp-oledb: Correct the conditional checks

Correct the conditional check in the oledb_hw_init to avoid programming the
configuration registers if module is already enabled. Also correct the
conditional check in the oledb_regulator_disable.

CRs-Fixed: 1114628
Change-Id: I1af6c5ba6427050832ae04e693f161c517ef03a2
Signed-off-by: Kiran Gunda <kgunda@codeaurora.org>
This commit is contained in:
Kiran Gunda 2017-01-23 13:07:55 +05:30 committed by Gerrit - the friendly Code Review server
parent 08db9f492d
commit e30ab2df19

View file

@ -1,4 +1,4 @@
/* Copyright (c) 2016, The Linux Foundation. All rights reserved. /* Copyright (c) 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
@ -152,6 +152,8 @@ struct qpnp_oledb {
struct qpnp_oledb_fast_precharge_ctl fast_prechg_ctl; struct qpnp_oledb_fast_precharge_ctl fast_prechg_ctl;
u32 base; u32 base;
u8 mod_enable;
u8 ext_pinctl_state;
int current_voltage; int current_voltage;
int default_voltage; int default_voltage;
int vout_mv; int vout_mv;
@ -162,10 +164,8 @@ struct qpnp_oledb {
int nlimit_enable; int nlimit_enable;
int sc_en; int sc_en;
int sc_dbnc_time; int sc_dbnc_time;
bool mod_enable;
bool swire_control; bool swire_control;
bool ext_pin_control; bool ext_pin_control;
bool ext_pinctl_state;
bool dynamic_ext_pinctl_config; bool dynamic_ext_pinctl_config;
bool pbs_control; bool pbs_control;
}; };
@ -292,12 +292,15 @@ static int qpnp_oledb_regulator_disable(struct regulator_dev *rdev)
* Disable ext-pin-ctl after display-supply is turned off. This is to * Disable ext-pin-ctl after display-supply is turned off. This is to
* avoid glitches on the external pin. * avoid glitches on the external pin.
*/ */
if (oledb->ext_pin_control && oledb->dynamic_ext_pinctl_config) { if (oledb->ext_pin_control) {
rc = qpnp_oledb_masked_write(oledb, oledb->base + if (oledb->dynamic_ext_pinctl_config) {
rc = qpnp_oledb_masked_write(oledb, oledb->base +
OLEDB_EXT_PIN_CTL, OLEDB_EXT_PIN_CTL_BIT, 0); OLEDB_EXT_PIN_CTL, OLEDB_EXT_PIN_CTL_BIT, 0);
if (rc < 0) { if (rc < 0) {
pr_err("Failed to write EXT_PIN_CTL rc=%d\n", rc); pr_err("Failed to write EXT_PIN_CTL rc=%d\n",
return rc; rc);
return rc;
}
} }
pr_debug("ext-pin-ctrl mode disabled\n"); pr_debug("ext-pin-ctrl mode disabled\n");
} else { } else {
@ -635,14 +638,14 @@ static int qpnp_oledb_hw_init(struct qpnp_oledb *oledb)
} }
rc = qpnp_oledb_read(oledb, oledb->base + OLEDB_MODULE_ENABLE, rc = qpnp_oledb_read(oledb, oledb->base + OLEDB_MODULE_ENABLE,
(u8 *)&oledb->mod_enable, 1); &oledb->mod_enable, 1);
if (rc < 0) { if (rc < 0) {
pr_err("Failed to read MODULE_ENABLE rc=%d\n", rc); pr_err("Failed to read MODULE_ENABLE rc=%d\n", rc);
return rc; return rc;
} }
rc = qpnp_oledb_read(oledb, oledb->base + OLEDB_EXT_PIN_CTL, rc = qpnp_oledb_read(oledb, oledb->base + OLEDB_EXT_PIN_CTL,
(u8 *)&oledb->ext_pinctl_state, 1); &oledb->ext_pinctl_state, 1);
if (rc < 0) { if (rc < 0) {
pr_err("Failed to read EXT_PIN_CTL rc=%d\n", rc); pr_err("Failed to read EXT_PIN_CTL rc=%d\n", rc);
return rc; return rc;
@ -652,7 +655,12 @@ static int qpnp_oledb_hw_init(struct qpnp_oledb *oledb)
if (rc < 0) if (rc < 0)
return rc; return rc;
if (!((val & OLEDB_EXT_PIN_CTL_BIT) || oledb->mod_enable)) { /*
* Go through if the module is not enabled either through
* external pin control or SPMI interface.
*/
if (!((oledb->ext_pinctl_state & OLEDB_EXT_PIN_CTL_BIT)
|| oledb->mod_enable)) {
if (oledb->warmup_delay != -EINVAL) { if (oledb->warmup_delay != -EINVAL) {
for (i = 0; i < ARRAY_SIZE(oledb_warmup_dly_ns); i++) { for (i = 0; i < ARRAY_SIZE(oledb_warmup_dly_ns); i++) {
if (oledb->warmup_delay == if (oledb->warmup_delay ==