Hi Mark,
On 22.03.2013 11:18, Mark Brown wrote:
On Thu, Mar 21, 2013 at 08:43:55PM +0100, Daniel Mack wrote:
Currently, both the ALSA control for "Digital Master Playback Switch" and the ALSA core (by calling dai_ops->mute_stream()) control the same bits in the CS4271_VOL[AB]_MUTE registers.
That's a problem for applications which intentionally want to keep the flag switched off from userspace, even though the stream is already playing.
Fix this by keeping track of the states on both sides - the ALSA control and the ASoC core - and actually mute the Codec if either one of the two flags is set.
The usual fix for this is to just not have the mute operation if it's important. Otherwise this seems like something we ought to implement in the core, it's not a silly feature by any stretch of the imagination but it applies to any device with a DAI mute unless there's some device specific thing I'm missing here.
Well, the thing is about different use cases. If you leave everything untouched as of the ALSA controls (unmuted), the codec will enter its mute state just as expected by the core. The register bit also has implications to external mute stages btw, which board designers usually implement with MOSFETs.
It's just that if the user intentionally mutes the stream via the ALSA control, the core will override it, thus changing the state of the actual control unexpectedly.
So I'd say having a simple OR logic in this case is reasonable and serves all the needs I can think of, no?
Thanks, Daniel