1
2
3
4
5
6
7
8
9
10
11
12#include <linux/kernel.h>
13#include <linux/module.h>
14#include <linux/slab.h>
15#include <linux/usb.h>
16
17#include "audio.h"
18#include "capture.h"
19#include "driver.h"
20#include "midi.h"
21#include "playback.h"
22#include "pod.h"
23#include "podhd.h"
24#include "revision.h"
25#include "toneport.h"
26#include "usbdefs.h"
27#include "variax.h"
28
29#define DRIVER_AUTHOR "Markus Grabner <grabner@icg.tugraz.at>"
30#define DRIVER_DESC "Line6 USB Driver"
31#define DRIVER_VERSION "0.9.1beta" DRIVER_REVISION
32
33
34static const struct usb_device_id line6_id_table[] = {
35 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_BASSPODXT)},
36 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_BASSPODXTLIVE)},
37 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_BASSPODXTPRO)},
38 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_GUITARPORT)},
39 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_POCKETPOD)},
40 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODHD300)},
41 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODHD400)},
42 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODHD500)},
43 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODSTUDIO_GX)},
44 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODSTUDIO_UX1)},
45 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODSTUDIO_UX2)},
46 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODX3)},
47 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODX3LIVE)},
48 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODXT)},
49 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODXTLIVE)},
50 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODXTPRO)},
51 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_TONEPORT_GX)},
52 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_TONEPORT_UX1)},
53 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_TONEPORT_UX2)},
54 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_VARIAX)},
55 {},
56};
57
58MODULE_DEVICE_TABLE(usb, line6_id_table);
59
60
61static struct line6_properties line6_properties_table[] = {
62 { LINE6_BIT_BASSPODXT, "BassPODxt", "BassPODxt", LINE6_BIT_CONTROL_PCM_HWMON },
63 { LINE6_BIT_BASSPODXTLIVE, "BassPODxtLive", "BassPODxt Live", LINE6_BIT_CONTROL_PCM_HWMON },
64 { LINE6_BIT_BASSPODXTPRO, "BassPODxtPro", "BassPODxt Pro", LINE6_BIT_CONTROL_PCM_HWMON },
65 { LINE6_BIT_GUITARPORT, "GuitarPort", "GuitarPort", LINE6_BIT_PCM },
66 { LINE6_BIT_POCKETPOD, "PocketPOD", "Pocket POD", LINE6_BIT_CONTROL },
67 { LINE6_BIT_PODHD300, "PODHD300", "POD HD300", LINE6_BIT_CONTROL_PCM_HWMON },
68 { LINE6_BIT_PODHD400, "PODHD400", "POD HD400", LINE6_BIT_CONTROL_PCM_HWMON },
69 { LINE6_BIT_PODHD500, "PODHD500", "POD HD500", LINE6_BIT_CONTROL_PCM_HWMON },
70 { LINE6_BIT_PODSTUDIO_GX, "PODStudioGX", "POD Studio GX", LINE6_BIT_PCM },
71 { LINE6_BIT_PODSTUDIO_UX1, "PODStudioUX1", "POD Studio UX1", LINE6_BIT_PCM },
72 { LINE6_BIT_PODSTUDIO_UX2, "PODStudioUX2", "POD Studio UX2", LINE6_BIT_PCM },
73 { LINE6_BIT_PODX3, "PODX3", "POD X3", LINE6_BIT_PCM },
74 { LINE6_BIT_PODX3LIVE, "PODX3Live", "POD X3 Live", LINE6_BIT_PCM },
75 { LINE6_BIT_PODXT, "PODxt", "PODxt", LINE6_BIT_CONTROL_PCM_HWMON },
76 { LINE6_BIT_PODXTLIVE, "PODxtLive", "PODxt Live", LINE6_BIT_CONTROL_PCM_HWMON },
77 { LINE6_BIT_PODXTPRO, "PODxtPro", "PODxt Pro", LINE6_BIT_CONTROL_PCM_HWMON },
78 { LINE6_BIT_TONEPORT_GX, "TonePortGX", "TonePort GX", LINE6_BIT_PCM },
79 { LINE6_BIT_TONEPORT_UX1, "TonePortUX1", "TonePort UX1", LINE6_BIT_PCM },
80 { LINE6_BIT_TONEPORT_UX2, "TonePortUX2", "TonePort UX2", LINE6_BIT_PCM },
81 { LINE6_BIT_VARIAX, "Variax", "Variax Workbench", LINE6_BIT_CONTROL },
82};
83
84
85
86
87
88const unsigned char line6_midi_id[] = {
89 0x00, 0x01, 0x0c
90};
91
92
93
94
95
96static const char line6_request_version[] = {
97 0xf0, 0x7e, 0x7f, 0x06, 0x01, 0xf7
98};
99
100
101
102
103struct message {
104 struct usb_line6 *line6;
105 const char *buffer;
106 int size;
107 int done;
108};
109
110
111
112
113static void line6_data_received(struct urb *urb);
114static int line6_send_raw_message_async_part(struct message *msg,
115 struct urb *urb);
116
117
118
119
120static int line6_start_listen(struct usb_line6 *line6)
121{
122 int err;
123 usb_fill_int_urb(line6->urb_listen, line6->usbdev,
124 usb_rcvintpipe(line6->usbdev, line6->ep_control_read),
125 line6->buffer_listen, LINE6_BUFSIZE_LISTEN,
126 line6_data_received, line6, line6->interval);
127 line6->urb_listen->actual_length = 0;
128 err = usb_submit_urb(line6->urb_listen, GFP_ATOMIC);
129 return err;
130}
131
132
133
134
135static void line6_stop_listen(struct usb_line6 *line6)
136{
137 usb_kill_urb(line6->urb_listen);
138}
139
140
141
142
143int line6_send_raw_message(struct usb_line6 *line6, const char *buffer,
144 int size)
145{
146 int i, done = 0;
147
148 for (i = 0; i < size; i += line6->max_packet_size) {
149 int partial;
150 const char *frag_buf = buffer + i;
151 int frag_size = min(line6->max_packet_size, size - i);
152 int retval;
153
154 retval = usb_interrupt_msg(line6->usbdev,
155 usb_sndintpipe(line6->usbdev,
156 line6->ep_control_write),
157 (char *)frag_buf, frag_size,
158 &partial, LINE6_TIMEOUT * HZ);
159
160 if (retval) {
161 dev_err(line6->ifcdev,
162 "usb_interrupt_msg failed (%d)\n", retval);
163 break;
164 }
165
166 done += frag_size;
167 }
168
169 return done;
170}
171
172
173
174
175static void line6_async_request_sent(struct urb *urb)
176{
177 struct message *msg = (struct message *)urb->context;
178
179 if (msg->done >= msg->size) {
180 usb_free_urb(urb);
181 kfree(msg);
182 } else
183 line6_send_raw_message_async_part(msg, urb);
184}
185
186
187
188
189static int line6_send_raw_message_async_part(struct message *msg,
190 struct urb *urb)
191{
192 int retval;
193 struct usb_line6 *line6 = msg->line6;
194 int done = msg->done;
195 int bytes = min(msg->size - done, line6->max_packet_size);
196
197 usb_fill_int_urb(urb, line6->usbdev,
198 usb_sndintpipe(line6->usbdev, line6->ep_control_write),
199 (char *)msg->buffer + done, bytes,
200 line6_async_request_sent, msg, line6->interval);
201
202 msg->done += bytes;
203 retval = usb_submit_urb(urb, GFP_ATOMIC);
204
205 if (retval < 0) {
206 dev_err(line6->ifcdev, "%s: usb_submit_urb failed (%d)\n",
207 __func__, retval);
208 usb_free_urb(urb);
209 kfree(msg);
210 return retval;
211 }
212
213 return 0;
214}
215
216
217
218
219void line6_start_timer(struct timer_list *timer, unsigned int msecs,
220 void (*function) (unsigned long), unsigned long data)
221{
222 setup_timer(timer, function, data);
223 timer->expires = jiffies + msecs * HZ / 1000;
224 add_timer(timer);
225}
226
227
228
229
230int line6_send_raw_message_async(struct usb_line6 *line6, const char *buffer,
231 int size)
232{
233 struct message *msg;
234 struct urb *urb;
235
236
237 msg = kmalloc(sizeof(struct message), GFP_ATOMIC);
238 if (msg == NULL)
239 return -ENOMEM;
240
241
242 urb = usb_alloc_urb(0, GFP_ATOMIC);
243
244 if (urb == NULL) {
245 kfree(msg);
246 dev_err(line6->ifcdev, "Out of memory\n");
247 return -ENOMEM;
248 }
249
250
251 msg->line6 = line6;
252 msg->buffer = buffer;
253 msg->size = size;
254 msg->done = 0;
255
256
257 return line6_send_raw_message_async_part(msg, urb);
258}
259
260
261
262
263int line6_version_request_async(struct usb_line6 *line6)
264{
265 char *buffer;
266 int retval;
267
268 buffer = kmemdup(line6_request_version,
269 sizeof(line6_request_version), GFP_ATOMIC);
270 if (buffer == NULL) {
271 dev_err(line6->ifcdev, "Out of memory");
272 return -ENOMEM;
273 }
274
275 retval = line6_send_raw_message_async(line6, buffer,
276 sizeof(line6_request_version));
277 kfree(buffer);
278 return retval;
279}
280
281
282
283
284int line6_send_sysex_message(struct usb_line6 *line6, const char *buffer,
285 int size)
286{
287 return line6_send_raw_message(line6, buffer,
288 size + SYSEX_EXTRA_SIZE) -
289 SYSEX_EXTRA_SIZE;
290}
291
292
293
294
295
296
297char *line6_alloc_sysex_buffer(struct usb_line6 *line6, int code1, int code2,
298 int size)
299{
300 char *buffer = kmalloc(size + SYSEX_EXTRA_SIZE, GFP_ATOMIC);
301
302 if (!buffer)
303 return NULL;
304
305 buffer[0] = LINE6_SYSEX_BEGIN;
306 memcpy(buffer + 1, line6_midi_id, sizeof(line6_midi_id));
307 buffer[sizeof(line6_midi_id) + 1] = code1;
308 buffer[sizeof(line6_midi_id) + 2] = code2;
309 buffer[sizeof(line6_midi_id) + 3 + size] = LINE6_SYSEX_END;
310 return buffer;
311}
312
313
314
315
316static void line6_data_received(struct urb *urb)
317{
318 struct usb_line6 *line6 = (struct usb_line6 *)urb->context;
319 struct midi_buffer *mb = &line6->line6midi->midibuf_in;
320 int done;
321
322 if (urb->status == -ESHUTDOWN)
323 return;
324
325 done =
326 line6_midibuf_write(mb, urb->transfer_buffer, urb->actual_length);
327
328 if (done < urb->actual_length) {
329 line6_midibuf_ignore(mb, done);
330 dev_dbg(line6->ifcdev, "%d %d buffer overflow - message skipped\n",
331 done, urb->actual_length);
332 }
333
334 for (;;) {
335 done =
336 line6_midibuf_read(mb, line6->buffer_message,
337 LINE6_MESSAGE_MAXLEN);
338
339 if (done == 0)
340 break;
341
342 line6->message_length = done;
343 line6_midi_receive(line6, line6->buffer_message, done);
344
345 switch (le16_to_cpu(line6->usbdev->descriptor.idProduct)) {
346 case LINE6_DEVID_BASSPODXT:
347 case LINE6_DEVID_BASSPODXTLIVE:
348 case LINE6_DEVID_BASSPODXTPRO:
349 case LINE6_DEVID_PODXT:
350 case LINE6_DEVID_PODXTPRO:
351 case LINE6_DEVID_POCKETPOD:
352 line6_pod_process_message((struct usb_line6_pod *)
353 line6);
354 break;
355
356 case LINE6_DEVID_PODHD300:
357 case LINE6_DEVID_PODHD400:
358 case LINE6_DEVID_PODHD500:
359 break;
360
361 case LINE6_DEVID_PODXTLIVE:
362 switch (line6->interface_number) {
363 case PODXTLIVE_INTERFACE_POD:
364 line6_pod_process_message((struct usb_line6_pod
365 *)line6);
366 break;
367
368 case PODXTLIVE_INTERFACE_VARIAX:
369 line6_variax_process_message((struct
370 usb_line6_variax
371 *)line6);
372 break;
373
374 default:
375 dev_err(line6->ifcdev,
376 "PODxt Live interface %d not supported\n",
377 line6->interface_number);
378 }
379 break;
380
381 case LINE6_DEVID_VARIAX:
382 line6_variax_process_message((struct usb_line6_variax *)
383 line6);
384 break;
385
386 default:
387 MISSING_CASE;
388 }
389 }
390
391 line6_start_listen(line6);
392}
393
394
395
396
397int line6_send_program(struct usb_line6 *line6, u8 value)
398{
399 int retval;
400 unsigned char *buffer;
401 int partial;
402
403 buffer = kmalloc(2, GFP_KERNEL);
404 if (!buffer)
405 return -ENOMEM;
406
407 buffer[0] = LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST;
408 buffer[1] = value;
409
410 retval = usb_interrupt_msg(line6->usbdev,
411 usb_sndintpipe(line6->usbdev,
412 line6->ep_control_write),
413 buffer, 2, &partial, LINE6_TIMEOUT * HZ);
414
415 if (retval)
416 dev_err(line6->ifcdev, "usb_interrupt_msg failed (%d)\n",
417 retval);
418
419 kfree(buffer);
420 return retval;
421}
422
423
424
425
426int line6_transmit_parameter(struct usb_line6 *line6, int param, u8 value)
427{
428 int retval;
429 unsigned char *buffer;
430 int partial;
431
432 buffer = kmalloc(3, GFP_KERNEL);
433 if (!buffer)
434 return -ENOMEM;
435
436 buffer[0] = LINE6_PARAM_CHANGE | LINE6_CHANNEL_HOST;
437 buffer[1] = param;
438 buffer[2] = value;
439
440 retval = usb_interrupt_msg(line6->usbdev,
441 usb_sndintpipe(line6->usbdev,
442 line6->ep_control_write),
443 buffer, 3, &partial, LINE6_TIMEOUT * HZ);
444
445 if (retval)
446 dev_err(line6->ifcdev, "usb_interrupt_msg failed (%d)\n",
447 retval);
448
449 kfree(buffer);
450 return retval;
451}
452
453
454
455
456int line6_read_data(struct usb_line6 *line6, int address, void *data,
457 size_t datalen)
458{
459 struct usb_device *usbdev = line6->usbdev;
460 int ret;
461 unsigned char len;
462
463
464 ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0), 0x67,
465 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
466 (datalen << 8) | 0x21, address,
467 NULL, 0, LINE6_TIMEOUT * HZ);
468
469 if (ret < 0) {
470 dev_err(line6->ifcdev, "read request failed (error %d)\n", ret);
471 return ret;
472 }
473
474
475 do {
476 ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), 0x67,
477 USB_TYPE_VENDOR | USB_RECIP_DEVICE |
478 USB_DIR_IN,
479 0x0012, 0x0000, &len, 1,
480 LINE6_TIMEOUT * HZ);
481 if (ret < 0) {
482 dev_err(line6->ifcdev,
483 "receive length failed (error %d)\n", ret);
484 return ret;
485 }
486 } while (len == 0xff);
487
488 if (len != datalen) {
489
490 dev_err(line6->ifcdev,
491 "length mismatch (expected %d, got %d)\n",
492 (int)datalen, (int)len);
493 return -EINVAL;
494 }
495
496
497 ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), 0x67,
498 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
499 0x0013, 0x0000, data, datalen,
500 LINE6_TIMEOUT * HZ);
501
502 if (ret < 0) {
503 dev_err(line6->ifcdev, "read failed (error %d)\n", ret);
504 return ret;
505 }
506
507 return 0;
508}
509
510
511
512
513int line6_write_data(struct usb_line6 *line6, int address, void *data,
514 size_t datalen)
515{
516 struct usb_device *usbdev = line6->usbdev;
517 int ret;
518 unsigned char status;
519
520 ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0), 0x67,
521 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
522 0x0022, address, data, datalen,
523 LINE6_TIMEOUT * HZ);
524
525 if (ret < 0) {
526 dev_err(line6->ifcdev,
527 "write request failed (error %d)\n", ret);
528 return ret;
529 }
530
531 do {
532 ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0),
533 0x67,
534 USB_TYPE_VENDOR | USB_RECIP_DEVICE |
535 USB_DIR_IN,
536 0x0012, 0x0000,
537 &status, 1, LINE6_TIMEOUT * HZ);
538
539 if (ret < 0) {
540 dev_err(line6->ifcdev,
541 "receiving status failed (error %d)\n", ret);
542 return ret;
543 }
544 } while (status == 0xff);
545
546 if (status != 0) {
547 dev_err(line6->ifcdev, "write failed (error %d)\n", ret);
548 return -EINVAL;
549 }
550
551 return 0;
552}
553
554
555
556
557
558int line6_read_serial_number(struct usb_line6 *line6, int *serial_number)
559{
560 return line6_read_data(line6, 0x80d0, serial_number,
561 sizeof(*serial_number));
562}
563
564
565
566
567ssize_t line6_nop_read(struct device *dev, struct device_attribute *attr,
568 char *buf)
569{
570 return 0;
571}
572
573
574
575
576static void line6_destruct(struct usb_interface *interface)
577{
578 struct usb_line6 *line6;
579
580 if (interface == NULL)
581 return;
582 line6 = usb_get_intfdata(interface);
583 if (line6 == NULL)
584 return;
585
586
587 kfree(line6->buffer_message);
588 kfree(line6->buffer_listen);
589
590
591 usb_free_urb(line6->urb_listen);
592
593
594 usb_set_intfdata(interface, NULL);
595
596
597 kfree(line6);
598}
599
600
601
602
603static int line6_probe(struct usb_interface *interface,
604 const struct usb_device_id *id)
605{
606 int devtype;
607 struct usb_device *usbdev;
608 struct usb_line6 *line6;
609 const struct line6_properties *properties;
610 int interface_number, alternate = 0;
611 int product;
612 int size = 0;
613 int ep_read = 0, ep_write = 0;
614 int ret;
615
616 if (interface == NULL)
617 return -ENODEV;
618 usbdev = interface_to_usbdev(interface);
619 if (usbdev == NULL)
620 return -ENODEV;
621
622
623 if (usbdev->descriptor.bNumConfigurations != 1) {
624 ret = -ENODEV;
625 goto err_put;
626 }
627
628
629 for (devtype = ARRAY_SIZE(line6_id_table) - 1; devtype--;) {
630 u16 idVendor = le16_to_cpu(usbdev->descriptor.idVendor);
631 u16 idProduct = le16_to_cpu(usbdev->descriptor.idProduct);
632
633 if (idVendor == line6_id_table[devtype].idVendor &&
634 idProduct == line6_id_table[devtype].idProduct)
635 break;
636 }
637
638 if (devtype < 0) {
639 ret = -ENODEV;
640 goto err_put;
641 }
642
643
644 properties = &line6_properties_table[devtype];
645 dev_info(&interface->dev, "Line6 %s found\n", properties->name);
646 product = le16_to_cpu(usbdev->descriptor.idProduct);
647
648
649 interface_number = interface->cur_altsetting->desc.bInterfaceNumber;
650
651 switch (product) {
652 case LINE6_DEVID_BASSPODXTLIVE:
653 case LINE6_DEVID_PODXTLIVE:
654 case LINE6_DEVID_VARIAX:
655 alternate = 1;
656 break;
657
658 case LINE6_DEVID_POCKETPOD:
659 switch (interface_number) {
660 case 0:
661 return 0;
662 case 1:
663 alternate = 0;
664 break;
665 default:
666 MISSING_CASE;
667 }
668 break;
669
670 case LINE6_DEVID_PODHD500:
671 case LINE6_DEVID_PODX3:
672 case LINE6_DEVID_PODX3LIVE:
673 switch (interface_number) {
674 case 0:
675 alternate = 1;
676 break;
677 case 1:
678 alternate = 0;
679 break;
680 default:
681 MISSING_CASE;
682 }
683 break;
684
685 case LINE6_DEVID_BASSPODXT:
686 case LINE6_DEVID_BASSPODXTPRO:
687 case LINE6_DEVID_PODXT:
688 case LINE6_DEVID_PODXTPRO:
689 case LINE6_DEVID_PODHD300:
690 case LINE6_DEVID_PODHD400:
691 alternate = 5;
692 break;
693
694 case LINE6_DEVID_GUITARPORT:
695 case LINE6_DEVID_PODSTUDIO_GX:
696 case LINE6_DEVID_PODSTUDIO_UX1:
697 case LINE6_DEVID_TONEPORT_GX:
698 case LINE6_DEVID_TONEPORT_UX1:
699 alternate = 2;
700 break;
701
702 case LINE6_DEVID_TONEPORT_UX2:
703 case LINE6_DEVID_PODSTUDIO_UX2:
704 switch (interface_number) {
705 case 0:
706
707 alternate = 2;
708 break;
709 case 1:
710
711
712
713
714 return -ENODEV;
715 default:
716 MISSING_CASE;
717 }
718 break;
719
720 default:
721 MISSING_CASE;
722 ret = -ENODEV;
723 goto err_put;
724 }
725
726 ret = usb_set_interface(usbdev, interface_number, alternate);
727 if (ret < 0) {
728 dev_err(&interface->dev, "set_interface failed\n");
729 goto err_put;
730 }
731
732
733 switch (product) {
734 case LINE6_DEVID_BASSPODXT:
735 case LINE6_DEVID_BASSPODXTLIVE:
736 case LINE6_DEVID_BASSPODXTPRO:
737 case LINE6_DEVID_PODXT:
738 case LINE6_DEVID_PODXTPRO:
739 size = sizeof(struct usb_line6_pod);
740 ep_read = 0x84;
741 ep_write = 0x03;
742 break;
743
744 case LINE6_DEVID_PODHD300:
745 case LINE6_DEVID_PODHD400:
746 size = sizeof(struct usb_line6_podhd);
747 ep_read = 0x84;
748 ep_write = 0x03;
749 break;
750
751 case LINE6_DEVID_PODHD500:
752 size = sizeof(struct usb_line6_podhd);
753 ep_read = 0x81;
754 ep_write = 0x01;
755 break;
756
757 case LINE6_DEVID_POCKETPOD:
758 size = sizeof(struct usb_line6_pod);
759 ep_read = 0x82;
760 ep_write = 0x02;
761 break;
762
763 case LINE6_DEVID_PODX3:
764 case LINE6_DEVID_PODX3LIVE:
765
766 size = sizeof(struct usb_line6_pod);
767 ep_read = 0x81;
768 ep_write = 0x01;
769 break;
770
771 case LINE6_DEVID_PODSTUDIO_GX:
772 case LINE6_DEVID_PODSTUDIO_UX1:
773 case LINE6_DEVID_PODSTUDIO_UX2:
774 case LINE6_DEVID_TONEPORT_GX:
775 case LINE6_DEVID_TONEPORT_UX1:
776 case LINE6_DEVID_TONEPORT_UX2:
777 case LINE6_DEVID_GUITARPORT:
778 size = sizeof(struct usb_line6_toneport);
779
780 break;
781
782 case LINE6_DEVID_PODXTLIVE:
783 switch (interface_number) {
784 case PODXTLIVE_INTERFACE_POD:
785 size = sizeof(struct usb_line6_pod);
786 ep_read = 0x84;
787 ep_write = 0x03;
788 break;
789
790 case PODXTLIVE_INTERFACE_VARIAX:
791 size = sizeof(struct usb_line6_variax);
792 ep_read = 0x86;
793 ep_write = 0x05;
794 break;
795
796 default:
797 ret = -ENODEV;
798 goto err_put;
799 }
800 break;
801
802 case LINE6_DEVID_VARIAX:
803 size = sizeof(struct usb_line6_variax);
804 ep_read = 0x82;
805 ep_write = 0x01;
806 break;
807
808 default:
809 MISSING_CASE;
810 ret = -ENODEV;
811 goto err_put;
812 }
813
814 if (size == 0) {
815 dev_err(&interface->dev,
816 "driver bug: interface data size not set\n");
817 ret = -ENODEV;
818 goto err_put;
819 }
820
821 line6 = kzalloc(size, GFP_KERNEL);
822 if (line6 == NULL) {
823 ret = -ENODEV;
824 goto err_put;
825 }
826
827
828 line6->interface_number = interface_number;
829 line6->properties = properties;
830 line6->usbdev = usbdev;
831 line6->ifcdev = &interface->dev;
832 line6->ep_control_read = ep_read;
833 line6->ep_control_write = ep_write;
834 line6->product = product;
835
836
837 {
838 struct usb_host_endpoint *ep;
839 unsigned epnum =
840 usb_pipeendpoint(usb_rcvintpipe(usbdev, ep_read));
841 ep = usbdev->ep_in[epnum];
842
843 if (ep != NULL) {
844 line6->interval = ep->desc.bInterval;
845 line6->max_packet_size =
846 le16_to_cpu(ep->desc.wMaxPacketSize);
847 } else {
848 line6->interval = LINE6_FALLBACK_INTERVAL;
849 line6->max_packet_size = LINE6_FALLBACK_MAXPACKETSIZE;
850 dev_err(line6->ifcdev,
851 "endpoint not available, using fallback values");
852 }
853 }
854
855 usb_set_intfdata(interface, line6);
856
857 if (properties->capabilities & LINE6_BIT_CONTROL) {
858
859 line6->buffer_listen =
860 kmalloc(LINE6_BUFSIZE_LISTEN, GFP_KERNEL);
861 if (line6->buffer_listen == NULL) {
862 ret = -ENOMEM;
863 goto err_destruct;
864 }
865
866 line6->buffer_message =
867 kmalloc(LINE6_MESSAGE_MAXLEN, GFP_KERNEL);
868 if (line6->buffer_message == NULL) {
869 ret = -ENOMEM;
870 goto err_destruct;
871 }
872
873 line6->urb_listen = usb_alloc_urb(0, GFP_KERNEL);
874
875 if (line6->urb_listen == NULL) {
876 dev_err(&interface->dev, "Out of memory\n");
877 line6_destruct(interface);
878 ret = -ENOMEM;
879 goto err_destruct;
880 }
881
882 ret = line6_start_listen(line6);
883 if (ret < 0) {
884 dev_err(&interface->dev, "%s: usb_submit_urb failed\n",
885 __func__);
886 goto err_destruct;
887 }
888 }
889
890
891 switch (product) {
892 case LINE6_DEVID_BASSPODXT:
893 case LINE6_DEVID_BASSPODXTLIVE:
894 case LINE6_DEVID_BASSPODXTPRO:
895 case LINE6_DEVID_POCKETPOD:
896 case LINE6_DEVID_PODX3:
897 case LINE6_DEVID_PODX3LIVE:
898 case LINE6_DEVID_PODXT:
899 case LINE6_DEVID_PODXTPRO:
900 ret = line6_pod_init(interface, (struct usb_line6_pod *)line6);
901 break;
902
903 case LINE6_DEVID_PODHD300:
904 case LINE6_DEVID_PODHD400:
905 case LINE6_DEVID_PODHD500:
906 ret = line6_podhd_init(interface,
907 (struct usb_line6_podhd *)line6);
908 break;
909
910 case LINE6_DEVID_PODXTLIVE:
911 switch (interface_number) {
912 case PODXTLIVE_INTERFACE_POD:
913 ret =
914 line6_pod_init(interface,
915 (struct usb_line6_pod *)line6);
916 break;
917
918 case PODXTLIVE_INTERFACE_VARIAX:
919 ret =
920 line6_variax_init(interface,
921 (struct usb_line6_variax *)line6);
922 break;
923
924 default:
925 dev_err(&interface->dev,
926 "PODxt Live interface %d not supported\n",
927 interface_number);
928 ret = -ENODEV;
929 }
930
931 break;
932
933 case LINE6_DEVID_VARIAX:
934 ret =
935 line6_variax_init(interface,
936 (struct usb_line6_variax *)line6);
937 break;
938
939 case LINE6_DEVID_PODSTUDIO_GX:
940 case LINE6_DEVID_PODSTUDIO_UX1:
941 case LINE6_DEVID_PODSTUDIO_UX2:
942 case LINE6_DEVID_TONEPORT_GX:
943 case LINE6_DEVID_TONEPORT_UX1:
944 case LINE6_DEVID_TONEPORT_UX2:
945 case LINE6_DEVID_GUITARPORT:
946 ret =
947 line6_toneport_init(interface,
948 (struct usb_line6_toneport *)line6);
949 break;
950
951 default:
952 MISSING_CASE;
953 ret = -ENODEV;
954 }
955
956 if (ret < 0)
957 goto err_destruct;
958
959 ret = sysfs_create_link(&interface->dev.kobj, &usbdev->dev.kobj,
960 "usb_device");
961 if (ret < 0)
962 goto err_destruct;
963
964
965
966 dev_info(&interface->dev, "Line6 %s now attached\n",
967 line6->properties->name);
968
969 switch (product) {
970 case LINE6_DEVID_PODX3:
971 case LINE6_DEVID_PODX3LIVE:
972 dev_info(&interface->dev,
973 "NOTE: the Line6 %s is detected, but not yet supported\n",
974 line6->properties->name);
975 }
976
977
978 usb_get_intf(interface);
979 usb_get_dev(usbdev);
980
981 return 0;
982
983err_destruct:
984 line6_destruct(interface);
985err_put:
986 return ret;
987}
988
989
990
991
992static void line6_disconnect(struct usb_interface *interface)
993{
994 struct usb_line6 *line6;
995 struct usb_device *usbdev;
996 int interface_number;
997
998 if (interface == NULL)
999 return;
1000 usbdev = interface_to_usbdev(interface);
1001 if (usbdev == NULL)
1002 return;
1003
1004
1005
1006 sysfs_remove_link(&interface->dev.kobj, "usb_device");
1007
1008 interface_number = interface->cur_altsetting->desc.bInterfaceNumber;
1009 line6 = usb_get_intfdata(interface);
1010
1011 if (line6 != NULL) {
1012 if (line6->urb_listen != NULL)
1013 line6_stop_listen(line6);
1014
1015 if (usbdev != line6->usbdev)
1016 dev_err(line6->ifcdev,
1017 "driver bug: inconsistent usb device\n");
1018
1019 switch (le16_to_cpu(line6->usbdev->descriptor.idProduct)) {
1020 case LINE6_DEVID_BASSPODXT:
1021 case LINE6_DEVID_BASSPODXTLIVE:
1022 case LINE6_DEVID_BASSPODXTPRO:
1023 case LINE6_DEVID_POCKETPOD:
1024 case LINE6_DEVID_PODX3:
1025 case LINE6_DEVID_PODX3LIVE:
1026 case LINE6_DEVID_PODXT:
1027 case LINE6_DEVID_PODXTPRO:
1028 line6_pod_disconnect(interface);
1029 break;
1030
1031 case LINE6_DEVID_PODHD300:
1032 case LINE6_DEVID_PODHD400:
1033 case LINE6_DEVID_PODHD500:
1034 line6_podhd_disconnect(interface);
1035 break;
1036
1037 case LINE6_DEVID_PODXTLIVE:
1038 switch (interface_number) {
1039 case PODXTLIVE_INTERFACE_POD:
1040 line6_pod_disconnect(interface);
1041 break;
1042
1043 case PODXTLIVE_INTERFACE_VARIAX:
1044 line6_variax_disconnect(interface);
1045 break;
1046 }
1047
1048 break;
1049
1050 case LINE6_DEVID_VARIAX:
1051 line6_variax_disconnect(interface);
1052 break;
1053
1054 case LINE6_DEVID_PODSTUDIO_GX:
1055 case LINE6_DEVID_PODSTUDIO_UX1:
1056 case LINE6_DEVID_PODSTUDIO_UX2:
1057 case LINE6_DEVID_TONEPORT_GX:
1058 case LINE6_DEVID_TONEPORT_UX1:
1059 case LINE6_DEVID_TONEPORT_UX2:
1060 case LINE6_DEVID_GUITARPORT:
1061 line6_toneport_disconnect(interface);
1062 break;
1063
1064 default:
1065 MISSING_CASE;
1066 }
1067
1068 dev_info(&interface->dev, "Line6 %s now disconnected\n",
1069 line6->properties->name);
1070 }
1071
1072 line6_destruct(interface);
1073
1074
1075 usb_put_intf(interface);
1076 usb_put_dev(usbdev);
1077}
1078
1079#ifdef CONFIG_PM
1080
1081
1082
1083
1084static int line6_suspend(struct usb_interface *interface, pm_message_t message)
1085{
1086 struct usb_line6 *line6 = usb_get_intfdata(interface);
1087 struct snd_line6_pcm *line6pcm = line6->line6pcm;
1088
1089 snd_power_change_state(line6->card, SNDRV_CTL_POWER_D3hot);
1090
1091 if (line6->properties->capabilities & LINE6_BIT_CONTROL)
1092 line6_stop_listen(line6);
1093
1094 if (line6pcm != NULL) {
1095 snd_pcm_suspend_all(line6pcm->pcm);
1096 line6_pcm_disconnect(line6pcm);
1097 line6pcm->flags = 0;
1098 }
1099
1100 return 0;
1101}
1102
1103
1104
1105
1106static int line6_resume(struct usb_interface *interface)
1107{
1108 struct usb_line6 *line6 = usb_get_intfdata(interface);
1109
1110 if (line6->properties->capabilities & LINE6_BIT_CONTROL)
1111 line6_start_listen(line6);
1112
1113 snd_power_change_state(line6->card, SNDRV_CTL_POWER_D0);
1114 return 0;
1115}
1116
1117
1118
1119
1120static int line6_reset_resume(struct usb_interface *interface)
1121{
1122 struct usb_line6 *line6 = usb_get_intfdata(interface);
1123
1124 switch (le16_to_cpu(line6->usbdev->descriptor.idProduct)) {
1125 case LINE6_DEVID_PODSTUDIO_GX:
1126 case LINE6_DEVID_PODSTUDIO_UX1:
1127 case LINE6_DEVID_PODSTUDIO_UX2:
1128 case LINE6_DEVID_TONEPORT_GX:
1129 case LINE6_DEVID_TONEPORT_UX1:
1130 case LINE6_DEVID_TONEPORT_UX2:
1131 case LINE6_DEVID_GUITARPORT:
1132 line6_toneport_reset_resume((struct usb_line6_toneport *)line6);
1133 }
1134
1135 return line6_resume(interface);
1136}
1137
1138#endif
1139
1140static struct usb_driver line6_driver = {
1141 .name = DRIVER_NAME,
1142 .probe = line6_probe,
1143 .disconnect = line6_disconnect,
1144#ifdef CONFIG_PM
1145 .suspend = line6_suspend,
1146 .resume = line6_resume,
1147 .reset_resume = line6_reset_resume,
1148#endif
1149 .id_table = line6_id_table,
1150};
1151
1152module_usb_driver(line6_driver);
1153
1154MODULE_AUTHOR(DRIVER_AUTHOR);
1155MODULE_DESCRIPTION(DRIVER_DESC);
1156MODULE_LICENSE("GPL");
1157MODULE_VERSION(DRIVER_VERSION);
1158