Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 941c0c24 authored by Anirudh Ghayal's avatar Anirudh Ghayal Committed by Subbaraman Narayanamurthy
Browse files

regulator: lcdb: Add WA for vph_pwr_2p5_ok signal being invalid



The LCDB module does not sample the vph_pwr_2p5_ok signal if it drops
low when the module is off. It will continue with the last known
state of vph_pwr_2p5_ok which could cause a problem if vph_pwr_2p5_ok
is indeed low. Fix this by re-enabling of the module to activate
the vph_pwr_2p5_ok signal sampling.

CRs-Fixed: 1053543
Change-Id: If0950140cae12c92bb6be428b22400b492f823e4
Signed-off-by: default avatarAnirudh Ghayal <aghayal@codeaurora.org>
parent 98db95a2
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -26,6 +26,13 @@ First Level Node - LCDB module
	Value type: <prop-encoded-array>
	Definition:  Base address of the LCDB SPMI peripheral.

- qcom,force-module-reenable
	Usage:      required if using SW mode for module enable
	Value type:  <bool>
	Definition: This enables the workaround to force enable
		    the vph_pwr_2p5_ok signal required for
		    turning on the LCDB module.

Touch-to-wake (TTW) properties:

TTW supports 2 modes of operation - HW and SW. In the HW mode the enable/disable
@@ -59,7 +66,6 @@ main node.
	Definition: ON time (in mS) for the VDISP/VDISN signals.
		    Possible values are 4, 8, 16, 32.


========================================
Second Level Nodes - LDO/NCP/BOOST block
========================================
+23 −0
Original line number Diff line number Diff line
@@ -190,6 +190,9 @@ struct qpnp_lcdb {
	bool				ttw_enable;
	bool				ttw_mode_sw;

	/* top level DT params */
	bool				force_module_reenable;

	/* status parameters */
	bool				lcdb_enabled;
	bool				settings_saved;
@@ -588,6 +591,23 @@ static int qpnp_lcdb_enable(struct qpnp_lcdb *lcdb)
		goto fail_enable;
	}

	if (lcdb->force_module_reenable) {
		val = 0;
		rc = qpnp_lcdb_write(lcdb, lcdb->base + LCDB_ENABLE_CTL1_REG,
								&val, 1);
		if (rc < 0) {
			pr_err("Failed to enable lcdb rc= %d\n", rc);
			goto fail_enable;
		}
		val = MODULE_EN_BIT;
		rc = qpnp_lcdb_write(lcdb, lcdb->base + LCDB_ENABLE_CTL1_REG,
								&val, 1);
		if (rc < 0) {
			pr_err("Failed to disable lcdb rc= %d\n", rc);
			goto fail_enable;
		}
	}

	/* poll for vreg_ok */
	timeout = 10;
	delay = lcdb->bst.soft_start_us + lcdb->ldo.soft_start_us +
@@ -1590,6 +1610,9 @@ static int qpnp_lcdb_parse_dt(struct qpnp_lcdb *lcdb)
		}
	}

	lcdb->force_module_reenable = of_property_read_bool(node,
					"qcom,force-module-reenable");

	if (of_property_read_bool(node, "qcom,ttw-enable")) {
		rc = qpnp_lcdb_parse_ttw(lcdb);
		if (rc < 0) {