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

Commit d602c74a 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: wake up upon fast charge after resuming"

parents 807e7ed3 a03bd9b8
Loading
Loading
Loading
Loading
+30 −9
Original line number Diff line number Diff line
@@ -219,6 +219,7 @@
struct qpnp_chg_irq {
	int		irq;
	unsigned long		disabled;
	unsigned long		wake_enable;
};

struct qpnp_chg_regulator {
@@ -534,6 +535,24 @@ qpnp_chg_disable_irq(struct qpnp_chg_irq *irq)
	}
}

static void
qpnp_chg_irq_wake_enable(struct qpnp_chg_irq *irq)
{
	if (!__test_and_set_bit(0, &irq->wake_enable)) {
		pr_debug("number = %d\n", irq->irq);
		enable_irq_wake(irq->irq);
	}
}

static void
qpnp_chg_irq_wake_disable(struct qpnp_chg_irq *irq)
{
	if (__test_and_clear_bit(0, &irq->wake_enable)) {
		pr_debug("number = %d\n", irq->irq);
		disable_irq_wake(irq->irq);
	}
}

#define USB_OTG_EN_BIT	BIT(0)
static int
qpnp_chg_is_otg_en_set(struct qpnp_chg_chip *chip)
@@ -1733,6 +1752,7 @@ qpnp_chg_chgr_chg_fastchg_irq_handler(int irq, void *_chip)
	struct qpnp_chg_chip *chip = _chip;
	bool fastchg_on = false;

	qpnp_chg_irq_wake_disable(&chip->chg_fastchg);
	fastchg_on = qpnp_chg_is_fastchg_on(chip);

	pr_debug("FAST_CHG IRQ triggered, fastchg_on: %d\n", fastchg_on);
@@ -2208,6 +2228,7 @@ get_prop_capacity(struct qpnp_chg_chip *chip)
				&& soc <= chip->soc_resume_limit) {
			pr_debug("resuming charging at %d%% soc\n", soc);
			chip->resuming_charging = true;
			qpnp_chg_irq_wake_enable(&chip->chg_fastchg);
			qpnp_chg_set_appropriate_vbatdet(chip);
			qpnp_chg_charge_en(chip, !chip->charging_disabled);
		}
@@ -3909,10 +3930,10 @@ qpnp_chg_request_irqs(struct qpnp_chg_chip *chip)
				return rc;
			}

			enable_irq_wake(chip->chg_trklchg.irq);
			enable_irq_wake(chip->chg_failed.irq);
			qpnp_chg_irq_wake_enable(&chip->chg_trklchg);
			qpnp_chg_irq_wake_enable(&chip->chg_failed);
			qpnp_chg_disable_irq(&chip->chg_vbatdet_lo);
			enable_irq_wake(chip->chg_vbatdet_lo.irq);
			qpnp_chg_irq_wake_enable(&chip->chg_vbatdet_lo);

			break;
		case SMBB_BAT_IF_SUBTYPE:
@@ -3935,7 +3956,7 @@ qpnp_chg_request_irqs(struct qpnp_chg_chip *chip)
				return rc;
			}

			enable_irq_wake(chip->batt_pres.irq);
			qpnp_chg_irq_wake_enable(&chip->batt_pres);

			chip->batt_temp_ok.irq = spmi_get_irq_byname(spmi,
						spmi_resource, "bat-temp-ok");
@@ -3954,7 +3975,7 @@ qpnp_chg_request_irqs(struct qpnp_chg_chip *chip)
			}
			qpnp_chg_bat_if_batt_temp_irq_handler(0, chip);

			enable_irq_wake(chip->batt_temp_ok.irq);
			qpnp_chg_irq_wake_enable(&chip->batt_temp_ok);

			break;
		case SMBB_BUCK_SUBTYPE:
@@ -4036,11 +4057,11 @@ qpnp_chg_request_irqs(struct qpnp_chg_chip *chip)
					return rc;
				}

				enable_irq_wake(chip->usb_ocp.irq);
				qpnp_chg_irq_wake_enable(&chip->usb_ocp);
			}

			enable_irq_wake(chip->usbin_valid.irq);
			enable_irq_wake(chip->chg_gone.irq);
			qpnp_chg_irq_wake_enable(&chip->usbin_valid);
			qpnp_chg_irq_wake_enable(&chip->chg_gone);
			break;
		case SMBB_DC_CHGPTH_SUBTYPE:
			chip->dcin_valid.irq = spmi_get_irq_byname(spmi,
@@ -4059,7 +4080,7 @@ qpnp_chg_request_irqs(struct qpnp_chg_chip *chip)
				return rc;
			}

			enable_irq_wake(chip->dcin_valid.irq);
			qpnp_chg_irq_wake_enable(&chip->dcin_valid);
			break;
		}
	}