summaryrefslogtreecommitdiff
path: root/firmware/target/mips/ingenic_jz47xx/codec-jz4740.c
diff options
context:
space:
mode:
authorMaurus Cuelenaere <mcuelenaere@gmail.com>2009-06-01 21:00:31 +0000
committerMaurus Cuelenaere <mcuelenaere@gmail.com>2009-06-01 21:00:31 +0000
commitfd11471a3f9bfbb5f5bdf22866e861bae56ad8ea (patch)
tree8a61f852ef81a9dd5950e9ebc9ffb8ac41bf3390 /firmware/target/mips/ingenic_jz47xx/codec-jz4740.c
parent5212f03124c486239479d75cafb8017d84f63ee9 (diff)
downloadrockbox-fd11471a3f9bfbb5f5bdf22866e861bae56ad8ea.tar.gz
rockbox-fd11471a3f9bfbb5f5bdf22866e861bae56ad8ea.zip
Onda VX747: try at implementing FM tuner support
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21160 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/mips/ingenic_jz47xx/codec-jz4740.c')
-rw-r--r--firmware/target/mips/ingenic_jz47xx/codec-jz4740.c66
1 files changed, 65 insertions, 1 deletions
diff --git a/firmware/target/mips/ingenic_jz47xx/codec-jz4740.c b/firmware/target/mips/ingenic_jz47xx/codec-jz4740.c
index 6a0b6ae340..325a3734d8 100644
--- a/firmware/target/mips/ingenic_jz47xx/codec-jz4740.c
+++ b/firmware/target/mips/ingenic_jz47xx/codec-jz4740.c
@@ -20,9 +20,10 @@
20 ****************************************************************************/ 20 ****************************************************************************/
21 21
22#include "config.h" 22#include "config.h"
23#include "audio.h"
24#include "audiohw.h"
23#include "jz4740.h" 25#include "jz4740.h"
24#include "system.h" 26#include "system.h"
25#include "audiohw.h"
26 27
27/* TODO */ 28/* TODO */
28const struct sound_settings_info audiohw_settings[] = { 29const struct sound_settings_info audiohw_settings[] = {
@@ -330,3 +331,66 @@ void audiohw_set_frequency(int freq)
330 331
331 REG_ICDC_CDCCR2 = (REG_ICDC_CDCCR2 & ~ICDC_CDCCR2_SMPR(0xF)) | speed; 332 REG_ICDC_CDCCR2 = (REG_ICDC_CDCCR2 & ~ICDC_CDCCR2_SMPR(0xF)) | speed;
332} 333}
334
335int audio_channels = 2;
336int audio_output_source = AUDIO_SRC_PLAYBACK;
337
338void audio_set_output_source(int source)
339{
340 if((unsigned)source >= AUDIO_NUM_SOURCES)
341 source = AUDIO_SRC_PLAYBACK;
342
343 audio_output_source = source;
344} /* audio_set_output_source */
345
346void audio_input_mux(int source, unsigned flags)
347{
348 static int last_source = AUDIO_SRC_PLAYBACK;
349 static bool last_recording = false;
350 bool recording = flags & SRCF_RECORDING;
351
352 switch (source)
353 {
354 default: /* playback - no recording */
355 source = AUDIO_SRC_PLAYBACK;
356 case AUDIO_SRC_PLAYBACK:
357 audio_channels = 2;
358 if(source != last_source)
359 {
360 REG_ICDC_CDCCR1 = (REG_ICDC_CDCCR1 & ~(ICDC_CDCCR1_ELININ | ICDC_CDCCR1_EMIC | ICDC_CDCCR1_EADC | ICDC_CDCCR1_SW1ON | ICDC_CDCCR1_HPMUTE))
361 | (ICDC_CDCCR1_EDAC | ICDC_CDCCR1_SW2ON);
362 }
363 break;
364
365 case AUDIO_SRC_MIC: /* recording only */
366 audio_channels = 1;
367 if(source != last_source)
368 {
369 REG_ICDC_CDCCR1 = (REG_ICDC_CDCCR1 & ~(ICDC_CDCCR1_ELININ | ICDC_CDCCR1_EDAC | ICDC_CDCCR1_SW2ON | ICDC_CDCCR1_HPMUTE))
370 | (ICDC_CDCCR1_EADC | ICDC_CDCCR1_SW1ON | ICDC_CDCCR1_EMIC);
371 }
372 break;
373
374 case AUDIO_SRC_FMRADIO: /* recording and playback */
375 audio_channels = 2;
376
377 if(source == last_source && recording == last_recording)
378 break;
379
380 last_recording = recording;
381
382 if(recording)
383 {
384 REG_ICDC_CDCCR1 = (REG_ICDC_CDCCR1 & ~(ICDC_CDCCR1_EMIC | ICDC_CDCCR1_EDAC | ICDC_CDCCR1_SW2ON | ICDC_CDCCR1_HPMUTE))
385 | (ICDC_CDCCR1_EADC | ICDC_CDCCR1_SW1ON | ICDC_CDCCR1_ELININ);
386 }
387 else
388 {
389 REG_ICDC_CDCCR1 = (REG_ICDC_CDCCR1 & ~(ICDC_CDCCR1_EMIC | ICDC_CDCCR1_EDAC | ICDC_CDCCR1_EADC |
390 ICDC_CDCCR1_SW2ON | ICDC_CDCCR1_HPMUTE)) | (ICDC_CDCCR1_SW1ON | ICDC_CDCCR1_ELININ);
391 }
392 break;
393 } /* end switch */
394
395 last_source = source;
396} /* audio_input_mux */