diff options
Diffstat (limited to 'firmware/target/arm/imx233/audioin-imx233.c')
-rw-r--r-- | firmware/target/arm/imx233/audioin-imx233.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/firmware/target/arm/imx233/audioin-imx233.c b/firmware/target/arm/imx233/audioin-imx233.c index 6c2a212c4d..859e65f813 100644 --- a/firmware/target/arm/imx233/audioin-imx233.c +++ b/firmware/target/arm/imx233/audioin-imx233.c | |||
@@ -20,6 +20,7 @@ | |||
20 | ****************************************************************************/ | 20 | ****************************************************************************/ |
21 | #include "audioin-imx233.h" | 21 | #include "audioin-imx233.h" |
22 | #include "pcm_sampr.h" | 22 | #include "pcm_sampr.h" |
23 | #include "string.h" | ||
23 | 24 | ||
24 | /* values in half-dB, one for each setting */ | 25 | /* values in half-dB, one for each setting */ |
25 | static int audioin_vol[2][4]; /* 0=left, 1=right */ | 26 | static int audioin_vol[2][4]; /* 0=left, 1=right */ |
@@ -79,7 +80,7 @@ static void apply_config(void) | |||
79 | * - microphone: -100dB -> 62dB in 0.5dB steps | 80 | * - microphone: -100dB -> 62dB in 0.5dB steps |
80 | */ | 81 | */ |
81 | 82 | ||
82 | /* First apply mic gain of possible and necessary | 83 | /* First apply mic gain if possible and necessary |
83 | * Only left volume is relevant with microphone | 84 | * Only left volume is relevant with microphone |
84 | * If gain is > 22dB, use mic gain */ | 85 | * If gain is > 22dB, use mic gain */ |
85 | if(select_l == AUDIOIN_SELECT_MICROPHONE && vol_l > 22 * 2) | 86 | if(select_l == AUDIOIN_SELECT_MICROPHONE && vol_l > 22 * 2) |
@@ -188,3 +189,28 @@ void imx233_audioin_set_freq(int fsel) | |||
188 | SRC_FRAC(dacssr[fsel].src_frac), SRC_INT(dacssr[fsel].src_int), | 189 | SRC_FRAC(dacssr[fsel].src_frac), SRC_INT(dacssr[fsel].src_int), |
189 | SRC_HOLD(dacssr[fsel].src_hold), BASEMULT(dacssr[fsel].base_mult)); | 190 | SRC_HOLD(dacssr[fsel].src_hold), BASEMULT(dacssr[fsel].base_mult)); |
190 | } | 191 | } |
192 | |||
193 | struct imx233_audioin_info_t imx233_audioin_get_info(void) | ||
194 | { | ||
195 | struct imx233_audioin_info_t info; | ||
196 | memset(&info, 0, sizeof(info)); | ||
197 | /* 6*10^6*basemult/(src_frac*8*(src_hold+1)) in Hz */ | ||
198 | info.freq = 60000000 * BF_RD(AUDIOIN_ADCSRR, BASEMULT) / 8 / | ||
199 | BF_RD(AUDIOIN_ADCSRR, SRC_FRAC) / (1 + BF_RD(AUDIOIN_ADCSRR, SRC_HOLD)); | ||
200 | info.muxselect[0] = BF_RD(AUDIOIN_ADCVOL, SELECT_LEFT); | ||
201 | info.muxselect[1] = BF_RD(AUDIOIN_ADCVOL, SELECT_RIGHT); | ||
202 | /* convert half-dB to tenth-dB */ | ||
203 | info.muxvol[0] = BF_RD(AUDIOIN_ADCVOL, GAIN_LEFT) * 15; | ||
204 | info.muxvol[1] = BF_RD(AUDIOIN_ADCVOL, GAIN_RIGHT) * 15; | ||
205 | info.muxmute[0] = info.adcmute[1] = BF_RD(AUDIOIN_ADCVOL, MUTE); | ||
206 | info.adcvol[0] = MAX((int)BF_RD(AUDIOIN_ADCVOLUME, VOLUME_LEFT) - 0xff, -100) * 5; | ||
207 | info.adcvol[1] = MAX((int)BF_RD(AUDIOIN_ADCVOLUME, VOLUME_RIGHT) - 0xff, -100) * 5; | ||
208 | info.adcmute[0] = info.adcmute[1] = false; | ||
209 | info.micvol[0] = BF_RD(AUDIOIN_MICLINE, MIC_GAIN); | ||
210 | if(info.micvol[0] != 0) | ||
211 | info.micvol[0] = info.micvol[1] = info.micvol[0] * 100 + 100; | ||
212 | info.micmute[0] = info.micmute[1] = false; | ||
213 | info.adc = !BF_RD(AUDIOOUT_PWRDN, ADC); | ||
214 | info.mic = info.mux = true; | ||
215 | return info; | ||
216 | } | ||