* Problem setting mixer switch with amixer/alsactl.
@ 2008-10-22 18:47 Oliver Ford
2008-10-22 20:57 ` Mark Brown
2008-10-23 13:27 ` Mark Brown
0 siblings, 2 replies; 26+ messages in thread
From: Oliver Ford @ 2008-10-22 18:47 UTC (permalink / raw)
To: alsa-devel
Hi,
I have a system with a wm9713 ac97 codec. It has a single speaker
connected to SPKL and OUT4 in BTL config.
Currently I'm setting up the audio path with a small script using amixer:
amixer cset numid=90 2 # Out4 Mux = Inv2
amixer cset numid=95 3 # Left Speaker Out Mux = Speaker
amixer cset numid=88 2 # DAC Inv Mux 2 = Speaker
amixer cset numid=31 1 # Out4 Playback Switch = on
amixer cset numid=2 1,0 # Speaker Playback Switch = L:on, R:off
and also:
amixer cset numid=62 1 # Speaker Mixer PCM Playback Switch = on
If I do all of the above except for setting 'Speaker Mixer PCM Playback
Switch' and then un-mute that in the full alsamixer program, the audio
works through the speaker. If I run the 'Speaker Mixer PCM Playback
Switch' amixer command (either before or after setting it with
alsamixer), the audio stops working. Once that's happened I can't get it
back at all without a full reboot (even suspend/resume doesn't help).
Setting it with alsamixer so it works and then using alsactl to save and
restore the config also breaks it.
I'm not sure how to go about debugging this one, can anyone help?
Also, is there a way to (and should I) set the DAC -> SPKMIX -> INV2 ->
OUT4 etc in my platform definition in the kernel code, rather than doing
it with amixer?
Oliver Ford
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-22 18:47 Problem setting mixer switch with amixer/alsactl Oliver Ford
@ 2008-10-22 20:57 ` Mark Brown
2008-10-22 22:56 ` Oliver Ford
2008-10-23 13:27 ` Mark Brown
1 sibling, 1 reply; 26+ messages in thread
From: Mark Brown @ 2008-10-22 20:57 UTC (permalink / raw)
To: Oliver Ford; +Cc: alsa-devel
On Wed, Oct 22, 2008 at 07:47:20PM +0100, Oliver Ford wrote:
> Setting it with alsamixer so it works and then using alsactl to save and
> restore the config also breaks it.
> I'm not sure how to go about debugging this one, can anyone help?
Please send an alsactl save file with the offending configuration - I'll
try to reproduce (though possibly not before Monday).
Could you please also expand on "audio stops working" - for example, do
you get any diagnostics in dmesg, do applications appear to think they
are running normally, is there any noise at all (eg, static) and do any
other audio paths work?
> Also, is there a way to (and should I) set the DAC -> SPKMIX -> INV2 ->
> OUT4 etc in my platform definition in the kernel code, rather than doing
> it with amixer?
The recommended approach is to do this from user space. Direct register
writes when probing should also do the trick if you want to do it
in-kernel but it's not so robust against future changes.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-22 20:57 ` Mark Brown
@ 2008-10-22 22:56 ` Oliver Ford
2008-10-23 14:00 ` Mark Brown
0 siblings, 1 reply; 26+ messages in thread
From: Oliver Ford @ 2008-10-22 22:56 UTC (permalink / raw)
To: Oliver Ford, alsa-devel
[-- Attachment #1: Type: text/plain, Size: 1041 bytes --]
Mark Brown wrote:
> Please send an alsactl save file with the offending configuration
Attached.
I saved this file when the audio was working (i.e having turned the
offending control on with alsamixer) but restoring it stops it working.
> - I'll try to reproduce (though possibly not before Monday).
>
Thanks.
> Could you please also expand on "audio stops working" - for example, do
> you get any diagnostics in dmesg, do applications appear to think they
> are running normally, is there any noise at all (eg, static) and do any
> other audio paths work?
>
No unusual dmesg output, the apps think nothing is wrong.
It seems that just the offending control (or the actual DACL/R -> SPKMIX
mixer channel) stops working. I can still get audio through the
headphones, still can get clicks when turning everything else on and
off. I can even get audio on the speaker by the alternate routes: DACL
-> HPMIXL -> SPKL and DACR -> HPMIXR -> INV2 -> OUT4.
Routing SPKMIX to the headphones gives no output on the headphones.
Oliver
[-- Attachment #2: asound.state --]
[-- Type: text/plain, Size: 19284 bytes --]
state.hpipaq214 {
control.1 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 31'
iface MIXER
name 'Speaker Playback Volume'
value 1
}
control.2 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 2
iface MIXER
name 'Speaker Playback Switch'
value.0 true
value.1 false
}
control.3 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 31'
iface MIXER
name 'Headphone Playback Volume'
value 31
}
control.4 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 2
iface MIXER
name 'Headphone Playback Switch'
value.0 false
value.1 false
}
control.5 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 31'
iface MIXER
name 'Line In Volume'
value 23
}
control.6 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 31'
iface MIXER
name 'PCM Playback Volume'
value 6
}
control.7 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 31'
iface MIXER
name 'Mic 1 Volume'
value 23
}
control.8 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 31'
iface MIXER
name 'Mic 2 Volume'
value 23
}
control.9 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Mic Boost (+20dB) Switch'
value false
}
control.10 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 7'
iface MIXER
name 'Mic Headphone Mixer Volume'
value 5
}
control.11 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Capture Switch'
value true
}
control.12 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 2
comment.item.0 '+1.5dB Steps'
comment.item.1 '+0.75dB Steps'
iface MIXER
name 'Capture Volume Steps'
value.0 '+1.5dB Steps'
value.1 '+1.5dB Steps'
}
control.13 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 31'
iface MIXER
name 'Capture Volume'
value 0
}
control.14 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Capture ZC Switch'
value false
}
control.15 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 7'
iface MIXER
name 'Capture to Headphone Volume'
value 5
}
control.16 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Capture to Mono Boost (+20dB) Switch'
value false
}
control.17 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Capture ADC Boost (+20dB) Switch'
value false
}
control.18 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 15'
iface MIXER
name 'ALC Target Volume'
value 11
}
control.19 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 15'
iface MIXER
name 'ALC Hold Time'
value 0
}
control.20 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 15'
iface MIXER
name 'ALC Decay Time '
value 3
}
control.21 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 15'
iface MIXER
name 'ALC Attack Time'
value 2
}
control.22 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 None
comment.item.1 Left
comment.item.2 Right
comment.item.3 Stereo
iface MIXER
name 'ALC Function'
value None
}
control.23 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 7'
iface MIXER
name 'ALC Max Volume'
value 7
}
control.24 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 3'
iface MIXER
name 'ALC ZC Timeout'
value 3
}
control.25 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'ALC ZC Switch'
value false
}
control.26 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'ALC NG Switch'
value false
}
control.27 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 'Constant Gain'
comment.item.1 Mute
iface MIXER
name 'ALC NG Type'
value 'Constant Gain'
}
control.28 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 31'
iface MIXER
name 'ALC NG Threshold'
value 0
}
control.29 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 2
iface MIXER
name 'Speaker Playback ZC Switch'
value.0 false
value.1 false
}
control.30 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 2
iface MIXER
name 'Headphone Playback ZC Switch'
value.0 false
value.1 false
}
control.31 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Out4 Playback Switch'
value true
}
control.32 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Out4 Playback ZC Switch'
value false
}
control.33 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 63'
iface MIXER
name 'Out4 Playback Volume'
value 63
}
control.34 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Out3 Playback Switch'
value false
}
control.35 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Out3 Playback ZC Switch'
value false
}
control.36 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 63'
iface MIXER
name 'Out3 Playback Volume'
value 62
}
control.37 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 31'
iface MIXER
name 'Mono Capture Volume'
value 23
}
control.38 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Mono Playback Switch'
value false
}
control.39 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Mono Playback ZC Switch'
value false
}
control.40 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 31'
iface MIXER
name 'Mono Playback Volume'
value 31
}
control.41 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 7'
iface MIXER
name 'PC Beep Playback Headphone Volume'
value 5
}
control.42 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 7'
iface MIXER
name 'PC Beep Playback Speaker Volume'
value 5
}
control.43 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 7'
iface MIXER
name 'PC Beep Playback Mono Volume'
value 5
}
control.44 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 7'
iface MIXER
name 'Voice Playback Headphone Volume'
value 5
}
control.45 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 7'
iface MIXER
name 'Voice Playback Master Volume'
value 5
}
control.46 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 7'
iface MIXER
name 'Voice Playback Mono Volume'
value 5
}
control.47 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 7'
iface MIXER
name 'Aux Playback Headphone Volume'
value 5
}
control.48 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 7'
iface MIXER
name 'Aux Playback Master Volume'
value 5
}
control.49 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 7'
iface MIXER
name 'Aux Playback Mono Volume'
value 5
}
control.50 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 'Linear Control'
comment.item.1 'Adaptive Boost'
iface MIXER
name 'Bass Control'
value 'Linear Control'
}
control.51 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Bass Cut-off Switch'
value true
}
control.52 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Tone Cut-off Switch'
value true
}
control.53 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Playback Attenuate (-6dB) Switch'
value false
}
control.54 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 15'
iface MIXER
name 'Bass Volume'
value 0
}
control.55 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 15'
iface MIXER
name 'Tone Volume'
value 0
}
control.56 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name '3D Upper Cut-off Switch'
value false
}
control.57 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name '3D Lower Cut-off Switch'
value false
}
control.58 {
comment.access 'read write'
comment.type INTEGER
comment.count 1
comment.range '0 - 15'
iface MIXER
name '3D Depth'
value 15
}
control.59 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Speaker Mixer PC Beep Playback '
value false
}
control.60 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Speaker Mixer Voice Playback Sw'
value false
}
control.61 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Speaker Mixer Aux Playback Swit'
value false
}
control.62 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Speaker Mixer PCM Playback Swit'
value true
}
control.63 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Speaker Mixer MonoIn Playback S'
value false
}
control.64 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Speaker Mixer Bypass Playback S'
value false
}
control.65 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Mono Mixer PC Beep Playback Swi'
value false
}
control.66 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Mono Mixer Voice Playback Switc'
value false
}
control.67 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Mono Mixer Aux Playback Switch'
value false
}
control.68 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Mono Mixer PCM Playback Switch'
value false
}
control.69 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Mono Mixer Bypass Playback Swit'
value false
}
control.70 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Mono Mixer Mic 1 Sidetone Switc'
value false
}
control.71 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Mono Mixer Mic 2 Sidetone Switc'
value false
}
control.72 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Right HP Mixer PC Beep Playback'
value false
}
control.73 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Right HP Mixer Voice Playback S'
value false
}
control.74 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Right HP Mixer Aux Playback Swi'
value false
}
control.75 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Right HP Mixer PCM Playback Swi'
value false
}
control.76 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Right HP Mixer MonoIn Playback '
value false
}
control.77 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Right HP Mixer Bypass Playback '
value false
}
control.78 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Left HP Mixer PC Beep Playback '
value false
}
control.79 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Left HP Mixer Voice Playback Sw'
value false
}
control.80 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Left HP Mixer Aux Playback Swit'
value false
}
control.81 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Left HP Mixer PCM Playback Swit'
value false
}
control.82 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Left HP Mixer MonoIn Playback S'
value false
}
control.83 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 1
iface MIXER
name 'Left HP Mixer Bypass Playback S'
value false
}
control.84 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 MPB
comment.item.1 MPA
iface MIXER
name 'Mic B Source'
value MPB
}
control.85 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 'Mic 1'
comment.item.1 'Mic 2 A'
comment.item.2 'Mic 2 B'
iface MIXER
name 'Mic A Source'
value 'Mic 1'
}
control.86 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 'Mic 1'
comment.item.1 'Mic 2'
comment.item.2 Line
comment.item.3 'Mono In'
comment.item.4 Headphone
comment.item.5 Speaker
comment.item.6 'Mono Out'
comment.item.7 Zh
iface MIXER
name 'Right Capture Source'
value 'Mic 1'
}
control.87 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 'Mic 1'
comment.item.1 'Mic 2'
comment.item.2 Line
comment.item.3 'Mono In'
comment.item.4 Headphone
comment.item.5 Speaker
comment.item.6 'Mono Out'
comment.item.7 Zh
iface MIXER
name 'Left Capture Source'
value 'Mic 1'
}
control.88 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 Off
comment.item.1 Mono
comment.item.2 Speaker
comment.item.3 'Left Headphone'
comment.item.4 'Right Headphone'
comment.item.5 'Headphone Mono'
comment.item.6 NC
comment.item.7 Vmid
iface MIXER
name 'DAC Inv Mux 2'
value Speaker
}
control.89 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 Off
comment.item.1 Mono
comment.item.2 Speaker
comment.item.3 'Left Headphone'
comment.item.4 'Right Headphone'
comment.item.5 'Headphone Mono'
comment.item.6 NC
comment.item.7 Vmid
iface MIXER
name 'DAC Inv Mux 1'
value Off
}
control.90 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 Vmid
comment.item.1 Zh
comment.item.2 'Inv 2'
comment.item.3 'Inv 2 Vmid'
iface MIXER
name 'Out 4 Mux'
value 'Inv 2'
}
control.91 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 Vmid
comment.item.1 Zh
comment.item.2 'Inv 1'
comment.item.3 'Inv 1 Vmid'
iface MIXER
name 'Out 3 Mux'
value Vmid
}
control.92 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 Vmid
comment.item.1 Zh
comment.item.2 Headphone
iface MIXER
name 'Right Headphone Out Mux'
value Vmid
}
control.93 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 Vmid
comment.item.1 Zh
comment.item.2 Headphone
iface MIXER
name 'Left Headphone Out Mux'
value Vmid
}
control.94 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 Vmid
comment.item.1 Zh
comment.item.2 Headphone
comment.item.3 Speaker
comment.item.4 Inv
comment.item.5 'Headphone Vmid'
comment.item.6 'Speaker Vmid'
comment.item.7 'Inv Vmid'
iface MIXER
name 'Right Speaker Out Mux'
value Vmid
}
control.95 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 Vmid
comment.item.1 Zh
comment.item.2 Headphone
comment.item.3 Speaker
comment.item.4 Inv
comment.item.5 'Headphone Vmid'
comment.item.6 'Speaker Vmid'
comment.item.7 'Inv Vmid'
iface MIXER
name 'Left Speaker Out Mux'
value Speaker
}
control.96 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 Vmid
comment.item.1 Zh
comment.item.2 Mono
comment.item.3 Inv
iface MIXER
name 'Mono Out Mux'
value Vmid
}
control.97 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 Stereo
comment.item.1 Left
comment.item.2 Right
comment.item.3 Mute
iface MIXER
name 'Capture Mono Mux'
value Mute
}
control.98 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 Stereo
comment.item.1 'Mic 1'
comment.item.2 'Mic 2'
comment.item.3 Mute
iface MIXER
name 'Sidetone Mux'
value Mute
}
control.99 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 Stereo
comment.item.1 Left
comment.item.2 Right
comment.item.3 Mute
iface MIXER
name 'Capture Headphone Mux'
value Mute
}
control.100 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 Headphone
comment.item.1 Mic
comment.item.2 Line
comment.item.3 Headset
comment.item.4 Off
iface MIXER
name 'Jack Function'
value Headphone
}
control.101 {
comment.access 'read write'
comment.type ENUMERATED
comment.count 1
comment.item.0 On
comment.item.1 Off
iface MIXER
name 'Speaker Function'
value On
}
}
[-- Attachment #3: Type: text/plain, Size: 160 bytes --]
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-22 18:47 Problem setting mixer switch with amixer/alsactl Oliver Ford
2008-10-22 20:57 ` Mark Brown
@ 2008-10-23 13:27 ` Mark Brown
2008-10-23 13:56 ` Oliver Ford
1 sibling, 1 reply; 26+ messages in thread
From: Mark Brown @ 2008-10-23 13:27 UTC (permalink / raw)
To: Oliver Ford; +Cc: alsa-devel
On Wed, Oct 22, 2008 at 07:47:20PM +0100, Oliver Ford wrote:
> Currently I'm setting up the audio path with a small script using amixer:
> amixer cset numid=90 2 # Out4 Mux = Inv2
BTW, when posting stuff with amixer please use the plain text version of
the control name rather than the numeric ID - it makes life very much
easier.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-23 13:27 ` Mark Brown
@ 2008-10-23 13:56 ` Oliver Ford
2008-10-23 14:01 ` Mark Brown
0 siblings, 1 reply; 26+ messages in thread
From: Oliver Ford @ 2008-10-23 13:56 UTC (permalink / raw)
To: Mark Brown; +Cc: alsa-devel
Mark Brown wrote:
> BTW, when posting stuff with amixer please use the plain text version of
> the control name rather than the numeric ID - it makes life very much
> easier.
>
Ok, will do. This also reminds me of something that might help...
The offending mixer switch has the truncated text name 'Speaker Mixer
PCM Playback Swit' under amixer but it obviously is supposed to be
'Switch' on the end. I don't know if that might somehow cause problems?
Oliver
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-22 22:56 ` Oliver Ford
@ 2008-10-23 14:00 ` Mark Brown
2008-10-23 14:07 ` Oliver Ford
0 siblings, 1 reply; 26+ messages in thread
From: Mark Brown @ 2008-10-23 14:00 UTC (permalink / raw)
To: Oliver Ford; +Cc: alsa-devel
On Wed, Oct 22, 2008 at 11:56:49PM +0100, Oliver Ford wrote:
> Mark Brown wrote:
> >Please send an alsactl save file with the offending configuration
>
> Attached.
> I saved this file when the audio was working (i.e having turned the
> offending control on with alsamixer) but restoring it stops it working.
OK, thanks. I've had a brief look at this here but so far as I can tell
I'm not able to see these problems on my system. I am using a
completely different machine, though, with different hardware and I
haven't checked through your configuration in detail. I'll have a more
detailed look early next week.
> No unusual dmesg output, the apps think nothing is wrong.
> It seems that just the offending control (or the actual DACL/R -> SPKMIX
> mixer channel) stops working. I can still get audio through the
but only via amixer, yes?
One other thing that would be useful would be to put trace which logs
the register writes in ac97_write() in the driver and then try testing
both using alsamixer and then amixer to do the final enable of the
Speaker Mixer PCM Playback Switch.
> state.hpipaq214 {
> control.1 {
> comment.access 'read write'
> comment.type INTEGER
> comment.count 1
> comment.range '0 - 31'
> iface MIXER
> name 'Speaker Playback Volume'
> value 1
> }
That's rather low...
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-23 13:56 ` Oliver Ford
@ 2008-10-23 14:01 ` Mark Brown
2008-10-23 17:45 ` Robert Jarzmik
0 siblings, 1 reply; 26+ messages in thread
From: Mark Brown @ 2008-10-23 14:01 UTC (permalink / raw)
To: Oliver Ford; +Cc: alsa-devel
On Thu, Oct 23, 2008 at 02:56:42PM +0100, Oliver Ford wrote:
> The offending mixer switch has the truncated text name 'Speaker Mixer
> PCM Playback Swit' under amixer but it obviously is supposed to be
> 'Switch' on the end. I don't know if that might somehow cause problems?
This is normal - shouldn't be an issue except in UI terms, ALSA limits
the length of names.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-23 14:00 ` Mark Brown
@ 2008-10-23 14:07 ` Oliver Ford
2008-10-23 22:55 ` Oliver Ford
[not found] ` <4900F6D2.6030305@oliford.co.uk>
0 siblings, 2 replies; 26+ messages in thread
From: Oliver Ford @ 2008-10-23 14:07 UTC (permalink / raw)
To: Mark Brown; +Cc: alsa-devel
Mark Brown wrote:
> OK, thanks. I've had a brief look at this here but so far as I can tell
> I'm not able to see these problems on my system. I am using a
> completely different machine, though, with different hardware and I
> haven't checked through your configuration in detail. I'll have a more
> detailed look early next week.
>
>
Ok, thanks. I'll keep poking around and see if I can find anything.
>> No unusual dmesg output, the apps think nothing is wrong.
>> It seems that just the offending control (or the actual DACL/R -> SPKMIX
>> mixer channel) stops working. I can still get audio through the
>>
>
> but only via amixer, yes?
>
Yes, It only stops working when the mixer switch is changed with amixer.
> One other thing that would be useful would be to put trace which logs
> the register writes in ac97_write() in the driver and then try testing
> both using alsamixer and then amixer to do the final enable of the
> Speaker Mixer PCM Playback Switch.
>
I already have the register writes outputted, I'll compare the logs tonight.
>
>> name 'Speaker Playback Volume'
>> value 1
>> }
>>
>
> That's rather low...
>
Yes it is, well spotted, I look at that tonight as well.
Thanks for the help,
Oliver
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-23 14:01 ` Mark Brown
@ 2008-10-23 17:45 ` Robert Jarzmik
2008-10-24 17:25 ` Mark Brown
0 siblings, 1 reply; 26+ messages in thread
From: Robert Jarzmik @ 2008-10-23 17:45 UTC (permalink / raw)
To: Mark Brown; +Cc: alsa-devel, Oliver Ford
Mark Brown <broonie@sirena.org.uk> writes:
> On Thu, Oct 23, 2008 at 02:56:42PM +0100, Oliver Ford wrote:
>
>> The offending mixer switch has the truncated text name 'Speaker Mixer
>> PCM Playback Swit' under amixer but it obviously is supposed to be
>> 'Switch' on the end. I don't know if that might somehow cause problems?
>
> This is normal - shouldn't be an issue except in UI terms, ALSA limits
> the length of names.
Mark, I don't think that's true.
I had that problem several monthes ago (remember my patch about alsa controls
length ?).
Do you remember that patch, which went into asoc-v2 ? :
--
Robert
>From a1b99c3bcef6bf4773e9b43335fe1f91424674c6 Mon Sep 17 00:00:00 2001
From: Robert Jarzmik <rjarzmik@free.fr>
Date: Sun, 16 Mar 2008 22:48:17 +0100
Subject: [PATCH] Correct dapm controls length.
Dapm control names should follow alsa standard, which
defines controls name's length to 44 and not 32.
Signed-off-by: Robert Jarzmik <rjarzmik@free.fr>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
sound/soc/soc-dapm.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index 4b03e3f..a61024c 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -281,7 +281,7 @@ static int dapm_new_mixer(struct snd_soc_card *soc_card,
struct snd_soc_dapm_widget *w)
{
int i, ret = 0;
- char name[32];
+ char name[44];
struct snd_soc_dapm_path *path;
/* add kcontrol */
@@ -295,7 +295,7 @@ static int dapm_new_mixer(struct snd_soc_card *soc_card,
continue;
/* add dapm control with long name */
- snprintf(name, 32, "%s %s", w->name, w->kcontrols[i].name);
+ snprintf(name, 44, "%s %s", w->name, w->kcontrols[i].name);
path->long_name = kstrdup (name, GFP_KERNEL);
if (path->long_name == NULL)
return -ENOMEM;
--
1.5.6.5
^ permalink raw reply related [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-23 14:07 ` Oliver Ford
@ 2008-10-23 22:55 ` Oliver Ford
2008-10-27 20:44 ` Mark Brown
[not found] ` <4900F6D2.6030305@oliford.co.uk>
1 sibling, 1 reply; 26+ messages in thread
From: Oliver Ford @ 2008-10-23 22:55 UTC (permalink / raw)
To: Mark Brown; +Cc: alsa-devel
[-- Attachment #1: Type: text/plain, Size: 1297 bytes --]
Oliver Ford wrote:
>> name 'Speaker Playback Volume'
>> value 1
>> }
>>
This is unrelated, I have just left it there from playing around.
>
>> One other thing that would be useful would be to put trace which logs
>> the register writes in ac97_write() in the driver and then try testing
>> both using alsamixer and then amixer to do the final enable of the
>> Speaker Mixer PCM Playback Switch.
>>
Well...
In terms of the control's direct effect, setting it in alsamixer gives:
pxa2xx_ac97_write: 0c = af08
setting it in amixer:
pxa2xx_ac97_write: 0c = af09
Am I right in understanding that setting all the controls in amixer
doesn't actually enable the control in the codec chip at that time but
that the powering on/off is done by soc-dapm.c when the the DAC is
actually enabled when playing some audio? This appears to be what is
happening when it does work (looking at the log). I hadn't realised this.
However, after running the offending amixer command this no longer
happens. It seems that the dapm_power_widgets() function determines that
the DAC is off and so doesn't power any widgets on at all.
I've put some debugging in pxa2xx-ac97-write and in dapm_power_widgets()
and the log is attached (stripped of non-audio stuff).
Oliver
[-- Attachment #2: consolelog-dapm-and-ac97regs-amixer-fail.txt --]
[-- Type: text/plain, Size: 2898 bytes --]
Clean boot...
** run speaker.sh setup without PCM->speaker setting... **
pxa2xx_ac97_write: 000c = ef08
pxa2xx_ac97_write: 001c = 0002
pxa2xx_ac97_write: 001c = 1802
pxa2xx_ac97_write: 001e = 0800
pxa2xx_ac97_write: 0006 = 0081
pxa2xx_ac97_write: 0002 = 0080
** run alsamixer, set PCM->speaker on: **
pxa2xx_ac97_write: 000c = af08
# aplay /stuff/400Hz-wav.wav
+hpipaq214_startup()
hpipaq214-audio: Enabling iPAQ Speaker...
hpipaq214_startup, gpio96 -> on
-hpipaq214_startup()
Playing WAVE '/stuff/400Hz-wav.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono
pxa2xx_ac97_write: 002a = 0411
pxa2xx_ac97_write: 002c = ac44
DAPM: Path Widget 'DAC Inv Mux 2': off --> on
DAPM: Path Widget 'Out 4 Mux': off --> on
DAPM: Path Widget 'Left Speaker Out Mux': off --> on
DAPM: DAC Widget 'Right DAC': off --> on (w->active==1)
pxa2xx_ac97_write: 003c = 3abf
DAPM: DAC Widget 'Left DAC': off --> on (w->active==1)
pxa2xx_ac97_write: 003c = 3a3f
DAPM: Path Widget 'AC97 Mixer': off --> on
DAPM: Path Widget 'Speaker Mixer': off --> on
pxa2xx_ac97_write: 003c = 3a3d
DAPM: Path Widget 'Out 4': off --> on
pxa2xx_ac97_write: 003e = efff
DAPM: Path Widget 'Left Speaker': off --> on
pxa2xx_ac97_write: 003e = eeff
freq changed, set PCD to 5 (LCCR3 = 04700005, LCCR4 = 80000000)
DAPM: Path Widget 'iPAQ Speaker': off --> on
pxa2xx_ac97_write: 003c = 1a3d
hpipaq214_shutdown, gpio96 -> off
** aplay exits. **
** ... few seconds delay ... **
DAPM: Path Widget 'iPAQ Speaker': on --> off
DAPM: Path Widget 'Out 4': on --> off
pxa2xx_ac97_write: 003e = feff
DAPM: Path Widget 'Left Speaker': on --> off
pxa2xx_ac97_write: 003e = ffff
DAPM: Path Widget 'AC97 Mixer': on --> off
DAPM: Path Widget 'Speaker Mixer': on --> off
pxa2xx_ac97_write: 003c = 1a3f
DAPM: Path Widget 'Right DAC': on --> off
pxa2xx_ac97_write: 003c = 1a7f
DAPM: Path Widget 'Left DAC': on --> off
pxa2xx_ac97_write: 003c = 1aff
DAPM: Path Widget 'DAC Inv Mux 2': on --> off
DAPM: Path Widget 'Out 4 Mux': on --> off
DAPM: Path Widget 'Left Speaker Out Mux': on --> off
pxa2xx_ac97_write: 003c = 1aff
pxa2xx_ac97_write: 0026 = 0000
** all quiet **
#
#
# amixer cset numid=62 1
pxa2xx_ac97_write: 000c = af09
numid=62,iface=MIXER,name='Speaker Mixer PCM Playback Swit'
; type=BOOLEAN,access=rw---,values=1
: values=on
# aplay /stuff/400Hz-wav.wav
+hpipaq214_startup()
hpipaq214-audio: Enabling iPAQ Speaker...
hpipaq214_startup, gpio96 -> on
-hpipaq214_startup()
Playing WAVE '/stuff/400Hz-wav.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono
freq changed, set PCD to 5 (LCCR3 = 04700005, LCCR4 = 80000000)
pxa2xx_ac97_write: 002a = 0411
pxa2xx_ac97_write: 002c = ac44
DAPM: DAC Widget 'Right DAC': off --> off (w->active==1)
DAPM: DAC Widget 'Left DAC': off --> off (w->active==1)
pxa2xx_ac97_write: 003c = 1aff
hpipaq214_shutdown, gpio96 -> off
#
#
pxa2xx_ac97_write: 003c = 1aff
pxa2xx_ac97_write: 0026 = 0000
[-- Attachment #3: Type: text/plain, Size: 160 bytes --]
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
[not found] ` <4900F6D2.6030305@oliford.co.uk>
@ 2008-10-23 23:54 ` Mark Brown
2008-10-24 17:26 ` Mark Brown
1 sibling, 0 replies; 26+ messages in thread
From: Mark Brown @ 2008-10-23 23:54 UTC (permalink / raw)
To: Oliver Ford; +Cc: alsa-devel@alsa-project.org
On 23 Oct 2008, at 23:12, Oliver Ford <oliford@oliford.co.uk> wrote:
> Oliver Ford wrote:
>
>>> name 'Speaker Playback Volume'
>>> value 1
>>> }
>>>
> This is unrelated, I have just left it there from playing around.
>
>
>>
>>> One other thing that would be useful would be to put trace which
>>> logs
>>> the register writes in ac97_write() in the driver and then try
>>> testing
>>> both using alsamixer and then amixer to do the final enable of the
>>> Speaker Mixer PCM Playback Switch.
>>>
> Well...
>
> In terms of the control's direct effect, setting it in alsamixer
> gives:
> pxa2xx_ac97_write: 0c = af08
>
> setting it in amixer:
> pxa2xx_ac97_write: 0c = af09
>
>
>
> Am I right in understanding that setting all the controls in amixer
> doesn't actually enable the control in the codec chip at that time
> but that the powering on/off is done by soc-dapm.c when the the DAC
> is actually enabled when playing some audio? This appears to be what
> is happening when it does work (looking at the log). I hadn't
> realised this.
>
> However, after running the offending amixer command this no longer
> happens. It seems that the dapm_power_widgets() function determines
> that the DAC is off and so doesn't power any widgets on at all.
>
> I've put some debugging in pxa2xx-ac97-write and in
> dapm_power_widgets() and the log is attached (stripped of non-audio
> stuff).
>
>
>
> Oliver
>
> Clean boot...
>
>
> ** run speaker.sh setup without PCM->speaker setting... **
> pxa2xx_ac97_write: 000c = ef08
> pxa2xx_ac97_write: 001c = 0002
> pxa2xx_ac97_write: 001c = 1802
> pxa2xx_ac97_write: 001e = 0800
> pxa2xx_ac97_write: 0006 = 0081
> pxa2xx_ac97_write: 0002 = 0080
>
> ** run alsamixer, set PCM->speaker on: **
> pxa2xx_ac97_write: 000c = af08
>
>
> # aplay /stuff/400Hz-wav.wav
> +hpipaq214_startup()
> hpipaq214-audio: Enabling iPAQ Speaker...
> hpipaq214_startup, gpio96 -> on
> -hpipaq214_startup()
>
> Playing WAVE '/stuff/400Hz-wav.wav' : Signed 16 bit Little Endian,
> Rate 44100 Hz, Mono
> pxa2xx_ac97_write: 002a = 0411
> pxa2xx_ac97_write: 002c = ac44
> DAPM: Path Widget 'DAC Inv Mux 2': off --> on
> DAPM: Path Widget 'Out 4 Mux': off --> on
> DAPM: Path Widget 'Left Speaker Out Mux': off --> on
> DAPM: DAC Widget 'Right DAC': off --> on (w->active==1)
> pxa2xx_ac97_write: 003c = 3abf
> DAPM: DAC Widget 'Left DAC': off --> on (w->active==1)
> pxa2xx_ac97_write: 003c = 3a3f
> DAPM: Path Widget 'AC97 Mixer': off --> on
> DAPM: Path Widget 'Speaker Mixer': off --> on
> pxa2xx_ac97_write: 003c = 3a3d
> DAPM: Path Widget 'Out 4': off --> on
> pxa2xx_ac97_write: 003e = efff
> DAPM: Path Widget 'Left Speaker': off --> on
> pxa2xx_ac97_write: 003e = eeff
> freq changed, set PCD to 5 (LCCR3 = 04700005, LCCR4 = 80000000)
> DAPM: Path Widget 'iPAQ Speaker': off --> on
> pxa2xx_ac97_write: 003c = 1a3d
> hpipaq214_shutdown, gpio96 -> off
>
> ** aplay exits. **
>
> ** ... few seconds delay ... **
>
> DAPM: Path Widget 'iPAQ Speaker': on --> off
> DAPM: Path Widget 'Out 4': on --> off
> pxa2xx_ac97_write: 003e = feff
> DAPM: Path Widget 'Left Speaker': on --> off
> pxa2xx_ac97_write: 003e = ffff
> DAPM: Path Widget 'AC97 Mixer': on --> off
> DAPM: Path Widget 'Speaker Mixer': on --> off
> pxa2xx_ac97_write: 003c = 1a3f
> DAPM: Path Widget 'Right DAC': on --> off
> pxa2xx_ac97_write: 003c = 1a7f
> DAPM: Path Widget 'Left DAC': on --> off
> pxa2xx_ac97_write: 003c = 1aff
> DAPM: Path Widget 'DAC Inv Mux 2': on --> off
> DAPM: Path Widget 'Out 4 Mux': on --> off
> DAPM: Path Widget 'Left Speaker Out Mux': on --> off
> pxa2xx_ac97_write: 003c = 1aff
> pxa2xx_ac97_write: 0026 = 0000
>
>
> ** all quiet **
>
> #
> #
> # amixer cset numid=62 1
> pxa2xx_ac97_write: 000c = af09
> numid=62,iface=MIXER,name='Speaker Mixer PCM Playback Swit'
> ; type=BOOLEAN,access=rw---,values=1
> : values=on
>
>
>
> # aplay /stuff/400Hz-wav.wav
> +hpipaq214_startup()
> hpipaq214-audio: Enabling iPAQ Speaker...
> hpipaq214_startup, gpio96 -> on
> -hpipaq214_startup()
>
> Playing WAVE '/stuff/400Hz-wav.wav' : Signed 16 bit Little Endian,
> Rate 44100 Hz, Mono
> freq changed, set PCD to 5 (LCCR3 = 04700005, LCCR4 = 80000000)
> pxa2xx_ac97_write: 002a = 0411
> pxa2xx_ac97_write: 002c = ac44
> DAPM: DAC Widget 'Right DAC': off --> off (w->active==1)
> DAPM: DAC Widget 'Left DAC': off --> off (w->active==1)
> pxa2xx_ac97_write: 003c = 1aff
> hpipaq214_shutdown, gpio96 -> off
> #
> #
> pxa2xx_ac97_write: 003c = 1aff
> pxa2xx_ac97_write: 0026 = 0000
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-23 17:45 ` Robert Jarzmik
@ 2008-10-24 17:25 ` Mark Brown
2008-10-24 19:09 ` Robert Jarzmik
0 siblings, 1 reply; 26+ messages in thread
From: Mark Brown @ 2008-10-24 17:25 UTC (permalink / raw)
To: Robert Jarzmik; +Cc: alsa-devel, Oliver Ford
On Thu, Oct 23, 2008 at 07:45:20PM +0200, Robert Jarzmik wrote:
> Mark Brown <broonie@sirena.org.uk> writes:
> > This is normal - shouldn't be an issue except in UI terms, ALSA limits
> > the length of names.
> Mark, I don't think that's true.
> I had that problem several monthes ago (remember my patch about alsa controls
> length ?).
> Do you remember that patch, which went into asoc-v2 ? :
All this patch does is change the limit, there is still a limit on the
length of control names in ALSA but as I say it's purely a cosmetic issue.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
[not found] ` <4900F6D2.6030305@oliford.co.uk>
2008-10-23 23:54 ` Mark Brown
@ 2008-10-24 17:26 ` Mark Brown
1 sibling, 0 replies; 26+ messages in thread
From: Mark Brown @ 2008-10-24 17:26 UTC (permalink / raw)
To: Oliver Ford; +Cc: alsa-devel
On Thu, Oct 23, 2008 at 11:12:34PM +0100, Oliver Ford wrote:
> Am I right in understanding that setting all the controls in amixer
> doesn't actually enable the control in the codec chip at that time but
> that the powering on/off is done by soc-dapm.c when the the DAC is
> actually enabled when playing some audio? This appears to be what is
> happening when it does work (looking at the log). I hadn't realised this.
Sort of. The power control happens whenever any power-related control
changes and whenever audio is started or stopped.
> I've put some debugging in pxa2xx-ac97-write and in dapm_power_widgets()
> and the log is attached (stripped of non-audio stuff).
I'll have a look at these on Monday.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-24 17:25 ` Mark Brown
@ 2008-10-24 19:09 ` Robert Jarzmik
2008-10-24 20:32 ` Mark Brown
2008-10-28 13:10 ` Mark Brown
0 siblings, 2 replies; 26+ messages in thread
From: Robert Jarzmik @ 2008-10-24 19:09 UTC (permalink / raw)
To: Mark Brown; +Cc: alsa-devel, Oliver Ford
Mark Brown <broonie@sirena.org.uk> writes:
> On Thu, Oct 23, 2008 at 07:45:20PM +0200, Robert Jarzmik wrote:
>> Mark Brown <broonie@sirena.org.uk> writes:
> All this patch does is change the limit, there is still a limit on the
> length of control names in ALSA but as I say it's purely a cosmetic issue.
I don't quite agree on the "cosmetic".
If I recall correctly, that name is used in dapm path setup. If the name is
incorrect (truncated), some dapm elements are not switched on. I'm speaking from
memory, I'll try to browse my git repository to track it back. Notice that I'm
really busy ATM, so I don't have enough manpower to test immediatly.
I'll try to revert my patch and see the effects at the end of the next week.
--
Robert
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-24 19:09 ` Robert Jarzmik
@ 2008-10-24 20:32 ` Mark Brown
2008-10-28 13:10 ` Mark Brown
1 sibling, 0 replies; 26+ messages in thread
From: Mark Brown @ 2008-10-24 20:32 UTC (permalink / raw)
To: Robert Jarzmik; +Cc: alsa-devel, Oliver Ford
On Fri, Oct 24, 2008 at 09:09:33PM +0200, Robert Jarzmik wrote:
> If I recall correctly, that name is used in dapm path setup. If the name is
> incorrect (truncated), some dapm elements are not switched on. I'm speaking from
> memory, I'll try to browse my git repository to track it back. Notice that I'm
> really busy ATM, so I don't have enough manpower to test immediatly.
Hrm, that's possible I suppose though I don't recall it being mentioned
at the time and can't see any truncations that would make any difference
for here.
> I'll try to revert my patch and see the effects at the end of the next week.
I should be able to look into this myself on Monday.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-23 22:55 ` Oliver Ford
@ 2008-10-27 20:44 ` Mark Brown
0 siblings, 0 replies; 26+ messages in thread
From: Mark Brown @ 2008-10-27 20:44 UTC (permalink / raw)
To: Oliver Ford; +Cc: alsa-devel
On Thu, Oct 23, 2008 at 11:55:05PM +0100, Oliver Ford wrote:
> In terms of the control's direct effect, setting it in alsamixer gives:
> pxa2xx_ac97_write: 0c = af08
> setting it in amixer:
> pxa2xx_ac97_write: 0c = af09
On the one hand, that's odd. On the other hand, the low bit of register
0xc is just a volume control for the right DAC so shouldn't make any
odds really.
> However, after running the offending amixer command this no longer
> happens. It seems that the dapm_power_widgets() function determines that
> the DAC is off and so doesn't power any widgets on at all.
Well, it determines that there's not a complete path so it doesn't
bother powering anything up which isn't *quite* the same thing. It does
look like that's what's happening here - I can reproduce similar
behaviour here, though it's not quite the same system. I'll try to fix
this tomorrow.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-24 19:09 ` Robert Jarzmik
2008-10-24 20:32 ` Mark Brown
@ 2008-10-28 13:10 ` Mark Brown
2008-10-28 15:34 ` Mark Brown
1 sibling, 1 reply; 26+ messages in thread
From: Mark Brown @ 2008-10-28 13:10 UTC (permalink / raw)
To: Robert Jarzmik; +Cc: alsa-devel, Oliver Ford
On Fri, Oct 24, 2008 at 09:09:33PM +0200, Robert Jarzmik wrote:
> Mark Brown <broonie@sirena.org.uk> writes:
> > All this patch does is change the limit, there is still a limit on the
> > length of control names in ALSA but as I say it's purely a cosmetic issue.
> I don't quite agree on the "cosmetic".
> If I recall correctly, that name is used in dapm path setup. If the name is
> incorrect (truncated), some dapm elements are not switched on. I'm speaking from
> memory, I'll try to browse my git repository to track it back. Notice that I'm
> really busy ATM, so I don't have enough manpower to test immediatly.
It looks like you might've been right after all. I still can't see
where this makes a difference to the speaker paths but the patch below
seems to resolve the issues I'm seeing here.
Oliver, could you test the patch below please?
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index 28da235..fdb4d2c 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -293,7 +293,7 @@ static int dapm_new_mixer(struct snd_soc_codec *codec,
struct snd_soc_dapm_widget *w)
{
int i, ret = 0;
- char name[32];
+ size_t name_len;
struct snd_soc_dapm_path *path;
/* add kcontrol */
@@ -307,11 +307,16 @@ static int dapm_new_mixer(struct snd_soc_codec *codec,
continue;
/* add dapm control with long name */
- snprintf(name, 32, "%s %s", w->name, w->kcontrols[i].name);
- path->long_name = kstrdup (name, GFP_KERNEL);
+ name_len = 2 + strlen(w->name)
+ + strlen(w->kcontrols[i].name);
+ path->long_name = kmalloc(name_len, GFP_KERNEL);
if (path->long_name == NULL)
return -ENOMEM;
+ snprintf(path->long_name, name_len, "%s %s",
+ w->name, w->kcontrols[i].name);
+ path->long_name[name_len - 1] = '\0';
+
path->kcontrol = snd_soc_cnew(&w->kcontrols[i], w,
path->long_name);
ret = snd_ctl_add(codec->card, path->kcontrol);
^ permalink raw reply related [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-28 13:10 ` Mark Brown
@ 2008-10-28 15:34 ` Mark Brown
2008-10-28 15:41 ` Takashi Iwai
2008-10-28 21:51 ` Oliver Ford
0 siblings, 2 replies; 26+ messages in thread
From: Mark Brown @ 2008-10-28 15:34 UTC (permalink / raw)
To: Robert Jarzmik; +Cc: alsa-devel, Oliver Ford
On Tue, Oct 28, 2008 at 01:10:31PM +0000, Mark Brown wrote:
> It looks like you might've been right after all. I still can't see
> where this makes a difference to the speaker paths but the patch below
> seems to resolve the issues I'm seeing here.
> Oliver, could you test the patch below please?
Gah, sorry - it doesn't help, I was masking the problem another way.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-28 15:34 ` Mark Brown
@ 2008-10-28 15:41 ` Takashi Iwai
2008-10-28 15:48 ` Mark Brown
2008-10-28 21:51 ` Oliver Ford
1 sibling, 1 reply; 26+ messages in thread
From: Takashi Iwai @ 2008-10-28 15:41 UTC (permalink / raw)
To: Mark Brown; +Cc: alsa-devel, Robert Jarzmik, Oliver Ford
At Tue, 28 Oct 2008 15:34:36 +0000,
Mark Brown wrote:
>
> On Tue, Oct 28, 2008 at 01:10:31PM +0000, Mark Brown wrote:
>
> > It looks like you might've been right after all. I still can't see
> > where this makes a difference to the speaker paths but the patch below
> > seems to resolve the issues I'm seeing here.
>
> > Oliver, could you test the patch below please?
>
> Gah, sorry - it doesn't help, I was masking the problem another way.
... and I think soc-dapm should warn if the string is too long, at
least, so that you can notice and fix them.
Takashi
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-28 15:41 ` Takashi Iwai
@ 2008-10-28 15:48 ` Mark Brown
2008-10-28 15:54 ` Takashi Iwai
0 siblings, 1 reply; 26+ messages in thread
From: Mark Brown @ 2008-10-28 15:48 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel, Robert Jarzmik, Oliver Ford
On Tue, Oct 28, 2008 at 04:41:33PM +0100, Takashi Iwai wrote:
> Mark Brown wrote:
> > Gah, sorry - it doesn't help, I was masking the problem another way.
> ... and I think soc-dapm should warn if the string is too long, at
> least, so that you can notice and fix them.
Well, with the patch supplied (which I intend to push anyway) ASoC won't
enforce any limit and will just pass the string onto the ALSA core -
probably best to warn in snd_ctl_new1(). I'll take a look.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-28 15:48 ` Mark Brown
@ 2008-10-28 15:54 ` Takashi Iwai
0 siblings, 0 replies; 26+ messages in thread
From: Takashi Iwai @ 2008-10-28 15:54 UTC (permalink / raw)
To: Mark Brown; +Cc: alsa-devel, Robert Jarzmik, Oliver Ford
At Tue, 28 Oct 2008 15:48:57 +0000,
Mark Brown wrote:
>
> On Tue, Oct 28, 2008 at 04:41:33PM +0100, Takashi Iwai wrote:
> > Mark Brown wrote:
>
> > > Gah, sorry - it doesn't help, I was masking the problem another way.
>
> > ... and I think soc-dapm should warn if the string is too long, at
> > least, so that you can notice and fix them.
>
> Well, with the patch supplied (which I intend to push anyway) ASoC won't
> enforce any limit and will just pass the string onto the ALSA core -
> probably best to warn in snd_ctl_new1(). I'll take a look.
Agreed, it'd be a good place.
Takashi
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-28 15:34 ` Mark Brown
2008-10-28 15:41 ` Takashi Iwai
@ 2008-10-28 21:51 ` Oliver Ford
2008-10-29 14:53 ` Mark Brown
2008-10-29 16:04 ` Mark Brown
1 sibling, 2 replies; 26+ messages in thread
From: Oliver Ford @ 2008-10-28 21:51 UTC (permalink / raw)
To: Mark Brown; +Cc: alsa-devel, Robert Jarzmik
Mark Brown wrote:
> On Tue, Oct 28, 2008 at 01:10:31PM +0000, Mark Brown wrote:
>
>
>> It looks like you might've been right after all. I still can't see
>> where this makes a difference to the speaker paths but the patch below
>> seems to resolve the issues I'm seeing here.
>>
>
>
>> Oliver, could you test the patch below please?
>>
>
> Gah, sorry - it doesn't help, I was masking the problem another way.
>
Ok, well I tried it anyway and it doesn't solve the problem.
I've done a lot more tracing and think I may have found something
relevant. I'm not entirely sure what is supposed to be happening so
can't figure it out myself, but maybe you will know...
When turning the PCM->Speaker mixer on and off in alsamixer (before its
broken) the mixer's widget->value seems to flick between 0x4000 and
0x0000. After breaking it with amixer it flicks between 0x4001 and
0x4000, both of which fire the lines:
if (val)
/* new connection */
path->connect = invert ? 0:1;
in dapm_mixer_update_power().
I've put some debugging to report whats happening to path->connect in
dapm_mixer_update_power() and this is what happens:
ON in alsamixer when working:
+dapm_mixer_update_power(kcontrol=Speaker Mixer PCM Playback Switch,
reg=0000000c, val=00000000, val_mask=00004001, invert=00000001)
found path for kcontrol: name='PCM Playback Switch',
long_name='Speaker Mixer PCM Playback Switch'
val=false: path->connect: 0 --> 1
-dapm_mixer_update_power()
OFF in alsamixer when working:
+dapm_mixer_update_power(kcontrol=Speaker Mixer PCM Playback Switch,
reg=0000000c, val=00004000, val_mask=00004001, invert=00000001)
found path for kcontrol: name='PCM Playback Switch',
long_name='Speaker Mixer PCM Playback Switch'
val=true: path->connect: 1 --> 0
-dapm_mixer_update_power()
Leaving it on in alsamixer and running the amixer on command. This happens:
+dapm_mixer_update_power(kcontrol=Speaker Mixer PCM Playback Switch,
reg=0000000c, val=00000001, val_mask=00004001, invert=00000001)
found path for kcontrol: name='PCM Playback Switch',
long_name='Speaker Mixer PCM Playback Switch'
val=true: path->connect: 1 --> 0
+dapm_power_widgets()
i.e it seems to turn it off?
From then on, any further attempts to turn it on in amixer give:
+dapm_mixer_update_power(kcontrol=Speaker Mixer PCM Playback Switch,
reg=0000000c, val=00004001, val_mask=00004001, invert=00000001)
found path for kcontrol: name='PCM Playback Switch',
long_name='Speaker Mixer PCM Playback Switch'
val=true: path->connect: 0 --> 0
+dapm_power_widgets()
Any further off/on toggling in alsamixer once broken just results in:
+dapm_mixer_update_power(kcontrol=Speaker Mixer PCM Playback Switch,
reg=0000000c, val=00004001, val_mask=00004001, invert=00000001)
found path for kcontrol: name='PCM Playback Switch',
long_name='Speaker Mixer PCM Playback Switch'
val=true: path->connect: 0 --> 0
+dapm_power_widgets()
+dapm_mixer_update_power(kcontrol=Speaker Mixer PCM Playback Switch,
reg=0000000c, val=00000001, val_mask=00004001, invert=00000001)
found path for kcontrol: name='PCM Playback Switch',
long_name='Speaker Mixer PCM Playback Switch'
val=true: path->connect: 0 --> 0
+dapm_power_widgets()
Does that give you any ideas of what happening on my system?
Thanks,
Oliver
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-28 21:51 ` Oliver Ford
@ 2008-10-29 14:53 ` Mark Brown
2008-10-29 16:04 ` Mark Brown
1 sibling, 0 replies; 26+ messages in thread
From: Mark Brown @ 2008-10-29 14:53 UTC (permalink / raw)
To: Oliver Ford; +Cc: alsa-devel, Robert Jarzmik
On Tue, Oct 28, 2008 at 09:51:02PM +0000, Oliver Ford wrote:
> Does that give you any ideas of what happening on my system?
Not more than I had already - that's the lowest level of the symptom,
DAPM doesn't think the speaker mixer has any active inputs so leaves it
and the output path from it off. Unfortunately I've not been able to
devote my full attention to this yet.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-28 21:51 ` Oliver Ford
2008-10-29 14:53 ` Mark Brown
@ 2008-10-29 16:04 ` Mark Brown
2008-10-30 11:40 ` Mark Brown
1 sibling, 1 reply; 26+ messages in thread
From: Mark Brown @ 2008-10-29 16:04 UTC (permalink / raw)
To: Oliver Ford; +Cc: alsa-devel, Robert Jarzmik
On Tue, Oct 28, 2008 at 09:51:02PM +0000, Oliver Ford wrote:
> Does that give you any ideas of what happening on my system?
OK, I see what the problem is now. The conversion to allow larger than
8 bits missed some things, causing the power control to look at
unrelated bits in the register when determining if the path is active.
I won't be able to fix it today since I have to go and get my eyes
examined (no wonder it took me so long to spot this!) but I expect I'll
have a patch tomorrow.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-29 16:04 ` Mark Brown
@ 2008-10-30 11:40 ` Mark Brown
2008-10-30 17:47 ` Oliver Ford
0 siblings, 1 reply; 26+ messages in thread
From: Mark Brown @ 2008-10-30 11:40 UTC (permalink / raw)
To: Oliver Ford; +Cc: alsa-devel, Robert Jarzmik
On Wed, Oct 29, 2008 at 04:04:51PM +0000, Mark Brown wrote:
> I won't be able to fix it today since I have to go and get my eyes
> examined (no wonder it took me so long to spot this!) but I expect I'll
> have a patch tomorrow.
Please try this, it resolves the problems I'm seeing here:
commit 9fafa720f6dd4a7a9476bef0d78fee14af401c14
Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
Date: Thu Oct 30 11:32:47 2008 +0000
ASoC: Fix mono controls after conversion to support full int masks
When ASoC was converted to support full int width masks SOC_SINGLE_VALUE()
omitted the assignment of rshift, causing the control operatins to report
some mono controls as stereo. This happened to work some of the time due
to a confusion between shift and min in snd_soc_info_volsw().
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
diff --git a/include/sound/soc.h b/include/sound/soc.h
index d33825d..da0040b 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -28,7 +28,8 @@
*/
#define SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert) \
((unsigned long)&(struct soc_mixer_control) \
- {.reg = xreg, .shift = xshift, .max = xmax, .invert = xinvert})
+ {.reg = xreg, .shift = xshift, .rshift = xshift, .max = xmax, \
+ .invert = xinvert})
#define SOC_SINGLE_VALUE_EXT(xreg, xmax, xinvert) \
((unsigned long)&(struct soc_mixer_control) \
{.reg = xreg, .max = xmax, .invert = xinvert})
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 0399fff..a17f864 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -1563,7 +1563,7 @@ int snd_soc_info_volsw(struct snd_kcontrol *kcontrol,
struct soc_mixer_control *mc =
(struct soc_mixer_control *)kcontrol->private_value;
int max = mc->max;
- unsigned int shift = mc->min;
+ unsigned int shift = mc->shift;
unsigned int rshift = mc->rshift;
if (max == 1)
^ permalink raw reply related [flat|nested] 26+ messages in thread
* Re: Problem setting mixer switch with amixer/alsactl.
2008-10-30 11:40 ` Mark Brown
@ 2008-10-30 17:47 ` Oliver Ford
0 siblings, 0 replies; 26+ messages in thread
From: Oliver Ford @ 2008-10-30 17:47 UTC (permalink / raw)
To: Mark Brown; +Cc: alsa-devel, Robert Jarzmik
Mark Brown wrote:
> Please try this, it resolves the problems I'm seeing here:
>
> commit 9fafa720f6dd4a7a9476bef0d78fee14af401c14
> Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
> Date: Thu Oct 30 11:32:47 2008 +0000
>
> ...
Yes, that seems to fix it.
Thanks for all your efforts in resolving this one.
Oliver
^ permalink raw reply [flat|nested] 26+ messages in thread
end of thread, other threads:[~2008-10-30 17:47 UTC | newest]
Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-10-22 18:47 Problem setting mixer switch with amixer/alsactl Oliver Ford
2008-10-22 20:57 ` Mark Brown
2008-10-22 22:56 ` Oliver Ford
2008-10-23 14:00 ` Mark Brown
2008-10-23 14:07 ` Oliver Ford
2008-10-23 22:55 ` Oliver Ford
2008-10-27 20:44 ` Mark Brown
[not found] ` <4900F6D2.6030305@oliford.co.uk>
2008-10-23 23:54 ` Mark Brown
2008-10-24 17:26 ` Mark Brown
2008-10-23 13:27 ` Mark Brown
2008-10-23 13:56 ` Oliver Ford
2008-10-23 14:01 ` Mark Brown
2008-10-23 17:45 ` Robert Jarzmik
2008-10-24 17:25 ` Mark Brown
2008-10-24 19:09 ` Robert Jarzmik
2008-10-24 20:32 ` Mark Brown
2008-10-28 13:10 ` Mark Brown
2008-10-28 15:34 ` Mark Brown
2008-10-28 15:41 ` Takashi Iwai
2008-10-28 15:48 ` Mark Brown
2008-10-28 15:54 ` Takashi Iwai
2008-10-28 21:51 ` Oliver Ford
2008-10-29 14:53 ` Mark Brown
2008-10-29 16:04 ` Mark Brown
2008-10-30 11:40 ` Mark Brown
2008-10-30 17:47 ` Oliver Ford
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.