[alsa-devel] [patch][saa7134] do not change mute state for capturing audio

Stas Sergeev stsp at list.ru
Tue Jul 19 23:57:56 CEST 2011

19.07.2011 23:29, Mauro Carvalho Chehab wrote:
>> the additional element, they are fine already.
>> We can rename it to "Master Capture Switch",
>> or may not.
> Adding a new volume control that changes the mute values for the other controls
> or renaming it don't solve anything.
The proposed solution is to have the mute
control, that can be valid for all the cards/drivers.
Presumably, it should have the similar name
for all of them, even though for some it will be
a "virtual" control that will control several items,
and for others - it should map directly to their
single mute control.
If we have such a mute control, any app can use
it, and the auto-unmute logic can be removed
from the alsa driver. v4l2 is left as it is now.
So that's the proposal, what problems can you see
with it?

>> So, am I right that the only problem is that it is not
>> exported to the user by some _alsa_ drivers right now?
> I fail to see why this would be a problem.
But that was the problem _you_ named.
That is, that right now the app will have difficulties
unmuting the complex boards via the alsa interface,
because it will have to unmute several items instead
of one.
I propose to add the single item for that, except for
the drivers that already have only one mute switch.
With this, the problem you named, seems to be solved.
And then, perhaps, the auto-unmute logic can go away.
What am I missing?

> It is doable, although it is probably not trivial.
> Devices with saa7130 (PCI_DEVICE_ID_PHILIPS_SAA7130) doesn't enable the
> alsa module, as they don't support I2S transfers, required for PCM audio.
> So, we need to take care only on saa7133/4/5 devices.
> The mute code is at saa7134-tvaudio.c, mute_input_7134() function. For
> saa7134, it does:
>          if (PCI_DEVICE_ID_PHILIPS_SAA7134 == dev->pci->device)
>                  /* 7134 mute */
>                  saa_writeb(SAA7134_AUDIO_MUTE_CTRL, mute ?
>                                                      SAA7134_MUTE_MASK |
>                                                      SAA7134_MUTE_ANALOG |
>                                                      SAA7134_MUTE_I2S :
>                                                      SAA7134_MUTE_MASK);
> Clearly, there are two mute flags: SAA7134_MUTE_ANALOG and SAA7134_MUTE_I2S.
I was actually already playing with that piece of
code, and got no results. Will retry the next week-end
to see exactly why...
IIRC the problem was that this does not mute the
sound input from the back panel of the board, which
would then still go to the pass-through wire in case
you are capturing. The only way do mute it, was to
configure muxes the way you can't capture at the
same time. But I may be wrong with the recollections.

More information about the Alsa-devel mailing list