Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
From: Ashketchup <ashley@shuuri.net>
Subject: [PATCH] wakeup: qcom-ipcc: remove IRQF_NO_SUSPEND across system suspend

The SM8550 deep-sleep self-wake (every few minutes) is the ADSP charger firmware
pushing BATTMGR_NOTIFICATION over pmic_glink. Those notifications ring the IPCC
mailbox IRQ, which is requested with IRQF_NO_SUSPEND and so is never masked across
system suspend, pulling the SoC back out of deep sleep.

Drop IRQF_NO_SUSPEND so the IPCC IRQ is masked during suspend like a normal IRQ.
Co-processor doorbells (charger, sensors, modem) no longer wake the AP while it is
asleep; pending signals are handled on resume instead. This mirrors the patch
ROCKNIX already carries for SM8750, which uses the same battmgr/pmic_glink charger
model and sleeps reliably with it.

Verified on the Retroid Pocket 6: 30+ minute uninterrupted deep sleeps where
the device previously could not stay asleep past 5 to 10 minutes.

Signed-off-by: Ashketchup <ashley@shuuri.net>
---
diff --git a/drivers/mailbox/qcom-ipcc.c b/drivers/mailbox/qcom-ipcc.c
index d957d989c..2e4bb5efb 100644
--- a/drivers/mailbox/qcom-ipcc.c
+++ b/drivers/mailbox/qcom-ipcc.c
@@ -321,7 +321,7 @@ static int qcom_ipcc_probe(struct platform_device *pdev)
goto err_mbox;

ret = devm_request_irq(&pdev->dev, ipcc->irq, qcom_ipcc_irq_fn,
- IRQF_TRIGGER_HIGH | IRQF_NO_SUSPEND |
+ IRQF_TRIGGER_HIGH |
IRQF_NO_THREAD, name, ipcc);
if (ret < 0) {
dev_err(&pdev->dev, "Failed to register the irq: %d\n", ret);