Loading drivers/power/qpnp-charger.c +46 −26 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading Loading @@ -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", Loading Loading
drivers/power/qpnp-charger.c +46 −26 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading Loading @@ -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", Loading