diff --git a/sound/soc/amlogic/auge/ddr_mngr.c b/sound/soc/amlogic/auge/ddr_mngr.c index 3c9946bb51e0..1fa7282df401 100644 --- a/sound/soc/amlogic/auge/ddr_mngr.c +++ b/sound/soc/amlogic/auge/ddr_mngr.c @@ -201,6 +201,19 @@ int aml_audio_unregister_toddr(struct device *dev, void *data) return ret; } +void audio_toddr_irq_enable(struct toddr *to, bool en) +{ + if (!to || !to->in_use || to->irq < 0) + return; + + mutex_lock(&ddr_mutex); + if (en) + enable_irq(to->irq); + else + disable_irq_nosync(to->irq); + mutex_unlock(&ddr_mutex); +} + static inline unsigned int calc_toddr_address(unsigned int reg, unsigned int base) { diff --git a/sound/soc/amlogic/auge/ddr_mngr.h b/sound/soc/amlogic/auge/ddr_mngr.h index 84dc7bef0be8..476b54b59897 100644 --- a/sound/soc/amlogic/auge/ddr_mngr.h +++ b/sound/soc/amlogic/auge/ddr_mngr.h @@ -248,6 +248,7 @@ struct toddr *aml_audio_register_toddr(struct device *dev, struct aml_audio_controller *actrl, irq_handler_t handler, void *data); int aml_audio_unregister_toddr(struct device *dev, void *data); +void audio_toddr_irq_enable(struct toddr *to, bool en); int aml_toddr_set_buf(struct toddr *to, unsigned int start, unsigned int end); int aml_toddr_set_buf_startaddr(struct toddr *to, unsigned int start); diff --git a/sound/soc/amlogic/auge/loopback.c b/sound/soc/amlogic/auge/loopback.c index a5e622c8abc8..7290218d92df 100644 --- a/sound/soc/amlogic/auge/loopback.c +++ b/sound/soc/amlogic/auge/loopback.c @@ -759,6 +759,7 @@ static int loopback_dai_trigger( pm_audio_set_suspend(false); /* VAD switch to alsa buffer */ vad_update_buffer(0); + audio_toddr_irq_enable(p_loopback->tddr, true); break; } @@ -786,6 +787,7 @@ static int loopback_dai_trigger( pm_audio_is_suspend()) { /* switch to VAD buffer */ vad_update_buffer(1); + audio_toddr_irq_enable(p_loopback->tddr, false); break; } diff --git a/sound/soc/amlogic/auge/pdm.c b/sound/soc/amlogic/auge/pdm.c index b1c3e5787fe9..f03660c954e2 100644 --- a/sound/soc/amlogic/auge/pdm.c +++ b/sound/soc/amlogic/auge/pdm.c @@ -944,6 +944,7 @@ static int aml_pdm_dai_trigger( pm_audio_set_suspend(false); /* VAD switch to alsa buffer */ vad_update_buffer(0); + audio_toddr_irq_enable(p_pdm->tddr, true); break; } @@ -966,6 +967,7 @@ static int aml_pdm_dai_trigger( && pm_audio_is_suspend()) { /* switch to VAD buffer */ vad_update_buffer(1); + audio_toddr_irq_enable(p_pdm->tddr, false); break; } pdm_enable(0);