static int qpnp_regulator_vs_enable(struct regulator_dev *rdev) { struct qpnp_regulator *vreg = rdev_get_drvdata(rdev); int rc; u8 reg; if (vreg->ocp_enable == QPNP_REGULATOR_ENABLE) { /* Disable OCP */ reg = QPNP_VS_OCP_DISABLE; rc = qpnp_vreg_write(vreg, QPNP_VS_REG_OCP, ®, 1); if (rc) goto fail; } rc = qpnp_regulator_common_enable(rdev); if (rc) goto fail; if (vreg->ocp_enable == QPNP_REGULATOR_ENABLE) { /* Wait for inrush current to subsided, then enable OCP. */ udelay(vreg->ocp_enable_time); reg = QPNP_VS_OCP_ENABLE_MASK; rc = qpnp_vreg_write(vreg, QPNP_VS_REG_OCP, ®, 1); if (rc) goto fail; } return rc; fail: vreg_err(vreg, "qpnp_vreg_write failed, rc=%d\n", rc); return rc; }
static int qpnp_regulator_vs_enable(struct regulator_dev *rdev) { struct qpnp_regulator *vreg = rdev_get_drvdata(rdev); if (vreg->ocp_irq) { vreg->ocp_count = 0; vreg->vs_enable_time = ktime_get(); } return qpnp_regulator_common_enable(rdev); }