Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Markus Grabner and committed by
Greg Kroah-Hartman
4c6fb5fc 3b35de41

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