From 8e151019a32b733420e2eb3006a5edaac5bc9589 Mon Sep 17 00:00:00 2001 From: Mark Farrugia Date: Wed, 3 Apr 2019 17:41:32 +1100 Subject: 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 --- loopback/loopback.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'loopback/loopback.c') 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); } -- cgit 1.2.3-korg