summaryrefslogtreecommitdiffstats
path: root/sound/isa/wss
diff options
context:
space:
mode:
authorKrzysztof Helt <krzysztof.h1@wp.pl>2009-11-05 18:32:41 +0100
committerTakashi Iwai <tiwai@suse.de>2009-11-05 18:10:25 +0100
commitd114cd84a1c5ce42bb10cd3a2da57b2bbcef909b (patch)
tree32c7f37af0cc9ec55a37357723b7c4f055462830 /sound/isa/wss
parent9dcaa7b25f2c8f6a0485854cd3641f585a154072 (diff)
downloadlinux-stable-d114cd84a1c5ce42bb10cd3a2da57b2bbcef909b.tar.gz
linux-stable-d114cd84a1c5ce42bb10cd3a2da57b2bbcef909b.tar.bz2
linux-stable-d114cd84a1c5ce42bb10cd3a2da57b2bbcef909b.zip
ALSA: cs4236: detect chip in one pass
The cs4236 was two step detection with call to the snd_wss_free() between two steps. The snd_wss_free() did not free a sound device created in the snd_wss_create(). This caused an OOPS during module removal as the same sound device was released twice. The same OOPS happened if the cs4236 module loading failed. Fix this by adapting the snd_cs4236_create() to correctly work with chips less capable then cs4236. The snd_cs4236_create() behaves the same as the snd_wss_create() if the chip is less capable than the cs4236. Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/isa/wss')
-rw-r--r--sound/isa/wss/wss_lib.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/sound/isa/wss/wss_lib.c b/sound/isa/wss/wss_lib.c
index 2ba18978b419..705db0924375 100644
--- a/sound/isa/wss/wss_lib.c
+++ b/sound/isa/wss/wss_lib.c
@@ -1682,7 +1682,7 @@ static void snd_wss_resume(struct snd_wss *chip)
}
#endif /* CONFIG_PM */
-int snd_wss_free(struct snd_wss *chip)
+static int snd_wss_free(struct snd_wss *chip)
{
release_and_free_resource(chip->res_port);
release_and_free_resource(chip->res_cport);
@@ -1705,7 +1705,6 @@ int snd_wss_free(struct snd_wss *chip)
kfree(chip);
return 0;
}
-EXPORT_SYMBOL(snd_wss_free);
static int snd_wss_dev_free(struct snd_device *device)
{