summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorSebastien Guiriec <s-guiriec@ti.com>2010-11-16 04:02:05 -0600
committerSebastien Jan <s-jan@ti.com>2010-12-03 11:02:59 +0100
commit23958021c22016aa2b994cac279df9ddcb6d16c5 (patch)
tree2eb4c902758005e3f747fcf4a8c047129e71afae /sound
parent6ced80294efd58707eb4764db52ed540d14c7ec1 (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.c24
-rw-r--r--sound/soc/omap/omap-abe-dsp.h1
-rw-r--r--sound/soc/omap/omap-mcpdm.c1
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);
}