User:Tanuk2

= N900 Audio Stuff =

N900 uses the TI tlv320aic34 codec, for which a datasheet can be downloaded from here: http://www.ti.com/product/tlv320aic34

tlv320aic3x in the kernel: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=sound/soc/codecs/tlv320aic3x.c

Routing Graph
This is an incomplete representation, but still useful for writing or understanding configuration files. I'm not sure about the order of the elements and whether the volume elements are analog or digital, because it's hard to figure those things out just by experimenting (I guess the information would be available in the datasheet, but I haven't checked that).

+- switch: Left HP Mixer DACL1 Switch --+ |l                                     | [PCM: hw:RX51,0] -+-+-+                                      +- analog volume: HP DAC Playback Volume --- switch: HP Playback Switch --- enum: Speaker Function --- [speakers] | | |r                                     | | | +- switch: Right HP Mixer DACR1 Switch -+ | |                 | |mixed-to-mono | +- switch: Mono Mixer DACR1 Switch --- analog volume: Mono DAC Playback Volume --- switch: Mono Playback Switch --- enum: Earpiece Function --- [earpiece] |                 | +- switch: Left Line Mixer DACL1 Switch --+ | |l                                       | +-+                                        +- analog volume: Line DAC Playback Volume --- switch: Line Playback Switch --- analog volume: TPA6130A2 Headphone Playback Volume --- enum: Jack Function --- [headphones]/[headset]/[tvout] |r                                       | +- switch: Right Line Mixer DACR1 Switch -+ l [microphone] +- enum: Input Select --- enum: ADC HPF Cut-off --- [PCM: hw:RX51,0] |                                  +- enum: Left Line1L Mux  switch: Left PGA Mixer Line1L Switch --+                                                                    | |                                                                   |                                                                    | [headset] --- enum: Jack Function -+                                                                    +- switch: PGA Capture Switch --- analog volume: PGA Capture Volume -+ |                                                                   |                                   +- enum: Right Line1L Mux --- switch: Right PGA Mixer Line1L Switch -+

amixer -cRX51 Output in Different Use Cases (on Fremantle)

 * Playing music to the device speakers
 * Playing music to headphones
 * Playing music to a headset
 * Playing the ringtone to the device speakers
 * Playing the ringtone to the device speakers and headphones
 * Playing the ringtone to the device speakers and a headset
 * Using the earpiece and the device microphone in a voice call
 * Using the device speakers and the device microphone in a voice call
 * Using headphones and the device microphone in a voice call
 * Using a headset in a voice call

Speaker Function
Capabilities: enum Items: 'Off' 'On' Item0: 'On'


 * speakers: enum = On
 * earpiece: enum = Off
 * headphones: enum = Off
 * headset(out): enum = Off
 * tvout: enum = Off

PCM
Capabilities: pvolume penum Playback channels: Front Left - Front Right Limits: Playback 0 - 127 Mono: Front Left: Playback 127 [100%] [0.00dB] Front Right: Playback 127 [100%] [0.00dB]


 * speakers: volume = on
 * earpiece: volume = on
 * headphones: volume = on
 * headset(out): volume = on
 * tvout: volume = on

FMTX Function
Capabilities: enum Items: 'Off' 'On' Item0: 'Off'

Line
Capabilities: pswitch penum Playback channels: Front Left - Front Right Mono: Front Left: Playback [off] Front Right: Playback [off]


 * speakers: switch = off
 * earpiece: switch = off
 * headphones: switch = on
 * headset(out): switch = on
 * tvout: switch = on

Line DAC
Capabilities: pvolume penum Playback channels: Front Left - Front Right Limits: Playback 0 - 118 Mono: Front Left: Playback 0 [0%] [-99999.99dB] Front Right: Playback 0 [0%] [-99999.99dB]


 * speakers: volume = off
 * earpiece: volume = off
 * headphones: volume = on
 * headset(out): volume = on
 * tvout: volume = on

Line Line2 Bypass
Capabilities: volume penum Playback channels: Front Left - Front Right Capture channels: Front Left - Front Right Limits: 0 - 118 Front Left: 71 [60%] [-23.50dB] Front Right: 71 [60%] [-23.50dB]

Line PGA Bypass
Capabilities: volume penum Playback channels: Front Left - Front Right Capture channels: Front Left - Front Right Limits: 0 - 118 Front Left: 71 [60%] [-23.50dB] Front Right: 71 [60%] [-23.50dB]

Mono
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]


 * speakers: switch = off
 * earpiece: switch = on
 * headphones: switch = off
 * headset(out): switch = off
 * tvout: switch = off

