diff options
author | Cástor Muñoz <cmvidal@gmail.com> | 2014-12-06 19:00:34 +0100 |
---|---|---|
committer | Cástor Muñoz <cmvidal@gmail.com> | 2015-10-07 06:15:03 +0200 |
commit | 291b2338c98c211794d55a68c9585d278fc86563 (patch) | |
tree | c894f7d5db4e93b94c153b8125bec344e590e93c /firmware/target/arm/s5l8702/ipod6g | |
parent | 42abc6a49670cd546737a4dc7542f9f3f62e3831 (diff) | |
download | rockbox-291b2338c98c211794d55a68c9585d278fc86563.tar.gz rockbox-291b2338c98c211794d55a68c9585d278fc86563.zip |
ipod Classic: implement HAVE_RECORDING
This patch has been tested on iPod 80 and 160slim, actually
it works but some updates must be done to the final version:
- unlimitted input buffer
- decrease CHUNK_SIZE
- use non-cached addresses instead of discard d-cache ???
Capture hardware versions:
Ver iPod models capture support
--- ----------- ---------------
0 80/160fat dock line-in
1 120/160slim dock line-in + jack mic
HW version 1 includes an amplifier for the jack plug mic.
Capture HW detection only tested on iPod 80 and 160slim.
CODEC power:
AFAIK, OF powers CS42L55 at VA=2.4V for capture (1.8V for
playback) and turns on the ADC charge pump. CODEC datasheet
recommmends to disable the charge pump for VA>2.1V.
CS42L55 DS, s4.13 (Required Initialization Settings): for
VA>2.1V, some adjustments "must" be done using undocummented
"control port compensation" registers. OF does not modifies
these registers when VA=2.4V.
This patch configures capture HW in the same way as OF does.
TODO:
- ADC full scale voltage depends on VA, perform tests to find
clipping levels for VA=1.8V and VA=2.4V
Change-Id: I7e20fd3ecaa83b1c58d5c746f5153fe5c3891d75
Diffstat (limited to 'firmware/target/arm/s5l8702/ipod6g')
-rw-r--r-- | firmware/target/arm/s5l8702/ipod6g/audio-ipod6g.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/firmware/target/arm/s5l8702/ipod6g/audio-ipod6g.c b/firmware/target/arm/s5l8702/ipod6g/audio-ipod6g.c index 6ede3d0c30..6a3bab06d6 100644 --- a/firmware/target/arm/s5l8702/ipod6g/audio-ipod6g.c +++ b/firmware/target/arm/s5l8702/ipod6g/audio-ipod6g.c | |||
@@ -22,6 +22,9 @@ | |||
22 | #include "cpu.h" | 22 | #include "cpu.h" |
23 | #include "audio.h" | 23 | #include "audio.h" |
24 | #include "sound.h" | 24 | #include "sound.h" |
25 | #include "pmu-target.h" | ||
26 | |||
27 | extern int rec_hw_ver; | ||
25 | 28 | ||
26 | #if INPUT_SRC_CAPS != 0 | 29 | #if INPUT_SRC_CAPS != 0 |
27 | void audio_set_output_source(int source) | 30 | void audio_set_output_source(int source) |
@@ -46,13 +49,42 @@ void audio_input_mux(int source, unsigned flags) | |||
46 | { | 49 | { |
47 | audiohw_set_monitor(false); | 50 | audiohw_set_monitor(false); |
48 | audiohw_disable_recording(); | 51 | audiohw_disable_recording(); |
52 | |||
53 | /* Vcodec = 1800mV (900mV + value*100mV) */ | ||
54 | pmu_ldo_set_voltage(3, 0x9); | ||
55 | |||
56 | if (rec_hw_ver == 1) | ||
57 | GPIOCMD = 0xe070e; | ||
49 | } | 58 | } |
50 | #endif | 59 | #endif |
51 | break; | 60 | break; |
61 | |||
62 | #ifdef HAVE_MIC_REC | ||
63 | case AUDIO_SRC_MIC: /* recording only */ | ||
64 | if (source != last_source) | ||
65 | { | ||
66 | if (rec_hw_ver == 1) | ||
67 | GPIOCMD = 0xe070f; | ||
68 | |||
69 | /* Vcodec = 2400mV (900mV + value*100mV) */ | ||
70 | pmu_ldo_set_voltage(3, 0xf); | ||
71 | |||
72 | audiohw_set_monitor(false); | ||
73 | audiohw_enable_recording(true); /* source mic */ | ||
74 | } | ||
75 | break; | ||
76 | #endif | ||
77 | |||
52 | #ifdef HAVE_LINE_REC | 78 | #ifdef HAVE_LINE_REC |
53 | case AUDIO_SRC_LINEIN: /* recording only */ | 79 | case AUDIO_SRC_LINEIN: /* recording only */ |
54 | if (source != last_source) | 80 | if (source != last_source) |
55 | { | 81 | { |
82 | if (rec_hw_ver == 1) | ||
83 | GPIOCMD = 0xe070e; | ||
84 | |||
85 | /* Vcodec = 2400mV (900mV + value*100mV) */ | ||
86 | pmu_ldo_set_voltage(3, 0xf); | ||
87 | |||
56 | audiohw_set_monitor(false); | 88 | audiohw_set_monitor(false); |
57 | audiohw_enable_recording(false); /* source line */ | 89 | audiohw_enable_recording(false); /* source line */ |
58 | } | 90 | } |