diff options
| author | Linux Build Service Account <lnxbuild@quicinc.com> | 2017-10-25 07:26:48 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-10-25 07:26:48 -0700 |
| commit | 77383f7a134fba4b5a53c5bb646624b66cfc808c (patch) | |
| tree | d68f7f8d3dd02ba73636e18ec9eb7b62db216620 | |
| parent | 06c14914881be92b799af6e0f405eaf6bead4d07 (diff) | |
| parent | 1b9a30ef0ec3eda5c65eda4b2c996f8378c0e5c8 (diff) | |
Merge "regulator: qpnp-labibb: Allow 0 ms for IBB PWRUP_DLY1 and PWRDN_DLY2"
| -rw-r--r-- | drivers/regulator/qpnp-labibb-regulator.c | 43 |
1 files changed, 27 insertions, 16 deletions
diff --git a/drivers/regulator/qpnp-labibb-regulator.c b/drivers/regulator/qpnp-labibb-regulator.c index 0314e28a5966..4cef8904a76a 100644 --- a/drivers/regulator/qpnp-labibb-regulator.c +++ b/drivers/regulator/qpnp-labibb-regulator.c @@ -3272,7 +3272,7 @@ static int qpnp_ibb_dt_init(struct qpnp_labibb *labibb, struct device_node *of_node) { int rc = 0; - u32 i, tmp = 0; + u32 i = 0, tmp = 0; u8 val, mask; /* @@ -3306,37 +3306,48 @@ static int qpnp_ibb_dt_init(struct qpnp_labibb *labibb, rc = of_property_read_u32(of_node, "qcom,qpnp-ibb-lab-pwrdn-delay", &tmp); if (!rc) { - for (val = 0; val < ARRAY_SIZE(ibb_pwrdn_dly_table); val++) - if (ibb_pwrdn_dly_table[val] == tmp) - break; + if (tmp > 0) { + for (i = 0; i < ARRAY_SIZE(ibb_pwrdn_dly_table); i++) { + if (ibb_pwrdn_dly_table[i] == tmp) + break; + } - if (val == ARRAY_SIZE(ibb_pwrdn_dly_table)) { - pr_err("Invalid value in qcom,qpnp-ibb-lab-pwrdn-delay\n"); - return -EINVAL; + if (i == ARRAY_SIZE(ibb_pwrdn_dly_table)) { + pr_err("Invalid value in qcom,qpnp-ibb-lab-pwrdn-delay\n"); + return -EINVAL; + } } labibb->ibb_vreg.pwrdn_dly = tmp; - val |= IBB_PWRUP_PWRDN_CTL_1_EN_DLY2; + + if (tmp > 0) + val = i | IBB_PWRUP_PWRDN_CTL_1_EN_DLY2; + mask |= IBB_PWRUP_PWRDN_CTL_1_EN_DLY2; } rc = of_property_read_u32(of_node, "qcom,qpnp-ibb-lab-pwrup-delay", &tmp); if (!rc) { - for (i = 0; i < ARRAY_SIZE(ibb_pwrup_dly_table); i++) - if (ibb_pwrup_dly_table[i] == tmp) - break; + if (tmp > 0) { + for (i = 0; i < ARRAY_SIZE(ibb_pwrup_dly_table); i++) { + if (ibb_pwrup_dly_table[i] == tmp) + break; + } - if (i == ARRAY_SIZE(ibb_pwrup_dly_table)) { - pr_err("Invalid value in qcom,qpnp-ibb-lab-pwrup-delay\n"); - return -EINVAL; + if (i == ARRAY_SIZE(ibb_pwrup_dly_table)) { + pr_err("Invalid value in qcom,qpnp-ibb-lab-pwrup-delay\n"); + return -EINVAL; + } } labibb->ibb_vreg.pwrup_dly = tmp; + if (tmp > 0) + val |= IBB_PWRUP_PWRDN_CTL_1_EN_DLY1; + val |= (i << IBB_PWRUP_PWRDN_CTL_1_DLY1_SHIFT); - val |= (IBB_PWRUP_PWRDN_CTL_1_EN_DLY1 | - IBB_PWRUP_PWRDN_CTL_1_LAB_VREG_OK); + val |= IBB_PWRUP_PWRDN_CTL_1_LAB_VREG_OK; mask |= (IBB_PWRUP_PWRDN_CTL_1_EN_DLY1 | IBB_PWRUP_PWRDN_CTL_1_DLY1_MASK | IBB_PWRUP_PWRDN_CTL_1_LAB_VREG_OK); |
