325 lines
12 KiB
Diff
325 lines
12 KiB
Diff
From: Markus Grabner <grabner@icg.tugraz.at>
|
|
Date: Mon, 5 Dec 2011 23:51:53 +0100
|
|
Subject: [011/106] staging/line6: refactor device information and add POD HD
|
|
500
|
|
|
|
commit 4c6fb5fc050a4430363d92994132fffa6776c9d4 upstream.
|
|
|
|
This patch refactors the device information code and adds preliminary support for the POD HD 500 device.
|
|
|
|
Signed-off-by: Markus Grabner <grabner@icg.tugraz.at>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
---
|
|
drivers/staging/line6/driver.c | 50 +++++++++++++--------
|
|
drivers/staging/line6/driver.h | 10 ++---
|
|
drivers/staging/line6/midi.c | 16 ++++++-
|
|
drivers/staging/line6/pcm.c | 1 +
|
|
drivers/staging/line6/usbdefs.h | 93 ++++++++++++++++++++++++---------------
|
|
5 files changed, 109 insertions(+), 61 deletions(-)
|
|
|
|
diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
|
|
index a2f48ee..6a1959e 100644
|
|
--- a/drivers/staging/line6/driver.c
|
|
+++ b/drivers/staging/line6/driver.c
|
|
@@ -38,6 +38,8 @@ static const struct usb_device_id line6_id_table[] = {
|
|
{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_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)},
|
|
@@ -50,7 +52,6 @@ static const struct usb_device_id line6_id_table[] = {
|
|
{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)},
|
|
- {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODHD300)},
|
|
{},
|
|
};
|
|
|
|
@@ -58,24 +59,25 @@ MODULE_DEVICE_TABLE(usb, line6_id_table);
|
|
|
|
/* *INDENT-OFF* */
|
|
static struct line6_properties line6_properties_table[] = {
|
|
- { "BassPODxt", "BassPODxt", LINE6_BIT_BASSPODXT, LINE6_BIT_CONTROL_PCM_HWMON },
|
|
- { "BassPODxtLive", "BassPODxt Live", LINE6_BIT_BASSPODXTLIVE, LINE6_BIT_CONTROL_PCM_HWMON },
|
|
- { "BassPODxtPro", "BassPODxt Pro", LINE6_BIT_BASSPODXTPRO, LINE6_BIT_CONTROL_PCM_HWMON },
|
|
- { "GuitarPort", "GuitarPort", LINE6_BIT_GUITARPORT, LINE6_BIT_PCM },
|
|
- { "PocketPOD", "Pocket POD", LINE6_BIT_POCKETPOD, LINE6_BIT_CONTROL },
|
|
- { "PODStudioGX", "POD Studio GX", LINE6_BIT_PODSTUDIO_GX, LINE6_BIT_PCM },
|
|
- { "PODStudioUX1", "POD Studio UX1", LINE6_BIT_PODSTUDIO_UX1, LINE6_BIT_PCM },
|
|
- { "PODStudioUX2", "POD Studio UX2", LINE6_BIT_PODSTUDIO_UX2, LINE6_BIT_PCM },
|
|
- { "PODX3", "POD X3", LINE6_BIT_PODX3, LINE6_BIT_PCM },
|
|
- { "PODX3Live", "POD X3 Live", LINE6_BIT_PODX3LIVE, LINE6_BIT_PCM },
|
|
- { "PODxt", "PODxt", LINE6_BIT_PODXT, LINE6_BIT_CONTROL_PCM_HWMON },
|
|
- { "PODxtLive", "PODxt Live", LINE6_BIT_PODXTLIVE, LINE6_BIT_CONTROL_PCM_HWMON },
|
|
- { "PODxtPro", "PODxt Pro", LINE6_BIT_PODXTPRO, LINE6_BIT_CONTROL_PCM_HWMON },
|
|
- { "TonePortGX", "TonePort GX", LINE6_BIT_TONEPORT_GX, LINE6_BIT_PCM },
|
|
- { "TonePortUX1", "TonePort UX1", LINE6_BIT_TONEPORT_UX1, LINE6_BIT_PCM },
|
|
- { "TonePortUX2", "TonePort UX2", LINE6_BIT_TONEPORT_UX2, LINE6_BIT_PCM },
|
|
- { "Variax", "Variax Workbench", LINE6_BIT_VARIAX, LINE6_BIT_CONTROL },
|
|
- { "PODHD300", "POD HD300", LINE6_BIT_PODHD300, LINE6_BIT_CONTROL_PCM_HWMON },
|
|
+ { LINE6_BIT_BASSPODXT, "BassPODxt", "BassPODxt", LINE6_BIT_CONTROL_PCM_HWMON },
|
|
+ { LINE6_BIT_BASSPODXTLIVE, "BassPODxtLive", "BassPODxt Live", LINE6_BIT_CONTROL_PCM_HWMON },
|
|
+ { LINE6_BIT_BASSPODXTPRO, "BassPODxtPro", "BassPODxt Pro", LINE6_BIT_CONTROL_PCM_HWMON },
|
|
+ { LINE6_BIT_GUITARPORT, "GuitarPort", "GuitarPort", LINE6_BIT_PCM },
|
|
+ { LINE6_BIT_POCKETPOD, "PocketPOD", "Pocket POD", LINE6_BIT_CONTROL },
|
|
+ { LINE6_BIT_PODHD300, "PODHD300", "POD HD300", LINE6_BIT_CONTROL_PCM_HWMON },
|
|
+ { LINE6_BIT_PODHD500, "PODHD500", "POD HD500", LINE6_BIT_CONTROL_PCM_HWMON },
|
|
+ { LINE6_BIT_PODSTUDIO_GX, "PODStudioGX", "POD Studio GX", LINE6_BIT_PCM },
|
|
+ { LINE6_BIT_PODSTUDIO_UX1, "PODStudioUX1", "POD Studio UX1", LINE6_BIT_PCM },
|
|
+ { LINE6_BIT_PODSTUDIO_UX2, "PODStudioUX2", "POD Studio UX2", LINE6_BIT_PCM },
|
|
+ { LINE6_BIT_PODX3, "PODX3", "POD X3", LINE6_BIT_PCM },
|
|
+ { LINE6_BIT_PODX3LIVE, "PODX3Live", "POD X3 Live", LINE6_BIT_PCM },
|
|
+ { LINE6_BIT_PODXT, "PODxt", "PODxt", LINE6_BIT_CONTROL_PCM_HWMON },
|
|
+ { LINE6_BIT_PODXTLIVE, "PODxtLive", "PODxt Live", LINE6_BIT_CONTROL_PCM_HWMON },
|
|
+ { LINE6_BIT_PODXTPRO, "PODxtPro", "PODxt Pro", LINE6_BIT_CONTROL_PCM_HWMON },
|
|
+ { LINE6_BIT_TONEPORT_GX, "TonePortGX", "TonePort GX", LINE6_BIT_PCM },
|
|
+ { LINE6_BIT_TONEPORT_UX1, "TonePortUX1", "TonePort UX1", LINE6_BIT_PCM },
|
|
+ { LINE6_BIT_TONEPORT_UX2, "TonePortUX2", "TonePort UX2", LINE6_BIT_PCM },
|
|
+ { LINE6_BIT_VARIAX, "Variax", "Variax Workbench", LINE6_BIT_CONTROL },
|
|
};
|
|
/* *INDENT-ON* */
|
|
|
|
@@ -441,6 +443,7 @@ static void line6_data_received(struct urb *urb)
|
|
break;
|
|
|
|
case LINE6_DEVID_PODHD300:
|
|
+ case LINE6_DEVID_PODHD500:
|
|
break; /* let userspace handle MIDI */
|
|
|
|
case LINE6_DEVID_PODXTLIVE:
|
|
@@ -800,6 +803,7 @@ static int line6_probe(struct usb_interface *interface,
|
|
}
|
|
break;
|
|
|
|
+ case LINE6_DEVID_PODHD500:
|
|
case LINE6_DEVID_PODX3:
|
|
case LINE6_DEVID_PODX3LIVE:
|
|
switch (interface_number) {
|
|
@@ -878,6 +882,12 @@ static int line6_probe(struct usb_interface *interface,
|
|
ep_write = 0x03;
|
|
break;
|
|
|
|
+ case LINE6_DEVID_PODHD500:
|
|
+ size = sizeof(struct usb_line6_podhd);
|
|
+ ep_read = 0x81;
|
|
+ ep_write = 0x01;
|
|
+ break;
|
|
+
|
|
case LINE6_DEVID_POCKETPOD:
|
|
size = sizeof(struct usb_line6_pod);
|
|
ep_read = 0x82;
|
|
@@ -1031,6 +1041,7 @@ static int line6_probe(struct usb_interface *interface,
|
|
break;
|
|
|
|
case LINE6_DEVID_PODHD300:
|
|
+ case LINE6_DEVID_PODHD500:
|
|
ret = line6_podhd_init(interface,
|
|
(struct usb_line6_podhd *)line6);
|
|
break;
|
|
@@ -1158,6 +1169,7 @@ static void line6_disconnect(struct usb_interface *interface)
|
|
break;
|
|
|
|
case LINE6_DEVID_PODHD300:
|
|
+ case LINE6_DEVID_PODHD500:
|
|
line6_podhd_disconnect(interface);
|
|
break;
|
|
|
|
diff --git a/drivers/staging/line6/driver.h b/drivers/staging/line6/driver.h
|
|
index 553192f..117bf99 100644
|
|
--- a/drivers/staging/line6/driver.h
|
|
+++ b/drivers/staging/line6/driver.h
|
|
@@ -88,6 +88,11 @@ static const int SYSEX_EXTRA_SIZE = sizeof(line6_midi_id) + 4;
|
|
*/
|
|
struct line6_properties {
|
|
/**
|
|
+ Bit identifying this device in the line6usb driver.
|
|
+ */
|
|
+ int device_bit;
|
|
+
|
|
+ /**
|
|
Card id string (maximum 16 characters).
|
|
This can be used to address the device in ALSA programs as
|
|
"default:CARD=<id>"
|
|
@@ -100,11 +105,6 @@ struct line6_properties {
|
|
const char *name;
|
|
|
|
/**
|
|
- Bit identifying this device in the line6usb driver.
|
|
- */
|
|
- int device_bit;
|
|
-
|
|
- /**
|
|
Bit vector defining this device's capabilities in the
|
|
line6usb driver.
|
|
*/
|
|
diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c
|
|
index 3013fb5..13d0293 100644
|
|
--- a/drivers/staging/line6/midi.c
|
|
+++ b/drivers/staging/line6/midi.c
|
|
@@ -173,6 +173,7 @@ static int send_midi_async(struct usb_line6 *line6, unsigned char *data,
|
|
|
|
case LINE6_DEVID_VARIAX:
|
|
case LINE6_DEVID_PODHD300:
|
|
+ case LINE6_DEVID_PODHD500:
|
|
break;
|
|
|
|
default:
|
|
@@ -404,8 +405,19 @@ int line6_init_midi(struct usb_line6 *line6)
|
|
}
|
|
|
|
line6midi->line6 = line6;
|
|
- line6midi->midi_mask_transmit = 1;
|
|
- line6midi->midi_mask_receive = 4;
|
|
+
|
|
+ switch(line6->product) {
|
|
+ case LINE6_DEVID_PODHD300:
|
|
+ case LINE6_DEVID_PODHD500:
|
|
+ line6midi->midi_mask_transmit = 1;
|
|
+ line6midi->midi_mask_receive = 1;
|
|
+ break;
|
|
+
|
|
+ default:
|
|
+ line6midi->midi_mask_transmit = 1;
|
|
+ line6midi->midi_mask_receive = 4;
|
|
+ }
|
|
+
|
|
line6->line6midi = line6midi;
|
|
|
|
err = snd_device_new(line6->card, SNDRV_DEV_RAWMIDI, line6midi,
|
|
diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c
|
|
index a70c087..c3e5002 100644
|
|
--- a/drivers/staging/line6/pcm.c
|
|
+++ b/drivers/staging/line6/pcm.c
|
|
@@ -367,6 +367,7 @@ int line6_init_pcm(struct usb_line6 *line6,
|
|
ep_write = 0x01;
|
|
break;
|
|
|
|
+ case LINE6_DEVID_PODHD500:
|
|
case LINE6_DEVID_PODX3:
|
|
case LINE6_DEVID_PODX3LIVE:
|
|
ep_read = 0x86;
|
|
diff --git a/drivers/staging/line6/usbdefs.h b/drivers/staging/line6/usbdefs.h
|
|
index 4e13364..aff9e5c 100644
|
|
--- a/drivers/staging/line6/usbdefs.h
|
|
+++ b/drivers/staging/line6/usbdefs.h
|
|
@@ -24,6 +24,8 @@
|
|
#define LINE6_DEVID_BASSPODXTPRO 0x4252
|
|
#define LINE6_DEVID_GUITARPORT 0x4750
|
|
#define LINE6_DEVID_POCKETPOD 0x5051
|
|
+#define LINE6_DEVID_PODHD300 0x5057
|
|
+#define LINE6_DEVID_PODHD500 0x414D
|
|
#define LINE6_DEVID_PODSTUDIO_GX 0x4153
|
|
#define LINE6_DEVID_PODSTUDIO_UX1 0x4150
|
|
#define LINE6_DEVID_PODSTUDIO_UX2 0x4151
|
|
@@ -36,51 +38,72 @@
|
|
#define LINE6_DEVID_TONEPORT_UX1 0x4141
|
|
#define LINE6_DEVID_TONEPORT_UX2 0x4142
|
|
#define LINE6_DEVID_VARIAX 0x534d
|
|
-#define LINE6_DEVID_PODHD300 0x5057
|
|
|
|
-#define LINE6_BIT_BASSPODXT (1 << 0)
|
|
-#define LINE6_BIT_BASSPODXTLIVE (1 << 1)
|
|
-#define LINE6_BIT_BASSPODXTPRO (1 << 2)
|
|
-#define LINE6_BIT_GUITARPORT (1 << 3)
|
|
-#define LINE6_BIT_POCKETPOD (1 << 4)
|
|
-#define LINE6_BIT_PODSTUDIO_GX (1 << 5)
|
|
-#define LINE6_BIT_PODSTUDIO_UX1 (1 << 6)
|
|
-#define LINE6_BIT_PODSTUDIO_UX2 (1 << 7)
|
|
-#define LINE6_BIT_PODX3 (1 << 8)
|
|
-#define LINE6_BIT_PODX3LIVE (1 << 9)
|
|
-#define LINE6_BIT_PODXT (1 << 10)
|
|
-#define LINE6_BIT_PODXTLIVE (1 << 11)
|
|
-#define LINE6_BIT_PODXTPRO (1 << 12)
|
|
-#define LINE6_BIT_TONEPORT_GX (1 << 13)
|
|
-#define LINE6_BIT_TONEPORT_UX1 (1 << 14)
|
|
-#define LINE6_BIT_TONEPORT_UX2 (1 << 15)
|
|
-#define LINE6_BIT_VARIAX (1 << 16)
|
|
-#define LINE6_BIT_PODHD300 (1 << 17)
|
|
+enum {
|
|
+ LINE6_ID_BASSPODXT,
|
|
+ LINE6_ID_BASSPODXTLIVE,
|
|
+ LINE6_ID_BASSPODXTPRO,
|
|
+ LINE6_ID_GUITARPORT,
|
|
+ LINE6_ID_POCKETPOD,
|
|
+ LINE6_ID_PODHD300,
|
|
+ LINE6_ID_PODHD500,
|
|
+ LINE6_ID_PODSTUDIO_GX,
|
|
+ LINE6_ID_PODSTUDIO_UX1,
|
|
+ LINE6_ID_PODSTUDIO_UX2,
|
|
+ LINE6_ID_PODX3,
|
|
+ LINE6_ID_PODX3LIVE,
|
|
+ LINE6_ID_PODXT,
|
|
+ LINE6_ID_PODXTLIVE,
|
|
+ LINE6_ID_PODXTPRO,
|
|
+ LINE6_ID_TONEPORT_GX,
|
|
+ LINE6_ID_TONEPORT_UX1,
|
|
+ LINE6_ID_TONEPORT_UX2,
|
|
+ LINE6_ID_VARIAX
|
|
+};
|
|
+
|
|
+#define LINE6_BIT(x) LINE6_BIT_ ## x = 1 << LINE6_ID_ ## x
|
|
+
|
|
+enum {
|
|
+ LINE6_BIT(BASSPODXT),
|
|
+ LINE6_BIT(BASSPODXTLIVE),
|
|
+ LINE6_BIT(BASSPODXTPRO),
|
|
+ LINE6_BIT(GUITARPORT),
|
|
+ LINE6_BIT(POCKETPOD),
|
|
+ LINE6_BIT(PODHD300),
|
|
+ LINE6_BIT(PODHD500),
|
|
+ LINE6_BIT(PODSTUDIO_GX),
|
|
+ LINE6_BIT(PODSTUDIO_UX1),
|
|
+ LINE6_BIT(PODSTUDIO_UX2),
|
|
+ LINE6_BIT(PODX3),
|
|
+ LINE6_BIT(PODX3LIVE),
|
|
+ LINE6_BIT(PODXT),
|
|
+ LINE6_BIT(PODXTLIVE),
|
|
+ LINE6_BIT(PODXTPRO),
|
|
+ LINE6_BIT(TONEPORT_GX),
|
|
+ LINE6_BIT(TONEPORT_UX1),
|
|
+ LINE6_BIT(TONEPORT_UX2),
|
|
+ LINE6_BIT(VARIAX),
|
|
|
|
-#define LINE6_BITS_PRO (LINE6_BIT_BASSPODXTPRO | \
|
|
- LINE6_BIT_PODXTPRO)
|
|
-#define LINE6_BITS_LIVE (LINE6_BIT_BASSPODXTLIVE | \
|
|
- LINE6_BIT_PODXTLIVE | \
|
|
- LINE6_BIT_PODX3LIVE)
|
|
-#define LINE6_BITS_PODXTALL (LINE6_BIT_PODXT | \
|
|
- LINE6_BIT_PODXTLIVE | \
|
|
- LINE6_BIT_PODXTPRO)
|
|
-#define LINE6_BITS_BASSPODXTALL (LINE6_BIT_BASSPODXT | \
|
|
- LINE6_BIT_BASSPODXTLIVE | \
|
|
- LINE6_BIT_BASSPODXTPRO)
|
|
+ LINE6_BITS_PRO = LINE6_BIT_BASSPODXTPRO | LINE6_BIT_PODXTPRO,
|
|
+ LINE6_BITS_LIVE = LINE6_BIT_BASSPODXTLIVE | LINE6_BIT_PODXTLIVE | LINE6_BIT_PODX3LIVE,
|
|
+ LINE6_BITS_PODXTALL = LINE6_BIT_PODXT | LINE6_BIT_PODXTLIVE | LINE6_BIT_PODXTPRO,
|
|
+ LINE6_BITS_PODX3ALL = LINE6_BIT_PODX3 | LINE6_BIT_PODX3LIVE,
|
|
+ LINE6_BITS_PODHDALL = LINE6_BIT_PODHD300 | LINE6_BIT_PODHD500,
|
|
+ LINE6_BITS_BASSPODXTALL = LINE6_BIT_BASSPODXT | LINE6_BIT_BASSPODXTLIVE | LINE6_BIT_BASSPODXTPRO
|
|
+};
|
|
|
|
/* device supports settings parameter via USB */
|
|
-#define LINE6_BIT_CONTROL (1 << 0)
|
|
+#define LINE6_BIT_CONTROL (1 << 0)
|
|
/* device supports PCM input/output via USB */
|
|
-#define LINE6_BIT_PCM (1 << 1)
|
|
+#define LINE6_BIT_PCM (1 << 1)
|
|
/* device support hardware monitoring */
|
|
-#define LINE6_BIT_HWMON (1 << 2)
|
|
+#define LINE6_BIT_HWMON (1 << 2)
|
|
|
|
#define LINE6_BIT_CONTROL_PCM_HWMON (LINE6_BIT_CONTROL | \
|
|
LINE6_BIT_PCM | \
|
|
LINE6_BIT_HWMON)
|
|
|
|
-#define LINE6_FALLBACK_INTERVAL 10
|
|
-#define LINE6_FALLBACK_MAXPACKETSIZE 16
|
|
+#define LINE6_FALLBACK_INTERVAL 10
|
|
+#define LINE6_FALLBACK_MAXPACKETSIZE 16
|
|
|
|
#endif
|