Update interrupt clear register with reset value after addressing
all interrupts. This is to fix playback or capture hanging issue in
simultaneous playback and capture usecase.
Fixes: 4f629e4b8705f ("ASoC: qcom: Add ability to handle interrupts per dma channel")
Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
---
Changes since v1:
-- Update comments Header information with fixes tag
sound/soc/qcom/lpass-platform.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/sound/soc/qcom/lpass-platform.c b/sound/soc/qcom/lpass-platform.c
index f9df76d37858..1a0a4b0b1a03 100644
--- a/sound/soc/qcom/lpass-platform.c
+++ b/sound/soc/qcom/lpass-platform.c
@@ -749,6 +749,12 @@ static irqreturn_t lpass_platform_lpaif_irq(int irq, void *data)
}
}
+ rv = regmap_write(drvdata->lpaif_map, LPAIF_IRQCLEAR_REG(v, LPAIF_IRQ_PORT_HOST), 0x0);
+ if (rv) {
+ pr_err("error writing to irqstat reg: %d\n", rv);
+ return IRQ_NONE;
+ }
+
return IRQ_HANDLED;
}
--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.,
is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
On 08/09/2021 15:25, Srinivasa Rao Mandadapu wrote:
> Update interrupt clear register with reset value after addressing
> all interrupts. This is to fix playback or capture hanging issue in
> simultaneous playback and capture usecase.
Could explain bit more about the issue.
Specifically which interrupt and which ports is this issue seen.
>
> Fixes: 4f629e4b8705f ("ASoC: qcom: Add ability to handle interrupts per dma channel")
>
> Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
> ---
> Changes since v1:
> -- Update comments Header information with fixes tag
>
> sound/soc/qcom/lpass-platform.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/sound/soc/qcom/lpass-platform.c b/sound/soc/qcom/lpass-platform.c
> index f9df76d37858..1a0a4b0b1a03 100644
> --- a/sound/soc/qcom/lpass-platform.c
> +++ b/sound/soc/qcom/lpass-platform.c
> @@ -749,6 +749,12 @@ static irqreturn_t lpass_platform_lpaif_irq(int irq, void *data)
> }
> }
>
> + rv = regmap_write(drvdata->lpaif_map, LPAIF_IRQCLEAR_REG(v, LPAIF_IRQ_PORT_HOST), 0x0);
Writing 1 to a bit of this register will clear the corresponding latched
interrupt. So I don't really understand how writing 0 is really helping
here?
Do you have this patch in your tree?
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/sound/soc/qcom/lpass-cpu.c?h=v5.14&id=6a7f5bd6185e1c86256d5e52c3bb7a4d390d6e19
--srini
> + if (rv) {
> + pr_err("error writing to irqstat reg: %d\n", rv);
> + return IRQ_NONE;
> + }
> +
> return IRQ_HANDLED;
> }
>
>