Lines Matching refs:midi

58 	struct f_midi *midi;  member
97 static void f_midi_transmit(struct f_midi *midi, struct usb_request *req);
220 struct f_midi *midi = ep->driver_data; in f_midi_read_data() local
221 struct snd_rawmidi_substream *substream = midi->out_substream[cable]; in f_midi_read_data()
227 if (!test_bit(cable, &midi->out_triggered)) in f_midi_read_data()
249 struct f_midi *midi = ep->driver_data; in f_midi_complete() local
250 struct usb_composite_dev *cdev = midi->func.config->cdev; in f_midi_complete()
255 if (ep == midi->out_ep) { in f_midi_complete()
258 } else if (ep == midi->in_ep) { in f_midi_complete()
261 f_midi_transmit(midi, req); in f_midi_complete()
272 if (ep == midi->out_ep) in f_midi_complete()
298 static int f_midi_start_ep(struct f_midi *midi, in f_midi_start_ep() argument
308 err = config_ep_by_speed(midi->gadget, f, ep); in f_midi_start_ep()
320 ep->driver_data = midi; in f_midi_start_ep()
327 struct f_midi *midi = func_to_midi(f); in f_midi_set_alt() local
332 err = f_midi_start_ep(midi, f, midi->in_ep); in f_midi_set_alt()
336 err = f_midi_start_ep(midi, f, midi->out_ep); in f_midi_set_alt()
340 if (midi->out_ep->driver_data) in f_midi_set_alt()
341 usb_ep_disable(midi->out_ep); in f_midi_set_alt()
343 err = config_ep_by_speed(midi->gadget, f, midi->out_ep); in f_midi_set_alt()
346 midi->out_ep->name, err); in f_midi_set_alt()
350 err = usb_ep_enable(midi->out_ep); in f_midi_set_alt()
353 midi->out_ep->name, err); in f_midi_set_alt()
357 midi->out_ep->driver_data = midi; in f_midi_set_alt()
360 for (i = 0; i < midi->qlen && err == 0; i++) { in f_midi_set_alt()
362 midi_alloc_ep_req(midi->out_ep, midi->buflen); in f_midi_set_alt()
367 err = usb_ep_queue(midi->out_ep, req, GFP_ATOMIC); in f_midi_set_alt()
369 ERROR(midi, "%s queue req: %d\n", in f_midi_set_alt()
370 midi->out_ep->name, err); in f_midi_set_alt()
379 struct f_midi *midi = func_to_midi(f); in f_midi_disable() local
388 usb_ep_disable(midi->in_ep); in f_midi_disable()
389 usb_ep_disable(midi->out_ep); in f_midi_disable()
511 static void f_midi_transmit(struct f_midi *midi, struct usb_request *req) in f_midi_transmit() argument
513 struct usb_ep *ep = midi->in_ep; in f_midi_transmit()
520 req = midi_alloc_ep_req(ep, midi->buflen); in f_midi_transmit()
523 ERROR(midi, "%s: alloc_ep_request failed\n", __func__); in f_midi_transmit()
530 struct gmidi_in_port *port = midi->in_port[i]; in f_midi_transmit()
531 struct snd_rawmidi_substream *substream = midi->in_substream[i]; in f_midi_transmit()
536 while (req->length + 3 < midi->buflen) { in f_midi_transmit()
554 struct f_midi *midi = (struct f_midi *) data; in f_midi_in_tasklet() local
555 f_midi_transmit(midi, NULL); in f_midi_in_tasklet()
560 struct f_midi *midi = substream->rmidi->private_data; in f_midi_in_open() local
562 if (!midi->in_port[substream->number]) in f_midi_in_open()
565 VDBG(midi, "%s()\n", __func__); in f_midi_in_open()
566 midi->in_substream[substream->number] = substream; in f_midi_in_open()
567 midi->in_port[substream->number]->state = STATE_UNKNOWN; in f_midi_in_open()
573 struct f_midi *midi = substream->rmidi->private_data; in f_midi_in_close() local
575 VDBG(midi, "%s()\n", __func__); in f_midi_in_close()
581 struct f_midi *midi = substream->rmidi->private_data; in f_midi_in_trigger() local
583 if (!midi->in_port[substream->number]) in f_midi_in_trigger()
586 VDBG(midi, "%s() %d\n", __func__, up); in f_midi_in_trigger()
587 midi->in_port[substream->number]->active = up; in f_midi_in_trigger()
589 tasklet_hi_schedule(&midi->tasklet); in f_midi_in_trigger()
594 struct f_midi *midi = substream->rmidi->private_data; in f_midi_out_open() local
599 VDBG(midi, "%s()\n", __func__); in f_midi_out_open()
600 midi->out_substream[substream->number] = substream; in f_midi_out_open()
606 struct f_midi *midi = substream->rmidi->private_data; in f_midi_out_close() local
608 VDBG(midi, "%s()\n", __func__); in f_midi_out_close()
614 struct f_midi *midi = substream->rmidi->private_data; in f_midi_out_trigger() local
616 VDBG(midi, "%s()\n", __func__); in f_midi_out_trigger()
619 set_bit(substream->number, &midi->out_triggered); in f_midi_out_trigger()
621 clear_bit(substream->number, &midi->out_triggered); in f_midi_out_trigger()
636 static inline void f_midi_unregister_card(struct f_midi *midi) in f_midi_unregister_card() argument
638 if (midi->card) { in f_midi_unregister_card()
639 snd_card_free(midi->card); in f_midi_unregister_card()
640 midi->card = NULL; in f_midi_unregister_card()
645 static int f_midi_register_card(struct f_midi *midi) in f_midi_register_card() argument
654 err = snd_card_new(&midi->gadget->dev, midi->index, midi->id, in f_midi_register_card()
657 ERROR(midi, "snd_card_new() failed\n"); in f_midi_register_card()
660 midi->card = card; in f_midi_register_card()
662 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, midi, &ops); in f_midi_register_card()
664 ERROR(midi, "snd_device_new() failed: error %d\n", err); in f_midi_register_card()
675 midi->out_ports, midi->in_ports, &rmidi); in f_midi_register_card()
677 ERROR(midi, "snd_rawmidi_new() failed: error %d\n", err); in f_midi_register_card()
680 midi->rmidi = rmidi; in f_midi_register_card()
685 rmidi->private_data = midi; in f_midi_register_card()
697 ERROR(midi, "snd_card_register() failed\n"); in f_midi_register_card()
701 VDBG(midi, "%s() finished ok\n", __func__); in f_midi_register_card()
705 f_midi_unregister_card(midi); in f_midi_register_card()
719 struct f_midi *midi = func_to_midi(f); in f_midi_bind() local
723 midi->gadget = cdev->gadget; in f_midi_bind()
724 tasklet_init(&midi->tasklet, f_midi_in_tasklet, (unsigned long) midi); in f_midi_bind()
725 status = f_midi_register_card(midi); in f_midi_bind()
753 midi->in_ep = usb_ep_autoconfig(cdev->gadget, &bulk_in_desc); in f_midi_bind()
754 if (!midi->in_ep) in f_midi_bind()
756 midi->in_ep->driver_data = cdev; /* claim */ in f_midi_bind()
758 midi->out_ep = usb_ep_autoconfig(cdev->gadget, &bulk_out_desc); in f_midi_bind()
759 if (!midi->out_ep) in f_midi_bind()
761 midi->out_ep->driver_data = cdev; /* claim */ in f_midi_bind()
784 + (midi->in_ports + midi->out_ports) * in f_midi_bind()
791 for (n = 0; n < midi->in_ports; n++) { in f_midi_bind()
819 for (n = 0; n < midi->out_ports; n++) { in f_midi_bind()
847 ms_out_desc.bLength = USB_DT_MS_ENDPOINT_SIZE(midi->in_ports); in f_midi_bind()
848 ms_out_desc.bNumEmbMIDIJack = midi->in_ports; in f_midi_bind()
850 ms_in_desc.bLength = USB_DT_MS_ENDPOINT_SIZE(midi->out_ports); in f_midi_bind()
851 ms_in_desc.bNumEmbMIDIJack = midi->out_ports; in f_midi_bind()
886 f_midi_unregister_card(midi); in f_midi_bind()
889 if (midi->out_ep) in f_midi_bind()
890 midi->out_ep->driver_data = NULL; in f_midi_bind()
891 if (midi->in_ep) in f_midi_bind()
892 midi->in_ep->driver_data = NULL; in f_midi_bind()
1072 struct f_midi *midi; in f_midi_free() local
1076 midi = func_to_midi(f); in f_midi_free()
1078 kfree(midi->id); in f_midi_free()
1081 kfree(midi->in_port[i]); in f_midi_free()
1082 kfree(midi); in f_midi_free()
1090 struct f_midi *midi = func_to_midi(f); in f_midi_unbind() local
1098 card = midi->card; in f_midi_unbind()
1099 midi->card = NULL; in f_midi_unbind()
1108 struct f_midi *midi; in f_midi_alloc() local
1122 midi = kzalloc(sizeof(*midi), GFP_KERNEL); in f_midi_alloc()
1123 if (!midi) { in f_midi_alloc()
1137 port->midi = midi; in f_midi_alloc()
1140 midi->in_port[i] = port; in f_midi_alloc()
1144 midi->id = kstrdup(opts->id, GFP_KERNEL); in f_midi_alloc()
1145 if (opts->id && !midi->id) { in f_midi_alloc()
1150 midi->in_ports = opts->in_ports; in f_midi_alloc()
1151 midi->out_ports = opts->out_ports; in f_midi_alloc()
1152 midi->index = opts->index; in f_midi_alloc()
1153 midi->buflen = opts->buflen; in f_midi_alloc()
1154 midi->qlen = opts->qlen; in f_midi_alloc()
1158 midi->func.name = "gmidi function"; in f_midi_alloc()
1159 midi->func.bind = f_midi_bind; in f_midi_alloc()
1160 midi->func.unbind = f_midi_unbind; in f_midi_alloc()
1161 midi->func.set_alt = f_midi_set_alt; in f_midi_alloc()
1162 midi->func.disable = f_midi_disable; in f_midi_alloc()
1163 midi->func.free_func = f_midi_free; in f_midi_alloc()
1165 return &midi->func; in f_midi_alloc()
1168 f_midi_unregister_card(midi); in f_midi_alloc()
1171 kfree(midi->in_port[i]); in f_midi_alloc()
1172 kfree(midi); in f_midi_alloc()
1176 DECLARE_USB_FUNCTION_INIT(midi, f_midi_alloc_inst, f_midi_alloc);