Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v3.14 1157 lines 28 kB view raw
1/* 2 * Line6 Linux USB driver - 0.9.1beta 3 * 4 * Copyright (C) 2004-2010 Markus Grabner (grabner@icg.tugraz.at) 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License as 8 * published by the Free Software Foundation, version 2. 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/* table of devices that work with this driver */ 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/* *INDENT-OFF* */ 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/* *INDENT-ON* */ 84 85/* 86 This is Line6's MIDI manufacturer ID. 87*/ 88const unsigned char line6_midi_id[] = { 89 0x00, 0x01, 0x0c 90}; 91 92/* 93 Code to request version of POD, Variax interface 94 (and maybe other devices). 95*/ 96static const char line6_request_version[] = { 97 0xf0, 0x7e, 0x7f, 0x06, 0x01, 0xf7 98}; 99 100/** 101 Class for asynchronous messages. 102*/ 103struct message { 104 struct usb_line6 *line6; 105 const char *buffer; 106 int size; 107 int done; 108}; 109 110/* 111 Forward declarations. 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 Start to listen on endpoint. 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 Stop listening on endpoint. 134*/ 135static void line6_stop_listen(struct usb_line6 *line6) 136{ 137 usb_kill_urb(line6->urb_listen); 138} 139 140/* 141 Send raw message in pieces of wMaxPacketSize bytes. 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 Notification of completion of asynchronous request transmission. 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 Asynchronously send part of a raw message. 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 Setup and start timer. 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 Asynchronously send raw message. 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 /* create message: */ 237 msg = kmalloc(sizeof(struct message), GFP_ATOMIC); 238 if (msg == NULL) 239 return -ENOMEM; 240 241 /* create URB: */ 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 /* set message data: */ 251 msg->line6 = line6; 252 msg->buffer = buffer; 253 msg->size = size; 254 msg->done = 0; 255 256 /* start sending: */ 257 return line6_send_raw_message_async_part(msg, urb); 258} 259 260/* 261 Send asynchronous device version request. 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 Send sysex message in pieces of wMaxPacketSize bytes. 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 Allocate buffer for sysex message and prepare header. 294 @param code sysex message code 295 @param size number of bytes between code and sysex end 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 Notification of data received from the Line6 device. 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; /* let userspace handle MIDI */ 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 Send channel number (i.e., switch to a different sound). 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 Transmit Line6 control parameter. 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 Read data from device. 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 /* query the serial number: */ 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 /* Wait for data length. We'll get 0xff until length arrives. */ 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 /* should be equal or something went wrong */ 490 dev_err(line6->ifcdev, 491 "length mismatch (expected %d, got %d)\n", 492 (int)datalen, (int)len); 493 return -EINVAL; 494 } 495 496 /* receive the result: */ 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 Write data to device. 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 Read Line6 device serial number. 556 (POD, TonePort, GuitarPort) 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 No operation (i.e., unsupported). 566*/ 567ssize_t line6_nop_read(struct device *dev, struct device_attribute *attr, 568 char *buf) 569{ 570 return 0; 571} 572 573/* 574 Generic destructor. 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 /* free buffer memory first: */ 587 kfree(line6->buffer_message); 588 kfree(line6->buffer_listen); 589 590 /* then free URBs: */ 591 usb_free_urb(line6->urb_listen); 592 593 /* make sure the device isn't destructed twice: */ 594 usb_set_intfdata(interface, NULL); 595 596 /* free interface data: */ 597 kfree(line6); 598} 599 600/* 601 Probe USB device. 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 /* we don't handle multiple configurations */ 623 if (usbdev->descriptor.bNumConfigurations != 1) { 624 ret = -ENODEV; 625 goto err_put; 626 } 627 628 /* check vendor and product id */ 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 /* initialize device info: */ 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 /* query interface number */ 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; /* this interface has no endpoints */ 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; /* 1..4 seem to be ok */ 700 break; 701 702 case LINE6_DEVID_TONEPORT_UX2: 703 case LINE6_DEVID_PODSTUDIO_UX2: 704 switch (interface_number) { 705 case 0: 706 /* defaults to 44.1kHz, 16-bit */ 707 alternate = 2; 708 break; 709 case 1: 710 /* don't know yet what this is ... 711 alternate = 1; 712 break; 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 /* initialize device data based on product id: */ 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 /* currently unused! */ 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 /* these don't have a control channel */ 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 /* store basic data: */ 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 /* get data from endpoint descriptor (see usb_maxpacket): */ 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 /* initialize USB buffers: */ 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 /* initialize device data based on product id: */ 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 /* creation of additional special files should go here */ 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 /* increment reference counters: */ 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 Line6 device disconnected. 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 /* removal of additional special files should go here */ 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 /* decrement reference counters: */ 1075 usb_put_intf(interface); 1076 usb_put_dev(usbdev); 1077} 1078 1079#ifdef CONFIG_PM 1080 1081/* 1082 Suspend Line6 device. 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 Resume Line6 device. 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 Resume Line6 device after reset. 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 /* CONFIG_PM */ 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);