diff options
author | Sebastien Guiriec <s-guiriec@ti.com> | 2010-11-16 04:02:05 -0600 |
---|---|---|
committer | Sebastien Jan <s-jan@ti.com> | 2010-12-03 11:02:59 +0100 |
commit | 23958021c22016aa2b994cac279df9ddcb6d16c5 (patch) | |
tree | 2eb4c902758005e3f747fcf4a8c047129e71afae /sound | |
parent | 6ced80294efd58707eb4764db52ed540d14c7ec1 (diff) |
ASoC: ABE DSP: Add activity check support
Check ABE activity during shutdown callback to ensure ABE switches
to OPP25 and event generator is stopped when all streams have been
closed.
Signed-off-by: Sebastien Guiriec <s-guiriec@ti.com>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/soc/omap/omap-abe-dsp.c | 24 | ||||
-rw-r--r-- | sound/soc/omap/omap-abe-dsp.h | 1 | ||||
-rw-r--r-- | sound/soc/omap/omap-mcpdm.c | 1 |
3 files changed, 16 insertions, 10 deletions
diff --git a/sound/soc/omap/omap-abe-dsp.c b/sound/soc/omap/omap-abe-dsp.c index a55a246655c3..c0a67571a311 100644 --- a/sound/soc/omap/omap-abe-dsp.c +++ b/sound/soc/omap/omap-abe-dsp.c @@ -281,13 +281,22 @@ void abe_dsp_disable_data_transfer(int port) abe_disable_data_transfer(port); udelay(250); -/* - abe_stop_event_generator(); - udelay(500); -*/ pm_runtime_put_sync(&pdev->dev); } +void abe_dsp_shutdown(void) +{ + /* TODO: do not use abe global structure to assign pdev */ + struct platform_device *pdev = abe->pdev; + + if (!abe_check_activity()) { + abe_set_opp_processing(ABE_OPP25); + abe_stop_event_generator(); + udelay(11); + omap_device_set_rate(&pdev->dev, &pdev->dev, 0); + } +} + /* * These TLV settings will need fine tuned for each individual control */ @@ -1722,11 +1731,8 @@ static int aess_close(struct snd_pcm_substream *substream) aess_set_opp_mode(); - if (!--abe->active) { - abe_set_opp_processing(ABE_OPP25); - udelay(11); - omap_device_set_rate(&pdev->dev, &pdev->dev, 0); - } + if (!--abe->active) + abe_dsp_shutdown(); pm_runtime_put_sync(&pdev->dev); diff --git a/sound/soc/omap/omap-abe-dsp.h b/sound/soc/omap/omap-abe-dsp.h index 78fae7c0b7d4..3881e755a4a5 100644 --- a/sound/soc/omap/omap-abe-dsp.h +++ b/sound/soc/omap/omap-abe-dsp.h @@ -26,5 +26,6 @@ void abe_dsp_enable_data_transfer(int port); void abe_dsp_disable_data_transfer(int port); +void abe_dsp_shutdown(void); #endif /* End of __OMAP_ABE_DSP_H__ */ diff --git a/sound/soc/omap/omap-mcpdm.c b/sound/soc/omap/omap-mcpdm.c index 547b8e67042d..3589b887e87a 100644 --- a/sound/soc/omap/omap-mcpdm.c +++ b/sound/soc/omap/omap-mcpdm.c @@ -687,7 +687,6 @@ static void playback_abe_work(struct work_struct *work) spin_lock(&mcpdm->lock); if (!mcpdm->dl_active) { abe_dsp_disable_data_transfer(PDM_DL_PORT); - udelay(250); omap_mcpdm_stop(mcpdm, SNDRV_PCM_STREAM_PLAYBACK); omap_mcpdm_playback_close(mcpdm, mcpdm->downlink); } |