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

Commit 6e1face3 authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "leds: vibrator-ldo: Disable LDO if VREG_READY is not set"

parents e2ca5838 4bedc5a2
Loading
Loading
Loading
Loading
+25 −14
Original line number Diff line number Diff line
@@ -65,9 +65,29 @@ struct vib_ldo_chip {
	bool			disable_overdrive;
};

static int qpnp_vib_ldo_set_voltage(struct vib_ldo_chip *chip, int new_uV)
static inline int qpnp_vib_ldo_poll_status(struct vib_ldo_chip *chip)
{
	unsigned int val;
	int ret;

	ret = regmap_read_poll_timeout(chip->regmap,
			chip->base + QPNP_VIB_LDO_REG_STATUS1, val,
			val & QPNP_VIB_LDO_VREG_READY, 100, 1000);
	if (ret < 0) {
		pr_err("Vibrator LDO vreg_ready timeout, status=0x%02x, ret=%d\n",
			val, ret);

		/* Keep VIB_LDO disabled */
		regmap_update_bits(chip->regmap,
			chip->base + QPNP_VIB_LDO_REG_EN_CTL,
			QPNP_VIB_LDO_EN, 0);
	}

	return ret;
}

static int qpnp_vib_ldo_set_voltage(struct vib_ldo_chip *chip, int new_uV)
{
	u32 vlevel;
	u8 reg[2];
	int ret;
@@ -86,13 +106,9 @@ static int qpnp_vib_ldo_set_voltage(struct vib_ldo_chip *chip, int new_uV)
	}

	if (chip->vib_enabled) {
		ret = regmap_read_poll_timeout(chip->regmap,
					chip->base + QPNP_VIB_LDO_REG_STATUS1,
					val, val & QPNP_VIB_LDO_VREG_READY,
					100, 1000);
		ret = qpnp_vib_ldo_poll_status(chip);
		if (ret < 0) {
			pr_err("Vibrator LDO vreg_ready timeout, status=0x%02x, ret=%d\n",
				val, ret);
			pr_err("Vibrator LDO status polling timedout\n");
			return ret;
		}
	}
@@ -103,7 +119,6 @@ static int qpnp_vib_ldo_set_voltage(struct vib_ldo_chip *chip, int new_uV)

static inline int qpnp_vib_ldo_enable(struct vib_ldo_chip *chip, bool enable)
{
	unsigned int val;
	int ret;

	if (chip->vib_enabled == enable)
@@ -120,13 +135,9 @@ static inline int qpnp_vib_ldo_enable(struct vib_ldo_chip *chip, bool enable)
	}

	if (enable) {
		ret = regmap_read_poll_timeout(chip->regmap,
					chip->base + QPNP_VIB_LDO_REG_STATUS1,
					val, val & QPNP_VIB_LDO_VREG_READY,
					100, 1000);
		ret = qpnp_vib_ldo_poll_status(chip);
		if (ret < 0) {
			pr_err("Vibrator LDO vreg_ready timeout, status=0x%02x, ret=%d\n",
				val, ret);
			pr_err("Vibrator LDO status polling timedout\n");
			return ret;
		}
	}