bcd2k 92 sound/usb/bcd2000/bcd2000.c struct bcd2000 *bcd2k = substream->rmidi->private_data; bcd2k 93 sound/usb/bcd2000/bcd2000.c bcd2k->midi_receive_substream = up ? substream : NULL; bcd2k 96 sound/usb/bcd2000/bcd2000.c static void bcd2000_midi_handle_input(struct bcd2000 *bcd2k, bcd2k 102 sound/usb/bcd2000/bcd2000.c midi_receive_substream = READ_ONCE(bcd2k->midi_receive_substream); bcd2k 126 sound/usb/bcd2000/bcd2000.c static void bcd2000_midi_send(struct bcd2000 *bcd2k) bcd2k 133 sound/usb/bcd2000/bcd2000.c midi_out_substream = READ_ONCE(bcd2k->midi_out_substream); bcd2k 138 sound/usb/bcd2000/bcd2000.c memcpy(bcd2k->midi_out_buf, device_cmd_prefix, bcd2k 146 sound/usb/bcd2000/bcd2000.c bcd2k->midi_out_buf + 3, BUFSIZE - 3); bcd2k 149 sound/usb/bcd2000/bcd2000.c dev_err(&bcd2k->dev->dev, "%s: snd_rawmidi_transmit error %d\n", bcd2k 156 sound/usb/bcd2000/bcd2000.c bcd2k->midi_out_buf[2] = len; bcd2k 157 sound/usb/bcd2000/bcd2000.c bcd2k->midi_out_urb->transfer_buffer_length = BUFSIZE; bcd2k 160 sound/usb/bcd2000/bcd2000.c bcd2k->midi_out_buf, len+3); bcd2k 163 sound/usb/bcd2000/bcd2000.c ret = usb_submit_urb(bcd2k->midi_out_urb, GFP_ATOMIC); bcd2k 165 sound/usb/bcd2000/bcd2000.c dev_err(&bcd2k->dev->dev, PREFIX bcd2k 169 sound/usb/bcd2000/bcd2000.c bcd2k->midi_out_active = 1; bcd2k 179 sound/usb/bcd2000/bcd2000.c struct bcd2000 *bcd2k = substream->rmidi->private_data; bcd2k 181 sound/usb/bcd2000/bcd2000.c if (bcd2k->midi_out_active) { bcd2k 182 sound/usb/bcd2000/bcd2000.c usb_kill_urb(bcd2k->midi_out_urb); bcd2k 183 sound/usb/bcd2000/bcd2000.c bcd2k->midi_out_active = 0; bcd2k 193 sound/usb/bcd2000/bcd2000.c struct bcd2000 *bcd2k = substream->rmidi->private_data; bcd2k 196 sound/usb/bcd2000/bcd2000.c bcd2k->midi_out_substream = substream; bcd2k 198 sound/usb/bcd2000/bcd2000.c if (!bcd2k->midi_out_active) bcd2k 199 sound/usb/bcd2000/bcd2000.c bcd2000_midi_send(bcd2k); bcd2k 201 sound/usb/bcd2000/bcd2000.c bcd2k->midi_out_substream = NULL; bcd2k 207 sound/usb/bcd2000/bcd2000.c struct bcd2000 *bcd2k = urb->context; bcd2k 209 sound/usb/bcd2000/bcd2000.c bcd2k->midi_out_active = 0; bcd2k 219 sound/usb/bcd2000/bcd2000.c bcd2000_midi_send(bcd2k); bcd2k 225 sound/usb/bcd2000/bcd2000.c struct bcd2000 *bcd2k = urb->context; bcd2k 231 sound/usb/bcd2000/bcd2000.c if (!bcd2k || urb->status == -ESHUTDOWN) bcd2k 235 sound/usb/bcd2000/bcd2000.c bcd2000_midi_handle_input(bcd2k, urb->transfer_buffer, bcd2k 239 sound/usb/bcd2000/bcd2000.c ret = usb_submit_urb(bcd2k->midi_in_urb, GFP_ATOMIC); bcd2k 241 sound/usb/bcd2000/bcd2000.c dev_err(&bcd2k->dev->dev, PREFIX bcd2k 258 sound/usb/bcd2000/bcd2000.c static void bcd2000_init_device(struct bcd2000 *bcd2k) bcd2k 262 sound/usb/bcd2000/bcd2000.c init_usb_anchor(&bcd2k->anchor); bcd2k 263 sound/usb/bcd2000/bcd2000.c usb_anchor_urb(bcd2k->midi_out_urb, &bcd2k->anchor); bcd2k 264 sound/usb/bcd2000/bcd2000.c usb_anchor_urb(bcd2k->midi_in_urb, &bcd2k->anchor); bcd2k 267 sound/usb/bcd2000/bcd2000.c memcpy(bcd2k->midi_out_buf, bcd2000_init_sequence, 52); bcd2k 268 sound/usb/bcd2000/bcd2000.c bcd2k->midi_out_urb->transfer_buffer_length = 52; bcd2k 271 sound/usb/bcd2000/bcd2000.c ret = usb_submit_urb(bcd2k->midi_out_urb, GFP_KERNEL); bcd2k 273 sound/usb/bcd2000/bcd2000.c dev_err(&bcd2k->dev->dev, PREFIX bcd2k 277 sound/usb/bcd2000/bcd2000.c bcd2k->midi_out_active = 1; bcd2k 280 sound/usb/bcd2000/bcd2000.c ret = usb_submit_urb(bcd2k->midi_in_urb, GFP_KERNEL); bcd2k 282 sound/usb/bcd2000/bcd2000.c dev_err(&bcd2k->dev->dev, PREFIX bcd2k 287 sound/usb/bcd2000/bcd2000.c usb_wait_anchor_empty_timeout(&bcd2k->anchor, 1000); bcd2k 290 sound/usb/bcd2000/bcd2000.c static int bcd2000_init_midi(struct bcd2000 *bcd2k) bcd2k 295 sound/usb/bcd2000/bcd2000.c ret = snd_rawmidi_new(bcd2k->card, bcd2k->card->shortname, 0, bcd2k 303 sound/usb/bcd2000/bcd2000.c strlcpy(rmidi->name, bcd2k->card->shortname, sizeof(rmidi->name)); bcd2k 306 sound/usb/bcd2000/bcd2000.c rmidi->private_data = bcd2k; bcd2k 316 sound/usb/bcd2000/bcd2000.c bcd2k->rmidi = rmidi; bcd2k 318 sound/usb/bcd2000/bcd2000.c bcd2k->midi_in_urb = usb_alloc_urb(0, GFP_KERNEL); bcd2k 319 sound/usb/bcd2000/bcd2000.c bcd2k->midi_out_urb = usb_alloc_urb(0, GFP_KERNEL); bcd2k 321 sound/usb/bcd2000/bcd2000.c if (!bcd2k->midi_in_urb || !bcd2k->midi_out_urb) { bcd2k 322 sound/usb/bcd2000/bcd2000.c dev_err(&bcd2k->dev->dev, PREFIX "usb_alloc_urb failed\n"); bcd2k 326 sound/usb/bcd2000/bcd2000.c usb_fill_int_urb(bcd2k->midi_in_urb, bcd2k->dev, bcd2k 327 sound/usb/bcd2000/bcd2000.c usb_rcvintpipe(bcd2k->dev, 0x81), bcd2k 328 sound/usb/bcd2000/bcd2000.c bcd2k->midi_in_buf, BUFSIZE, bcd2k 329 sound/usb/bcd2000/bcd2000.c bcd2000_input_complete, bcd2k, 1); bcd2k 331 sound/usb/bcd2000/bcd2000.c usb_fill_int_urb(bcd2k->midi_out_urb, bcd2k->dev, bcd2k 332 sound/usb/bcd2000/bcd2000.c usb_sndintpipe(bcd2k->dev, 0x1), bcd2k 333 sound/usb/bcd2000/bcd2000.c bcd2k->midi_out_buf, BUFSIZE, bcd2k 334 sound/usb/bcd2000/bcd2000.c bcd2000_output_complete, bcd2k, 1); bcd2k 337 sound/usb/bcd2000/bcd2000.c if (usb_urb_ep_type_check(bcd2k->midi_in_urb) || bcd2k 338 sound/usb/bcd2000/bcd2000.c usb_urb_ep_type_check(bcd2k->midi_out_urb)) { bcd2k 339 sound/usb/bcd2000/bcd2000.c dev_err(&bcd2k->dev->dev, "invalid MIDI EP\n"); bcd2k 343 sound/usb/bcd2000/bcd2000.c bcd2000_init_device(bcd2k); bcd2k 348 sound/usb/bcd2000/bcd2000.c static void bcd2000_free_usb_related_resources(struct bcd2000 *bcd2k, bcd2k 353 sound/usb/bcd2000/bcd2000.c usb_free_urb(bcd2k->midi_out_urb); bcd2k 354 sound/usb/bcd2000/bcd2000.c usb_free_urb(bcd2k->midi_in_urb); bcd2k 356 sound/usb/bcd2000/bcd2000.c if (bcd2k->intf) { bcd2k 357 sound/usb/bcd2000/bcd2000.c usb_set_intfdata(bcd2k->intf, NULL); bcd2k 358 sound/usb/bcd2000/bcd2000.c bcd2k->intf = NULL; bcd2k 366 sound/usb/bcd2000/bcd2000.c struct bcd2000 *bcd2k; bcd2k 383 sound/usb/bcd2000/bcd2000.c THIS_MODULE, sizeof(*bcd2k), &card); bcd2k 389 sound/usb/bcd2000/bcd2000.c bcd2k = card->private_data; bcd2k 390 sound/usb/bcd2000/bcd2000.c bcd2k->dev = interface_to_usbdev(interface); bcd2k 391 sound/usb/bcd2000/bcd2000.c bcd2k->card = card; bcd2k 392 sound/usb/bcd2000/bcd2000.c bcd2k->card_index = card_index; bcd2k 393 sound/usb/bcd2000/bcd2000.c bcd2k->intf = interface; bcd2k 399 sound/usb/bcd2000/bcd2000.c usb_make_path(bcd2k->dev, usb_path, sizeof(usb_path)); bcd2k 400 sound/usb/bcd2000/bcd2000.c snprintf(bcd2k->card->longname, sizeof(bcd2k->card->longname), bcd2k 404 sound/usb/bcd2000/bcd2000.c err = bcd2000_init_midi(bcd2k); bcd2k 412 sound/usb/bcd2000/bcd2000.c usb_set_intfdata(interface, bcd2k); bcd2k 419 sound/usb/bcd2000/bcd2000.c dev_info(&bcd2k->dev->dev, PREFIX "error during probing"); bcd2k 420 sound/usb/bcd2000/bcd2000.c bcd2000_free_usb_related_resources(bcd2k, interface); bcd2k 428 sound/usb/bcd2000/bcd2000.c struct bcd2000 *bcd2k = usb_get_intfdata(interface); bcd2k 430 sound/usb/bcd2000/bcd2000.c if (!bcd2k) bcd2k 436 sound/usb/bcd2000/bcd2000.c snd_card_disconnect(bcd2k->card); bcd2k 438 sound/usb/bcd2000/bcd2000.c bcd2000_free_usb_related_resources(bcd2k, interface); bcd2k 440 sound/usb/bcd2000/bcd2000.c clear_bit(bcd2k->card_index, devices_used); bcd2k 442 sound/usb/bcd2000/bcd2000.c snd_card_free_when_closed(bcd2k->card);