All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] 6fire: fix URB transfer buffer for midi output
@ 2013-08-07 14:51 Torsten Schenk
       [not found] ` <20130807165149.188c4b16297be52c0630a18f-ytc+IHgoah0@public.gmane.org>
  0 siblings, 1 reply; 8+ messages in thread
From: Torsten Schenk @ 2013-08-07 14:51 UTC (permalink / raw)
  To: alsa-devel; +Cc: tiwai

Patch fixes URB transfer buffer allocation for midi output to be DMA-able.

Signed-off-by: Torsten Schenk <torsten.schenk@zoho.com>
---
diff -Nur a/sound/usb/6fire/midi.c b/sound/usb/6fire/midi.c
--- a/sound/usb/6fire/midi.c	2013-08-07 16:32:10.579639391 +0200
+++ b/sound/usb/6fire/midi.c	2013-08-07 16:32:31.363378104 +0200
@@ -19,6 +19,10 @@
 #include "chip.h"
 #include "comm.h"
 
+enum {
+	MIDI_BUFSIZE = 64
+};
+
 static void usb6fire_midi_out_handler(struct urb *urb)
 {
 	struct midi_runtime *rt = urb->context;
@@ -156,6 +160,12 @@
 	if (!rt)
 		return -ENOMEM;
 
+	rt->out_buffer = kzalloc(MIDI_BUFSIZE, GFP_KERNEL);
+	if (!rt->out_buffer) {
+		kfree(rt);
+		return -ENOMEM;
+	}
+
 	rt->chip = chip;
 	rt->in_received = usb6fire_midi_in_received;
 	rt->out_buffer[0] = 0x80; /* 'send midi' command */
@@ -169,6 +179,7 @@
 
 	ret = snd_rawmidi_new(chip->card, "6FireUSB", 0, 1, 1, &rt->instance);
 	if (ret < 0) {
+		kfree(rt->out_buffer);
 		kfree(rt);
 		snd_printk(KERN_ERR PREFIX "unable to create midi.\n");
 		return ret;
@@ -197,6 +208,9 @@
 
 void usb6fire_midi_destroy(struct sfire_chip *chip)
 {
-	kfree(chip->midi);
+	struct midi_runtime *rt = chip->midi;
+
+	kfree(rt->out_buffer);
+	kfree(rt);
 	chip->midi = NULL;
 }
diff -Nur a/sound/usb/6fire/midi.h b/sound/usb/6fire/midi.h
--- a/sound/usb/6fire/midi.h	2013-08-07 16:32:10.579639391 +0200
+++ b/sound/usb/6fire/midi.h	2013-08-07 16:32:31.363378104 +0200
@@ -16,10 +16,6 @@
 
 #include "common.h"
 
-enum {
-	MIDI_BUFSIZE = 64
-};
-
 struct midi_runtime {
 	struct sfire_chip *chip;
 	struct snd_rawmidi *instance;
@@ -32,7 +28,7 @@
 	struct snd_rawmidi_substream *out;
 	struct urb out_urb;
 	u8 out_serial; /* serial number of out packet */
-	u8 out_buffer[MIDI_BUFSIZE];
+	u8 *out_buffer;
 	int buffer_offset;
 
 	void (*in_received)(struct midi_runtime *rt, u8 *data, int length);

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2013-08-12  9:36 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-08-07 14:51 [PATCH] 6fire: fix URB transfer buffer for midi output Torsten Schenk
     [not found] ` <20130807165149.188c4b16297be52c0630a18f-ytc+IHgoah0@public.gmane.org>
2013-08-07 16:34   ` Takashi Iwai
     [not found]     ` <s5hli4d5uj7.wl%tiwai-l3A5Bk7waGM@public.gmane.org>
2013-08-07 17:38       ` Alan Stern
     [not found]         ` <Pine.LNX.4.44L0.1308071334590.886-100000-IYeN2dnnYyZXsRXLowluHWD2FQJk+8+b@public.gmane.org>
2013-08-08  6:03           ` Takashi Iwai
2013-08-08  7:16             ` Clemens Ladisch
     [not found]               ` <520345CB.3030307-P6GI/4k7KOmELgA04lAiVw@public.gmane.org>
2013-08-08  7:28                 ` [alsa-devel] " Takashi Iwai
2013-08-11  9:11             ` [PATCH 1/2] 6fire: make buffers DMA-able (pcm) Torsten Schenk
2013-08-12  9:37               ` Takashi Iwai

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.