Loading drivers/power/qpnp-charger.c +30 −9 Original line number Diff line number Diff line Loading @@ -219,6 +219,7 @@ struct qpnp_chg_irq { int irq; unsigned long disabled; unsigned long wake_enable; }; struct qpnp_chg_regulator { Loading Loading @@ -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) Loading Loading @@ -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); Loading Loading @@ -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); } Loading Loading @@ -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: Loading @@ -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"); Loading @@ -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: Loading Loading @@ -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, Loading @@ -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; } } Loading Loading
drivers/power/qpnp-charger.c +30 −9 Original line number Diff line number Diff line Loading @@ -219,6 +219,7 @@ struct qpnp_chg_irq { int irq; unsigned long disabled; unsigned long wake_enable; }; struct qpnp_chg_regulator { Loading Loading @@ -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) Loading Loading @@ -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); Loading Loading @@ -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); } Loading Loading @@ -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: Loading @@ -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"); Loading @@ -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: Loading Loading @@ -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, Loading @@ -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; } } Loading