Lines Matching refs:midi2
499 struct f_midi2 *midi2 = ep->card; in reply_ump_stream_string() local
530 if (midi2->info.req_buf_size - req->length < UMP_STREAM_PKT_BYTES) in reply_ump_stream_string()
608 struct f_midi2 *midi2 = ep->card; in process_ump_stream_msg() local
631 DBG(midi2, "Switching Protocol to MIDI2\n"); in process_ump_stream_msg()
634 DBG(midi2, "Switching Protocol to MIDI1\n"); in process_ump_stream_msg()
678 struct f_midi2 *midi2 = ep->card; in f_midi2_ep_out_complete() local
682 DBG(midi2, "%s complete error %d: %d/%d\n", in f_midi2_ep_out_complete()
690 if (midi2->info.process_ump) in f_midi2_ep_out_complete()
695 if (midi2->operation_mode != MIDI_OP_MODE_MIDI2) in f_midi2_ep_out_complete()
710 struct f_midi2 *midi2 = ep->card; in process_ump_transmit() local
722 midi2->info.req_buf_size); in process_ump_transmit()
740 struct f_midi2 *midi2 = ep->card; in f_midi2_ep_in_complete() local
746 DBG(midi2, "%s complete error %d: %d/%d\n", in f_midi2_ep_in_complete()
763 static bool process_midi1_byte(struct f_midi2 *midi2, u8 cable, u8 b, in process_midi1_byte() argument
766 struct f_midi2_midi1_port *port = &midi2->midi1_port[cable]; in process_midi1_byte()
916 if (midi2->info.req_buf_size - req->length <= 4) { in process_midi1_byte()
931 static bool process_midi1_pending_buf(struct f_midi2 *midi2, in process_midi1_pending_buf() argument
936 for (cable = 0; cable < midi2->num_midi1_in; cable++) { in process_midi1_pending_buf()
937 struct f_midi2_midi1_port *port = &midi2->midi1_port[cable]; in process_midi1_pending_buf()
942 if (process_midi1_byte(midi2, cable, port->buf[c], in process_midi1_pending_buf()
959 static void fill_midi1_pending_buf(struct f_midi2 *midi2, u8 cable, u8 *buf, in fill_midi1_pending_buf() argument
962 struct f_midi2_midi1_port *port = &midi2->midi1_port[cable]; in fill_midi1_pending_buf()
971 static void process_midi1_transmit(struct f_midi2 *midi2) in process_midi1_transmit() argument
973 struct f_midi2_usb_ep *usb_ep = &midi2->midi1_ep_in; in process_midi1_transmit()
974 struct f_midi2_ep *ep = &midi2->midi2_eps[0]; in process_midi1_transmit()
992 if (process_midi1_pending_buf(midi2, &req)) in process_midi1_transmit()
1008 fill_midi1_pending_buf(midi2, cable, outbuf, size); in process_midi1_transmit()
1024 struct f_midi2 *midi2 = ctx->usb_ep->card; in f_midi2_midi1_ep_in_complete() local
1030 DBG(midi2, "%s complete error %d: %d/%d\n", in f_midi2_midi1_ep_in_complete()
1035 process_midi1_transmit(midi2); in f_midi2_midi1_ep_in_complete()
1043 struct f_midi2 *midi2 = ctx->usb_ep->card; in f_midi2_midi1_ep_out_complete() local
1045 struct ump_cvt_to_ump *cvt = &midi2->midi1_ump_cvt; in f_midi2_midi1_ep_out_complete()
1054 DBG(midi2, "%s complete error %d: %d/%d\n", in f_midi2_midi1_ep_out_complete()
1062 ep = midi2->out_cable_mapping[cable].ep; in f_midi2_midi1_ep_out_complete()
1065 group = midi2->out_cable_mapping[cable].group; in f_midi2_midi1_ep_out_complete()
1078 if (midi2->operation_mode != MIDI_OP_MODE_MIDI1) in f_midi2_midi1_ep_out_complete()
1128 struct f_midi2 *midi2 = usb_ep->card; in f_midi2_alloc_ep_reqs() local
1136 for (i = 0; i < midi2->info.num_reqs; i++) { in f_midi2_alloc_ep_reqs()
1140 midi2->info.req_buf_size); in f_midi2_alloc_ep_reqs()
1151 struct f_midi2 *midi2 = usb_ep->card; in f_midi2_free_ep_reqs() local
1154 for (i = 0; i < midi2->info.num_reqs; i++) { in f_midi2_free_ep_reqs()
1163 static int f_midi2_init_ep(struct f_midi2 *midi2, struct f_midi2_ep *ep, in f_midi2_init_ep() argument
1171 usb_ep->card = midi2; in f_midi2_init_ep()
1173 usb_ep->usb_ep = usb_ep_autoconfig(midi2->gadget, desc); in f_midi2_init_ep()
1178 usb_ep->reqs = kcalloc(midi2->info.num_reqs, sizeof(*usb_ep->reqs), in f_midi2_init_ep()
1182 for (i = 0; i < midi2->info.num_reqs; i++) { in f_midi2_init_ep()
1267 struct f_midi2 *midi2 = func_to_midi2(fn); in f_midi2_set_alt() local
1271 if (intf != midi2->midi_if || alt > 1) in f_midi2_set_alt()
1281 if (midi2->operation_mode == op_mode) in f_midi2_set_alt()
1284 midi2->operation_mode = op_mode; in f_midi2_set_alt()
1287 f_midi2_stop_eps(&midi2->midi1_ep_in, &midi2->midi1_ep_out); in f_midi2_set_alt()
1290 for (i = 0; i < midi2->num_eps; i++) { in f_midi2_set_alt()
1291 ep = &midi2->midi2_eps[i]; in f_midi2_set_alt()
1297 return f_midi2_start_eps(&midi2->midi1_ep_in, in f_midi2_set_alt()
1298 &midi2->midi1_ep_out, fn); in f_midi2_set_alt()
1301 for (i = 0; i < midi2->num_eps; i++) { in f_midi2_set_alt()
1302 ep = &midi2->midi2_eps[i]; in f_midi2_set_alt()
1316 struct f_midi2 *midi2 = func_to_midi2(fn); in f_midi2_get_alt() local
1318 if (intf == midi2->midi_if && in f_midi2_get_alt()
1319 midi2->operation_mode == MIDI_OP_MODE_MIDI2) in f_midi2_get_alt()
1338 static void assign_block_descriptors(struct f_midi2 *midi2, in assign_block_descriptors() argument
1349 len = sizeof(gtb_header_desc) + sizeof(gtb_desc) * midi2->total_blocks; in assign_block_descriptors()
1350 if (WARN_ON(len > midi2->info.req_buf_size)) in assign_block_descriptors()
1365 for (i = 0; i < midi2->num_eps; i++) { in assign_block_descriptors()
1366 ep = &midi2->midi2_eps[i]; in assign_block_descriptors()
1400 struct f_midi2 *midi2 = func_to_midi2(fn); in f_midi2_setup() local
1419 assign_block_descriptors(midi2, req, length); in f_midi2_setup()
1426 struct f_midi2 *midi2 = func_to_midi2(fn); in f_midi2_disable() local
1428 midi2->operation_mode = MIDI_OP_MODE_UNSET; in f_midi2_disable()
1446 struct f_midi2 *midi2 = ep->card; in f_midi2_ump_trigger() local
1449 switch (midi2->operation_mode) { in f_midi2_ump_trigger()
1451 process_midi1_transmit(midi2); in f_midi2_ump_trigger()
1487 struct f_midi2 *midi2 = snd_kcontrol_chip(kcontrol); in f_midi2_operation_mode_get() local
1489 ucontrol->value.integer.value[0] = midi2->operation_mode; in f_midi2_operation_mode_get()
1504 static void f_midi2_free_card(struct f_midi2 *midi2) in f_midi2_free_card() argument
1506 if (midi2->card) { in f_midi2_free_card()
1507 snd_card_free_when_closed(midi2->card); in f_midi2_free_card()
1508 midi2->card = NULL; in f_midi2_free_card()
1521 static int f_midi2_create_card(struct f_midi2 *midi2) in f_midi2_create_card() argument
1529 err = snd_card_new(&midi2->gadget->dev, -1, NULL, THIS_MODULE, 0, in f_midi2_create_card()
1533 midi2->card = card; in f_midi2_create_card()
1540 for (i = 0; i < midi2->num_eps; i++) { in f_midi2_create_card()
1541 ep = &midi2->midi2_eps[i]; in f_midi2_create_card()
1552 if (midi2->info.static_block) in f_midi2_create_card()
1590 for (i = 0; i < midi2->num_eps; i++) { in f_midi2_create_card()
1591 err = snd_ump_attach_legacy_rawmidi(midi2->midi2_eps[i].ump, in f_midi2_create_card()
1598 err = snd_ctl_add(card, snd_ctl_new1(&operation_mode_ctl, midi2)); in f_midi2_create_card()
1609 f_midi2_free_card(midi2); in f_midi2_create_card()
1659 static int append_midi1_in_jack(struct f_midi2 *midi2, in append_midi1_in_jack() argument
1684 static int append_midi1_out_jack(struct f_midi2 *midi2, in append_midi1_out_jack() argument
1712 static int f_midi2_create_usb_configs(struct f_midi2 *midi2, in f_midi2_create_usb_configs() argument
1725 for (i = 0; i < midi2->num_eps; i++) in f_midi2_create_usb_configs()
1736 for (i = 0; i < midi2->num_eps; i++) in f_midi2_create_usb_configs()
1748 if (midi2->num_midi1_in && midi2->num_midi1_out) in f_midi2_create_usb_configs()
1758 if (midi2->num_midi1_out) { in f_midi2_create_usb_configs()
1760 USB_DT_MS_ENDPOINT_SIZE(midi2->num_midi1_out); in f_midi2_create_usb_configs()
1763 midi2->num_midi1_out; in f_midi2_create_usb_configs()
1764 total += midi2->num_midi1_out * in f_midi2_create_usb_configs()
1766 for (i = 0; i < midi2->num_midi1_out; i++) { in f_midi2_create_usb_configs()
1767 jack = append_midi1_in_jack(midi2, config, in f_midi2_create_usb_configs()
1768 &midi2->in_cable_mapping[i], in f_midi2_create_usb_configs()
1773 jack = append_midi1_out_jack(midi2, config, in f_midi2_create_usb_configs()
1774 &midi2->in_cable_mapping[i], in f_midi2_create_usb_configs()
1781 if (midi2->num_midi1_in) { in f_midi2_create_usb_configs()
1783 USB_DT_MS_ENDPOINT_SIZE(midi2->num_midi1_in); in f_midi2_create_usb_configs()
1786 midi2->num_midi1_in; in f_midi2_create_usb_configs()
1787 total += midi2->num_midi1_in * in f_midi2_create_usb_configs()
1789 for (i = 0; i < midi2->num_midi1_in; i++) { in f_midi2_create_usb_configs()
1790 jack = append_midi1_in_jack(midi2, config, in f_midi2_create_usb_configs()
1791 &midi2->out_cable_mapping[i], in f_midi2_create_usb_configs()
1795 jack = append_midi1_out_jack(midi2, config, in f_midi2_create_usb_configs()
1796 &midi2->out_cable_mapping[i], in f_midi2_create_usb_configs()
1806 if (midi2->num_midi1_out) { in f_midi2_create_usb_configs()
1811 if (midi2->num_midi1_in) { in f_midi2_create_usb_configs()
1821 for (i = 0; i < midi2->num_eps; i++) { in f_midi2_create_usb_configs()
1873 static int f_midi2_init_midi2_ep_in(struct f_midi2 *midi2, int index) in f_midi2_init_midi2_ep_in() argument
1875 struct f_midi2_ep *ep = &midi2->midi2_eps[index]; in f_midi2_init_midi2_ep_in()
1887 return f_midi2_init_ep(midi2, ep, &ep->ep_in, desc, in f_midi2_init_midi2_ep_in()
1892 static int f_midi2_init_midi2_ep_out(struct f_midi2 *midi2, int index) in f_midi2_init_midi2_ep_out() argument
1894 struct f_midi2_ep *ep = &midi2->midi2_eps[index]; in f_midi2_init_midi2_ep_out()
1904 return f_midi2_init_ep(midi2, ep, &ep->ep_out, desc, in f_midi2_init_midi2_ep_out()
1912 struct f_midi2 *midi2 = func_to_midi2(f); in f_midi2_bind() local
1917 .strings = midi2->string_defs, in f_midi2_bind()
1925 midi2->gadget = cdev->gadget; in f_midi2_bind()
1926 midi2->operation_mode = MIDI_OP_MODE_UNSET; in f_midi2_bind()
1928 status = f_midi2_create_card(midi2); in f_midi2_bind()
1933 midi2->strings = usb_gstrings_attach(c->cdev, strings, in f_midi2_bind()
1934 midi2->total_blocks + 1); in f_midi2_bind()
1935 if (IS_ERR(midi2->strings)) { in f_midi2_bind()
1936 status = PTR_ERR(midi2->strings); in f_midi2_bind()
1941 midi2_midi1_if_desc.iInterface = midi2->strings[STR_IFACE].id; in f_midi2_bind()
1942 midi2_midi2_if_desc.iInterface = midi2->strings[STR_IFACE].id; in f_midi2_bind()
1943 for (i = 0; i < midi2->num_eps; i++) { in f_midi2_bind()
1944 ep = &midi2->midi2_eps[i]; in f_midi2_bind()
1947 midi2->strings[gtb_to_str_id(ep->blks[blk].gtb_id)].id; in f_midi2_bind()
1950 midi2_midi2_if_desc.bNumEndpoints = midi2->num_eps * 2; in f_midi2_bind()
1962 midi2->midi_if = status; in f_midi2_bind()
1968 if (midi2->midi2_eps[0].blks[0].info.direction != SNDRV_UMP_DIR_OUTPUT) { in f_midi2_bind()
1969 status = f_midi2_init_ep(midi2, NULL, &midi2->midi1_ep_in, in f_midi2_bind()
1976 if (midi2->midi2_eps[0].blks[0].info.direction != SNDRV_UMP_DIR_INPUT) { in f_midi2_bind()
1977 status = f_midi2_init_ep(midi2, NULL, &midi2->midi1_ep_out, in f_midi2_bind()
1984 for (i = 0; i < midi2->num_eps; i++) { in f_midi2_bind()
1985 status = f_midi2_init_midi2_ep_in(midi2, i); in f_midi2_bind()
1988 status = f_midi2_init_midi2_ep_out(midi2, i); in f_midi2_bind()
1993 status = f_midi2_create_usb_configs(midi2, &config, USB_SPEED_FULL); in f_midi2_bind()
2003 status = f_midi2_create_usb_configs(midi2, &config, USB_SPEED_HIGH); in f_midi2_bind()
2013 status = f_midi2_create_usb_configs(midi2, &config, USB_SPEED_SUPER); in f_midi2_bind()
2031 f_midi2_free_card(midi2); in f_midi2_bind()
2033 ERROR(midi2, "%s: can't bind, err %d\n", f->name, status); in f_midi2_bind()
2040 struct f_midi2 *midi2 = func_to_midi2(f); in f_midi2_unbind() local
2043 f_midi2_free_card(midi2); in f_midi2_unbind()
2045 f_midi2_free_ep(&midi2->midi1_ep_in); in f_midi2_unbind()
2046 f_midi2_free_ep(&midi2->midi1_ep_out); in f_midi2_unbind()
2047 for (i = 0; i < midi2->num_eps; i++) { in f_midi2_unbind()
2048 f_midi2_free_ep(&midi2->midi2_eps[i].ep_in); in f_midi2_unbind()
2049 f_midi2_free_ep(&midi2->midi2_eps[i].ep_out); in f_midi2_unbind()
2677 static void do_f_midi2_free(struct f_midi2 *midi2, struct f_midi2_opts *opts) in do_f_midi2_free() argument
2682 kfree(midi2->string_defs); in do_f_midi2_free()
2683 kfree(midi2); in do_f_midi2_free()
2747 static void fill_midi1_cable_mapping(struct f_midi2 *midi2, in fill_midi1_cable_mapping() argument
2759 map = midi2->in_cable_mapping + midi2->num_midi1_in; in fill_midi1_cable_mapping()
2761 if (midi2->num_midi1_in >= MAX_CABLES) in fill_midi1_cable_mapping()
2766 midi2->num_midi1_in++; in fill_midi1_cable_mapping()
2768 ep->in_group_to_cable[group] = midi2->num_midi1_in; in fill_midi1_cable_mapping()
2774 map = midi2->out_cable_mapping + midi2->num_midi1_out; in fill_midi1_cable_mapping()
2776 if (midi2->num_midi1_out >= MAX_CABLES) in fill_midi1_cable_mapping()
2781 midi2->num_midi1_out++; in fill_midi1_cable_mapping()
2789 struct f_midi2 *midi2; in f_midi2_alloc() local
2795 midi2 = kzalloc(sizeof(*midi2), GFP_KERNEL); in f_midi2_alloc()
2796 if (!midi2) in f_midi2_alloc()
2804 kfree(midi2); in f_midi2_alloc()
2810 spin_lock_init(&midi2->queue_lock); in f_midi2_alloc()
2812 midi2->func.name = "midi2_func"; in f_midi2_alloc()
2813 midi2->func.bind = f_midi2_bind; in f_midi2_alloc()
2814 midi2->func.unbind = f_midi2_unbind; in f_midi2_alloc()
2815 midi2->func.get_alt = f_midi2_get_alt; in f_midi2_alloc()
2816 midi2->func.set_alt = f_midi2_set_alt; in f_midi2_alloc()
2817 midi2->func.setup = f_midi2_setup; in f_midi2_alloc()
2818 midi2->func.disable = f_midi2_disable; in f_midi2_alloc()
2819 midi2->func.free_func = f_midi2_free; in f_midi2_alloc()
2821 midi2->info = opts->info; in f_midi2_alloc()
2822 midi2->num_eps = num_eps; in f_midi2_alloc()
2825 ep = &midi2->midi2_eps[i]; in f_midi2_alloc()
2827 ep->card = midi2; in f_midi2_alloc()
2833 bp->gtb_id = ++midi2->total_blocks; in f_midi2_alloc()
2837 midi2->string_defs = kcalloc(midi2->total_blocks + 1, in f_midi2_alloc()
2838 sizeof(*midi2->string_defs), GFP_KERNEL); in f_midi2_alloc()
2839 if (!midi2->string_defs) { in f_midi2_alloc()
2840 do_f_midi2_free(midi2, opts); in f_midi2_alloc()
2845 midi2->string_defs[STR_IFACE].s = opts->info.iface_name; in f_midi2_alloc()
2847 midi2->string_defs[STR_IFACE].s = ump_ep_name(&midi2->midi2_eps[0]); in f_midi2_alloc()
2849 for (i = 0; i < midi2->num_eps; i++) { in f_midi2_alloc()
2850 ep = &midi2->midi2_eps[i]; in f_midi2_alloc()
2853 midi2->string_defs[gtb_to_str_id(bp->gtb_id)].s = in f_midi2_alloc()
2856 fill_midi1_cable_mapping(midi2, ep, blk); in f_midi2_alloc()
2860 if (!midi2->num_midi1_in && !midi2->num_midi1_out) { in f_midi2_alloc()
2862 do_f_midi2_free(midi2, opts); in f_midi2_alloc()
2866 return &midi2->func; in f_midi2_alloc()
2869 DECLARE_USB_FUNCTION_INIT(midi2, f_midi2_alloc_inst, f_midi2_alloc);