Skip to content

Commit

Permalink
ALSA: 6fire: make buffers DMA-able (midi)
Browse files Browse the repository at this point in the history
Patch makes midi output buffer DMA-able by allocating it separately.

Signed-off-by: Torsten Schenk <torsten.schenk@zoho.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
Torsten Schenk authored and tiwai committed Aug 12, 2013
1 parent 5ece263 commit 4c2aee0
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 6 deletions.
16 changes: 15 additions & 1 deletion sound/usb/6fire/midi.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -156,6 +160,12 @@ int usb6fire_midi_init(struct sfire_chip *chip)
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 */
Expand All @@ -169,6 +179,7 @@ int usb6fire_midi_init(struct sfire_chip *chip)

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;
Expand Down Expand Up @@ -197,6 +208,9 @@ void usb6fire_midi_abort(struct sfire_chip *chip)

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;
}
6 changes: 1 addition & 5 deletions sound/usb/6fire/midi.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,6 @@

#include "common.h"

enum {
MIDI_BUFSIZE = 64
};

struct midi_runtime {
struct sfire_chip *chip;
struct snd_rawmidi *instance;
Expand All @@ -32,7 +28,7 @@ struct midi_runtime {
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);
Expand Down

0 comments on commit 4c2aee0

Please sign in to comment.