regulator: qpnp-oledb: Clear SPARE_CTL register during disable
OLEDB_SPARE_CTL register bit is set by the PBS during the display enable and is used during the display suspend to trigger the PBS event. Hence, move clearing of the OLEDB_SPARE_CTL register to regulator disable. Also enable the force_pd_ctl only for DRAX-A revisions <=2.0. Change-Id: I339cefc91f94f772bc4f84e85f2471e1a73e4aed Signed-off-by: Kiran Gunda <kgunda@codeaurora.org>
This commit is contained in:
parent
7f0d77b390
commit
35b84c47a5
3 changed files with 23 additions and 19 deletions
|
@ -57,13 +57,6 @@ Required Node Structure
|
||||||
rail. This property is applicable only if qcom,ext-pin-ctl
|
rail. This property is applicable only if qcom,ext-pin-ctl
|
||||||
property is specified and it is specific to PM660A.
|
property is specified and it is specific to PM660A.
|
||||||
|
|
||||||
- qcom,force-pd-control
|
|
||||||
Usage: optional
|
|
||||||
Value type: <bool>
|
|
||||||
Definition: Used to enable the pull down control forcibly via SPMI by
|
|
||||||
disabling the pull down configuration done by hardware
|
|
||||||
automatically through SWIRE pulses.
|
|
||||||
|
|
||||||
- qcom,pbs-client
|
- qcom,pbs-client
|
||||||
Usage: optional
|
Usage: optional
|
||||||
Value type: <phandle>
|
Value type: <phandle>
|
||||||
|
|
|
@ -368,12 +368,19 @@ static int qpnp_oledb_regulator_disable(struct regulator_dev *rdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (val & OLEDB_FORCE_PD_CTL_SPARE_BIT) {
|
if (val & OLEDB_FORCE_PD_CTL_SPARE_BIT) {
|
||||||
rc = qpnp_pbs_trigger_event(oledb->pbs_dev_node,
|
rc = qpnp_oledb_sec_masked_write(oledb, oledb->base +
|
||||||
trigger_bitmap);
|
OLEDB_SPARE_CTL,
|
||||||
|
OLEDB_FORCE_PD_CTL_SPARE_BIT, 0);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
pr_err("Failed to trigger the PBS sequence\n");
|
pr_err("Failed to write SPARE_CTL rc=%d\n", rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rc = qpnp_pbs_trigger_event(oledb->pbs_dev_node,
|
||||||
|
trigger_bitmap);
|
||||||
|
if (rc < 0)
|
||||||
|
pr_err("Failed to trigger the PBS sequence\n");
|
||||||
|
|
||||||
pr_debug("PBS event triggered\n");
|
pr_debug("PBS event triggered\n");
|
||||||
} else {
|
} else {
|
||||||
pr_debug("OLEDB_SPARE_CTL register bit not set\n");
|
pr_debug("OLEDB_SPARE_CTL register bit not set\n");
|
||||||
|
@ -1100,8 +1107,14 @@ static int qpnp_oledb_parse_dt(struct qpnp_oledb *oledb)
|
||||||
oledb->pbs_control =
|
oledb->pbs_control =
|
||||||
of_property_read_bool(of_node, "qcom,pbs-control");
|
of_property_read_bool(of_node, "qcom,pbs-control");
|
||||||
|
|
||||||
oledb->force_pd_control =
|
/* Use the force_pd_control only for PM660A versions <= v2.0 */
|
||||||
of_property_read_bool(of_node, "qcom,force-pd-control");
|
if (oledb->pmic_rev_id->pmic_subtype == PM660L_SUBTYPE &&
|
||||||
|
oledb->pmic_rev_id->rev4 <= PM660L_V2P0_REV4) {
|
||||||
|
if (!(oledb->pmic_rev_id->rev4 == PM660L_V2P0_REV4 &&
|
||||||
|
oledb->pmic_rev_id->rev2 > PM660L_V2P0_REV2)) {
|
||||||
|
oledb->force_pd_control = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (oledb->force_pd_control) {
|
if (oledb->force_pd_control) {
|
||||||
oledb->pbs_dev_node = of_parse_phandle(of_node,
|
oledb->pbs_dev_node = of_parse_phandle(of_node,
|
||||||
|
@ -1199,13 +1212,6 @@ static int qpnp_oledb_force_pulldown_config(struct qpnp_oledb *oledb)
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
u8 val;
|
u8 val;
|
||||||
|
|
||||||
rc = qpnp_oledb_sec_masked_write(oledb, oledb->base +
|
|
||||||
OLEDB_SPARE_CTL, OLEDB_FORCE_PD_CTL_SPARE_BIT, 0);
|
|
||||||
if (rc < 0) {
|
|
||||||
pr_err("Failed to write SPARE_CTL rc=%d\n", rc);
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
val = 1;
|
val = 1;
|
||||||
rc = qpnp_oledb_write(oledb, oledb->base + OLEDB_PD_CTL,
|
rc = qpnp_oledb_write(oledb, oledb->base + OLEDB_PD_CTL,
|
||||||
&val, 1);
|
&val, 1);
|
||||||
|
|
|
@ -214,6 +214,11 @@
|
||||||
#define PM660L_V1P1_REV3 0x01
|
#define PM660L_V1P1_REV3 0x01
|
||||||
#define PM660L_V1P1_REV4 0x01
|
#define PM660L_V1P1_REV4 0x01
|
||||||
|
|
||||||
|
#define PM660L_V2P0_REV1 0x00
|
||||||
|
#define PM660L_V2P0_REV2 0x00
|
||||||
|
#define PM660L_V2P0_REV3 0x00
|
||||||
|
#define PM660L_V2P0_REV4 0x02
|
||||||
|
|
||||||
/* PMI8998 FAB_ID */
|
/* PMI8998 FAB_ID */
|
||||||
#define PMI8998_FAB_ID_SMIC 0x11
|
#define PMI8998_FAB_ID_SMIC 0x11
|
||||||
#define PMI8998_FAB_ID_GF 0x30
|
#define PMI8998_FAB_ID_GF 0x30
|
||||||
|
|
Loading…
Add table
Reference in a new issue