On Fri, 19 Aug 2016 00:20:37 +0200, Andrej Krutak wrote:
Not all PODs use MIDI via USB data interface, thus allow avoiding that code and instead using direct processing.
Signed-off-by: Andrej Krutak dev@andree.sk
sound/usb/line6/driver.c | 59 ++++++++++++++++++++++++++++-------------------- sound/usb/line6/driver.h | 8 ++++--- sound/usb/line6/midi.c | 2 +- 3 files changed, 40 insertions(+), 29 deletions(-)
diff --git a/sound/usb/line6/driver.c b/sound/usb/line6/driver.c index 9b16777..853a143 100644 --- a/sound/usb/line6/driver.c +++ b/sound/usb/line6/driver.c @@ -290,26 +290,31 @@ static void line6_data_received(struct urb *urb) if (urb->status == -ESHUTDOWN) return;
- done =
line6_midibuf_write(mb, urb->transfer_buffer, urb->actual_length);
- if (line6->properties->capabilities & LINE6_CAP_CONTROL_MIDI) {
done =
line6_midibuf_write(mb, urb->transfer_buffer, urb->actual_length);
- if (done < urb->actual_length) {
line6_midibuf_ignore(mb, done);
dev_dbg(line6->ifcdev, "%d %d buffer overflow - message skipped\n",
done, urb->actual_length);
- }
if (done < urb->actual_length) {
line6_midibuf_ignore(mb, done);
dev_dbg(line6->ifcdev, "%d %d buffer overflow - message skipped\n",
done, urb->actual_length);
}
- for (;;) {
done =
line6_midibuf_read(mb, line6->buffer_message,
LINE6_MESSAGE_MAXLEN);
for (;;) {
done =
line6_midibuf_read(mb, line6->buffer_message,
LINE6_MESSAGE_MAXLEN);
if (done == 0)
break;
if (done == 0)
break;
line6->message_length = done;
line6_midi_receive(line6, line6->buffer_message, done);
line6->message_length = done;
line6_midi_receive(line6, line6->buffer_message, done);
if (line6->process_message)
line6->process_message(line6);
}
} else { if (line6->process_message) line6->process_message(line6); }
Both if and else run the same code (line6->process_message) here at the end. That is, this can be outside the if block.
Also, the patch should be also before the actual usage, i.e. patch 5.
Takashi