[Gta04-owner] Echo cancellation again
Andreas Kemnade
andreas at kemnade.info
Sat Mar 31 16:03:38 CEST 2012
Hi,
On Thu, 2012-03-29 at 13:48 +0200, Dr. H. Nikolaus Schaller wrote:
> Am 29.03.2012 um 13:14 schrieb Radek Polak:
>
> > Hi,
> > it seems now that last piece missing for telephony on GTA04 is good echo
> > cancellation.
> >
> > The software solution (gta04-gsm-voice-routing) is currently not working very
> > good for echo cancellation. It has to be adaptive, so that it works in noisy
> > environments and it needs some more tuning.
> >
> > Anyways - new GTA04A04 users will probably want to use the hardware sound
> > routing. So i wonder how GTA04 will do echo cancelling if the audio goes
> > through wires. Will do modem do it?
>
> I think it should do...
>
> > I have tried to play with various PCM profiles (using the _OPCMPROF
> > ) command, but it did not cancel the echo. Is it supposed to work only for
> > audio transfered over wires? Did someone with GTA04A04 tried audio in GSM
> > calls using the HW voice routing?
>
> HW voice routing needs modifications in the ALSA drivers so that the McBSP
> vs. TPS tristate can be switched. It may be sufficient to introduce one more
> binary control for amixer in the gtm601.c ALSA SoC driver that calls the
> appropriate tristate control functions.
> That is something for our kernel experts.
>
HW voice routing is not that easy. But I had successfully
voice from the GTA04 microphone going to the modem. The other direction
does not work (maybe needs more fiddling with alsa settings).
Attached is an experimental patch and my alsa settings.
The patch is not ready, all necessary stuff is done at init time
and not bound to an alsamixer control.
Especially interesting is this setting (which is required)
name 'HeadsetR Mixer AudioR2'
value true
I guess I have to go very carefully through the mixer settings and check
what they are actually doing.
I have tested the patch with kernel 3.2.
*A big warning*: I first thought that R410 != 0 and hoped I would get
only the other way round (modem input -> earpiece). So if McBSP4-TX is
not Z, we have two connected outputs which is not that healthy.
The other pins of McBSP4 are inputs anyway. My first tries with GTA04
and kernel 3.2 were still without the tristate patch for twl4030.c, so
McBSP4-TX was already tortured and has survived.
Greetings
Andreas Kemnade
-------------- next part --------------
A non-text attachment was scrubbed...
Name: twl.diff
Type: text/x-patch
Size: 1363 bytes
Desc: not available
URL: <http://lists.goldelico.com/pipermail/gta04-owner/attachments/20120331/58663c2f/attachment.bin>
-------------- next part --------------
state.gta04 {
control.1 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 'Option 2 (voice/audio)'
comment.item.1 'Option 1 (audio)'
iface MIXER
name 'Codec Operation Mode'
value 'Option 2 (voice/audio)'
}
control.2 {
comment.access 'read write'
comment.type INTEGER
comment.count 2
comment.range '0 - 63'
comment.dbmin -6300
comment.dbmax 0
iface MIXER
name 'DAC1 Digital Fine Playback Volume'
value.0 4
value.1 4
}
control.3 {
comment.access 'read write'
comment.type INTEGER
comment.count 2
comment.range '0 - 63'
comment.dbmin -6300
comment.dbmax 0
iface MIXER
name 'DAC2 Digital Fine Playback Volume'
value.0 46
value.1 46
}
control.4 {
comment.access 'read write'
comment.type INTEGER
comment.count 2
comment.range '0 - 2'
comment.dbmin 0
comment.dbmax 1200
iface MIXER
name 'DAC1 Digital Coarse Playback Volume'
value.0 2
value.1 2
}
control.5 {
comment.access 'read write'
comment.type INTEGER
comment.count 2
comment.range '0 - 2'
comment.dbmin 0
comment.dbmax 1200
iface MIXER
name 'DAC2 Digital Coarse Playback Volume'
value.0 2
value.1 2
}
control.6 {
comment.access 'read write'
comment.type INTEGER
comment.count 2
comment.range '0 - 18'
comment.dbmin -2400
comment.dbmax 1200
iface MIXER
name 'DAC1 Analog Playback Volume'
value.0 18
value.1 18
}
control.7 {
comment.access 'read write'
comment.type INTEGER
comment.count 2
comment.range '0 - 18'
comment.dbmin -2400
comment.dbmax 1200
iface MIXER
name 'DAC2 Analog Playback Volume'
value.0 9
value.1 9
}
control.8 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 2
iface MIXER
name 'DAC1 Analog Playback Switch'
value.0 true
value.1 true
}
control.9 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 2
iface MIXER
name 'DAC2 Analog Playback Switch'
value.0 true
value.1 true
}
control.10 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 49'
comment.dbmin -3700
comment.dbmax 1200
iface MIXER
name 'DAC Voice Digital Downlink Volume'
value 49
}
control.11 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 18'
comment.dbmin -2400
comment.dbmax 1200
iface MIXER
name 'DAC Voice Analog Downlink Volume'
value 18
}
control.12 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'DAC Voice Analog Downlink Switch'
value true
}
control.13 {
comment.access 'read write'
comment.type INTEGER
comment.count 2
comment.range '0 - 3'
comment.dbmin -1200
comment.dbmax 600
iface MIXER
name 'PreDriv Playback Volume'
value.0 1
value.1 1
}
control.14 {
comment.access 'read write'
comment.type INTEGER
comment.count 2
comment.range '0 - 3'
comment.dbmin -1200
comment.dbmax 600
iface MIXER
name 'Headset Playback Volume'
value.0 2
value.1 2
}
control.15 {
comment.access 'read write'
comment.type INTEGER
comment.count 2
comment.range '0 - 3'
comment.dbmin -1200
comment.dbmax 600
iface MIXER
name 'Carkit Playback Volume'
value.0 0
value.1 0
}
control.16 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 3'
comment.dbmin -600
comment.dbmax 1200
iface MIXER
name 'Earpiece Playback Volume'
value 2
}
control.17 {
comment.access 'read write'
comment.type INTEGER
comment.count 2
comment.range '0 - 31'
comment.dbmin 0
comment.dbmax 3100
iface MIXER
name 'TX1 Digital Capture Volume'
value.0 12
value.1 12
}
control.18 {
comment.access 'read write'
comment.type INTEGER
comment.count 2
comment.range '0 - 31'
comment.dbmin 0
comment.dbmax 3100
iface MIXER
name 'TX2 Digital Capture Volume'
value.0 0
value.1 0
}
control.19 {
comment.access 'read write'
comment.type INTEGER
comment.count 2
comment.range '0 - 5'
comment.dbmin 0
comment.dbmax 3000
iface MIXER
name 'Analog Capture Volume'
value.0 0
value.1 0
}
control.20 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 'Voice high priority'
comment.item.1 'HiFi high priority'
iface MIXER
name 'AVADC Clock Priority'
value 'Voice high priority'
}
control.21 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 '27/20/14 ms'
comment.item.1 '55/40/27 ms'
comment.item.2 '109/81/55 ms'
comment.item.3 '218/161/109 ms'
comment.item.4 '437/323/218 ms'
comment.item.5 '874/645/437 ms'
comment.item.6 '1748/1291/874 ms'
comment.item.7 '3495/2581/1748 ms'
iface MIXER
name 'HS ramp delay'
value '27/20/14 ms'
}
control.22 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 'Vibra H-bridge direction'
comment.item.1 'Audio data MSB'
iface MIXER
name 'Vibra H-bridge mode'
value 'Vibra H-bridge direction'
}
control.23 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 'Positive polarity'
comment.item.1 'Negative polarity'
iface MIXER
name 'Vibra H-bridge direction'
value 'Positive polarity'
}
control.24 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 'Not swapped'
comment.item.1 Swapped
iface MIXER
name 'Digimic LR Swap'
value 'Not swapped'
}
control.25 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Analog Right Sub Mic Capture Switch'
value true
}
control.26 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Analog Right AUXR Capture Switch'
value true
}
control.27 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Analog Left Main Mic Capture Switch'
value true
}
control.28 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Analog Left Headset Mic Capture Switch'
value true
}
control.29 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Analog Left AUXL Capture Switch'
value true
}
control.30 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Analog Left Carkit Mic Capture Switch'
value true
}
control.31 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 Analog
comment.item.1 Digimic1
iface MIXER
name 'TX2 Capture Route'
value Analog
}
control.32 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 Analog
comment.item.1 Digimic0
iface MIXER
name 'TX1 Capture Route'
value Analog
}
control.33 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 'Local vibrator'
comment.item.1 Audio
iface MIXER
name 'Vibra Route'
value 'Local vibrator'
}
control.34 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 AudioL1
comment.item.1 AudioR1
comment.item.2 AudioL2
comment.item.3 AudioR2
iface MIXER
name 'Vibra Mux'
value AudioL1
}
control.35 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'HandsfreeR Switch'
value true
}
control.36 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 Voice
comment.item.1 AudioR1
comment.item.2 AudioR2
comment.item.3 AudioL2
iface MIXER
name 'HandsfreeR Mux'
value Voice
}
control.37 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'HandsfreeL Switch'
value true
}
control.38 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 Voice
comment.item.1 AudioL1
comment.item.2 AudioL2
comment.item.3 AudioR2
iface MIXER
name 'HandsfreeL Mux'
value Voice
}
control.39 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'CarkitR Mixer Voice'
value false
}
control.40 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'CarkitR Mixer AudioR1'
value false
}
control.41 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'CarkitR Mixer AudioR2'
value false
}
control.42 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'CarkitL Mixer Voice'
value false
}
control.43 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'CarkitL Mixer AudioL1'
value false
}
control.44 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'CarkitL Mixer AudioL2'
value false
}
control.45 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'HeadsetR Mixer Voice'
value false
}
control.46 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'HeadsetR Mixer AudioR1'
value false
}
control.47 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'HeadsetR Mixer AudioR2'
value true
}
control.48 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'HeadsetL Mixer Voice'
value false
}
control.49 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'HeadsetL Mixer AudioL1'
value false
}
control.50 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'HeadsetL Mixer AudioL2'
value false
}
control.51 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'PredriveR Mixer Voice'
value false
}
control.52 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'PredriveR Mixer AudioR1'
value false
}
control.53 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'PredriveR Mixer AudioR2'
value false
}
control.54 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'PredriveR Mixer AudioL2'
value false
}
control.55 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'PredriveL Mixer Voice'
value false
}
control.56 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'PredriveL Mixer AudioL1'
value false
}
control.57 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'PredriveL Mixer AudioL2'
value false
}
control.58 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'PredriveL Mixer AudioR2'
value false
}
control.59 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Earpiece Mixer Voice'
value true
}
control.60 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Earpiece Mixer AudioL1'
value false
}
control.61 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Earpiece Mixer AudioL2'
value false
}
control.62 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Earpiece Mixer AudioR1'
value false
}
control.63 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 41'
comment.dbmin -5100
comment.dbmax -1000
iface MIXER
name 'Voice Digital Loopback Volume'
value 0
}
control.64 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 7'
comment.dbmin -3000
comment.dbmax 0
iface MIXER
name 'Right Digital Loopback Volume'
value 2
}
control.65 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 7'
comment.dbmin -3000
comment.dbmax 0
iface MIXER
name 'Left Digital Loopback Volume'
value 2
}
control.66 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Voice Analog Loopback Switch'
value false
}
control.67 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Left2 Analog Loopback Switch'
value false
}
control.68 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Right2 Analog Loopback Switch'
value true
}
control.69 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Left1 Analog Loopback Switch'
value false
}
control.70 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Right1 Analog Loopback Switch'
value true
}
}
state.gta04voice {
control {
}
}
state.gta04headset {
control {
}
}
state.gta04fm {
control {
}
}
More information about the Gta04-owner
mailing list