summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2011-09-01 12:15:43 +0000
committerMichael Sevakis <jethead71@rockbox.org>2011-09-01 12:15:43 +0000
commit4db3e8965270dfe813a14c5ee9bcd0b645eb2edf (patch)
treeff785e25196226037c509428497b95f0e1e219b9 /firmware
parentd67d6a8462e02770d81d6a01f3193d0a2050fbe2 (diff)
downloadrockbox-4db3e8965270dfe813a14c5ee9bcd0b645eb2edf.zip
rockbox-4db3e8965270dfe813a14c5ee9bcd0b645eb2edf.tar.gz
rockbox-4db3e8965270dfe813a14c5ee9bcd0b645eb2edf.tar.bz2
rockbox-4db3e8965270dfe813a14c5ee9bcd0b645eb2edf.tar.xz
Shuffle some functions around so that interfacing with playback.c in particular isn't required. Though playback does finish the audio init, pcm doesn't care who does it.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30403 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r--firmware/export/pcm-internal.h1
-rw-r--r--firmware/export/pcm.h1
-rw-r--r--firmware/pcm.c31
-rw-r--r--firmware/target/arm/as3525/pcm-as3525.c2
-rw-r--r--firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c2
-rw-r--r--firmware/target/arm/pcm-pp.c2
-rw-r--r--firmware/target/arm/pcm-telechips.c10
-rw-r--r--firmware/target/arm/pnx0101/pcm-pnx0101.c2
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/pcm-meg-fx.c2
-rw-r--r--firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c2
-rw-r--r--firmware/target/arm/s5l8700/pcm-s5l8700.c2
-rw-r--r--firmware/target/arm/s5l8702/pcm-s5l8702.c2
-rw-r--r--firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c2
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c2
-rw-r--r--firmware/target/coldfire/pcm-coldfire.c2
-rw-r--r--firmware/target/hosted/android/pcm-android.c2
-rw-r--r--firmware/target/hosted/maemo/pcm-gstreamer.c2
-rw-r--r--firmware/target/hosted/sdl/pcm-sdl.c2
-rw-r--r--firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c2
19 files changed, 53 insertions, 20 deletions
diff --git a/firmware/export/pcm-internal.h b/firmware/export/pcm-internal.h
index bae6a36..16e2aea 100644
--- a/firmware/export/pcm-internal.h
+++ b/firmware/export/pcm-internal.h
@@ -66,6 +66,7 @@ extern volatile bool pcm_paused;
void pcm_play_dma_lock(void);
void pcm_play_dma_unlock(void);
void pcm_play_dma_init(void) INIT_ATTR;
+void pcm_play_dma_postinit(void);
void pcm_play_dma_start(const void *addr, size_t size);
void pcm_play_dma_stop(void);
void pcm_play_dma_pause(bool pause);
diff --git a/firmware/export/pcm.h b/firmware/export/pcm.h
index 22c5ef3..fb6581b 100644
--- a/firmware/export/pcm.h
+++ b/firmware/export/pcm.h
@@ -76,6 +76,7 @@ void pcm_play_unlock(void);
void pcm_init(void) INIT_ATTR;
void pcm_postinit(void);
+bool pcm_is_initialized(void);
/* This is for playing "raw" PCM data */
void pcm_play_data(pcm_play_callback_type get_more,
diff --git a/firmware/pcm.c b/firmware/pcm.c
index c2ebc67..b0a91fb 100644
--- a/firmware/pcm.c
+++ b/firmware/pcm.c
@@ -43,6 +43,7 @@
* Semi-private -
* pcm_play_get_more_callback
* pcm_play_dma_init
+ * pcm_play_dma_postinit
* pcm_play_dma_start
* pcm_play_dma_stop
* pcm_play_dma_pause
@@ -79,6 +80,9 @@
*
*/
+/* 'true' when all stages of pcm initialization have completed */
+static bool pcm_is_ready = false;
+
/* the registered callback function to ask for more mp3 data */
static pcm_play_callback_type pcm_callback_for_more SHAREDBSS_ATTR = NULL;
void (* pcm_play_dma_started)(void) SHAREDBSS_ATTR = NULL;
@@ -105,6 +109,12 @@ static void pcm_play_stopped(void)
pcm_playing = false;
}
+static void pcm_wait_for_init(void)
+{
+ while (!pcm_is_ready)
+ sleep(0);
+}
+
/**
* Perform peak calculation on a buffer of packed 16-bit samples.
*
@@ -230,6 +240,23 @@ void pcm_init(void)
pcm_play_dma_init();
}
+/* Finish delayed init */
+void pcm_postinit(void)
+{
+ logf("pcm_postinit");
+
+ logf(" pcm_play_dma_postinit");
+
+ pcm_play_dma_postinit();
+
+ pcm_is_ready = true;
+}
+
+bool pcm_is_initialized(void)
+{
+ return pcm_is_ready;
+}
+
/* Common code to pcm_play_data and pcm_play_pause */
static void pcm_play_data_start(unsigned char *start, size_t size)
{
@@ -402,6 +429,8 @@ void pcm_apply_settings(void)
{
logf("pcm_apply_settings");
+ pcm_wait_for_init();
+
if (pcm_sampr != pcm_curr_sampr)
{
logf(" pcm_dma_apply_settings");
@@ -487,6 +516,8 @@ void pcm_init_recording(void)
{
logf("pcm_init_recording");
+ pcm_wait_for_init();
+
/* Stop the beasty before attempting recording */
mixer_reset();
diff --git a/firmware/target/arm/as3525/pcm-as3525.c b/firmware/target/arm/as3525/pcm-as3525.c
index a89a47d..f82b373 100644
--- a/firmware/target/arm/as3525/pcm-as3525.c
+++ b/firmware/target/arm/as3525/pcm-as3525.c
@@ -181,7 +181,7 @@ void pcm_play_dma_init(void)
audiohw_preinit();
}
-void pcm_postinit(void)
+void pcm_play_dma_postinit(void)
{
audiohw_postinit();
}
diff --git a/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c b/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c
index 1f6eef4..65571a4 100644
--- a/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c
+++ b/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c
@@ -247,7 +247,7 @@ void pcm_play_dma_init(void)
audiohw_init();
}
-void pcm_postinit(void)
+void pcm_play_dma_postinit(void)
{
audiohw_postinit();
}
diff --git a/firmware/target/arm/pcm-pp.c b/firmware/target/arm/pcm-pp.c
index 704296d..c35a824 100644
--- a/firmware/target/arm/pcm-pp.c
+++ b/firmware/target/arm/pcm-pp.c
@@ -527,7 +527,7 @@ void pcm_play_dma_init(void)
IISCONFIG |= IIS_TXFIFOEN;
}
-void pcm_postinit(void)
+void void pcm_play_dma_postinit(void)
{
audiohw_postinit();
}
diff --git a/firmware/target/arm/pcm-telechips.c b/firmware/target/arm/pcm-telechips.c
index aff4317..ae4aa5e 100644
--- a/firmware/target/arm/pcm-telechips.c
+++ b/firmware/target/arm/pcm-telechips.c
@@ -57,11 +57,6 @@ struct dma_data dma_play_data SHAREDBSS_ATTR =
.state = 0
};
-void pcm_postinit(void)
-{
- audiohw_postinit();
-}
-
const void * pcm_play_dma_get_peak_buffer(int *count)
{
unsigned long addr = (unsigned long)dma_play_data.p;
@@ -110,6 +105,11 @@ void pcm_play_dma_init(void)
#endif
}
+void pcm_play_dma_postinit(void)
+{
+ audiohw_postinit();
+}
+
void pcm_dma_apply_settings(void)
{
}
diff --git a/firmware/target/arm/pnx0101/pcm-pnx0101.c b/firmware/target/arm/pnx0101/pcm-pnx0101.c
index d4c1745..89d56af 100644
--- a/firmware/target/arm/pnx0101/pcm-pnx0101.c
+++ b/firmware/target/arm/pnx0101/pcm-pnx0101.c
@@ -190,7 +190,7 @@ void pcm_init(void)
DMAR10(1) |= 1;
}
-void pcm_postinit(void)
+void pcm_play_dma_postinit(void)
{
audiohw_postinit();
}
diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/pcm-meg-fx.c b/firmware/target/arm/s3c2440/gigabeat-fx/pcm-meg-fx.c
index 33194ae..b133639 100644
--- a/firmware/target/arm/s3c2440/gigabeat-fx/pcm-meg-fx.c
+++ b/firmware/target/arm/s3c2440/gigabeat-fx/pcm-meg-fx.c
@@ -94,7 +94,7 @@ void pcm_play_dma_init(void)
bitset32(&INTMOD, DMA2_MASK);
}
-void pcm_postinit(void)
+void pcm_play_dma_postinit(void)
{
audiohw_postinit();
}
diff --git a/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c b/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c
index 0c69c1e..20332c1 100644
--- a/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c
+++ b/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c
@@ -120,7 +120,7 @@ void pcm_play_dma_init(void)
bitset32(&INTMOD, DMA2_MASK);
}
-void pcm_postinit(void)
+void pcm_play_dma_postinit(void)
{
audiohw_postinit();
}
diff --git a/firmware/target/arm/s5l8700/pcm-s5l8700.c b/firmware/target/arm/s5l8700/pcm-s5l8700.c
index 14c515e..6d733e0 100644
--- a/firmware/target/arm/s5l8700/pcm-s5l8700.c
+++ b/firmware/target/arm/s5l8700/pcm-s5l8700.c
@@ -262,7 +262,7 @@ void pcm_play_dma_init(void)
audiohw_preinit();
}
-void pcm_postinit(void)
+void pcm_play_dma_postinit(void)
{
audiohw_postinit();
}
diff --git a/firmware/target/arm/s5l8702/pcm-s5l8702.c b/firmware/target/arm/s5l8702/pcm-s5l8702.c
index dbadf3b..c3df77f 100644
--- a/firmware/target/arm/s5l8702/pcm-s5l8702.c
+++ b/firmware/target/arm/s5l8702/pcm-s5l8702.c
@@ -152,7 +152,7 @@ void pcm_play_dma_init(void)
audiohw_preinit();
}
-void pcm_postinit(void)
+void pcm_play_dma_postinit(void)
{
audiohw_postinit();
}
diff --git a/firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c b/firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c
index 5ec62cf..1fda5fe 100644
--- a/firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c
+++ b/firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c
@@ -44,7 +44,7 @@ void pcm_play_dma_init(void)
// dsp_init();
}
-void pcm_postinit(void)
+void pcm_play_dma_postinit(void)
{
audiohw_postinit();
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c
index 90c342e..c507428 100644
--- a/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c
+++ b/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c
@@ -35,7 +35,7 @@
*/
static void *start;
-void pcm_postinit(void)
+void pcm_play_dma_postinit(void)
{
/* Configure clock divider */
tsc2100_writereg(CONTROL_PAGE2, TSPP1_ADDRESS, 0x1120);
diff --git a/firmware/target/coldfire/pcm-coldfire.c b/firmware/target/coldfire/pcm-coldfire.c
index 85eeaec..e95d445 100644
--- a/firmware/target/coldfire/pcm-coldfire.c
+++ b/firmware/target/coldfire/pcm-coldfire.c
@@ -203,7 +203,7 @@ void pcm_play_dma_init(void)
#endif
} /* pcm_play_dma_init */
-void pcm_postinit(void)
+void pcm_play_dma_postinit(void)
{
audiohw_postinit();
iis_play_reset();
diff --git a/firmware/target/hosted/android/pcm-android.c b/firmware/target/hosted/android/pcm-android.c
index 6492a77..4e58707 100644
--- a/firmware/target/hosted/android/pcm-android.c
+++ b/firmware/target/hosted/android/pcm-android.c
@@ -206,7 +206,7 @@ void pcm_play_dma_init(void)
write_method = e->GetMethodID(env_ptr, RockboxPCM_class, "write", "([BII)I");
}
-void pcm_postinit(void)
+void pcm_play_dma_postinit(void)
{
}
diff --git a/firmware/target/hosted/maemo/pcm-gstreamer.c b/firmware/target/hosted/maemo/pcm-gstreamer.c
index 6e049db..d6879ea 100644
--- a/firmware/target/hosted/maemo/pcm-gstreamer.c
+++ b/firmware/target/hosted/maemo/pcm-gstreamer.c
@@ -397,7 +397,7 @@ void pcm_shutdown_gstreamer(void)
g_main_loop_unref (pcm_loop);
}
-void pcm_postinit(void)
+void pcm_play_dma_postinit(void)
{
}
diff --git a/firmware/target/hosted/sdl/pcm-sdl.c b/firmware/target/hosted/sdl/pcm-sdl.c
index dfdd90f..020928d 100644
--- a/firmware/target/hosted/sdl/pcm-sdl.c
+++ b/firmware/target/hosted/sdl/pcm-sdl.c
@@ -410,7 +410,7 @@ void pcm_play_dma_init(void)
pcm_dma_apply_settings_nolock();
}
-void pcm_postinit(void)
+void pcm_play_dma_postinit(void)
{
}
diff --git a/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c b/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c
index cfc3c9ef..1ed413c 100644
--- a/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c
+++ b/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c
@@ -33,7 +33,7 @@
** Playback DMA transfer
**/
-void pcm_postinit(void)
+void pcm_play_dma_postinit(void)
{
audiohw_postinit();