summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSolomon Peachy <pizza@shaftnet.org>2020-10-30 20:30:27 -0400
committerSolomon Peachy <pizza@shaftnet.org>2020-10-31 01:18:27 +0000
commitfe2d52cc7d0180acff26349f2904fba854de6fbc (patch)
tree62dbbe9a6e6ebc011e8e02f7428b8f620a83f698
parent2d85c7215169780168032617603e9e7b06d7ba25 (diff)
downloadrockbox-fe2d52cc7d0180acff26349f2904fba854de6fbc.tar.gz
rockbox-fe2d52cc7d0180acff26349f2904fba854de6fbc.zip
pcm: Get rid of pcm_play_pause() and associated APIs
Nothing in the core has used it for some time. It's exported to the plugin API but the last plugins to use it were switched to the mixer API back in 2011. This allows us to get rid of pcm_play_dma_pause() from all audio drivers Change-Id: Ic3fa02592316f84963e41d792d1cabb436d1ff6b
-rw-r--r--apps/plugin.c2
-rw-r--r--apps/plugin.h2
-rw-r--r--apps/plugins/lua/include_lua/pcm.lua2
-rw-r--r--apps/plugins/lua/rocklib.c15
-rw-r--r--docs/PLUGIN_API12
-rw-r--r--firmware/drivers/audio/rocker_codec.c2
-rw-r--r--firmware/export/fiiolinux_codec.h2
-rw-r--r--firmware/export/pcm-internal.h3
-rw-r--r--firmware/export/pcm.h2
-rw-r--r--firmware/export/rocker_codec.h2
-rw-r--r--firmware/export/xduoolinux_codec.h2
-rw-r--r--firmware/pcm.c53
-rw-r--r--firmware/pcm_sw_volume.c10
-rw-r--r--firmware/target/arm/as3525/pcm-as3525.c20
-rw-r--r--firmware/target/arm/imx233/pcm-imx233.c6
-rw-r--r--firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c14
-rw-r--r--firmware/target/arm/pcm-telechips.c9
-rw-r--r--firmware/target/arm/pnx0101/pcm-pnx0101.c7
-rw-r--r--firmware/target/arm/pp/pcm-pp.c9
-rw-r--r--firmware/target/arm/rk27xx/pcm-rk27xx.c15
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/pcm-meg-fx.c18
-rw-r--r--firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c18
-rw-r--r--firmware/target/arm/s5l8700/pcm-s5l8700.c12
-rw-r--r--firmware/target/arm/s5l8702/pcm-s5l8702.c7
-rw-r--r--firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c5
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c14
-rw-r--r--firmware/target/arm/tms320dm320/sansa-connect/pcm-sansaconnect.c14
-rw-r--r--firmware/target/coldfire/pcm-coldfire.c19
-rw-r--r--firmware/target/hosted/android/pcm-android.c15
-rw-r--r--firmware/target/hosted/ibasso/pcm-ibasso.c16
-rw-r--r--firmware/target/hosted/maemo/pcm-gstreamer.c17
-rw-r--r--firmware/target/hosted/pcm-alsa.c32
-rw-r--r--firmware/target/hosted/sdl/pcm-sdl.c8
-rw-r--r--firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c12
-rw-r--r--firmware/target/mips/ingenic_jz47xx/pcm-jz4760.c12
35 files changed, 20 insertions, 388 deletions
diff --git a/apps/plugin.c b/apps/plugin.c
index 4a50c2b3a3..584fbf1ab3 100644
--- a/apps/plugin.c
+++ b/apps/plugin.c
@@ -602,8 +602,6 @@ static const struct plugin_api rockbox_api = {
602 pcm_play_stop, 602 pcm_play_stop,
603 pcm_set_frequency, 603 pcm_set_frequency,
604 pcm_is_playing, 604 pcm_is_playing,
605 pcm_is_paused,
606 pcm_play_pause,
607 pcm_get_bytes_waiting, 605 pcm_get_bytes_waiting,
608 pcm_calculate_peaks, 606 pcm_calculate_peaks,
609 pcm_get_peak_buffer, 607 pcm_get_peak_buffer,
diff --git a/apps/plugin.h b/apps/plugin.h
index 395caaddc0..c2538b0cf5 100644
--- a/apps/plugin.h
+++ b/apps/plugin.h
@@ -677,8 +677,6 @@ struct plugin_api {
677 void (*pcm_play_stop)(void); 677 void (*pcm_play_stop)(void);
678 void (*pcm_set_frequency)(unsigned int frequency); 678 void (*pcm_set_frequency)(unsigned int frequency);
679 bool (*pcm_is_playing)(void); 679 bool (*pcm_is_playing)(void);
680 bool (*pcm_is_paused)(void);
681 void (*pcm_play_pause)(bool play);
682 size_t (*pcm_get_bytes_waiting)(void); 680 size_t (*pcm_get_bytes_waiting)(void);
683 void (*pcm_calculate_peaks)(int *left, int *right); 681 void (*pcm_calculate_peaks)(int *left, int *right);
684 const void* (*pcm_get_peak_buffer)(int *count); 682 const void* (*pcm_get_peak_buffer)(int *count);
diff --git a/apps/plugins/lua/include_lua/pcm.lua b/apps/plugins/lua/include_lua/pcm.lua
index 6b2b6db204..46cc5b0720 100644
--- a/apps/plugins/lua/include_lua/pcm.lua
+++ b/apps/plugins/lua/include_lua/pcm.lua
@@ -26,11 +26,9 @@ if not rb.pcm then rb.splash(rb.HZ, "No Support!") return nil end
26 26
27rb.pcm_apply_settings = function() rb.pcm("apply_settings") end 27rb.pcm_apply_settings = function() rb.pcm("apply_settings") end
28rb.pcm_set_frequency = function(freq) rb.pcm("set_frequency", freq) end 28rb.pcm_set_frequency = function(freq) rb.pcm("set_frequency", freq) end
29rb.pcm_play_pause = function(bplay) rb.pcm("play_pause", bplay) end
30rb.pcm_play_stop = function() rb.pcm("play_stop") end 29rb.pcm_play_stop = function() rb.pcm("play_stop") end
31rb.pcm_play_lock = function() rb.pcm("play_lock") end 30rb.pcm_play_lock = function() rb.pcm("play_lock") end
32rb.pcm_play_unlock = function() rb.pcm("play_unlock") end 31rb.pcm_play_unlock = function() rb.pcm("play_unlock") end
33rb.pcm_is_playing = function() return rb.pcm("is_playing") end 32rb.pcm_is_playing = function() return rb.pcm("is_playing") end
34rb.pcm_is_paused = function() return rb.pcm("is_paused") end
35rb.pcm_calculate_peaks = function() return rb.pcm("calculate_peaks") end 33rb.pcm_calculate_peaks = function() return rb.pcm("calculate_peaks") end
36rb.pcm_get_bytes_waiting = function() return rb.pcm("get_bytes_waiting") end 34rb.pcm_get_bytes_waiting = function() return rb.pcm("get_bytes_waiting") end
diff --git a/apps/plugins/lua/rocklib.c b/apps/plugins/lua/rocklib.c
index 8921c0a4c3..6219bb2e5a 100644
--- a/apps/plugins/lua/rocklib.c
+++ b/apps/plugins/lua/rocklib.c
@@ -519,12 +519,12 @@ RB_WRAP(sound)
519 519
520RB_WRAP(pcm) 520RB_WRAP(pcm)
521{ 521{
522 enum e_pcm {PCM_APPLYSETTINGS = 0, PCM_ISPLAYING, PCM_ISPAUSED, 522 enum e_pcm {PCM_APPLYSETTINGS = 0, PCM_ISPLAYING,
523 PCM_PLAYSTOP, PCM_PLAYPAUSE, PCM_PLAYLOCK, PCM_PLAYUNLOCK, 523 PCM_PLAYSTOP, PCM_PLAYLOCK, PCM_PLAYUNLOCK,
524 PCM_CALCULATEPEAKS, PCM_SETFREQUENCY, PCM_GETBYTESWAITING, PCM_ECOUNT}; 524 PCM_CALCULATEPEAKS, PCM_SETFREQUENCY, PCM_GETBYTESWAITING, PCM_ECOUNT};
525 525
526 const char *pcm_option[] = {"apply_settings", "is_playing", "is_paused", 526 const char *pcm_option[] = {"apply_settings", "is_playing",
527 "play_stop", "play_pause", "play_lock", "play_unlock", 527 "play_stop", "play_lock", "play_unlock",
528 "calculate_peaks", "set_frequency", "get_bytes_waiting", NULL}; 528 "calculate_peaks", "set_frequency", "get_bytes_waiting", NULL};
529 bool b_result; 529 bool b_result;
530 int left, right; 530 int left, right;
@@ -542,13 +542,6 @@ RB_WRAP(pcm)
542 b_result = rb->pcm_is_playing(); 542 b_result = rb->pcm_is_playing();
543 lua_pushboolean(L, b_result); 543 lua_pushboolean(L, b_result);
544 break; 544 break;
545 case PCM_ISPAUSED:
546 b_result = rb->pcm_is_paused();
547 lua_pushboolean(L, b_result);
548 break;
549 case PCM_PLAYPAUSE:
550 rb->pcm_play_pause(luaL_checkboolean(L, 2));
551 break;
552 case PCM_PLAYSTOP: 545 case PCM_PLAYSTOP:
553 rb->pcm_play_stop(); 546 rb->pcm_play_stop();
554 break; 547 break;
diff --git a/docs/PLUGIN_API b/docs/PLUGIN_API
index 84c203c05a..b77d25a4b9 100644
--- a/docs/PLUGIN_API
+++ b/docs/PLUGIN_API
@@ -1430,11 +1430,6 @@ void pcm_init_recording(void)
1430 \conditions defined(HAVE_RECORDING) 1430 \conditions defined(HAVE_RECORDING)
1431 \description 1431 \description
1432 1432
1433bool pcm_is_paused(void)
1434 \group sound
1435 \return true if playback is paused, else false
1436 \description
1437
1438bool pcm_is_playing(void) 1433bool pcm_is_playing(void)
1439 \group sound 1434 \group sound
1440 \return true unless playback is paused 1435 \return true unless playback is paused
@@ -1451,14 +1446,9 @@ void pcm_play_lock(void)
1451 \group sound 1446 \group sound
1452 \description 1447 \description
1453 1448
1454void pcm_play_pause(bool play)
1455 \group sound
1456 \param play
1457 \description Pauses or unpauses the playback depending on the truth value of =play=
1458
1459void pcm_play_stop(void) 1449void pcm_play_stop(void)
1460 \group sound 1450 \group sound
1461 \description Stops the playback and empties the audio buffer unlike [F[pcm_play_pause]] 1451 \description Stops the playback and empties the audio buffer.
1462 1452
1463void pcm_play_unlock(void) 1453void pcm_play_unlock(void)
1464 \group sound 1454 \group sound
diff --git a/firmware/drivers/audio/rocker_codec.c b/firmware/drivers/audio/rocker_codec.c
index 4beda4b572..b4ebdd7816 100644
--- a/firmware/drivers/audio/rocker_codec.c
+++ b/firmware/drivers/audio/rocker_codec.c
@@ -71,7 +71,7 @@ void audiohw_preinit(void)
71{ 71{
72 alsa_controls_init(); 72 alsa_controls_init();
73 hw_open(); 73 hw_open();
74#if defined(AUDIOHW_MUTE_ON_PAUSE) || defined (AUDIOHW_NEEDS_INITIAL_UNMUTE) 74#if defined(AUDIOHW_MUTE_ON_STOP) || defined(AUDIOHW_NEEDS_INITIAL_UNMUTE)
75 audiohw_mute(true); /* Start muted to avoid the POP */ 75 audiohw_mute(true); /* Start muted to avoid the POP */
76#else 76#else
77 audiohw_mute(false); 77 audiohw_mute(false);
diff --git a/firmware/export/fiiolinux_codec.h b/firmware/export/fiiolinux_codec.h
index 118a0928d7..5fa7ae2b10 100644
--- a/firmware/export/fiiolinux_codec.h
+++ b/firmware/export/fiiolinux_codec.h
@@ -7,6 +7,6 @@ AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -100, 0, -30)
7AUDIOHW_SETTING(FILTER_ROLL_OFF, "", 0, 1, 0, 4, 0) 7AUDIOHW_SETTING(FILTER_ROLL_OFF, "", 0, 1, 0, 4, 0)
8#endif 8#endif
9 9
10#define AUDIOHW_MUTE_ON_PAUSE 10#define AUDIOHW_MUTE_ON_STOP
11 11
12void audiohw_mute(int mute); 12void audiohw_mute(int mute);
diff --git a/firmware/export/pcm-internal.h b/firmware/export/pcm-internal.h
index 7670f99f04..d5d46c33e1 100644
--- a/firmware/export/pcm-internal.h
+++ b/firmware/export/pcm-internal.h
@@ -119,7 +119,6 @@ pcm_play_dma_status_callback(enum pcm_dma_status status)
119 119
120#if defined(HAVE_SW_VOLUME_CONTROL) && !defined(PCM_SW_VOLUME_UNBUFFERED) 120#if defined(HAVE_SW_VOLUME_CONTROL) && !defined(PCM_SW_VOLUME_UNBUFFERED)
121void pcm_play_dma_start_int(const void *addr, size_t size); 121void pcm_play_dma_start_int(const void *addr, size_t size);
122void pcm_play_dma_pause_int(bool pause);
123void pcm_play_dma_stop_int(void); 122void pcm_play_dma_stop_int(void);
124void pcm_play_stop_int(void); 123void pcm_play_stop_int(void);
125const void *pcm_play_dma_get_peak_buffer_int(int *count); 124const void *pcm_play_dma_get_peak_buffer_int(int *count);
@@ -139,7 +138,6 @@ void * pcm_dma_addr(void *addr);
139#endif 138#endif
140 139
141extern volatile bool pcm_playing; 140extern volatile bool pcm_playing;
142extern volatile bool pcm_paused;
143 141
144void pcm_play_dma_lock(void); 142void pcm_play_dma_lock(void);
145void pcm_play_dma_unlock(void); 143void pcm_play_dma_unlock(void);
@@ -147,7 +145,6 @@ void pcm_play_dma_init(void) INIT_ATTR;
147void pcm_play_dma_postinit(void); 145void pcm_play_dma_postinit(void);
148void pcm_play_dma_start(const void *addr, size_t size); 146void pcm_play_dma_start(const void *addr, size_t size);
149void pcm_play_dma_stop(void); 147void pcm_play_dma_stop(void);
150void pcm_play_dma_pause(bool pause);
151const void * pcm_play_dma_get_peak_buffer(int *count); 148const void * pcm_play_dma_get_peak_buffer(int *count);
152 149
153void pcm_dma_apply_settings(void); 150void pcm_dma_apply_settings(void);
diff --git a/firmware/export/pcm.h b/firmware/export/pcm.h
index 23c0bd4a0b..61e11ef801 100644
--- a/firmware/export/pcm.h
+++ b/firmware/export/pcm.h
@@ -90,8 +90,6 @@ const void* pcm_get_peak_buffer(int* count);
90size_t pcm_get_bytes_waiting(void); 90size_t pcm_get_bytes_waiting(void);
91 91
92void pcm_play_stop(void); 92void pcm_play_stop(void);
93void pcm_play_pause(bool play);
94bool pcm_is_paused(void);
95bool pcm_is_playing(void); 93bool pcm_is_playing(void);
96 94
97#ifdef HAVE_RECORDING 95#ifdef HAVE_RECORDING
diff --git a/firmware/export/rocker_codec.h b/firmware/export/rocker_codec.h
index c1ee7b87bc..9eb4954f0b 100644
--- a/firmware/export/rocker_codec.h
+++ b/firmware/export/rocker_codec.h
@@ -5,7 +5,7 @@
5AUDIOHW_SETTING(VOLUME, "dB", 1, 5, -115*10, 0, -30*10) 5AUDIOHW_SETTING(VOLUME, "dB", 1, 5, -115*10, 0, -30*10)
6#endif 6#endif
7 7
8//#define AUDIOHW_MUTE_ON_PAUSE 8//#define AUDIOHW_MUTE_ON_STOP
9//#define AUDIOHW_NEEDS_INITIAL_UNMUTE 9//#define AUDIOHW_NEEDS_INITIAL_UNMUTE
10 10
11/* Note: Due to Kernel bug, we can't use MUTE_ON_PAUSE with backlight fading */ 11/* Note: Due to Kernel bug, we can't use MUTE_ON_PAUSE with backlight fading */
diff --git a/firmware/export/xduoolinux_codec.h b/firmware/export/xduoolinux_codec.h
index 744be58e30..301a341f15 100644
--- a/firmware/export/xduoolinux_codec.h
+++ b/firmware/export/xduoolinux_codec.h
@@ -7,7 +7,7 @@ AUDIOHW_SETTING(FILTER_ROLL_OFF, "", 0, 1, 0, 4, 0)
7#endif 7#endif
8 8
9// We want this, but the codec takes over a second to unmute! 9// We want this, but the codec takes over a second to unmute!
10//#define AUDIOHW_MUTE_ON_PAUSE 10//#define AUDIOHW_MUTE_ON_STOP
11 11
12#if defined(XDUOO_X3II) 12#if defined(XDUOO_X3II)
13/* The AK4490 glitches when switching sample rates */ 13/* The AK4490 glitches when switching sample rates */
diff --git a/firmware/pcm.c b/firmware/pcm.c
index 640bb7830f..7a7043bef8 100644
--- a/firmware/pcm.c
+++ b/firmware/pcm.c
@@ -47,14 +47,12 @@
47 * pcm_play_dma_postinit 47 * pcm_play_dma_postinit
48 * pcm_play_dma_start 48 * pcm_play_dma_start
49 * pcm_play_dma_stop 49 * pcm_play_dma_stop
50 * pcm_play_dma_pause
51 * pcm_play_dma_get_peak_buffer 50 * pcm_play_dma_get_peak_buffer
52 * Data Read/Written within TSP - 51 * Data Read/Written within TSP -
53 * pcm_sampr (R) 52 * pcm_sampr (R)
54 * pcm_fsel (R) 53 * pcm_fsel (R)
55 * pcm_curr_sampr (R) 54 * pcm_curr_sampr (R)
56 * pcm_playing (R) 55 * pcm_playing (R)
57 * pcm_paused (R)
58 * 56 *
59 * ==Playback/Recording== 57 * ==Playback/Recording==
60 * Public - 58 * Public -
@@ -93,8 +91,6 @@ volatile pcm_status_callback_type
93 pcm_play_status_callback SHAREDBSS_ATTR = NULL; 91 pcm_play_status_callback SHAREDBSS_ATTR = NULL;
94/* PCM playback state */ 92/* PCM playback state */
95volatile bool pcm_playing SHAREDBSS_ATTR = false; 93volatile bool pcm_playing SHAREDBSS_ATTR = false;
96/* PCM paused state. paused implies playing */
97volatile bool pcm_paused SHAREDBSS_ATTR = false;
98/* samplerate of currently playing audio - undefined if stopped */ 94/* samplerate of currently playing audio - undefined if stopped */
99unsigned long pcm_curr_sampr SHAREDBSS_ATTR = 0; 95unsigned long pcm_curr_sampr SHAREDBSS_ATTR = 0;
100/* samplerate waiting to be set */ 96/* samplerate waiting to be set */
@@ -103,7 +99,6 @@ unsigned long pcm_sampr SHAREDBSS_ATTR = HW_SAMPR_DEFAULT;
103int pcm_fsel SHAREDBSS_ATTR = HW_FREQ_DEFAULT; 99int pcm_fsel SHAREDBSS_ATTR = HW_FREQ_DEFAULT;
104 100
105static void pcm_play_data_start_int(const void *addr, size_t size); 101static void pcm_play_data_start_int(const void *addr, size_t size);
106static void pcm_play_pause_int(bool play);
107void pcm_play_stop_int(void); 102void pcm_play_stop_int(void);
108 103
109#if !defined(HAVE_SW_VOLUME_CONTROL) || defined(PCM_SW_VOLUME_UNBUFFERED) 104#if !defined(HAVE_SW_VOLUME_CONTROL) || defined(PCM_SW_VOLUME_UNBUFFERED)
@@ -118,19 +113,6 @@ static inline void pcm_play_dma_start_int(const void *addr, size_t size)
118 pcm_play_dma_start(addr, size); 113 pcm_play_dma_start(addr, size);
119} 114}
120 115
121static inline void pcm_play_dma_pause_int(bool pause)
122{
123 if (pause || pcm_get_bytes_waiting() > 0)
124 {
125 pcm_play_dma_pause(pause);
126 }
127 else
128 {
129 logf(" no data");
130 pcm_play_data_start_int(NULL, 0);
131 }
132}
133
134static inline void pcm_play_dma_stop_int(void) 116static inline void pcm_play_dma_stop_int(void)
135{ 117{
136 pcm_play_dma_stop(); 118 pcm_play_dma_stop();
@@ -167,7 +149,6 @@ static void pcm_play_data_start_int(const void *addr, size_t size)
167 logf(" pcm_play_dma_start_int"); 149 logf(" pcm_play_dma_start_int");
168 pcm_play_dma_start_int(addr, size); 150 pcm_play_dma_start_int(addr, size);
169 pcm_playing = true; 151 pcm_playing = true;
170 pcm_paused = false;
171 } 152 }
172 else 153 else
173 { 154 {
@@ -177,22 +158,11 @@ static void pcm_play_data_start_int(const void *addr, size_t size)
177 } 158 }
178} 159}
179 160
180static void pcm_play_pause_int(bool play)
181{
182 if (play)
183 pcm_apply_settings();
184
185 logf(" pcm_play_dma_pause_int");
186 pcm_play_dma_pause_int(!play);
187 pcm_paused = !play && pcm_playing;
188}
189
190void pcm_play_stop_int(void) 161void pcm_play_stop_int(void)
191{ 162{
192 pcm_play_dma_stop_int(); 163 pcm_play_dma_stop_int();
193 pcm_callback_for_more = NULL; 164 pcm_callback_for_more = NULL;
194 pcm_play_status_callback = NULL; 165 pcm_play_status_callback = NULL;
195 pcm_paused = false;
196 pcm_playing = false; 166 pcm_playing = false;
197} 167}
198 168
@@ -282,8 +252,7 @@ void pcm_calculate_peaks(int *left, int *right)
282 int count; 252 int count;
283 const void *addr = pcm_play_dma_get_peak_buffer_int(&count); 253 const void *addr = pcm_play_dma_get_peak_buffer_int(&count);
284 254
285 pcm_do_peak_calculation(&peaks, pcm_playing && !pcm_paused, 255 pcm_do_peak_calculation(&peaks, pcm_playing, addr, count);
286 addr, count);
287 256
288 if (left) 257 if (left)
289 *left = peaks.left; 258 *left = peaks.left;
@@ -302,11 +271,6 @@ bool pcm_is_playing(void)
302 return pcm_playing; 271 return pcm_playing;
303} 272}
304 273
305bool pcm_is_paused(void)
306{
307 return pcm_paused;
308}
309
310/**************************************************************************** 274/****************************************************************************
311 * Functions that do not require targeted implementation but only a targeted 275 * Functions that do not require targeted implementation but only a targeted
312 * interface 276 * interface
@@ -358,21 +322,6 @@ void pcm_play_data(pcm_play_callback_type get_more,
358 pcm_play_unlock(); 322 pcm_play_unlock();
359} 323}
360 324
361void pcm_play_pause(bool play)
362{
363 logf("pcm_play_pause: %s", play ? "play" : "pause");
364
365 pcm_play_lock();
366
367 if (play == pcm_paused && pcm_playing)
368 {
369 logf(" pcm_play_pause_int");
370 pcm_play_pause_int(play);
371 }
372
373 pcm_play_unlock();
374}
375
376void pcm_play_stop(void) 325void pcm_play_stop(void)
377{ 326{
378 logf("pcm_play_stop"); 327 logf("pcm_play_stop");
diff --git a/firmware/pcm_sw_volume.c b/firmware/pcm_sw_volume.c
index 8b6c9220fd..e972896321 100644
--- a/firmware/pcm_sw_volume.c
+++ b/firmware/pcm_sw_volume.c
@@ -278,16 +278,6 @@ void pcm_play_dma_start_int(const void *addr, size_t size)
278 start_pcm(true); 278 start_pcm(true);
279} 279}
280 280
281void pcm_play_dma_pause_int(bool pause)
282{
283 if (pause)
284 pcm_play_dma_pause(true);
285 else if (src_buf_rem)
286 start_pcm(false); /* Reprocess in case volume level changed */
287 else
288 pcm_play_stop_int(); /* Playing frame was last frame */
289}
290
291void pcm_play_dma_stop_int(void) 281void pcm_play_dma_stop_int(void)
292{ 282{
293 pcm_play_dma_stop(); 283 pcm_play_dma_stop();
diff --git a/firmware/target/arm/as3525/pcm-as3525.c b/firmware/target/arm/as3525/pcm-as3525.c
index ddb4d86bd4..90b6aabd7c 100644
--- a/firmware/target/arm/as3525/pcm-as3525.c
+++ b/firmware/target/arm/as3525/pcm-as3525.c
@@ -152,26 +152,6 @@ void pcm_play_dma_stop(void)
152 play_callback_pending = false; 152 play_callback_pending = false;
153} 153}
154 154
155void pcm_play_dma_pause(bool pause)
156{
157 is_playing = !pause;
158
159 if(pause)
160 {
161 dma_pause_channel(0);
162
163 /* if producer's buffer finished, upper layer starts anew */
164 if (dma_rem_size == 0)
165 play_callback_pending = false;
166 }
167 else
168 {
169 if (play_sub_size != 0)
170 dma_resume_channel(0);
171 /* else unlock calls the callback if sub buffers remain */
172 }
173}
174
175void pcm_play_dma_init(void) 155void pcm_play_dma_init(void)
176{ 156{
177 bitset32(&CGU_PERI, CGU_I2SOUT_APB_CLOCK_ENABLE); 157 bitset32(&CGU_PERI, CGU_I2SOUT_APB_CLOCK_ENABLE);
diff --git a/firmware/target/arm/imx233/pcm-imx233.c b/firmware/target/arm/imx233/pcm-imx233.c
index de0e1aabf5..7e20a7ce68 100644
--- a/firmware/target/arm/imx233/pcm-imx233.c
+++ b/firmware/target/arm/imx233/pcm-imx233.c
@@ -149,12 +149,6 @@ void pcm_play_dma_start(const void *addr, size_t size)
149 pcm_play_unlock(); 149 pcm_play_unlock();
150} 150}
151 151
152void pcm_play_dma_pause(bool pause)
153{
154 imx233_dma_freeze_channel(APB_AUDIO_DAC, pause);
155 dac_freezed = pause;
156}
157
158void pcm_play_dma_init(void) 152void pcm_play_dma_init(void)
159{ 153{
160 audiohw_preinit(); 154 audiohw_preinit();
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 7304bdcff3..72d8e4a021 100644
--- a/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c
+++ b/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c
@@ -224,20 +224,6 @@ void pcm_play_dma_stop(void)
224 play_stop_pcm(); 224 play_stop_pcm();
225} 225}
226 226
227void pcm_play_dma_pause(bool pause)
228{
229 if (pause)
230 {
231 sdma_channel_pause(DMA_PLAY_CH_NUM);
232 play_stop_pcm();
233 }
234 else
235 {
236 play_start_pcm();
237 sdma_channel_run(DMA_PLAY_CH_NUM);
238 }
239}
240
241/* Return the number of bytes waiting - full L-R sample pairs only */ 227/* Return the number of bytes waiting - full L-R sample pairs only */
242size_t pcm_get_bytes_waiting(void) 228size_t pcm_get_bytes_waiting(void)
243{ 229{
diff --git a/firmware/target/arm/pcm-telechips.c b/firmware/target/arm/pcm-telechips.c
index ddd69088cf..9c64b58594 100644
--- a/firmware/target/arm/pcm-telechips.c
+++ b/firmware/target/arm/pcm-telechips.c
@@ -194,15 +194,6 @@ void pcm_play_unlock(void)
194 restore_fiq(status); 194 restore_fiq(status);
195} 195}
196 196
197void pcm_play_dma_pause(bool pause)
198{
199 if (pause) {
200 play_stop_pcm();
201 } else {
202 play_start_pcm();
203 }
204}
205
206size_t pcm_get_bytes_waiting(void) 197size_t pcm_get_bytes_waiting(void)
207{ 198{
208 return dma_play_data.size & ~3; 199 return dma_play_data.size & ~3;
diff --git a/firmware/target/arm/pnx0101/pcm-pnx0101.c b/firmware/target/arm/pnx0101/pcm-pnx0101.c
index a2394bc355..01ead4723b 100644
--- a/firmware/target/arm/pnx0101/pcm-pnx0101.c
+++ b/firmware/target/arm/pnx0101/pcm-pnx0101.c
@@ -49,11 +49,6 @@ void pcm_play_dma_stop(void)
49{ 49{
50} 50}
51 51
52void pcm_play_dma_pause(bool pause)
53{
54 (void)pause;
55}
56
57static inline void fill_dma_buf(int offset) 52static inline void fill_dma_buf(int offset)
58{ 53{
59 short *l, *r, *lend; 54 short *l, *r, *lend;
@@ -62,7 +57,7 @@ static inline void fill_dma_buf(int offset)
62 lend = l + DMA_BUF_SAMPLES / 2; 57 lend = l + DMA_BUF_SAMPLES / 2;
63 r = dma_buf_right + offset; 58 r = dma_buf_right + offset;
64 59
65 if (pcm_playing && !pcm_paused) 60 if (pcm_playing)
66 { 61 {
67 bool new_buffer =false; 62 bool new_buffer =false;
68 63
diff --git a/firmware/target/arm/pp/pcm-pp.c b/firmware/target/arm/pp/pcm-pp.c
index 99d46a6096..91d567ee83 100644
--- a/firmware/target/arm/pp/pcm-pp.c
+++ b/firmware/target/arm/pp/pcm-pp.c
@@ -497,15 +497,6 @@ void pcm_play_dma_stop(void)
497#endif 497#endif
498} 498}
499 499
500void pcm_play_dma_pause(bool pause)
501{
502 if (pause) {
503 play_stop_pcm();
504 } else {
505 play_start_pcm();
506 }
507}
508
509size_t pcm_get_bytes_waiting(void) 500size_t pcm_get_bytes_waiting(void)
510{ 501{
511 return dma_play_data.size & ~3; 502 return dma_play_data.size & ~3;
diff --git a/firmware/target/arm/rk27xx/pcm-rk27xx.c b/firmware/target/arm/rk27xx/pcm-rk27xx.c
index 21feaf6cc4..5cfe54f9de 100644
--- a/firmware/target/arm/rk27xx/pcm-rk27xx.c
+++ b/firmware/target/arm/rk27xx/pcm-rk27xx.c
@@ -114,21 +114,6 @@ void pcm_play_dma_start(const void *addr, size_t size)
114 hdma_i2s_transfer(addr, size); 114 hdma_i2s_transfer(addr, size);
115} 115}
116 116
117/* pause DMA transfer by disabling clock to DMA module */
118void pcm_play_dma_pause(bool pause)
119{
120 if(pause)
121 {
122 SCU_CLKCFG |= CLKCFG_HDMA;
123 locked = 1;
124 }
125 else
126 {
127 SCU_CLKCFG &= ~CLKCFG_HDMA;
128 locked = 0;
129 }
130}
131
132static void i2s_init(void) 117static void i2s_init(void)
133{ 118{
134#if defined(HAVE_RK27XX_CODEC) 119#if defined(HAVE_RK27XX_CODEC)
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 a1c854a0df..da5dc9cdd5 100644
--- a/firmware/target/arm/s3c2440/gigabeat-fx/pcm-meg-fx.c
+++ b/firmware/target/arm/s3c2440/gigabeat-fx/pcm-meg-fx.c
@@ -195,24 +195,6 @@ void pcm_play_dma_stop(void)
195 bitclr32(&CLKCON, 1<<17); 195 bitclr32(&CLKCON, 1<<17);
196} 196}
197 197
198void pcm_play_dma_pause(bool pause)
199{
200 if (pause)
201 {
202 /* pause playback on current buffer */
203 play_stop_pcm();
204 }
205 else
206 {
207 /* restart playback on current buffer */
208 /* make sure we're aligned on left channel - skip any right
209 channel sample left waiting */
210 DISRC2 = (DCSRC2 + 2) & ~0x3;
211 DCON2 = DMA_CONTROL_SETUP | (DSTAT2 & 0xFFFFE);
212 play_start_pcm();
213 }
214}
215
216void fiq_handler(void) 198void fiq_handler(void)
217{ 199{
218 static const void *start; 200 static const void *start;
diff --git a/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c b/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c
index 943cbb2ade..dbb1a06809 100644
--- a/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c
+++ b/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c
@@ -235,24 +235,6 @@ void pcm_play_dma_stop(void)
235 bitclr32(&CLKCON, 1<<17); 235 bitclr32(&CLKCON, 1<<17);
236} 236}
237 237
238void pcm_play_dma_pause(bool pause)
239{
240 if (pause)
241 {
242 /* pause playback on current buffer */
243 play_stop_pcm();
244 }
245 else
246 {
247 /* restart playback on current buffer */
248 /* make sure we're aligned on left channel - skip any right
249 channel sample left waiting */
250 DISRC2 = (DCSRC2 + 2) & ~0x3;
251 DCON2 = DMA_CONTROL_SETUP | (DSTAT2 & 0xFFFFE);
252 play_start_pcm();
253 }
254}
255
256void fiq_handler(void) 238void fiq_handler(void)
257{ 239{
258 static const void *start; 240 static const void *start;
diff --git a/firmware/target/arm/s5l8700/pcm-s5l8700.c b/firmware/target/arm/s5l8700/pcm-s5l8700.c
index d8387c2aa5..47525611ee 100644
--- a/firmware/target/arm/s5l8700/pcm-s5l8700.c
+++ b/firmware/target/arm/s5l8700/pcm-s5l8700.c
@@ -35,7 +35,6 @@
35/* Driver for the IIS/PCM part of the s5l8700 using DMA 35/* Driver for the IIS/PCM part of the s5l8700 using DMA
36 36
37 Notes: 37 Notes:
38 - pcm_play_dma_pause is untested, not sure if implemented the right way
39 - pcm_play_dma_stop is untested, not sure if implemented the right way 38 - pcm_play_dma_stop is untested, not sure if implemented the right way
40 - recording is not implemented 39 - recording is not implemented
41*/ 40*/
@@ -173,17 +172,6 @@ void pcm_play_dma_stop(void)
173 (0 << 0); /* 0 = LRCK on */ 172 (0 << 0); /* 0 = LRCK on */
174} 173}
175 174
176/* pause playback by disabling the I2S interface */
177void pcm_play_dma_pause(bool pause)
178{
179 if (pause) {
180 I2STXCOM |= (1 << 0); /* LRCK off */
181 }
182 else {
183 I2STXCOM &= ~(1 << 0); /* LRCK on */
184 }
185}
186
187static void pcm_dma_set_freq(enum hw_freq_indexes idx) 175static void pcm_dma_set_freq(enum hw_freq_indexes idx)
188{ 176{
189 struct div_entry div = div_table[idx]; 177 struct div_entry div = div_table[idx];
diff --git a/firmware/target/arm/s5l8702/pcm-s5l8702.c b/firmware/target/arm/s5l8702/pcm-s5l8702.c
index 86a0edd54a..a62a7243a2 100644
--- a/firmware/target/arm/s5l8702/pcm-s5l8702.c
+++ b/firmware/target/arm/s5l8702/pcm-s5l8702.c
@@ -157,13 +157,6 @@ void pcm_play_dma_stop(void)
157 I2STXCOM = 0xa; 157 I2STXCOM = 0xa;
158} 158}
159 159
160/* pause playback by disabling LRCK */
161void pcm_play_dma_pause(bool pause)
162{
163 if (pause) I2STXCOM |= 1;
164 else I2STXCOM &= ~1;
165}
166
167/* MCLK = 12MHz (MCLKDIV2=1), [CS42L55 DS, s4.8] */ 160/* MCLK = 12MHz (MCLKDIV2=1), [CS42L55 DS, s4.8] */
168#define MCLK_FREQ 12000000 161#define MCLK_FREQ 12000000
169 162
diff --git a/firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c b/firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c
index 1fda5fe045..f31185c2ea 100644
--- a/firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c
+++ b/firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c
@@ -85,11 +85,6 @@ void pcm_play_unlock(void)
85 85
86} 86}
87 87
88void pcm_play_dma_pause(bool pause)
89{
90 (void) pause;
91}
92
93size_t pcm_get_bytes_waiting(void) 88size_t pcm_get_bytes_waiting(void)
94{ 89{
95 return 0; 90 return 0;
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c
index d23c93de39..0d7bcbab37 100644
--- a/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c
+++ b/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c
@@ -120,20 +120,6 @@ void pcm_play_unlock(void)
120 120
121} 121}
122 122
123void pcm_play_dma_pause(bool pause)
124{
125 if (pause)
126 {
127 DSP_(_dma0_stopped)=2;
128 dsp_wake();
129 }
130 else
131 {
132 DSP_(_dma0_stopped)=0;
133 dsp_wake();
134 }
135}
136
137size_t pcm_get_bytes_waiting(void) 123size_t pcm_get_bytes_waiting(void)
138{ 124{
139 return DSP_(_sdem_dsp_size)-DSP_(_sdem_level); 125 return DSP_(_sdem_dsp_size)-DSP_(_sdem_level);
diff --git a/firmware/target/arm/tms320dm320/sansa-connect/pcm-sansaconnect.c b/firmware/target/arm/tms320dm320/sansa-connect/pcm-sansaconnect.c
index 6e640bdf12..c2932fd762 100644
--- a/firmware/target/arm/tms320dm320/sansa-connect/pcm-sansaconnect.c
+++ b/firmware/target/arm/tms320dm320/sansa-connect/pcm-sansaconnect.c
@@ -127,20 +127,6 @@ void pcm_play_unlock(void)
127 127
128} 128}
129 129
130void pcm_play_dma_pause(bool pause)
131{
132 if (pause)
133 {
134 DSP_(_dma0_stopped)=2;
135 dsp_wake();
136 }
137 else
138 {
139 DSP_(_dma0_stopped)=0;
140 dsp_wake();
141 }
142}
143
144size_t pcm_get_bytes_waiting(void) 130size_t pcm_get_bytes_waiting(void)
145{ 131{
146 return DSP_(_sdem_dsp_size)-DSP_(_sdem_level); 132 return DSP_(_sdem_dsp_size)-DSP_(_sdem_level);
diff --git a/firmware/target/coldfire/pcm-coldfire.c b/firmware/target/coldfire/pcm-coldfire.c
index 8162f521f9..10f9ea931f 100644
--- a/firmware/target/coldfire/pcm-coldfire.c
+++ b/firmware/target/coldfire/pcm-coldfire.c
@@ -264,25 +264,6 @@ void pcm_play_dma_stop(void)
264 dma_play_lock.state = (1 << 14); 264 dma_play_lock.state = (1 << 14);
265} /* pcm_play_dma_stop */ 265} /* pcm_play_dma_stop */
266 266
267void pcm_play_dma_pause(bool pause)
268{
269 if (pause)
270 {
271 /* pause playback on current buffer */
272 and_l(~(DMA_EEXT | DMA_INT), &DCR0); /* per request and int OFF */
273 DSR0 = 1; /* stop channel */
274 iis_play_reset_if_playback(true);
275 dma_play_lock.state = (1 << 14);
276 }
277 else
278 {
279 /* restart playback on current buffer */
280 iis_play_reset_if_playback(true);
281 or_l(DMA_INT | DMA_EEXT | DMA_START, &DCR0); /* everything ON */
282 dma_play_lock.state = (0 << 14);
283 }
284} /* pcm_play_dma_pause */
285
286size_t pcm_get_bytes_waiting(void) 267size_t pcm_get_bytes_waiting(void)
287{ 268{
288 return BCR0 & 0xffffff; 269 return BCR0 & 0xffffff;
diff --git a/firmware/target/hosted/android/pcm-android.c b/firmware/target/hosted/android/pcm-android.c
index 23a003ff73..69fd06c6f7 100644
--- a/firmware/target/hosted/android/pcm-android.c
+++ b/firmware/target/hosted/android/pcm-android.c
@@ -153,8 +153,11 @@ void pcm_play_dma_start(const void *addr, size_t size)
153{ 153{
154 pcm_data_start = addr; 154 pcm_data_start = addr;
155 pcm_data_size = size; 155 pcm_data_size = size;
156 156
157 pcm_play_dma_pause(false); 157 (*env_ptr)->CallVoidMethod(env_ptr,
158 RockboxPCM_instance,
159 play_pause_method,
160 (int)pause);
158} 161}
159 162
160void pcm_play_dma_stop(void) 163void pcm_play_dma_stop(void)
@@ -168,14 +171,6 @@ void pcm_play_dma_stop(void)
168 stop_method); 171 stop_method);
169} 172}
170 173
171void pcm_play_dma_pause(bool pause)
172{
173 (*env_ptr)->CallVoidMethod(env_ptr,
174 RockboxPCM_instance,
175 play_pause_method,
176 (int)pause);
177}
178
179size_t pcm_get_bytes_waiting(void) 174size_t pcm_get_bytes_waiting(void)
180{ 175{
181 return pcm_data_size; 176 return pcm_data_size;
diff --git a/firmware/target/hosted/ibasso/pcm-ibasso.c b/firmware/target/hosted/ibasso/pcm-ibasso.c
index 4721501d25..edfdc6d592 100644
--- a/firmware/target/hosted/ibasso/pcm-ibasso.c
+++ b/firmware/target/hosted/ibasso/pcm-ibasso.c
@@ -364,22 +364,6 @@ void pcm_play_dma_start(const void *addr, size_t size)
364 pthread_mutex_unlock(&_dma_suspended_mtx); 364 pthread_mutex_unlock(&_dma_suspended_mtx);
365} 365}
366 366
367
368/* TODO: Why is this in the API if it gets never called? */
369void pcm_play_dma_pause(bool pause)
370{
371 TRACE;
372
373 pthread_mutex_lock(&_dma_suspended_mtx);
374 _dma_stopped = pause ? 1 : 0;
375 if(_dma_stopped == 0)
376 {
377 pthread_cond_signal(&_dma_suspended_cond);
378 }
379 pthread_mutex_unlock(&_dma_suspended_mtx);
380}
381
382
383void pcm_play_dma_stop(void) 367void pcm_play_dma_stop(void)
384{ 368{
385 TRACE; 369 TRACE;
diff --git a/firmware/target/hosted/maemo/pcm-gstreamer.c b/firmware/target/hosted/maemo/pcm-gstreamer.c
index bd264fe5d3..7c864738ef 100644
--- a/firmware/target/hosted/maemo/pcm-gstreamer.c
+++ b/firmware/target/hosted/maemo/pcm-gstreamer.c
@@ -154,23 +154,6 @@ void pcm_play_dma_stop(void)
154 gst_element_set_state (GST_ELEMENT(gst_pipeline), GST_STATE_NULL); 154 gst_element_set_state (GST_ELEMENT(gst_pipeline), GST_STATE_NULL);
155} 155}
156 156
157void pcm_play_dma_pause(bool pause)
158{
159 if (inside_feed_data)
160 {
161 if (pause)
162 g_signal_emit_by_name (gst_appsrc, "end-of-stream", NULL);
163 else
164 DEBUGF("ERROR: Called dma_pause(0) while inside feed_data\n");
165 } else
166 {
167 if (pause)
168 gst_element_set_state (GST_ELEMENT(gst_pipeline), GST_STATE_NULL);
169 else
170 gst_element_set_state (GST_ELEMENT(gst_pipeline), GST_STATE_PLAYING);
171 }
172}
173
174size_t pcm_get_bytes_waiting(void) 157size_t pcm_get_bytes_waiting(void)
175{ 158{
176 return pcm_data_size; 159 return pcm_data_size;
diff --git a/firmware/target/hosted/pcm-alsa.c b/firmware/target/hosted/pcm-alsa.c
index eb1f764791..939a0cabb5 100644
--- a/firmware/target/hosted/pcm-alsa.c
+++ b/firmware/target/hosted/pcm-alsa.c
@@ -489,7 +489,7 @@ static void close_hwdev(void)
489 489
490 if (handle) { 490 if (handle) {
491 snd_pcm_drain(handle); 491 snd_pcm_drain(handle);
492#ifdef AUDIOHW_MUTE_ON_PAUSE 492#ifdef AUDIOHW_MUTE_ON_STOP
493 audiohw_mute(true); 493 audiohw_mute(true);
494#endif 494#endif
495 if (ahandler) { 495 if (ahandler) {
@@ -634,20 +634,6 @@ void pcm_dma_apply_settings(void)
634 pcm_play_unlock(); 634 pcm_play_unlock();
635} 635}
636 636
637void pcm_play_dma_pause(bool pause)
638{
639 logf("PCM DMA pause %d", pause);
640 if (!handle) return;
641
642#ifdef AUDIOHW_MUTE_ON_PAUSE
643 if (pause) audiohw_mute(true);
644#endif
645 snd_pcm_pause(handle, pause);
646#ifdef AUDIOHW_MUTE_ON_PAUSE
647 if (!pause) audiohw_mute(false);
648#endif
649}
650
651void pcm_play_dma_stop(void) 637void pcm_play_dma_stop(void)
652{ 638{
653 logf("PCM DMA stop (%d)", snd_pcm_state(handle)); 639 logf("PCM DMA stop (%d)", snd_pcm_state(handle));
@@ -656,7 +642,7 @@ void pcm_play_dma_stop(void)
656 if (err < 0) 642 if (err < 0)
657 if (err < 0) 643 if (err < 0)
658 logf("Drain failed: %s", snd_strerror(err)); 644 logf("Drain failed: %s", snd_strerror(err));
659#ifdef AUDIOHW_MUTE_ON_PAUSE 645#ifdef AUDIOHW_MUTE_ON_STOP
660 audiohw_mute(true); 646 audiohw_mute(true);
661#endif 647#endif
662} 648}
@@ -669,7 +655,7 @@ void pcm_play_dma_start(const void *addr, size_t size)
669 pcm_data = addr; 655 pcm_data = addr;
670 pcm_size = size; 656 pcm_size = size;
671 657
672#if !defined(AUDIOHW_MUTE_ON_PAUSE) && defined(AUDIOHW_MUTE_ON_SRATE_CHANGE) 658#if !defined(AUDIOHW_MUTE_ON_STOP) && defined(AUDIOHW_MUTE_ON_SRATE_CHANGE)
673 audiohw_mute(false); 659 audiohw_mute(false);
674#endif 660#endif
675 661
@@ -681,7 +667,7 @@ void pcm_play_dma_start(const void *addr, size_t size)
681 switch (state) 667 switch (state)
682 { 668 {
683 case SND_PCM_STATE_RUNNING: 669 case SND_PCM_STATE_RUNNING:
684#if defined(AUDIOHW_MUTE_ON_PAUSE) 670#if defined(AUDIOHW_MUTE_ON_STOP)
685 audiohw_mute(false); 671 audiohw_mute(false);
686#endif 672#endif
687 return; 673 return;
@@ -740,11 +726,6 @@ void pcm_play_dma_start(const void *addr, size_t size)
740 726
741 break; 727 break;
742 } 728 }
743 case SND_PCM_STATE_PAUSED:
744 { /* paused, simply resume */
745 pcm_play_dma_pause(0);
746 return;
747 }
748 case SND_PCM_STATE_DRAINING: 729 case SND_PCM_STATE_DRAINING:
749 /* run until drained */ 730 /* run until drained */
750 continue; 731 continue;
@@ -850,11 +831,6 @@ void pcm_rec_dma_start(void *start, size_t size)
850 panicf("Start error: %s", snd_strerror(err)); 831 panicf("Start error: %s", snd_strerror(err));
851 return; 832 return;
852 } 833 }
853 case SND_PCM_STATE_PAUSED:
854 { /* paused, simply resume */
855 pcm_play_dma_pause(0);
856 return;
857 }
858 case SND_PCM_STATE_DRAINING: 834 case SND_PCM_STATE_DRAINING:
859 /* run until drained */ 835 /* run until drained */
860 continue; 836 continue;
diff --git a/firmware/target/hosted/sdl/pcm-sdl.c b/firmware/target/hosted/sdl/pcm-sdl.c
index 877ca5a482..ba43ece543 100644
--- a/firmware/target/hosted/sdl/pcm-sdl.c
+++ b/firmware/target/hosted/sdl/pcm-sdl.c
@@ -124,14 +124,6 @@ void pcm_play_dma_stop(void)
124#endif 124#endif
125} 125}
126 126
127void pcm_play_dma_pause(bool pause)
128{
129 if (pause)
130 SDL_PauseAudio(1);
131 else
132 SDL_PauseAudio(0);
133}
134
135size_t pcm_get_bytes_waiting(void) 127size_t pcm_get_bytes_waiting(void)
136{ 128{
137 return pcm_data_size; 129 return pcm_data_size;
diff --git a/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c b/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c
index ef2597ae69..1ce0b5ad5f 100644
--- a/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c
+++ b/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c
@@ -184,18 +184,6 @@ void pcm_play_unlock(void)
184 restore_irq(flags); 184 restore_irq(flags);
185} 185}
186 186
187void pcm_play_dma_pause(bool pause)
188{
189 int flags = disable_irq_save();
190
191 if(pause)
192 REG_DMAC_DCCSR(DMA_AIC_TX_CHANNEL) &= ~DMAC_DCCSR_EN;
193 else
194 REG_DMAC_DCCSR(DMA_AIC_TX_CHANNEL) |= DMAC_DCCSR_EN;
195
196 restore_irq(flags);
197}
198
199static int get_dma_count(void) 187static int get_dma_count(void)
200{ 188{
201 int count = REG_DMAC_DTCR(DMA_AIC_TX_CHANNEL); 189 int count = REG_DMAC_DTCR(DMA_AIC_TX_CHANNEL);
diff --git a/firmware/target/mips/ingenic_jz47xx/pcm-jz4760.c b/firmware/target/mips/ingenic_jz47xx/pcm-jz4760.c
index 098c28ecf5..4a4f3020bb 100644
--- a/firmware/target/mips/ingenic_jz47xx/pcm-jz4760.c
+++ b/firmware/target/mips/ingenic_jz47xx/pcm-jz4760.c
@@ -173,18 +173,6 @@ void pcm_play_unlock(void)
173 restore_irq(flags); 173 restore_irq(flags);
174} 174}
175 175
176void pcm_play_dma_pause(bool pause)
177{
178 int flags = disable_irq_save();
179
180 if(pause)
181 REG_DMAC_DCCSR(DMA_AIC_TX_CHANNEL) &= ~DMAC_DCCSR_EN;
182 else
183 REG_DMAC_DCCSR(DMA_AIC_TX_CHANNEL) |= DMAC_DCCSR_EN;
184
185 restore_irq(flags);
186}
187
188static int get_dma_count(void) 176static int get_dma_count(void)
189{ 177{
190 int count = REG_DMAC_DTCR(DMA_AIC_TX_CHANNEL); 178 int count = REG_DMAC_DTCR(DMA_AIC_TX_CHANNEL);