List Info

Thread: Fix error handling for nonexistent mpu401 interface (ca0106 driver)




Fix error handling for nonexistent mpu401 interface (ca0106 driver)
user name
2006-05-12 20:03:33
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 <crimsunubuntu.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            crimsunubuntu.com
GPG key:   www.sh.nu/~crimsun/pubkey.gpg.asc
-- 
kernel-team mailing list
kernel-teamlists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/kernel-team
[1]

about | contact  Other archives ( Real Estate discussion Medical topics )