[PATCH] [UBUNTU:sound/pci/ca0106/] Fix error handling for nonexistent mpu401 interface (ca0106 driver)
crimsun at fungus.sh.nu
crimsun at fungus.sh.nu
Fri May 12 20:03:33 UTC 2006
Subject: [PATCH] [UBUNTU:sound/pci/ca0106/] Fix error handling for nonexistent mpu401 interface (ca0106 driver)
UpstreamStatus: Not merged
This commit covers the ca0106 driver, which I inadvertently missed in a
grep output for the last set of fixes for Malone #34831.
Signed-off-by: Daniel T Chen <crimsun at ubuntu.com>
---
sound/pci/ca0106/ca_midi.c | 35 +++++++++++++++++++++++++++--------
1 files changed, 27 insertions(+), 8 deletions(-)
38b60a8996a26c82c4166c2f6398901a7243f768
diff --git a/sound/pci/ca0106/ca_midi.c b/sound/pci/ca0106/ca_midi.c
index 2e08b27..7f42270 100644
--- a/sound/pci/ca0106/ca_midi.c
+++ b/sound/pci/ca0106/ca_midi.c
@@ -86,7 +86,7 @@ static void ca_midi_interrupt(ca_midi_t
}
-static void ca_midi_cmd(ca_midi_t *midi, unsigned char cmd, int ack)
+static int ca_midi_cmd(ca_midi_t *midi, unsigned char cmd, int ack)
{
unsigned long flags;
int timeout, ok;
@@ -111,12 +111,15 @@ static void ca_midi_cmd(ca_midi_t *midi,
ok = 1;
}
spin_unlock_irqrestore(&midi->input_lock, flags);
- if (!ok)
+ if (!ok) {
snd_printk(KERN_ERR "ca_midi_cmd: 0x%x failed at 0x%x (status = 0x%x, data = 0x%x)!!!\n",
cmd,
midi->get_dev_id_port(midi->dev_id),
ca_midi_read_stat(midi),
ca_midi_read_data(midi));
+ return 1;
+ }
+ return 0;
}
static int ca_midi_input_open(snd_rawmidi_substream_t * substream)
@@ -130,12 +133,17 @@ static int ca_midi_input_open(snd_rawmid
midi->substream_input = substream;
if (!(midi->midi_mode & CA_MIDI_MODE_OUTPUT)) {
spin_unlock_irqrestore(&midi->open_lock, flags);
- ca_midi_cmd(midi, midi->reset, 1);
- ca_midi_cmd(midi, midi->enter_uart, 1);
+ if (ca_midi_cmd(midi, midi->reset, 1))
+ goto error_out;
+ if (ca_midi_cmd(midi, midi->enter_uart, 1))
+ goto error_out;
} else {
spin_unlock_irqrestore(&midi->open_lock, flags);
}
return 0;
+
+error_out:
+ return -EIO;
}
static int ca_midi_output_open(snd_rawmidi_substream_t * substream)
@@ -149,18 +157,24 @@ static int ca_midi_output_open(snd_rawmi
midi->substream_output = substream;
if (!(midi->midi_mode & CA_MIDI_MODE_INPUT)) {
spin_unlock_irqrestore(&midi->open_lock, flags);
- ca_midi_cmd(midi, midi->reset, 1);
- ca_midi_cmd(midi, midi->enter_uart, 1);
+ if (ca_midi_cmd(midi, midi->reset, 1))
+ goto error_out;
+ if (ca_midi_cmd(midi, midi->enter_uart, 1))
+ goto error_out;
} else {
spin_unlock_irqrestore(&midi->open_lock, flags);
}
return 0;
+
+error_out:
+ return -EIO;
}
static int ca_midi_input_close(snd_rawmidi_substream_t * substream)
{
ca_midi_t *midi = (ca_midi_t *)substream->rmidi->private_data;
unsigned long flags;
+ int err = 0;
snd_assert(midi->dev_id, return -ENXIO);
spin_lock_irqsave(&midi->open_lock, flags);
@@ -169,10 +183,12 @@ static int ca_midi_input_close(snd_rawmi
midi->substream_input = NULL;
if (!(midi->midi_mode & CA_MIDI_MODE_OUTPUT)) {
spin_unlock_irqrestore(&midi->open_lock, flags);
- ca_midi_cmd(midi, midi->reset, 0);
+ err = ca_midi_cmd(midi, midi->reset, 0);
} else {
spin_unlock_irqrestore(&midi->open_lock, flags);
}
+ if (err)
+ return -EIO;
return 0;
}
@@ -180,6 +196,7 @@ static int ca_midi_output_close(snd_rawm
{
ca_midi_t *midi = (ca_midi_t *)substream->rmidi->private_data;
unsigned long flags;
+ int err = 0;
snd_assert(midi->dev_id, return -ENXIO);
spin_lock_irqsave(&midi->open_lock, flags);
@@ -190,10 +207,12 @@ static int ca_midi_output_close(snd_rawm
if (!(midi->midi_mode & CA_MIDI_MODE_INPUT)) {
spin_unlock_irqrestore(&midi->open_lock, flags);
- ca_midi_cmd(midi, midi->reset, 0);
+ err = ca_midi_cmd(midi, midi->reset, 0);
} else {
spin_unlock_irqrestore(&midi->open_lock, flags);
}
+ if (err)
+ return -EIO;
return 0;
}
--
1.1.3
--
Daniel T. Chen crimsun at ubuntu.com
GPG key: www.sh.nu/~crimsun/pubkey.gpg.asc
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20060512/676256c1/attachment.sig>
More information about the kernel-team
mailing list