Lines Matching refs:umidi

8  *          NetBSD's umidi driver by Takuya SHIOZAKI,
137 struct snd_usb_midi *umidi;
170 struct snd_usb_midi *umidi;
232 dev_dbg(&ep->umidi->dev->dev, "unexpected port %d!\n", portidx);
235 if (!test_bit(port->substream->number, &ep->umidi->input_triggered))
261 ep->umidi->usb_protocol_ops->input(ep, urb->transfer_buffer,
268 mod_timer(&ep->umidi->error_timer,
275 urb->dev = ep->umidi->dev;
298 mod_timer(&ep->umidi->error_timer,
317 if (ep->umidi->disconnected) {
327 ep->umidi->usb_protocol_ops->output(ep, urb);
333 urb->dev = ep->umidi->dev;
358 struct snd_usb_midi *umidi = from_timer(umidi, t, error_timer);
361 spin_lock(&umidi->disc_lock);
362 if (umidi->disconnected) {
363 spin_unlock(&umidi->disc_lock);
367 struct snd_usb_midi_in_endpoint *in = umidi->endpoints[i].in;
373 in->urbs[j]->dev = umidi->dev;
377 if (umidi->endpoints[i].out)
378 snd_usbmidi_do_output(umidi->endpoints[i].out);
380 spin_unlock(&umidi->disc_lock);
393 err = usb_bulk_msg(ep->umidi->dev, ep->urbs[0].urb->pipe,
562 port->ep->umidi->usb_protocol_ops->output_packet;
912 switch (snd_usb_get_speed(ep->umidi->dev)) {
1074 static void update_roland_altsetting(struct snd_usb_midi *umidi)
1081 intf = umidi->iface;
1083 if (umidi->roland_load_ctl->private_value == is_light_load)
1085 hostif = &intf->altsetting[umidi->roland_load_ctl->private_value];
1087 snd_usbmidi_input_stop(&umidi->list);
1088 usb_set_interface(umidi->dev, intfd->bInterfaceNumber,
1090 snd_usbmidi_input_start(&umidi->list);
1096 struct snd_usb_midi *umidi = substream->rmidi->private_data;
1099 down_read(&umidi->disc_rwsem);
1100 if (umidi->disconnected) {
1101 up_read(&umidi->disc_rwsem);
1105 mutex_lock(&umidi->mutex);
1107 if (!umidi->opened[0] && !umidi->opened[1]) {
1108 if (umidi->roland_load_ctl) {
1109 ctl = umidi->roland_load_ctl;
1112 snd_ctl_notify(umidi->card,
1114 update_roland_altsetting(umidi);
1117 umidi->opened[dir]++;
1118 if (umidi->opened[1])
1119 snd_usbmidi_input_start(&umidi->list);
1121 umidi->opened[dir]--;
1122 if (!umidi->opened[1])
1123 snd_usbmidi_input_stop(&umidi->list);
1124 if (!umidi->opened[0] && !umidi->opened[1]) {
1125 if (umidi->roland_load_ctl) {
1126 ctl = umidi->roland_load_ctl;
1129 snd_ctl_notify(umidi->card,
1134 mutex_unlock(&umidi->mutex);
1135 up_read(&umidi->disc_rwsem);
1141 struct snd_usb_midi *umidi = substream->rmidi->private_data;
1146 if (umidi->endpoints[i].out)
1148 if (umidi->endpoints[i].out->ports[j].substream == substream) {
1149 port = &umidi->endpoints[i].out->ports[j];
1176 if (port->ep->umidi->disconnected) {
1194 if (ep->umidi->disconnected)
1231 struct snd_usb_midi *umidi = substream->rmidi->private_data;
1234 set_bit(substream->number, &umidi->input_triggered);
1236 clear_bit(substream->number, &umidi->input_triggered);
1252 static void free_urb_and_buffer(struct snd_usb_midi *umidi, struct urb *urb,
1255 usb_free_coherent(umidi->dev, buffer_length,
1270 free_urb_and_buffer(ep->umidi, ep->urbs[i],
1278 static int snd_usbmidi_in_endpoint_create(struct snd_usb_midi *umidi,
1293 ep->umidi = umidi;
1303 pipe = usb_rcvintpipe(umidi->dev, ep_info->in_ep);
1305 pipe = usb_rcvbulkpipe(umidi->dev, ep_info->in_ep);
1306 length = usb_maxpacket(umidi->dev, pipe, 0);
1308 buffer = usb_alloc_coherent(umidi->dev, length, GFP_KERNEL,
1315 usb_fill_int_urb(ep->urbs[i], umidi->dev,
1320 usb_fill_bulk_urb(ep->urbs[i], umidi->dev,
1326 dev_err(&umidi->dev->dev, "invalid MIDI in EP %x\n",
1350 free_urb_and_buffer(ep->umidi, ep->urbs[i].urb,
1365 static int snd_usbmidi_out_endpoint_create(struct snd_usb_midi *umidi,
1379 ep->umidi = umidi;
1390 pipe = usb_sndintpipe(umidi->dev, ep_info->out_ep);
1392 pipe = usb_sndbulkpipe(umidi->dev, ep_info->out_ep);
1393 switch (umidi->usb_id) {
1395 ep->max_transfer = usb_maxpacket(umidi->dev, pipe, 1);
1419 buffer = usb_alloc_coherent(umidi->dev,
1427 usb_fill_int_urb(ep->urbs[i].urb, umidi->dev,
1432 usb_fill_bulk_urb(ep->urbs[i].urb, umidi->dev,
1438 dev_err(&umidi->dev->dev, "invalid MIDI out EP %x\n",
1455 if (umidi->usb_protocol_ops->init_out_endpoint)
1456 umidi->usb_protocol_ops->init_out_endpoint(ep);
1469 static void snd_usbmidi_free(struct snd_usb_midi *umidi)
1474 struct snd_usb_midi_endpoint *ep = &umidi->endpoints[i];
1480 mutex_destroy(&umidi->mutex);
1481 kfree(umidi);
1489 struct snd_usb_midi *umidi;
1492 umidi = list_entry(p, struct snd_usb_midi, list);
1498 down_write(&umidi->disc_rwsem);
1499 spin_lock_irq(&umidi->disc_lock);
1500 umidi->disconnected = 1;
1501 spin_unlock_irq(&umidi->disc_lock);
1502 up_write(&umidi->disc_rwsem);
1504 del_timer_sync(&umidi->error_timer);
1507 struct snd_usb_midi_endpoint *ep = &umidi->endpoints[i];
1513 if (umidi->usb_protocol_ops->finish_out_endpoint)
1514 umidi->usb_protocol_ops->finish_out_endpoint(ep->out);
1537 struct snd_usb_midi *umidi = rmidi->private_data;
1538 snd_usbmidi_free(umidi);
1541 static struct snd_rawmidi_substream *snd_usbmidi_find_substream(struct snd_usb_midi *umidi,
1547 list_for_each_entry(substream, &umidi->rmidi->streams[stream].substreams,
1735 static struct port_info *find_port_info(struct snd_usb_midi *umidi, int number)
1740 if (snd_usbmidi_port_info[i].id == umidi->usb_id &&
1750 struct snd_usb_midi *umidi = rmidi->private_data;
1754 port_info = find_port_info(umidi, number);
1761 static void snd_usbmidi_init_substream(struct snd_usb_midi *umidi,
1769 snd_usbmidi_find_substream(umidi, stream, number);
1771 dev_err(&umidi->dev->dev, "substream %d:%d not found\n", stream,
1777 port_info = find_port_info(umidi, number);
1780 name_format, umidi->card->shortname, number + 1);
1788 static int snd_usbmidi_create_endpoints(struct snd_usb_midi *umidi,
1796 err = snd_usbmidi_out_endpoint_create(umidi,
1798 &umidi->endpoints[i]);
1803 err = snd_usbmidi_in_endpoint_create(umidi,
1805 &umidi->endpoints[i]);
1812 snd_usbmidi_init_substream(umidi,
1815 &umidi->endpoints[i].out->ports[j].substream);
1819 snd_usbmidi_init_substream(umidi,
1822 &umidi->endpoints[i].in->ports[j].substream);
1827 dev_dbg(&umidi->dev->dev, "created %d output and %d input ports\n",
1857 static int snd_usbmidi_get_ms_info(struct snd_usb_midi *umidi,
1869 intf = umidi->iface;
1879 dev_dbg(&umidi->dev->dev, "MIDIStreaming version %02x.%02x\n",
1882 dev_warn(&umidi->dev->dev,
1903 dev_warn(&umidi->dev->dev,
1911 else if (snd_usb_get_speed(umidi->dev) == USB_SPEED_LOW)
1920 dev_dbg(&umidi->dev->dev, "EP %02X: %d jack(s)\n",
1925 dev_warn(&umidi->dev->dev,
1933 else if (snd_usb_get_speed(umidi->dev) == USB_SPEED_LOW)
1937 dev_dbg(&umidi->dev->dev, "EP %02X: %d jack(s)\n",
1962 struct snd_usb_midi *umidi = kcontrol->private_data;
1967 mutex_lock(&umidi->mutex);
1971 mutex_unlock(&umidi->mutex);
1988 static void snd_usbmidi_switch_roland_altsetting(struct snd_usb_midi *umidi)
1994 intf = umidi->iface;
2010 dev_dbg(&umidi->dev->dev, "switching to altsetting %d with int ep\n",
2012 usb_set_interface(umidi->dev, intfd->bInterfaceNumber,
2015 umidi->roland_load_ctl = snd_ctl_new1(&roland_load_ctl, umidi);
2016 if (snd_ctl_add(umidi->card, umidi->roland_load_ctl) < 0)
2017 umidi->roland_load_ctl = NULL;
2023 static int snd_usbmidi_detect_endpoints(struct snd_usb_midi *umidi,
2033 if (USB_ID_VENDOR(umidi->usb_id) == 0x0582)
2034 snd_usbmidi_switch_roland_altsetting(umidi);
2039 intf = umidi->iface;
2071 static int snd_usbmidi_detect_per_port_endpoints(struct snd_usb_midi *umidi,
2076 err = snd_usbmidi_detect_endpoints(umidi, endpoints, MIDI_MAX_ENDPOINTS);
2089 static int snd_usbmidi_detect_yamaha(struct snd_usb_midi *umidi,
2097 intf = umidi->iface;
2124 return snd_usbmidi_detect_endpoints(umidi, endpoint, 1);
2130 static int snd_usbmidi_detect_roland(struct snd_usb_midi *umidi,
2137 intf = umidi->iface;
2156 return snd_usbmidi_detect_endpoints(umidi, endpoint, 1);
2160 return snd_usbmidi_get_ms_info(umidi, endpoint);
2170 static int snd_usbmidi_create_endpoints_midiman(struct snd_usb_midi *umidi,
2180 intf = umidi->iface;
2196 dev_dbg(&umidi->dev->dev, "not enough endpoints\n");
2202 dev_dbg(&umidi->dev->dev, "endpoint[0] isn't interrupt\n");
2207 dev_dbg(&umidi->dev->dev, "endpoint[2] isn't bulk output\n");
2214 dev_dbg(&umidi->dev->dev,
2224 err = snd_usbmidi_out_endpoint_create(umidi, &ep_info,
2225 &umidi->endpoints[0]);
2233 err = snd_usbmidi_in_endpoint_create(umidi, &ep_info,
2234 &umidi->endpoints[0]);
2242 err = snd_usbmidi_out_endpoint_create(umidi, &ep_info,
2243 &umidi->endpoints[1]);
2250 snd_usbmidi_init_substream(umidi,
2253 &umidi->endpoints[cable & 1].out->ports[cable].substream);
2255 snd_usbmidi_init_substream(umidi,
2258 &umidi->endpoints[0].in->ports[cable].substream);
2267 static int snd_usbmidi_create_rawmidi(struct snd_usb_midi *umidi,
2273 err = snd_rawmidi_new(umidi->card, "USB MIDI",
2274 umidi->next_midi_device++,
2278 strcpy(rmidi->name, umidi->card->shortname);
2283 rmidi->private_data = umidi;
2290 umidi->rmidi = rmidi;
2299 struct snd_usb_midi *umidi;
2302 umidi = list_entry(p, struct snd_usb_midi, list);
2303 if (!umidi->input_running)
2306 struct snd_usb_midi_endpoint *ep = &umidi->endpoints[i];
2311 umidi->input_running = 0;
2315 static void snd_usbmidi_input_start_ep(struct snd_usb_midi *umidi,
2325 spin_lock_irqsave(&umidi->disc_lock, flags);
2327 urb->dev = ep->umidi->dev;
2330 spin_unlock_irqrestore(&umidi->disc_lock, flags);
2339 struct snd_usb_midi *umidi;
2342 umidi = list_entry(p, struct snd_usb_midi, list);
2343 if (umidi->input_running || !umidi->opened[1])
2346 snd_usbmidi_input_start_ep(umidi, umidi->endpoints[i].in);
2347 umidi->input_running = 1;
2356 struct snd_usb_midi *umidi;
2358 umidi = list_entry(p, struct snd_usb_midi, list);
2359 mutex_lock(&umidi->mutex);
2361 mutex_unlock(&umidi->mutex);
2370 struct snd_usb_midi *umidi;
2372 umidi = list_entry(p, struct snd_usb_midi, list);
2373 mutex_lock(&umidi->mutex);
2375 mutex_unlock(&umidi->mutex);
2388 struct snd_usb_midi *umidi;
2393 umidi = kzalloc(sizeof(*umidi), GFP_KERNEL);
2394 if (!umidi)
2396 umidi->dev = interface_to_usbdev(iface);
2397 umidi->card = card;
2398 umidi->iface = iface;
2399 umidi->quirk = quirk;
2400 umidi->usb_protocol_ops = &snd_usbmidi_standard_ops;
2401 spin_lock_init(&umidi->disc_lock);
2402 init_rwsem(&umidi->disc_rwsem);
2403 mutex_init(&umidi->mutex);
2405 usb_id = USB_ID(le16_to_cpu(umidi->dev->descriptor.idVendor),
2406 le16_to_cpu(umidi->dev->descriptor.idProduct));
2407 umidi->usb_id = usb_id;
2408 timer_setup(&umidi->error_timer, snd_usbmidi_error_timer, 0);
2414 err = snd_usbmidi_get_ms_info(umidi, endpoints);
2415 if (umidi->usb_id == USB_ID(0x0763, 0x0150)) /* M-Audio Uno */
2416 umidi->usb_protocol_ops =
2420 umidi->usb_protocol_ops = &snd_usbmidi_122l_ops;
2425 err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1);
2428 err = snd_usbmidi_detect_yamaha(umidi, &endpoints[0]);
2431 err = snd_usbmidi_detect_roland(umidi, &endpoints[0]);
2434 umidi->usb_protocol_ops = &snd_usbmidi_midiman_ops;
2440 umidi->usb_protocol_ops = &snd_usbmidi_novation_ops;
2441 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2444 umidi->usb_protocol_ops = &snd_usbmidi_raw_ops;
2454 if (umidi->usb_id == USB_ID(0x07fd, 0x0001)) /* MOTU Fastlane */
2455 usb_set_interface(umidi->dev, 0, 0);
2456 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2459 umidi->usb_protocol_ops = &snd_usbmidi_emagic_ops;
2462 err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1);
2465 umidi->usb_protocol_ops = &snd_usbmidi_cme_ops;
2466 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2469 umidi->usb_protocol_ops = &snd_usbmidi_akai_ops;
2470 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2475 umidi->usb_protocol_ops = &snd_usbmidi_ftdi_ops;
2478 err = usb_control_msg(umidi->dev, usb_sndctrlpipe(umidi->dev, 0),
2483 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2486 umidi->usb_protocol_ops = &snd_usbmidi_ch345_broken_sysex_ops;
2487 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2490 dev_err(&umidi->dev->dev, "invalid quirk type %d\n",
2505 err = snd_usbmidi_create_rawmidi(umidi, out_ports, in_ports);
2511 err = snd_usbmidi_create_endpoints_midiman(umidi, &endpoints[0]);
2513 err = snd_usbmidi_create_endpoints(umidi, endpoints);
2517 usb_autopm_get_interface_no_resume(umidi->iface);
2519 list_add_tail(&umidi->list, midi_list);
2523 kfree(umidi);