At Wed, 22 Sep 2010 00:24:56 +1000, Andy Owen wrote:
On Tue, 2010-09-21 at 16:00 +0200, Takashi Iwai wrote:
I wonder whether this can regress on other boards. The front channel is the obvious channel so this must have been tested. Maybe we should change the mapping only for your specific model by adding some flag.
The behaviour I was seeing was that if I just added the device id, then the front channel would work fine, but I would get no sound from the rears, and the mixer controls didn't quite match the labels.
Hrm, but you changed the DAC number of the front channel. Doesn't change the front channel behavior...?
I was a bit suspect of this change:
if (chip->details->spi_dac && channel_id != PCM_FRONT_CHANNEL) {
if (chip->details->spi_dac) {
But I convinced myself that it was a hack to work around the registers being wrong in other places, and the card in its default state had the front dac already powered up. Looking at the code, I can see similar logic in the snd_ca0106_pcm_close_playback() function, which has a special case for the front channel, and I think should also be modified.
No, take a look at git commit 485100706b4b397f8072c756839878f634e21f85:
[ALSA] ca0106: power down SPI DAC channels when not in use
For cards with an SPI DAC (SB Live 24-bit / Audigy SE), power down channels 0-2 when not in use. They are powered up on PCM open and down again on PCM close. Channel 4 (== Front) is not powered down, as it is used for capture feedback. Powering it down would effectively kill line in pass-through.
So, it's the designed behavior.
Judging from the fact that this mapping hasn't been changed since that time, I feel that it's not safe to change the mapping unconditionally for your device. That's why I suggest for some new flag.
Takashi