[alsa-devel] [PATCH] ASoC: Optimise WM8996 no interrupt path
This occurs frequently if we are in edge triggered mode as we must poll the interrupt status register until we get no more interrupts so it's worth the effort - it means we skip writing null acknowledgements to the chip.
Signed-off-by: Mark Brown broonie@opensource.wolfsonmicro.com --- sound/soc/codecs/wm8996.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/sound/soc/codecs/wm8996.c b/sound/soc/codecs/wm8996.c index d3277d1..73a1588 100644 --- a/sound/soc/codecs/wm8996.c +++ b/sound/soc/codecs/wm8996.c @@ -2416,6 +2416,9 @@ static irqreturn_t wm8996_irq(int irq, void *data) } irq_val &= ~snd_soc_read(codec, WM8996_INTERRUPT_STATUS_2_MASK);
+ if (!irq_val) + return IRQ_NONE; + snd_soc_write(codec, WM8996_INTERRUPT_STATUS_2, irq_val);
if (irq_val & (WM8996_DCS_DONE_01_EINT | WM8996_DCS_DONE_23_EINT)) { @@ -2434,10 +2437,7 @@ static irqreturn_t wm8996_irq(int irq, void *data) if (irq_val & WM8996_MICD_EINT) wm8996_micd(codec);
- if (irq_val) - return IRQ_HANDLED; - else - return IRQ_NONE; + return IRQ_HANDLED; }
static irqreturn_t wm8996_edge_irq(int irq, void *data)
On 20/08/11 19:33, Mark Brown wrote:
This occurs frequently if we are in edge triggered mode as we must poll the interrupt status register until we get no more interrupts so it's worth the effort - it means we skip writing null acknowledgements to the chip.
Signed-off-by: Mark Brown broonie@opensource.wolfsonmicro.com
sound/soc/codecs/wm8996.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/sound/soc/codecs/wm8996.c b/sound/soc/codecs/wm8996.c index d3277d1..73a1588 100644 --- a/sound/soc/codecs/wm8996.c +++ b/sound/soc/codecs/wm8996.c @@ -2416,6 +2416,9 @@ static irqreturn_t wm8996_irq(int irq, void *data) } irq_val &= ~snd_soc_read(codec, WM8996_INTERRUPT_STATUS_2_MASK);
if (!irq_val)
return IRQ_NONE;
snd_soc_write(codec, WM8996_INTERRUPT_STATUS_2, irq_val);
if (irq_val & (WM8996_DCS_DONE_01_EINT | WM8996_DCS_DONE_23_EINT)) {
@@ -2434,10 +2437,7 @@ static irqreturn_t wm8996_irq(int irq, void *data) if (irq_val & WM8996_MICD_EINT) wm8996_micd(codec);
- if (irq_val)
return IRQ_HANDLED;
- else
return IRQ_NONE;
- return IRQ_HANDLED;
}
static irqreturn_t wm8996_edge_irq(int irq, void *data)
Acked-by: Liam Girdwood lrg@ti.com
participants (2)
-
Liam Girdwood
-
Mark Brown