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