[alsa-devel] I want to improve Sigma-Tel STAC9227 driver / How to implement support for multiple ADC
Maxim Levitsky
maximlevitsky at gmail.com
Mon Aug 20 03:48:52 CEST 2007
Hello,
I am a user of Sigma-Tel STAC9227 intel hda based chip.
I have studied its documentation, and found that alsa driver doesn't support
number of its features.
1) it has "analog loop-back" which means it can mix sound just before it
enters ADC0 to output of DAC0 (headphones/front).
For me it is the most important feature, since I have a tv card with analog
output.
2) it has the ability to "swap" left/right channels, and this can be very
useful for LFE/center channel
3) It has a VolumeKnob "widget" , that allows to decrease volume of all DACs
_after_ their own volumes were applied, and I think I turn it to "master
volume"
Those things below aren't supported by windows driver ether, but that doesn't
mean we can't support that :-)
4) this chip has 3 ADC, each capable recording from different source, but alsa
uses only first.
5) I have 5.1 configuration, so DAC1 is unused.
It is possible to connect it to "front" mic, and get 7.1 sound card
I think about a option "Use front mic as output", for 3Stack configuration
1,2,3 are easy to implement, since those are just mixer switches.
But I have a question about 4:
Now the driver has buggy support for second ADC, it record from it, but fails
to connect it to any input source, and unmute it.
I can fix that and trivially add support for third ADC, but current driver
makes all ADCs a sub-streams of a single PCM device.
I think that sub-streams are meant to be used only by playback PCMs that have
hardware support of mixing, so I feel that is is better to make each ADC to
be a separate PCM device, with separate mixer controls (enabled/input
source/gain), and I want to ask you whenever you agree with me.
Also I noticed that dsnoop chokes on record streams with more that one
substream, it fails with error, when I try to open second arecord.
Best regards,
Maxim Levitsky
More information about the Alsa-devel
mailing list