diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2011-09-01 12:15:43 +0000 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2011-09-01 12:15:43 +0000 |
commit | 4db3e8965270dfe813a14c5ee9bcd0b645eb2edf (patch) | |
tree | ff785e25196226037c509428497b95f0e1e219b9 /firmware | |
parent | d67d6a8462e02770d81d6a01f3193d0a2050fbe2 (diff) | |
download | rockbox-4db3e8965270dfe813a14c5ee9bcd0b645eb2edf.tar.gz rockbox-4db3e8965270dfe813a14c5ee9bcd0b645eb2edf.zip |
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')
19 files changed, 53 insertions, 20 deletions
diff --git a/firmware/export/pcm-internal.h b/firmware/export/pcm-internal.h index bae6a368fa..16e2aeae4d 100644 --- a/firmware/export/pcm-internal.h +++ b/firmware/export/pcm-internal.h | |||
@@ -66,6 +66,7 @@ extern volatile bool pcm_paused; | |||
66 | void pcm_play_dma_lock(void); | 66 | void pcm_play_dma_lock(void); |
67 | void pcm_play_dma_unlock(void); | 67 | void pcm_play_dma_unlock(void); |
68 | void pcm_play_dma_init(void) INIT_ATTR; | 68 | void pcm_play_dma_init(void) INIT_ATTR; |
69 | void pcm_play_dma_postinit(void); | ||
69 | void pcm_play_dma_start(const void *addr, size_t size); | 70 | void pcm_play_dma_start(const void *addr, size_t size); |
70 | void pcm_play_dma_stop(void); | 71 | void pcm_play_dma_stop(void); |
71 | void pcm_play_dma_pause(bool pause); | 72 | void pcm_play_dma_pause(bool pause); |
diff --git a/firmware/export/pcm.h b/firmware/export/pcm.h index 22c5ef350e..fb6581b119 100644 --- a/firmware/export/pcm.h +++ b/firmware/export/pcm.h | |||
@@ -76,6 +76,7 @@ void pcm_play_unlock(void); | |||
76 | 76 | ||
77 | void pcm_init(void) INIT_ATTR; | 77 | void pcm_init(void) INIT_ATTR; |
78 | void pcm_postinit(void); | 78 | void pcm_postinit(void); |
79 | bool pcm_is_initialized(void); | ||
79 | 80 | ||
80 | /* This is for playing "raw" PCM data */ | 81 | /* This is for playing "raw" PCM data */ |
81 | void pcm_play_data(pcm_play_callback_type get_more, | 82 | void pcm_play_data(pcm_play_callback_type get_more, |
diff --git a/firmware/pcm.c b/firmware/pcm.c index c2ebc67687..b0a91fb64e 100644 --- a/firmware/pcm.c +++ b/firmware/pcm.c | |||
@@ -43,6 +43,7 @@ | |||
43 | * Semi-private - | 43 | * Semi-private - |
44 | * pcm_play_get_more_callback | 44 | * pcm_play_get_more_callback |
45 | * pcm_play_dma_init | 45 | * pcm_play_dma_init |
46 | * pcm_play_dma_postinit | ||
46 | * pcm_play_dma_start | 47 | * pcm_play_dma_start |
47 | * pcm_play_dma_stop | 48 | * pcm_play_dma_stop |
48 | * pcm_play_dma_pause | 49 | * pcm_play_dma_pause |
@@ -79,6 +80,9 @@ | |||
79 | * | 80 | * |
80 | */ | 81 | */ |
81 | 82 | ||
83 | /* 'true' when all stages of pcm initialization have completed */ | ||
84 | static bool pcm_is_ready = false; | ||
85 | |||
82 | /* the registered callback function to ask for more mp3 data */ | 86 | /* the registered callback function to ask for more mp3 data */ |
83 | static pcm_play_callback_type pcm_callback_for_more SHAREDBSS_ATTR = NULL; | 87 | static pcm_play_callback_type pcm_callback_for_more SHAREDBSS_ATTR = NULL; |
84 | void (* pcm_play_dma_started)(void) SHAREDBSS_ATTR = NULL; | 88 | void (* pcm_play_dma_started)(void) SHAREDBSS_ATTR = NULL; |
@@ -105,6 +109,12 @@ static void pcm_play_stopped(void) | |||
105 | pcm_playing = false; | 109 | pcm_playing = false; |
106 | } | 110 | } |
107 | 111 | ||
112 | static void pcm_wait_for_init(void) | ||
113 | { | ||
114 | while (!pcm_is_ready) | ||
115 | sleep(0); | ||
116 | } | ||
117 | |||
108 | /** | 118 | /** |
109 | * Perform peak calculation on a buffer of packed 16-bit samples. | 119 | * Perform peak calculation on a buffer of packed 16-bit samples. |
110 | * | 120 | * |
@@ -230,6 +240,23 @@ void pcm_init(void) | |||
230 | pcm_play_dma_init(); | 240 | pcm_play_dma_init(); |
231 | } | 241 | } |
232 | 242 | ||
243 | /* Finish delayed init */ | ||
244 | void pcm_postinit(void) | ||
245 | { | ||
246 | logf("pcm_postinit"); | ||
247 | |||
248 | logf(" pcm_play_dma_postinit"); | ||
249 | |||
250 | pcm_play_dma_postinit(); | ||
251 | |||
252 | pcm_is_ready = true; | ||
253 | } | ||
254 | |||
255 | bool pcm_is_initialized(void) | ||
256 | { | ||
257 | return pcm_is_ready; | ||
258 | } | ||
259 | |||
233 | /* Common code to pcm_play_data and pcm_play_pause */ | 260 | /* Common code to pcm_play_data and pcm_play_pause */ |
234 | static void pcm_play_data_start(unsigned char *start, size_t size) | 261 | static void pcm_play_data_start(unsigned char *start, size_t size) |
235 | { | 262 | { |
@@ -402,6 +429,8 @@ void pcm_apply_settings(void) | |||
402 | { | 429 | { |
403 | logf("pcm_apply_settings"); | 430 | logf("pcm_apply_settings"); |
404 | 431 | ||
432 | pcm_wait_for_init(); | ||
433 | |||
405 | if (pcm_sampr != pcm_curr_sampr) | 434 | if (pcm_sampr != pcm_curr_sampr) |
406 | { | 435 | { |
407 | logf(" pcm_dma_apply_settings"); | 436 | logf(" pcm_dma_apply_settings"); |
@@ -487,6 +516,8 @@ void pcm_init_recording(void) | |||
487 | { | 516 | { |
488 | logf("pcm_init_recording"); | 517 | logf("pcm_init_recording"); |
489 | 518 | ||
519 | pcm_wait_for_init(); | ||
520 | |||
490 | /* Stop the beasty before attempting recording */ | 521 | /* Stop the beasty before attempting recording */ |
491 | mixer_reset(); | 522 | mixer_reset(); |
492 | 523 | ||
diff --git a/firmware/target/arm/as3525/pcm-as3525.c b/firmware/target/arm/as3525/pcm-as3525.c index a89a47d400..f82b373ade 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) | |||
181 | audiohw_preinit(); | 181 | audiohw_preinit(); |
182 | } | 182 | } |
183 | 183 | ||
184 | void pcm_postinit(void) | 184 | void pcm_play_dma_postinit(void) |
185 | { | 185 | { |
186 | audiohw_postinit(); | 186 | audiohw_postinit(); |
187 | } | 187 | } |
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 1f6eef435a..65571a4ee2 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) | |||
247 | audiohw_init(); | 247 | audiohw_init(); |
248 | } | 248 | } |
249 | 249 | ||
250 | void pcm_postinit(void) | 250 | void pcm_play_dma_postinit(void) |
251 | { | 251 | { |
252 | audiohw_postinit(); | 252 | audiohw_postinit(); |
253 | } | 253 | } |
diff --git a/firmware/target/arm/pcm-pp.c b/firmware/target/arm/pcm-pp.c index 704296d407..c35a824a25 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) | |||
527 | IISCONFIG |= IIS_TXFIFOEN; | 527 | IISCONFIG |= IIS_TXFIFOEN; |
528 | } | 528 | } |
529 | 529 | ||
530 | void pcm_postinit(void) | 530 | void void pcm_play_dma_postinit(void) |
531 | { | 531 | { |
532 | audiohw_postinit(); | 532 | audiohw_postinit(); |
533 | } | 533 | } |
diff --git a/firmware/target/arm/pcm-telechips.c b/firmware/target/arm/pcm-telechips.c index aff43171f6..ae4aa5ef38 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 = | |||
57 | .state = 0 | 57 | .state = 0 |
58 | }; | 58 | }; |
59 | 59 | ||
60 | void pcm_postinit(void) | ||
61 | { | ||
62 | audiohw_postinit(); | ||
63 | } | ||
64 | |||
65 | const void * pcm_play_dma_get_peak_buffer(int *count) | 60 | const void * pcm_play_dma_get_peak_buffer(int *count) |
66 | { | 61 | { |
67 | unsigned long addr = (unsigned long)dma_play_data.p; | 62 | unsigned long addr = (unsigned long)dma_play_data.p; |
@@ -110,6 +105,11 @@ void pcm_play_dma_init(void) | |||
110 | #endif | 105 | #endif |
111 | } | 106 | } |
112 | 107 | ||
108 | void pcm_play_dma_postinit(void) | ||
109 | { | ||
110 | audiohw_postinit(); | ||
111 | } | ||
112 | |||
113 | void pcm_dma_apply_settings(void) | 113 | void pcm_dma_apply_settings(void) |
114 | { | 114 | { |
115 | } | 115 | } |
diff --git a/firmware/target/arm/pnx0101/pcm-pnx0101.c b/firmware/target/arm/pnx0101/pcm-pnx0101.c index d4c17454ed..89d56af374 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) | |||
190 | DMAR10(1) |= 1; | 190 | DMAR10(1) |= 1; |
191 | } | 191 | } |
192 | 192 | ||
193 | void pcm_postinit(void) | 193 | void pcm_play_dma_postinit(void) |
194 | { | 194 | { |
195 | audiohw_postinit(); | 195 | audiohw_postinit(); |
196 | } | 196 | } |
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 33194ae5d9..b133639e12 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) | |||
94 | bitset32(&INTMOD, DMA2_MASK); | 94 | bitset32(&INTMOD, DMA2_MASK); |
95 | } | 95 | } |
96 | 96 | ||
97 | void pcm_postinit(void) | 97 | void pcm_play_dma_postinit(void) |
98 | { | 98 | { |
99 | audiohw_postinit(); | 99 | audiohw_postinit(); |
100 | } | 100 | } |
diff --git a/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c b/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c index 0c69c1e6d3..20332c12f8 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) | |||
120 | bitset32(&INTMOD, DMA2_MASK); | 120 | bitset32(&INTMOD, DMA2_MASK); |
121 | } | 121 | } |
122 | 122 | ||
123 | void pcm_postinit(void) | 123 | void pcm_play_dma_postinit(void) |
124 | { | 124 | { |
125 | audiohw_postinit(); | 125 | audiohw_postinit(); |
126 | } | 126 | } |
diff --git a/firmware/target/arm/s5l8700/pcm-s5l8700.c b/firmware/target/arm/s5l8700/pcm-s5l8700.c index 14c515ec47..6d733e0ff1 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) | |||
262 | audiohw_preinit(); | 262 | audiohw_preinit(); |
263 | } | 263 | } |
264 | 264 | ||
265 | void pcm_postinit(void) | 265 | void pcm_play_dma_postinit(void) |
266 | { | 266 | { |
267 | audiohw_postinit(); | 267 | audiohw_postinit(); |
268 | } | 268 | } |
diff --git a/firmware/target/arm/s5l8702/pcm-s5l8702.c b/firmware/target/arm/s5l8702/pcm-s5l8702.c index dbadf3bac0..c3df77f14f 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) | |||
152 | audiohw_preinit(); | 152 | audiohw_preinit(); |
153 | } | 153 | } |
154 | 154 | ||
155 | void pcm_postinit(void) | 155 | void pcm_play_dma_postinit(void) |
156 | { | 156 | { |
157 | audiohw_postinit(); | 157 | audiohw_postinit(); |
158 | } | 158 | } |
diff --git a/firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c b/firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c index 5ec62cf876..1fda5fe045 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) | |||
44 | // dsp_init(); | 44 | // dsp_init(); |
45 | } | 45 | } |
46 | 46 | ||
47 | void pcm_postinit(void) | 47 | void pcm_play_dma_postinit(void) |
48 | { | 48 | { |
49 | audiohw_postinit(); | 49 | audiohw_postinit(); |
50 | 50 | ||
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c index 90c342e868..c507428c57 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 @@ | |||
35 | */ | 35 | */ |
36 | static void *start; | 36 | static void *start; |
37 | 37 | ||
38 | void pcm_postinit(void) | 38 | void pcm_play_dma_postinit(void) |
39 | { | 39 | { |
40 | /* Configure clock divider */ | 40 | /* Configure clock divider */ |
41 | tsc2100_writereg(CONTROL_PAGE2, TSPP1_ADDRESS, 0x1120); | 41 | tsc2100_writereg(CONTROL_PAGE2, TSPP1_ADDRESS, 0x1120); |
diff --git a/firmware/target/coldfire/pcm-coldfire.c b/firmware/target/coldfire/pcm-coldfire.c index 85eeaec815..e95d445337 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) | |||
203 | #endif | 203 | #endif |
204 | } /* pcm_play_dma_init */ | 204 | } /* pcm_play_dma_init */ |
205 | 205 | ||
206 | void pcm_postinit(void) | 206 | void pcm_play_dma_postinit(void) |
207 | { | 207 | { |
208 | audiohw_postinit(); | 208 | audiohw_postinit(); |
209 | iis_play_reset(); | 209 | iis_play_reset(); |
diff --git a/firmware/target/hosted/android/pcm-android.c b/firmware/target/hosted/android/pcm-android.c index 6492a779f2..4e58707d0a 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) | |||
206 | write_method = e->GetMethodID(env_ptr, RockboxPCM_class, "write", "([BII)I"); | 206 | write_method = e->GetMethodID(env_ptr, RockboxPCM_class, "write", "([BII)I"); |
207 | } | 207 | } |
208 | 208 | ||
209 | void pcm_postinit(void) | 209 | void pcm_play_dma_postinit(void) |
210 | { | 210 | { |
211 | } | 211 | } |
212 | 212 | ||
diff --git a/firmware/target/hosted/maemo/pcm-gstreamer.c b/firmware/target/hosted/maemo/pcm-gstreamer.c index 6e049dbbff..d6879ea083 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) | |||
397 | g_main_loop_unref (pcm_loop); | 397 | g_main_loop_unref (pcm_loop); |
398 | } | 398 | } |
399 | 399 | ||
400 | void pcm_postinit(void) | 400 | void pcm_play_dma_postinit(void) |
401 | { | 401 | { |
402 | } | 402 | } |
403 | 403 | ||
diff --git a/firmware/target/hosted/sdl/pcm-sdl.c b/firmware/target/hosted/sdl/pcm-sdl.c index dfdd90f29b..020928d572 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) | |||
410 | pcm_dma_apply_settings_nolock(); | 410 | pcm_dma_apply_settings_nolock(); |
411 | } | 411 | } |
412 | 412 | ||
413 | void pcm_postinit(void) | 413 | void pcm_play_dma_postinit(void) |
414 | { | 414 | { |
415 | } | 415 | } |
416 | 416 | ||
diff --git a/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c b/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c index cfc3c9ef8e..1ed413c9ae 100644 --- a/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c +++ b/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c | |||
@@ -33,7 +33,7 @@ | |||
33 | ** Playback DMA transfer | 33 | ** Playback DMA transfer |
34 | **/ | 34 | **/ |
35 | 35 | ||
36 | void pcm_postinit(void) | 36 | void pcm_play_dma_postinit(void) |
37 | { | 37 | { |
38 | audiohw_postinit(); | 38 | audiohw_postinit(); |
39 | 39 | ||