aboutsummaryrefslogtreecommitdiffstats
path: root/sound/drivers/opl3/opl3_seq.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-03-22 13:59:20 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-03-22 13:59:20 -0500
commit1c2e02750b992703a8a18634e08b04353face243 (patch)
tree5dc2d10bad329eeb73b9e219e237662a8383f971 /sound/drivers/opl3/opl3_seq.c
parent8b4b6707ee32f929846d947d18b1b9bf42e988aa (diff)
parenta3c44854a59f7e983c867060aa906bbf5befb1ef (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.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/sound/drivers/opl3/opl3_seq.c b/sound/drivers/opl3/opl3_seq.c
index c4ead790008a..57becf34f43e 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)
52{ 52{
53 int idx; 53 int idx;
54 54
55 down(&opl3->access_mutex); 55 mutex_lock(&opl3->access_mutex);
56 if (opl3->used) { 56 if (opl3->used) {
57 up(&opl3->access_mutex); 57 mutex_unlock(&opl3->access_mutex);
58 return -EBUSY; 58 return -EBUSY;
59 } 59 }
60 opl3->used++; 60 opl3->used++;
61 up(&opl3->access_mutex); 61 mutex_unlock(&opl3->access_mutex);
62 62
63 snd_opl3_reset(opl3); 63 snd_opl3_reset(opl3);
64 64
@@ -91,9 +91,9 @@ void snd_opl3_synth_cleanup(struct snd_opl3 * opl3)
91 spin_unlock_irqrestore(&opl3->sys_timer_lock, flags); 91 spin_unlock_irqrestore(&opl3->sys_timer_lock, flags);
92 92
93 snd_opl3_reset(opl3); 93 snd_opl3_reset(opl3);
94 down(&opl3->access_mutex); 94 mutex_lock(&opl3->access_mutex);
95 opl3->used--; 95 opl3->used--;
96 up(&opl3->access_mutex); 96 mutex_unlock(&opl3->access_mutex);
97} 97}
98 98
99static int snd_opl3_synth_use(void *private_data, struct snd_seq_port_subscribe * info) 99static 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)
207 16, voices, 207 16, voices,
208 name); 208 name);
209 if (opl3->chset->port < 0) { 209 if (opl3->chset->port < 0) {
210 int port;
211 port = opl3->chset->port;
210 snd_midi_channel_free_set(opl3->chset); 212 snd_midi_channel_free_set(opl3->chset);
211 return opl3->chset->port; 213 return port;
212 } 214 }
213 return 0; 215 return 0;
214} 216}
@@ -218,7 +220,7 @@ static int snd_opl3_synth_create_port(struct snd_opl3 * opl3)
218static int snd_opl3_seq_new_device(struct snd_seq_device *dev) 220static int snd_opl3_seq_new_device(struct snd_seq_device *dev)
219{ 221{
220 struct snd_opl3 *opl3; 222 struct snd_opl3 *opl3;
221 int client; 223 int client, err;
222 char name[32]; 224 char name[32];
223 int opl_ver; 225 int opl_ver;
224 226
@@ -239,7 +241,11 @@ static int snd_opl3_seq_new_device(struct snd_seq_device *dev)
239 if (client < 0) 241 if (client < 0)
240 return client; 242 return client;
241 243
242 snd_opl3_synth_create_port(opl3); 244 if ((err = snd_opl3_synth_create_port(opl3)) < 0) {
245 snd_seq_delete_kernel_client(client);
246 opl3->seq_client = -1;
247 return err;
248 }
243 249
244 /* initialize instrument list */ 250 /* initialize instrument list */
245 opl3->ilist = snd_seq_instr_list_new(); 251 opl3->ilist = snd_seq_instr_list_new();