Mono DAC
Capabilities: pvolume penum Playback channels: Front Left - Front Right Limits: Playback 0 - 118 Mono: Front Left: Playback 0 [0%] [-99999.99dB] Front Right: Playback 0 [0%] [-99999.99dB]


 * speakers: volume = off
 * earpiece: volume = on
 * headphones: volume = off
 * headset(out): volume = off
 * tvout: volume = off

Mono Line2 Bypass
Capabilities: volume penum Playback channels: Front Left - Front Right Capture channels: Front Left - Front Right Limits: 0 - 118 Front Left: 71 [60%] [-23.50dB] Front Right: 71 [60%] [-23.50dB]

Mono Mixer DACL1
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

May be "Left DAC_L1 Mixer Mono" on Fremantle.

Mono Mixer DACR1
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

May be "Right DAC_R1 Mixer Mono" on Fremantle.


 * speakers: switch = off
 * earpiece: switch = on
 * headphones: switch = off
 * headset(out): switch = off
 * tvout: switch = off

Mono Mixer Line2L Bypass
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Mono Mixer Line2R Bypass
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Mono Mixer PGAL Bypass
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Mono Mixer PGAR Bypass
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Mono PGA Bypass
Capabilities: volume penum Playback channels: Front Left - Front Right Capture channels: Front Left - Front Right Limits: 0 - 118 Front Left: 71 [60%] [-23.50dB] Front Right: 71 [60%] [-23.50dB]

34B HPL PGAR Bypass
Capabilities: pvolume pvolume-joined penum Playback channels: Mono Limits: Playback 0 - 118 Mono: Playback 118 [100%] [0.00dB]

ADC HPF Cut-off
Capabilities: enum Items: 'Disabled' '0.0045xFs' '0.0125xFs' '0.025xFs' Item0: 'Disabled' Item1: 'Disabled'

