Commit 4c6fb5fc050a4430363d92994132fffa6776c9d4
Committed by
Greg Kroah-Hartman
1 parent
3b35de4126
Exists in
master
and in
6 other branches
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
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 |