tree 5f4bda30bf6cb3de6e8aaa1ca97215410e2a10f7
parent e07e49c0d1e3693facf588142c4cbde45904b3f8
author Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> 1594259741 +0900
committer Mark Brown <broonie@kernel.org> 1594937165 +0100
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQFHBAABCgAxFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAl8Qz00THGJyb29uaWVA
 a2VybmVsLm9yZwAKCRAk1otyXVSH0Eu3B/9wlcwO6SOgmPdDfQ8Ex7It3OWL0cGj
 1wQ9o7ZP6VPzM5BCLxnV1Sw/IdxlCGK0AGpPKv+2KRh0AX8nVocBcp8q87b67JrY
 JID4H9zvDd+wYYygWREVM6RbGiRBSxpeLe2Wx0qqXXS2xNgXbFs6BW5XgdRGbBBm
 VXbvqgYkOX/dt8RcWG9MbWENHcMs75UHTsxlK0nse0O2hMibvUwFN1eqy9Mviqjn
 qbaKOPGUJxKt4lE2WsU+p1saf8Qv9MhTyGnX3hxcDPRkLuG1eDFjZFLAfx1to1cN
 vl4g/87MO99sfIWuxYwuU3emPnXofI/cfdYoXaWowy/oUVl7smIHGZgT
 =vhMG
 -----END PGP SIGNATURE-----

ASoC: soc-dai.c: add .no_capture_mute support

snd_soc_dai_digital_mute() is internally using both
mute_stream() (1) or digital_mute() (2), but the difference between
these 2 are only handling "direction".
We can merge digital_mute() into mute_stream

	int snd_soc_dai_digital_mute(xxx, int direction)
	{
		...
		else if (dai->driver->ops->mute_stream)
(1)			return dai->driver->ops->mute_stream(xxx, direction);
		else if (direction == SNDRV_PCM_STREAM_PLAYBACK &&
			 dai->driver->ops->digital_mute)
(2)			return dai->driver->ops->digital_mute(xxx);
		...
	}

To prepare merging mute_stream()/digital_mute(),
this patch adds .no_capture_mute support to emulate .digital_mute().

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/87eeplxxj7.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
