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

Commit 754decae authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "power: qpnp-charger: request fastchg falling irq"

parents 7e3001ca e077f5c1
Loading
Loading
Loading
Loading
+46 −26
Original line number Diff line number Diff line
@@ -316,6 +316,7 @@ struct qpnp_chg_chip {
	bool				ibat_calibration_enabled;
	bool				aicl_settled;
	bool				use_external_rsense;
	bool				fastchg_on;
	unsigned int			bpd_detection;
	unsigned int			max_bat_chg_current;
	unsigned int			warm_bat_chg_ma;
@@ -1648,19 +1649,32 @@ qpnp_chg_chgr_chg_trklchg_irq_handler(int irq, void *_chip)
	return IRQ_HANDLED;
}

static irqreturn_t
qpnp_chg_chgr_chg_fastchg_irq_handler(int irq, void *_chip)
static int qpnp_chg_is_fastchg_on(struct qpnp_chg_chip *chip)
{
	struct qpnp_chg_chip *chip = _chip;
	u8 chgr_sts;
	int rc;

	rc = qpnp_chg_read(chip, &chgr_sts, INT_RT_STS(chip->chgr_base), 1);
	if (rc)
		pr_err("failed to read interrupt sts %d\n", rc);
	if (rc) {
		pr_err("failed to read interrupt status %d\n", rc);
		return rc;
	}
	pr_debug("chgr_sts 0x%x\n", chgr_sts);
	return (chgr_sts & FAST_CHG_ON_IRQ) ? 1 : 0;
}

	pr_debug("FAST_CHG IRQ triggered\n");
	chip->chg_done = false;
static irqreturn_t
qpnp_chg_chgr_chg_fastchg_irq_handler(int irq, void *_chip)
{
	struct qpnp_chg_chip *chip = _chip;
	bool fastchg_on = false;

	fastchg_on = qpnp_chg_is_fastchg_on(chip);

	pr_debug("FAST_CHG IRQ triggered, fastchg_on: %d\n", fastchg_on);

	if (chip->fastchg_on ^ fastchg_on) {
		chip->fastchg_on = fastchg_on;
		if (chip->bat_if_base) {
			pr_debug("psy changed batt_psy\n");
			power_supply_changed(&chip->batt_psy);
@@ -1674,6 +1688,9 @@ qpnp_chg_chgr_chg_fastchg_irq_handler(int irq, void *_chip)
			power_supply_changed(&chip->dc_psy);
		}

		if (fastchg_on) {
			chip->chg_done = false;

			if (chip->resuming_charging) {
				chip->resuming_charging = false;
				qpnp_chg_set_appropriate_vbatdet(chip);
@@ -1684,6 +1701,8 @@ qpnp_chg_chgr_chg_fastchg_irq_handler(int irq, void *_chip)
					msecs_to_jiffies(EOC_CHECK_PERIOD_MS));
				pm_stay_awake(chip->dev);
			}
		}
	}

	qpnp_chg_enable_irq(&chip->chg_vbatdet_lo);

@@ -3746,7 +3765,8 @@ qpnp_chg_request_irqs(struct qpnp_chg_chip *chip)

			rc |= devm_request_irq(chip->dev, chip->chg_fastchg.irq,
					qpnp_chg_chgr_chg_fastchg_irq_handler,
					IRQF_TRIGGER_RISING,
					IRQF_TRIGGER_RISING |
					IRQF_TRIGGER_FALLING,
					"fast-chg-on", chip);
			if (rc < 0) {
				pr_err("Can't request %d fast-chg-on: %d\n",