diff --git a/kernel/patches/0504-wakeup-qcom-ipcc-remove-IRQF-NO-SUSPEND.patch b/kernel/patches/0504-wakeup-qcom-ipcc-remove-IRQF-NO-SUSPEND.patch index d9dc952..3eb5c7d 100644 --- a/kernel/patches/0504-wakeup-qcom-ipcc-remove-IRQF-NO-SUSPEND.patch +++ b/kernel/patches/0504-wakeup-qcom-ipcc-remove-IRQF-NO-SUSPEND.patch @@ -1,9 +1,14 @@ From: ROCKNIX -Subject: [PATCH] mailbox: qcom-ipcc: allow SM8750 IRQ suspension +Subject: [PATCH] mailbox: qcom-ipcc: allow SM8750 and SM8550 IRQ suspension -SM8750 suspend-to-RAM requires the IPCC summary interrupt to be suspended. -Keep IRQF_NO_SUSPEND on every other SoC so the SM8750 workaround does not -change established suspend behavior on the shared driver. +SM8750 and SM8550 suspend-to-RAM require the IPCC summary interrupt to be +suspended. On SM8550 the ADSP charger firmware pushes an unsolicited +BATTMGR_NOTIFICATION about half a second after suspend entry; with +IRQF_NO_SUSPEND the mailbox irq is never masked, so that notification pulls +the SoC straight back out. + +Keep IRQF_NO_SUSPEND on every other SoC so the workaround does not change +established suspend behavior on the shared driver. diff --git a/drivers/mailbox/qcom-ipcc.c b/drivers/mailbox/qcom-ipcc.c --- a/drivers/mailbox/qcom-ipcc.c @@ -24,11 +29,12 @@ diff --git a/drivers/mailbox/qcom-ipcc.c b/drivers/mailbox/qcom-ipcc.c int ret; ipcc = devm_kzalloc(&pdev->dev, sizeof(*ipcc), GFP_KERNEL); -@@ -318,9 +319,11 @@ static int qcom_ipcc_probe(struct platform_device *pdev) +@@ -318,9 +319,12 @@ static int qcom_ipcc_probe(struct platform_device *pdev) if (ret) goto err_mbox; -+ if (!of_device_is_compatible(pdev->dev.of_node, "qcom,sm8750-ipcc")) ++ if (!of_device_is_compatible(pdev->dev.of_node, "qcom,sm8750-ipcc") && ++ !of_device_is_compatible(pdev->dev.of_node, "qcom,sm8550-ipcc")) + irqflags |= IRQF_NO_SUSPEND; + ret = devm_request_irq(&pdev->dev, ipcc->irq, qcom_ipcc_irq_fn,