File: midi.patch

package info (click to toggle)
alsa-driver 1.0.23%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 28,448 kB
  • ctags: 77,491
  • sloc: ansic: 473,525; sh: 3,307; makefile: 2,661; python: 1,527; perl: 1,316; awk: 66
file content (116 lines) | stat: -rw-r--r-- 3,234 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
--- ../alsa-kernel/usb/midi.c	2010-03-10 09:22:24.488022926 +0100
+++ midi.c	2010-03-10 09:26:34.028022239 +0100
@@ -1,3 +1,5 @@
+#include "midi.inc"
+
 /*
  * usbmidi.c - ALSA USB MIDI driver
  *
@@ -246,7 +248,11 @@
 /*
  * Processes the data read from the device.
  */
+#if !defined(OLD_USB) && !defined(CONFIG_SND_NEW_IRQ_HANDLER)
+static void snd_usbmidi_in_urb_complete(struct urb* urb, struct pt_regs *regs)
+#else
 static void snd_usbmidi_in_urb_complete(struct urb* urb)
+#endif
 {
 	struct snd_usb_midi_in_endpoint* ep = urb->context;
 
@@ -270,7 +276,11 @@
 	snd_usbmidi_submit_urb(urb, GFP_ATOMIC);
 }
 
+#if !defined(OLD_USB) && !defined(CONFIG_SND_NEW_IRQ_HANDLER)
+static void snd_usbmidi_out_urb_complete(struct urb* urb, struct pt_regs *regs)
+#else
 static void snd_usbmidi_out_urb_complete(struct urb* urb)
+#endif
 {
 	struct out_urb_context *context = urb->context;
 	struct snd_usb_midi_out_endpoint* ep = context->ep;
@@ -380,8 +390,13 @@
 		return -ENOMEM;
 	dump_urb("sending", buf, len);
 	if (ep->urbs[0].urb)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 12)
 		err = usb_bulk_msg(ep->umidi->dev, ep->urbs[0].urb->pipe,
 				   buf, len, NULL, 250);
+#else
+		err = usb_bulk_msg(ep->umidi->dev, ep->urbs[0].urb->pipe,
+				   buf, len, NULL, HZ);
+#endif
 	kfree(buf);
 	return err;
 }
@@ -897,7 +912,12 @@
 	int is_light_load;
 
 	intf = umidi->iface;
+#ifndef OLD_USB
 	is_light_load = intf->cur_altsetting != intf->altsetting;
+#else
+	is_light_load = &intf->altsetting[intf->act_altsetting] !=
+							intf->altsetting;
+#endif
 	if (umidi->roland_load_ctl->private_value == is_light_load)
 		return;
 	hostif = &intf->altsetting[umidi->roland_load_ctl->private_value];
@@ -984,7 +1004,11 @@
 	struct usbmidi_out_port* port = substream->runtime->private_data;
 	struct snd_usb_midi_out_endpoint *ep = port->ep;
 	unsigned int drain_urbs;
+#ifndef OLD_USB
 	DEFINE_WAIT(wait);
+#else
+	wait_queue_t wait;
+#endif
 	long timeout = msecs_to_jiffies(50);
 
 	/*
@@ -995,6 +1019,7 @@
 	drain_urbs = ep->active_urbs;
 	if (drain_urbs) {
 		ep->drain_urbs |= drain_urbs;
+#ifndef OLD_USB
 		do {
 			prepare_to_wait(&ep->drain_wait, &wait,
 					TASK_UNINTERRUPTIBLE);
@@ -1004,6 +1029,18 @@
 			drain_urbs &= ep->drain_urbs;
 		} while (drain_urbs && timeout);
 		finish_wait(&ep->drain_wait, &wait);
+#else
+		do {
+			init_waitqueue_entry(&wait, current);
+			add_wait_queue(&ep->drain_wait, &wait);
+			set_current_state(TASK_UNINTERRUPTIBLE);
+			spin_unlock_irq(&ep->buffer_lock);
+			timeout = schedule_timeout(timeout);
+			spin_lock_irq(&ep->buffer_lock);
+			drain_urbs &= ep->drain_urbs;
+			remove_wait_queue(&ep->drain_wait, &wait);
+		} while (drain_urbs && timeout);
+#endif
 	}
 	spin_unlock_irq(&ep->buffer_lock);
 }
@@ -1700,7 +1737,11 @@
 	intf = umidi->iface;
 	if (!intf || intf->num_altsetting < 1)
 		return -ENOENT;
+#ifndef OLD_USB
 	hostif = intf->cur_altsetting;
+#else
+	hostif = &intf->altsetting[intf->act_altsetting];
+#endif
 	intfd = get_iface_desc(hostif);
 
 	for (i = 0; i < intfd->bNumEndpoints; ++i) {
@@ -2067,3 +2108,5 @@
 EXPORT_SYMBOL(snd_usbmidi_input_stop);
 EXPORT_SYMBOL(snd_usbmidi_input_start);
 EXPORT_SYMBOL(snd_usbmidi_disconnect);
+
+#include "midi.inc1"