Cut-off frequency for the high-pass filters that are applied to the data coming from the inputs (both ADC and the digital mic, even though there's "ADC" in the element name). I guess Item0 is for the left channel and Item1 is for the right channel.

On Fremantle, the high-pass filter is enabled for the integrated microphone and disabled for headsets. I don't know why. Anyway, copying that setup shouldn't do much harm.


 * microphone: enum = 0.0045xFs
 * headset(in): enum = Disabled

AGC
Capabilities: pswitch penum Playback channels: Front Left - Front Right Mono: Front Left: Playback [off] Front Right: Playback [off]

Earpiece Function
Capabilities: enum Items: 'Off' 'On' Item0: 'Off'

On Fremantle there's no "Earpiece Function", but there's "Earphone Function", which doesn't exist on Nemo. These probably refer to the same thing. There's also "Earphone" on Fremantle, which is apparently used for earpiece volume control. There's no obvious counterpart on Nemo, but "Mono DAC" seems to work pretty well as the earpiece volume control.


 * speakers: enum = Off
 * earpiece: enum = On
 * headphones: enum = Off
 * headset(out): enum = Off
 * tvout: enum = Off

HP
Capabilities: pswitch penum Playback channels: Front Left - Front Right Mono: Front Left: Playback [on] Front Right: Playback [on]


 * speakers: switch = on
 * earpiece: switch = off
 * headphones: switch = off
 * headset(out): switch = off
 * tvout: switch = off

HP DAC
Capabilities: pvolume penum Playback channels: Front Left - Front Right Limits: Playback 0 - 118 Mono: Front Left: Playback 95 [81%] [-11.50dB] Front Right: Playback 95 [81%] [-11.50dB]


 * speakers: volume = on
 * earpiece: volume = off
 * headphones: volume = off
 * headset(out): volume = off
 * tvout: volume = off

HP Line2 Bypass
Capabilities: volume penum Playback channels: Front Left - Front Right Capture channels: Front Left - Front Right Limits: 0 - 118 Front Left: 71 [60%] [-23.50dB] Front Right: 71 [60%] [-23.50dB]

HP PGA Bypass
Capabilities: volume penum Playback channels: Front Left - Front Right Capture channels: Front Left - Front Right Limits: 0 - 118 Front Left: 71 [60%] [-23.50dB] Front Right: 71 [60%] [-23.50dB]

HPCOM
Capabilities: pswitch penum Playback channels: Front Left - Front Right Mono: Front Left: Playback [on] Front Right: Playback [on]

On Fremantle this element doesn't exist, but unlike on Nemo, "HPCOM DAC" contains a switch. The switch on "HPCOM DAC" may have been moved to a separate element (this one).

HPCOM DAC
Capabilities: pvolume penum Playback channels: Front Left - Front Right Limits: Playback 0 - 118 Mono: Front Left: Playback 71 [60%] [-23.50dB] Front Right: Playback 71 [60%] [-23.50dB]

See the note on "HPCOM".

HPCOM Line2 Bypass
Capabilities: volume penum Playback channels: Front Left - Front Right Capture channels: Front Left - Front Right Limits: 0 - 118 Front Left: 71 [60%] [-23.50dB] Front Right: 71 [60%] [-23.50dB]

HPCOM PGA Bypass
Capabilities: volume penum Playback channels: Front Left - Front Right Capture channels: Front Left - Front Right Limits: 0 - 118 Front Left: 71 [60%] [-23.50dB] Front Right: 71 [60%] [-23.50dB]

Input Select
Capabilities: enum Items: 'ADC' 'Digital Mic' Item0: 'Digital Mic'


 * microphone: enum = Digital Mic
 * headset(in): enum = ADC

Jack Function
Capabilities: enum Items: 'Off' 'TV-OUT' 'Headphone' 'Headset' Item0: 'Off'


 * speakers: enum = Off
 * earpiece: enum = Off
 * headphones: enum = Headphone
 * headset(out): enum = Headset
 * tvout: enum = TV-OUT
 * microphone: enum = Off
 * headset(in): enum = Headset

Left DAC Mux
Capabilities: enum Items: 'DAC_L1' 'DAC_L3' 'DAC_L2' Item0: 'DAC_L1'

Left HP Mixer DACL1
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [on]

Probably "Left DAC_L1 Mixer HP" on Fremantle.


 * speakers: switch = on
 * earpiece: switch = off
 * headphones: switch = off
 * headset(out): switch = off
 * tvout: switch = off

Left HP Mixer DACR1
Capabilities: pvolume pvolume-joined pswitch pswitch-joined penum Playback channels: Mono Limits: Playback 0 - 118 Mono: Playback 118 [100%] [0.00dB] [off]

Left HP Mixer Line2L Bypass
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Left HP Mixer Line2R Bypass
Capabilities: volume volume-joined pswitch pswitch-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 118 Mono: 118 [100%] [0.00dB] Playback [off]

Left HP Mixer PGAL Bypass
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Left HP Mixer PGAR Bypass
Capabilities: volume volume-joined pswitch pswitch-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 118 Mono: 118 [100%] [0.00dB] Playback [off]

Left HPCOM Mixer DACL1
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [on]

Left HPCOM Mixer DACR1
Capabilities: pvolume pvolume-joined pswitch pswitch-joined penum Playback channels: Mono Limits: Playback 0 - 118 Mono: Playback 118 [100%] [0.00dB] [off]

Left HPCOM Mixer Line2L Bypass
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Left HPCOM Mixer Line2R Bypass
Capabilities: volume volume-joined pswitch pswitch-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 118 Mono: 118 [100%] [0.00dB] Playback [off]

Left HPCOM Mixer PGAL Bypass
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Left HPCOM Mixer PGAR Bypass
Capabilities: volume volume-joined pswitch pswitch-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 118 Mono: 118 [100%] [0.00dB] Playback [off]

Left HPCOM Mux
Capabilities: enum Items: 'differential of HPLOUT' 'constant VCM' 'single-ended' Item0: 'differential of HPLOUT'

Left Line Mixer DACL1
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]


 * speakers: switch = off
 * earpiece: switch = off
 * headphones: switch = on
 * headset(out): switch = on
 * tvout: switch = on

