Lines Matching refs:umidi
8 * NetBSD's umidi driver by Takuya SHIOZAKI,
121 struct snd_usb_midi *umidi;
154 struct snd_usb_midi *umidi;
216 dev_dbg(&ep->umidi->dev->dev, "unexpected port %d!\n", portidx);
219 if (!test_bit(port->substream->number, &ep->umidi->input_triggered))
245 ep->umidi->usb_protocol_ops->input(ep, urb->transfer_buffer,
252 mod_timer(&ep->umidi->error_timer,
259 urb->dev = ep->umidi->dev;
282 mod_timer(&ep->umidi->error_timer,
301 if (ep->umidi->disconnected) {
311 ep->umidi->usb_protocol_ops->output(ep, urb);
317 urb->dev = ep->umidi->dev;
342 struct snd_usb_midi *umidi = from_timer(umidi, t, error_timer);
345 spin_lock(&umidi->disc_lock);
346 if (umidi->disconnected) {
347 spin_unlock(&umidi->disc_lock);
351 struct snd_usb_midi_in_endpoint *in = umidi->endpoints[i].in;
357 in->urbs[j]->dev = umidi->dev;
361 if (umidi->endpoints[i].out)
362 snd_usbmidi_do_output(umidi->endpoints[i].out);
364 spin_unlock(&umidi->disc_lock);
377 err = usb_bulk_msg(ep->umidi->dev, ep->urbs[0].urb->pipe,
546 port->ep->umidi->usb_protocol_ops->output_packet;
896 switch (snd_usb_get_speed(ep->umidi->dev)) {
1058 static void update_roland_altsetting(struct snd_usb_midi *umidi)
1065 intf = umidi->iface;
1067 if (umidi->roland_load_ctl->private_value == is_light_load)
1069 hostif = &intf->altsetting[umidi->roland_load_ctl->private_value];
1071 snd_usbmidi_input_stop(&umidi->list);
1072 usb_set_interface(umidi->dev, intfd->bInterfaceNumber,
1074 snd_usbmidi_input_start(&umidi->list);
1080 struct snd_usb_midi *umidi = substream->rmidi->private_data;
1083 down_read(&umidi->disc_rwsem);
1084 if (umidi->disconnected) {
1085 up_read(&umidi->disc_rwsem);
1089 mutex_lock(&umidi->mutex);
1091 if (!umidi->opened[0] && !umidi->opened[1]) {
1092 if (umidi->roland_load_ctl) {
1093 ctl = umidi->roland_load_ctl;
1096 snd_ctl_notify(umidi->card,
1098 update_roland_altsetting(umidi);
1101 umidi->opened[dir]++;
1102 if (umidi->opened[1])
1103 snd_usbmidi_input_start(&umidi->list);
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;
1113 snd_ctl_notify(umidi->card,
1118 mutex_unlock(&umidi->mutex);
1119 up_read(&umidi->disc_rwsem);
1125 struct snd_usb_midi *umidi = substream->rmidi->private_data;
1130 if (umidi->endpoints[i].out)
1132 if (umidi->endpoints[i].out->ports[j].substream == substream) {
1133 port = &umidi->endpoints[i].out->ports[j];
1160 if (port->ep->umidi->disconnected) {
1178 if (ep->umidi->disconnected)
1215 struct snd_usb_midi *umidi = substream->rmidi->private_data;
1218 set_bit(substream->number, &umidi->input_triggered);
1220 clear_bit(substream->number, &umidi->input_triggered);
1236 static void free_urb_and_buffer(struct snd_usb_midi *umidi, struct urb *urb,
1239 usb_free_coherent(umidi->dev, buffer_length,
1254 free_urb_and_buffer(ep->umidi, ep->urbs[i],
1262 static int snd_usbmidi_in_endpoint_create(struct snd_usb_midi *umidi,
1277 ep->umidi = umidi;
1287 pipe = usb_rcvintpipe(umidi->dev, ep_info->in_ep);
1289 pipe = usb_rcvbulkpipe(umidi->dev, ep_info->in_ep);
1290 length = usb_maxpacket(umidi->dev, pipe);
1292 buffer = usb_alloc_coherent(umidi->dev, length, GFP_KERNEL,
1299 usb_fill_int_urb(ep->urbs[i], umidi->dev,
1304 usb_fill_bulk_urb(ep->urbs[i], umidi->dev,
1310 dev_err(&umidi->dev->dev, "invalid MIDI in EP %x\n",
1334 free_urb_and_buffer(ep->umidi, ep->urbs[i].urb,
1349 static int snd_usbmidi_out_endpoint_create(struct snd_usb_midi *umidi,
1363 ep->umidi = umidi;
1374 pipe = usb_sndintpipe(umidi->dev, ep_info->out_ep);
1376 pipe = usb_sndbulkpipe(umidi->dev, ep_info->out_ep);
1377 switch (umidi->usb_id) {
1379 ep->max_transfer = usb_maxpacket(umidi->dev, pipe);
1403 buffer = usb_alloc_coherent(umidi->dev,
1411 usb_fill_int_urb(ep->urbs[i].urb, umidi->dev,
1416 usb_fill_bulk_urb(ep->urbs[i].urb, umidi->dev,
1422 dev_err(&umidi->dev->dev, "invalid MIDI out EP %x\n",
1439 if (umidi->usb_protocol_ops->init_out_endpoint)
1440 umidi->usb_protocol_ops->init_out_endpoint(ep);
1453 static void snd_usbmidi_free(struct snd_usb_midi *umidi)
1458 struct snd_usb_midi_endpoint *ep = &umidi->endpoints[i];
1464 mutex_destroy(&umidi->mutex);
1465 kfree(umidi);
1473 struct snd_usb_midi *umidi;
1476 umidi = list_entry(p, struct snd_usb_midi, list);
1482 down_write(&umidi->disc_rwsem);
1483 spin_lock_irq(&umidi->disc_lock);
1484 umidi->disconnected = 1;
1485 spin_unlock_irq(&umidi->disc_lock);
1486 up_write(&umidi->disc_rwsem);
1488 del_timer_sync(&umidi->error_timer);
1491 struct snd_usb_midi_endpoint *ep = &umidi->endpoints[i];
1497 if (umidi->usb_protocol_ops->finish_out_endpoint)
1498 umidi->usb_protocol_ops->finish_out_endpoint(ep->out);
1521 struct snd_usb_midi *umidi = rmidi->private_data;
1522 snd_usbmidi_free(umidi);
1525 static struct snd_rawmidi_substream *snd_usbmidi_find_substream(struct snd_usb_midi *umidi,
1531 list_for_each_entry(substream, &umidi->rmidi->streams[stream].substreams,
1719 static struct port_info *find_port_info(struct snd_usb_midi *umidi, int number)
1724 if (snd_usbmidi_port_info[i].id == umidi->usb_id &&
1734 struct snd_usb_midi *umidi = rmidi->private_data;
1738 port_info = find_port_info(umidi, number);
1791 static void snd_usbmidi_init_substream(struct snd_usb_midi *umidi,
1809 snd_usbmidi_find_substream(umidi, stream, number);
1811 dev_err(&umidi->dev->dev, "substream %d:%d not found\n", stream,
1816 intf = umidi->iface;
1835 res = usb_string(umidi->dev, iJack, jack_name_buf,
1842 port_info = find_port_info(umidi, number);
1846 name_format, umidi->card->shortname, jack_name, number + 1);
1854 static int snd_usbmidi_create_endpoints(struct snd_usb_midi *umidi,
1862 err = snd_usbmidi_out_endpoint_create(umidi,
1864 &umidi->endpoints[i]);
1869 err = snd_usbmidi_in_endpoint_create(umidi,
1871 &umidi->endpoints[i]);
1878 snd_usbmidi_init_substream(umidi,
1882 &umidi->endpoints[i].out->ports[j].substream);
1886 snd_usbmidi_init_substream(umidi,
1890 &umidi->endpoints[i].in->ports[j].substream);
1895 dev_dbg(&umidi->dev->dev, "created %d output and %d input ports\n",
1925 static int snd_usbmidi_get_ms_info(struct snd_usb_midi *umidi,
1937 intf = umidi->iface;
1947 dev_dbg(&umidi->dev->dev, "MIDIStreaming version %02x.%02x\n",
1950 dev_warn(&umidi->dev->dev,
1971 dev_warn(&umidi->dev->dev,
1979 else if (snd_usb_get_speed(umidi->dev) == USB_SPEED_LOW)
1992 dev_dbg(&umidi->dev->dev, "EP %02X: %d jack(s)\n",
1997 dev_warn(&umidi->dev->dev,
2005 else if (snd_usb_get_speed(umidi->dev) == USB_SPEED_LOW)
2013 dev_dbg(&umidi->dev->dev, "EP %02X: %d jack(s)\n",
2038 struct snd_usb_midi *umidi = kcontrol->private_data;
2043 mutex_lock(&umidi->mutex);
2047 mutex_unlock(&umidi->mutex);
2064 static void snd_usbmidi_switch_roland_altsetting(struct snd_usb_midi *umidi)
2070 intf = umidi->iface;
2086 dev_dbg(&umidi->dev->dev, "switching to altsetting %d with int ep\n",
2088 usb_set_interface(umidi->dev, intfd->bInterfaceNumber,
2091 umidi->roland_load_ctl = snd_ctl_new1(&roland_load_ctl, umidi);
2092 if (snd_ctl_add(umidi->card, umidi->roland_load_ctl) < 0)
2093 umidi->roland_load_ctl = NULL;
2099 static int snd_usbmidi_detect_endpoints(struct snd_usb_midi *umidi,
2109 if (USB_ID_VENDOR(umidi->usb_id) == 0x0582)
2110 snd_usbmidi_switch_roland_altsetting(umidi);
2115 intf = umidi->iface;
2147 static int snd_usbmidi_detect_per_port_endpoints(struct snd_usb_midi *umidi,
2152 err = snd_usbmidi_detect_endpoints(umidi, endpoints, MIDI_MAX_ENDPOINTS);
2165 static int snd_usbmidi_detect_yamaha(struct snd_usb_midi *umidi,
2173 intf = umidi->iface;
2200 return snd_usbmidi_detect_endpoints(umidi, endpoint, 1);
2206 static int snd_usbmidi_detect_roland(struct snd_usb_midi *umidi,
2213 intf = umidi->iface;
2232 return snd_usbmidi_detect_endpoints(umidi, endpoint, 1);
2236 return snd_usbmidi_get_ms_info(umidi, endpoint);
2246 static int snd_usbmidi_create_endpoints_midiman(struct snd_usb_midi *umidi,
2256 intf = umidi->iface;
2272 dev_dbg(&umidi->dev->dev, "not enough endpoints\n");
2278 dev_dbg(&umidi->dev->dev, "endpoint[0] isn't interrupt\n");
2283 dev_dbg(&umidi->dev->dev, "endpoint[2] isn't bulk output\n");
2290 dev_dbg(&umidi->dev->dev,
2300 err = snd_usbmidi_out_endpoint_create(umidi, &ep_info,
2301 &umidi->endpoints[0]);
2309 err = snd_usbmidi_in_endpoint_create(umidi, &ep_info,
2310 &umidi->endpoints[0]);
2318 err = snd_usbmidi_out_endpoint_create(umidi, &ep_info,
2319 &umidi->endpoints[1]);
2326 snd_usbmidi_init_substream(umidi,
2330 &umidi->endpoints[cable & 1].out->ports[cable].substream);
2332 snd_usbmidi_init_substream(umidi,
2336 &umidi->endpoints[0].in->ports[cable].substream);
2345 static int snd_usbmidi_create_rawmidi(struct snd_usb_midi *umidi,
2351 err = snd_rawmidi_new(umidi->card, "USB MIDI",
2352 umidi->next_midi_device++,
2356 strcpy(rmidi->name, umidi->card->shortname);
2361 rmidi->private_data = umidi;
2368 umidi->rmidi = rmidi;
2377 struct snd_usb_midi *umidi;
2380 umidi = list_entry(p, struct snd_usb_midi, list);
2381 if (!umidi->input_running)
2384 struct snd_usb_midi_endpoint *ep = &umidi->endpoints[i];
2389 umidi->input_running = 0;
2393 static void snd_usbmidi_input_start_ep(struct snd_usb_midi *umidi,
2403 spin_lock_irqsave(&umidi->disc_lock, flags);
2405 urb->dev = ep->umidi->dev;
2408 spin_unlock_irqrestore(&umidi->disc_lock, flags);
2417 struct snd_usb_midi *umidi;
2420 umidi = list_entry(p, struct snd_usb_midi, list);
2421 if (umidi->input_running || !umidi->opened[1])
2424 snd_usbmidi_input_start_ep(umidi, umidi->endpoints[i].in);
2425 umidi->input_running = 1;
2434 struct snd_usb_midi *umidi;
2436 umidi = list_entry(p, struct snd_usb_midi, list);
2437 mutex_lock(&umidi->mutex);
2439 mutex_unlock(&umidi->mutex);
2448 struct snd_usb_midi *umidi;
2450 umidi = list_entry(p, struct snd_usb_midi, list);
2451 mutex_lock(&umidi->mutex);
2453 mutex_unlock(&umidi->mutex);
2467 struct snd_usb_midi *umidi;
2472 umidi = kzalloc(sizeof(*umidi), GFP_KERNEL);
2473 if (!umidi)
2475 umidi->dev = interface_to_usbdev(iface);
2476 umidi->card = card;
2477 umidi->iface = iface;
2478 umidi->quirk = quirk;
2479 umidi->usb_protocol_ops = &snd_usbmidi_standard_ops;
2481 umidi->next_midi_device = *num_rawmidis;
2482 spin_lock_init(&umidi->disc_lock);
2483 init_rwsem(&umidi->disc_rwsem);
2484 mutex_init(&umidi->mutex);
2486 usb_id = USB_ID(le16_to_cpu(umidi->dev->descriptor.idVendor),
2487 le16_to_cpu(umidi->dev->descriptor.idProduct));
2488 umidi->usb_id = usb_id;
2489 timer_setup(&umidi->error_timer, snd_usbmidi_error_timer, 0);
2495 err = snd_usbmidi_get_ms_info(umidi, endpoints);
2496 if (umidi->usb_id == USB_ID(0x0763, 0x0150)) /* M-Audio Uno */
2497 umidi->usb_protocol_ops =
2501 umidi->usb_protocol_ops = &snd_usbmidi_122l_ops;
2506 err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1);
2509 err = snd_usbmidi_detect_yamaha(umidi, &endpoints[0]);
2512 err = snd_usbmidi_detect_roland(umidi, &endpoints[0]);
2515 umidi->usb_protocol_ops = &snd_usbmidi_midiman_ops;
2521 umidi->usb_protocol_ops = &snd_usbmidi_novation_ops;
2522 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2525 umidi->usb_protocol_ops = &snd_usbmidi_raw_ops;
2535 if (umidi->usb_id == USB_ID(0x07fd, 0x0001)) /* MOTU Fastlane */
2536 usb_set_interface(umidi->dev, 0, 0);
2537 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2540 umidi->usb_protocol_ops = &snd_usbmidi_emagic_ops;
2543 err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1);
2546 umidi->usb_protocol_ops = &snd_usbmidi_cme_ops;
2547 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2550 umidi->usb_protocol_ops = &snd_usbmidi_akai_ops;
2551 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2556 umidi->usb_protocol_ops = &snd_usbmidi_ftdi_ops;
2559 err = usb_control_msg(umidi->dev, usb_sndctrlpipe(umidi->dev, 0),
2564 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2567 umidi->usb_protocol_ops = &snd_usbmidi_ch345_broken_sysex_ops;
2568 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2571 dev_err(&umidi->dev->dev, "invalid quirk type %d\n",
2586 err = snd_usbmidi_create_rawmidi(umidi, out_ports, in_ports);
2592 err = snd_usbmidi_create_endpoints_midiman(umidi, &endpoints[0]);
2594 err = snd_usbmidi_create_endpoints(umidi, endpoints);
2598 usb_autopm_get_interface_no_resume(umidi->iface);
2600 list_add_tail(&umidi->list, midi_list);
2602 *num_rawmidis = umidi->next_midi_device;
2606 kfree(umidi);