ALSA: hda - Add snd_hda_multi_out_dig_cleanup()
Added the helper function snd_hda_multi_out_dig_cleanup() to clean up the digital outputs with multi setup. This call is needed in cases the codec supports multiple digital outputs as slaves. Otherwise the slave widgets aren't properly cleaned up. For a single digital output (e.g. in patch_conexant.c), this call isn't needed. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Родитель
3a08e30de2
Коммит
9411e21cd0
|
@ -3088,6 +3088,16 @@ int snd_hda_multi_out_dig_prepare(struct hda_codec *codec,
|
|||
}
|
||||
EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_prepare);
|
||||
|
||||
int snd_hda_multi_out_dig_cleanup(struct hda_codec *codec,
|
||||
struct hda_multi_out *mout)
|
||||
{
|
||||
mutex_lock(&codec->spdif_mutex);
|
||||
cleanup_dig_out_stream(codec, mout->dig_out_nid);
|
||||
mutex_unlock(&codec->spdif_mutex);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_cleanup);
|
||||
|
||||
/*
|
||||
* release the digital out
|
||||
*/
|
||||
|
|
|
@ -251,6 +251,8 @@ int snd_hda_multi_out_dig_prepare(struct hda_codec *codec,
|
|||
unsigned int stream_tag,
|
||||
unsigned int format,
|
||||
struct snd_pcm_substream *substream);
|
||||
int snd_hda_multi_out_dig_cleanup(struct hda_codec *codec,
|
||||
struct hda_multi_out *mout);
|
||||
int snd_hda_multi_out_analog_open(struct hda_codec *codec,
|
||||
struct hda_multi_out *mout,
|
||||
struct snd_pcm_substream *substream,
|
||||
|
|
|
@ -275,6 +275,14 @@ static int ad198x_dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
|
|||
format, substream);
|
||||
}
|
||||
|
||||
static int ad198x_dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
|
||||
struct hda_codec *codec,
|
||||
struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct ad198x_spec *spec = codec->spec;
|
||||
return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout);
|
||||
}
|
||||
|
||||
/*
|
||||
* Analog capture
|
||||
*/
|
||||
|
@ -333,7 +341,8 @@ static struct hda_pcm_stream ad198x_pcm_digital_playback = {
|
|||
.ops = {
|
||||
.open = ad198x_dig_playback_pcm_open,
|
||||
.close = ad198x_dig_playback_pcm_close,
|
||||
.prepare = ad198x_dig_playback_pcm_prepare
|
||||
.prepare = ad198x_dig_playback_pcm_prepare,
|
||||
.cleanup = ad198x_dig_playback_pcm_cleanup
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -2442,6 +2442,14 @@ static int stac92xx_dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
|
|||
stream_tag, format, substream);
|
||||
}
|
||||
|
||||
static int stac92xx_dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
|
||||
struct hda_codec *codec,
|
||||
struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct sigmatel_spec *spec = codec->spec;
|
||||
return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Analog capture callbacks
|
||||
|
@ -2486,7 +2494,8 @@ static struct hda_pcm_stream stac92xx_pcm_digital_playback = {
|
|||
.ops = {
|
||||
.open = stac92xx_dig_playback_pcm_open,
|
||||
.close = stac92xx_dig_playback_pcm_close,
|
||||
.prepare = stac92xx_dig_playback_pcm_prepare
|
||||
.prepare = stac92xx_dig_playback_pcm_prepare,
|
||||
.cleanup = stac92xx_dig_playback_pcm_cleanup
|
||||
},
|
||||
};
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче