diff options
author | Mark Farrugia <mark.farrugia@fiberdyne.com.au> | 2019-04-03 17:41:32 +1100 |
---|---|---|
committer | Mark Farrugia <mark.farrugia@fiberdyne.com.au> | 2019-04-08 13:57:54 +1000 |
commit | 8e151019a32b733420e2eb3006a5edaac5bc9589 (patch) | |
tree | 0117c22646a7d880b71b1908957a00a347fdf020 /loopback/loopback.c | |
parent | 16912fcce2802752ba11b884d920c71cae5eb1c9 (diff) |
Introduce 'unconfigure' callback
The 'unconfigure' callback can be used to clean up the 'configured'
state of an Audio Path, for when it is desired to reset the streams,
and/or reload a different stream configuration.
To destroy the streams, we must attempt to force their PCMs
closed. Take note though, that if a PCM is being written to when
an unconfigure command is issued, system instability may occur.
Signed-off-by: Mark Farrugia <mark.farrugia@fiberdyne.com.au>
Diffstat (limited to 'loopback/loopback.c')
-rw-r--r-- | loopback/loopback.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/loopback/loopback.c b/loopback/loopback.c index de0f38a..49c188d 100644 --- a/loopback/loopback.c +++ b/loopback/loopback.c @@ -1080,6 +1080,14 @@ static int loopbackap_configure(struct snd_card *card, return 0; } +static int loopbackap_unconfigure(void) +{ + mutex_destroy(&loopback->cable_lock); + kfree(loopback); + + return 0; +} + /******************************************************************************* * Loopback Audio Path AVIRT registration ******************************************************************************/ @@ -1091,6 +1099,7 @@ static struct snd_avirt_audiopath loopbackap_module = { .pcm_playback_ops = &loopbackap_pcm_ops, .pcm_capture_ops = &loopbackap_pcm_ops, .configure = loopbackap_configure, + .unconfigure = loopbackap_unconfigure, }; static int __init alsa_card_loopback_init(void) @@ -1108,6 +1117,8 @@ static int __init alsa_card_loopback_init(void) static void __exit alsa_card_loopback_exit(void) { + mutex_destroy(&loopback->cable_lock); + kfree(loopback); snd_avirt_audiopath_deregister(&loopbackap_module); } |