summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafaël Carré <rafael.carre@gmail.com>2009-11-01 22:51:31 +0000
committerRafaël Carré <rafael.carre@gmail.com>2009-11-01 22:51:31 +0000
commit9b4057bbd43dfeaf69785605407e4625f01be069 (patch)
tree5d37bbedfcef2527629b1aae0ed184187832aaab
parent6cdb80d7df997d3220efe03ea6779ba2c81ddf79 (diff)
downloadrockbox-9b4057bbd43dfeaf69785605407e4625f01be069.tar.gz
rockbox-9b4057bbd43dfeaf69785605407e4625f01be069.zip
Sansa AMS recording support (Microphone and FM)
Still disabled on all targets: - Fuze and e200v2 see spurious interrupts with no source defined - Clip/m200v4 deadlock instantly when starting recording (perhaps due to low memory size) Having the code in SVN will make working on this feature easier Also add keymaps for Fuze, and correct Frequency section of recording options : the 22.05kHz limitation of e200v1 and c200v1 doesn't apply to Sansa AMS (different I2S hardware, unrelated to as3514) Flyspray: FS#10371 Authors: Fred Bauer and myself git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23476 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/export/as3525.h11
-rw-r--r--firmware/export/config-c200v2.h12
-rw-r--r--firmware/export/config-clip.h12
-rw-r--r--firmware/export/config-e200v2.h10
-rw-r--r--firmware/export/config-fuze.h10
-rw-r--r--firmware/export/config-m200v4.h12
-rw-r--r--firmware/target/arm/as3525/audio-as3525.c61
-rw-r--r--firmware/target/arm/as3525/pcm-as3525.c107
-rw-r--r--firmware/target/arm/as3525/system-as3525.c4
-rw-r--r--manual/configure_rockbox/recording_settings.tex10
-rw-r--r--manual/platform/keymap-fuze.tex16
11 files changed, 186 insertions, 79 deletions
diff --git a/firmware/export/as3525.h b/firmware/export/as3525.h
index d2b5a4fef2..07f78dafcf 100644
--- a/firmware/export/as3525.h
+++ b/firmware/export/as3525.h
@@ -507,4 +507,15 @@ interface */
507#define USB_NUM_ENDPOINTS 4 507#define USB_NUM_ENDPOINTS 4
508#define USB_DEVBSS_ATTR IBSS_ATTR 508#define USB_DEVBSS_ATTR IBSS_ATTR
509 509
510/* I2SIN registers */
511
512#define I2SIN_CONTROL (*(volatile unsigned long*)(I2SIN_BASE+0x00))
513#define I2SIN_MASK (*(volatile unsigned char*)(I2SIN_BASE+0x04))
514#define I2SIN_RAW_STATUS (*(volatile unsigned char*)(I2SIN_BASE+0x08))
515#define I2SIN_STATUS (*(volatile unsigned char*)(I2SIN_BASE+0x0C))
516#define I2SIN_CLEAR (*(volatile unsigned char*)(I2SIN_BASE+0x10))
517#define I2SIN_DATA (volatile unsigned long*)(I2SIN_BASE+0x14)
518#define I2SIN_SPDIF_STATUS (*(volatile unsigned long*)(I2SIN_BASE+0x18))
519
520
510#endif /*__AS3525_H__*/ 521#endif /*__AS3525_H__*/
diff --git a/firmware/export/config-c200v2.h b/firmware/export/config-c200v2.h
index d6c2159e8c..2441fe01c5 100644
--- a/firmware/export/config-c200v2.h
+++ b/firmware/export/config-c200v2.h
@@ -9,18 +9,12 @@
9#define FIRMWARE_OFFSET_FILE_DATA 8 9#define FIRMWARE_OFFSET_FILE_DATA 8
10#define FIRMWARE_OFFSET_FILE_CRC 0 10#define FIRMWARE_OFFSET_FILE_CRC 0
11 11
12#if 0 12#define HW_SAMPR_CAPS SAMPR_CAP_ALL
13
14#define HW_SAMPR_CAPS (SAMPR_CAP_44)
15 13
16/* define this if you have recording possibility */ 14/* define this if you have recording possibility */
17#define HAVE_RECORDING 15//#define HAVE_RECORDING
18
19#define REC_SAMPR_CAPS (SAMPR_CAP_22)
20#define REC_FREQ_DEFAULT REC_FREQ_22 /* Default is not 44.1kHz */
21#define REC_SAMPR_DEFAULT SAMPR_22
22 16
23#endif 17#define REC_SAMPR_CAPS SAMPR_CAP_ALL
24 18
25/* Define bitmask of input sources - recordable bitmask can be defined 19/* Define bitmask of input sources - recordable bitmask can be defined
26 explicitly if different */ 20 explicitly if different */
diff --git a/firmware/export/config-clip.h b/firmware/export/config-clip.h
index 3b82a25159..b57881f794 100644
--- a/firmware/export/config-clip.h
+++ b/firmware/export/config-clip.h
@@ -9,18 +9,12 @@
9#define FIRMWARE_OFFSET_FILE_DATA 8 9#define FIRMWARE_OFFSET_FILE_DATA 8
10#define FIRMWARE_OFFSET_FILE_CRC 0 10#define FIRMWARE_OFFSET_FILE_CRC 0
11 11
12#if 0 /* disabled since there is no driver (yet) */ 12#define HW_SAMPR_CAPS SAMPR_CAP_ALL
13
14#define HW_SAMPR_CAPS (SAMPR_CAP_44)
15 13
16/* define this if you have recording possibility */ 14/* define this if you have recording possibility */
17#define HAVE_RECORDING 15//#define HAVE_RECORDING
18
19#define REC_SAMPR_CAPS (SAMPR_CAP_22)
20#define REC_FREQ_DEFAULT REC_FREQ_22 /* Default is not 44.1kHz */
21#define REC_SAMPR_DEFAULT SAMPR_22
22 16
23#endif 17#define REC_SAMPR_CAPS SAMPR_CAP_ALL
24 18
25/* Define bitmask of input sources - recordable bitmask can be defined 19/* Define bitmask of input sources - recordable bitmask can be defined
26 explicitly if different */ 20 explicitly if different */
diff --git a/firmware/export/config-e200v2.h b/firmware/export/config-e200v2.h
index b108decce6..4dc3e43f2d 100644
--- a/firmware/export/config-e200v2.h
+++ b/firmware/export/config-e200v2.h
@@ -7,17 +7,13 @@
7#define MODEL_NUMBER 41 7#define MODEL_NUMBER 41
8#define MODEL_NAME "Sandisk Sansa e200v2 series" 8#define MODEL_NAME "Sandisk Sansa e200v2 series"
9 9
10#define HW_SAMPR_CAPS (SAMPR_CAP_44) 10#define HW_SAMPR_CAPS SAMPR_CAP_ALL
11 11
12#if 0
13/* define this if you have recording possibility */ 12/* define this if you have recording possibility */
14#define HAVE_RECORDING 13//#define HAVE_RECORDING
15 14
16#define REC_SAMPR_CAPS (SAMPR_CAP_22) 15#define REC_SAMPR_CAPS SAMPR_CAP_ALL
17#define REC_FREQ_DEFAULT REC_FREQ_22 /* Default is not 44.1kHz */
18#define REC_SAMPR_DEFAULT SAMPR_22
19 16
20#endif
21/* Define bitmask of input sources - recordable bitmask can be defined 17/* Define bitmask of input sources - recordable bitmask can be defined
22 explicitly if different */ 18 explicitly if different */
23#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_FMRADIO) 19#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_FMRADIO)
diff --git a/firmware/export/config-fuze.h b/firmware/export/config-fuze.h
index def343c680..2a438ec91b 100644
--- a/firmware/export/config-fuze.h
+++ b/firmware/export/config-fuze.h
@@ -7,15 +7,12 @@
7#define MODEL_NUMBER 43 7#define MODEL_NUMBER 43
8#define MODEL_NAME "Sandisk Sansa Fuze" 8#define MODEL_NAME "Sandisk Sansa Fuze"
9 9
10#define HW_SAMPR_CAPS (SAMPR_CAP_44) 10#define HW_SAMPR_CAPS SAMPR_CAP_ALL
11 11
12#if 0
13/* define this if you have recording possibility */ 12/* define this if you have recording possibility */
14#define HAVE_RECORDING 13//#define HAVE_RECORDING
15 14
16#define REC_SAMPR_CAPS (SAMPR_CAP_22) 15#define REC_SAMPR_CAPS SAMPR_CAP_ALL
17#define REC_FREQ_DEFAULT REC_FREQ_22 /* Default is not 44.1kHz */
18#define REC_SAMPR_DEFAULT SAMPR_22
19 16
20/* Default recording levels */ 17/* Default recording levels */
21#define DEFAULT_REC_MIC_GAIN 23 18#define DEFAULT_REC_MIC_GAIN 23
@@ -24,7 +21,6 @@
24 21
25/* Define bitmask of input sources - recordable bitmask can be defined 22/* Define bitmask of input sources - recordable bitmask can be defined
26 explicitly if different */ 23 explicitly if different */
27#endif
28#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_FMRADIO) 24#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_FMRADIO)
29 25
30/* define this if you have a bitmap LCD display */ 26/* define this if you have a bitmap LCD display */
diff --git a/firmware/export/config-m200v4.h b/firmware/export/config-m200v4.h
index 21038349fd..b734f3e368 100644
--- a/firmware/export/config-m200v4.h
+++ b/firmware/export/config-m200v4.h
@@ -11,18 +11,12 @@
11/* Enable FAT16 support */ 11/* Enable FAT16 support */
12#define HAVE_FAT16SUPPORT 12#define HAVE_FAT16SUPPORT
13 13
14#if 0 /* disabled since there is no driver (yet) */ 14#define HW_SAMPR_CAPS SAMPR_CAP_ALL
15
16#define HW_SAMPR_CAPS (SAMPR_CAP_44)
17 15
18/* define this if you have recording possibility */ 16/* define this if you have recording possibility */
19#define HAVE_RECORDING 17//#define HAVE_RECORDING
20
21#define REC_SAMPR_CAPS (SAMPR_CAP_22)
22#define REC_FREQ_DEFAULT REC_FREQ_22 /* Default is not 44.1kHz */
23#define REC_SAMPR_DEFAULT SAMPR_22
24 18
25#endif 19#define REC_SAMPR_CAPS SAMPR_CAP_ALL
26 20
27/* Define bitmask of input sources - recordable bitmask can be defined 21/* Define bitmask of input sources - recordable bitmask can be defined
28 explicitly if different */ 22 explicitly if different */
diff --git a/firmware/target/arm/as3525/audio-as3525.c b/firmware/target/arm/as3525/audio-as3525.c
index 410fdfad79..b616153eae 100644
--- a/firmware/target/arm/as3525/audio-as3525.c
+++ b/firmware/target/arm/as3525/audio-as3525.c
@@ -25,44 +25,71 @@
25#include "audiohw.h" 25#include "audiohw.h"
26#include "sound.h" 26#include "sound.h"
27 27
28int audio_channels = 2;
29int audio_output_source = AUDIO_SRC_PLAYBACK;
30
31void audio_set_output_source(int source) 28void audio_set_output_source(int source)
32{ 29{
33 if ((unsigned)source >= AUDIO_NUM_SOURCES) 30 (void)source;
34 source = AUDIO_SRC_PLAYBACK; 31}
35
36 audio_output_source = source;
37} /* audio_set_output_source */
38 32
39void audio_input_mux(int source, unsigned flags) 33void audio_input_mux(int source, unsigned flags)
40{ 34{
41 static int last_source = AUDIO_SRC_PLAYBACK; 35 static int last_source = AUDIO_SRC_PLAYBACK;
42 36#ifdef HAVE_RECORDING
43 (void)flags; 37 static bool last_recording = false;
38 const bool recording = flags & SRCF_RECORDING;
39#else
40 (void) flags;
41#endif
44 42
45 switch (source) 43 switch (source)
46 { 44 {
47 default: /* playback - no recording */ 45 default: /* playback - no recording */
48 source = AUDIO_SRC_PLAYBACK; 46 source = AUDIO_SRC_PLAYBACK;
49 case AUDIO_SRC_PLAYBACK: 47 case AUDIO_SRC_PLAYBACK:
50 audio_channels = 2;
51 if (source != last_source) 48 if (source != last_source)
52 { 49 {
53 audiohw_set_monitor(false); 50 audiohw_set_monitor(false);
51#ifdef HAVE_RECORDING
52 audiohw_disable_recording();
53#endif
54 }
55 break;
56
57#ifdef HAVE_RECORDING
58 case AUDIO_SRC_MIC: /* recording only */
59 if (source != last_source)
60 {
61 audiohw_set_monitor(false);
62 audiohw_enable_recording(true); /* source mic */
54 } 63 }
55 break; 64 break;
65#endif
56 66
57 case AUDIO_SRC_FMRADIO: /* recording and playback */ 67 case AUDIO_SRC_FMRADIO: /* recording and playback */
58 audio_channels = 2; 68 if (source == last_source
59 if (source == last_source) 69#ifdef HAVE_RECORDING
70 && recording == last_recording
71#endif
72 )
60 break; 73 break;
61 74
62 audiohw_set_monitor(true); 75#ifdef HAVE_RECORDING
76 last_recording = recording;
77
78 if (recording)
79 {
80 audiohw_set_monitor(false);
81 audiohw_enable_recording(false);
82 }
83 else
84#endif
85 {
86#ifdef HAVE_RECORDING
87 audiohw_disable_recording();
88#endif
89 audiohw_set_monitor(true); /* line 2 analog audio path */
90 }
63 break; 91 break;
64 } /* end switch */ 92 }
65 93
66 last_source = source; 94 last_source = source;
67} /* audio_input_mux */ 95}
68
diff --git a/firmware/target/arm/as3525/pcm-as3525.c b/firmware/target/arm/as3525/pcm-as3525.c
index 20579806c0..f648908474 100644
--- a/firmware/target/arm/as3525/pcm-as3525.c
+++ b/firmware/target/arm/as3525/pcm-as3525.c
@@ -69,6 +69,10 @@ static void play_start_pcm(void)
69 69
70 CGU_PERI |= CGU_I2SOUT_APB_CLOCK_ENABLE; 70 CGU_PERI |= CGU_I2SOUT_APB_CLOCK_ENABLE;
71 CGU_AUDIO |= (1<<11); 71 CGU_AUDIO |= (1<<11);
72#ifdef HAVE_RECORDING
73 CGU_PERI &= ~CGU_I2SIN_APB_CLOCK_ENABLE;
74 CGU_AUDIO &= ~(1<<23);
75#endif
72 76
73 clean_dcache_range((void*)addr, size); /* force write back */ 77 clean_dcache_range((void*)addr, size); /* force write back */
74 dma_enable_channel(1, (void*)addr, (void*)I2SOUT_DATA, DMA_PERI_I2SOUT, 78 dma_enable_channel(1, (void*)addr, (void*)I2SOUT_DATA, DMA_PERI_I2SOUT,
@@ -130,9 +134,7 @@ void pcm_play_dma_init(void)
130 /* clock source PLLA, minimal frequency */ 134 /* clock source PLLA, minimal frequency */
131 CGU_AUDIO |= (511<<2) | (1<<0); 135 CGU_AUDIO |= (511<<2) | (1<<0);
132 136
133 I2SOUT_CONTROL |= (1<<6) ; /* enable dma */ 137 I2SOUT_CONTROL = (1<<6)|(1<<3) /* enable dma, stereo */;
134 I2SOUT_CONTROL |= (1<<3) ; /* stereo */
135 I2SOUT_CONTROL &= ~(1<<2); /* 16 bit samples */
136 138
137 audiohw_preinit(); 139 audiohw_preinit();
138} 140}
@@ -153,7 +155,7 @@ void pcm_dma_apply_settings(void)
153 int cgu_audio = CGU_AUDIO; /* read register */ 155 int cgu_audio = CGU_AUDIO; /* read register */
154 cgu_audio &= ~(511 << 2); /* clear i2sout divider */ 156 cgu_audio &= ~(511 << 2); /* clear i2sout divider */
155 cgu_audio |= divider << 2; /* set new i2sout divider */ 157 cgu_audio |= divider << 2; /* set new i2sout divider */
156#if 0 158#ifdef HAVE_RECORDING
157 cgu_audio &= ~(511 << 14); /* clear i2sin divider */ 159 cgu_audio &= ~(511 << 14); /* clear i2sin divider */
158 cgu_audio |= divider << 14; /* set new i2sin divider */ 160 cgu_audio |= divider << 14; /* set new i2sin divider */
159#endif 161#endif
@@ -185,43 +187,130 @@ void * pcm_dma_addr(void *addr)
185 ** Recording DMA transfer 187 ** Recording DMA transfer
186 **/ 188 **/
187#ifdef HAVE_RECORDING 189#ifdef HAVE_RECORDING
190
191static int rec_locked = 0;
192static unsigned int *rec_start_addr;
193static size_t rec_size;
194
195
188void pcm_rec_lock(void) 196void pcm_rec_lock(void)
189{ 197{
198 if(++rec_locked == 1)
199 VIC_INT_EN_CLEAR = INTERRUPT_I2SIN;
190} 200}
191 201
202
192void pcm_rec_unlock(void) 203void pcm_rec_unlock(void)
193{ 204{
205 if(--rec_locked == 0)
206 VIC_INT_ENABLE |= INTERRUPT_I2SIN;
194} 207}
195 208
209
196void pcm_record_more(void *start, size_t size) 210void pcm_record_more(void *start, size_t size)
197{ 211{
198 (void)start; 212 rec_start_addr = start;
199 (void)size; 213 rec_size = size;
200} 214}
201 215
216
202void pcm_rec_dma_stop(void) 217void pcm_rec_dma_stop(void)
203{ 218{
219 VIC_INT_EN_CLEAR = INTERRUPT_I2SIN;
220
221 I2SOUT_CONTROL &= ~(1<<5); /* source = i2soutif fifo */
222 CGU_AUDIO &= ~((1<<23)|(1<<11));
223 CGU_PERI &= ~(CGU_I2SIN_APB_CLOCK_ENABLE|CGU_I2SOUT_APB_CLOCK_ENABLE);
204} 224}
205 225
226
227void INT_I2SIN(void)
228{
229 register int status;
230 register pcm_more_callback_type2 more_ready;
231
232 status = I2SIN_STATUS;
233
234#if 0 /* FIXME */
235 if ( status & ((1<<6)|(1<<0)) ) /* errors */
236 panicf("i2sin error: 0x%x = %s %s", status,
237 (status & (1<<6)) ? "push" : "",
238 (status & (1<<0)) ? "pop" : ""
239 );
240#endif
241
242 while (((I2SIN_RAW_STATUS & (1<<5)) == 0) && rec_size)
243 {
244 /* 14 bits per sample = 1 32 bits word */
245 *rec_start_addr++ = *I2SIN_DATA;
246 rec_size -= 4;
247 }
248
249 I2SIN_CLEAR = status;
250
251 if(!rec_size)
252 {
253 more_ready = pcm_callback_more_ready;
254 if(!more_ready || more_ready(0) < 0)
255 {
256 /* Finished recording */
257 pcm_rec_dma_stop();
258 pcm_rec_dma_stopped_callback();
259 }
260 }
261}
262
263
206void pcm_rec_dma_start(void *addr, size_t size) 264void pcm_rec_dma_start(void *addr, size_t size)
207{ 265{
208 (void)addr; 266 rec_start_addr = addr;
209 (void)size; 267 rec_size = size;
268
269 if((unsigned int)addr & 3)
270 panicf("unaligned pointer!");
271
272 CGU_PERI |= CGU_I2SIN_APB_CLOCK_ENABLE|CGU_I2SOUT_APB_CLOCK_ENABLE;
273 CGU_AUDIO |= ((1<<23)|(1<<11));
274
275 I2SOUT_CONTROL |= 1<<5; /* source = loopback from i2sin fifo */
276
277 /* 14 bits samples, i2c clk src = I2SOUTIF, sdata src = AFE,
278 * data valid at positive edge of SCLK */
279 I2SIN_CONTROL = (1<<5) | (1<<2);
280
281 unsigned long tmp;
282 while ( ( I2SIN_RAW_STATUS & ( 1<<5 ) ) == 0 )
283 tmp = *I2SIN_DATA; /* FLUSH FIFO */
284 I2SIN_CLEAR = (1<<6)|(1<<0); /* push error, pop error */
285 I2SIN_MASK = (1<<6) | (1<<0) |
286 (1<<3) | (1<<2) | (1<<1); /* half full, almost full, full */
287
288 VIC_INT_ENABLE |= INTERRUPT_I2SIN;
210} 289}
211 290
291
212void pcm_rec_dma_close(void) 292void pcm_rec_dma_close(void)
213{ 293{
294 pcm_rec_dma_stop();
214} 295}
215 296
216 297
217void pcm_rec_dma_init(void) 298void pcm_rec_dma_init(void)
218{ 299{
300 pcm_dma_apply_settings();
219} 301}
220 302
221 303
222const void * pcm_rec_dma_get_peak_buffer(int *count) 304const void * pcm_rec_dma_get_peak_buffer(int *count)
223{ 305{
224 (void)count; 306 const void *peak_buffer;
307
308 pcm_rec_lock();
309 *count = rec_size >> 2;
310 peak_buffer = (const void*)rec_start_addr;
311 pcm_rec_unlock();
312
313 return peak_buffer;
225} 314}
226 315
227#endif /* HAVE_RECORDING */ 316#endif /* HAVE_RECORDING */
diff --git a/firmware/target/arm/as3525/system-as3525.c b/firmware/target/arm/as3525/system-as3525.c
index dc335dfaad..5f01ed2dee 100644
--- a/firmware/target/arm/as3525/system-as3525.c
+++ b/firmware/target/arm/as3525/system-as3525.c
@@ -20,6 +20,7 @@
20 * 20 *
21 ****************************************************************************/ 21 ****************************************************************************/
22 22
23#include "config.h"
23#include "kernel.h" 24#include "kernel.h"
24#include "system.h" 25#include "system.h"
25#include "panic.h" 26#include "panic.h"
@@ -113,6 +114,9 @@ struct vec_int_src vec_int_srcs[] =
113 { INT_SRC_MCI0, INT_MCI0 }, 114 { INT_SRC_MCI0, INT_MCI0 },
114 { INT_SRC_GPIOA, INT_GPIOA, }, 115 { INT_SRC_GPIOA, INT_GPIOA, },
115 { INT_SRC_GPIOB, INT_GPIOB, }, 116 { INT_SRC_GPIOB, INT_GPIOB, },
117#ifdef HAVE_RECORDING
118 { INT_SRC_I2SIN, INT_I2SIN, },
119#endif
116}; 120};
117 121
118static void setup_vic(void) 122static void setup_vic(void)
diff --git a/manual/configure_rockbox/recording_settings.tex b/manual/configure_rockbox/recording_settings.tex
index 2c9847a7ae..036450accd 100644
--- a/manual/configure_rockbox/recording_settings.tex
+++ b/manual/configure_rockbox/recording_settings.tex
@@ -42,11 +42,13 @@
42} 42}
43 43
44 \section{Frequency} 44 \section{Frequency}
45 \nopt{sansa,sansaAMS}{ 45 \nopt{sansa}{
46 Choose the recording frequency (sample rate). 46 Choose the recording frequency (sample rate).
47 \opt{masf}{48kHz, 44.1kHz, 32kHz, 24kHz, 22.05kHz, 16kHz} 47 \opt{masf}{48kHz, 44.1kHz, 32kHz, 24kHz, 22.05kHz, 16kHz}
48 \opt{h100,h300}{44.1kHz, 22.05kHz and 11.025kHz} 48 \opt{h100,h300}{44.1kHz, 22.05kHz and 11.025kHz}
49 \opt{x5}{88.2kHz, 44.1kHz, 22.05kHz and 11.025kHz} 49 \opt{x5}{88.2kHz, 44.1kHz, 22.05kHz and 11.025kHz}
50 \opt{sansaAMS}{96kHz, 88.2kHz, 64kHz, 48kHz, 44.1kHz, 32kHz, 24kHz, %
51 22.05kHz, 16kHz, 12kHz, 11.025kHz and 8kHz}
50 are available. Higher sample rates use up more disk space, but give better 52 are available. Higher sample rates use up more disk space, but give better
51 sound quality. 53 sound quality.
52 \opt{swcodec}{\note{The 11.025kHz setting is not available when using% 54 \opt{swcodec}{\note{The 11.025kHz setting is not available when using%
@@ -61,11 +63,11 @@
61 \opt{recorder,recorderv2fm,h100} 63 \opt{recorder,recorderv2fm,h100}
62 {\note{You cannot change the sample rate for digital recordings.} 64 {\note{You cannot change the sample rate for digital recordings.}
63 } 65 }
64 } % nopt e200 66 } % nopt sansa
65 \opt{e200,e200v2}{ 67 \opt{sansa}{
66 Recordings can only be made at a 22.05kHz frequency (sample rate) 68 Recordings can only be made at a 22.05kHz frequency (sample rate)
67 on this \dap. 69 on this \dap.
68 } % opt e200 70 } % opt sansa
69 71
70\section{Source} 72\section{Source}
71 Choose the source of the recording. The options are: 73 Choose the source of the recording. The options are:
diff --git a/manual/platform/keymap-fuze.tex b/manual/platform/keymap-fuze.tex
index 351db621b0..46ddc8ba62 100644
--- a/manual/platform/keymap-fuze.tex
+++ b/manual/platform/keymap-fuze.tex
@@ -84,14 +84,14 @@
84\newcommand{\ActionPsExit}{Long \ButtonHome{} or \ButtonUp} 84\newcommand{\ActionPsExit}{Long \ButtonHome{} or \ButtonUp}
85 85
86%Button actions, Recording screen context 86%Button actions, Recording screen context
87%\newcommand{\ActionRecPause}{\ButtonUp} 87\newcommand{\ActionRecPause}{\ButtonUp}
88%\newcommand{\ActionRecExit}{\ButtonDown} 88\newcommand{\ActionRecExit}{\ButtonDown}
89%\newcommand{\ActionRecNewfile}{\ButtonHome} 89\newcommand{\ActionRecNewfile}{\ButtonHome}
90%\newcommand{\ActionRecMenu}{Long \ButtonSelect} 90\newcommand{\ActionRecMenu}{Long \ButtonSelect}
91%\newcommand{\ActionRecSettingsInc}{\ButtonRight} 91\newcommand{\ActionRecSettingsInc}{\ButtonRight}
92%\newcommand{\ActionRecSettingsDec}{\ButtonLeft} 92\newcommand{\ActionRecSettingsDec}{\ButtonLeft}
93%\newcommand{\ActionRecPrev}{\ButtonScrollBack} 93\newcommand{\ActionRecPrev}{\ButtonScrollBack}
94%\newcommand{\ActionRecNext}{\ButtonScrollFwd} 94\newcommand{\ActionRecNext}{\ButtonScrollFwd}
95 95
96%Button actions, FM radio context 96%Button actions, FM radio context
97\newcommand{\ActionFMPreset}{\ButtonSelect} 97\newcommand{\ActionFMPreset}{\ButtonSelect}