cemysce
New Head-Fier
- Joined
- Jan 7, 2010
- Posts
- 8
- Likes
- 0
It took many hours of research over several days in order for me to figure out the latest ALSA configuration necessary for the Chaintech AV-710 in order to use the Wolfson DAC behind the Rear Surround jack, so I am going to summarize my findings, along with an asound.state, right here. Then I will post links to this thread in the other threads which I came upon throughout my research.
First, some basics: I am using Gentoo Linux with a 2.6.31 kernel and ALSA 1.0.20 (cat /proc/asound/version). After moving my AV-710 over to a newly built box, I discovered that the asound.state I had used on my previous box no longer worked. I would get the following error whenever alsactl attempted to restore the mixer settings from asound.state:
Code:
Any number of mistakes in asound.state can result in a similar error. My asound.state had been based on the one from vandemar.org [1]. I eventually found one link in this forum to an ALSA bug report [2]. It is an interesting read, and the asound.state attached to that bug report worked almost perfectly -- it still gave some errors when I copied it to /var/lib/alsa/asound.state and ran 'alsactl -f /var/lib/alsa/asound.state restore' but sound was finally working from the Rear Surround jack through the Wolfson DAC! In order to elliminate the errors, I brought down alsasound by running '/etc/init.d/alsasound stop', removed /var/lib/alsa/asound.state, then shutdown. I shutdown because I had observed at one point (maybe it was just in my mind, I never confirmed this) that although I restored sound with an asound.state that had previously not worked at all, sound continued to work. I assumed that the card itself has some sort of internal state which would be lost once it lost power for a short while, and so I shutdown and turned off the power supply to be sure, then left it off for a couple of minutes. Back on again, and fully booted up, I ran 'alsactl -f /var/lib/alsa/asound.state store' to save ALSA's default state for the card to a file. Since this default state produces no errors, I opened the now default /var/lib/alsa/asound.state and the asound.state from the bug report (the one which worked almost perfectly) and bit by bit tried to make /var/lib/alsa/asound.state like the one from the bug report, running 'alsactl -f /var/lib/alsa/asound.state restore' periodically. I came up with the following:
Code:
You'll notice that the following channels are muted and have the volume set to 0:
Also, Mic Boost and 3D Control are disabled, and 3D Control - Center and 3D Control - Depth have their volumes set to 0. I don't believe any of these channels/features have any impact on sound through the Wolfson DAC, so I disabled them to avoid confusion.
Capture Source must be set to Mix because it is the only source which includes the PCM channel. Capture Switch must also be true. Capture Volume can be 0 -- it still works. You will be using the PCM channel's volume control, and not this, but for an extra boost I suppose you could set this to its maximum value of 7, though I believe it was set to 0 in the bug report's asound.state because anything else might result in some sort of distortion (NOTE: I did not confirm this).
PCM must be true and it's volume must be >0. This is the volume control that you will be using.
I did not observe Mono Output Select to have any impact, but maybe it is important in some scenarios so I set it to Mix.
I don't believe Mic Select matters either -- I just left it at Mic1.
I did not observe Alternate Level to Surround Out, Downmix LFE and Center to Front, Downmix Surround to Front, or External Amplifier to have any impact, so I just set them all to false to avoid confusion.
Based on the bug report's asound.state, I added 64000, 88200, 96000, 176400, and 192000 to Multi Track Internal Clock in between 48000 and IEC958 Input. Despite this, I noticed that alsamixer still did not show these options, and that an 'alsactl -f /var/lib/alsa/asound.state store' would just remove them again. Maybe they are not needed and in fact do not work, or maybe they need to be set manually in order to work. I just left them. The option itself I set to 48000.
Multi Track Rate Locking is true in the bug report's asound.state, but I set it to false because I believe setting it to true will prevent an application from playing sound at a rate other than the internal clock setting. Multi Track Rate Reset is true in order to reset the rate back to the internal clock setting after the application closes the audio device.
H/W Playback Route and H/W Playback Route 1 must both be set to PCM Out, and IEC958 Playback Route and IEC958 Playback Route 1 must be set to H/W In 0 and H/W In 1 respectively, otherwise no Wolfson DAC! IEC958 Playback Switch appears to control the optical S/PDIF output. Plug a cable in there and observe the disconnected end -- with this set to true, the light will turn on. Since the configuration I've been describing won't work with this port anyway, might as well set this to false to save some power.
Apparently Multi Track Peak is a read-only option, which I take to mean that it isn't really an option and setting it to anything is meaningless. This may or may not be true. All I know is that I set all the values to 0 and didn't notice any change.
References:
[1] Original working asound.state: http://www.vandemar.org/asound.state
[2] ALSA bug report with an almost working asound.state attached (use Guest login link): 0002348: Chaintech AV-710 - High quality output doesn't work since alsa-driver 1.0.11
[3] Descriptions of some of the channels and options: Ice1724 - ALSA wiki which references Re: [Alsa-devel] ice1724 controls meaning
First, some basics: I am using Gentoo Linux with a 2.6.31 kernel and ALSA 1.0.20 (cat /proc/asound/version). After moving my AV-710 over to a newly built box, I discovered that the asound.state I had used on my previous box no longer worked. I would get the following error whenever alsactl attempted to restore the mixer settings from asound.state:
Code:
Code:
[left]Unknown hardware: "ICE1724" "ICEnsemble VT1616i" "AC97a:49434552" "0x1412" "0x1724" Hardware is initialized using a guess method[/left]
Any number of mistakes in asound.state can result in a similar error. My asound.state had been based on the one from vandemar.org [1]. I eventually found one link in this forum to an ALSA bug report [2]. It is an interesting read, and the asound.state attached to that bug report worked almost perfectly -- it still gave some errors when I copied it to /var/lib/alsa/asound.state and ran 'alsactl -f /var/lib/alsa/asound.state restore' but sound was finally working from the Rear Surround jack through the Wolfson DAC! In order to elliminate the errors, I brought down alsasound by running '/etc/init.d/alsasound stop', removed /var/lib/alsa/asound.state, then shutdown. I shutdown because I had observed at one point (maybe it was just in my mind, I never confirmed this) that although I restored sound with an asound.state that had previously not worked at all, sound continued to work. I assumed that the card itself has some sort of internal state which would be lost once it lost power for a short while, and so I shutdown and turned off the power supply to be sure, then left it off for a couple of minutes. Back on again, and fully booted up, I ran 'alsactl -f /var/lib/alsa/asound.state store' to save ALSA's default state for the card to a file. Since this default state produces no errors, I opened the now default /var/lib/alsa/asound.state and the asound.state from the bug report (the one which worked almost perfectly) and bit by bit tried to make /var/lib/alsa/asound.state like the one from the bug report, running 'alsactl -f /var/lib/alsa/asound.state restore' periodically. I came up with the following:
Code:
Code:
[left]state.AV710 { control.1 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'Front Playback Switch' value false } control.2 { comment.access 'read write' comment.type INTEGER comment.count 2 comment.range '0 - 31' iface MIXER name 'Front Playback Volume' value.0 0 value.1 0 } control.3 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'Center Playback Switch' value false } control.4 { comment.access 'read write' comment.type INTEGER comment.count 1 comment.range '0 - 31' iface MIXER name 'Center Playback Volume' value 0 } control.5 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'LFE Playback Switch' value false } control.6 { comment.access 'read write' comment.type INTEGER comment.count 1 comment.range '0 - 31' iface MIXER name 'LFE Playback Volume' value 0 } control.7 { comment.access 'read write' comment.type BOOLEAN comment.count 2 iface MIXER name 'Surround Playback Switch' value.0 false value.1 false } control.8 { comment.access 'read write' comment.type INTEGER comment.count 2 comment.range '0 - 31' iface MIXER name 'Surround Playback Volume' value.0 0 value.1 0 } control.9 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'Headphone Playback Switch' value false } control.10 { comment.access 'read write' comment.type INTEGER comment.count 2 comment.range '0 - 31' iface MIXER name 'Headphone Playback Volume' value.0 0 value.1 0 } control.11 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'Master Mono Playback Switch' value false } control.12 { comment.access 'read write' comment.type INTEGER comment.count 1 comment.range '0 - 31' iface MIXER name 'Master Mono Playback Volume' value 0 } control.13 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'PC Speaker Playback Switch' value false } control.14 { comment.access 'read write' comment.type INTEGER comment.count 1 comment.range '0 - 15' iface MIXER name 'PC Speaker Playback Volume' value 0 } control.15 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'Phone Playback Switch' value false } control.16 { comment.access 'read write' comment.type INTEGER comment.count 1 comment.range '0 - 31' iface MIXER name 'Phone Playback Volume' value 0 } control.17 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'Mic Playback Switch' value false } control.18 { comment.access 'read write' comment.type INTEGER comment.count 1 comment.range '0 - 31' iface MIXER name 'Mic Playback Volume' value 0 } control.19 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'Mic Boost (+20dB)' value false } control.20 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'Line Playback Switch' value false } control.21 { comment.access 'read write' comment.type INTEGER comment.count 2 comment.range '0 - 31' iface MIXER name 'Line Playback Volume' value.0 0 value.1 0 } control.22 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'CD Playback Switch' value false } control.23 { comment.access 'read write' comment.type INTEGER comment.count 2 comment.range '0 - 31' iface MIXER name 'CD Playback Volume' value.0 0 value.1 0 } control.24 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'Video Playback Switch' value false } control.25 { comment.access 'read write' comment.type INTEGER comment.count 2 comment.range '0 - 31' iface MIXER name 'Video Playback Volume' value.0 0 value.1 0 } control.26 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'Aux Playback Switch' value false } control.27 { comment.access 'read write' comment.type INTEGER comment.count 2 comment.range '0 - 31' iface MIXER name 'Aux Playback Volume' value.0 0 value.1 0 } control.28 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'PCM Playback Switch' value true } control.29 { comment.access 'read write' comment.type INTEGER comment.count 2 comment.range '0 - 31' iface MIXER name 'PCM Playback Volume' value.0 15 value.1 15 } control.30 { comment.access 'read write' comment.type ENUMERATED comment.count 2 comment.item.0 Mic comment.item.1 CD comment.item.2 Video comment.item.3 Aux comment.item.4 Line comment.item.5 Mix comment.item.6 'Mix Mono' comment.item.7 Phone iface MIXER name 'Capture Source' value.0 Mix value.1 Mix } control.31 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'Capture Switch' value true } control.32 { comment.access 'read write' comment.type INTEGER comment.count 2 comment.range '0 - 15' iface MIXER name 'Capture Volume' value.0 0 value.1 0 } control.33 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name '3D Control - Switch' value false } control.34 { comment.access 'read write' comment.type ENUMERATED comment.count 1 comment.item.0 Mix comment.item.1 Mic iface MIXER name 'Mono Output Select' value Mix } control.35 { comment.access 'read write' comment.type ENUMERATED comment.count 1 comment.item.0 Mic1 comment.item.1 Mic2 iface MIXER name 'Mic Select' value Mic1 } control.36 { comment.access 'read write' comment.type INTEGER comment.count 1 comment.range '0 - 15' iface MIXER name '3D Control - Center' value 0 } control.37 { comment.access 'read write' comment.type INTEGER comment.count 1 comment.range '0 - 15' iface MIXER name '3D Control - Depth' value 0 } control.38 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'Alternate Level to Surround Out' value false } control.39 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'Downmix LFE and Center to Front' value false } control.40 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'Downmix Surround to Front' value false } control.41 { comment.access 'read write' comment.type INTEGER comment.count 1 comment.range '0 - 31' iface MIXER name 'Master Playback Volume' value 0 } control.42 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'Master Playback Switch' value false } control.43 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'External Amplifier' value false } control.44 { comment.access read comment.type BYTES comment.count 52 iface CARD name 'ICE1724 EEPROM' value '172414121c01020210c1ff0000ff0000ff0000000101010001000000000000000000000000000000ff000000ff000000ff000000' } control.45 { comment.access 'read write' comment.type ENUMERATED comment.count 1 comment.item.0 '8000' comment.item.1 '9600' comment.item.2 '11025' comment.item.3 '12000' comment.item.4 '16000' comment.item.5 '22050' comment.item.6 '24000' comment.item.7 '32000' comment.item.8 '44100' comment.item.9 '48000' comment.item.10 '64000' comment.item.11 '88200' comment.item.12 '96000' comment.item.13 '176400' comment.item.14 '192000' comment.item.15 'IEC958 Input' iface MIXER name 'Multi Track Internal Clock' value '48000' } control.46 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'Multi Track Rate Locking' value false } control.47 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'Multi Track Rate Reset' value true } control.48 { comment.access 'read write' comment.type ENUMERATED comment.count 1 comment.item.0 'PCM Out' comment.item.1 'H/W In 0' comment.item.2 'H/W In 1' comment.item.3 'IEC958 In L' comment.item.4 'IEC958 In R' iface MIXER name 'H/W Playback Route' value 'PCM Out' } control.49 { comment.access 'read write' comment.type ENUMERATED comment.count 1 comment.item.0 'PCM Out' comment.item.1 'H/W In 0' comment.item.2 'H/W In 1' comment.item.3 'IEC958 In L' comment.item.4 'IEC958 In R' iface MIXER name 'H/W Playback Route' index 1 value 'PCM Out' } control.50 { comment.access read comment.type INTEGER comment.count 22 comment.range '0 - 255' iface MIXER name 'Multi Track Peak' value.0 0 value.1 0 value.2 0 value.3 0 value.4 0 value.5 0 value.6 0 value.7 0 value.8 0 value.9 0 value.10 0 value.11 0 value.12 0 value.13 0 value.14 0 value.15 0 value.16 0 value.17 0 value.18 0 value.19 0 value.20 0 value.21 0 } control.51 { comment.access 'read write' comment.type ENUMERATED comment.count 1 comment.item.0 'PCM Out' comment.item.1 'H/W In 0' comment.item.2 'H/W In 1' comment.item.3 'IEC958 In L' comment.item.4 'IEC958 In R' iface MIXER name 'IEC958 Playback Route' value 'H/W In 0' } control.52 { comment.access 'read write' comment.type ENUMERATED comment.count 1 comment.item.0 'PCM Out' comment.item.1 'H/W In 0' comment.item.2 'H/W In 1' comment.item.3 'IEC958 In L' comment.item.4 'IEC958 In R' iface MIXER name 'IEC958 Playback Route' index 1 value 'H/W In 1' } control.53 { comment.access 'read write' comment.type BOOLEAN comment.count 1 iface MIXER name 'IEC958 Output Switch' value false } control.54 { comment.access 'read write' comment.type IEC958 comment.count 1 iface PCM device 1 name 'IEC958 Playback Default' value '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' } control.55 { comment.access read comment.type IEC958 comment.count 1 iface PCM device 1 name 'IEC958 Playback Con Mask' value '3fff000f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' } control.56 { comment.access read comment.type IEC958 comment.count 1 iface PCM device 1 name 'IEC958 Playback Pro Mask' value 'df00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' } }[/left]
You'll notice that the following channels are muted and have the volume set to 0:
- Front
- Center
- LFE
- Surround
- Headphone
- PC Speaker
- Master Mono
- Phone
- Mic
- Line
- CD
- Video
- Aux
- Master
Also, Mic Boost and 3D Control are disabled, and 3D Control - Center and 3D Control - Depth have their volumes set to 0. I don't believe any of these channels/features have any impact on sound through the Wolfson DAC, so I disabled them to avoid confusion.
Capture Source must be set to Mix because it is the only source which includes the PCM channel. Capture Switch must also be true. Capture Volume can be 0 -- it still works. You will be using the PCM channel's volume control, and not this, but for an extra boost I suppose you could set this to its maximum value of 7, though I believe it was set to 0 in the bug report's asound.state because anything else might result in some sort of distortion (NOTE: I did not confirm this).
PCM must be true and it's volume must be >0. This is the volume control that you will be using.
I did not observe Mono Output Select to have any impact, but maybe it is important in some scenarios so I set it to Mix.
I don't believe Mic Select matters either -- I just left it at Mic1.
I did not observe Alternate Level to Surround Out, Downmix LFE and Center to Front, Downmix Surround to Front, or External Amplifier to have any impact, so I just set them all to false to avoid confusion.
Based on the bug report's asound.state, I added 64000, 88200, 96000, 176400, and 192000 to Multi Track Internal Clock in between 48000 and IEC958 Input. Despite this, I noticed that alsamixer still did not show these options, and that an 'alsactl -f /var/lib/alsa/asound.state store' would just remove them again. Maybe they are not needed and in fact do not work, or maybe they need to be set manually in order to work. I just left them. The option itself I set to 48000.
Multi Track Rate Locking is true in the bug report's asound.state, but I set it to false because I believe setting it to true will prevent an application from playing sound at a rate other than the internal clock setting. Multi Track Rate Reset is true in order to reset the rate back to the internal clock setting after the application closes the audio device.
H/W Playback Route and H/W Playback Route 1 must both be set to PCM Out, and IEC958 Playback Route and IEC958 Playback Route 1 must be set to H/W In 0 and H/W In 1 respectively, otherwise no Wolfson DAC! IEC958 Playback Switch appears to control the optical S/PDIF output. Plug a cable in there and observe the disconnected end -- with this set to true, the light will turn on. Since the configuration I've been describing won't work with this port anyway, might as well set this to false to save some power.
Apparently Multi Track Peak is a read-only option, which I take to mean that it isn't really an option and setting it to anything is meaningless. This may or may not be true. All I know is that I set all the values to 0 and didn't notice any change.
References:
[1] Original working asound.state: http://www.vandemar.org/asound.state
[2] ALSA bug report with an almost working asound.state attached (use Guest login link): 0002348: Chaintech AV-710 - High quality output doesn't work since alsa-driver 1.0.11
[3] Descriptions of some of the channels and options: Ice1724 - ALSA wiki which references Re: [Alsa-devel] ice1724 controls meaning