Left Line Mixer DACR1
Capabilities: pvolume pvolume-joined pswitch pswitch-joined penum Playback channels: Mono Limits: Playback 0 - 118 Mono: Playback 118 [100%] [0.00dB] [off]

Left Line Mixer Line2L Bypass
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Left Line Mixer Line2R Bypass
Capabilities: volume volume-joined pswitch pswitch-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 118 Mono: 118 [100%] [0.00dB] Playback [off]

Left Line Mixer PGAL Bypass
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Left Line Mixer PGAR Bypass
Capabilities: volume volume-joined pswitch pswitch-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 118 Mono: 118 [100%] [0.00dB] Playback [off]

Left Line1L Mux
Capabilities: enum Items: 'single-ended' 'differential' Item0: 'single-ended'

Input to the left ADC.


 * microphone: enum = single-ended
 * headset(in): enum = differential

Left Line1R Mux
Capabilities: enum Items: 'single-ended' 'differential' Item0: 'single-ended'

Input to the left ADC.

Left Line2L Mux
Capabilities: enum Items: 'single-ended' 'differential' Item0: 'single-ended'

Input to the left ADC.

Left PGA Mixer Line1L
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [on]

Input to the left ADC, despite the switch being a playback switch.


 * microphone: switch = off
 * headset(in): switch = on

Left PGA Mixer Line1R
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Input to the left ADC, despite the switch being a playback switch.

Left PGA Mixer Line2L
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Input to the left ADC, despite the switch being a playback switch.

Left PGA Mixer Mic3L
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Input to the left ADC, despite the switch being a playback switch.

Left PGA Mixer Mic3R
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Input to the left ADC, despite the switch being a playback switch.

McBSP2 Sidetone
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

McBSP2 Sidetone Channel 0
Capabilities: volume volume-joined penum Playback channels: Mono Capture channels: Mono Limits: -32768 - 32767 Mono: 0 [50%]

McBSP2 Sidetone Channel 1
Capabilities: volume volume-joined penum Playback channels: Mono Capture channels: Mono Limits: -32768 - 32767 Mono: 0 [50%]

PGA
Capabilities: cvolume cswitch penum Capture channels: Front Left - Front Right Limits: Capture 0 - 119 Front Left: Capture 0 [0%] [0.00dB] [off] Front Right: Capture 0 [0%] [0.00dB] [off]


 * microphone: volume = off, switch = off
 * headset(in): volume = on (configured to +24 dB on Fremantle), switch = on

Right DAC Mux
Capabilities: enum Items: 'DAC_R1' 'DAC_R3' 'DAC_R2' Item0: 'DAC_R1'

Right HP Mixer DACL1
Capabilities: pvolume pvolume-joined pswitch pswitch-joined penum Playback channels: Mono Limits: Playback 0 - 118 Mono: Playback 118 [100%] [0.00dB] [off]

Right HP Mixer DACR1
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [on]

