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

Commit 15f77b01 authored by Fenglin Wu's avatar Fenglin Wu Committed by Anirudh Ghayal
Browse files

power: smb-lib: Disable USB IRQs during high duty cycle



Disable USB IRQs after high duty cycle IRQ triggered and re-enable
them in the delay worker. This helps to avoid the high duty cycle
IRQ storming.

CRs-Fixed: 2094725
Change-Id: Iba22a7402692b5ee5f738cc17ed9c214f6014ac0
Signed-off-by: default avatarFenglin Wu <fenglinw@codeaurora.org>
parent 1bd51b78
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -3988,6 +3988,14 @@ irqreturn_t smblib_handle_high_duty_cycle(int irq, void *data)
	struct smb_charger *chg = irq_data->parent_data;

	chg->is_hdc = true;
	/*
	 * Disable usb IRQs after the flag set and re-enable IRQs after
	 * the flag cleared in the delayed work queue, to avoid any IRQ
	 * storming during the delays
	 */
	if (chg->irq_info[HIGH_DUTY_CYCLE_IRQ].irq)
		disable_irq_nosync(chg->irq_info[HIGH_DUTY_CYCLE_IRQ].irq);

	schedule_delayed_work(&chg->clear_hdc_work, msecs_to_jiffies(60));

	return IRQ_HANDLED;
@@ -4162,6 +4170,8 @@ static void clear_hdc_work(struct work_struct *work)
						clear_hdc_work.work);

	chg->is_hdc = 0;
	if (chg->irq_info[HIGH_DUTY_CYCLE_IRQ].irq)
		enable_irq(chg->irq_info[HIGH_DUTY_CYCLE_IRQ].irq);
}

static void rdstd_cc2_detach_work(struct work_struct *work)