ASoC: arizona: Set compressed IRQ to a wake source

The current code is not setting the compressed IRQ as a wake
source.  Normally this doesn't cause any issues as the CODEC
IRQ is set as a wake source by the jack detection code and the
CODEC only produces a single IRQ line. However if the system
is not using jack detection the compressed audio IRQ should
still function as a wake source, as such directly set the
compressed audio IRQ as a wake source.

Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Charles Keepax 2018-06-20 11:56:20 +01:00 committed by Mark Brown
parent 6e56e5d041
commit 1b31de922e
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0
3 changed files with 24 additions and 0 deletions

View File

@ -1283,6 +1283,12 @@ static int cs47l24_probe(struct platform_device *pdev)
return ret; return ret;
} }
ret = arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 1);
if (ret != 0)
dev_warn(&pdev->dev,
"Failed to set compressed IRQ as a wake source: %d\n",
ret);
arizona_init_common(arizona); arizona_init_common(arizona);
ret = arizona_init_vol_limit(arizona); ret = arizona_init_vol_limit(arizona);
@ -1306,6 +1312,7 @@ static int cs47l24_probe(struct platform_device *pdev)
err_spk_irqs: err_spk_irqs:
arizona_free_spk_irqs(arizona); arizona_free_spk_irqs(arizona);
err_dsp_irq: err_dsp_irq:
arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 0);
arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, cs47l24); arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, cs47l24);
return ret; return ret;
@ -1323,6 +1330,7 @@ static int cs47l24_remove(struct platform_device *pdev)
arizona_free_spk_irqs(arizona); arizona_free_spk_irqs(arizona);
arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 0);
arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, cs47l24); arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, cs47l24);
return 0; return 0;

View File

@ -2094,6 +2094,12 @@ static int wm5102_probe(struct platform_device *pdev)
return ret; return ret;
} }
ret = arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 1);
if (ret != 0)
dev_warn(&pdev->dev,
"Failed to set compressed IRQ as a wake source: %d\n",
ret);
arizona_init_common(arizona); arizona_init_common(arizona);
ret = arizona_init_vol_limit(arizona); ret = arizona_init_vol_limit(arizona);
@ -2117,6 +2123,7 @@ static int wm5102_probe(struct platform_device *pdev)
err_spk_irqs: err_spk_irqs:
arizona_free_spk_irqs(arizona); arizona_free_spk_irqs(arizona);
err_dsp_irq: err_dsp_irq:
arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 0);
arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5102); arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5102);
return ret; return ret;
@ -2133,6 +2140,7 @@ static int wm5102_remove(struct platform_device *pdev)
arizona_free_spk_irqs(arizona); arizona_free_spk_irqs(arizona);
arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 0);
arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5102); arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5102);
return 0; return 0;

View File

@ -2455,6 +2455,12 @@ static int wm5110_probe(struct platform_device *pdev)
return ret; return ret;
} }
ret = arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 1);
if (ret != 0)
dev_warn(&pdev->dev,
"Failed to set compressed IRQ as a wake source: %d\n",
ret);
arizona_init_common(arizona); arizona_init_common(arizona);
ret = arizona_init_vol_limit(arizona); ret = arizona_init_vol_limit(arizona);
@ -2478,6 +2484,7 @@ static int wm5110_probe(struct platform_device *pdev)
err_spk_irqs: err_spk_irqs:
arizona_free_spk_irqs(arizona); arizona_free_spk_irqs(arizona);
err_dsp_irq: err_dsp_irq:
arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 0);
arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5110); arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5110);
return ret; return ret;
@ -2496,6 +2503,7 @@ static int wm5110_remove(struct platform_device *pdev)
arizona_free_spk_irqs(arizona); arizona_free_spk_irqs(arizona);
arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 0);
arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5110); arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5110);
return 0; return 0;