From de7005f05463898fd69c79bcaa58158cda92d576 Mon Sep 17 00:00:00 2001 From: Jishnu Prakash Date: Wed, 20 Jan 2021 12:38:00 +0530 Subject: [PATCH] regulator: qpnp-lcdb: Add support for NCP symmetry with LDO Add a device tree property which enables NCP symmetry. This configuration in HW enables the NCP voltage to follow LDO. Change-Id: If44b049a3ecd031f111dcb8477166925a0d01914 Signed-off-by: Jishnu Prakash --- drivers/regulator/qpnp-lcdb-regulator.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/regulator/qpnp-lcdb-regulator.c b/drivers/regulator/qpnp-lcdb-regulator.c index da6a3d4c72a3..bd2299975c19 100644 --- a/drivers/regulator/qpnp-lcdb-regulator.c +++ b/drivers/regulator/qpnp-lcdb-regulator.c @@ -182,6 +182,7 @@ /* NCP */ #define LCDB_NCP_OUTPUT_VOLTAGE_REG 0x81 +#define EN_NCP_VOUT_SYMMETRY_BIT BIT(7) #define LCDB_NCP_VREG_OK_CTL_REG 0x85 @@ -282,6 +283,7 @@ struct qpnp_lcdb { int min_voltage_mv; int max_voltage_mv; int pwrup_config; + bool ncp_symmetry; /* TTW params */ bool ttw_enable; @@ -1525,7 +1527,8 @@ static int qpnp_lcdb_get_voltage(struct qpnp_lcdb *lcdb, if (type == BST) return qpnp_lcdb_get_bst_voltage(lcdb, voltage_mv); - if (type == NCP) + /* When symmetry is enabled, NCP voltage directly follows LDO voltage */ + if (type == NCP && !lcdb->ncp_symmetry) offset = LCDB_NCP_OUTPUT_VOLTAGE_REG; rc = qpnp_lcdb_read(lcdb, lcdb->base + offset, &val, 1); @@ -2465,6 +2468,15 @@ static int qpnp_lcdb_hw_init(struct qpnp_lcdb *lcdb) return rc; } + if (lcdb->ncp_symmetry) { + rc = qpnp_lcdb_masked_write(lcdb, lcdb->base + + LCDB_NCP_OUTPUT_VOLTAGE_REG, + EN_NCP_VOUT_SYMMETRY_BIT, + EN_NCP_VOUT_SYMMETRY_BIT); + if (rc < 0) + return rc; + } + rc = qpnp_lcdb_init_bst(lcdb); if (rc < 0) { pr_err("Failed to initialize BOOST rc=%d\n", rc); @@ -2588,6 +2600,9 @@ static int qpnp_lcdb_parse_dt(struct qpnp_lcdb *lcdb) lcdb->voltage_step_ramp = of_property_read_bool(node, "qcom,voltage-step-ramp"); + lcdb->ncp_symmetry = + of_property_read_bool(node, "qcom,ncp-symmetry"); + lcdb->pwrdn_delay_ms = -EINVAL; lcdb->pwrup_delay_ms = -EINVAL; lcdb->pwrup_config = -EINVAL;