summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx233/audioin-imx233.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/imx233/audioin-imx233.c')
-rw-r--r--firmware/target/arm/imx233/audioin-imx233.c28
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 */
25static int audioin_vol[2][4]; /* 0=left, 1=right */ 26static 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
193struct 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}