ASoC: amd: ps: fix for irq handler return status
authorVijendar Mukunda <Vijendar.Mukunda@amd.com>
Wed, 30 Apr 2025 19:54:43 +0000 (01:24 +0530)
committerMark Brown <broonie@kernel.org>
Wed, 30 Apr 2025 23:22:36 +0000 (08:22 +0900)
If any Soundwire manager interrupt is reported, and wake interrupt
is not reported, in this scenario irq_flag will be set to zero,
which results in interrupt handler return status as IRQ_NONE.

Add new irq flag 'wake_irq_flag' check for SoundWire wake interrupt
handling to fix incorrect irq handling return status.

Fixes: 3898b189079c8 ("ASoC: amd: ps: add soundwire wake interrupt handling")
Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com>
Link: https://patch.msgid.link/20250430195517.3065308-1-Vijendar.Mukunda@amd.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/amd/ps/pci-ps.c

index 8e57f31ef7f7b8f077c0eca7a8926d266a692230..7936b31736323b442fd3e16e403a06c0d7bb892b 100644 (file)
@@ -193,6 +193,7 @@ static irqreturn_t acp63_irq_handler(int irq, void *dev_id)
        struct amd_sdw_manager *amd_manager;
        u32 ext_intr_stat, ext_intr_stat1;
        u16 irq_flag = 0;
+       u16 wake_irq_flag = 0;
        u16 sdw_dma_irq_flag = 0;
 
        adata = dev_id;
@@ -231,7 +232,7 @@ static irqreturn_t acp63_irq_handler(int irq, void *dev_id)
        }
 
        if (adata->acp_rev >= ACP70_PCI_REV)
-               irq_flag = check_and_handle_acp70_sdw_wake_irq(adata);
+               wake_irq_flag = check_and_handle_acp70_sdw_wake_irq(adata);
 
        if (ext_intr_stat & BIT(PDM_DMA_STAT)) {
                ps_pdm_data = dev_get_drvdata(&adata->pdm_dev->dev);
@@ -245,7 +246,7 @@ static irqreturn_t acp63_irq_handler(int irq, void *dev_id)
        if (sdw_dma_irq_flag)
                return IRQ_WAKE_THREAD;
 
-       if (irq_flag)
+       if (irq_flag | wake_irq_flag)
                return IRQ_HANDLED;
        else
                return IRQ_NONE;