diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-22 10:59:20 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-22 10:59:20 -0800 |
commit | 1c2e02750b992703a8a18634e08b04353face243 (patch) | |
tree | 5dc2d10bad329eeb73b9e219e237662a8383f971 /sound/drivers/opl3/opl3_seq.c | |
parent | 8b4b6707ee32f929846d947d18b1b9bf42e988aa (diff) | |
parent | a3c44854a59f7e983c867060aa906bbf5befb1ef (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/perex/alsa
* git://git.kernel.org/pub/scm/linux/kernel/git/perex/alsa: (124 commits)
[ALSA] version 1.0.11rc4
[PATCH] Intruduce DMA_28BIT_MASK
[ALSA] hda-codec - Add support for ASUS P4GPL-X
[ALSA] hda-codec - Add support for HP nx9420 laptop
[ALSA] Fix memory leaks in error path of control.c
[ALSA] AMD Au1x00: AC'97 controller is memory mapped
[ALSA] AMD Au1x00: fix DMA init/cleanup
[ALSA] hda-codec - Fix generic auto-configurator
[ALSA] hda-codec - Fix BIOS auto-configuration
[ALSA] Fixes typos in Audiophile-USB.txt
[ALSA] ice1712 - typo fixes for dxr_enable module option
[ALSA] AMD Au1x00: make driver build after cleanup
[ALSA] ice1712 - Fix wrong value types for enum items
[ALSA] fix resource leak in usbmixer
[ALSA] Fix gus_pcm dereference before NULL
[ALSA] Fix seq_clientmgr dereferences before NULL check
[ALSA] hda-codec - Fix for Samsung R65 and ASUS A6J
[ALSA] hda-codec - Add support for VAIO FE550G and SZ110
[ALSA] usb-audio: add Maya44 mixer control names
[ALSA] usb-audio: add Casio PL-40R support
...
Diffstat (limited to 'sound/drivers/opl3/opl3_seq.c')
-rw-r--r-- | sound/drivers/opl3/opl3_seq.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/sound/drivers/opl3/opl3_seq.c b/sound/drivers/opl3/opl3_seq.c index c4ead790008..57becf34f43 100644 --- a/sound/drivers/opl3/opl3_seq.c +++ b/sound/drivers/opl3/opl3_seq.c @@ -52,13 +52,13 @@ int snd_opl3_synth_setup(struct snd_opl3 * opl3) { int idx; - down(&opl3->access_mutex); + mutex_lock(&opl3->access_mutex); if (opl3->used) { - up(&opl3->access_mutex); + mutex_unlock(&opl3->access_mutex); return -EBUSY; } opl3->used++; - up(&opl3->access_mutex); + mutex_unlock(&opl3->access_mutex); snd_opl3_reset(opl3); @@ -91,9 +91,9 @@ void snd_opl3_synth_cleanup(struct snd_opl3 * opl3) spin_unlock_irqrestore(&opl3->sys_timer_lock, flags); snd_opl3_reset(opl3); - down(&opl3->access_mutex); + mutex_lock(&opl3->access_mutex); opl3->used--; - up(&opl3->access_mutex); + mutex_unlock(&opl3->access_mutex); } static int snd_opl3_synth_use(void *private_data, struct snd_seq_port_subscribe * info) @@ -207,8 +207,10 @@ static int snd_opl3_synth_create_port(struct snd_opl3 * opl3) 16, voices, name); if (opl3->chset->port < 0) { + int port; + port = opl3->chset->port; snd_midi_channel_free_set(opl3->chset); - return opl3->chset->port; + return port; } return 0; } @@ -218,7 +220,7 @@ static int snd_opl3_synth_create_port(struct snd_opl3 * opl3) static int snd_opl3_seq_new_device(struct snd_seq_device *dev) { struct snd_opl3 *opl3; - int client; + int client, err; char name[32]; int opl_ver; @@ -239,7 +241,11 @@ static int snd_opl3_seq_new_device(struct snd_seq_device *dev) if (client < 0) return client; - snd_opl3_synth_create_port(opl3); + if ((err = snd_opl3_synth_create_port(opl3)) < 0) { + snd_seq_delete_kernel_client(client); + opl3->seq_client = -1; + return err; + } /* initialize instrument list */ opl3->ilist = snd_seq_instr_list_new(); |