0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038 #include <linux/kernel.h>
0039 #include <linux/types.h>
0040 #include <linux/bitops.h>
0041 #include <linux/interrupt.h>
0042 #include <linux/spinlock.h>
0043 #include <linux/string.h>
0044 #include <linux/init.h>
0045 #include <linux/slab.h>
0046 #include <linux/timer.h>
0047 #include <linux/usb.h>
0048 #include <linux/wait.h>
0049 #include <linux/usb/audio.h>
0050 #include <linux/usb/midi.h>
0051 #include <linux/module.h>
0052
0053 #include <sound/core.h>
0054 #include <sound/control.h>
0055 #include <sound/rawmidi.h>
0056 #include <sound/asequencer.h>
0057 #include "usbaudio.h"
0058 #include "midi.h"
0059 #include "power.h"
0060 #include "helper.h"
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071 #define ERROR_DELAY_JIFFIES (HZ / 10)
0072
0073 #define OUTPUT_URBS 7
0074 #define INPUT_URBS 7
0075
0076
0077 MODULE_AUTHOR("Clemens Ladisch <clemens@ladisch.de>");
0078 MODULE_DESCRIPTION("USB Audio/MIDI helper module");
0079 MODULE_LICENSE("Dual BSD/GPL");
0080
0081 struct snd_usb_midi_in_endpoint;
0082 struct snd_usb_midi_out_endpoint;
0083 struct snd_usb_midi_endpoint;
0084
0085 struct usb_protocol_ops {
0086 void (*input)(struct snd_usb_midi_in_endpoint*, uint8_t*, int);
0087 void (*output)(struct snd_usb_midi_out_endpoint *ep, struct urb *urb);
0088 void (*output_packet)(struct urb*, uint8_t, uint8_t, uint8_t, uint8_t);
0089 void (*init_out_endpoint)(struct snd_usb_midi_out_endpoint *);
0090 void (*finish_out_endpoint)(struct snd_usb_midi_out_endpoint *);
0091 };
0092
0093 struct snd_usb_midi {
0094 struct usb_device *dev;
0095 struct snd_card *card;
0096 struct usb_interface *iface;
0097 const struct snd_usb_audio_quirk *quirk;
0098 struct snd_rawmidi *rmidi;
0099 const struct usb_protocol_ops *usb_protocol_ops;
0100 struct list_head list;
0101 struct timer_list error_timer;
0102 spinlock_t disc_lock;
0103 struct rw_semaphore disc_rwsem;
0104 struct mutex mutex;
0105 u32 usb_id;
0106 int next_midi_device;
0107
0108 struct snd_usb_midi_endpoint {
0109 struct snd_usb_midi_out_endpoint *out;
0110 struct snd_usb_midi_in_endpoint *in;
0111 } endpoints[MIDI_MAX_ENDPOINTS];
0112 unsigned long input_triggered;
0113 unsigned int opened[2];
0114 unsigned char disconnected;
0115 unsigned char input_running;
0116
0117 struct snd_kcontrol *roland_load_ctl;
0118 };
0119
0120 struct snd_usb_midi_out_endpoint {
0121 struct snd_usb_midi *umidi;
0122 struct out_urb_context {
0123 struct urb *urb;
0124 struct snd_usb_midi_out_endpoint *ep;
0125 } urbs[OUTPUT_URBS];
0126 unsigned int active_urbs;
0127 unsigned int drain_urbs;
0128 int max_transfer;
0129 struct work_struct work;
0130 unsigned int next_urb;
0131 spinlock_t buffer_lock;
0132
0133 struct usbmidi_out_port {
0134 struct snd_usb_midi_out_endpoint *ep;
0135 struct snd_rawmidi_substream *substream;
0136 int active;
0137 uint8_t cable;
0138 uint8_t state;
0139 #define STATE_UNKNOWN 0
0140 #define STATE_1PARAM 1
0141 #define STATE_2PARAM_1 2
0142 #define STATE_2PARAM_2 3
0143 #define STATE_SYSEX_0 4
0144 #define STATE_SYSEX_1 5
0145 #define STATE_SYSEX_2 6
0146 uint8_t data[2];
0147 } ports[0x10];
0148 int current_port;
0149
0150 wait_queue_head_t drain_wait;
0151 };
0152
0153 struct snd_usb_midi_in_endpoint {
0154 struct snd_usb_midi *umidi;
0155 struct urb *urbs[INPUT_URBS];
0156 struct usbmidi_in_port {
0157 struct snd_rawmidi_substream *substream;
0158 u8 running_status_length;
0159 } ports[0x10];
0160 u8 seen_f5;
0161 bool in_sysex;
0162 u8 last_cin;
0163 u8 error_resubmit;
0164 int current_port;
0165 };
0166
0167 static void snd_usbmidi_do_output(struct snd_usb_midi_out_endpoint *ep);
0168
0169 static const uint8_t snd_usbmidi_cin_length[] = {
0170 0, 0, 2, 3, 3, 1, 2, 3, 3, 3, 3, 3, 2, 2, 3, 1
0171 };
0172
0173
0174
0175
0176 static int snd_usbmidi_submit_urb(struct urb *urb, gfp_t flags)
0177 {
0178 int err = usb_submit_urb(urb, flags);
0179 if (err < 0 && err != -ENODEV)
0180 dev_err(&urb->dev->dev, "usb_submit_urb: %d\n", err);
0181 return err;
0182 }
0183
0184
0185
0186
0187 static int snd_usbmidi_urb_error(const struct urb *urb)
0188 {
0189 switch (urb->status) {
0190
0191 case -ENOENT:
0192 case -ECONNRESET:
0193 case -ESHUTDOWN:
0194 case -ENODEV:
0195 return -ENODEV;
0196
0197 case -EPROTO:
0198 case -ETIME:
0199 case -EILSEQ:
0200 return -EIO;
0201 default:
0202 dev_err(&urb->dev->dev, "urb status %d\n", urb->status);
0203 return 0;
0204 }
0205 }
0206
0207
0208
0209
0210 static void snd_usbmidi_input_data(struct snd_usb_midi_in_endpoint *ep,
0211 int portidx, uint8_t *data, int length)
0212 {
0213 struct usbmidi_in_port *port = &ep->ports[portidx];
0214
0215 if (!port->substream) {
0216 dev_dbg(&ep->umidi->dev->dev, "unexpected port %d!\n", portidx);
0217 return;
0218 }
0219 if (!test_bit(port->substream->number, &ep->umidi->input_triggered))
0220 return;
0221 snd_rawmidi_receive(port->substream, data, length);
0222 }
0223
0224 #ifdef DUMP_PACKETS
0225 static void dump_urb(const char *type, const u8 *data, int length)
0226 {
0227 snd_printk(KERN_DEBUG "%s packet: [", type);
0228 for (; length > 0; ++data, --length)
0229 printk(KERN_CONT " %02x", *data);
0230 printk(KERN_CONT " ]\n");
0231 }
0232 #else
0233 #define dump_urb(type, data, length)
0234 #endif
0235
0236
0237
0238
0239 static void snd_usbmidi_in_urb_complete(struct urb *urb)
0240 {
0241 struct snd_usb_midi_in_endpoint *ep = urb->context;
0242
0243 if (urb->status == 0) {
0244 dump_urb("received", urb->transfer_buffer, urb->actual_length);
0245 ep->umidi->usb_protocol_ops->input(ep, urb->transfer_buffer,
0246 urb->actual_length);
0247 } else {
0248 int err = snd_usbmidi_urb_error(urb);
0249 if (err < 0) {
0250 if (err != -ENODEV) {
0251 ep->error_resubmit = 1;
0252 mod_timer(&ep->umidi->error_timer,
0253 jiffies + ERROR_DELAY_JIFFIES);
0254 }
0255 return;
0256 }
0257 }
0258
0259 urb->dev = ep->umidi->dev;
0260 snd_usbmidi_submit_urb(urb, GFP_ATOMIC);
0261 }
0262
0263 static void snd_usbmidi_out_urb_complete(struct urb *urb)
0264 {
0265 struct out_urb_context *context = urb->context;
0266 struct snd_usb_midi_out_endpoint *ep = context->ep;
0267 unsigned int urb_index;
0268 unsigned long flags;
0269
0270 spin_lock_irqsave(&ep->buffer_lock, flags);
0271 urb_index = context - ep->urbs;
0272 ep->active_urbs &= ~(1 << urb_index);
0273 if (unlikely(ep->drain_urbs)) {
0274 ep->drain_urbs &= ~(1 << urb_index);
0275 wake_up(&ep->drain_wait);
0276 }
0277 spin_unlock_irqrestore(&ep->buffer_lock, flags);
0278 if (urb->status < 0) {
0279 int err = snd_usbmidi_urb_error(urb);
0280 if (err < 0) {
0281 if (err != -ENODEV)
0282 mod_timer(&ep->umidi->error_timer,
0283 jiffies + ERROR_DELAY_JIFFIES);
0284 return;
0285 }
0286 }
0287 snd_usbmidi_do_output(ep);
0288 }
0289
0290
0291
0292
0293
0294 static void snd_usbmidi_do_output(struct snd_usb_midi_out_endpoint *ep)
0295 {
0296 unsigned int urb_index;
0297 struct urb *urb;
0298 unsigned long flags;
0299
0300 spin_lock_irqsave(&ep->buffer_lock, flags);
0301 if (ep->umidi->disconnected) {
0302 spin_unlock_irqrestore(&ep->buffer_lock, flags);
0303 return;
0304 }
0305
0306 urb_index = ep->next_urb;
0307 for (;;) {
0308 if (!(ep->active_urbs & (1 << urb_index))) {
0309 urb = ep->urbs[urb_index].urb;
0310 urb->transfer_buffer_length = 0;
0311 ep->umidi->usb_protocol_ops->output(ep, urb);
0312 if (urb->transfer_buffer_length == 0)
0313 break;
0314
0315 dump_urb("sending", urb->transfer_buffer,
0316 urb->transfer_buffer_length);
0317 urb->dev = ep->umidi->dev;
0318 if (snd_usbmidi_submit_urb(urb, GFP_ATOMIC) < 0)
0319 break;
0320 ep->active_urbs |= 1 << urb_index;
0321 }
0322 if (++urb_index >= OUTPUT_URBS)
0323 urb_index = 0;
0324 if (urb_index == ep->next_urb)
0325 break;
0326 }
0327 ep->next_urb = urb_index;
0328 spin_unlock_irqrestore(&ep->buffer_lock, flags);
0329 }
0330
0331 static void snd_usbmidi_out_work(struct work_struct *work)
0332 {
0333 struct snd_usb_midi_out_endpoint *ep =
0334 container_of(work, struct snd_usb_midi_out_endpoint, work);
0335
0336 snd_usbmidi_do_output(ep);
0337 }
0338
0339
0340 static void snd_usbmidi_error_timer(struct timer_list *t)
0341 {
0342 struct snd_usb_midi *umidi = from_timer(umidi, t, error_timer);
0343 unsigned int i, j;
0344
0345 spin_lock(&umidi->disc_lock);
0346 if (umidi->disconnected) {
0347 spin_unlock(&umidi->disc_lock);
0348 return;
0349 }
0350 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) {
0351 struct snd_usb_midi_in_endpoint *in = umidi->endpoints[i].in;
0352 if (in && in->error_resubmit) {
0353 in->error_resubmit = 0;
0354 for (j = 0; j < INPUT_URBS; ++j) {
0355 if (atomic_read(&in->urbs[j]->use_count))
0356 continue;
0357 in->urbs[j]->dev = umidi->dev;
0358 snd_usbmidi_submit_urb(in->urbs[j], GFP_ATOMIC);
0359 }
0360 }
0361 if (umidi->endpoints[i].out)
0362 snd_usbmidi_do_output(umidi->endpoints[i].out);
0363 }
0364 spin_unlock(&umidi->disc_lock);
0365 }
0366
0367
0368 static int send_bulk_static_data(struct snd_usb_midi_out_endpoint *ep,
0369 const void *data, int len)
0370 {
0371 int err = 0;
0372 void *buf = kmemdup(data, len, GFP_KERNEL);
0373 if (!buf)
0374 return -ENOMEM;
0375 dump_urb("sending", buf, len);
0376 if (ep->urbs[0].urb)
0377 err = usb_bulk_msg(ep->umidi->dev, ep->urbs[0].urb->pipe,
0378 buf, len, NULL, 250);
0379 kfree(buf);
0380 return err;
0381 }
0382
0383
0384
0385
0386
0387
0388
0389 static void snd_usbmidi_standard_input(struct snd_usb_midi_in_endpoint *ep,
0390 uint8_t *buffer, int buffer_length)
0391 {
0392 int i;
0393
0394 for (i = 0; i + 3 < buffer_length; i += 4)
0395 if (buffer[i] != 0) {
0396 int cable = buffer[i] >> 4;
0397 int length = snd_usbmidi_cin_length[buffer[i] & 0x0f];
0398 snd_usbmidi_input_data(ep, cable, &buffer[i + 1],
0399 length);
0400 }
0401 }
0402
0403 static void snd_usbmidi_midiman_input(struct snd_usb_midi_in_endpoint *ep,
0404 uint8_t *buffer, int buffer_length)
0405 {
0406 int i;
0407
0408 for (i = 0; i + 3 < buffer_length; i += 4)
0409 if (buffer[i + 3] != 0) {
0410 int port = buffer[i + 3] >> 4;
0411 int length = buffer[i + 3] & 3;
0412 snd_usbmidi_input_data(ep, port, &buffer[i], length);
0413 }
0414 }
0415
0416
0417
0418
0419
0420 static void snd_usbmidi_maudio_broken_running_status_input(
0421 struct snd_usb_midi_in_endpoint *ep,
0422 uint8_t *buffer, int buffer_length)
0423 {
0424 int i;
0425
0426 for (i = 0; i + 3 < buffer_length; i += 4)
0427 if (buffer[i] != 0) {
0428 int cable = buffer[i] >> 4;
0429 u8 cin = buffer[i] & 0x0f;
0430 struct usbmidi_in_port *port = &ep->ports[cable];
0431 int length;
0432
0433 length = snd_usbmidi_cin_length[cin];
0434 if (cin == 0xf && buffer[i + 1] >= 0xf8)
0435 ;
0436 else if (cin >= 0x8 && cin <= 0xe)
0437
0438 port->running_status_length = length - 1;
0439 else if (cin == 0x4 &&
0440 port->running_status_length != 0 &&
0441 buffer[i + 1] < 0x80)
0442
0443 length = port->running_status_length;
0444 else
0445
0446
0447
0448
0449
0450
0451 port->running_status_length = 0;
0452 snd_usbmidi_input_data(ep, cable, &buffer[i + 1],
0453 length);
0454 }
0455 }
0456
0457
0458
0459
0460
0461 static void ch345_broken_sysex_input(struct snd_usb_midi_in_endpoint *ep,
0462 uint8_t *buffer, int buffer_length)
0463 {
0464 unsigned int i, cin, length;
0465
0466 for (i = 0; i + 3 < buffer_length; i += 4) {
0467 if (buffer[i] == 0 && i > 0)
0468 break;
0469 cin = buffer[i] & 0x0f;
0470 if (ep->in_sysex &&
0471 cin == ep->last_cin &&
0472 (buffer[i + 1 + (cin == 0x6)] & 0x80) == 0)
0473 cin = 0x4;
0474 #if 0
0475 if (buffer[i + 1] == 0x90) {
0476
0477
0478
0479
0480 }
0481 #endif
0482 length = snd_usbmidi_cin_length[cin];
0483 snd_usbmidi_input_data(ep, 0, &buffer[i + 1], length);
0484 ep->in_sysex = cin == 0x4;
0485 if (!ep->in_sysex)
0486 ep->last_cin = cin;
0487 }
0488 }
0489
0490
0491
0492
0493
0494 static void snd_usbmidi_cme_input(struct snd_usb_midi_in_endpoint *ep,
0495 uint8_t *buffer, int buffer_length)
0496 {
0497 if (buffer_length < 2 || (buffer[0] & 0x0f) != 0x0f)
0498 snd_usbmidi_standard_input(ep, buffer, buffer_length);
0499 else
0500 snd_usbmidi_input_data(ep, buffer[0] >> 4,
0501 &buffer[1], buffer_length - 1);
0502 }
0503
0504
0505
0506
0507 static void snd_usbmidi_output_standard_packet(struct urb *urb, uint8_t p0,
0508 uint8_t p1, uint8_t p2,
0509 uint8_t p3)
0510 {
0511
0512 uint8_t *buf =
0513 (uint8_t *)urb->transfer_buffer + urb->transfer_buffer_length;
0514 buf[0] = p0;
0515 buf[1] = p1;
0516 buf[2] = p2;
0517 buf[3] = p3;
0518 urb->transfer_buffer_length += 4;
0519 }
0520
0521
0522
0523
0524 static void snd_usbmidi_output_midiman_packet(struct urb *urb, uint8_t p0,
0525 uint8_t p1, uint8_t p2,
0526 uint8_t p3)
0527 {
0528
0529 uint8_t *buf =
0530 (uint8_t *)urb->transfer_buffer + urb->transfer_buffer_length;
0531 buf[0] = p1;
0532 buf[1] = p2;
0533 buf[2] = p3;
0534 buf[3] = (p0 & 0xf0) | snd_usbmidi_cin_length[p0 & 0x0f];
0535 urb->transfer_buffer_length += 4;
0536 }
0537
0538
0539
0540
0541 static void snd_usbmidi_transmit_byte(struct usbmidi_out_port *port,
0542 uint8_t b, struct urb *urb)
0543 {
0544 uint8_t p0 = port->cable;
0545 void (*output_packet)(struct urb*, uint8_t, uint8_t, uint8_t, uint8_t) =
0546 port->ep->umidi->usb_protocol_ops->output_packet;
0547
0548 if (b >= 0xf8) {
0549 output_packet(urb, p0 | 0x0f, b, 0, 0);
0550 } else if (b >= 0xf0) {
0551 switch (b) {
0552 case 0xf0:
0553 port->data[0] = b;
0554 port->state = STATE_SYSEX_1;
0555 break;
0556 case 0xf1:
0557 case 0xf3:
0558 port->data[0] = b;
0559 port->state = STATE_1PARAM;
0560 break;
0561 case 0xf2:
0562 port->data[0] = b;
0563 port->state = STATE_2PARAM_1;
0564 break;
0565 case 0xf4:
0566 case 0xf5:
0567 port->state = STATE_UNKNOWN;
0568 break;
0569 case 0xf6:
0570 output_packet(urb, p0 | 0x05, 0xf6, 0, 0);
0571 port->state = STATE_UNKNOWN;
0572 break;
0573 case 0xf7:
0574 switch (port->state) {
0575 case STATE_SYSEX_0:
0576 output_packet(urb, p0 | 0x05, 0xf7, 0, 0);
0577 break;
0578 case STATE_SYSEX_1:
0579 output_packet(urb, p0 | 0x06, port->data[0],
0580 0xf7, 0);
0581 break;
0582 case STATE_SYSEX_2:
0583 output_packet(urb, p0 | 0x07, port->data[0],
0584 port->data[1], 0xf7);
0585 break;
0586 }
0587 port->state = STATE_UNKNOWN;
0588 break;
0589 }
0590 } else if (b >= 0x80) {
0591 port->data[0] = b;
0592 if (b >= 0xc0 && b <= 0xdf)
0593 port->state = STATE_1PARAM;
0594 else
0595 port->state = STATE_2PARAM_1;
0596 } else {
0597 switch (port->state) {
0598 case STATE_1PARAM:
0599 if (port->data[0] < 0xf0) {
0600 p0 |= port->data[0] >> 4;
0601 } else {
0602 p0 |= 0x02;
0603 port->state = STATE_UNKNOWN;
0604 }
0605 output_packet(urb, p0, port->data[0], b, 0);
0606 break;
0607 case STATE_2PARAM_1:
0608 port->data[1] = b;
0609 port->state = STATE_2PARAM_2;
0610 break;
0611 case STATE_2PARAM_2:
0612 if (port->data[0] < 0xf0) {
0613 p0 |= port->data[0] >> 4;
0614 port->state = STATE_2PARAM_1;
0615 } else {
0616 p0 |= 0x03;
0617 port->state = STATE_UNKNOWN;
0618 }
0619 output_packet(urb, p0, port->data[0], port->data[1], b);
0620 break;
0621 case STATE_SYSEX_0:
0622 port->data[0] = b;
0623 port->state = STATE_SYSEX_1;
0624 break;
0625 case STATE_SYSEX_1:
0626 port->data[1] = b;
0627 port->state = STATE_SYSEX_2;
0628 break;
0629 case STATE_SYSEX_2:
0630 output_packet(urb, p0 | 0x04, port->data[0],
0631 port->data[1], b);
0632 port->state = STATE_SYSEX_0;
0633 break;
0634 }
0635 }
0636 }
0637
0638 static void snd_usbmidi_standard_output(struct snd_usb_midi_out_endpoint *ep,
0639 struct urb *urb)
0640 {
0641 int p;
0642
0643
0644 for (p = 0; p < 0x10; ++p) {
0645 struct usbmidi_out_port *port = &ep->ports[p];
0646 if (!port->active)
0647 continue;
0648 while (urb->transfer_buffer_length + 3 < ep->max_transfer) {
0649 uint8_t b;
0650 if (snd_rawmidi_transmit(port->substream, &b, 1) != 1) {
0651 port->active = 0;
0652 break;
0653 }
0654 snd_usbmidi_transmit_byte(port, b, urb);
0655 }
0656 }
0657 }
0658
0659 static const struct usb_protocol_ops snd_usbmidi_standard_ops = {
0660 .input = snd_usbmidi_standard_input,
0661 .output = snd_usbmidi_standard_output,
0662 .output_packet = snd_usbmidi_output_standard_packet,
0663 };
0664
0665 static const struct usb_protocol_ops snd_usbmidi_midiman_ops = {
0666 .input = snd_usbmidi_midiman_input,
0667 .output = snd_usbmidi_standard_output,
0668 .output_packet = snd_usbmidi_output_midiman_packet,
0669 };
0670
0671 static const
0672 struct usb_protocol_ops snd_usbmidi_maudio_broken_running_status_ops = {
0673 .input = snd_usbmidi_maudio_broken_running_status_input,
0674 .output = snd_usbmidi_standard_output,
0675 .output_packet = snd_usbmidi_output_standard_packet,
0676 };
0677
0678 static const struct usb_protocol_ops snd_usbmidi_cme_ops = {
0679 .input = snd_usbmidi_cme_input,
0680 .output = snd_usbmidi_standard_output,
0681 .output_packet = snd_usbmidi_output_standard_packet,
0682 };
0683
0684 static const struct usb_protocol_ops snd_usbmidi_ch345_broken_sysex_ops = {
0685 .input = ch345_broken_sysex_input,
0686 .output = snd_usbmidi_standard_output,
0687 .output_packet = snd_usbmidi_output_standard_packet,
0688 };
0689
0690
0691
0692
0693
0694
0695
0696
0697
0698
0699
0700
0701
0702
0703
0704
0705 static void snd_usbmidi_akai_input(struct snd_usb_midi_in_endpoint *ep,
0706 uint8_t *buffer, int buffer_length)
0707 {
0708 unsigned int pos = 0;
0709 unsigned int len = (unsigned int)buffer_length;
0710 while (pos < len) {
0711 unsigned int port = (buffer[pos] >> 4) - 1;
0712 unsigned int msg_len = buffer[pos] & 0x0f;
0713 pos++;
0714 if (pos + msg_len <= len && port < 2)
0715 snd_usbmidi_input_data(ep, 0, &buffer[pos], msg_len);
0716 pos += msg_len;
0717 }
0718 }
0719
0720 #define MAX_AKAI_SYSEX_LEN 9
0721
0722 static void snd_usbmidi_akai_output(struct snd_usb_midi_out_endpoint *ep,
0723 struct urb *urb)
0724 {
0725 uint8_t *msg;
0726 int pos, end, count, buf_end;
0727 uint8_t tmp[MAX_AKAI_SYSEX_LEN];
0728 struct snd_rawmidi_substream *substream = ep->ports[0].substream;
0729
0730 if (!ep->ports[0].active)
0731 return;
0732
0733 msg = urb->transfer_buffer + urb->transfer_buffer_length;
0734 buf_end = ep->max_transfer - MAX_AKAI_SYSEX_LEN - 1;
0735
0736
0737 while (urb->transfer_buffer_length < buf_end) {
0738 count = snd_rawmidi_transmit_peek(substream,
0739 tmp, MAX_AKAI_SYSEX_LEN);
0740 if (!count) {
0741 ep->ports[0].active = 0;
0742 return;
0743 }
0744
0745 for (pos = 0; pos < count && tmp[pos] != 0xF0; pos++)
0746 ;
0747
0748 if (pos > 0) {
0749 snd_rawmidi_transmit_ack(substream, pos);
0750 continue;
0751 }
0752
0753
0754 for (end = 1; end < count && tmp[end] < 0xF0; end++)
0755 ;
0756
0757
0758 if (end < count && tmp[end] == 0xF0) {
0759
0760 snd_rawmidi_transmit_ack(substream, end);
0761 continue;
0762 }
0763
0764 if (end < count && tmp[end] == 0xF7) {
0765
0766 count = end + 1;
0767 msg[0] = 0x10 | count;
0768 memcpy(&msg[1], tmp, count);
0769 snd_rawmidi_transmit_ack(substream, count);
0770 urb->transfer_buffer_length += count + 1;
0771 msg += count + 1;
0772 continue;
0773 }
0774
0775 if (count < MAX_AKAI_SYSEX_LEN) {
0776 ep->ports[0].active = 0;
0777 return;
0778 }
0779
0780 snd_rawmidi_transmit_ack(substream, count);
0781 }
0782 }
0783
0784 static const struct usb_protocol_ops snd_usbmidi_akai_ops = {
0785 .input = snd_usbmidi_akai_input,
0786 .output = snd_usbmidi_akai_output,
0787 };
0788
0789
0790
0791
0792
0793
0794
0795 static void snd_usbmidi_novation_input(struct snd_usb_midi_in_endpoint *ep,
0796 uint8_t *buffer, int buffer_length)
0797 {
0798 if (buffer_length < 2 || !buffer[0] || buffer_length < buffer[0] + 1)
0799 return;
0800 snd_usbmidi_input_data(ep, 0, &buffer[2], buffer[0] - 1);
0801 }
0802
0803 static void snd_usbmidi_novation_output(struct snd_usb_midi_out_endpoint *ep,
0804 struct urb *urb)
0805 {
0806 uint8_t *transfer_buffer;
0807 int count;
0808
0809 if (!ep->ports[0].active)
0810 return;
0811 transfer_buffer = urb->transfer_buffer;
0812 count = snd_rawmidi_transmit(ep->ports[0].substream,
0813 &transfer_buffer[2],
0814 ep->max_transfer - 2);
0815 if (count < 1) {
0816 ep->ports[0].active = 0;
0817 return;
0818 }
0819 transfer_buffer[0] = 0;
0820 transfer_buffer[1] = count;
0821 urb->transfer_buffer_length = 2 + count;
0822 }
0823
0824 static const struct usb_protocol_ops snd_usbmidi_novation_ops = {
0825 .input = snd_usbmidi_novation_input,
0826 .output = snd_usbmidi_novation_output,
0827 };
0828
0829
0830
0831
0832
0833 static void snd_usbmidi_raw_input(struct snd_usb_midi_in_endpoint *ep,
0834 uint8_t *buffer, int buffer_length)
0835 {
0836 snd_usbmidi_input_data(ep, 0, buffer, buffer_length);
0837 }
0838
0839 static void snd_usbmidi_raw_output(struct snd_usb_midi_out_endpoint *ep,
0840 struct urb *urb)
0841 {
0842 int count;
0843
0844 if (!ep->ports[0].active)
0845 return;
0846 count = snd_rawmidi_transmit(ep->ports[0].substream,
0847 urb->transfer_buffer,
0848 ep->max_transfer);
0849 if (count < 1) {
0850 ep->ports[0].active = 0;
0851 return;
0852 }
0853 urb->transfer_buffer_length = count;
0854 }
0855
0856 static const struct usb_protocol_ops snd_usbmidi_raw_ops = {
0857 .input = snd_usbmidi_raw_input,
0858 .output = snd_usbmidi_raw_output,
0859 };
0860
0861
0862
0863
0864
0865 static void snd_usbmidi_ftdi_input(struct snd_usb_midi_in_endpoint *ep,
0866 uint8_t *buffer, int buffer_length)
0867 {
0868 if (buffer_length > 2)
0869 snd_usbmidi_input_data(ep, 0, buffer + 2, buffer_length - 2);
0870 }
0871
0872 static const struct usb_protocol_ops snd_usbmidi_ftdi_ops = {
0873 .input = snd_usbmidi_ftdi_input,
0874 .output = snd_usbmidi_raw_output,
0875 };
0876
0877 static void snd_usbmidi_us122l_input(struct snd_usb_midi_in_endpoint *ep,
0878 uint8_t *buffer, int buffer_length)
0879 {
0880 if (buffer_length != 9)
0881 return;
0882 buffer_length = 8;
0883 while (buffer_length && buffer[buffer_length - 1] == 0xFD)
0884 buffer_length--;
0885 if (buffer_length)
0886 snd_usbmidi_input_data(ep, 0, buffer, buffer_length);
0887 }
0888
0889 static void snd_usbmidi_us122l_output(struct snd_usb_midi_out_endpoint *ep,
0890 struct urb *urb)
0891 {
0892 int count;
0893
0894 if (!ep->ports[0].active)
0895 return;
0896 switch (snd_usb_get_speed(ep->umidi->dev)) {
0897 case USB_SPEED_HIGH:
0898 case USB_SPEED_SUPER:
0899 case USB_SPEED_SUPER_PLUS:
0900 count = 1;
0901 break;
0902 default:
0903 count = 2;
0904 }
0905 count = snd_rawmidi_transmit(ep->ports[0].substream,
0906 urb->transfer_buffer,
0907 count);
0908 if (count < 1) {
0909 ep->ports[0].active = 0;
0910 return;
0911 }
0912
0913 memset(urb->transfer_buffer + count, 0xFD, ep->max_transfer - count);
0914 urb->transfer_buffer_length = ep->max_transfer;
0915 }
0916
0917 static const struct usb_protocol_ops snd_usbmidi_122l_ops = {
0918 .input = snd_usbmidi_us122l_input,
0919 .output = snd_usbmidi_us122l_output,
0920 };
0921
0922
0923
0924
0925
0926 static void snd_usbmidi_emagic_init_out(struct snd_usb_midi_out_endpoint *ep)
0927 {
0928 static const u8 init_data[] = {
0929
0930 0xf0,
0931 0x00, 0x20, 0x31,
0932 0x64,
0933 0x0b,
0934 0x00,
0935 0x00,
0936 0xf7
0937 };
0938 send_bulk_static_data(ep, init_data, sizeof(init_data));
0939
0940 send_bulk_static_data(ep, init_data, sizeof(init_data));
0941 }
0942
0943 static void snd_usbmidi_emagic_finish_out(struct snd_usb_midi_out_endpoint *ep)
0944 {
0945 static const u8 finish_data[] = {
0946
0947 0xf0,
0948 0x00, 0x20, 0x31,
0949 0x64,
0950 0x10,
0951 0x00,
0952 0x7f,
0953 0x40,
0954 0xf7
0955 };
0956 send_bulk_static_data(ep, finish_data, sizeof(finish_data));
0957 }
0958
0959 static void snd_usbmidi_emagic_input(struct snd_usb_midi_in_endpoint *ep,
0960 uint8_t *buffer, int buffer_length)
0961 {
0962 int i;
0963
0964
0965 for (i = 0; i < buffer_length; ++i)
0966 if (buffer[i] == 0xff) {
0967 buffer_length = i;
0968 break;
0969 }
0970
0971
0972 if (ep->seen_f5)
0973 goto switch_port;
0974
0975 while (buffer_length > 0) {
0976
0977 for (i = 0; i < buffer_length; ++i)
0978 if (buffer[i] == 0xf5)
0979 break;
0980 snd_usbmidi_input_data(ep, ep->current_port, buffer, i);
0981 buffer += i;
0982 buffer_length -= i;
0983
0984 if (buffer_length <= 0)
0985 break;
0986
0987 ep->seen_f5 = 1;
0988 ++buffer;
0989 --buffer_length;
0990
0991 switch_port:
0992 if (buffer_length <= 0)
0993 break;
0994 if (buffer[0] < 0x80) {
0995 ep->current_port = (buffer[0] - 1) & 15;
0996 ++buffer;
0997 --buffer_length;
0998 }
0999 ep->seen_f5 = 0;
1000 }
1001 }
1002
1003 static void snd_usbmidi_emagic_output(struct snd_usb_midi_out_endpoint *ep,
1004 struct urb *urb)
1005 {
1006 int port0 = ep->current_port;
1007 uint8_t *buf = urb->transfer_buffer;
1008 int buf_free = ep->max_transfer;
1009 int length, i;
1010
1011 for (i = 0; i < 0x10; ++i) {
1012
1013 int portnum = (port0 + i) & 15;
1014 struct usbmidi_out_port *port = &ep->ports[portnum];
1015
1016 if (!port->active)
1017 continue;
1018 if (snd_rawmidi_transmit_peek(port->substream, buf, 1) != 1) {
1019 port->active = 0;
1020 continue;
1021 }
1022
1023 if (portnum != ep->current_port) {
1024 if (buf_free < 2)
1025 break;
1026 ep->current_port = portnum;
1027 buf[0] = 0xf5;
1028 buf[1] = (portnum + 1) & 15;
1029 buf += 2;
1030 buf_free -= 2;
1031 }
1032
1033 if (buf_free < 1)
1034 break;
1035 length = snd_rawmidi_transmit(port->substream, buf, buf_free);
1036 if (length > 0) {
1037 buf += length;
1038 buf_free -= length;
1039 if (buf_free < 1)
1040 break;
1041 }
1042 }
1043 if (buf_free < ep->max_transfer && buf_free > 0) {
1044 *buf = 0xff;
1045 --buf_free;
1046 }
1047 urb->transfer_buffer_length = ep->max_transfer - buf_free;
1048 }
1049
1050 static const struct usb_protocol_ops snd_usbmidi_emagic_ops = {
1051 .input = snd_usbmidi_emagic_input,
1052 .output = snd_usbmidi_emagic_output,
1053 .init_out_endpoint = snd_usbmidi_emagic_init_out,
1054 .finish_out_endpoint = snd_usbmidi_emagic_finish_out,
1055 };
1056
1057
1058 static void update_roland_altsetting(struct snd_usb_midi *umidi)
1059 {
1060 struct usb_interface *intf;
1061 struct usb_host_interface *hostif;
1062 struct usb_interface_descriptor *intfd;
1063 int is_light_load;
1064
1065 intf = umidi->iface;
1066 is_light_load = intf->cur_altsetting != intf->altsetting;
1067 if (umidi->roland_load_ctl->private_value == is_light_load)
1068 return;
1069 hostif = &intf->altsetting[umidi->roland_load_ctl->private_value];
1070 intfd = get_iface_desc(hostif);
1071 snd_usbmidi_input_stop(&umidi->list);
1072 usb_set_interface(umidi->dev, intfd->bInterfaceNumber,
1073 intfd->bAlternateSetting);
1074 snd_usbmidi_input_start(&umidi->list);
1075 }
1076
1077 static int substream_open(struct snd_rawmidi_substream *substream, int dir,
1078 int open)
1079 {
1080 struct snd_usb_midi *umidi = substream->rmidi->private_data;
1081 struct snd_kcontrol *ctl;
1082
1083 down_read(&umidi->disc_rwsem);
1084 if (umidi->disconnected) {
1085 up_read(&umidi->disc_rwsem);
1086 return open ? -ENODEV : 0;
1087 }
1088
1089 mutex_lock(&umidi->mutex);
1090 if (open) {
1091 if (!umidi->opened[0] && !umidi->opened[1]) {
1092 if (umidi->roland_load_ctl) {
1093 ctl = umidi->roland_load_ctl;
1094 ctl->vd[0].access |=
1095 SNDRV_CTL_ELEM_ACCESS_INACTIVE;
1096 snd_ctl_notify(umidi->card,
1097 SNDRV_CTL_EVENT_MASK_INFO, &ctl->id);
1098 update_roland_altsetting(umidi);
1099 }
1100 }
1101 umidi->opened[dir]++;
1102 if (umidi->opened[1])
1103 snd_usbmidi_input_start(&umidi->list);
1104 } else {
1105 umidi->opened[dir]--;
1106 if (!umidi->opened[1])
1107 snd_usbmidi_input_stop(&umidi->list);
1108 if (!umidi->opened[0] && !umidi->opened[1]) {
1109 if (umidi->roland_load_ctl) {
1110 ctl = umidi->roland_load_ctl;
1111 ctl->vd[0].access &=
1112 ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
1113 snd_ctl_notify(umidi->card,
1114 SNDRV_CTL_EVENT_MASK_INFO, &ctl->id);
1115 }
1116 }
1117 }
1118 mutex_unlock(&umidi->mutex);
1119 up_read(&umidi->disc_rwsem);
1120 return 0;
1121 }
1122
1123 static int snd_usbmidi_output_open(struct snd_rawmidi_substream *substream)
1124 {
1125 struct snd_usb_midi *umidi = substream->rmidi->private_data;
1126 struct usbmidi_out_port *port = NULL;
1127 int i, j;
1128
1129 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i)
1130 if (umidi->endpoints[i].out)
1131 for (j = 0; j < 0x10; ++j)
1132 if (umidi->endpoints[i].out->ports[j].substream == substream) {
1133 port = &umidi->endpoints[i].out->ports[j];
1134 break;
1135 }
1136 if (!port) {
1137 snd_BUG();
1138 return -ENXIO;
1139 }
1140
1141 substream->runtime->private_data = port;
1142 port->state = STATE_UNKNOWN;
1143 return substream_open(substream, 0, 1);
1144 }
1145
1146 static int snd_usbmidi_output_close(struct snd_rawmidi_substream *substream)
1147 {
1148 struct usbmidi_out_port *port = substream->runtime->private_data;
1149
1150 cancel_work_sync(&port->ep->work);
1151 return substream_open(substream, 0, 0);
1152 }
1153
1154 static void snd_usbmidi_output_trigger(struct snd_rawmidi_substream *substream,
1155 int up)
1156 {
1157 struct usbmidi_out_port *port =
1158 (struct usbmidi_out_port *)substream->runtime->private_data;
1159
1160 port->active = up;
1161 if (up) {
1162 if (port->ep->umidi->disconnected) {
1163
1164
1165 snd_rawmidi_proceed(substream);
1166 return;
1167 }
1168 queue_work(system_highpri_wq, &port->ep->work);
1169 }
1170 }
1171
1172 static void snd_usbmidi_output_drain(struct snd_rawmidi_substream *substream)
1173 {
1174 struct usbmidi_out_port *port = substream->runtime->private_data;
1175 struct snd_usb_midi_out_endpoint *ep = port->ep;
1176 unsigned int drain_urbs;
1177 DEFINE_WAIT(wait);
1178 long timeout = msecs_to_jiffies(50);
1179
1180 if (ep->umidi->disconnected)
1181 return;
1182
1183
1184
1185
1186 spin_lock_irq(&ep->buffer_lock);
1187 drain_urbs = ep->active_urbs;
1188 if (drain_urbs) {
1189 ep->drain_urbs |= drain_urbs;
1190 do {
1191 prepare_to_wait(&ep->drain_wait, &wait,
1192 TASK_UNINTERRUPTIBLE);
1193 spin_unlock_irq(&ep->buffer_lock);
1194 timeout = schedule_timeout(timeout);
1195 spin_lock_irq(&ep->buffer_lock);
1196 drain_urbs &= ep->drain_urbs;
1197 } while (drain_urbs && timeout);
1198 finish_wait(&ep->drain_wait, &wait);
1199 }
1200 port->active = 0;
1201 spin_unlock_irq(&ep->buffer_lock);
1202 }
1203
1204 static int snd_usbmidi_input_open(struct snd_rawmidi_substream *substream)
1205 {
1206 return substream_open(substream, 1, 1);
1207 }
1208
1209 static int snd_usbmidi_input_close(struct snd_rawmidi_substream *substream)
1210 {
1211 return substream_open(substream, 1, 0);
1212 }
1213
1214 static void snd_usbmidi_input_trigger(struct snd_rawmidi_substream *substream,
1215 int up)
1216 {
1217 struct snd_usb_midi *umidi = substream->rmidi->private_data;
1218
1219 if (up)
1220 set_bit(substream->number, &umidi->input_triggered);
1221 else
1222 clear_bit(substream->number, &umidi->input_triggered);
1223 }
1224
1225 static const struct snd_rawmidi_ops snd_usbmidi_output_ops = {
1226 .open = snd_usbmidi_output_open,
1227 .close = snd_usbmidi_output_close,
1228 .trigger = snd_usbmidi_output_trigger,
1229 .drain = snd_usbmidi_output_drain,
1230 };
1231
1232 static const struct snd_rawmidi_ops snd_usbmidi_input_ops = {
1233 .open = snd_usbmidi_input_open,
1234 .close = snd_usbmidi_input_close,
1235 .trigger = snd_usbmidi_input_trigger
1236 };
1237
1238 static void free_urb_and_buffer(struct snd_usb_midi *umidi, struct urb *urb,
1239 unsigned int buffer_length)
1240 {
1241 usb_free_coherent(umidi->dev, buffer_length,
1242 urb->transfer_buffer, urb->transfer_dma);
1243 usb_free_urb(urb);
1244 }
1245
1246
1247
1248
1249
1250 static void snd_usbmidi_in_endpoint_delete(struct snd_usb_midi_in_endpoint *ep)
1251 {
1252 unsigned int i;
1253
1254 for (i = 0; i < INPUT_URBS; ++i)
1255 if (ep->urbs[i])
1256 free_urb_and_buffer(ep->umidi, ep->urbs[i],
1257 ep->urbs[i]->transfer_buffer_length);
1258 kfree(ep);
1259 }
1260
1261
1262
1263
1264 static int snd_usbmidi_in_endpoint_create(struct snd_usb_midi *umidi,
1265 struct snd_usb_midi_endpoint_info *ep_info,
1266 struct snd_usb_midi_endpoint *rep)
1267 {
1268 struct snd_usb_midi_in_endpoint *ep;
1269 void *buffer;
1270 unsigned int pipe;
1271 int length;
1272 unsigned int i;
1273 int err;
1274
1275 rep->in = NULL;
1276 ep = kzalloc(sizeof(*ep), GFP_KERNEL);
1277 if (!ep)
1278 return -ENOMEM;
1279 ep->umidi = umidi;
1280
1281 for (i = 0; i < INPUT_URBS; ++i) {
1282 ep->urbs[i] = usb_alloc_urb(0, GFP_KERNEL);
1283 if (!ep->urbs[i]) {
1284 err = -ENOMEM;
1285 goto error;
1286 }
1287 }
1288 if (ep_info->in_interval)
1289 pipe = usb_rcvintpipe(umidi->dev, ep_info->in_ep);
1290 else
1291 pipe = usb_rcvbulkpipe(umidi->dev, ep_info->in_ep);
1292 length = usb_maxpacket(umidi->dev, pipe);
1293 for (i = 0; i < INPUT_URBS; ++i) {
1294 buffer = usb_alloc_coherent(umidi->dev, length, GFP_KERNEL,
1295 &ep->urbs[i]->transfer_dma);
1296 if (!buffer) {
1297 err = -ENOMEM;
1298 goto error;
1299 }
1300 if (ep_info->in_interval)
1301 usb_fill_int_urb(ep->urbs[i], umidi->dev,
1302 pipe, buffer, length,
1303 snd_usbmidi_in_urb_complete,
1304 ep, ep_info->in_interval);
1305 else
1306 usb_fill_bulk_urb(ep->urbs[i], umidi->dev,
1307 pipe, buffer, length,
1308 snd_usbmidi_in_urb_complete, ep);
1309 ep->urbs[i]->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
1310 err = usb_urb_ep_type_check(ep->urbs[i]);
1311 if (err < 0) {
1312 dev_err(&umidi->dev->dev, "invalid MIDI in EP %x\n",
1313 ep_info->in_ep);
1314 goto error;
1315 }
1316 }
1317
1318 rep->in = ep;
1319 return 0;
1320
1321 error:
1322 snd_usbmidi_in_endpoint_delete(ep);
1323 return err;
1324 }
1325
1326
1327
1328
1329
1330 static void snd_usbmidi_out_endpoint_clear(struct snd_usb_midi_out_endpoint *ep)
1331 {
1332 unsigned int i;
1333
1334 for (i = 0; i < OUTPUT_URBS; ++i)
1335 if (ep->urbs[i].urb) {
1336 free_urb_and_buffer(ep->umidi, ep->urbs[i].urb,
1337 ep->max_transfer);
1338 ep->urbs[i].urb = NULL;
1339 }
1340 }
1341
1342 static void snd_usbmidi_out_endpoint_delete(struct snd_usb_midi_out_endpoint *ep)
1343 {
1344 snd_usbmidi_out_endpoint_clear(ep);
1345 kfree(ep);
1346 }
1347
1348
1349
1350
1351 static int snd_usbmidi_out_endpoint_create(struct snd_usb_midi *umidi,
1352 struct snd_usb_midi_endpoint_info *ep_info,
1353 struct snd_usb_midi_endpoint *rep)
1354 {
1355 struct snd_usb_midi_out_endpoint *ep;
1356 unsigned int i;
1357 unsigned int pipe;
1358 void *buffer;
1359 int err;
1360
1361 rep->out = NULL;
1362 ep = kzalloc(sizeof(*ep), GFP_KERNEL);
1363 if (!ep)
1364 return -ENOMEM;
1365 ep->umidi = umidi;
1366
1367 for (i = 0; i < OUTPUT_URBS; ++i) {
1368 ep->urbs[i].urb = usb_alloc_urb(0, GFP_KERNEL);
1369 if (!ep->urbs[i].urb) {
1370 err = -ENOMEM;
1371 goto error;
1372 }
1373 ep->urbs[i].ep = ep;
1374 }
1375 if (ep_info->out_interval)
1376 pipe = usb_sndintpipe(umidi->dev, ep_info->out_ep);
1377 else
1378 pipe = usb_sndbulkpipe(umidi->dev, ep_info->out_ep);
1379 switch (umidi->usb_id) {
1380 default:
1381 ep->max_transfer = usb_maxpacket(umidi->dev, pipe);
1382 break;
1383
1384
1385
1386
1387 case USB_ID(0x0a67, 0x5011):
1388 case USB_ID(0x0a92, 0x1020):
1389 case USB_ID(0x1430, 0x474b):
1390 case USB_ID(0x15ca, 0x0101):
1391 case USB_ID(0x15ca, 0x1806):
1392 case USB_ID(0x1a86, 0x752d):
1393 case USB_ID(0xfc08, 0x0101):
1394 ep->max_transfer = 4;
1395 break;
1396
1397
1398
1399 case USB_ID(0x0644, 0x800e):
1400 case USB_ID(0x0644, 0x800f):
1401 ep->max_transfer = 9;
1402 break;
1403 }
1404 for (i = 0; i < OUTPUT_URBS; ++i) {
1405 buffer = usb_alloc_coherent(umidi->dev,
1406 ep->max_transfer, GFP_KERNEL,
1407 &ep->urbs[i].urb->transfer_dma);
1408 if (!buffer) {
1409 err = -ENOMEM;
1410 goto error;
1411 }
1412 if (ep_info->out_interval)
1413 usb_fill_int_urb(ep->urbs[i].urb, umidi->dev,
1414 pipe, buffer, ep->max_transfer,
1415 snd_usbmidi_out_urb_complete,
1416 &ep->urbs[i], ep_info->out_interval);
1417 else
1418 usb_fill_bulk_urb(ep->urbs[i].urb, umidi->dev,
1419 pipe, buffer, ep->max_transfer,
1420 snd_usbmidi_out_urb_complete,
1421 &ep->urbs[i]);
1422 err = usb_urb_ep_type_check(ep->urbs[i].urb);
1423 if (err < 0) {
1424 dev_err(&umidi->dev->dev, "invalid MIDI out EP %x\n",
1425 ep_info->out_ep);
1426 goto error;
1427 }
1428 ep->urbs[i].urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
1429 }
1430
1431 spin_lock_init(&ep->buffer_lock);
1432 INIT_WORK(&ep->work, snd_usbmidi_out_work);
1433 init_waitqueue_head(&ep->drain_wait);
1434
1435 for (i = 0; i < 0x10; ++i)
1436 if (ep_info->out_cables & (1 << i)) {
1437 ep->ports[i].ep = ep;
1438 ep->ports[i].cable = i << 4;
1439 }
1440
1441 if (umidi->usb_protocol_ops->init_out_endpoint)
1442 umidi->usb_protocol_ops->init_out_endpoint(ep);
1443
1444 rep->out = ep;
1445 return 0;
1446
1447 error:
1448 snd_usbmidi_out_endpoint_delete(ep);
1449 return err;
1450 }
1451
1452
1453
1454
1455 static void snd_usbmidi_free(struct snd_usb_midi *umidi)
1456 {
1457 int i;
1458
1459 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) {
1460 struct snd_usb_midi_endpoint *ep = &umidi->endpoints[i];
1461 if (ep->out)
1462 snd_usbmidi_out_endpoint_delete(ep->out);
1463 if (ep->in)
1464 snd_usbmidi_in_endpoint_delete(ep->in);
1465 }
1466 mutex_destroy(&umidi->mutex);
1467 kfree(umidi);
1468 }
1469
1470
1471
1472
1473 void snd_usbmidi_disconnect(struct list_head *p)
1474 {
1475 struct snd_usb_midi *umidi;
1476 unsigned int i, j;
1477
1478 umidi = list_entry(p, struct snd_usb_midi, list);
1479
1480
1481
1482
1483
1484 down_write(&umidi->disc_rwsem);
1485 spin_lock_irq(&umidi->disc_lock);
1486 umidi->disconnected = 1;
1487 spin_unlock_irq(&umidi->disc_lock);
1488 up_write(&umidi->disc_rwsem);
1489
1490 del_timer_sync(&umidi->error_timer);
1491
1492 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) {
1493 struct snd_usb_midi_endpoint *ep = &umidi->endpoints[i];
1494 if (ep->out)
1495 cancel_work_sync(&ep->out->work);
1496 if (ep->out) {
1497 for (j = 0; j < OUTPUT_URBS; ++j)
1498 usb_kill_urb(ep->out->urbs[j].urb);
1499 if (umidi->usb_protocol_ops->finish_out_endpoint)
1500 umidi->usb_protocol_ops->finish_out_endpoint(ep->out);
1501 ep->out->active_urbs = 0;
1502 if (ep->out->drain_urbs) {
1503 ep->out->drain_urbs = 0;
1504 wake_up(&ep->out->drain_wait);
1505 }
1506 }
1507 if (ep->in)
1508 for (j = 0; j < INPUT_URBS; ++j)
1509 usb_kill_urb(ep->in->urbs[j]);
1510
1511 if (ep->out)
1512 snd_usbmidi_out_endpoint_clear(ep->out);
1513 if (ep->in) {
1514 snd_usbmidi_in_endpoint_delete(ep->in);
1515 ep->in = NULL;
1516 }
1517 }
1518 }
1519 EXPORT_SYMBOL(snd_usbmidi_disconnect);
1520
1521 static void snd_usbmidi_rawmidi_free(struct snd_rawmidi *rmidi)
1522 {
1523 struct snd_usb_midi *umidi = rmidi->private_data;
1524 snd_usbmidi_free(umidi);
1525 }
1526
1527 static struct snd_rawmidi_substream *snd_usbmidi_find_substream(struct snd_usb_midi *umidi,
1528 int stream,
1529 int number)
1530 {
1531 struct snd_rawmidi_substream *substream;
1532
1533 list_for_each_entry(substream, &umidi->rmidi->streams[stream].substreams,
1534 list) {
1535 if (substream->number == number)
1536 return substream;
1537 }
1538 return NULL;
1539 }
1540
1541
1542
1543
1544
1545
1546 static struct port_info {
1547 u32 id;
1548 short int port;
1549 short int voices;
1550 const char *name;
1551 unsigned int seq_flags;
1552 } snd_usbmidi_port_info[] = {
1553 #define PORT_INFO(vendor, product, num, name_, voices_, flags) \
1554 { .id = USB_ID(vendor, product), \
1555 .port = num, .voices = voices_, \
1556 .name = name_, .seq_flags = flags }
1557 #define EXTERNAL_PORT(vendor, product, num, name) \
1558 PORT_INFO(vendor, product, num, name, 0, \
1559 SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | \
1560 SNDRV_SEQ_PORT_TYPE_HARDWARE | \
1561 SNDRV_SEQ_PORT_TYPE_PORT)
1562 #define CONTROL_PORT(vendor, product, num, name) \
1563 PORT_INFO(vendor, product, num, name, 0, \
1564 SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | \
1565 SNDRV_SEQ_PORT_TYPE_HARDWARE)
1566 #define GM_SYNTH_PORT(vendor, product, num, name, voices) \
1567 PORT_INFO(vendor, product, num, name, voices, \
1568 SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | \
1569 SNDRV_SEQ_PORT_TYPE_MIDI_GM | \
1570 SNDRV_SEQ_PORT_TYPE_HARDWARE | \
1571 SNDRV_SEQ_PORT_TYPE_SYNTHESIZER)
1572 #define ROLAND_SYNTH_PORT(vendor, product, num, name, voices) \
1573 PORT_INFO(vendor, product, num, name, voices, \
1574 SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | \
1575 SNDRV_SEQ_PORT_TYPE_MIDI_GM | \
1576 SNDRV_SEQ_PORT_TYPE_MIDI_GM2 | \
1577 SNDRV_SEQ_PORT_TYPE_MIDI_GS | \
1578 SNDRV_SEQ_PORT_TYPE_MIDI_XG | \
1579 SNDRV_SEQ_PORT_TYPE_HARDWARE | \
1580 SNDRV_SEQ_PORT_TYPE_SYNTHESIZER)
1581 #define SOUNDCANVAS_PORT(vendor, product, num, name, voices) \
1582 PORT_INFO(vendor, product, num, name, voices, \
1583 SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | \
1584 SNDRV_SEQ_PORT_TYPE_MIDI_GM | \
1585 SNDRV_SEQ_PORT_TYPE_MIDI_GM2 | \
1586 SNDRV_SEQ_PORT_TYPE_MIDI_GS | \
1587 SNDRV_SEQ_PORT_TYPE_MIDI_XG | \
1588 SNDRV_SEQ_PORT_TYPE_MIDI_MT32 | \
1589 SNDRV_SEQ_PORT_TYPE_HARDWARE | \
1590 SNDRV_SEQ_PORT_TYPE_SYNTHESIZER)
1591
1592 GM_SYNTH_PORT(0x0499, 0x105c, 0, "%s Tone Generator", 128),
1593 CONTROL_PORT(0x0499, 0x105c, 1, "%s Remote Control"),
1594 EXTERNAL_PORT(0x0499, 0x105c, 2, "%s Thru"),
1595 CONTROL_PORT(0x0499, 0x105c, 3, "%s Editor"),
1596
1597 CONTROL_PORT(0x0582, 0x0000, 2, "%s Control"),
1598
1599 SOUNDCANVAS_PORT(0x0582, 0x0003, 0, "%s Part A", 128),
1600 SOUNDCANVAS_PORT(0x0582, 0x0003, 1, "%s Part B", 128),
1601 SOUNDCANVAS_PORT(0x0582, 0x0003, 2, "%s Part C", 128),
1602 SOUNDCANVAS_PORT(0x0582, 0x0003, 3, "%s Part D", 128),
1603 EXTERNAL_PORT(0x0582, 0x0003, 4, "%s MIDI 1"),
1604 EXTERNAL_PORT(0x0582, 0x0003, 5, "%s MIDI 2"),
1605
1606 EXTERNAL_PORT(0x0582, 0x0004, 0, "%s MIDI"),
1607 CONTROL_PORT(0x0582, 0x0004, 1, "%s Control"),
1608
1609 SOUNDCANVAS_PORT(0x0582, 0x0007, 0, "%s Part A", 64),
1610 SOUNDCANVAS_PORT(0x0582, 0x0007, 1, "%s Part B", 64),
1611 EXTERNAL_PORT(0x0582, 0x0007, 2, "%s MIDI"),
1612
1613 SOUNDCANVAS_PORT(0x0582, 0x000b, 0, "%s Part A", 64),
1614 SOUNDCANVAS_PORT(0x0582, 0x000b, 1, "%s Part B", 64),
1615 EXTERNAL_PORT(0x0582, 0x000b, 2, "%s MIDI"),
1616
1617 SOUNDCANVAS_PORT(0x0582, 0x000c, 0, "%s Part A", 64),
1618 SOUNDCANVAS_PORT(0x0582, 0x000c, 1, "%s Part B", 64),
1619 EXTERNAL_PORT(0x0582, 0x000c, 2, "%s MIDI"),
1620
1621 CONTROL_PORT(0x0582, 0x0014, 8, "%s Control"),
1622
1623 ROLAND_SYNTH_PORT(0x0582, 0x0016, 0, "%s Part A", 128),
1624 ROLAND_SYNTH_PORT(0x0582, 0x0016, 1, "%s Part B", 128),
1625 EXTERNAL_PORT(0x0582, 0x0016, 2, "%s MIDI 1"),
1626 EXTERNAL_PORT(0x0582, 0x0016, 3, "%s MIDI 2"),
1627
1628 CONTROL_PORT(0x0582, 0x0023, 5, "%s Control"),
1629
1630 ROLAND_SYNTH_PORT(0x0582, 0x0027, 0, "%s Part A", 64),
1631 ROLAND_SYNTH_PORT(0x0582, 0x0027, 1, "%s Part B", 64),
1632 EXTERNAL_PORT(0x0582, 0x0027, 2, "%s MIDI"),
1633
1634 ROLAND_SYNTH_PORT(0x0582, 0x0029, 0, "%s Part A", 128),
1635 ROLAND_SYNTH_PORT(0x0582, 0x0029, 1, "%s Part B", 128),
1636 EXTERNAL_PORT(0x0582, 0x0029, 2, "%s MIDI 1"),
1637 EXTERNAL_PORT(0x0582, 0x0029, 3, "%s MIDI 2"),
1638
1639 EXTERNAL_PORT(0x0582, 0x002b, 0, "%s MIDI"),
1640 CONTROL_PORT(0x0582, 0x002b, 1, "%s Control"),
1641
1642 EXTERNAL_PORT(0x0582, 0x002f, 0, "%s MIDI"),
1643 EXTERNAL_PORT(0x0582, 0x002f, 1, "%s External MIDI"),
1644 EXTERNAL_PORT(0x0582, 0x002f, 2, "%s Sync"),
1645
1646 EXTERNAL_PORT(0x0582, 0x0033, 0, "%s MIDI"),
1647 EXTERNAL_PORT(0x0582, 0x0033, 1, "%s 1"),
1648 EXTERNAL_PORT(0x0582, 0x0033, 2, "%s 2"),
1649
1650 EXTERNAL_PORT(0x0582, 0x003b, 0, "%s MIDI"),
1651 CONTROL_PORT(0x0582, 0x003b, 1, "%s Control"),
1652
1653 EXTERNAL_PORT(0x0582, 0x0044, 0, "%s MIDI"),
1654 CONTROL_PORT(0x0582, 0x0044, 1, "%s Control"),
1655
1656 EXTERNAL_PORT(0x0582, 0x0048, 0, "%s MIDI"),
1657 EXTERNAL_PORT(0x0582, 0x0048, 1, "%s 1"),
1658 EXTERNAL_PORT(0x0582, 0x0048, 2, "%s 2"),
1659
1660 EXTERNAL_PORT(0x0582, 0x004d, 0, "%s MIDI"),
1661 EXTERNAL_PORT(0x0582, 0x004d, 1, "%s 1"),
1662 EXTERNAL_PORT(0x0582, 0x004d, 2, "%s 2"),
1663
1664 CONTROL_PORT(0x0582, 0x0089, 0, "%s Control"),
1665
1666 CONTROL_PORT(0x0582, 0x009a, 3, "%s Control"),
1667
1668 CONTROL_PORT(0x0582, 0x00b2, 0, "%s Control"),
1669 EXTERNAL_PORT(0x0582, 0x00b2, 1, "%s MIDI"),
1670
1671 EXTERNAL_PORT(0x0582, 0x00eb, 0, "%s MIDI"),
1672 CONTROL_PORT(0x0582, 0x00eb, 1, "%s Control"),
1673
1674 CONTROL_PORT(0x0582, 0x0102, 0, "%s Control"),
1675 EXTERNAL_PORT(0x0582, 0x0102, 1, "%s MIDI"),
1676
1677 EXTERNAL_PORT(0x0582, 0x010f, 0, "%s MIDI"),
1678 CONTROL_PORT(0x0582, 0x010f, 1, "%s 1"),
1679 CONTROL_PORT(0x0582, 0x010f, 2, "%s 2"),
1680
1681 ROLAND_SYNTH_PORT(0x0582, 0x0114, 0, "%s Synth", 128),
1682 EXTERNAL_PORT(0x0582, 0x0114, 1, "%s MIDI"),
1683 CONTROL_PORT(0x0582, 0x0114, 2, "%s Control"),
1684
1685 EXTERNAL_PORT(0x0582, 0x0120, 0, "%s MIDI"),
1686 CONTROL_PORT(0x0582, 0x0120, 1, "%s Control"),
1687 EXTERNAL_PORT(0x0582, 0x0121, 0, "%s MIDI"),
1688 CONTROL_PORT(0x0582, 0x0121, 1, "%s Control"),
1689
1690 CONTROL_PORT(0x0582, 0x0145, 0, "%s Control"),
1691 EXTERNAL_PORT(0x0582, 0x0145, 1, "%s MIDI"),
1692
1693 CONTROL_PORT(0x0582, 0x0156, 0, "%s Keyboard"),
1694 EXTERNAL_PORT(0x0582, 0x0156, 1, "%s MIDI"),
1695
1696 ROLAND_SYNTH_PORT(0x0582, 0x015b, 0, "%s Synth", 128),
1697 CONTROL_PORT(0x0582, 0x015b, 1, "%s Control"),
1698
1699 CONTROL_PORT(0x0763, 0x1031, 8, "%s Control"),
1700 CONTROL_PORT(0x0763, 0x1033, 8, "%s Control"),
1701
1702 EXTERNAL_PORT(0x07fd, 0x0001, 0, "%s MIDI A"),
1703 EXTERNAL_PORT(0x07fd, 0x0001, 1, "%s MIDI B"),
1704
1705 EXTERNAL_PORT(0x086a, 0x0001, 8, "%s Broadcast"),
1706 EXTERNAL_PORT(0x086a, 0x0002, 8, "%s Broadcast"),
1707 EXTERNAL_PORT(0x086a, 0x0003, 4, "%s Broadcast"),
1708
1709 CONTROL_PORT(0x09e8, 0x0062, 0, "%s Control"),
1710 PORT_INFO(0x09e8, 0x0062, 1, "%s MIDI", 0,
1711 SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC |
1712 SNDRV_SEQ_PORT_TYPE_HARDWARE),
1713
1714 EXTERNAL_PORT(0x133e, 0x0815, 0, "%s MIDI"),
1715 PORT_INFO(0x133e, 0x0815, 1, "%s Synth", 0,
1716 SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC |
1717 SNDRV_SEQ_PORT_TYPE_HARDWARE |
1718 SNDRV_SEQ_PORT_TYPE_SYNTHESIZER),
1719 };
1720
1721 static struct port_info *find_port_info(struct snd_usb_midi *umidi, int number)
1722 {
1723 int i;
1724
1725 for (i = 0; i < ARRAY_SIZE(snd_usbmidi_port_info); ++i) {
1726 if (snd_usbmidi_port_info[i].id == umidi->usb_id &&
1727 snd_usbmidi_port_info[i].port == number)
1728 return &snd_usbmidi_port_info[i];
1729 }
1730 return NULL;
1731 }
1732
1733 static void snd_usbmidi_get_port_info(struct snd_rawmidi *rmidi, int number,
1734 struct snd_seq_port_info *seq_port_info)
1735 {
1736 struct snd_usb_midi *umidi = rmidi->private_data;
1737 struct port_info *port_info;
1738
1739
1740 port_info = find_port_info(umidi, number);
1741 if (port_info) {
1742 seq_port_info->type = port_info->seq_flags;
1743 seq_port_info->midi_voices = port_info->voices;
1744 }
1745 }
1746
1747 static struct usb_midi_in_jack_descriptor *find_usb_in_jack_descriptor(
1748 struct usb_host_interface *hostif, uint8_t jack_id)
1749 {
1750 unsigned char *extra = hostif->extra;
1751 int extralen = hostif->extralen;
1752
1753 while (extralen > 4) {
1754 struct usb_midi_in_jack_descriptor *injd =
1755 (struct usb_midi_in_jack_descriptor *)extra;
1756
1757 if (injd->bLength >= sizeof(*injd) &&
1758 injd->bDescriptorType == USB_DT_CS_INTERFACE &&
1759 injd->bDescriptorSubtype == UAC_MIDI_IN_JACK &&
1760 injd->bJackID == jack_id)
1761 return injd;
1762 if (!extra[0])
1763 break;
1764 extralen -= extra[0];
1765 extra += extra[0];
1766 }
1767 return NULL;
1768 }
1769
1770 static struct usb_midi_out_jack_descriptor *find_usb_out_jack_descriptor(
1771 struct usb_host_interface *hostif, uint8_t jack_id)
1772 {
1773 unsigned char *extra = hostif->extra;
1774 int extralen = hostif->extralen;
1775
1776 while (extralen > 4) {
1777 struct usb_midi_out_jack_descriptor *outjd =
1778 (struct usb_midi_out_jack_descriptor *)extra;
1779
1780 if (outjd->bLength >= sizeof(*outjd) &&
1781 outjd->bDescriptorType == USB_DT_CS_INTERFACE &&
1782 outjd->bDescriptorSubtype == UAC_MIDI_OUT_JACK &&
1783 outjd->bJackID == jack_id)
1784 return outjd;
1785 if (!extra[0])
1786 break;
1787 extralen -= extra[0];
1788 extra += extra[0];
1789 }
1790 return NULL;
1791 }
1792
1793 static void snd_usbmidi_init_substream(struct snd_usb_midi *umidi,
1794 int stream, int number, int jack_id,
1795 struct snd_rawmidi_substream **rsubstream)
1796 {
1797 struct port_info *port_info;
1798 const char *name_format;
1799 struct usb_interface *intf;
1800 struct usb_host_interface *hostif;
1801 struct usb_midi_in_jack_descriptor *injd;
1802 struct usb_midi_out_jack_descriptor *outjd;
1803 uint8_t jack_name_buf[32];
1804 uint8_t *default_jack_name = "MIDI";
1805 uint8_t *jack_name = default_jack_name;
1806 uint8_t iJack;
1807 size_t sz;
1808 int res;
1809
1810 struct snd_rawmidi_substream *substream =
1811 snd_usbmidi_find_substream(umidi, stream, number);
1812 if (!substream) {
1813 dev_err(&umidi->dev->dev, "substream %d:%d not found\n", stream,
1814 number);
1815 return;
1816 }
1817
1818 intf = umidi->iface;
1819 if (intf && jack_id >= 0) {
1820 hostif = intf->cur_altsetting;
1821 iJack = 0;
1822 if (stream != SNDRV_RAWMIDI_STREAM_OUTPUT) {
1823
1824 outjd = find_usb_out_jack_descriptor(hostif, jack_id);
1825 if (outjd) {
1826 sz = USB_DT_MIDI_OUT_SIZE(outjd->bNrInputPins);
1827 if (outjd->bLength >= sz)
1828 iJack = *(((uint8_t *) outjd) + sz - sizeof(uint8_t));
1829 }
1830 } else {
1831
1832 injd = find_usb_in_jack_descriptor(hostif, jack_id);
1833 if (injd)
1834 iJack = injd->iJack;
1835 }
1836 if (iJack != 0) {
1837 res = usb_string(umidi->dev, iJack, jack_name_buf,
1838 ARRAY_SIZE(jack_name_buf));
1839 if (res)
1840 jack_name = jack_name_buf;
1841 }
1842 }
1843
1844 port_info = find_port_info(umidi, number);
1845 name_format = port_info ? port_info->name :
1846 (jack_name != default_jack_name ? "%s %s" : "%s %s %d");
1847 snprintf(substream->name, sizeof(substream->name),
1848 name_format, umidi->card->shortname, jack_name, number + 1);
1849
1850 *rsubstream = substream;
1851 }
1852
1853
1854
1855
1856 static int snd_usbmidi_create_endpoints(struct snd_usb_midi *umidi,
1857 struct snd_usb_midi_endpoint_info *endpoints)
1858 {
1859 int i, j, err;
1860 int out_ports = 0, in_ports = 0;
1861
1862 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) {
1863 if (endpoints[i].out_cables) {
1864 err = snd_usbmidi_out_endpoint_create(umidi,
1865 &endpoints[i],
1866 &umidi->endpoints[i]);
1867 if (err < 0)
1868 return err;
1869 }
1870 if (endpoints[i].in_cables) {
1871 err = snd_usbmidi_in_endpoint_create(umidi,
1872 &endpoints[i],
1873 &umidi->endpoints[i]);
1874 if (err < 0)
1875 return err;
1876 }
1877
1878 for (j = 0; j < 0x10; ++j) {
1879 if (endpoints[i].out_cables & (1 << j)) {
1880 snd_usbmidi_init_substream(umidi,
1881 SNDRV_RAWMIDI_STREAM_OUTPUT,
1882 out_ports,
1883 endpoints[i].assoc_out_jacks[j],
1884 &umidi->endpoints[i].out->ports[j].substream);
1885 ++out_ports;
1886 }
1887 if (endpoints[i].in_cables & (1 << j)) {
1888 snd_usbmidi_init_substream(umidi,
1889 SNDRV_RAWMIDI_STREAM_INPUT,
1890 in_ports,
1891 endpoints[i].assoc_in_jacks[j],
1892 &umidi->endpoints[i].in->ports[j].substream);
1893 ++in_ports;
1894 }
1895 }
1896 }
1897 dev_dbg(&umidi->dev->dev, "created %d output and %d input ports\n",
1898 out_ports, in_ports);
1899 return 0;
1900 }
1901
1902 static struct usb_ms_endpoint_descriptor *find_usb_ms_endpoint_descriptor(
1903 struct usb_host_endpoint *hostep)
1904 {
1905 unsigned char *extra = hostep->extra;
1906 int extralen = hostep->extralen;
1907
1908 while (extralen > 3) {
1909 struct usb_ms_endpoint_descriptor *ms_ep =
1910 (struct usb_ms_endpoint_descriptor *)extra;
1911
1912 if (ms_ep->bLength > 3 &&
1913 ms_ep->bDescriptorType == USB_DT_CS_ENDPOINT &&
1914 ms_ep->bDescriptorSubtype == UAC_MS_GENERAL)
1915 return ms_ep;
1916 if (!extra[0])
1917 break;
1918 extralen -= extra[0];
1919 extra += extra[0];
1920 }
1921 return NULL;
1922 }
1923
1924
1925
1926
1927 static int snd_usbmidi_get_ms_info(struct snd_usb_midi *umidi,
1928 struct snd_usb_midi_endpoint_info *endpoints)
1929 {
1930 struct usb_interface *intf;
1931 struct usb_host_interface *hostif;
1932 struct usb_interface_descriptor *intfd;
1933 struct usb_ms_header_descriptor *ms_header;
1934 struct usb_host_endpoint *hostep;
1935 struct usb_endpoint_descriptor *ep;
1936 struct usb_ms_endpoint_descriptor *ms_ep;
1937 int i, j, epidx;
1938
1939 intf = umidi->iface;
1940 if (!intf)
1941 return -ENXIO;
1942 hostif = &intf->altsetting[0];
1943 intfd = get_iface_desc(hostif);
1944 ms_header = (struct usb_ms_header_descriptor *)hostif->extra;
1945 if (hostif->extralen >= 7 &&
1946 ms_header->bLength >= 7 &&
1947 ms_header->bDescriptorType == USB_DT_CS_INTERFACE &&
1948 ms_header->bDescriptorSubtype == UAC_HEADER)
1949 dev_dbg(&umidi->dev->dev, "MIDIStreaming version %02x.%02x\n",
1950 ((uint8_t *)&ms_header->bcdMSC)[1], ((uint8_t *)&ms_header->bcdMSC)[0]);
1951 else
1952 dev_warn(&umidi->dev->dev,
1953 "MIDIStreaming interface descriptor not found\n");
1954
1955 epidx = 0;
1956 for (i = 0; i < intfd->bNumEndpoints; ++i) {
1957 hostep = &hostif->endpoint[i];
1958 ep = get_ep_desc(hostep);
1959 if (!usb_endpoint_xfer_bulk(ep) && !usb_endpoint_xfer_int(ep))
1960 continue;
1961 ms_ep = find_usb_ms_endpoint_descriptor(hostep);
1962 if (!ms_ep)
1963 continue;
1964 if (ms_ep->bLength <= sizeof(*ms_ep))
1965 continue;
1966 if (ms_ep->bNumEmbMIDIJack > 0x10)
1967 continue;
1968 if (ms_ep->bLength < sizeof(*ms_ep) + ms_ep->bNumEmbMIDIJack)
1969 continue;
1970 if (usb_endpoint_dir_out(ep)) {
1971 if (endpoints[epidx].out_ep) {
1972 if (++epidx >= MIDI_MAX_ENDPOINTS) {
1973 dev_warn(&umidi->dev->dev,
1974 "too many endpoints\n");
1975 break;
1976 }
1977 }
1978 endpoints[epidx].out_ep = usb_endpoint_num(ep);
1979 if (usb_endpoint_xfer_int(ep))
1980 endpoints[epidx].out_interval = ep->bInterval;
1981 else if (snd_usb_get_speed(umidi->dev) == USB_SPEED_LOW)
1982
1983
1984
1985
1986
1987 endpoints[epidx].out_interval = 1;
1988 endpoints[epidx].out_cables =
1989 (1 << ms_ep->bNumEmbMIDIJack) - 1;
1990 for (j = 0; j < ms_ep->bNumEmbMIDIJack; ++j)
1991 endpoints[epidx].assoc_out_jacks[j] = ms_ep->baAssocJackID[j];
1992 for (; j < ARRAY_SIZE(endpoints[epidx].assoc_out_jacks); ++j)
1993 endpoints[epidx].assoc_out_jacks[j] = -1;
1994 dev_dbg(&umidi->dev->dev, "EP %02X: %d jack(s)\n",
1995 ep->bEndpointAddress, ms_ep->bNumEmbMIDIJack);
1996 } else {
1997 if (endpoints[epidx].in_ep) {
1998 if (++epidx >= MIDI_MAX_ENDPOINTS) {
1999 dev_warn(&umidi->dev->dev,
2000 "too many endpoints\n");
2001 break;
2002 }
2003 }
2004 endpoints[epidx].in_ep = usb_endpoint_num(ep);
2005 if (usb_endpoint_xfer_int(ep))
2006 endpoints[epidx].in_interval = ep->bInterval;
2007 else if (snd_usb_get_speed(umidi->dev) == USB_SPEED_LOW)
2008 endpoints[epidx].in_interval = 1;
2009 endpoints[epidx].in_cables =
2010 (1 << ms_ep->bNumEmbMIDIJack) - 1;
2011 for (j = 0; j < ms_ep->bNumEmbMIDIJack; ++j)
2012 endpoints[epidx].assoc_in_jacks[j] = ms_ep->baAssocJackID[j];
2013 for (; j < ARRAY_SIZE(endpoints[epidx].assoc_in_jacks); ++j)
2014 endpoints[epidx].assoc_in_jacks[j] = -1;
2015 dev_dbg(&umidi->dev->dev, "EP %02X: %d jack(s)\n",
2016 ep->bEndpointAddress, ms_ep->bNumEmbMIDIJack);
2017 }
2018 }
2019 return 0;
2020 }
2021
2022 static int roland_load_info(struct snd_kcontrol *kcontrol,
2023 struct snd_ctl_elem_info *info)
2024 {
2025 static const char *const names[] = { "High Load", "Light Load" };
2026
2027 return snd_ctl_enum_info(info, 1, 2, names);
2028 }
2029
2030 static int roland_load_get(struct snd_kcontrol *kcontrol,
2031 struct snd_ctl_elem_value *value)
2032 {
2033 value->value.enumerated.item[0] = kcontrol->private_value;
2034 return 0;
2035 }
2036
2037 static int roland_load_put(struct snd_kcontrol *kcontrol,
2038 struct snd_ctl_elem_value *value)
2039 {
2040 struct snd_usb_midi *umidi = kcontrol->private_data;
2041 int changed;
2042
2043 if (value->value.enumerated.item[0] > 1)
2044 return -EINVAL;
2045 mutex_lock(&umidi->mutex);
2046 changed = value->value.enumerated.item[0] != kcontrol->private_value;
2047 if (changed)
2048 kcontrol->private_value = value->value.enumerated.item[0];
2049 mutex_unlock(&umidi->mutex);
2050 return changed;
2051 }
2052
2053 static const struct snd_kcontrol_new roland_load_ctl = {
2054 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2055 .name = "MIDI Input Mode",
2056 .info = roland_load_info,
2057 .get = roland_load_get,
2058 .put = roland_load_put,
2059 .private_value = 1,
2060 };
2061
2062
2063
2064
2065
2066 static void snd_usbmidi_switch_roland_altsetting(struct snd_usb_midi *umidi)
2067 {
2068 struct usb_interface *intf;
2069 struct usb_host_interface *hostif;
2070 struct usb_interface_descriptor *intfd;
2071
2072 intf = umidi->iface;
2073 if (!intf || intf->num_altsetting != 2)
2074 return;
2075
2076 hostif = &intf->altsetting[1];
2077 intfd = get_iface_desc(hostif);
2078
2079
2080
2081 if (intfd->bNumEndpoints != 2 ||
2082 !((get_endpoint(hostif, 0)->bmAttributes &
2083 USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT ||
2084 (get_endpoint(hostif, 1)->bmAttributes &
2085 USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT))
2086 return;
2087
2088 dev_dbg(&umidi->dev->dev, "switching to altsetting %d with int ep\n",
2089 intfd->bAlternateSetting);
2090 usb_set_interface(umidi->dev, intfd->bInterfaceNumber,
2091 intfd->bAlternateSetting);
2092
2093 umidi->roland_load_ctl = snd_ctl_new1(&roland_load_ctl, umidi);
2094 if (snd_ctl_add(umidi->card, umidi->roland_load_ctl) < 0)
2095 umidi->roland_load_ctl = NULL;
2096 }
2097
2098
2099
2100
2101 static int snd_usbmidi_detect_endpoints(struct snd_usb_midi *umidi,
2102 struct snd_usb_midi_endpoint_info *endpoint,
2103 int max_endpoints)
2104 {
2105 struct usb_interface *intf;
2106 struct usb_host_interface *hostif;
2107 struct usb_interface_descriptor *intfd;
2108 struct usb_endpoint_descriptor *epd;
2109 int i, out_eps = 0, in_eps = 0;
2110
2111 if (USB_ID_VENDOR(umidi->usb_id) == 0x0582)
2112 snd_usbmidi_switch_roland_altsetting(umidi);
2113
2114 if (endpoint[0].out_ep || endpoint[0].in_ep)
2115 return 0;
2116
2117 intf = umidi->iface;
2118 if (!intf || intf->num_altsetting < 1)
2119 return -ENOENT;
2120 hostif = intf->cur_altsetting;
2121 intfd = get_iface_desc(hostif);
2122
2123 for (i = 0; i < intfd->bNumEndpoints; ++i) {
2124 epd = get_endpoint(hostif, i);
2125 if (!usb_endpoint_xfer_bulk(epd) &&
2126 !usb_endpoint_xfer_int(epd))
2127 continue;
2128 if (out_eps < max_endpoints &&
2129 usb_endpoint_dir_out(epd)) {
2130 endpoint[out_eps].out_ep = usb_endpoint_num(epd);
2131 if (usb_endpoint_xfer_int(epd))
2132 endpoint[out_eps].out_interval = epd->bInterval;
2133 ++out_eps;
2134 }
2135 if (in_eps < max_endpoints &&
2136 usb_endpoint_dir_in(epd)) {
2137 endpoint[in_eps].in_ep = usb_endpoint_num(epd);
2138 if (usb_endpoint_xfer_int(epd))
2139 endpoint[in_eps].in_interval = epd->bInterval;
2140 ++in_eps;
2141 }
2142 }
2143 return (out_eps || in_eps) ? 0 : -ENOENT;
2144 }
2145
2146
2147
2148
2149 static int snd_usbmidi_detect_per_port_endpoints(struct snd_usb_midi *umidi,
2150 struct snd_usb_midi_endpoint_info *endpoints)
2151 {
2152 int err, i;
2153
2154 err = snd_usbmidi_detect_endpoints(umidi, endpoints, MIDI_MAX_ENDPOINTS);
2155 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) {
2156 if (endpoints[i].out_ep)
2157 endpoints[i].out_cables = 0x0001;
2158 if (endpoints[i].in_ep)
2159 endpoints[i].in_cables = 0x0001;
2160 }
2161 return err;
2162 }
2163
2164
2165
2166
2167 static int snd_usbmidi_detect_yamaha(struct snd_usb_midi *umidi,
2168 struct snd_usb_midi_endpoint_info *endpoint)
2169 {
2170 struct usb_interface *intf;
2171 struct usb_host_interface *hostif;
2172 struct usb_interface_descriptor *intfd;
2173 uint8_t *cs_desc;
2174
2175 intf = umidi->iface;
2176 if (!intf)
2177 return -ENOENT;
2178 hostif = intf->altsetting;
2179 intfd = get_iface_desc(hostif);
2180 if (intfd->bNumEndpoints < 1)
2181 return -ENOENT;
2182
2183
2184
2185
2186
2187 for (cs_desc = hostif->extra;
2188 cs_desc < hostif->extra + hostif->extralen && cs_desc[0] >= 2;
2189 cs_desc += cs_desc[0]) {
2190 if (cs_desc[1] == USB_DT_CS_INTERFACE) {
2191 if (cs_desc[2] == UAC_MIDI_IN_JACK)
2192 endpoint->in_cables =
2193 (endpoint->in_cables << 1) | 1;
2194 else if (cs_desc[2] == UAC_MIDI_OUT_JACK)
2195 endpoint->out_cables =
2196 (endpoint->out_cables << 1) | 1;
2197 }
2198 }
2199 if (!endpoint->in_cables && !endpoint->out_cables)
2200 return -ENOENT;
2201
2202 return snd_usbmidi_detect_endpoints(umidi, endpoint, 1);
2203 }
2204
2205
2206
2207
2208 static int snd_usbmidi_detect_roland(struct snd_usb_midi *umidi,
2209 struct snd_usb_midi_endpoint_info *endpoint)
2210 {
2211 struct usb_interface *intf;
2212 struct usb_host_interface *hostif;
2213 u8 *cs_desc;
2214
2215 intf = umidi->iface;
2216 if (!intf)
2217 return -ENOENT;
2218 hostif = intf->altsetting;
2219
2220
2221
2222
2223 for (cs_desc = hostif->extra;
2224 cs_desc < hostif->extra + hostif->extralen && cs_desc[0] >= 2;
2225 cs_desc += cs_desc[0]) {
2226 if (cs_desc[0] >= 6 &&
2227 cs_desc[1] == USB_DT_CS_INTERFACE &&
2228 cs_desc[2] == 0xf1 &&
2229 cs_desc[3] == 0x02) {
2230 if (cs_desc[4] > 0x10 || cs_desc[5] > 0x10)
2231 continue;
2232 endpoint->in_cables = (1 << cs_desc[4]) - 1;
2233 endpoint->out_cables = (1 << cs_desc[5]) - 1;
2234 return snd_usbmidi_detect_endpoints(umidi, endpoint, 1);
2235 } else if (cs_desc[0] >= 7 &&
2236 cs_desc[1] == USB_DT_CS_INTERFACE &&
2237 cs_desc[2] == UAC_HEADER) {
2238 return snd_usbmidi_get_ms_info(umidi, endpoint);
2239 }
2240 }
2241
2242 return -ENODEV;
2243 }
2244
2245
2246
2247
2248 static int snd_usbmidi_create_endpoints_midiman(struct snd_usb_midi *umidi,
2249 struct snd_usb_midi_endpoint_info *endpoint)
2250 {
2251 struct snd_usb_midi_endpoint_info ep_info;
2252 struct usb_interface *intf;
2253 struct usb_host_interface *hostif;
2254 struct usb_interface_descriptor *intfd;
2255 struct usb_endpoint_descriptor *epd;
2256 int cable, err;
2257
2258 intf = umidi->iface;
2259 if (!intf)
2260 return -ENOENT;
2261 hostif = intf->altsetting;
2262 intfd = get_iface_desc(hostif);
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273 if (intfd->bNumEndpoints < (endpoint->out_cables > 0x0001 ? 5 : 3)) {
2274 dev_dbg(&umidi->dev->dev, "not enough endpoints\n");
2275 return -ENOENT;
2276 }
2277
2278 epd = get_endpoint(hostif, 0);
2279 if (!usb_endpoint_dir_in(epd) || !usb_endpoint_xfer_int(epd)) {
2280 dev_dbg(&umidi->dev->dev, "endpoint[0] isn't interrupt\n");
2281 return -ENXIO;
2282 }
2283 epd = get_endpoint(hostif, 2);
2284 if (!usb_endpoint_dir_out(epd) || !usb_endpoint_xfer_bulk(epd)) {
2285 dev_dbg(&umidi->dev->dev, "endpoint[2] isn't bulk output\n");
2286 return -ENXIO;
2287 }
2288 if (endpoint->out_cables > 0x0001) {
2289 epd = get_endpoint(hostif, 4);
2290 if (!usb_endpoint_dir_out(epd) ||
2291 !usb_endpoint_xfer_bulk(epd)) {
2292 dev_dbg(&umidi->dev->dev,
2293 "endpoint[4] isn't bulk output\n");
2294 return -ENXIO;
2295 }
2296 }
2297
2298 ep_info.out_ep = get_endpoint(hostif, 2)->bEndpointAddress &
2299 USB_ENDPOINT_NUMBER_MASK;
2300 ep_info.out_interval = 0;
2301 ep_info.out_cables = endpoint->out_cables & 0x5555;
2302 err = snd_usbmidi_out_endpoint_create(umidi, &ep_info,
2303 &umidi->endpoints[0]);
2304 if (err < 0)
2305 return err;
2306
2307 ep_info.in_ep = get_endpoint(hostif, 0)->bEndpointAddress &
2308 USB_ENDPOINT_NUMBER_MASK;
2309 ep_info.in_interval = get_endpoint(hostif, 0)->bInterval;
2310 ep_info.in_cables = endpoint->in_cables;
2311 err = snd_usbmidi_in_endpoint_create(umidi, &ep_info,
2312 &umidi->endpoints[0]);
2313 if (err < 0)
2314 return err;
2315
2316 if (endpoint->out_cables > 0x0001) {
2317 ep_info.out_ep = get_endpoint(hostif, 4)->bEndpointAddress &
2318 USB_ENDPOINT_NUMBER_MASK;
2319 ep_info.out_cables = endpoint->out_cables & 0xaaaa;
2320 err = snd_usbmidi_out_endpoint_create(umidi, &ep_info,
2321 &umidi->endpoints[1]);
2322 if (err < 0)
2323 return err;
2324 }
2325
2326 for (cable = 0; cable < 0x10; ++cable) {
2327 if (endpoint->out_cables & (1 << cable))
2328 snd_usbmidi_init_substream(umidi,
2329 SNDRV_RAWMIDI_STREAM_OUTPUT,
2330 cable,
2331 -1 ,
2332 &umidi->endpoints[cable & 1].out->ports[cable].substream);
2333 if (endpoint->in_cables & (1 << cable))
2334 snd_usbmidi_init_substream(umidi,
2335 SNDRV_RAWMIDI_STREAM_INPUT,
2336 cable,
2337 -1 ,
2338 &umidi->endpoints[0].in->ports[cable].substream);
2339 }
2340 return 0;
2341 }
2342
2343 static const struct snd_rawmidi_global_ops snd_usbmidi_ops = {
2344 .get_port_info = snd_usbmidi_get_port_info,
2345 };
2346
2347 static int snd_usbmidi_create_rawmidi(struct snd_usb_midi *umidi,
2348 int out_ports, int in_ports)
2349 {
2350 struct snd_rawmidi *rmidi;
2351 int err;
2352
2353 err = snd_rawmidi_new(umidi->card, "USB MIDI",
2354 umidi->next_midi_device++,
2355 out_ports, in_ports, &rmidi);
2356 if (err < 0)
2357 return err;
2358 strcpy(rmidi->name, umidi->card->shortname);
2359 rmidi->info_flags = SNDRV_RAWMIDI_INFO_OUTPUT |
2360 SNDRV_RAWMIDI_INFO_INPUT |
2361 SNDRV_RAWMIDI_INFO_DUPLEX;
2362 rmidi->ops = &snd_usbmidi_ops;
2363 rmidi->private_data = umidi;
2364 rmidi->private_free = snd_usbmidi_rawmidi_free;
2365 snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT,
2366 &snd_usbmidi_output_ops);
2367 snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_INPUT,
2368 &snd_usbmidi_input_ops);
2369
2370 umidi->rmidi = rmidi;
2371 return 0;
2372 }
2373
2374
2375
2376
2377 void snd_usbmidi_input_stop(struct list_head *p)
2378 {
2379 struct snd_usb_midi *umidi;
2380 unsigned int i, j;
2381
2382 umidi = list_entry(p, struct snd_usb_midi, list);
2383 if (!umidi->input_running)
2384 return;
2385 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) {
2386 struct snd_usb_midi_endpoint *ep = &umidi->endpoints[i];
2387 if (ep->in)
2388 for (j = 0; j < INPUT_URBS; ++j)
2389 usb_kill_urb(ep->in->urbs[j]);
2390 }
2391 umidi->input_running = 0;
2392 }
2393 EXPORT_SYMBOL(snd_usbmidi_input_stop);
2394
2395 static void snd_usbmidi_input_start_ep(struct snd_usb_midi *umidi,
2396 struct snd_usb_midi_in_endpoint *ep)
2397 {
2398 unsigned int i;
2399 unsigned long flags;
2400
2401 if (!ep)
2402 return;
2403 for (i = 0; i < INPUT_URBS; ++i) {
2404 struct urb *urb = ep->urbs[i];
2405 spin_lock_irqsave(&umidi->disc_lock, flags);
2406 if (!atomic_read(&urb->use_count)) {
2407 urb->dev = ep->umidi->dev;
2408 snd_usbmidi_submit_urb(urb, GFP_ATOMIC);
2409 }
2410 spin_unlock_irqrestore(&umidi->disc_lock, flags);
2411 }
2412 }
2413
2414
2415
2416
2417 void snd_usbmidi_input_start(struct list_head *p)
2418 {
2419 struct snd_usb_midi *umidi;
2420 int i;
2421
2422 umidi = list_entry(p, struct snd_usb_midi, list);
2423 if (umidi->input_running || !umidi->opened[1])
2424 return;
2425 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i)
2426 snd_usbmidi_input_start_ep(umidi, umidi->endpoints[i].in);
2427 umidi->input_running = 1;
2428 }
2429 EXPORT_SYMBOL(snd_usbmidi_input_start);
2430
2431
2432
2433
2434 void snd_usbmidi_suspend(struct list_head *p)
2435 {
2436 struct snd_usb_midi *umidi;
2437
2438 umidi = list_entry(p, struct snd_usb_midi, list);
2439 mutex_lock(&umidi->mutex);
2440 snd_usbmidi_input_stop(p);
2441 mutex_unlock(&umidi->mutex);
2442 }
2443 EXPORT_SYMBOL(snd_usbmidi_suspend);
2444
2445
2446
2447
2448 void snd_usbmidi_resume(struct list_head *p)
2449 {
2450 struct snd_usb_midi *umidi;
2451
2452 umidi = list_entry(p, struct snd_usb_midi, list);
2453 mutex_lock(&umidi->mutex);
2454 snd_usbmidi_input_start(p);
2455 mutex_unlock(&umidi->mutex);
2456 }
2457 EXPORT_SYMBOL(snd_usbmidi_resume);
2458
2459
2460
2461
2462 int __snd_usbmidi_create(struct snd_card *card,
2463 struct usb_interface *iface,
2464 struct list_head *midi_list,
2465 const struct snd_usb_audio_quirk *quirk,
2466 unsigned int usb_id)
2467 {
2468 struct snd_usb_midi *umidi;
2469 struct snd_usb_midi_endpoint_info endpoints[MIDI_MAX_ENDPOINTS];
2470 int out_ports, in_ports;
2471 int i, err;
2472
2473 umidi = kzalloc(sizeof(*umidi), GFP_KERNEL);
2474 if (!umidi)
2475 return -ENOMEM;
2476 umidi->dev = interface_to_usbdev(iface);
2477 umidi->card = card;
2478 umidi->iface = iface;
2479 umidi->quirk = quirk;
2480 umidi->usb_protocol_ops = &snd_usbmidi_standard_ops;
2481 spin_lock_init(&umidi->disc_lock);
2482 init_rwsem(&umidi->disc_rwsem);
2483 mutex_init(&umidi->mutex);
2484 if (!usb_id)
2485 usb_id = USB_ID(le16_to_cpu(umidi->dev->descriptor.idVendor),
2486 le16_to_cpu(umidi->dev->descriptor.idProduct));
2487 umidi->usb_id = usb_id;
2488 timer_setup(&umidi->error_timer, snd_usbmidi_error_timer, 0);
2489
2490
2491 memset(endpoints, 0, sizeof(endpoints));
2492 switch (quirk ? quirk->type : QUIRK_MIDI_STANDARD_INTERFACE) {
2493 case QUIRK_MIDI_STANDARD_INTERFACE:
2494 err = snd_usbmidi_get_ms_info(umidi, endpoints);
2495 if (umidi->usb_id == USB_ID(0x0763, 0x0150))
2496 umidi->usb_protocol_ops =
2497 &snd_usbmidi_maudio_broken_running_status_ops;
2498 break;
2499 case QUIRK_MIDI_US122L:
2500 umidi->usb_protocol_ops = &snd_usbmidi_122l_ops;
2501 fallthrough;
2502 case QUIRK_MIDI_FIXED_ENDPOINT:
2503 memcpy(&endpoints[0], quirk->data,
2504 sizeof(struct snd_usb_midi_endpoint_info));
2505 err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1);
2506 break;
2507 case QUIRK_MIDI_YAMAHA:
2508 err = snd_usbmidi_detect_yamaha(umidi, &endpoints[0]);
2509 break;
2510 case QUIRK_MIDI_ROLAND:
2511 err = snd_usbmidi_detect_roland(umidi, &endpoints[0]);
2512 break;
2513 case QUIRK_MIDI_MIDIMAN:
2514 umidi->usb_protocol_ops = &snd_usbmidi_midiman_ops;
2515 memcpy(&endpoints[0], quirk->data,
2516 sizeof(struct snd_usb_midi_endpoint_info));
2517 err = 0;
2518 break;
2519 case QUIRK_MIDI_NOVATION:
2520 umidi->usb_protocol_ops = &snd_usbmidi_novation_ops;
2521 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2522 break;
2523 case QUIRK_MIDI_RAW_BYTES:
2524 umidi->usb_protocol_ops = &snd_usbmidi_raw_ops;
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534 if (umidi->usb_id == USB_ID(0x07fd, 0x0001))
2535 usb_set_interface(umidi->dev, 0, 0);
2536 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2537 break;
2538 case QUIRK_MIDI_EMAGIC:
2539 umidi->usb_protocol_ops = &snd_usbmidi_emagic_ops;
2540 memcpy(&endpoints[0], quirk->data,
2541 sizeof(struct snd_usb_midi_endpoint_info));
2542 err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1);
2543 break;
2544 case QUIRK_MIDI_CME:
2545 umidi->usb_protocol_ops = &snd_usbmidi_cme_ops;
2546 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2547 break;
2548 case QUIRK_MIDI_AKAI:
2549 umidi->usb_protocol_ops = &snd_usbmidi_akai_ops;
2550 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2551
2552 endpoints[1].out_cables = 0;
2553 break;
2554 case QUIRK_MIDI_FTDI:
2555 umidi->usb_protocol_ops = &snd_usbmidi_ftdi_ops;
2556
2557
2558 err = usb_control_msg(umidi->dev, usb_sndctrlpipe(umidi->dev, 0),
2559 3, 0x40, 0x60, 0, NULL, 0, 1000);
2560 if (err < 0)
2561 break;
2562
2563 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2564 break;
2565 case QUIRK_MIDI_CH345:
2566 umidi->usb_protocol_ops = &snd_usbmidi_ch345_broken_sysex_ops;
2567 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2568 break;
2569 default:
2570 dev_err(&umidi->dev->dev, "invalid quirk type %d\n",
2571 quirk->type);
2572 err = -ENXIO;
2573 break;
2574 }
2575 if (err < 0)
2576 goto free_midi;
2577
2578
2579 out_ports = 0;
2580 in_ports = 0;
2581 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) {
2582 out_ports += hweight16(endpoints[i].out_cables);
2583 in_ports += hweight16(endpoints[i].in_cables);
2584 }
2585 err = snd_usbmidi_create_rawmidi(umidi, out_ports, in_ports);
2586 if (err < 0)
2587 goto free_midi;
2588
2589
2590 if (quirk && quirk->type == QUIRK_MIDI_MIDIMAN)
2591 err = snd_usbmidi_create_endpoints_midiman(umidi, &endpoints[0]);
2592 else
2593 err = snd_usbmidi_create_endpoints(umidi, endpoints);
2594 if (err < 0)
2595 goto exit;
2596
2597 usb_autopm_get_interface_no_resume(umidi->iface);
2598
2599 list_add_tail(&umidi->list, midi_list);
2600 return 0;
2601
2602 free_midi:
2603 kfree(umidi);
2604 exit:
2605 return err;
2606 }
2607 EXPORT_SYMBOL(__snd_usbmidi_create);