Lines Matching refs:midi2
502 struct f_midi2 *midi2 = ep->card; in reply_ump_stream_string() local
533 if (midi2->info.req_buf_size - req->length < UMP_STREAM_PKT_BYTES) in reply_ump_stream_string()
610 struct f_midi2 *midi2 = ep->card; in process_ump_stream_msg() local
633 DBG(midi2, "Switching Protocol to MIDI2\n"); in process_ump_stream_msg()
636 DBG(midi2, "Switching Protocol to MIDI1\n"); in process_ump_stream_msg()
689 struct f_midi2 *midi2 = ep->card; in f_midi2_ep_out_complete() local
693 DBG(midi2, "%s complete error %d: %d/%d\n", in f_midi2_ep_out_complete()
701 if (midi2->info.process_ump) in f_midi2_ep_out_complete()
706 if (midi2->operation_mode != MIDI_OP_MODE_MIDI2) in f_midi2_ep_out_complete()
721 struct f_midi2 *midi2 = ep->card; in process_ump_transmit() local
733 midi2->info.req_buf_size); in process_ump_transmit()
751 struct f_midi2 *midi2 = ep->card; in f_midi2_ep_in_complete() local
757 DBG(midi2, "%s complete error %d: %d/%d\n", in f_midi2_ep_in_complete()
774 static bool process_midi1_byte(struct f_midi2 *midi2, u8 cable, u8 b, in process_midi1_byte() argument
777 struct f_midi2_midi1_port *port = &midi2->midi1_port[cable]; in process_midi1_byte()
927 if (midi2->info.req_buf_size - req->length <= 4) { in process_midi1_byte()
942 static bool process_midi1_pending_buf(struct f_midi2 *midi2, in process_midi1_pending_buf() argument
947 for (cable = 0; cable < midi2->num_midi1_in; cable++) { in process_midi1_pending_buf()
948 struct f_midi2_midi1_port *port = &midi2->midi1_port[cable]; in process_midi1_pending_buf()
953 if (process_midi1_byte(midi2, cable, port->buf[c], in process_midi1_pending_buf()
970 static void fill_midi1_pending_buf(struct f_midi2 *midi2, u8 cable, u8 *buf, in fill_midi1_pending_buf() argument
973 struct f_midi2_midi1_port *port = &midi2->midi1_port[cable]; in fill_midi1_pending_buf()
982 static void process_midi1_transmit(struct f_midi2 *midi2) in process_midi1_transmit() argument
984 struct f_midi2_usb_ep *usb_ep = &midi2->midi1_ep_in; in process_midi1_transmit()
985 struct f_midi2_ep *ep = &midi2->midi2_eps[0]; in process_midi1_transmit()
1003 if (process_midi1_pending_buf(midi2, &req)) in process_midi1_transmit()
1019 fill_midi1_pending_buf(midi2, cable, outbuf, size); in process_midi1_transmit()
1035 struct f_midi2 *midi2 = ctx->usb_ep->card; in f_midi2_midi1_ep_in_complete() local
1041 DBG(midi2, "%s complete error %d: %d/%d\n", in f_midi2_midi1_ep_in_complete()
1046 process_midi1_transmit(midi2); in f_midi2_midi1_ep_in_complete()
1054 struct f_midi2 *midi2 = ctx->usb_ep->card; in f_midi2_midi1_ep_out_complete() local
1056 struct ump_cvt_to_ump *cvt = &midi2->midi1_ump_cvt; in f_midi2_midi1_ep_out_complete()
1065 DBG(midi2, "%s complete error %d: %d/%d\n", in f_midi2_midi1_ep_out_complete()
1073 ep = midi2->out_cable_mapping[cable].ep; in f_midi2_midi1_ep_out_complete()
1076 group = midi2->out_cable_mapping[cable].group; in f_midi2_midi1_ep_out_complete()
1090 if (midi2->operation_mode != MIDI_OP_MODE_MIDI1) in f_midi2_midi1_ep_out_complete()
1140 struct f_midi2 *midi2 = usb_ep->card; in f_midi2_alloc_ep_reqs() local
1148 for (i = 0; i < midi2->info.num_reqs; i++) { in f_midi2_alloc_ep_reqs()
1152 midi2->info.req_buf_size); in f_midi2_alloc_ep_reqs()
1163 struct f_midi2 *midi2 = usb_ep->card; in f_midi2_free_ep_reqs() local
1166 for (i = 0; i < midi2->info.num_reqs; i++) { in f_midi2_free_ep_reqs()
1175 static int f_midi2_init_ep(struct f_midi2 *midi2, struct f_midi2_ep *ep, in f_midi2_init_ep() argument
1183 usb_ep->card = midi2; in f_midi2_init_ep()
1185 usb_ep->usb_ep = usb_ep_autoconfig(midi2->gadget, desc); in f_midi2_init_ep()
1190 usb_ep->reqs = kcalloc(midi2->info.num_reqs, sizeof(*usb_ep->reqs), in f_midi2_init_ep()
1194 for (i = 0; i < midi2->info.num_reqs; i++) { in f_midi2_init_ep()
1279 struct f_midi2 *midi2 = func_to_midi2(fn); in f_midi2_set_alt() local
1283 if (intf != midi2->midi_if || alt > 1) in f_midi2_set_alt()
1291 if (midi2->operation_mode == op_mode) in f_midi2_set_alt()
1294 midi2->operation_mode = op_mode; in f_midi2_set_alt()
1297 f_midi2_stop_eps(&midi2->midi1_ep_in, &midi2->midi1_ep_out); in f_midi2_set_alt()
1300 for (i = 0; i < midi2->num_eps; i++) { in f_midi2_set_alt()
1301 ep = &midi2->midi2_eps[i]; in f_midi2_set_alt()
1307 return f_midi2_start_eps(&midi2->midi1_ep_in, in f_midi2_set_alt()
1308 &midi2->midi1_ep_out, fn); in f_midi2_set_alt()
1311 for (i = 0; i < midi2->num_eps; i++) { in f_midi2_set_alt()
1312 ep = &midi2->midi2_eps[i]; in f_midi2_set_alt()
1326 struct f_midi2 *midi2 = func_to_midi2(fn); in f_midi2_get_alt() local
1328 if (intf == midi2->midi_if && in f_midi2_get_alt()
1329 midi2->operation_mode == MIDI_OP_MODE_MIDI2) in f_midi2_get_alt()
1348 static void assign_block_descriptors(struct f_midi2 *midi2, in assign_block_descriptors() argument
1359 len = sizeof(gtb_header_desc) + sizeof(gtb_desc) * midi2->total_blocks; in assign_block_descriptors()
1360 if (WARN_ON(len > midi2->info.req_buf_size)) in assign_block_descriptors()
1375 for (i = 0; i < midi2->num_eps; i++) { in assign_block_descriptors()
1376 ep = &midi2->midi2_eps[i]; in assign_block_descriptors()
1410 struct f_midi2 *midi2 = func_to_midi2(fn); in f_midi2_setup() local
1429 assign_block_descriptors(midi2, req, length); in f_midi2_setup()
1436 struct f_midi2 *midi2 = func_to_midi2(fn); in f_midi2_disable() local
1438 midi2->operation_mode = MIDI_OP_MODE_UNSET; in f_midi2_disable()
1456 struct f_midi2 *midi2 = ep->card; in f_midi2_ump_trigger() local
1459 switch (midi2->operation_mode) { in f_midi2_ump_trigger()
1461 process_midi1_transmit(midi2); in f_midi2_ump_trigger()
1497 struct f_midi2 *midi2 = snd_kcontrol_chip(kcontrol); in f_midi2_operation_mode_get() local
1499 ucontrol->value.integer.value[0] = midi2->operation_mode; in f_midi2_operation_mode_get()
1514 static void f_midi2_free_card(struct f_midi2 *midi2) in f_midi2_free_card() argument
1516 if (midi2->card) { in f_midi2_free_card()
1517 snd_card_free_when_closed(midi2->card); in f_midi2_free_card()
1518 midi2->card = NULL; in f_midi2_free_card()
1531 static int f_midi2_create_card(struct f_midi2 *midi2) in f_midi2_create_card() argument
1539 err = snd_card_new(&midi2->gadget->dev, -1, NULL, THIS_MODULE, 0, in f_midi2_create_card()
1543 midi2->card = card; in f_midi2_create_card()
1550 for (i = 0; i < midi2->num_eps; i++) { in f_midi2_create_card()
1551 ep = &midi2->midi2_eps[i]; in f_midi2_create_card()
1562 if (midi2->info.static_block) in f_midi2_create_card()
1604 for (i = 0; i < midi2->num_eps; i++) { in f_midi2_create_card()
1605 err = snd_ump_attach_legacy_rawmidi(midi2->midi2_eps[i].ump, in f_midi2_create_card()
1612 err = snd_ctl_add(card, snd_ctl_new1(&operation_mode_ctl, midi2)); in f_midi2_create_card()
1623 f_midi2_free_card(midi2); in f_midi2_create_card()
1673 static int append_midi1_in_jack(struct f_midi2 *midi2, in append_midi1_in_jack() argument
1698 static int append_midi1_out_jack(struct f_midi2 *midi2, in append_midi1_out_jack() argument
1726 static int f_midi2_create_usb_configs(struct f_midi2 *midi2, in f_midi2_create_usb_configs() argument
1739 for (i = 0; i < midi2->num_eps; i++) in f_midi2_create_usb_configs()
1750 for (i = 0; i < midi2->num_eps; i++) in f_midi2_create_usb_configs()
1762 if (midi2->num_midi1_in && midi2->num_midi1_out) in f_midi2_create_usb_configs()
1772 if (midi2->num_midi1_out) { in f_midi2_create_usb_configs()
1774 USB_DT_MS_ENDPOINT_SIZE(midi2->num_midi1_out); in f_midi2_create_usb_configs()
1777 midi2->num_midi1_out; in f_midi2_create_usb_configs()
1778 total += midi2->num_midi1_out * in f_midi2_create_usb_configs()
1780 for (i = 0; i < midi2->num_midi1_out; i++) { in f_midi2_create_usb_configs()
1781 jack = append_midi1_in_jack(midi2, config, in f_midi2_create_usb_configs()
1782 &midi2->in_cable_mapping[i], in f_midi2_create_usb_configs()
1787 jack = append_midi1_out_jack(midi2, config, in f_midi2_create_usb_configs()
1788 &midi2->in_cable_mapping[i], in f_midi2_create_usb_configs()
1795 if (midi2->num_midi1_in) { in f_midi2_create_usb_configs()
1797 USB_DT_MS_ENDPOINT_SIZE(midi2->num_midi1_in); in f_midi2_create_usb_configs()
1800 midi2->num_midi1_in; in f_midi2_create_usb_configs()
1801 total += midi2->num_midi1_in * in f_midi2_create_usb_configs()
1803 for (i = 0; i < midi2->num_midi1_in; i++) { in f_midi2_create_usb_configs()
1804 jack = append_midi1_in_jack(midi2, config, in f_midi2_create_usb_configs()
1805 &midi2->out_cable_mapping[i], in f_midi2_create_usb_configs()
1809 jack = append_midi1_out_jack(midi2, config, in f_midi2_create_usb_configs()
1810 &midi2->out_cable_mapping[i], in f_midi2_create_usb_configs()
1820 if (midi2->num_midi1_out) { in f_midi2_create_usb_configs()
1825 if (midi2->num_midi1_in) { in f_midi2_create_usb_configs()
1835 for (i = 0; i < midi2->num_eps; i++) { in f_midi2_create_usb_configs()
1887 static int f_midi2_init_midi2_ep_in(struct f_midi2 *midi2, int index) in f_midi2_init_midi2_ep_in() argument
1889 struct f_midi2_ep *ep = &midi2->midi2_eps[index]; in f_midi2_init_midi2_ep_in()
1901 return f_midi2_init_ep(midi2, ep, &ep->ep_in, desc, in f_midi2_init_midi2_ep_in()
1906 static int f_midi2_init_midi2_ep_out(struct f_midi2 *midi2, int index) in f_midi2_init_midi2_ep_out() argument
1908 struct f_midi2_ep *ep = &midi2->midi2_eps[index]; in f_midi2_init_midi2_ep_out()
1918 return f_midi2_init_ep(midi2, ep, &ep->ep_out, desc, in f_midi2_init_midi2_ep_out()
1926 struct f_midi2 *midi2 = func_to_midi2(f); in f_midi2_bind() local
1931 .strings = midi2->string_defs, in f_midi2_bind()
1939 midi2->gadget = cdev->gadget; in f_midi2_bind()
1940 midi2->operation_mode = MIDI_OP_MODE_UNSET; in f_midi2_bind()
1942 status = f_midi2_create_card(midi2); in f_midi2_bind()
1947 midi2->strings = usb_gstrings_attach(c->cdev, strings, in f_midi2_bind()
1948 midi2->total_blocks + 1); in f_midi2_bind()
1949 if (IS_ERR(midi2->strings)) { in f_midi2_bind()
1950 status = PTR_ERR(midi2->strings); in f_midi2_bind()
1955 midi2_midi1_if_desc.iInterface = midi2->strings[STR_IFACE].id; in f_midi2_bind()
1956 midi2_midi2_if_desc.iInterface = midi2->strings[STR_IFACE].id; in f_midi2_bind()
1957 for (i = 0; i < midi2->num_eps; i++) { in f_midi2_bind()
1958 ep = &midi2->midi2_eps[i]; in f_midi2_bind()
1961 midi2->strings[gtb_to_str_id(ep->blks[blk].gtb_id)].id; in f_midi2_bind()
1964 midi2_midi2_if_desc.bNumEndpoints = midi2->num_eps * 2; in f_midi2_bind()
1976 midi2->midi_if = status; in f_midi2_bind()
1982 if (midi2->midi2_eps[0].blks[0].info.direction != SNDRV_UMP_DIR_OUTPUT) { in f_midi2_bind()
1983 status = f_midi2_init_ep(midi2, NULL, &midi2->midi1_ep_in, in f_midi2_bind()
1990 if (midi2->midi2_eps[0].blks[0].info.direction != SNDRV_UMP_DIR_INPUT) { in f_midi2_bind()
1991 status = f_midi2_init_ep(midi2, NULL, &midi2->midi1_ep_out, in f_midi2_bind()
1998 for (i = 0; i < midi2->num_eps; i++) { in f_midi2_bind()
1999 status = f_midi2_init_midi2_ep_in(midi2, i); in f_midi2_bind()
2002 status = f_midi2_init_midi2_ep_out(midi2, i); in f_midi2_bind()
2007 status = f_midi2_create_usb_configs(midi2, &config, USB_SPEED_FULL); in f_midi2_bind()
2017 status = f_midi2_create_usb_configs(midi2, &config, USB_SPEED_HIGH); in f_midi2_bind()
2027 status = f_midi2_create_usb_configs(midi2, &config, USB_SPEED_SUPER); in f_midi2_bind()
2045 f_midi2_free_card(midi2); in f_midi2_bind()
2047 ERROR(midi2, "%s: can't bind, err %d\n", f->name, status); in f_midi2_bind()
2054 struct f_midi2 *midi2 = func_to_midi2(f); in f_midi2_unbind() local
2057 f_midi2_free_card(midi2); in f_midi2_unbind()
2059 f_midi2_free_ep(&midi2->midi1_ep_in); in f_midi2_unbind()
2060 f_midi2_free_ep(&midi2->midi1_ep_out); in f_midi2_unbind()
2061 for (i = 0; i < midi2->num_eps; i++) { in f_midi2_unbind()
2062 f_midi2_free_ep(&midi2->midi2_eps[i].ep_in); in f_midi2_unbind()
2063 f_midi2_free_ep(&midi2->midi2_eps[i].ep_out); in f_midi2_unbind()
2691 static void do_f_midi2_free(struct f_midi2 *midi2, struct f_midi2_opts *opts) in do_f_midi2_free() argument
2696 kfree(midi2->string_defs); in do_f_midi2_free()
2697 kfree(midi2); in do_f_midi2_free()
2761 static void fill_midi1_cable_mapping(struct f_midi2 *midi2, in fill_midi1_cable_mapping() argument
2773 map = midi2->in_cable_mapping + midi2->num_midi1_in; in fill_midi1_cable_mapping()
2775 if (midi2->num_midi1_in >= MAX_CABLES) in fill_midi1_cable_mapping()
2780 midi2->num_midi1_in++; in fill_midi1_cable_mapping()
2782 ep->in_group_to_cable[group] = midi2->num_midi1_in; in fill_midi1_cable_mapping()
2788 map = midi2->out_cable_mapping + midi2->num_midi1_out; in fill_midi1_cable_mapping()
2790 if (midi2->num_midi1_out >= MAX_CABLES) in fill_midi1_cable_mapping()
2795 midi2->num_midi1_out++; in fill_midi1_cable_mapping()
2803 struct f_midi2 *midi2; in f_midi2_alloc() local
2809 midi2 = kzalloc(sizeof(*midi2), GFP_KERNEL); in f_midi2_alloc()
2810 if (!midi2) in f_midi2_alloc()
2818 kfree(midi2); in f_midi2_alloc()
2824 spin_lock_init(&midi2->queue_lock); in f_midi2_alloc()
2826 midi2->func.name = "midi2_func"; in f_midi2_alloc()
2827 midi2->func.bind = f_midi2_bind; in f_midi2_alloc()
2828 midi2->func.unbind = f_midi2_unbind; in f_midi2_alloc()
2829 midi2->func.get_alt = f_midi2_get_alt; in f_midi2_alloc()
2830 midi2->func.set_alt = f_midi2_set_alt; in f_midi2_alloc()
2831 midi2->func.setup = f_midi2_setup; in f_midi2_alloc()
2832 midi2->func.disable = f_midi2_disable; in f_midi2_alloc()
2833 midi2->func.free_func = f_midi2_free; in f_midi2_alloc()
2835 midi2->info = opts->info; in f_midi2_alloc()
2836 midi2->num_eps = num_eps; in f_midi2_alloc()
2839 ep = &midi2->midi2_eps[i]; in f_midi2_alloc()
2841 ep->card = midi2; in f_midi2_alloc()
2847 bp->gtb_id = ++midi2->total_blocks; in f_midi2_alloc()
2851 midi2->string_defs = kcalloc(midi2->total_blocks + 1, in f_midi2_alloc()
2852 sizeof(*midi2->string_defs), GFP_KERNEL); in f_midi2_alloc()
2853 if (!midi2->string_defs) { in f_midi2_alloc()
2854 do_f_midi2_free(midi2, opts); in f_midi2_alloc()
2859 midi2->string_defs[STR_IFACE].s = opts->info.iface_name; in f_midi2_alloc()
2861 midi2->string_defs[STR_IFACE].s = ump_ep_name(&midi2->midi2_eps[0]); in f_midi2_alloc()
2863 for (i = 0; i < midi2->num_eps; i++) { in f_midi2_alloc()
2864 ep = &midi2->midi2_eps[i]; in f_midi2_alloc()
2867 midi2->string_defs[gtb_to_str_id(bp->gtb_id)].s = in f_midi2_alloc()
2870 fill_midi1_cable_mapping(midi2, ep, blk); in f_midi2_alloc()
2874 if (!midi2->num_midi1_in && !midi2->num_midi1_out) { in f_midi2_alloc()
2876 do_f_midi2_free(midi2, opts); in f_midi2_alloc()
2880 return &midi2->func; in f_midi2_alloc()
2883 DECLARE_USB_FUNCTION_INIT(midi2, f_midi2_alloc_inst, f_midi2_alloc);