summaryrefslogtreecommitdiff
path: root/firmware/target/arm/s5l8702/ipod6g
diff options
context:
space:
mode:
authorCástor Muñoz <cmvidal@gmail.com>2014-12-06 19:00:34 +0100
committerCástor Muñoz <cmvidal@gmail.com>2015-10-07 06:15:03 +0200
commit291b2338c98c211794d55a68c9585d278fc86563 (patch)
treec894f7d5db4e93b94c153b8125bec344e590e93c /firmware/target/arm/s5l8702/ipod6g
parent42abc6a49670cd546737a4dc7542f9f3f62e3831 (diff)
downloadrockbox-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.c32
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
27extern int rec_hw_ver;
25 28
26#if INPUT_SRC_CAPS != 0 29#if INPUT_SRC_CAPS != 0
27void audio_set_output_source(int source) 30void 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 }