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
307 err = config_ep_by_speed(midi->gadget, f, ep); in f_midi_start_ep()
319 ep->driver_data = midi; in f_midi_start_ep()
326 struct f_midi *midi = func_to_midi(f); in f_midi_set_alt() local
335 err = f_midi_start_ep(midi, f, midi->in_ep); in f_midi_set_alt()
339 err = f_midi_start_ep(midi, f, midi->out_ep); in f_midi_set_alt()
343 usb_ep_disable(midi->out_ep); in f_midi_set_alt()
345 err = config_ep_by_speed(midi->gadget, f, midi->out_ep); in f_midi_set_alt()
348 midi->out_ep->name, err); in f_midi_set_alt()
352 err = usb_ep_enable(midi->out_ep); in f_midi_set_alt()
355 midi->out_ep->name, err); in f_midi_set_alt()
359 midi->out_ep->driver_data = midi; in f_midi_set_alt()
362 for (i = 0; i < midi->qlen && err == 0; i++) { in f_midi_set_alt()
364 midi_alloc_ep_req(midi->out_ep, midi->buflen); in f_midi_set_alt()
369 err = usb_ep_queue(midi->out_ep, req, GFP_ATOMIC); in f_midi_set_alt()
371 ERROR(midi, "%s queue req: %d\n", in f_midi_set_alt()
372 midi->out_ep->name, err); in f_midi_set_alt()
373 free_ep_req(midi->out_ep, req); in f_midi_set_alt()
382 struct f_midi *midi = func_to_midi(f); in f_midi_disable() local
391 usb_ep_disable(midi->in_ep); in f_midi_disable()
392 usb_ep_disable(midi->out_ep); in f_midi_disable()
514 static void f_midi_transmit(struct f_midi *midi, struct usb_request *req) in f_midi_transmit() argument
516 struct usb_ep *ep = midi->in_ep; in f_midi_transmit()
523 req = midi_alloc_ep_req(ep, midi->buflen); in f_midi_transmit()
526 ERROR(midi, "%s: alloc_ep_request failed\n", __func__); in f_midi_transmit()
533 struct gmidi_in_port *port = midi->in_port[i]; in f_midi_transmit()
534 struct snd_rawmidi_substream *substream = midi->in_substream[i]; in f_midi_transmit()
539 while (req->length + 3 < midi->buflen) { in f_midi_transmit()
554 ERROR(midi, "%s queue req: %d\n", in f_midi_transmit()
555 midi->in_ep->name, err); in f_midi_transmit()
563 struct f_midi *midi = (struct f_midi *) data; in f_midi_in_tasklet() local
564 f_midi_transmit(midi, NULL); in f_midi_in_tasklet()
569 struct f_midi *midi = substream->rmidi->private_data; in f_midi_in_open() local
571 if (!midi->in_port[substream->number]) in f_midi_in_open()
574 VDBG(midi, "%s()\n", __func__); in f_midi_in_open()
575 midi->in_substream[substream->number] = substream; in f_midi_in_open()
576 midi->in_port[substream->number]->state = STATE_UNKNOWN; in f_midi_in_open()
582 struct f_midi *midi = substream->rmidi->private_data; in f_midi_in_close() local
584 VDBG(midi, "%s()\n", __func__); in f_midi_in_close()
590 struct f_midi *midi = substream->rmidi->private_data; in f_midi_in_trigger() local
592 if (!midi->in_port[substream->number]) in f_midi_in_trigger()
595 VDBG(midi, "%s() %d\n", __func__, up); in f_midi_in_trigger()
596 midi->in_port[substream->number]->active = up; in f_midi_in_trigger()
598 tasklet_hi_schedule(&midi->tasklet); in f_midi_in_trigger()
603 struct f_midi *midi = substream->rmidi->private_data; in f_midi_out_open() local
608 VDBG(midi, "%s()\n", __func__); in f_midi_out_open()
609 midi->out_substream[substream->number] = substream; in f_midi_out_open()
615 struct f_midi *midi = substream->rmidi->private_data; in f_midi_out_close() local
617 VDBG(midi, "%s()\n", __func__); in f_midi_out_close()
623 struct f_midi *midi = substream->rmidi->private_data; in f_midi_out_trigger() local
625 VDBG(midi, "%s()\n", __func__); in f_midi_out_trigger()
628 set_bit(substream->number, &midi->out_triggered); in f_midi_out_trigger()
630 clear_bit(substream->number, &midi->out_triggered); in f_midi_out_trigger()
645 static inline void f_midi_unregister_card(struct f_midi *midi) in f_midi_unregister_card() argument
647 if (midi->card) { in f_midi_unregister_card()
648 snd_card_free(midi->card); in f_midi_unregister_card()
649 midi->card = NULL; in f_midi_unregister_card()
654 static int f_midi_register_card(struct f_midi *midi) in f_midi_register_card() argument
663 err = snd_card_new(&midi->gadget->dev, midi->index, midi->id, in f_midi_register_card()
666 ERROR(midi, "snd_card_new() failed\n"); in f_midi_register_card()
669 midi->card = card; in f_midi_register_card()
671 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, midi, &ops); in f_midi_register_card()
673 ERROR(midi, "snd_device_new() failed: error %d\n", err); in f_midi_register_card()
684 midi->out_ports, midi->in_ports, &rmidi); in f_midi_register_card()
686 ERROR(midi, "snd_rawmidi_new() failed: error %d\n", err); in f_midi_register_card()
689 midi->rmidi = rmidi; in f_midi_register_card()
694 rmidi->private_data = midi; in f_midi_register_card()
706 ERROR(midi, "snd_card_register() failed\n"); in f_midi_register_card()
710 VDBG(midi, "%s() finished ok\n", __func__); in f_midi_register_card()
714 f_midi_unregister_card(midi); in f_midi_register_card()
728 struct f_midi *midi = func_to_midi(f); in f_midi_bind() local
732 midi->gadget = cdev->gadget; in f_midi_bind()
733 tasklet_init(&midi->tasklet, f_midi_in_tasklet, (unsigned long) midi); in f_midi_bind()
734 status = f_midi_register_card(midi); in f_midi_bind()
762 midi->in_ep = usb_ep_autoconfig(cdev->gadget, &bulk_in_desc); in f_midi_bind()
763 if (!midi->in_ep) in f_midi_bind()
766 midi->out_ep = usb_ep_autoconfig(cdev->gadget, &bulk_out_desc); in f_midi_bind()
767 if (!midi->out_ep) in f_midi_bind()
791 + (midi->in_ports + midi->out_ports) * in f_midi_bind()
798 for (n = 0; n < midi->in_ports; n++) { in f_midi_bind()
826 for (n = 0; n < midi->out_ports; n++) { in f_midi_bind()
854 ms_out_desc.bLength = USB_DT_MS_ENDPOINT_SIZE(midi->in_ports); in f_midi_bind()
855 ms_out_desc.bNumEmbMIDIJack = midi->in_ports; in f_midi_bind()
857 ms_in_desc.bLength = USB_DT_MS_ENDPOINT_SIZE(midi->out_ports); in f_midi_bind()
858 ms_in_desc.bNumEmbMIDIJack = midi->out_ports; in f_midi_bind()
893 f_midi_unregister_card(midi); in f_midi_bind()
1068 struct f_midi *midi; in f_midi_free() local
1072 midi = func_to_midi(f); in f_midi_free()
1074 kfree(midi->id); in f_midi_free()
1077 kfree(midi->in_port[i]); in f_midi_free()
1078 kfree(midi); in f_midi_free()
1086 struct f_midi *midi = func_to_midi(f); in f_midi_unbind() local
1094 card = midi->card; in f_midi_unbind()
1095 midi->card = NULL; in f_midi_unbind()
1104 struct f_midi *midi; in f_midi_alloc() local
1118 midi = kzalloc(sizeof(*midi), GFP_KERNEL); in f_midi_alloc()
1119 if (!midi) { in f_midi_alloc()
1133 port->midi = midi; in f_midi_alloc()
1136 midi->in_port[i] = port; in f_midi_alloc()
1140 midi->id = kstrdup(opts->id, GFP_KERNEL); in f_midi_alloc()
1141 if (opts->id && !midi->id) { in f_midi_alloc()
1146 midi->in_ports = opts->in_ports; in f_midi_alloc()
1147 midi->out_ports = opts->out_ports; in f_midi_alloc()
1148 midi->index = opts->index; in f_midi_alloc()
1149 midi->buflen = opts->buflen; in f_midi_alloc()
1150 midi->qlen = opts->qlen; in f_midi_alloc()
1154 midi->func.name = "gmidi function"; in f_midi_alloc()
1155 midi->func.bind = f_midi_bind; in f_midi_alloc()
1156 midi->func.unbind = f_midi_unbind; in f_midi_alloc()
1157 midi->func.set_alt = f_midi_set_alt; in f_midi_alloc()
1158 midi->func.disable = f_midi_disable; in f_midi_alloc()
1159 midi->func.free_func = f_midi_free; in f_midi_alloc()
1161 return &midi->func; in f_midi_alloc()
1165 kfree(midi->in_port[i]); in f_midi_alloc()
1166 kfree(midi); in f_midi_alloc()
1170 DECLARE_USB_FUNCTION_INIT(midi, f_midi_alloc_inst, f_midi_alloc);