Video Memo[]
Hook-able point
Confirmed HighPassFilter
HPF2 filter out function can not be strongly effected , but working.
I used wave from generator. http://www.ne.jp/asahi/fa/efu/soft/wg/wg.html Download:http://www.ne.jp/asahi/fa/efu/soft/wg/down_wg.html
Checked 400Hz
Head Phone monitoring behavior
Cannon audio behavior[]
This is my understanding (miyake_t)
How to program the OKI chip to cancel in-camera audio amplification ?[]
Chip: Oki ML26121A (see Datasheets)
Audio registers
600D (Oki ML26121A) 550D (AK4646)
DisableAudioIC
2100 2100
0d00 0d00
PowerMicAmp
230a 2205
2f02 SelectMic(0)
SelectMic(0)
1512
1311
UnpowerMicAmp
4903 2040
1300 3000
2300 SetFilterOff
SetFilterRecOff
--
TurnAVLineMuteOn()=
0x4903 (audio_ic_write) 0x23C0 (audio_ic_write)
0x693E (audio_ic_write) 0x2040 (audio_ic_write)
0x2200 (audio_ic_write)
TurnAVLineMuteOff=
0x5703 0x2210
0x4903 0x23C0
0x4B00 0x204C
0x3F33 timer
0x2502 0x2380
0x27A0
0x2126
msleep(0x1fe)
0x4901
R0, R0, #0x6B00
UnpowerSpeakerForWAV()=
0x4903 (audio_ic_write) 0x2220 (audio_ic_write)
0x2713 (audio_ic_write) 0x2200 (audio_ic_write)
0x2700 (audio_ic_write) msleep
ORR R0, R0, #0x6B00 (wr) 0x2040 (audio_ic_write)
0x5500 (audio_ic_write)
0x3B1B (audio_ic_write)
PowerSpeakerForWAV=
0x5507 0x2220
0x4903 0x23C8
0x4B00 0x2054
0x2713 0x22A0
0x271F
0x4901
ORR R0, R0, #0x6B00
SetFilterPlayOff=
UnpowerSpeakerForWAV
TurnAVLineMuteOn
0x1300
0x2106
msleep
0x2700
0x5700
0x2500
0x6700
0xAD00
SetFilterPlay= SetFilterOff=
0xADBD 0x3100
0x673F
0x7F00
0x8175
0x832A
0x85A1
0x8795
0x896D
0x8B08
0x8D16
0x8FBD
0x9146
0x93EA
0x959C
0x9724
0x996D
0x9B08
0x9DCA
0x9FDB
0xA100
0xA300
0xA500
0xA700
0x75D5
0x77F4
0x79F1
0x7BF0
0x7D00
0xA95A
or
0xAD85
0x7F00
0x8300
0x8500
0x8700
0x8900
0x8B00
0x8D00
0x8F00
0x9100
0x9300
0x9500
0x9700
0x9900
0x9B00
0x9D00
0x9F00
0xA100
0xA300
0xA500
0xA700
0x75E7
0x77E7
0x79E7
0x7BE7
0x7DE7
0xA900
FF06A420 wav_volume_out_maybe= FF063EA8 wav_volume_out_maybe
ORR R0, R0, #0x3B00 ORR R0, R4, #0x2A00
ORR R0, R5, #0x7100 ORR R0, R4, #0x6500
---
---
DAC (digital->analog) (550D and 600D, bcoz handled by tx19a I think)
StopASIFDMADAC=
0xC05000B0 <- 0
0XC092020C <- 0
-
SetASIFDACModeInterleaveINT16=
0xC0920210 <- 6
-
SetASIFDACModeSingleINT16=
0xC0920210 <- R0 or 0x04
-
SetASIFDACModeInterleaveUINT8=
0xC0920210 <- 3
-
SetASIFDACModeSingleUINT8=
0xC0920210 <- R0 or 0x01
ADC (analog->digital) (550D and 600D)
SetASIFADCModeInterleaveINT16=
0xC092011C <- 6
-
SetASIFADCModeSingleINT16=
0xC092011C <- 4
-
SetASIFADCModeInterleaveUINT8=
0xC092011C <- 3
-
SetASIFADCModeSingleUINT8=
0xC092011C <- 1
Eventprocs
SetAudioVolumeOut InitializeAudioIC DisableAudioIC StartPlayWaveData (beep) StopPlayWaveData DumpAudioIcRegister SendDataForAudioIC ReceiveDataForAudioIC
Properties:
0x205000F AudioVolume (analog gain?) 0x2050017 MovieRecVolume L/R (digital gain?)
Registers (from 7k0r programming guide, may be the same or may not):
01 Sampling Rate 03 PLLNL 05 PLLNH 07 PLLML 09 PLLMH 0B PLLDIV 0D Clock Enable 0F CLK Input/Output control 13 rec/play 21 reference power bits 23 input power 25 dac power 27 power management 2f powersave 33 mic input volume 39 mic boost volume 3b speaker amp volume 49 amp volume control [?] 4b fader 55 speaker amp out control 69 volume control enable 6b mixer & volume 6d playback volume (digital) 67 filters enable 69 volume control enable 71 play digital volume 7f hpf2 cutoff 8* eq 9* eq a* eq b1 alc mode b3-bf alc settings c1 attack (for playback limiter) c3 decay c5 target c7 min/max gain c9 boost volume
Alsa driver analyzing[]
snd_soc_update_bits means:
/**
* snd_soc_update_bits - update codec register bits
* @codec: audio codec
* @reg: codec register
* @mask: register mask
* @value: new value
*
* Writes new register value.
*
* Returns 1 for change, 0 for no change, or negative error code.
*/
int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg,
unsigned int mask, unsigned int value)
char * const ml26124_input_select
| enum val | |
|---|---|
| 0 | Analog MIC in Single Embeded |
| 1 | Digital MIC in |
| 2 | Analog Mic in Differential |
struct soc_enum ml26124_insel_enum
| sname | shift | val | reference val |
|---|---|---|---|
| ML26124_MIC_IF_CTL | (0)0000 000X | 0-1 | ml26124_input_select |
struct snd_kcontrol_new ml26124_line_control
| name | sname | shift | val |
|---|---|---|---|
| Switch | ML26124_PW_LOUT_PW_MNG | (0)0000 00X0 | 0-1 |
ml26124_companding
| enum val | |
|---|---|
| 0 | 16bit PCM |
| 1 | u-law |
| 2 | A-law |
struct soc_enum ml26124_adc_companding_enum
| sname | shift | val | reference val |
|---|---|---|---|
| ML26124_SAI_TRANS_CTL | (6)XX00 0000 | 0-3 | ml26124_companding |
struct soc_enum ml26124_dac_companding_enum
| sname | shift | val | reference val |
|---|---|---|---|
| ML26124_SAI_RCV_CTL | (6)XX00 0000 | 0-3 | ml26124_companding |
struct snd_kcontrol_new ml26124_snd_controls[]
| name | sname | shift | max val |
|---|---|---|---|
| Capture Digital Volume | ML26124_RECORD_DIG_VOL | (0)XXXX XXXX | 0-0xff |
| Playback Digital Volume | ML26124_PLBAK_DIG_VOL | (0)XXXX XXXX | 0-0xff |
| Digital Boost Volume | ML26124_DIGI_BOOST_VOL | (0)00XX XXXX | 0-0x3f |
| EQ Band0 Input Volume | ML26124_EQ_GAIN_BRAND0 | (0)XXXX XXXX | 0-0xff |
| EQ Band1 Input Volume | ML26124_EQ_GAIN_BRAND1 | (0)XXXX XXXX | 0-0xff |
| EQ Band2 Input Volume | ML26124_EQ_GAIN_BRAND2 | (0)XXXX XXXX | 0-0xff |
| EQ Band3 Input Volume | ML26124_EQ_GAIN_BRAND3 | (0)XXXX XXXX | 0-0xff |
| EQ Band4 Input Volume | ML26124_EQ_GAIN_BRAND4 | (0)XXXX XXXX | 0-0xff |
| ALC Target Level | ML26124_ALC_TARGET_LEV | (0)0000 XXXX | 0-0xf |
| ALC Min Input Volume | ML26124_ALC_MAXMIN_GAIN | (0)0000 0XXX | 0-7 |
| ALC MAX Input Volume | ML26124_ALC_MAXMIN_GAIN | (4)0XXX 0000 | 1-7 |
| Playback Limitter Min Input Volume | ML26124_PL_MAXMIN_GAIN | (0)0000 0XXX | 0-7 |
| Playback Limitter Max Input Volume | ML26124_PL_MAXMIN_GAIN | (4)0XXX 0000 | 1-7 |
| Playback Boost Volume | ML26124_PLYBAK_BOST_VOL | (0)00XX XXXX | 0-0x3f |
| DC High Pass Filter Switch | ML26124_FILTER_EN | (0)0000 000X | 0-1 |
| NOISE High Pass Filter Switch | ML26124_FILTER_EN | (1)0000 00X0 | 0-1 |
| EQ BAND0 Switch | ML26124_FILTER_EN | (2)0000 0X00 | 0-1 |
| EQ BAND1 Switch | ML26124_FILTER_EN | (3)0000 X000 | 0-1 |
| EQ BAND2 Switch | ML26124_FILTER_EN | (4)000X 0000 | 0-1 |
| EQ BAND3 Switch | ML26124_FILTER_EN | (5)00X0 0000 | 0-1 |
| EQ BAND4 Switch | ML26124_FILTER_EN | (6)0X00 0000 | 0-1 |
| Play Limitter Switch | ML26124_DVOL_CTL | (0)0000 000X | 0-1 |
| Capture Limitter Switch | ML26124_DVOL_CTL | (1)0000 00X0 | 0-1 |
| Digital Volume Fade Switch | ML26124_DVOL_CTL | (3)0000 X000 | 0-1 |
| Digital Volume Switch | ML26124_DVOL_CTL | (4)000X 0000 | 0-1 |
ml26124_output_mixer_controls
| name | sname | reg(shift) | val | ||
|---|---|---|---|---|---|
| DAC Switch | ML26124_SPK_AMP_OUT | (1)0000 00X0 | 0-1 | ||
| Line in Switch | ML26124_SPK_AMP_OUT | (3)0000 X000 | 0-1 | ||
| PGA Switch | ML26124_SPK_AMP_OUT | (5)00X0 0000 | 0-1 |
struct snd_soc_dapm_widget ml26124_dapm_widgets[]
| name | sname | reg(shift) | event | ref val |
|---|---|---|---|---|
| MCLK | ML26124_CLK_EN | (0)0000 000X | NULL | - |
| PLL | ML26124_CLK_EN | (1)0000 00X0 | NULL | - |
| MICBIAS | ML26124_PW_REF_PW_MNG | (0)0000 000X | NULL | - |
| Output Mixer | ML26124_PW_SPAMP_PW_MNG | (0)0000 000X | - | ml26124_output_mixer_controls[0] |
| DAC Playback | ML26124_PW_DAC_PW_MNG | (1)0000 00X0 | - | - |
| ADC Capture | ML26124_PW_IN_PW_MNG | (1)0000 00X0 | - | - |
| PGA | ML26124_PW_IN_PW_MNG | (3)0000 X000 | NULL | - |
| InputMux | SND_SOC_NOPM | (0)0000 000X | - | &ml26124_input_mux_controls |
| LineOutEnable | SND_SOC_NOPM | (0)0000 000X | - | &ml26124_line_control |
| VIDEOIN | ||||
| MDIN | ||||
| MIN | ||||
| LIN | ||||
| VIDEOOUT | ||||
| SPOUT | ||||
| LOUT |
See Register_Map See DMA