/*
* Line6 Linux USB driver - 0.9.1beta
*
* Copyright (C) 2004-2010 Markus Grabner (grabner@icg.tugraz.at)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, version 2.
*
*/
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/usb.h>
#include "audio.h"
#include "capture.h"
#include "driver.h"
#include "midi.h"
#include "playback.h"
#include "pod.h"
#include "podhd.h"
#include "revision.h"
#include "toneport.h"
#include "usbdefs.h"
#include "variax.h"
#define DRIVER_AUTHOR "Markus Grabner <grabner@icg.tugraz.at>"
#define DRIVER_DESC "Line6 USB Driver"
#define DRIVER_VERSION "0.9.1beta" DRIVER_REVISION
/* table of devices that work with this driver */
static const struct usb_device_id line6_id_table[] = {
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_BASSPODXT)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_BASSPODXTLIVE)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_BASSPODXTPRO)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_GUITARPORT)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_POCKETPOD)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODHD300)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODHD400)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODHD500)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODSTUDIO_GX)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODSTUDIO_UX1)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODSTUDIO_UX2)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODX3)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODX3LIVE)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODXT)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODXTLIVE)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODXTPRO)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_TONEPORT_GX)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_TONEPORT_UX1)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_TONEPORT_UX2)},
{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_VARIAX)},
{},
};
MODULE_DEVICE_TABLE(usb, line6_id_table);
#define L6PROP(dev_bit, dev_id, dev_name, dev_cap)\
{.device_bit = LINE6_BIT_##dev_bit, .id = dev_id,\
.name = dev_name, .capabilities = LINE6_BIT_##dev_cap}
/* *INDENT-OFF* */
static const struct line6_properties line6_properties_table[] = {
L6PROP(BASSPODXT, "BassPODxt", "BassPODxt", CTRL_PCM_HW),
L6PROP(BASSPODXTLIVE, "BassPODxtLive", "BassPODxt Live", CTRL_PCM_HW),
L6PROP(BASSPODXTPRO, "BassPODxtPro", "BassPODxt Pro", CTRL_PCM_HW),
L6PROP(GUITARPORT, "GuitarPort", "GuitarPort", PCM),
L6PROP(POCKETPOD, "PocketPOD", "Pocket POD", CONTROL),
L6PROP(PODHD300, "PODHD300", "POD HD300", CTRL_PCM_HW),
L6PROP(PODHD400, "PODHD400", "POD HD400", CTRL_PCM_HW),
L6PROP(PODHD500, "PODHD500", "POD HD500", CTRL_PCM_HW),
L6PROP(PODSTUDIO_GX, "PODStudioGX", "POD Studio GX", PCM),
L6PROP(PODSTUDIO_UX1, "PODStudioUX1", "POD Studio UX1", PCM),
L6PROP(PODSTUDIO_UX2, "PODStudioUX2", "POD Studio UX2", PCM),
L6PROP(PODX3, "PODX3", "POD X3", PCM),
L6PROP(PODX3LIVE, "PODX3Live", "POD X3 Live", PCM),
L6PROP(PODXT, "PODxt", "PODxt", CTRL_PCM_HW),
L6PROP(PODXTLIVE, "PODxtLive", "PODxt Live", CTRL_PCM_HW),
L6PROP(PODXTPRO, "PODxtPro", "PODxt Pro", CTRL_PCM_HW),
L6PROP(TONEPORT_GX, "TonePortGX", "TonePort GX", PCM),
L6PROP(TONEPORT_UX1, "TonePortUX1", "TonePort UX1", PCM),
L6PROP(TONEPORT_UX2, "TonePortUX2", "TonePort UX2", PCM),
L6PROP(VARIAX, "Variax", "Variax Workbench", CONTROL),
};
/* *