Commit 4c6fb5fc050a4430363d92994132fffa6776c9d4

Authored by Markus Grabner
Committed by Greg Kroah-Hartman
1 parent 3b35de4126

staging/line6: refactor device information and add POD HD 500

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>

Showing 5 changed files with 109 additions and 61 deletions Side-by-side Diff

drivers/staging/line6/driver.c
... ... @@ -38,6 +38,8 @@
38 38 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_BASSPODXTPRO)},
39 39 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_GUITARPORT)},
40 40 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_POCKETPOD)},
  41 + {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODHD300)},
  42 + {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODHD500)},
41 43 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODSTUDIO_GX)},
42 44 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODSTUDIO_UX1)},
43 45 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODSTUDIO_UX2)},
... ... @@ -50,7 +52,6 @@
50 52 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_TONEPORT_UX1)},
51 53 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_TONEPORT_UX2)},
52 54 {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_VARIAX)},
53   - {USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODHD300)},
54 55 {},
55 56 };
56 57  
... ... @@ -58,24 +59,25 @@
58 59  
59 60 /* *INDENT-OFF* */
60 61 static struct line6_properties line6_properties_table[] = {
61   - { "BassPODxt", "BassPODxt", LINE6_BIT_BASSPODXT, LINE6_BIT_CONTROL_PCM_HWMON },
62   - { "BassPODxtLive", "BassPODxt Live", LINE6_BIT_BASSPODXTLIVE, LINE6_BIT_CONTROL_PCM_HWMON },
63   - { "BassPODxtPro", "BassPODxt Pro", LINE6_BIT_BASSPODXTPRO, LINE6_BIT_CONTROL_PCM_HWMON },
64   - { "GuitarPort", "GuitarPort", LINE6_BIT_GUITARPORT, LINE6_BIT_PCM },
65   - { "PocketPOD", "Pocket POD", LINE6_BIT_POCKETPOD, LINE6_BIT_CONTROL },
66   - { "PODStudioGX", "POD Studio GX", LINE6_BIT_PODSTUDIO_GX, LINE6_BIT_PCM },
67   - { "PODStudioUX1", "POD Studio UX1", LINE6_BIT_PODSTUDIO_UX1, LINE6_BIT_PCM },
68   - { "PODStudioUX2", "POD Studio UX2", LINE6_BIT_PODSTUDIO_UX2, LINE6_BIT_PCM },
69   - { "PODX3", "POD X3", LINE6_BIT_PODX3, LINE6_BIT_PCM },
70   - { "PODX3Live", "POD X3 Live", LINE6_BIT_PODX3LIVE, LINE6_BIT_PCM },
71   - { "PODxt", "PODxt", LINE6_BIT_PODXT, LINE6_BIT_CONTROL_PCM_HWMON },
72   - { "PODxtLive", "PODxt Live", LINE6_BIT_PODXTLIVE, LINE6_BIT_CONTROL_PCM_HWMON },
73   - { "PODxtPro", "PODxt Pro", LINE6_BIT_PODXTPRO, LINE6_BIT_CONTROL_PCM_HWMON },
74   - { "TonePortGX", "TonePort GX", LINE6_BIT_TONEPORT_GX, LINE6_BIT_PCM },
75   - { "TonePortUX1", "TonePort UX1", LINE6_BIT_TONEPORT_UX1, LINE6_BIT_PCM },
76   - { "TonePortUX2", "TonePort UX2", LINE6_BIT_TONEPORT_UX2, LINE6_BIT_PCM },
77   - { "Variax", "Variax Workbench", LINE6_BIT_VARIAX, LINE6_BIT_CONTROL },
78   - { "PODHD300", "POD HD300", LINE6_BIT_PODHD300, LINE6_BIT_CONTROL_PCM_HWMON },
  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_PODHD500, "PODHD500", "POD HD500", LINE6_BIT_CONTROL_PCM_HWMON },
  69 + { LINE6_BIT_PODSTUDIO_GX, "PODStudioGX", "POD Studio GX", LINE6_BIT_PCM },
  70 + { LINE6_BIT_PODSTUDIO_UX1, "PODStudioUX1", "POD Studio UX1", LINE6_BIT_PCM },
  71 + { LINE6_BIT_PODSTUDIO_UX2, "PODStudioUX2", "POD Studio UX2", LINE6_BIT_PCM },
  72 + { LINE6_BIT_PODX3, "PODX3", "POD X3", LINE6_BIT_PCM },
  73 + { LINE6_BIT_PODX3LIVE, "PODX3Live", "POD X3 Live", LINE6_BIT_PCM },
  74 + { LINE6_BIT_PODXT, "PODxt", "PODxt", LINE6_BIT_CONTROL_PCM_HWMON },
  75 + { LINE6_BIT_PODXTLIVE, "PODxtLive", "PODxt Live", LINE6_BIT_CONTROL_PCM_HWMON },
  76 + { LINE6_BIT_PODXTPRO, "PODxtPro", "PODxt Pro", LINE6_BIT_CONTROL_PCM_HWMON },
  77 + { LINE6_BIT_TONEPORT_GX, "TonePortGX", "TonePort GX", LINE6_BIT_PCM },
  78 + { LINE6_BIT_TONEPORT_UX1, "TonePortUX1", "TonePort UX1", LINE6_BIT_PCM },
  79 + { LINE6_BIT_TONEPORT_UX2, "TonePortUX2", "TonePort UX2", LINE6_BIT_PCM },
  80 + { LINE6_BIT_VARIAX, "Variax", "Variax Workbench", LINE6_BIT_CONTROL },