May be "Right DAC_R1 Mixer HP" on Fremantle.


 * speakers: switch = on
 * earpiece: switch = off
 * headphones: switch = off
 * headset(out): switch = off
 * tvout: switch = off

Right HP Mixer Line2L Bypass
Capabilities: volume volume-joined pswitch pswitch-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 118 Mono: 118 [100%] [0.00dB] Playback [off]

Right HP Mixer Line2R Bypass
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Right HP Mixer PGAL Bypass
Capabilities: volume volume-joined pswitch pswitch-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 118 Mono: 118 [100%] [0.00dB] Playback [off]

Right HP Mixer PGAR Bypass
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Right HPCOM Mixer DACL1
Capabilities: pvolume pvolume-joined pswitch pswitch-joined penum Playback channels: Mono Limits: Playback 0 - 118 Mono: Playback 118 [100%] [0.00dB] [off]

Right HPCOM Mixer DACR1
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [on]

Right HPCOM Mixer Line2L Bypass
Capabilities: volume volume-joined pswitch pswitch-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 118 Mono: 118 [100%] [0.00dB] Playback [off]

Right HPCOM Mixer Line2R Bypass
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Right HPCOM Mixer PGAL Bypass
Capabilities: volume volume-joined pswitch pswitch-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 118 Mono: 118 [100%] [0.00dB] Playback [off]

Right HPCOM Mixer PGAR Bypass
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Right HPCOM Mux
Capabilities: enum Items: 'differential of HPROUT' 'constant VCM' 'single-ended' 'differential of HPLCOM' 'external feedback' Item0: 'differential of HPROUT'

Right Line Mixer DACL1
Capabilities: pvolume pvolume-joined pswitch pswitch-joined penum Playback channels: Mono Limits: Playback 0 - 118 Mono: Playback 118 [100%] [0.00dB] [off]

Right Line Mixer DACR1
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]


 * speakers: switch = off
 * earpiece: switch = off
 * headphones: switch = on
 * headset(out): switch = on
 * tvout: switch = on

Right Line Mixer Line2L Bypass
Capabilities: volume volume-joined pswitch pswitch-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 118 Mono: 118 [100%] [0.00dB] Playback [off]

Right Line Mixer Line2R Bypass
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Right Line Mixer PGAL Bypass
Capabilities: volume volume-joined pswitch pswitch-joined penum Playback channels: Mono Capture channels: Mono Limits: 0 - 118 Mono: 118 [100%] [0.00dB] Playback [off]

Right Line Mixer PGAR Bypass
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Right Line1L Mux
Capabilities: enum Items: 'single-ended' 'differential' Item0: 'single-ended'

Input to the right ADC.


 * microphone: enum = single-ended
 * headset(in): enum = differential

Right Line1R Mux
Capabilities: enum Items: 'single-ended' 'differential' Item0: 'single-ended'

Input to the right ADC.

Right Line2R Mux
Capabilities: enum Items: 'single-ended' 'differential' Item0: 'single-ended'

Input to the right ADC.

Right PGA Mixer Line1L
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Input to the right ADC, despite the switch being a playback switch.


 * microphone: switch = on
 * headset(in): switch = off

Right PGA Mixer Line1R
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [on]

Input to the right ADC, despite the switch being a playback switch.

Right PGA Mixer Line2R
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Input to the right ADC, despite the switch being a playback switch.

Right PGA Mixer Mic3L
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Input to the right ADC, despite the switch being a playback switch.

Right PGA Mixer Mic3R
Capabilities: pswitch pswitch-joined penum Playback channels: Mono Mono: Playback [off]

Input to the right ADC, despite the switch being a playback switch.

TPA6130A2 Headphone
Capabilities: pvolume pvolume-joined penum Playback channels: Mono Limits: Playback 0 - 42 Mono: Playback 0 [0%] [-59.50dB]

May be "Headphone" on Fremantle.


 * speakers: volume = off
 * earpiece: volume = off
 * headphones: volume = on
 * headset(out): volume = on
 * tvout: volume = on