Lines Matching refs:bcd2k
92 struct bcd2000 *bcd2k = substream->rmidi->private_data; in bcd2000_midi_input_trigger() local
93 bcd2k->midi_receive_substream = up ? substream : NULL; in bcd2000_midi_input_trigger()
96 static void bcd2000_midi_handle_input(struct bcd2000 *bcd2k, in bcd2000_midi_handle_input() argument
102 midi_receive_substream = READ_ONCE(bcd2k->midi_receive_substream); in bcd2000_midi_handle_input()
126 static void bcd2000_midi_send(struct bcd2000 *bcd2k) in bcd2000_midi_send() argument
133 midi_out_substream = READ_ONCE(bcd2k->midi_out_substream); in bcd2000_midi_send()
138 memcpy(bcd2k->midi_out_buf, device_cmd_prefix, in bcd2000_midi_send()
146 bcd2k->midi_out_buf + 3, BUFSIZE - 3); in bcd2000_midi_send()
149 dev_err(&bcd2k->dev->dev, "%s: snd_rawmidi_transmit error %d\n", in bcd2000_midi_send()
156 bcd2k->midi_out_buf[2] = len; in bcd2000_midi_send()
157 bcd2k->midi_out_urb->transfer_buffer_length = BUFSIZE; in bcd2000_midi_send()
160 bcd2k->midi_out_buf, len+3); in bcd2000_midi_send()
163 ret = usb_submit_urb(bcd2k->midi_out_urb, GFP_ATOMIC); in bcd2000_midi_send()
165 dev_err(&bcd2k->dev->dev, PREFIX in bcd2000_midi_send()
169 bcd2k->midi_out_active = 1; in bcd2000_midi_send()
179 struct bcd2000 *bcd2k = substream->rmidi->private_data; in bcd2000_midi_output_close() local
181 if (bcd2k->midi_out_active) { in bcd2000_midi_output_close()
182 usb_kill_urb(bcd2k->midi_out_urb); in bcd2000_midi_output_close()
183 bcd2k->midi_out_active = 0; in bcd2000_midi_output_close()
193 struct bcd2000 *bcd2k = substream->rmidi->private_data; in bcd2000_midi_output_trigger() local
196 bcd2k->midi_out_substream = substream; in bcd2000_midi_output_trigger()
198 if (!bcd2k->midi_out_active) in bcd2000_midi_output_trigger()
199 bcd2000_midi_send(bcd2k); in bcd2000_midi_output_trigger()
201 bcd2k->midi_out_substream = NULL; in bcd2000_midi_output_trigger()
207 struct bcd2000 *bcd2k = urb->context; in bcd2000_output_complete() local
209 bcd2k->midi_out_active = 0; in bcd2000_output_complete()
219 bcd2000_midi_send(bcd2k); in bcd2000_output_complete()
225 struct bcd2000 *bcd2k = urb->context; in bcd2000_input_complete() local
231 if (!bcd2k || urb->status == -ESHUTDOWN) in bcd2000_input_complete()
235 bcd2000_midi_handle_input(bcd2k, urb->transfer_buffer, in bcd2000_input_complete()
239 ret = usb_submit_urb(bcd2k->midi_in_urb, GFP_ATOMIC); in bcd2000_input_complete()
241 dev_err(&bcd2k->dev->dev, PREFIX in bcd2000_input_complete()
258 static void bcd2000_init_device(struct bcd2000 *bcd2k) in bcd2000_init_device() argument
262 init_usb_anchor(&bcd2k->anchor); in bcd2000_init_device()
263 usb_anchor_urb(bcd2k->midi_out_urb, &bcd2k->anchor); in bcd2000_init_device()
264 usb_anchor_urb(bcd2k->midi_in_urb, &bcd2k->anchor); in bcd2000_init_device()
267 memcpy(bcd2k->midi_out_buf, bcd2000_init_sequence, 52); in bcd2000_init_device()
268 bcd2k->midi_out_urb->transfer_buffer_length = 52; in bcd2000_init_device()
271 ret = usb_submit_urb(bcd2k->midi_out_urb, GFP_KERNEL); in bcd2000_init_device()
273 dev_err(&bcd2k->dev->dev, PREFIX in bcd2000_init_device()
277 bcd2k->midi_out_active = 1; in bcd2000_init_device()
280 ret = usb_submit_urb(bcd2k->midi_in_urb, GFP_KERNEL); in bcd2000_init_device()
282 dev_err(&bcd2k->dev->dev, PREFIX in bcd2000_init_device()
287 usb_wait_anchor_empty_timeout(&bcd2k->anchor, 1000); in bcd2000_init_device()
290 static int bcd2000_init_midi(struct bcd2000 *bcd2k) in bcd2000_init_midi() argument
295 ret = snd_rawmidi_new(bcd2k->card, bcd2k->card->shortname, 0, in bcd2000_init_midi()
303 strscpy(rmidi->name, bcd2k->card->shortname, sizeof(rmidi->name)); in bcd2000_init_midi()
306 rmidi->private_data = bcd2k; in bcd2000_init_midi()
316 bcd2k->rmidi = rmidi; in bcd2000_init_midi()
318 bcd2k->midi_in_urb = usb_alloc_urb(0, GFP_KERNEL); in bcd2000_init_midi()
319 bcd2k->midi_out_urb = usb_alloc_urb(0, GFP_KERNEL); in bcd2000_init_midi()
321 if (!bcd2k->midi_in_urb || !bcd2k->midi_out_urb) { in bcd2000_init_midi()
322 dev_err(&bcd2k->dev->dev, PREFIX "usb_alloc_urb failed\n"); in bcd2000_init_midi()
326 usb_fill_int_urb(bcd2k->midi_in_urb, bcd2k->dev, in bcd2000_init_midi()
327 usb_rcvintpipe(bcd2k->dev, 0x81), in bcd2000_init_midi()
328 bcd2k->midi_in_buf, BUFSIZE, in bcd2000_init_midi()
329 bcd2000_input_complete, bcd2k, 1); in bcd2000_init_midi()
331 usb_fill_int_urb(bcd2k->midi_out_urb, bcd2k->dev, in bcd2000_init_midi()
332 usb_sndintpipe(bcd2k->dev, 0x1), in bcd2000_init_midi()
333 bcd2k->midi_out_buf, BUFSIZE, in bcd2000_init_midi()
334 bcd2000_output_complete, bcd2k, 1); in bcd2000_init_midi()
337 if (usb_urb_ep_type_check(bcd2k->midi_in_urb) || in bcd2000_init_midi()
338 usb_urb_ep_type_check(bcd2k->midi_out_urb)) { in bcd2000_init_midi()
339 dev_err(&bcd2k->dev->dev, "invalid MIDI EP\n"); in bcd2000_init_midi()
343 bcd2000_init_device(bcd2k); in bcd2000_init_midi()
348 static void bcd2000_free_usb_related_resources(struct bcd2000 *bcd2k, in bcd2000_free_usb_related_resources() argument
351 usb_kill_urb(bcd2k->midi_out_urb); in bcd2000_free_usb_related_resources()
352 usb_kill_urb(bcd2k->midi_in_urb); in bcd2000_free_usb_related_resources()
354 usb_free_urb(bcd2k->midi_out_urb); in bcd2000_free_usb_related_resources()
355 usb_free_urb(bcd2k->midi_in_urb); in bcd2000_free_usb_related_resources()
357 if (bcd2k->intf) { in bcd2000_free_usb_related_resources()
358 usb_set_intfdata(bcd2k->intf, NULL); in bcd2000_free_usb_related_resources()
359 bcd2k->intf = NULL; in bcd2000_free_usb_related_resources()
367 struct bcd2000 *bcd2k; in bcd2000_probe() local
384 THIS_MODULE, sizeof(*bcd2k), &card); in bcd2000_probe()
390 bcd2k = card->private_data; in bcd2000_probe()
391 bcd2k->dev = interface_to_usbdev(interface); in bcd2000_probe()
392 bcd2k->card = card; in bcd2000_probe()
393 bcd2k->card_index = card_index; in bcd2000_probe()
394 bcd2k->intf = interface; in bcd2000_probe()
400 usb_make_path(bcd2k->dev, usb_path, sizeof(usb_path)); in bcd2000_probe()
401 snprintf(bcd2k->card->longname, sizeof(bcd2k->card->longname), in bcd2000_probe()
405 err = bcd2000_init_midi(bcd2k); in bcd2000_probe()
413 usb_set_intfdata(interface, bcd2k); in bcd2000_probe()
420 dev_info(&bcd2k->dev->dev, PREFIX "error during probing"); in bcd2000_probe()
421 bcd2000_free_usb_related_resources(bcd2k, interface); in bcd2000_probe()
429 struct bcd2000 *bcd2k = usb_get_intfdata(interface); in bcd2000_disconnect() local
431 if (!bcd2k) in bcd2000_disconnect()
437 snd_card_disconnect(bcd2k->card); in bcd2000_disconnect()
439 bcd2000_free_usb_related_resources(bcd2k, interface); in bcd2000_disconnect()
441 clear_bit(bcd2k->card_index, devices_used); in bcd2000_disconnect()
443 snd_card_free_when_closed(bcd2k->card); in bcd2000_disconnect()