79 81 };
80 82 /* *INDENT-ON* */
81 83  
... ... @@ -441,6 +443,7 @@
441 443 break;
442 444  
443 445 case LINE6_DEVID_PODHD300:
  446 + case LINE6_DEVID_PODHD500:
444 447 break; /* let userspace handle MIDI */
445 448  
446 449 case LINE6_DEVID_PODXTLIVE:
... ... @@ -800,6 +803,7 @@
800 803 }
801 804 break;
802 805  
  806 + case LINE6_DEVID_PODHD500:
803 807 case LINE6_DEVID_PODX3:
804 808 case LINE6_DEVID_PODX3LIVE:
805 809 switch (interface_number) {
... ... @@ -878,6 +882,12 @@
878 882 ep_write = 0x03;
879 883 break;
880 884  
  885 + case LINE6_DEVID_PODHD500:
  886 + size = sizeof(struct usb_line6_podhd);
  887 + ep_read = 0x81;
  888 + ep_write = 0x01;
  889 + break;
  890 +
881 891 case LINE6_DEVID_POCKETPOD:
882 892 size = sizeof(struct usb_line6_pod);
883 893 ep_read = 0x82;
... ... @@ -1031,6 +1041,7 @@
1031 1041 break;
1032 1042  
1033 1043 case LINE6_DEVID_PODHD300:
  1044 + case LINE6_DEVID_PODHD500:
1034 1045 ret = line6_podhd_init(interface,
1035 1046 (struct usb_line6_podhd *)line6);
1036 1047 break;
... ... @@ -1158,6 +1169,7 @@
1158 1169 break;
1159 1170  
1160 1171 case LINE6_DEVID_PODHD300:
  1172 + case LINE6_DEVID_PODHD500:
1161 1173 line6_podhd_disconnect(interface);
1162 1174 break;
1163 1175  
drivers/staging/line6/driver.h
... ... @@ -88,6 +88,11 @@
88 88 */
89 89 struct line6_properties {
90 90 /**
  91 + Bit identifying this device in the line6usb driver.
  92 + */
  93 + int device_bit;
  94 +
  95 + /**
91 96 Card id string (maximum 16 characters).
92 97 This can be used to address the device in ALSA programs as
93 98 "default:CARD=<id>"
... ... @@ -98,11 +103,6 @@
98 103 Card short name (maximum 32 characters).
99 104 */
100 105 const char *name;
101   -
102   - /**
103   - Bit identifying this device in the line6usb driver.
104   - */
105   - int device_bit;
106 106  
107 107 /**
108 108 Bit vector defining this device's capabilities in the
drivers/staging/line6/midi.c
... ... @@ -173,6 +173,7 @@
173 173  
174 174 case LINE6_DEVID_VARIAX:
175 175 case LINE6_DEVID_PODHD300:
  176 + case LINE6_DEVID_PODHD500:
176 177 break;
177 178  
178 179 default:
... ... @@ -404,8 +405,19 @@
404 405 }
405 406  
406 407 line6midi->line6 = line6;
407   - line6midi->midi_mask_transmit = 1;
408   - line6midi->midi_mask_receive = 4;
  408 +
  409 + switch(line6->product) {
  410 + case LINE6_DEVID_PODHD300:
  411 + case LINE6_DEVID_PODHD500:
  412 + line6midi->midi_mask_transmit = 1;
  413 + line6midi->midi_mask_receive = 1;
  414 + break;
  415 +
  416 + default:
  417 + line6midi->midi_mask_transmit = 1;
  418 + line6midi->midi_mask_receive = 4;
  419 + }
  420 +
409 421 line6->line6midi = line6midi;
410 422  
411 423 err = snd_device_new(line6->card, SNDRV_DEV_RAWMIDI, line6midi,
drivers/staging/line6/pcm.c
... ... @@ -367,6 +367,7 @@
367 367 ep_write = 0x01;
368 368 break;
369 369  
  370 + case LINE6_DEVID_PODHD500:
370 371 case LINE6_DEVID_PODX3:
371 372 case LINE6_DEVID_PODX3LIVE:
372 373 ep_read = 0x86;
drivers/staging/line6/usbdefs.h
... ... @@ -24,6 +24,8 @@
24 24 #define LINE6_DEVID_BASSPODXTPRO 0x4252
25 25 #define LINE6_DEVID_GUITARPORT 0x4750
26 26 #define LINE6_DEVID_POCKETPOD 0x5051
  27 +#define LINE6_DEVID_PODHD300 0x5057
  28 +#define LINE6_DEVID_PODHD500 0x414D
27 29 #define LINE6_DEVID_PODSTUDIO_GX 0x4153
28 30 #define LINE6_DEVID_PODSTUDIO_UX1 0x4150
29 31 #define LINE6_DEVID_PODSTUDIO_UX2 0x4151
30 32  
31 33  
32 34  
33 35  
34 36  
35 37  
36 38  
... ... @@ -36,52 +38,73 @@
36 38 #define LINE6_DEVID_TONEPORT_UX1 0x4141
37 39 #define LINE6_DEVID_TONEPORT_UX2 0x4142
38 40 #define LINE6_DEVID_VARIAX 0x534d
39   -#define LINE6_DEVID_PODHD300 0x5057
40 41  
41   -#define LINE6_BIT_BASSPODXT (1 << 0)
42   -#define LINE6_BIT_BASSPODXTLIVE (1 << 1)
43   -#define LINE6_BIT_BASSPODXTPRO (1 << 2)
44   -#define LINE6_BIT_GUITARPORT (1 << 3)
45   -#define LINE6_BIT_POCKETPOD (1 << 4)
46   -#define LINE6_BIT_PODSTUDIO_GX (1 << 5)
47   -#define LINE6_BIT_PODSTUDIO_UX1 (1 << 6)
48   -#define LINE6_BIT_PODSTUDIO_UX2 (1 << 7)
49   -#define LINE6_BIT_PODX3 (1 << 8)
50   -#define LINE6_BIT_PODX3LIVE (1 << 9)
51   -#define LINE6_BIT_PODXT (1 << 10)
52   -#define LINE6_BIT_PODXTLIVE (1 << 11)
53   -#define LINE6_BIT_PODXTPRO (1 << 12)
54   -#define LINE6_BIT_TONEPORT_GX (1 << 13)
55   -#define LINE6_BIT_TONEPORT_UX1 (1 << 14)
56   -#define LINE6_BIT_TONEPORT_UX2 (1 << 15)
57   -#define LINE6_BIT_VARIAX (1 << 16)
58   -#define LINE6_BIT_PODHD300 (1 << 17)
  42 +enum {
  43 + LINE6_ID_BASSPODXT,
  44 + LINE6_ID_BASSPODXTLIVE,
  45 + LINE6_ID_BASSPODXTPRO,
  46 + LINE6_ID_GUITARPORT,
  47 + LINE6_ID_POCKETPOD,
  48 + LINE6_ID_PODHD300,
  49 + LINE6_ID_PODHD500,
  50 + LINE6_ID_PODSTUDIO_GX,
  51 + LINE6_ID_PODSTUDIO_UX1,
  52 + LINE6_ID_PODSTUDIO_UX2,
  53 + LINE6_ID_PODX3,
  54 + LINE6_ID_PODX3LIVE,
  55 + LINE6_ID_PODXT,
  56 + LINE6_ID_PODXTLIVE,
  57 + LINE6_ID_PODXTPRO,
  58 + LINE6_ID_TONEPORT_GX,
  59 + LINE6_ID_TONEPORT_UX1,
  60 + LINE6_ID_TONEPORT_UX2,
  61 + LINE6_ID_VARIAX
  62 +};
59 63  
60   -#define LINE6_BITS_PRO (LINE6_BIT_BASSPODXTPRO | \
61   - LINE6_BIT_PODXTPRO)
62   -#define LINE6_BITS_LIVE (LINE6_BIT_BASSPODXTLIVE | \
63   - LINE6_BIT_PODXTLIVE | \
64   - LINE6_BIT_PODX3LIVE)
65   -#define LINE6_BITS_PODXTALL (LINE6_BIT_PODXT | \
66   - LINE6_BIT_PODXTLIVE | \
67   - LINE6_BIT_PODXTPRO)
68   -#define LINE6_BITS_BASSPODXTALL (LINE6_BIT_BASSPODXT | \
69   - LINE6_BIT_BASSPODXTLIVE | \
70   - LINE6_BIT_BASSPODXTPRO)
  64 +#define LINE6_BIT(x) LINE6_BIT_ ## x = 1 << LINE6_ID_ ## x
71 65  
  66 +enum {
  67 + LINE6_BIT(BASSPODXT),
  68 + LINE6_BIT(BASSPODXTLIVE),
  69 + LINE6_BIT(BASSPODXTPRO),
  70 + LINE6_BIT(GUITARPORT),
  71 + LINE6_BIT(POCKETPOD),
  72 + LINE6_BIT(PODHD300),
  73 + LINE6_BIT(PODHD500),
  74 + LINE6_BIT(PODSTUDIO_GX),
  75 + LINE6_BIT(PODSTUDIO_UX1),
  76 + LINE6_BIT(PODSTUDIO_UX2),
  77 + LINE6_BIT(PODX3),
  78 + LINE6_BIT(PODX3LIVE),
  79 + LINE6_BIT(PODXT),
  80 + LINE6_BIT(PODXTLIVE),
  81 + LINE6_BIT(PODXTPRO),
  82 + LINE6_BIT(TONEPORT_GX),
  83 + LINE6_BIT(TONEPORT_UX1),
  84 + LINE6_BIT(TONEPORT_UX2),
  85 + LINE6_BIT(VARIAX),
  86 +
  87 + LINE6_BITS_PRO = LINE6_BIT_BASSPODXTPRO | LINE6_BIT_PODXTPRO,
  88 + LINE6_BITS_LIVE = LINE6_BIT_BASSPODXTLIVE | LINE6_BIT_PODXTLIVE | LINE6_BIT_PODX3LIVE,
  89 + LINE6_BITS_PODXTALL = LINE6_BIT_PODXT | LINE6_BIT_PODXTLIVE | LINE6_BIT_PODXTPRO,
  90 + LINE6_BITS_PODX3ALL = LINE6_BIT_PODX3 | LINE6_BIT_PODX3LIVE,
  91 + LINE6_BITS_PODHDALL = LINE6_BIT_PODHD300 | LINE6_BIT_PODHD500,
  92 + LINE6_BITS_BASSPODXTALL = LINE6_BIT_BASSPODXT | LINE6_BIT_BASSPODXTLIVE | LINE6_BIT_BASSPODXTPRO
  93 +};
  94 +
72 95 /* device supports settings parameter via USB */
73   -#define LINE6_BIT_CONTROL (1 << 0)
  96 +#define LINE6_BIT_CONTROL (1 << 0)
74 97 /* device supports PCM input/output via USB */
75   -#define LINE6_BIT_PCM (1 << 1)
  98 +#define LINE6_BIT_PCM (1 << 1)
76 99 /* device support hardware monitoring */
77   -#define LINE6_BIT_HWMON (1 << 2)
  100 +#define LINE6_BIT_HWMON (1 << 2)
78 101  
79 102 #define LINE6_BIT_CONTROL_PCM_HWMON (LINE6_BIT_CONTROL | \
80 103 LINE6_BIT_PCM | \
81 104 LINE6_BIT_HWMON)
82 105  
83   -#define LINE6_FALLBACK_INTERVAL 10
84   -#define LINE6_FALLBACK_MAXPACKETSIZE 16
  106 +#define LINE6_FALLBACK_INTERVAL 10
  107 +#define LINE6_FALLBACK_MAXPACKETSIZE 16
85 108  
86 109 #endif