diff --git a/sound/soc/amlogic/auge/ddr_mngr.c b/sound/soc/amlogic/auge/ddr_mngr.c index 06a7f72295f8..613e5898354c 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 9651b7893142..467bb98574eb 100644 --- a/sound/soc/amlogic/auge/ddr_mngr.h +++ b/sound/soc/amlogic/auge/ddr_mngr.h @@ -244,6 +244,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 84d974bcc1c1..e1005465195b 100644 --- a/sound/soc/amlogic/auge/loopback.c +++ b/sound/soc/amlogic/auge/loopback.c @@ -763,6 +763,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; } @@ -790,6 +791,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);