[alsa-devel] [RFC 0/4] ALSA controls management using index/device/sub-devices fields

Takashi Iwai tiwai at suse.de
Tue Nov 8 15:30:52 CET 2016


On Tue, 08 Nov 2016 15:16:29 +0100,
Arnaud Pouliquen wrote:
> 
> Hello Clemens,
> 
> On 11/08/2016 10:52 AM, Clemens Ladisch wrote:
> > Arnaud Pouliquen wrote:
> >> 1-1) How to Instantiate generic ALSA control
> >>
> >> The  point is the handling of multi instance of generic ALSA controls.
> >> In this case "prefix" can not be used. Controls have to be identified
> >> by a combination of device/sub-device/index
> > 
> > Controls are identified either
> > - by their numid, or
> > - by the combination of iface/device/subdevice/name/index.
> > 
> > The device/subdevice fields are used to link controls with PCM devices;
> > this is needed for per-stream volume controls or for the S/PDIF "Mask"
> > controls, which set properties of some PCM stream.
> Seems that today device/subdevice are also used to differentiate PCM
> control, using a "virtual" device/subdevice that is not linked to a
> "real PCM device. This is what i understand when i parse HDA-Intel.conf
> for instance HDA-Intel.pcm.hdmi.1: "DEVICE=7,"

The HD-audio shouldn't be taken as the good reference.  It has its own
mapping there just to keep the backward compatibility with the old
implementation that was basically broken.


> > 
> >>     Should we always apply this rules?
> >>       - MIXER control type: as it is not linked to PCM device but card,
> >> 	"index" is used to instantiate control.
> > 
> > "index" is _always_ used.
> > 
> >>       - PCM control type: as it is linked to PCM device,
> >>         "device/subdevice" is used to instantiate control.
> >>     Or could we consider that a control can be instantiated using
> >>       device/subdevice fields  and/or index fields?
> > 
> > The amixer tool does not allow controls with the same iface/name/index
> > values, regardless of the (sub)device values.  This appears to be a bug
> > in amixer (because the behaviour is different from the kernel's), but
> > the (sub)device fields were never intended to be used by MIXER controls,
> In fact only amixer simple controls are not handled using (sub)device
> fields. if simple control is only MIXER controls, it is not a bug as it
> respect rules.
> 
> > and PCM controls typically are inactive when their stream is closed.
> if we consider that 'IEC958 Playback Default' is a PCM control. This is
> not compatible with iecset application that sets the control without
> opening the PCM device.

Yes, it's a slight inconsistency.  But it's specific to "Default"
stuff.  All other controls are usually tied with PCM open/close.

> > 
> >>    - Concerning IEC controls, should we consider them as PCM or MIXER
> >>      type controls? In current implementations both are used...
> > 
> > MIXER controls are shown in alsamixer.  PCM controls are hidden, and
> > accessed by software.
> > 
> > Something like "IEC958 Playback Switch" should be MIXER, and "IEC958
> > Playback Con Mask", PCM.
> > 
> >> 2) From driver point of view
> >>
> >> 2-1) None SOC drivers:
> >> Today solution seems to base indexation on both "index" and "device"
> >> number. Device indexation seems not linked to PCM device number
> >> Example in  ea9b43addc4d ("ALSA: hda - Fix broken workaround for HDMI/SPDIF conflicts").
> >> http://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/commit/?id=ea9b43add
> >>
> >> => The drawback is that each driver has to implement it. Could be nice
> >>    to have in generic code....
> > 
> > In the good old times, the ALSA framework assumed that a driver knows
> > all its controls, and handles conflicts by assignind index values.
> > 
> > It would be useful to let snd_ctl_add() assign a new index automatically,
> > but only if explicitly requested (e.g., something like
> > "#define SNDRV_CTL_INDEX_AUTO -1").
> you right, seems more reasonable, I will update this for a V2, if
> everyone is ok for this solution...

Right, this behavior must be optional.  For the normal drivers, the
duplicated controls *are* errors, and we catch it instead.  For
drivers that are aware of confliction and want the automatic
workaround (e.g. HD-audio driver does it already), this kind of code
would be useful to be in the common place.


thanks,

Takashi


More information about the Alsa-devel mailing list