From e7ef137d7c5257c47a9c011c35cf5058c4ad6ff9 Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Sun, 10 Feb 2013 00:54:43 +0000 Subject: [PATCH] [x86] sound: Enable LINE6_USB as module (Closes: #700211) Apply upstream changes up to Linux 3.8-rc1, since they include many important bug fixes and also remove a fair amount of crap. svn path=/dists/sid/linux/; revision=19798 --- debian/changelog | 2 + debian/config/kernelarch-x86/config | 7 + ...-fix-memory-leaks-in-line6_init_midi.patch | 41 + ...-staging-line6-add-Pod-HD300-support.patch | 354 +++++ ...d-missing-MIDI-postprocessing-case-f.patch | 31 + ...ine6-use-smallest-iso-ep-packet-size.patch | 44 + ...loc-free-buffers-in-hw_params-hw_fre.patch | 161 ++ ...e-kmemdup-rather-than-duplicating-it.patch | 42 + ...ng-line6-NULL-dereference-in-dev_err.patch | 43 + ...di.c-Fixed-call-of-obsolete-function.patch | 50 + ...di.c-Fixed-call-of-obsolete-function.patch | 51 + ...0-staging-line6-Remove-obsolete-code.patch | 106 ++ ...factor-device-information-and-add-PO.patch | 324 ++++ ...-line6-fix-memory-leak-in-.hw_params.patch | 53 + ...x-playback-urb-transfer-buffer-calcu.patch | 37 + ...eliminate-useless-index_out-variable.patch | 58 + ...-line6-eliminate-useless-NULL-checks.patch | 101 ++ ...6-wait-for-urbs-in-snd_line6_prepare.patch | 51 + ...ing-line6-fixed-ALSA-PCM-interaction.patch | 346 +++++ ...-staging-line6-removed-obsolete-code.patch | 30 + ...e-source-select-control-for-UX2-devi.patch | 36 + ...parate-handling-of-buffer-allocation.patch | 893 +++++++++++ ...line6-remove-unneeded-initialization.patch | 37 + ...ly-allocate-a-buffer-if-it-is-needed.patch | 103 ++ ...move-teardown-code-from-module_exit-.patch | 49 + ...-Staging-line6-use-module_usb_driver.patch | 52 + ...ng-line6-toneport.c-remove-err-usage.patch | 30 + ...dibuf.c-changed-printk-KERN_DEBUG-.-.patch | 29 + ...di.c-Added-space-between-switch-and-.patch | 28 + ...e6-pcm.c-Removed-trailing-whitespace.patch | 27 + ...ne6-config.h-Remove-CHECKPOINT-macro.patch | 30 + ...-line6-config.h-Delete-unused-header.patch | 64 + ...anged-interface-of-line6_transmit_pa.patch | 42 + ...anged-some-strict_strtouls-to-kstrto.patch | 45 + ...anged-interface-of-line6_pod_transmi.patch | 42 + ...justed-interface-of-line6_send_progr.patch | 41 + ...hanged-interface-of-pod_send_channel.patch | 28 + ...ntrol.c-eliminate-strict_strtoul-in-.patch | 34 + ...changed-strict_strtoul-with-kstrtou8.patch | 33 + ...anged-strict_strtoul-to-kstrtou8-in-.patch | 33 + ...anged-strict_strtoul-to-kstrtou8-in-.patch | 33 + ...m.c-Changed-simple_strtoul-to-kstrto.patch | 34 + ...riax.c-Eliminated-remaining-strict_s.patch | 46 + ...ine6-drop-unused-line6_devices-array.patch | 102 ++ ...op-unused-line6_index-and-line6_id-a.patch | 44 + ...ine6-wrap-80-char-lines-in-capture.c.patch | 57 + ...x-quoted-string-across-lines-in-midi.patch | 35 + ...orten-comment-below-80-chars-in-pcm..patch | 34 + ...e6-drop-trailing-whitespace-in-pcm.h.patch | 25 + ...wrap-lines-to-80-chars-in-playback.c.patch | 80 + ...place-deprecated-strict_strtol-in-to.patch | 52 + ...-wrap-lines-to-80-chars-in-usbdefs.h.patch | 35 + ...wrap-comment-to-80-chars-in-variax.c.patch | 27 + ...-replace-DEBUG_MESSAGES-with-dev_dbg.patch | 174 +++ ...ne6-drop-unused-DEBUG_MESSAGES-macro.patch | 32 + ...6-drop-unused-CONFIG_LINE6_USB_DEBUG.patch | 35 + ...-line6-drop-control-URB-dumping-code.patch | 117 ++ ...op-CONTROL-from-CONFIG_LINE6_USB_DUM.patch | 29 + ...op-unused-CONFIG_LINE6_USB_DUMP_CTRL.patch | 32 + ...staging-line6-drop-MIDI-dumping-code.patch | 46 + ...op-MIDI-from-CONFIG_LINE6_USB_DUMP_A.patch | 28 + ...op-unused-CONFIG_LINE6_USB_DUMP_MIDI.patch | 32 + ...taging-line6-drop-channel-sysfs-attr.patch | 133 ++ ...2-staging-line6-drop-clip-sysfs-attr.patch | 105 ++ ...line6-drop-unused-param_dirty-bitmap.patch | 88 ++ ...-staging-line6-drop-dirty-sysfs-attr.patch | 107 ++ ...5-staging-line6-drop-dump-sysfs-attr.patch | 121 ++ ...aging-line6-drop-dump_buf-sysfs-attr.patch | 84 ++ ...-line6-drop-monitor_level-sysfs-attr.patch | 75 + ...ange-monitor_level-type-ValueWait-in.patch | 74 + ...9-staging-line6-drop-name-sysfs-attr.patch | 59 + ...aging-line6-drop-name_buf-sysfs-attr.patch | 87 ++ ...6-drop-retrieve_amp_setup-sysfs-attr.patch | 58 + ...ne6-drop-retrieve_channel-sysfs-attr.patch | 58 + ...op-retrieve_effects_setup-sysfs-attr.patch | 99 ++ ...ine6-drop-store_amp_setup-sysfs-attr.patch | 58 + ...-line6-drop-store_channel-sysfs-attr.patch | 58 + ...-drop-store_effects_setup-sysfs-attr.patch | 119 ++ ...taging-line6-drop-routing-sysfs-attr.patch | 94 ++ ...ing-line6-drop-tuner_freq-sysfs-attr.patch | 83 + ...ing-line6-drop-tuner_note-sysfs-attr.patch | 82 + ...ing-line6-drop-tuner_mute-sysfs-attr.patch | 118 ++ ...ng-line6-drop-tuner_pitch-sysfs-attr.patch | 220 +++ ...staging-line6-drop-finish-sysfs-attr.patch | 65 + ...ne6-drop-midi_postprocess-sysfs-attr.patch | 80 + ...staging-line6-drop-midi_mask_receive.patch | 133 ++ ...taging-line6-drop-midi_mask_transmit.patch | 128 ++ ...ing-line6-drop-midi_postprocess-flag.patch | 126 ++ ...ging-line6-drop-pod.c-raw-sysfs-attr.patch | 55 + ...ing-line6-drop-tuner-param-filtering.patch | 64 + ...g-line6-drop-variax-model-sysfs-attr.patch | 106 ++ ...-line6-drop-variax-volume-sysfs-attr.patch | 110 ++ ...ng-line6-drop-variax-tone-sysfs-attr.patch | 110 ++ ...ng-line6-drop-variax-name-sysfs-attr.patch | 78 + ...ng-line6-drop-variax-bank-sysfs-attr.patch | 104 ++ ...ng-line6-drop-variax-dump-sysfs-attr.patch | 64 + ...-line6-drop-variax-active-sysfs-attr.patch | 82 + ...-line6-drop-variax-guitar-sysfs-attr.patch | 90 ++ ...ng-line6-drop-variax-raw-sysfs-attrs.patch | 134 ++ ...ging-line6-drop-CONFIG_LINE6_USB_RAW.patch | 66 + ...op-amp-effects-dump-request-triggers.patch | 44 + ...ine6-drop-MIDI-parameter-sysfs-attrs.patch | 1329 +++++++++++++++++ ...ing-line6-drop-pod-prog_data-buffers.patch | 139 ++ ...6-drop-unused-pod-atomic_flags-field.patch | 65 + ...g-line6-drop-variax-model_data-field.patch | 101 ++ ...op-dump-requests-from-variax-startup.patch | 242 +++ ...-drop-dump-requests-from-pod-startup.patch | 171 +++ ...g-line6-drop-unused-dumprequest-code.patch | 254 ++++ debian/patches/series | 108 ++ 109 files changed, 10765 insertions(+) create mode 100644 debian/patches/features/all/line6/0001-line6-fix-memory-leaks-in-line6_init_midi.patch create mode 100644 debian/patches/features/all/line6/0002-staging-line6-add-Pod-HD300-support.patch create mode 100644 debian/patches/features/all/line6/0003-staging-line6-add-missing-MIDI-postprocessing-case-f.patch create mode 100644 debian/patches/features/all/line6/0004-staging-line6-use-smallest-iso-ep-packet-size.patch create mode 100644 debian/patches/features/all/line6/0005-staging-line6-alloc-free-buffers-in-hw_params-hw_fre.patch create mode 100644 debian/patches/features/all/line6/0006-Staging-line6-Use-kmemdup-rather-than-duplicating-it.patch create mode 100644 debian/patches/features/all/line6/0007-Staging-line6-NULL-dereference-in-dev_err.patch create mode 100644 debian/patches/features/all/line6/0008-Staging-line6-midi.c-Fixed-call-of-obsolete-function.patch create mode 100644 debian/patches/features/all/line6/0009-Staging-line6-midi.c-Fixed-call-of-obsolete-function.patch create mode 100644 debian/patches/features/all/line6/0010-staging-line6-Remove-obsolete-code.patch create mode 100644 debian/patches/features/all/line6/0011-staging-line6-refactor-device-information-and-add-PO.patch create mode 100644 debian/patches/features/all/line6/0012-staging-line6-fix-memory-leak-in-.hw_params.patch create mode 100644 debian/patches/features/all/line6/0013-staging-line6-fix-playback-urb-transfer-buffer-calcu.patch create mode 100644 debian/patches/features/all/line6/0014-staging-line6-eliminate-useless-index_out-variable.patch create mode 100644 debian/patches/features/all/line6/0015-staging-line6-eliminate-useless-NULL-checks.patch create mode 100644 debian/patches/features/all/line6/0016-staging-line6-wait-for-urbs-in-snd_line6_prepare.patch create mode 100644 debian/patches/features/all/line6/0017-staging-line6-fixed-ALSA-PCM-interaction.patch create mode 100644 debian/patches/features/all/line6/0018-staging-line6-removed-obsolete-code.patch create mode 100644 debian/patches/features/all/line6/0019-staging-line6-use-source-select-control-for-UX2-devi.patch create mode 100644 debian/patches/features/all/line6/0020-staging-line6-separate-handling-of-buffer-allocation.patch create mode 100644 debian/patches/features/all/line6/0021-Staging-line6-remove-unneeded-initialization.patch create mode 100644 debian/patches/features/all/line6/0022-Staging-line6-only-allocate-a-buffer-if-it-is-needed.patch create mode 100644 debian/patches/features/all/line6/0023-Staging-line6-remove-teardown-code-from-module_exit-.patch create mode 100644 debian/patches/features/all/line6/0024-Staging-line6-use-module_usb_driver.patch create mode 100644 debian/patches/features/all/line6/0025-staging-line6-toneport.c-remove-err-usage.patch create mode 100644 debian/patches/features/all/line6/0026-staging-line6-midibuf.c-changed-printk-KERN_DEBUG-.-.patch create mode 100644 debian/patches/features/all/line6/0027-staging-line6-midi.c-Added-space-between-switch-and-.patch create mode 100644 debian/patches/features/all/line6/0028-staging-line6-pcm.c-Removed-trailing-whitespace.patch create mode 100644 debian/patches/features/all/line6/0029-staging-line6-config.h-Remove-CHECKPOINT-macro.patch create mode 100644 debian/patches/features/all/line6/0030-staging-line6-config.h-Delete-unused-header.patch create mode 100644 debian/patches/features/all/line6/0031-staging-line6-changed-interface-of-line6_transmit_pa.patch create mode 100644 debian/patches/features/all/line6/0032-staging-line6-Changed-some-strict_strtouls-to-kstrto.patch create mode 100644 debian/patches/features/all/line6/0033-staging-line6-changed-interface-of-line6_pod_transmi.patch create mode 100644 debian/patches/features/all/line6/0034-staging-line6-adjusted-interface-of-line6_send_progr.patch create mode 100644 debian/patches/features/all/line6/0035-staging-line6-changed-interface-of-pod_send_channel.patch create mode 100644 debian/patches/features/all/line6/0036-staging-line6-control.c-eliminate-strict_strtoul-in-.patch create mode 100644 debian/patches/features/all/line6/0037-staging-line6-Exchanged-strict_strtoul-with-kstrtou8.patch create mode 100644 debian/patches/features/all/line6/0038-staging-line6-Changed-strict_strtoul-to-kstrtou8-in-.patch create mode 100644 debian/patches/features/all/line6/0039-staging-line6-Changed-strict_strtoul-to-kstrtou8-in-.patch create mode 100644 debian/patches/features/all/line6/0040-staging-line6-pcm.c-Changed-simple_strtoul-to-kstrto.patch create mode 100644 debian/patches/features/all/line6/0041-staging-line6-variax.c-Eliminated-remaining-strict_s.patch create mode 100644 debian/patches/features/all/line6/0042-staging-line6-drop-unused-line6_devices-array.patch create mode 100644 debian/patches/features/all/line6/0043-staging-line6-drop-unused-line6_index-and-line6_id-a.patch create mode 100644 debian/patches/features/all/line6/0044-staging-line6-wrap-80-char-lines-in-capture.c.patch create mode 100644 debian/patches/features/all/line6/0045-staging-line6-fix-quoted-string-across-lines-in-midi.patch create mode 100644 debian/patches/features/all/line6/0046-staging-line6-shorten-comment-below-80-chars-in-pcm..patch create mode 100644 debian/patches/features/all/line6/0047-staging-line6-drop-trailing-whitespace-in-pcm.h.patch create mode 100644 debian/patches/features/all/line6/0048-staging-line6-wrap-lines-to-80-chars-in-playback.c.patch create mode 100644 debian/patches/features/all/line6/0049-staging-line6-replace-deprecated-strict_strtol-in-to.patch create mode 100644 debian/patches/features/all/line6/0050-staging-line6-wrap-lines-to-80-chars-in-usbdefs.h.patch create mode 100644 debian/patches/features/all/line6/0051-staging-line6-wrap-comment-to-80-chars-in-variax.c.patch create mode 100644 debian/patches/features/all/line6/0052-staging-line6-replace-DEBUG_MESSAGES-with-dev_dbg.patch create mode 100644 debian/patches/features/all/line6/0053-staging-line6-drop-unused-DEBUG_MESSAGES-macro.patch create mode 100644 debian/patches/features/all/line6/0054-staging-line6-drop-unused-CONFIG_LINE6_USB_DEBUG.patch create mode 100644 debian/patches/features/all/line6/0055-staging-line6-drop-control-URB-dumping-code.patch create mode 100644 debian/patches/features/all/line6/0056-staging-line6-drop-CONTROL-from-CONFIG_LINE6_USB_DUM.patch create mode 100644 debian/patches/features/all/line6/0057-staging-line6-drop-unused-CONFIG_LINE6_USB_DUMP_CTRL.patch create mode 100644 debian/patches/features/all/line6/0058-staging-line6-drop-MIDI-dumping-code.patch create mode 100644 debian/patches/features/all/line6/0059-staging-line6-drop-MIDI-from-CONFIG_LINE6_USB_DUMP_A.patch create mode 100644 debian/patches/features/all/line6/0060-staging-line6-drop-unused-CONFIG_LINE6_USB_DUMP_MIDI.patch create mode 100644 debian/patches/features/all/line6/0061-staging-line6-drop-channel-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0062-staging-line6-drop-clip-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0063-staging-line6-drop-unused-param_dirty-bitmap.patch create mode 100644 debian/patches/features/all/line6/0064-staging-line6-drop-dirty-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0065-staging-line6-drop-dump-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0066-staging-line6-drop-dump_buf-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0067-staging-line6-drop-monitor_level-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0068-staging-line6-change-monitor_level-type-ValueWait-in.patch create mode 100644 debian/patches/features/all/line6/0069-staging-line6-drop-name-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0070-staging-line6-drop-name_buf-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0071-staging-line6-drop-retrieve_amp_setup-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0072-staging-line6-drop-retrieve_channel-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0073-staging-line6-drop-retrieve_effects_setup-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0074-staging-line6-drop-store_amp_setup-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0075-staging-line6-drop-store_channel-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0076-staging-line6-drop-store_effects_setup-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0077-staging-line6-drop-routing-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0078-staging-line6-drop-tuner_freq-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0079-staging-line6-drop-tuner_note-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0080-staging-line6-drop-tuner_mute-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0081-staging-line6-drop-tuner_pitch-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0082-staging-line6-drop-finish-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0083-staging-line6-drop-midi_postprocess-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0084-staging-line6-drop-midi_mask_receive.patch create mode 100644 debian/patches/features/all/line6/0085-staging-line6-drop-midi_mask_transmit.patch create mode 100644 debian/patches/features/all/line6/0086-staging-line6-drop-midi_postprocess-flag.patch create mode 100644 debian/patches/features/all/line6/0087-staging-line6-drop-pod.c-raw-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0088-staging-line6-drop-tuner-param-filtering.patch create mode 100644 debian/patches/features/all/line6/0089-staging-line6-drop-variax-model-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0090-staging-line6-drop-variax-volume-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0091-staging-line6-drop-variax-tone-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0092-staging-line6-drop-variax-name-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0093-staging-line6-drop-variax-bank-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0094-staging-line6-drop-variax-dump-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0095-staging-line6-drop-variax-active-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0096-staging-line6-drop-variax-guitar-sysfs-attr.patch create mode 100644 debian/patches/features/all/line6/0097-staging-line6-drop-variax-raw-sysfs-attrs.patch create mode 100644 debian/patches/features/all/line6/0098-staging-line6-drop-CONFIG_LINE6_USB_RAW.patch create mode 100644 debian/patches/features/all/line6/0099-staging-line6-drop-amp-effects-dump-request-triggers.patch create mode 100644 debian/patches/features/all/line6/0100-staging-line6-drop-MIDI-parameter-sysfs-attrs.patch create mode 100644 debian/patches/features/all/line6/0101-staging-line6-drop-pod-prog_data-buffers.patch create mode 100644 debian/patches/features/all/line6/0102-staging-line6-drop-unused-pod-atomic_flags-field.patch create mode 100644 debian/patches/features/all/line6/0103-staging-line6-drop-variax-model_data-field.patch create mode 100644 debian/patches/features/all/line6/0104-staging-line6-drop-dump-requests-from-variax-startup.patch create mode 100644 debian/patches/features/all/line6/0105-staging-line6-drop-dump-requests-from-pod-startup.patch create mode 100644 debian/patches/features/all/line6/0106-staging-line6-drop-unused-dumprequest-code.patch diff --git a/debian/changelog b/debian/changelog index da06cb8a8..9ad191167 100644 --- a/debian/changelog +++ b/debian/changelog @@ -128,6 +128,8 @@ linux (3.2.38-1) UNRELEASED; urgency=low invert_brightness=1 * [amd64] edac: Enable EDAC_SBRIDGE as module (Closes: #699283) * SCSI: Add virtio_scsi driver (Closes: #686636) + * [x86] sound: Enable LINE6_USB as module (Closes: #700211) + - Apply upstream changes up to Linux 3.8-rc1 [ Aurelien Jarno ] * [armhf/vexpress] Add kernel udebs. diff --git a/debian/config/kernelarch-x86/config b/debian/config/kernelarch-x86/config index 9e9fc7db8..0aadf769b 100644 --- a/debian/config/kernelarch-x86/config +++ b/debian/config/kernelarch-x86/config @@ -1288,6 +1288,13 @@ CONFIG_STAGING_MEDIA=y ## CONFIG_EASYCAP=m +## +## file: drivers/staging/line6/Kconfig +## +CONFIG_LINE6_USB=m +# CONFIG_LINE6_USB_DUMP_PCM is not set +# CONFIG_LINE6_USB_IMPULSE_RESPONSE is not set + ## ## file: drivers/staging/media/go7007/Kconfig ## diff --git a/debian/patches/features/all/line6/0001-line6-fix-memory-leaks-in-line6_init_midi.patch b/debian/patches/features/all/line6/0001-line6-fix-memory-leaks-in-line6_init_midi.patch new file mode 100644 index 000000000..968f7b300 --- /dev/null +++ b/debian/patches/features/all/line6/0001-line6-fix-memory-leaks-in-line6_init_midi.patch @@ -0,0 +1,41 @@ +From: Jesper Juhl +Date: Mon, 24 Oct 2011 23:41:37 +0200 +Subject: [001/106] line6: fix memory leaks in line6_init_midi() + +commit 982d6ab50115025c63f4b9f7175614008c41d449 upstream. + +If the first call to line6_midibuf_init() fails we'll leak a little +bit of memory. If the second call fails we'll leak a bit more. This +happens when we return from the function and the local variable +'line6midi' goes out of scope. + +Signed-off-by: Jesper Juhl +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/midi.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c +index e554a2d..86c50cf 100644 +--- a/drivers/staging/line6/midi.c ++++ b/drivers/staging/line6/midi.c +@@ -391,12 +391,17 @@ int line6_init_midi(struct usb_line6 *line6) + return -ENOMEM; + + err = line6_midibuf_init(&line6midi->midibuf_in, MIDI_BUFFER_SIZE, 0); +- if (err < 0) ++ if (err < 0) { ++ kfree(line6midi); + return err; ++ } + + err = line6_midibuf_init(&line6midi->midibuf_out, MIDI_BUFFER_SIZE, 1); +- if (err < 0) ++ if (err < 0) { ++ kfree(line6midi->midibuf_in.buf); ++ kfree(line6midi); + return err; ++ } + + line6midi->line6 = line6; + line6midi->midi_mask_transmit = 1; diff --git a/debian/patches/features/all/line6/0002-staging-line6-add-Pod-HD300-support.patch b/debian/patches/features/all/line6/0002-staging-line6-add-Pod-HD300-support.patch new file mode 100644 index 000000000..865487fd9 --- /dev/null +++ b/debian/patches/features/all/line6/0002-staging-line6-add-Pod-HD300-support.patch @@ -0,0 +1,354 @@ +From: Stefan Hajnoczi +Date: Wed, 23 Nov 2011 08:20:42 +0000 +Subject: [002/106] staging: line6: add Pod HD300 support + +commit 16dc10401133d16d13a5eea7da2a71d2080e32a1 upstream. + +The Pod HD device family uses new MIDI SysEx messages and therefore +cannot reuse the existing Pod code. Instead of hardcoding Pod HD MIDI +messages into the driver, leave MIDI up to userspace. This driver +simply presents MIDI and pcm ALSA devices. + +This device is similar to the Pod except that it has 48 kHz audio and +does not respond to Pod SysEx messages. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/Makefile | 3 +- + drivers/staging/line6/driver.c | 24 +++++- + drivers/staging/line6/pcm.c | 1 + + drivers/staging/line6/podhd.c | 158 +++++++++++++++++++++++++++++++++++++++ + drivers/staging/line6/podhd.h | 30 ++++++++ + drivers/staging/line6/usbdefs.h | 2 + + 6 files changed, 216 insertions(+), 2 deletions(-) + create mode 100644 drivers/staging/line6/podhd.c + create mode 100644 drivers/staging/line6/podhd.h + +diff --git a/drivers/staging/line6/Makefile b/drivers/staging/line6/Makefile +index de6bd12..34a2dda 100644 +--- a/drivers/staging/line6/Makefile ++++ b/drivers/staging/line6/Makefile +@@ -12,4 +12,5 @@ line6usb-y := \ + playback.o \ + pod.o \ + toneport.o \ +- variax.o ++ variax.o \ ++ podhd.o +diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c +index 851b762..a71a5af 100644 +--- a/drivers/staging/line6/driver.c ++++ b/drivers/staging/line6/driver.c +@@ -21,6 +21,7 @@ + #include "midi.h" + #include "playback.h" + #include "pod.h" ++#include "podhd.h" + #include "revision.h" + #include "toneport.h" + #include "usbdefs.h" +@@ -49,6 +50,7 @@ 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)}, + {}, + }; + +@@ -72,7 +74,8 @@ static struct line6_properties line6_properties_table[] = { + { "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 } ++ { "Variax", "Variax Workbench", LINE6_BIT_VARIAX, LINE6_BIT_CONTROL }, ++ { "PODHD300", "POD HD300", LINE6_BIT_PODHD300, LINE6_BIT_CONTROL_PCM_HWMON }, + }; + /* *INDENT-ON* */ + +@@ -437,6 +440,9 @@ static void line6_data_received(struct urb *urb) + line6); + break; + ++ case LINE6_DEVID_PODHD300: ++ break; /* let userspace handle MIDI */ ++ + case LINE6_DEVID_PODXTLIVE: + switch (line6->interface_number) { + case PODXTLIVE_INTERFACE_POD: +@@ -812,6 +818,7 @@ static int line6_probe(struct usb_interface *interface, + case LINE6_DEVID_BASSPODXTPRO: + case LINE6_DEVID_PODXT: + case LINE6_DEVID_PODXTPRO: ++ case LINE6_DEVID_PODHD300: + alternate = 5; + break; + +@@ -865,6 +872,12 @@ static int line6_probe(struct usb_interface *interface, + ep_write = 0x03; + break; + ++ case LINE6_DEVID_PODHD300: ++ size = sizeof(struct usb_line6_podhd); ++ ep_read = 0x84; ++ ep_write = 0x03; ++ break; ++ + case LINE6_DEVID_POCKETPOD: + size = sizeof(struct usb_line6_pod); + ep_read = 0x82; +@@ -1017,6 +1030,11 @@ static int line6_probe(struct usb_interface *interface, + ret = line6_pod_init(interface, (struct usb_line6_pod *)line6); + break; + ++ case LINE6_DEVID_PODHD300: ++ ret = line6_podhd_init(interface, ++ (struct usb_line6_podhd *)line6); ++ break; ++ + case LINE6_DEVID_PODXTLIVE: + switch (interface_number) { + case PODXTLIVE_INTERFACE_POD: +@@ -1139,6 +1157,10 @@ static void line6_disconnect(struct usb_interface *interface) + line6_pod_disconnect(interface); + break; + ++ case LINE6_DEVID_PODHD300: ++ line6_podhd_disconnect(interface); ++ break; ++ + case LINE6_DEVID_PODXTLIVE: + switch (interface_number) { + case PODXTLIVE_INTERFACE_POD: +diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c +index 9d4c8a6..f56c642 100644 +--- a/drivers/staging/line6/pcm.c ++++ b/drivers/staging/line6/pcm.c +@@ -403,6 +403,7 @@ int line6_init_pcm(struct usb_line6 *line6, + case LINE6_DEVID_PODXT: + case LINE6_DEVID_PODXTLIVE: + case LINE6_DEVID_PODXTPRO: ++ case LINE6_DEVID_PODHD300: + ep_read = 0x82; + ep_write = 0x01; + break; +diff --git a/drivers/staging/line6/podhd.c b/drivers/staging/line6/podhd.c +new file mode 100644 +index 0000000..6c0f7f2 +--- /dev/null ++++ b/drivers/staging/line6/podhd.c +@@ -0,0 +1,158 @@ ++/* ++ * Line6 Pod HD ++ * ++ * Copyright (C) 2011 Stefan Hajnoczi ++ * ++ * 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 ++#include ++ ++#include "audio.h" ++#include "driver.h" ++#include "pcm.h" ++#include "podhd.h" ++ ++#define PODHD_BYTES_PER_FRAME 6 /* 24bit audio (stereo) */ ++ ++static struct snd_ratden podhd_ratden = { ++ .num_min = 48000, ++ .num_max = 48000, ++ .num_step = 1, ++ .den = 1, ++}; ++ ++static struct line6_pcm_properties podhd_pcm_properties = { ++ .snd_line6_playback_hw = { ++ .info = (SNDRV_PCM_INFO_MMAP | ++ SNDRV_PCM_INFO_INTERLEAVED | ++ SNDRV_PCM_INFO_BLOCK_TRANSFER | ++ SNDRV_PCM_INFO_MMAP_VALID | ++ SNDRV_PCM_INFO_PAUSE | ++#ifdef CONFIG_PM ++ SNDRV_PCM_INFO_RESUME | ++#endif ++ SNDRV_PCM_INFO_SYNC_START), ++ .formats = SNDRV_PCM_FMTBIT_S24_3LE, ++ .rates = SNDRV_PCM_RATE_48000, ++ .rate_min = 48000, ++ .rate_max = 48000, ++ .channels_min = 2, ++ .channels_max = 2, ++ .buffer_bytes_max = 60000, ++ .period_bytes_min = 64, ++ .period_bytes_max = 8192, ++ .periods_min = 1, ++ .periods_max = 1024}, ++ .snd_line6_capture_hw = { ++ .info = (SNDRV_PCM_INFO_MMAP | ++ SNDRV_PCM_INFO_INTERLEAVED | ++ SNDRV_PCM_INFO_BLOCK_TRANSFER | ++ SNDRV_PCM_INFO_MMAP_VALID | ++#ifdef CONFIG_PM ++ SNDRV_PCM_INFO_RESUME | ++#endif ++ SNDRV_PCM_INFO_SYNC_START), ++ .formats = SNDRV_PCM_FMTBIT_S24_3LE, ++ .rates = SNDRV_PCM_RATE_48000, ++ .rate_min = 48000, ++ .rate_max = 48000, ++ .channels_min = 2, ++ .channels_max = 2, ++ .buffer_bytes_max = 60000, ++ .period_bytes_min = 64, ++ .period_bytes_max = 8192, ++ .periods_min = 1, ++ .periods_max = 1024}, ++ .snd_line6_rates = { ++ .nrats = 1, ++ .rats = &podhd_ratden}, ++ .bytes_per_frame = PODHD_BYTES_PER_FRAME ++}; ++ ++/* ++ POD HD destructor. ++*/ ++static void podhd_destruct(struct usb_interface *interface) ++{ ++ struct usb_line6_podhd *podhd = usb_get_intfdata(interface); ++ struct usb_line6 *line6; ++ ++ if (podhd == NULL) ++ return; ++ line6 = &podhd->line6; ++ if (line6 == NULL) ++ return; ++ line6_cleanup_audio(line6); ++} ++ ++/* ++ Try to init POD HD device. ++*/ ++static int podhd_try_init(struct usb_interface *interface, ++ struct usb_line6_podhd *podhd) ++{ ++ int err; ++ struct usb_line6 *line6 = &podhd->line6; ++ ++ if ((interface == NULL) || (podhd == NULL)) ++ return -ENODEV; ++ ++ /* initialize audio system: */ ++ err = line6_init_audio(line6); ++ if (err < 0) ++ return err; ++ ++ /* initialize MIDI subsystem: */ ++ err = line6_init_midi(line6); ++ if (err < 0) ++ return err; ++ ++ /* initialize PCM subsystem: */ ++ err = line6_init_pcm(line6, &podhd_pcm_properties); ++ if (err < 0) ++ return err; ++ ++ /* register USB audio system: */ ++ err = line6_register_audio(line6); ++ return err; ++} ++ ++/* ++ Init POD HD device (and clean up in case of failure). ++*/ ++int line6_podhd_init(struct usb_interface *interface, ++ struct usb_line6_podhd *podhd) ++{ ++ int err = podhd_try_init(interface, podhd); ++ ++ if (err < 0) ++ podhd_destruct(interface); ++ ++ return err; ++} ++ ++/* ++ POD HD device disconnected. ++*/ ++void line6_podhd_disconnect(struct usb_interface *interface) ++{ ++ struct usb_line6_podhd *podhd; ++ ++ if (interface == NULL) ++ return; ++ podhd = usb_get_intfdata(interface); ++ ++ if (podhd != NULL) { ++ struct snd_line6_pcm *line6pcm = podhd->line6.line6pcm; ++ ++ if (line6pcm != NULL) ++ line6_pcm_disconnect(line6pcm); ++ } ++ ++ podhd_destruct(interface); ++} +diff --git a/drivers/staging/line6/podhd.h b/drivers/staging/line6/podhd.h +new file mode 100644 +index 0000000..652f740 +--- /dev/null ++++ b/drivers/staging/line6/podhd.h +@@ -0,0 +1,30 @@ ++/* ++ * Line6 Pod HD ++ * ++ * Copyright (C) 2011 Stefan Hajnoczi ++ * ++ * 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. ++ * ++ */ ++ ++#ifndef PODHD_H ++#define PODHD_H ++ ++#include ++ ++#include "driver.h" ++ ++struct usb_line6_podhd { ++ /** ++ Generic Line6 USB data. ++ */ ++ struct usb_line6 line6; ++}; ++ ++extern void line6_podhd_disconnect(struct usb_interface *interface); ++extern int line6_podhd_init(struct usb_interface *interface, ++ struct usb_line6_podhd *podhd); ++ ++#endif /* PODHD_H */ +diff --git a/drivers/staging/line6/usbdefs.h b/drivers/staging/line6/usbdefs.h +index c6dffe6..4e13364 100644 +--- a/drivers/staging/line6/usbdefs.h ++++ b/drivers/staging/line6/usbdefs.h +@@ -36,6 +36,7 @@ + #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) +@@ -54,6 +55,7 @@ + #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) + + #define LINE6_BITS_PRO (LINE6_BIT_BASSPODXTPRO | \ + LINE6_BIT_PODXTPRO) diff --git a/debian/patches/features/all/line6/0003-staging-line6-add-missing-MIDI-postprocessing-case-f.patch b/debian/patches/features/all/line6/0003-staging-line6-add-missing-MIDI-postprocessing-case-f.patch new file mode 100644 index 000000000..1bd0ad8d2 --- /dev/null +++ b/debian/patches/features/all/line6/0003-staging-line6-add-missing-MIDI-postprocessing-case-f.patch @@ -0,0 +1,31 @@ +From: Stefan Hajnoczi +Date: Wed, 23 Nov 2011 08:20:43 +0000 +Subject: [003/106] staging: line6: add missing MIDI postprocessing case for + POD HD300 + +commit 1dc403ffecae26ae52414488e326761a9ae10de7 upstream. + +The driver leaves MIDI processing up to userspace for the POD HD300 +device. Add a missing case statement to skip MIDI postprocessing in the +driver. This change has no effect other than silencing a printk: + + line6usb driver bug: missing case in linux/drivers/staging/line6/midi.c:179 + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/midi.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c +index 86c50cf..ed5577f 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, + break; + + case LINE6_DEVID_VARIAX: ++ case LINE6_DEVID_PODHD300: + break; + + default: diff --git a/debian/patches/features/all/line6/0004-staging-line6-use-smallest-iso-ep-packet-size.patch b/debian/patches/features/all/line6/0004-staging-line6-use-smallest-iso-ep-packet-size.patch new file mode 100644 index 000000000..93b1e5d2e --- /dev/null +++ b/debian/patches/features/all/line6/0004-staging-line6-use-smallest-iso-ep-packet-size.patch @@ -0,0 +1,44 @@ +From: Stefan Hajnoczi +Date: Wed, 23 Nov 2011 08:20:44 +0000 +Subject: [004/106] staging: line6: use smallest iso ep packet size + +commit 3b08db37cb04a80dccac8c2d7b03690b5f179487 upstream. + +The POD HD300 isochronous endpoints have different max packet sizes for +read and write. Using the read endpoint max packet size may be too +large for the write endpoint. Instead we should use the minimum of both +endpoints to be sure the size is acceptable. + +In theory we could decouple read and write packet sizes but the driver +currently uses a single size which I chose not to mess with since other +features like software monitoring may depend on a single packet size for +both endpoints. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pcm.c | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c +index f56c642..ae98434 100644 +--- a/drivers/staging/line6/pcm.c ++++ b/drivers/staging/line6/pcm.c +@@ -452,9 +452,14 @@ int line6_init_pcm(struct usb_line6 *line6, + line6pcm->line6 = line6; + line6pcm->ep_audio_read = ep_read; + line6pcm->ep_audio_write = ep_write; +- line6pcm->max_packet_size = usb_maxpacket(line6->usbdev, +- usb_rcvintpipe(line6->usbdev, +- ep_read), 0); ++ ++ /* Read and write buffers are sized identically, so choose minimum */ ++ line6pcm->max_packet_size = min( ++ usb_maxpacket(line6->usbdev, ++ usb_rcvisocpipe(line6->usbdev, ep_read), 0), ++ usb_maxpacket(line6->usbdev, ++ usb_sndisocpipe(line6->usbdev, ep_write), 1)); ++ + line6pcm->properties = properties; + line6->line6pcm = line6pcm; + diff --git a/debian/patches/features/all/line6/0005-staging-line6-alloc-free-buffers-in-hw_params-hw_fre.patch b/debian/patches/features/all/line6/0005-staging-line6-alloc-free-buffers-in-hw_params-hw_fre.patch new file mode 100644 index 000000000..e3071ab08 --- /dev/null +++ b/debian/patches/features/all/line6/0005-staging-line6-alloc-free-buffers-in-hw_params-hw_fre.patch @@ -0,0 +1,161 @@ +From: Stefan Hajnoczi +Date: Wed, 23 Nov 2011 08:20:45 +0000 +Subject: [005/106] staging: line6: alloc/free buffers in hw_params/hw_free + +commit 140e28b83c4a31831cbf293d9cab20c603821202 upstream. + +It is unsafe to free buffers in line6_pcm_stop(), which is not allowed +to sleep, since urbs cannot be killed completely there and only +unlinked. This means I/O may still be in progress and the URB +completion function still gets invoked. This may result in memory +corruption when buffer_in is freed but I/O is still pending. + +Additionally, line6_pcm_start() is not supposed to sleep so it should +not use kmalloc(GFP_KERNEL). + +These issues can be resolved by performing buffer allocation/freeing in +the .hw_params/.hw_free callbacks instead. The ALSA documentation also +recommends doing buffer allocation/freeing in these callbacks. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/capture.c | 15 +++++++++++++++ + drivers/staging/line6/pcm.c | 24 ------------------------ + drivers/staging/line6/playback.c | 15 +++++++++++++++ + 3 files changed, 30 insertions(+), 24 deletions(-) + +diff --git a/drivers/staging/line6/capture.c b/drivers/staging/line6/capture.c +index 9647154..d9da7ed 100644 +--- a/drivers/staging/line6/capture.c ++++ b/drivers/staging/line6/capture.c +@@ -9,6 +9,7 @@ + * + */ + ++#include + #include + #include + #include +@@ -319,6 +320,15 @@ static int snd_line6_capture_hw_params(struct snd_pcm_substream *substream, + } + /* -- [FD] end */ + ++ line6pcm->buffer_in = kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS * ++ line6pcm->max_packet_size, GFP_KERNEL); ++ ++ if (!line6pcm->buffer_in) { ++ dev_err(line6pcm->line6->ifcdev, ++ "cannot malloc capture buffer\n"); ++ return -ENOMEM; ++ } ++ + ret = snd_pcm_lib_malloc_pages(substream, + params_buffer_bytes(hw_params)); + if (ret < 0) +@@ -331,6 +341,11 @@ static int snd_line6_capture_hw_params(struct snd_pcm_substream *substream, + /* hw_free capture callback */ + static int snd_line6_capture_hw_free(struct snd_pcm_substream *substream) + { ++ struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream); ++ ++ line6_unlink_wait_clear_audio_in_urbs(line6pcm); ++ kfree(line6pcm->buffer_in); ++ line6pcm->buffer_in = NULL; + return snd_pcm_lib_free_pages(substream); + } + +diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c +index ae98434..2e4e164 100644 +--- a/drivers/staging/line6/pcm.c ++++ b/drivers/staging/line6/pcm.c +@@ -119,16 +119,6 @@ int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels) + if (line6pcm->active_urb_in | line6pcm->unlink_urb_in) + return -EBUSY; + +- line6pcm->buffer_in = +- kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS * +- line6pcm->max_packet_size, GFP_KERNEL); +- +- if (!line6pcm->buffer_in) { +- dev_err(line6pcm->line6->ifcdev, +- "cannot malloc capture buffer\n"); +- return -ENOMEM; +- } +- + line6pcm->count_in = 0; + line6pcm->prev_fsize = 0; + err = line6_submit_audio_in_all_urbs(line6pcm); +@@ -147,16 +137,6 @@ int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels) + if (line6pcm->active_urb_out | line6pcm->unlink_urb_out) + return -EBUSY; + +- line6pcm->buffer_out = +- kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS * +- line6pcm->max_packet_size, GFP_KERNEL); +- +- if (!line6pcm->buffer_out) { +- dev_err(line6pcm->line6->ifcdev, +- "cannot malloc playback buffer\n"); +- return -ENOMEM; +- } +- + line6pcm->count_out = 0; + err = line6_submit_audio_out_all_urbs(line6pcm); + +@@ -178,15 +158,11 @@ int line6_pcm_stop(struct snd_line6_pcm *line6pcm, int channels) + if (((flags_old & MASK_CAPTURE) != 0) && + ((flags_new & MASK_CAPTURE) == 0)) { + line6_unlink_audio_in_urbs(line6pcm); +- kfree(line6pcm->buffer_in); +- line6pcm->buffer_in = NULL; + } + + if (((flags_old & MASK_PLAYBACK) != 0) && + ((flags_new & MASK_PLAYBACK) == 0)) { + line6_unlink_audio_out_urbs(line6pcm); +- kfree(line6pcm->buffer_out); +- line6pcm->buffer_out = NULL; + } + #if LINE6_BACKUP_MONITOR_SIGNAL + kfree(line6pcm->prev_fbuf); +diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c +index 10c5438..b344527 100644 +--- a/drivers/staging/line6/playback.c ++++ b/drivers/staging/line6/playback.c +@@ -9,6 +9,7 @@ + * + */ + ++#include + #include + #include + #include +@@ -469,6 +470,15 @@ static int snd_line6_playback_hw_params(struct snd_pcm_substream *substream, + } + /* -- [FD] end */ + ++ line6pcm->buffer_out = kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS * ++ line6pcm->max_packet_size, GFP_KERNEL); ++ ++ if (!line6pcm->buffer_out) { ++ dev_err(line6pcm->line6->ifcdev, ++ "cannot malloc playback buffer\n"); ++ return -ENOMEM; ++ } ++ + ret = snd_pcm_lib_malloc_pages(substream, + params_buffer_bytes(hw_params)); + if (ret < 0) +@@ -481,6 +491,11 @@ static int snd_line6_playback_hw_params(struct snd_pcm_substream *substream, + /* hw_free playback callback */ + static int snd_line6_playback_hw_free(struct snd_pcm_substream *substream) + { ++ struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream); ++ ++ line6_unlink_wait_clear_audio_out_urbs(line6pcm); ++ kfree(line6pcm->buffer_out); ++ line6pcm->buffer_out = NULL; + return snd_pcm_lib_free_pages(substream); + } + diff --git a/debian/patches/features/all/line6/0006-Staging-line6-Use-kmemdup-rather-than-duplicating-it.patch b/debian/patches/features/all/line6/0006-Staging-line6-Use-kmemdup-rather-than-duplicating-it.patch new file mode 100644 index 000000000..1b255cb17 --- /dev/null +++ b/debian/patches/features/all/line6/0006-Staging-line6-Use-kmemdup-rather-than-duplicating-it.patch @@ -0,0 +1,42 @@ +From: Thomas Meyer +Date: Tue, 8 Nov 2011 20:40:26 +0100 +Subject: [006/106] Staging: line6: Use kmemdup rather than duplicating its + implementation + +commit cff863871e748d072cae002fb13e692436b0200a upstream. + + Use kmemdup rather than duplicating its implementation + + The semantic patch that makes this change is available + in scripts/coccinelle/api/memdup.cocci. + + More information about semantic patching is available at + http://coccinelle.lip6.fr/ + +Signed-off-by: Thomas Meyer +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/midi.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c +index ed5577f..7f1e90e 100644 +--- a/drivers/staging/line6/midi.c ++++ b/drivers/staging/line6/midi.c +@@ -135,7 +135,7 @@ static int send_midi_async(struct usb_line6 *line6, unsigned char *data, + line6_write_hexdump(line6, 'S', data, length); + #endif + +- transfer_buffer = kmalloc(length, GFP_ATOMIC); ++ transfer_buffer = kmemdup(data, length, GFP_ATOMIC); + + if (transfer_buffer == NULL) { + usb_free_urb(urb); +@@ -143,7 +143,6 @@ static int send_midi_async(struct usb_line6 *line6, unsigned char *data, + return -ENOMEM; + } + +- memcpy(transfer_buffer, data, length); + usb_fill_int_urb(urb, line6->usbdev, + usb_sndbulkpipe(line6->usbdev, + line6->ep_control_write), diff --git a/debian/patches/features/all/line6/0007-Staging-line6-NULL-dereference-in-dev_err.patch b/debian/patches/features/all/line6/0007-Staging-line6-NULL-dereference-in-dev_err.patch new file mode 100644 index 000000000..0150290ff --- /dev/null +++ b/debian/patches/features/all/line6/0007-Staging-line6-NULL-dereference-in-dev_err.patch @@ -0,0 +1,43 @@ +From: Dan Carpenter +Date: Wed, 30 Nov 2011 11:43:41 +0300 +Subject: [007/106] Staging: line6: NULL dereference in dev_err() + +commit 4bd8b4de6f806f1429d23a2f6e2549ed0e8bc49b upstream. + +"line6" hasn't been set at this point and we should be using +&interface->dev instead. + +Gcc would have complained about this if it weren't for the fact that we +initialized line6 to NULL. I removed the initialization. + +Signed-off-by: Dan Carpenter +Reviewed-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/driver.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c +index a71a5af..a2f48ee 100644 +--- a/drivers/staging/line6/driver.c ++++ b/drivers/staging/line6/driver.c +@@ -726,8 +726,8 @@ static int line6_probe(struct usb_interface *interface, + const struct usb_device_id *id) + { + int devtype; +- struct usb_device *usbdev = NULL; +- struct usb_line6 *line6 = NULL; ++ struct usb_device *usbdev; ++ struct usb_line6 *line6; + const struct line6_properties *properties; + int devnum; + int interface_number, alternate = 0; +@@ -936,7 +936,7 @@ static int line6_probe(struct usb_interface *interface, + } + + if (size == 0) { +- dev_err(line6->ifcdev, ++ dev_err(&interface->dev, + "driver bug: interface data size not set\n"); + ret = -ENODEV; + goto err_put; diff --git a/debian/patches/features/all/line6/0008-Staging-line6-midi.c-Fixed-call-of-obsolete-function.patch b/debian/patches/features/all/line6/0008-Staging-line6-midi.c-Fixed-call-of-obsolete-function.patch new file mode 100644 index 000000000..df98c2411 --- /dev/null +++ b/debian/patches/features/all/line6/0008-Staging-line6-midi.c-Fixed-call-of-obsolete-function.patch @@ -0,0 +1,50 @@ +From: Andor Daam +Date: Mon, 5 Dec 2011 10:09:25 +0100 +Subject: [008/106] Staging: line6/midi.c: Fixed call of obsolete function + strict_strtoul + +commit 4d85fae04f23ebbdbbb11061b8eec48082ecdc43 upstream. + +The function strict_strtoul is obsolete and should be replaced by the +new kstrto* functions. + +The variable midi_mask_transmit is only used as unsigned short and the +datatypes of all affected variables were adjusted accordingly. + +Signed-off-by: Andor Daam +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/midi.c | 4 ++-- + drivers/staging/line6/midi.h | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c +index 7f1e90e..3d1ada6 100644 +--- a/drivers/staging/line6/midi.c ++++ b/drivers/staging/line6/midi.c +@@ -307,10 +307,10 @@ static ssize_t midi_set_midi_mask_transmit(struct device *dev, + { + struct usb_interface *interface = to_usb_interface(dev); + struct usb_line6 *line6 = usb_get_intfdata(interface); +- unsigned long value; ++ unsigned short value; + int ret; + +- ret = strict_strtoul(buf, 10, &value); ++ ret = kstrtou16(buf, 10, &value); + if (ret) + return ret; + +diff --git a/drivers/staging/line6/midi.h b/drivers/staging/line6/midi.h +index b73a025..2c0a663 100644 +--- a/drivers/staging/line6/midi.h ++++ b/drivers/staging/line6/midi.h +@@ -57,7 +57,7 @@ struct snd_line6_midi { + /** + Bit mask for output MIDI channels. + */ +- int midi_mask_transmit; ++ unsigned short midi_mask_transmit; + + /** + Bit mask for input MIDI channels. diff --git a/debian/patches/features/all/line6/0009-Staging-line6-midi.c-Fixed-call-of-obsolete-function.patch b/debian/patches/features/all/line6/0009-Staging-line6-midi.c-Fixed-call-of-obsolete-function.patch new file mode 100644 index 000000000..46f0936e1 --- /dev/null +++ b/debian/patches/features/all/line6/0009-Staging-line6-midi.c-Fixed-call-of-obsolete-function.patch @@ -0,0 +1,51 @@ +From: Andor Daam +Date: Mon, 5 Dec 2011 10:10:37 +0100 +Subject: [009/106] Staging: line6/midi.c: Fixed call of obsolete function + strict_strtoul + +commit 251c3948808046c39359658fa2faffff45b825d3 upstream. + +The obsolete function strict_strtoul should be replaced by the kstrto* +functions. + +In this context kstrtou16 should be use, as midi_mask_receive is only +used as unsigned short. All corresponding datatypes were adapted +accordingly. + +Signed-off-by: Andor Daam +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/midi.c | 4 ++-- + drivers/staging/line6/midi.h | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c +index 3d1ada6..3013fb5 100644 +--- a/drivers/staging/line6/midi.c ++++ b/drivers/staging/line6/midi.c +@@ -339,10 +339,10 @@ static ssize_t midi_set_midi_mask_receive(struct device *dev, + { + struct usb_interface *interface = to_usb_interface(dev); + struct usb_line6 *line6 = usb_get_intfdata(interface); +- unsigned long value; ++ unsigned short value; + int ret; + +- ret = strict_strtoul(buf, 10, &value); ++ ret = kstrtou16(buf, 10, &value); + if (ret) + return ret; + +diff --git a/drivers/staging/line6/midi.h b/drivers/staging/line6/midi.h +index 2c0a663..4a9e9f9 100644 +--- a/drivers/staging/line6/midi.h ++++ b/drivers/staging/line6/midi.h +@@ -62,7 +62,7 @@ struct snd_line6_midi { + /** + Bit mask for input MIDI channels. + */ +- int midi_mask_receive; ++ unsigned short midi_mask_receive; + + /** + Buffer for incoming MIDI stream. diff --git a/debian/patches/features/all/line6/0010-staging-line6-Remove-obsolete-code.patch b/debian/patches/features/all/line6/0010-staging-line6-Remove-obsolete-code.patch new file mode 100644 index 000000000..4aa68520c --- /dev/null +++ b/debian/patches/features/all/line6/0010-staging-line6-Remove-obsolete-code.patch @@ -0,0 +1,106 @@ +From: Markus Grabner +Date: Mon, 5 Dec 2011 23:51:52 +0100 +Subject: [010/106] staging/line6: Remove obsolete code + +commit 3b35de4126f03d8df089c5fc908c40bb91485f6c upstream. + +This patch removes experimental code which is no longer used. + +Signed-off-by: Markus Grabner +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/capture.c | 4 ---- + drivers/staging/line6/pcm.c | 17 ----------------- + drivers/staging/line6/pcm.h | 3 --- + drivers/staging/line6/playback.c | 8 -------- + 4 files changed, 32 deletions(-) + +diff --git a/drivers/staging/line6/capture.c b/drivers/staging/line6/capture.c +index d9da7ed..ba441ed 100644 +--- a/drivers/staging/line6/capture.c ++++ b/drivers/staging/line6/capture.c +@@ -244,11 +244,7 @@ static void audio_in_callback(struct urb *urb) + length += fsize; + + /* the following assumes LINE6_ISO_PACKETS == 1: */ +-#if LINE6_BACKUP_MONITOR_SIGNAL +- memcpy(line6pcm->prev_fbuf, fbuf, fsize); +-#else + line6pcm->prev_fbuf = fbuf; +-#endif + line6pcm->prev_fsize = fsize; + + #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE +diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c +index 2e4e164..a70c087 100644 +--- a/drivers/staging/line6/pcm.c ++++ b/drivers/staging/line6/pcm.c +@@ -93,21 +93,7 @@ int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels) + unsigned long flags_new = flags_old | channels; + int err = 0; + +-#if LINE6_BACKUP_MONITOR_SIGNAL +- if (!(line6pcm->line6->properties->capabilities & LINE6_BIT_HWMON)) { +- line6pcm->prev_fbuf = +- kmalloc(LINE6_ISO_PACKETS * line6pcm->max_packet_size, +- GFP_KERNEL); +- +- if (!line6pcm->prev_fbuf) { +- dev_err(line6pcm->line6->ifcdev, +- "cannot malloc monitor buffer\n"); +- return -ENOMEM; +- } +- } +-#else + line6pcm->prev_fbuf = NULL; +-#endif + + if (((flags_old & MASK_CAPTURE) == 0) && + ((flags_new & MASK_CAPTURE) != 0)) { +@@ -164,9 +150,6 @@ int line6_pcm_stop(struct snd_line6_pcm *line6pcm, int channels) + ((flags_new & MASK_PLAYBACK) == 0)) { + line6_unlink_audio_out_urbs(line6pcm); + } +-#if LINE6_BACKUP_MONITOR_SIGNAL +- kfree(line6pcm->prev_fbuf); +-#endif + + return 0; + } +diff --git a/drivers/staging/line6/pcm.h b/drivers/staging/line6/pcm.h +index 77055b3..05f4ef3 100644 +--- a/drivers/staging/line6/pcm.h ++++ b/drivers/staging/line6/pcm.h +@@ -39,9 +39,6 @@ + #define LINE6_IMPULSE_DEFAULT_PERIOD 100 + #endif + +-#define LINE6_BACKUP_MONITOR_SIGNAL 0 +-#define LINE6_REUSE_DMA_AREA_FOR_PLAYBACK 0 +- + /* + Get substream from Line6 PCM data structure + */ +diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c +index b344527..e495b32 100644 +--- a/drivers/staging/line6/playback.c ++++ b/drivers/staging/line6/playback.c +@@ -223,18 +223,10 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm) + } else + dev_err(line6pcm->line6->ifcdev, "driver bug: len = %d\n", len); /* this is somewhat paranoid */ + } else { +-#if LINE6_REUSE_DMA_AREA_FOR_PLAYBACK +- /* set the buffer pointer */ +- urb_out->transfer_buffer = +- runtime->dma_area + +- line6pcm->pos_out * bytes_per_frame; +-#else +- /* copy data */ + memcpy(urb_out->transfer_buffer, + runtime->dma_area + + line6pcm->pos_out * bytes_per_frame, + urb_out->transfer_buffer_length); +-#endif + } + + line6pcm->pos_out += urb_frames; diff --git a/debian/patches/features/all/line6/0011-staging-line6-refactor-device-information-and-add-PO.patch b/debian/patches/features/all/line6/0011-staging-line6-refactor-device-information-and-add-PO.patch new file mode 100644 index 000000000..8fb867055 --- /dev/null +++ b/debian/patches/features/all/line6/0011-staging-line6-refactor-device-information-and-add-PO.patch @@ -0,0 +1,324 @@ +From: Markus Grabner +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 +Signed-off-by: Greg Kroah-Hartman +--- + 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=" +@@ -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 diff --git a/debian/patches/features/all/line6/0012-staging-line6-fix-memory-leak-in-.hw_params.patch b/debian/patches/features/all/line6/0012-staging-line6-fix-memory-leak-in-.hw_params.patch new file mode 100644 index 000000000..7033d725b --- /dev/null +++ b/debian/patches/features/all/line6/0012-staging-line6-fix-memory-leak-in-.hw_params.patch @@ -0,0 +1,53 @@ +From: Stefan Hajnoczi +Date: Sat, 10 Dec 2011 02:12:27 +0100 +Subject: [012/106] staging: line6: fix memory leak in .hw_params() + +commit 60c01a977814788178362ff0e1a22dfbf106eede upstream. + +The .hw_params() pcm callback can be invoked multiple times in a row. +Ensure that the URB data buffer is only allocated once. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Markus Grabner +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/capture.c | 7 +++++-- + drivers/staging/line6/playback.c | 7 +++++-- + 2 files changed, 10 insertions(+), 4 deletions(-) + +diff --git a/drivers/staging/line6/capture.c b/drivers/staging/line6/capture.c +index ba441ed..8f59ff3 100644 +--- a/drivers/staging/line6/capture.c ++++ b/drivers/staging/line6/capture.c +@@ -316,8 +316,11 @@ static int snd_line6_capture_hw_params(struct snd_pcm_substream *substream, + } + /* -- [FD] end */ + +- line6pcm->buffer_in = kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS * +- line6pcm->max_packet_size, GFP_KERNEL); ++ /* We may be invoked multiple times in a row so allocate once only */ ++ if (!line6pcm->buffer_in) ++ line6pcm->buffer_in = ++ kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS * ++ line6pcm->max_packet_size, GFP_KERNEL); + + if (!line6pcm->buffer_in) { + dev_err(line6pcm->line6->ifcdev, +diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c +index e495b32..ed1b9bd 100644 +--- a/drivers/staging/line6/playback.c ++++ b/drivers/staging/line6/playback.c +@@ -462,8 +462,11 @@ static int snd_line6_playback_hw_params(struct snd_pcm_substream *substream, + } + /* -- [FD] end */ + +- line6pcm->buffer_out = kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS * +- line6pcm->max_packet_size, GFP_KERNEL); ++ /* We may be invoked multiple times in a row so allocate once only */ ++ if (!line6pcm->buffer_out) ++ line6pcm->buffer_out = ++ kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS * ++ line6pcm->max_packet_size, GFP_KERNEL); + + if (!line6pcm->buffer_out) { + dev_err(line6pcm->line6->ifcdev, diff --git a/debian/patches/features/all/line6/0013-staging-line6-fix-playback-urb-transfer-buffer-calcu.patch b/debian/patches/features/all/line6/0013-staging-line6-fix-playback-urb-transfer-buffer-calcu.patch new file mode 100644 index 000000000..6d569ca5f --- /dev/null +++ b/debian/patches/features/all/line6/0013-staging-line6-fix-playback-urb-transfer-buffer-calcu.patch @@ -0,0 +1,37 @@ +From: Stefan Hajnoczi +Date: Sat, 10 Dec 2011 02:12:28 +0100 +Subject: [013/106] staging: line6: fix playback urb transfer buffer + calculation + +commit 2f637ee42d4a60e1c3823beff3699354bd4400be upstream. + +The playback urb transfer buffer calculation does not factor in +LINE6_ISO_PACKETS. Buffer memory is organized like this in the driver: + + Buffer 0 Buffer 1 ... + [Packet 0, Packet 1, ...][Packet 0, Packet 1, ...][Packet 0, ...] + +However, we're lucky that LINE6_ISO_PACKETS is currently defined as 1 so +this patch does not change any behavior. It's still worth including +this fix in case the LINE6_ISO_PACKETS value is changed in the future. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Markus Grabner +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/playback.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c +index ed1b9bd..b17c0a7 100644 +--- a/drivers/staging/line6/playback.c ++++ b/drivers/staging/line6/playback.c +@@ -192,7 +192,7 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm) + urb_frames = urb_size / bytes_per_frame; + urb_out->transfer_buffer = + line6pcm->buffer_out + +- line6pcm->max_packet_size * line6pcm->index_out; ++ LINE6_ISO_PACKETS * line6pcm->max_packet_size * line6pcm->index_out; + urb_out->transfer_buffer_length = urb_size; + urb_out->context = line6pcm; + diff --git a/debian/patches/features/all/line6/0014-staging-line6-eliminate-useless-index_out-variable.patch b/debian/patches/features/all/line6/0014-staging-line6-eliminate-useless-index_out-variable.patch new file mode 100644 index 000000000..511fff818 --- /dev/null +++ b/debian/patches/features/all/line6/0014-staging-line6-eliminate-useless-index_out-variable.patch @@ -0,0 +1,58 @@ +From: Stefan Hajnoczi +Date: Sat, 10 Dec 2011 02:12:29 +0100 +Subject: [014/106] staging: line6: eliminate useless index_out variable + +commit 153e38761d27f29edf436f11da3dbfb4fb8edcc1 upstream. + +Playback urbs use the index_out counter to decide which part of the +playback buffer to use. Since the urb already has a unique index in +range [0, LINE6_ISO_BUFFERS) there is no need to keep a separate +counter. + +Use the urb index instead. This also eliminates the possibility of two +urbs using the same playback buffer space if they ever complete +out-of-order for some reason. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Markus Grabner +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pcm.h | 5 ----- + drivers/staging/line6/playback.c | 5 +---- + 2 files changed, 1 insertion(+), 9 deletions(-) + +diff --git a/drivers/staging/line6/pcm.h b/drivers/staging/line6/pcm.h +index 05f4ef3..55d8297 100644 +--- a/drivers/staging/line6/pcm.h ++++ b/drivers/staging/line6/pcm.h +@@ -146,11 +146,6 @@ struct snd_line6_pcm { + unsigned char *buffer_in; + + /** +- Temporary buffer index for playback. +- */ +- int index_out; +- +- /** + Previously captured frame (for software monitoring). + */ + unsigned char *prev_fbuf; +diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c +index b17c0a7..9a51b92 100644 +--- a/drivers/staging/line6/playback.c ++++ b/drivers/staging/line6/playback.c +@@ -192,13 +192,10 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm) + urb_frames = urb_size / bytes_per_frame; + urb_out->transfer_buffer = + line6pcm->buffer_out + +- LINE6_ISO_PACKETS * line6pcm->max_packet_size * line6pcm->index_out; ++ index * LINE6_ISO_PACKETS * line6pcm->max_packet_size; + urb_out->transfer_buffer_length = urb_size; + urb_out->context = line6pcm; + +- if (++line6pcm->index_out == LINE6_ISO_BUFFERS) +- line6pcm->index_out = 0; +- + if (test_bit(BIT_PCM_ALSA_PLAYBACK, &line6pcm->flags) && + !test_bit(BIT_PAUSE_PLAYBACK, &line6pcm->flags)) { + struct snd_pcm_runtime *runtime = diff --git a/debian/patches/features/all/line6/0015-staging-line6-eliminate-useless-NULL-checks.patch b/debian/patches/features/all/line6/0015-staging-line6-eliminate-useless-NULL-checks.patch new file mode 100644 index 000000000..a6f586b85 --- /dev/null +++ b/debian/patches/features/all/line6/0015-staging-line6-eliminate-useless-NULL-checks.patch @@ -0,0 +1,101 @@ +From: Stefan Hajnoczi +Date: Sat, 10 Dec 2011 02:12:30 +0100 +Subject: [015/106] staging: line6: eliminate useless NULL checks + +commit 188e664502dc47f83775a556e6db52cd8cc0b5fc upstream. + +The line6 driver checks struct field addresses for NULL where it does +not make sense to do so. The struct has already been checked for NULL +and there is no value in checking the first field's address too. + +Suggested-by: Dan Carpenter +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Markus Grabner +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 6 +----- + drivers/staging/line6/podhd.c | 6 +----- + drivers/staging/line6/toneport.c | 6 +----- + drivers/staging/line6/variax.c | 6 +----- + 4 files changed, 4 insertions(+), 20 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index d9b3021..4dadc57 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -1149,14 +1149,10 @@ static struct snd_kcontrol_new pod_control_monitor = { + static void pod_destruct(struct usb_interface *interface) + { + struct usb_line6_pod *pod = usb_get_intfdata(interface); +- struct usb_line6 *line6; + + if (pod == NULL) + return; +- line6 = &pod->line6; +- if (line6 == NULL) +- return; +- line6_cleanup_audio(line6); ++ line6_cleanup_audio(&pod->line6); + + del_timer(&pod->startup_timer); + cancel_work_sync(&pod->startup_work); +diff --git a/drivers/staging/line6/podhd.c b/drivers/staging/line6/podhd.c +index 6c0f7f2..7ef4543 100644 +--- a/drivers/staging/line6/podhd.c ++++ b/drivers/staging/line6/podhd.c +@@ -80,14 +80,10 @@ static struct line6_pcm_properties podhd_pcm_properties = { + static void podhd_destruct(struct usb_interface *interface) + { + struct usb_line6_podhd *podhd = usb_get_intfdata(interface); +- struct usb_line6 *line6; + + if (podhd == NULL) + return; +- line6 = &podhd->line6; +- if (line6 == NULL) +- return; +- line6_cleanup_audio(line6); ++ line6_cleanup_audio(&podhd->line6); + } + + /* +diff --git a/drivers/staging/line6/toneport.c b/drivers/staging/line6/toneport.c +index 879e699..f310578 100644 +--- a/drivers/staging/line6/toneport.c ++++ b/drivers/staging/line6/toneport.c +@@ -295,14 +295,10 @@ static struct snd_kcontrol_new toneport_control_source = { + static void toneport_destruct(struct usb_interface *interface) + { + struct usb_line6_toneport *toneport = usb_get_intfdata(interface); +- struct usb_line6 *line6; + + if (toneport == NULL) + return; +- line6 = &toneport->line6; +- if (line6 == NULL) +- return; +- line6_cleanup_audio(line6); ++ line6_cleanup_audio(&toneport->line6); + } + + /* +diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c +index 81241cd..d366222 100644 +--- a/drivers/staging/line6/variax.c ++++ b/drivers/staging/line6/variax.c +@@ -572,14 +572,10 @@ static DEVICE_ATTR(raw2, S_IWUSR, line6_nop_read, variax_set_raw2); + static void variax_destruct(struct usb_interface *interface) + { + struct usb_line6_variax *variax = usb_get_intfdata(interface); +- struct usb_line6 *line6; + + if (variax == NULL) + return; +- line6 = &variax->line6; +- if (line6 == NULL) +- return; +- line6_cleanup_audio(line6); ++ line6_cleanup_audio(&variax->line6); + + del_timer(&variax->startup_timer1); + del_timer(&variax->startup_timer2); diff --git a/debian/patches/features/all/line6/0016-staging-line6-wait-for-urbs-in-snd_line6_prepare.patch b/debian/patches/features/all/line6/0016-staging-line6-wait-for-urbs-in-snd_line6_prepare.patch new file mode 100644 index 000000000..3fc8a41ae --- /dev/null +++ b/debian/patches/features/all/line6/0016-staging-line6-wait-for-urbs-in-snd_line6_prepare.patch @@ -0,0 +1,51 @@ +From: Stefan Hajnoczi +Date: Sat, 10 Dec 2011 02:12:31 +0100 +Subject: [016/106] staging: line6: wait for urbs in snd_line6_prepare() + +commit 665f3f506b1c2684d6f78d6d03c038d1712e561d upstream. + +The .trigger() pcm callbacks are not allowed to block and cannot wait +until urbs have completed. We need to ensure that stopping, preparing, +and then restarting a stream always works. + +Currently the driver will sometimes return -EBUSY when restarting the +stream because urbs have not completed yet. This can be triggered by +jackd from userspace. + +The solution is to wait on urbs in the .prepare() pcm callback since +blocking is allowed in that callback. This guarantees that all urbs are +quiesced and ready to be submitted when the start trigger callback is +invoked. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Markus Grabner +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pcm.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c +index c3e5002..68727b2 100644 +--- a/drivers/staging/line6/pcm.c ++++ b/drivers/staging/line6/pcm.c +@@ -474,6 +474,20 @@ int snd_line6_prepare(struct snd_pcm_substream *substream) + { + struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream); + ++ switch (substream->stream) { ++ case SNDRV_PCM_STREAM_PLAYBACK: ++ line6_unlink_wait_clear_audio_out_urbs(line6pcm); ++ break; ++ ++ case SNDRV_PCM_STREAM_CAPTURE: ++ line6_unlink_wait_clear_audio_in_urbs(line6pcm); ++ break; ++ ++ default: ++ MISSING_CASE; ++ } ++ ++ + if (!test_and_set_bit(BIT_PREPARED, &line6pcm->flags)) { + line6pcm->count_out = 0; + line6pcm->pos_out = 0; diff --git a/debian/patches/features/all/line6/0017-staging-line6-fixed-ALSA-PCM-interaction.patch b/debian/patches/features/all/line6/0017-staging-line6-fixed-ALSA-PCM-interaction.patch new file mode 100644 index 000000000..87bf61077 --- /dev/null +++ b/debian/patches/features/all/line6/0017-staging-line6-fixed-ALSA-PCM-interaction.patch @@ -0,0 +1,346 @@ +From: Markus Grabner +Date: Sat, 10 Dec 2011 02:12:32 +0100 +Subject: [017/106] staging: line6: fixed ALSA/PCM interaction + +commit 6b02a17ee5cd5d200dbe4a285a4e750f70884967 upstream. + +The PCM subsystem in the Line6 driver is mainly used for PCM playback and +capture by ALSA, but also has other tasks, most notably providing a +low-latency software monitor for devices which don't support hardware +monitoring (e.g., the TonePort series). This patch makes ALSA "play nicely" +with the other components, i.e., prevents it from resetting the isochronous +USB transfer while other PCM tasks (software monitoring) are running. + +Signed-off-by: Markus Grabner +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/capture.c | 46 ++++++++++++++++++++------- + drivers/staging/line6/capture.h | 2 ++ + drivers/staging/line6/pcm.c | 65 ++++++++++++++++++++++++++------------ + drivers/staging/line6/playback.c | 46 ++++++++++++++++++++------- + drivers/staging/line6/playback.h | 2 ++ + drivers/staging/line6/revision.h | 2 +- + 6 files changed, 118 insertions(+), 45 deletions(-) + +diff --git a/drivers/staging/line6/capture.c b/drivers/staging/line6/capture.c +index 8f59ff3..127f952 100644 +--- a/drivers/staging/line6/capture.c ++++ b/drivers/staging/line6/capture.c +@@ -193,6 +193,31 @@ void line6_capture_check_period(struct snd_line6_pcm *line6pcm, int length) + } + } + ++int line6_alloc_capture_buffer(struct snd_line6_pcm *line6pcm) ++{ ++ /* We may be invoked multiple times in a row so allocate once only */ ++ if (line6pcm->buffer_in) ++ return 0; ++ ++ line6pcm->buffer_in = ++ kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS * ++ line6pcm->max_packet_size, GFP_KERNEL); ++ ++ if (!line6pcm->buffer_in) { ++ dev_err(line6pcm->line6->ifcdev, ++ "cannot malloc capture buffer\n"); ++ return -ENOMEM; ++ } ++ ++ return 0; ++} ++ ++void line6_free_capture_buffer(struct snd_line6_pcm *line6pcm) ++{ ++ kfree(line6pcm->buffer_in); ++ line6pcm->buffer_in = NULL; ++} ++ + /* + * Callback for completed capture URB. + */ +@@ -316,16 +341,11 @@ static int snd_line6_capture_hw_params(struct snd_pcm_substream *substream, + } + /* -- [FD] end */ + +- /* We may be invoked multiple times in a row so allocate once only */ +- if (!line6pcm->buffer_in) +- line6pcm->buffer_in = +- kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS * +- line6pcm->max_packet_size, GFP_KERNEL); ++ if ((line6pcm->flags & MASK_CAPTURE) == 0) { ++ ret = line6_alloc_capture_buffer(line6pcm); + +- if (!line6pcm->buffer_in) { +- dev_err(line6pcm->line6->ifcdev, +- "cannot malloc capture buffer\n"); +- return -ENOMEM; ++ if (ret < 0) ++ return ret; + } + + ret = snd_pcm_lib_malloc_pages(substream, +@@ -342,9 +362,11 @@ static int snd_line6_capture_hw_free(struct snd_pcm_substream *substream) + { + struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream); + +- line6_unlink_wait_clear_audio_in_urbs(line6pcm); +- kfree(line6pcm->buffer_in); +- line6pcm->buffer_in = NULL; ++ if ((line6pcm->flags & MASK_CAPTURE) == 0) { ++ line6_unlink_wait_clear_audio_in_urbs(line6pcm); ++ line6_free_capture_buffer(line6pcm); ++ } ++ + return snd_pcm_lib_free_pages(substream); + } + +diff --git a/drivers/staging/line6/capture.h b/drivers/staging/line6/capture.h +index a7509fb..366cbaa 100644 +--- a/drivers/staging/line6/capture.h ++++ b/drivers/staging/line6/capture.h +@@ -19,11 +19,13 @@ + + extern struct snd_pcm_ops snd_line6_capture_ops; + ++extern int line6_alloc_capture_buffer(struct snd_line6_pcm *line6pcm); + extern void line6_capture_copy(struct snd_line6_pcm *line6pcm, char *fbuf, + int fsize); + extern void line6_capture_check_period(struct snd_line6_pcm *line6pcm, + int length); + extern int line6_create_audio_in_urbs(struct snd_line6_pcm *line6pcm); ++extern void line6_free_capture_buffer(struct snd_line6_pcm *line6pcm); + extern int line6_submit_audio_in_all_urbs(struct snd_line6_pcm *line6pcm); + extern void line6_unlink_audio_in_urbs(struct snd_line6_pcm *line6pcm); + extern void line6_unlink_wait_clear_audio_in_urbs(struct snd_line6_pcm +diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c +index 68727b2..37675e6 100644 +--- a/drivers/staging/line6/pcm.c ++++ b/drivers/staging/line6/pcm.c +@@ -86,17 +86,22 @@ static DEVICE_ATTR(impulse_period, S_IWUSR | S_IRUGO, pcm_get_impulse_period, + + #endif + ++static bool test_flags(unsigned long flags0, unsigned long flags1, ++ unsigned long mask) ++{ ++ return ((flags0 & mask) == 0) && ((flags1 & mask) != 0); ++} ++ + int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels) + { + unsigned long flags_old = + __sync_fetch_and_or(&line6pcm->flags, channels); + unsigned long flags_new = flags_old | channels; + int err = 0; +- ++ + line6pcm->prev_fbuf = NULL; + +- if (((flags_old & MASK_CAPTURE) == 0) && +- ((flags_new & MASK_CAPTURE) != 0)) { ++ if (test_flags(flags_old, flags_new, MASK_CAPTURE)) { + /* + Waiting for completion of active URBs in the stop handler is + a bug, we therefore report an error if capturing is restarted +@@ -105,34 +110,47 @@ int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels) + if (line6pcm->active_urb_in | line6pcm->unlink_urb_in) + return -EBUSY; + ++ if (!(flags_new & MASK_PCM_ALSA_CAPTURE)) { ++ err = line6_alloc_capture_buffer(line6pcm); ++ ++ if (err < 0) ++ goto pcm_start_error; ++ } ++ + line6pcm->count_in = 0; + line6pcm->prev_fsize = 0; + err = line6_submit_audio_in_all_urbs(line6pcm); + +- if (err < 0) { +- __sync_fetch_and_and(&line6pcm->flags, ~channels); +- return err; +- } ++ if (err < 0) ++ goto pcm_start_error; + } + +- if (((flags_old & MASK_PLAYBACK) == 0) && +- ((flags_new & MASK_PLAYBACK) != 0)) { ++ if (test_flags(flags_old, flags_new, MASK_PLAYBACK)) { + /* + See comment above regarding PCM restart. + */ + if (line6pcm->active_urb_out | line6pcm->unlink_urb_out) + return -EBUSY; + ++ if (!(flags_new & MASK_PCM_ALSA_PLAYBACK)) { ++ err = line6_alloc_playback_buffer(line6pcm); ++ ++ if (err < 0) ++ goto pcm_start_error; ++ } ++ + line6pcm->count_out = 0; + err = line6_submit_audio_out_all_urbs(line6pcm); + +- if (err < 0) { +- __sync_fetch_and_and(&line6pcm->flags, ~channels); +- return err; +- } ++ if (err < 0) ++ goto pcm_start_error; + } + + return 0; ++ ++pcm_start_error: ++ __sync_fetch_and_and(&line6pcm->flags, ~channels); ++ return err; + } + + int line6_pcm_stop(struct snd_line6_pcm *line6pcm, int channels) +@@ -141,14 +159,18 @@ int line6_pcm_stop(struct snd_line6_pcm *line6pcm, int channels) + __sync_fetch_and_and(&line6pcm->flags, ~channels); + unsigned long flags_new = flags_old & ~channels; + +- if (((flags_old & MASK_CAPTURE) != 0) && +- ((flags_new & MASK_CAPTURE) == 0)) { ++ if (test_flags(flags_new, flags_old, MASK_CAPTURE)) { + line6_unlink_audio_in_urbs(line6pcm); ++ ++ if (!(flags_old & MASK_PCM_ALSA_CAPTURE)) ++ line6_free_capture_buffer(line6pcm); + } + +- if (((flags_old & MASK_PLAYBACK) != 0) && +- ((flags_new & MASK_PLAYBACK) == 0)) { ++ if (test_flags(flags_new, flags_old, MASK_PLAYBACK)) { + line6_unlink_audio_out_urbs(line6pcm); ++ ++ if (!(flags_old & MASK_PCM_ALSA_PLAYBACK)) ++ line6_free_playback_buffer(line6pcm); + } + + return 0; +@@ -476,18 +498,21 @@ int snd_line6_prepare(struct snd_pcm_substream *substream) + + switch (substream->stream) { + case SNDRV_PCM_STREAM_PLAYBACK: +- line6_unlink_wait_clear_audio_out_urbs(line6pcm); ++ if ((line6pcm->flags & MASK_PLAYBACK) == 0) ++ line6_unlink_wait_clear_audio_out_urbs(line6pcm); ++ + break; + + case SNDRV_PCM_STREAM_CAPTURE: +- line6_unlink_wait_clear_audio_in_urbs(line6pcm); ++ if ((line6pcm->flags & MASK_CAPTURE) == 0) ++ line6_unlink_wait_clear_audio_in_urbs(line6pcm); ++ + break; + + default: + MISSING_CASE; + } + +- + if (!test_and_set_bit(BIT_PREPARED, &line6pcm->flags)) { + line6pcm->count_out = 0; + line6pcm->pos_out = 0; +diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c +index 9a51b92..4152db2 100644 +--- a/drivers/staging/line6/playback.c ++++ b/drivers/staging/line6/playback.c +@@ -351,6 +351,31 @@ void line6_unlink_wait_clear_audio_out_urbs(struct snd_line6_pcm *line6pcm) + wait_clear_audio_out_urbs(line6pcm); + } + ++int line6_alloc_playback_buffer(struct snd_line6_pcm *line6pcm) ++{ ++ /* We may be invoked multiple times in a row so allocate once only */ ++ if (line6pcm->buffer_out) ++ return 0; ++ ++ line6pcm->buffer_out = ++ kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS * ++ line6pcm->max_packet_size, GFP_KERNEL); ++ ++ if (!line6pcm->buffer_out) { ++ dev_err(line6pcm->line6->ifcdev, ++ "cannot malloc playback buffer\n"); ++ return -ENOMEM; ++ } ++ ++ return 0; ++} ++ ++void line6_free_playback_buffer(struct snd_line6_pcm *line6pcm) ++{ ++ kfree(line6pcm->buffer_out); ++ line6pcm->buffer_out = NULL; ++} ++ + /* + Callback for completed playback URB. + */ +@@ -459,16 +484,11 @@ static int snd_line6_playback_hw_params(struct snd_pcm_substream *substream, + } + /* -- [FD] end */ + +- /* We may be invoked multiple times in a row so allocate once only */ +- if (!line6pcm->buffer_out) +- line6pcm->buffer_out = +- kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS * +- line6pcm->max_packet_size, GFP_KERNEL); ++ if ((line6pcm->flags & MASK_PLAYBACK) == 0) { ++ ret = line6_alloc_playback_buffer(line6pcm); + +- if (!line6pcm->buffer_out) { +- dev_err(line6pcm->line6->ifcdev, +- "cannot malloc playback buffer\n"); +- return -ENOMEM; ++ if (ret < 0) ++ return ret; + } + + ret = snd_pcm_lib_malloc_pages(substream, +@@ -485,9 +505,11 @@ static int snd_line6_playback_hw_free(struct snd_pcm_substream *substream) + { + struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream); + +- line6_unlink_wait_clear_audio_out_urbs(line6pcm); +- kfree(line6pcm->buffer_out); +- line6pcm->buffer_out = NULL; ++ if ((line6pcm->flags & MASK_PLAYBACK) == 0) { ++ line6_unlink_wait_clear_audio_out_urbs(line6pcm); ++ line6_free_playback_buffer(line6pcm); ++ } ++ + return snd_pcm_lib_free_pages(substream); + } + +diff --git a/drivers/staging/line6/playback.h b/drivers/staging/line6/playback.h +index f2fc8c0..02487ff 100644 +--- a/drivers/staging/line6/playback.h ++++ b/drivers/staging/line6/playback.h +@@ -29,7 +29,9 @@ + + extern struct snd_pcm_ops snd_line6_playback_ops; + ++extern int line6_alloc_playback_buffer(struct snd_line6_pcm *line6pcm); + extern int line6_create_audio_out_urbs(struct snd_line6_pcm *line6pcm); ++extern void line6_free_playback_buffer(struct snd_line6_pcm *line6pcm); + extern int line6_submit_audio_out_all_urbs(struct snd_line6_pcm *line6pcm); + extern void line6_unlink_audio_out_urbs(struct snd_line6_pcm *line6pcm); + extern void line6_unlink_wait_clear_audio_out_urbs(struct snd_line6_pcm +diff --git a/drivers/staging/line6/revision.h b/drivers/staging/line6/revision.h +index 350d0df..b4eee2b 100644 +--- a/drivers/staging/line6/revision.h ++++ b/drivers/staging/line6/revision.h +@@ -1,4 +1,4 @@ + #ifndef DRIVER_REVISION + /* current subversion revision */ +-#define DRIVER_REVISION " (revision 690)" ++#define DRIVER_REVISION " (904)" + #endif diff --git a/debian/patches/features/all/line6/0018-staging-line6-removed-obsolete-code.patch b/debian/patches/features/all/line6/0018-staging-line6-removed-obsolete-code.patch new file mode 100644 index 000000000..e219fb9be --- /dev/null +++ b/debian/patches/features/all/line6/0018-staging-line6-removed-obsolete-code.patch @@ -0,0 +1,30 @@ +From: Markus Grabner +Date: Fri, 20 Jan 2012 00:09:07 +0100 +Subject: [018/106] staging: line6: removed obsolete code + +commit 3784129a9de3fc33ffe6c6ece906a9caa1c65fab upstream. + +Signed-off-by: Markus Grabner +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pcm.h | 9 --------- + 1 file changed, 9 deletions(-) + +diff --git a/drivers/staging/line6/pcm.h b/drivers/staging/line6/pcm.h +index 55d8297..47c6d69 100644 +--- a/drivers/staging/line6/pcm.h ++++ b/drivers/staging/line6/pcm.h +@@ -305,13 +305,4 @@ extern void line6_pcm_disconnect(struct snd_line6_pcm *line6pcm); + extern int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels); + extern int line6_pcm_stop(struct snd_line6_pcm *line6pcm, int channels); + +-#define PRINT_FRAME_DIFF(op) { \ +- static int diff_prev = 1000; \ +- int diff = line6pcm->last_frame_out - line6pcm->last_frame_in; \ +- if ((diff != diff_prev) && (abs(diff) < 100)) { \ +- printk(KERN_INFO "%s frame diff = %d\n", op, diff); \ +- diff_prev = diff; \ +- } \ +-} +- + #endif diff --git a/debian/patches/features/all/line6/0019-staging-line6-use-source-select-control-for-UX2-devi.patch b/debian/patches/features/all/line6/0019-staging-line6-use-source-select-control-for-UX2-devi.patch new file mode 100644 index 000000000..b74310b27 --- /dev/null +++ b/debian/patches/features/all/line6/0019-staging-line6-use-source-select-control-for-UX2-devi.patch @@ -0,0 +1,36 @@ +From: Markus Grabner +Date: Fri, 20 Jan 2012 00:09:08 +0100 +Subject: [019/106] staging: line6: use source select control for UX2 devices + +commit 12177acdecfcb538b86590036a56fc47b443e135 upstream. + +Signed-off-by: Markus Grabner +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/toneport.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/drivers/staging/line6/toneport.c b/drivers/staging/line6/toneport.c +index f310578..b776130 100644 +--- a/drivers/staging/line6/toneport.c ++++ b/drivers/staging/line6/toneport.c +@@ -320,7 +320,9 @@ static void toneport_setup(struct usb_line6_toneport *toneport) + /* initialize source select: */ + switch (usbdev->descriptor.idProduct) { + case LINE6_DEVID_TONEPORT_UX1: ++ case LINE6_DEVID_TONEPORT_UX2: + case LINE6_DEVID_PODSTUDIO_UX1: ++ case LINE6_DEVID_PODSTUDIO_UX2: + toneport_send_cmd(usbdev, + toneport_source_info[toneport->source].code, + 0x0000); +@@ -363,7 +365,9 @@ static int toneport_try_init(struct usb_interface *interface, + /* register source select control: */ + switch (usbdev->descriptor.idProduct) { + case LINE6_DEVID_TONEPORT_UX1: ++ case LINE6_DEVID_TONEPORT_UX2: + case LINE6_DEVID_PODSTUDIO_UX1: ++ case LINE6_DEVID_PODSTUDIO_UX2: + err = + snd_ctl_add(line6->card, + snd_ctl_new1(&toneport_control_source, diff --git a/debian/patches/features/all/line6/0020-staging-line6-separate-handling-of-buffer-allocation.patch b/debian/patches/features/all/line6/0020-staging-line6-separate-handling-of-buffer-allocation.patch new file mode 100644 index 000000000..f7ff81bd5 --- /dev/null +++ b/debian/patches/features/all/line6/0020-staging-line6-separate-handling-of-buffer-allocation.patch @@ -0,0 +1,893 @@ +From: Markus Grabner +Date: Fri, 20 Jan 2012 00:09:09 +0100 +Subject: [020/106] staging: line6: separate handling of buffer allocation and + stream startup + +commit 0ca54888060135806d5567f47a6ad54be5297b34 upstream. + +There are several features of the Line6 USB driver which require PCM +data to be exchanged with the device: +*) PCM playback and capture via ALSA +*) software monitoring (for devices without hardware monitoring) +*) optional impulse response measurement +However, from the device's point of view, there is just a single +capture and playback stream, which must be shared between these +subsystems. It is therefore necessary to maintain the state of the +subsystems with respect to PCM usage. We define several constants of +the form LINE6_BIT_PCM___ with the +following meanings: +*) is one of +-) ALSA: PCM playback and capture via ALSA +-) MONITOR: software monitoring +-) IMPULSE: optional impulse response measurement +*) is one of +-) PLAYBACK: audio output (from host to device) +-) CAPTURE: audio input (from device to host) +*) is one of +-) BUFFER: buffer required by PCM data stream +-) STREAM: actual PCM data stream + +The subsystems call line6_pcm_acquire() to acquire the (shared) +resources needed for a particular operation (e.g., allocate the buffer +for ALSA playback or start the capture stream for software monitoring). +When a resource is no longer needed, it is released by calling +line6_pcm_release(). Buffer allocation and stream startup are handled +separately to allow the ALSA kernel driver to perform them at +appropriate places (since the callback which starts a PCM stream is not +allowed to sleep). + +Signed-off-by: Markus Grabner +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/capture.c | 54 ++++--------- + drivers/staging/line6/capture.h | 2 +- + drivers/staging/line6/driver.c | 2 +- + drivers/staging/line6/pcm.c | 109 +++++++++++++++++--------- + drivers/staging/line6/pcm.h | 158 ++++++++++++++++++++++++++++---------- + drivers/staging/line6/playback.c | 68 ++++++---------- + drivers/staging/line6/playback.h | 2 +- + drivers/staging/line6/toneport.c | 8 +- + drivers/staging/line6/usbdefs.h | 44 +++++------ + 9 files changed, 254 insertions(+), 193 deletions(-) + +diff --git a/drivers/staging/line6/capture.c b/drivers/staging/line6/capture.c +index 127f952..c85c5b6 100644 +--- a/drivers/staging/line6/capture.c ++++ b/drivers/staging/line6/capture.c +@@ -107,7 +107,7 @@ void line6_unlink_audio_in_urbs(struct snd_line6_pcm *line6pcm) + Wait until unlinking of all currently active capture URBs has been + finished. + */ +-static void wait_clear_audio_in_urbs(struct snd_line6_pcm *line6pcm) ++void line6_wait_clear_audio_in_urbs(struct snd_line6_pcm *line6pcm) + { + int timeout = HZ; + unsigned int i; +@@ -134,7 +134,7 @@ static void wait_clear_audio_in_urbs(struct snd_line6_pcm *line6pcm) + void line6_unlink_wait_clear_audio_in_urbs(struct snd_line6_pcm *line6pcm) + { + line6_unlink_audio_in_urbs(line6pcm); +- wait_clear_audio_in_urbs(line6pcm); ++ line6_wait_clear_audio_in_urbs(line6pcm); + } + + /* +@@ -193,25 +193,6 @@ void line6_capture_check_period(struct snd_line6_pcm *line6pcm, int length) + } + } + +-int line6_alloc_capture_buffer(struct snd_line6_pcm *line6pcm) +-{ +- /* We may be invoked multiple times in a row so allocate once only */ +- if (line6pcm->buffer_in) +- return 0; +- +- line6pcm->buffer_in = +- kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS * +- line6pcm->max_packet_size, GFP_KERNEL); +- +- if (!line6pcm->buffer_in) { +- dev_err(line6pcm->line6->ifcdev, +- "cannot malloc capture buffer\n"); +- return -ENOMEM; +- } +- +- return 0; +-} +- + void line6_free_capture_buffer(struct snd_line6_pcm *line6pcm) + { + kfree(line6pcm->buffer_in); +@@ -273,9 +254,9 @@ static void audio_in_callback(struct urb *urb) + line6pcm->prev_fsize = fsize; + + #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE +- if (!(line6pcm->flags & MASK_PCM_IMPULSE)) ++ if (!(line6pcm->flags & LINE6_BITS_PCM_IMPULSE)) + #endif +- if (test_bit(BIT_PCM_ALSA_CAPTURE, &line6pcm->flags) ++ if (test_bit(LINE6_INDEX_PCM_ALSA_CAPTURE_STREAM, &line6pcm->flags) + && (fsize > 0)) + line6_capture_copy(line6pcm, fbuf, fsize); + } +@@ -291,9 +272,9 @@ static void audio_in_callback(struct urb *urb) + submit_audio_in_urb(line6pcm); + + #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE +- if (!(line6pcm->flags & MASK_PCM_IMPULSE)) ++ if (!(line6pcm->flags & LINE6_BITS_PCM_IMPULSE)) + #endif +- if (test_bit(BIT_PCM_ALSA_CAPTURE, &line6pcm->flags)) ++ if (test_bit(LINE6_INDEX_PCM_ALSA_CAPTURE_STREAM, &line6pcm->flags)) + line6_capture_check_period(line6pcm, length); + } + } +@@ -341,17 +322,17 @@ static int snd_line6_capture_hw_params(struct snd_pcm_substream *substream, + } + /* -- [FD] end */ + +- if ((line6pcm->flags & MASK_CAPTURE) == 0) { +- ret = line6_alloc_capture_buffer(line6pcm); ++ ret = line6_pcm_acquire(line6pcm, LINE6_BIT_PCM_ALSA_CAPTURE_BUFFER); + +- if (ret < 0) +- return ret; +- } ++ if (ret < 0) ++ return ret; + + ret = snd_pcm_lib_malloc_pages(substream, + params_buffer_bytes(hw_params)); +- if (ret < 0) ++ if (ret < 0) { ++ line6_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_CAPTURE_BUFFER); + return ret; ++ } + + line6pcm->period_in = params_period_bytes(hw_params); + return 0; +@@ -361,12 +342,7 @@ static int snd_line6_capture_hw_params(struct snd_pcm_substream *substream, + static int snd_line6_capture_hw_free(struct snd_pcm_substream *substream) + { + struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream); +- +- if ((line6pcm->flags & MASK_CAPTURE) == 0) { +- line6_unlink_wait_clear_audio_in_urbs(line6pcm); +- line6_free_capture_buffer(line6pcm); +- } +- ++ line6_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_CAPTURE_BUFFER); + return snd_pcm_lib_free_pages(substream); + } + +@@ -380,7 +356,7 @@ int snd_line6_capture_trigger(struct snd_line6_pcm *line6pcm, int cmd) + #ifdef CONFIG_PM + case SNDRV_PCM_TRIGGER_RESUME: + #endif +- err = line6_pcm_start(line6pcm, MASK_PCM_ALSA_CAPTURE); ++ err = line6_pcm_acquire(line6pcm, LINE6_BIT_PCM_ALSA_CAPTURE_STREAM); + + if (err < 0) + return err; +@@ -391,7 +367,7 @@ int snd_line6_capture_trigger(struct snd_line6_pcm *line6pcm, int cmd) + #ifdef CONFIG_PM + case SNDRV_PCM_TRIGGER_SUSPEND: + #endif +- err = line6_pcm_stop(line6pcm, MASK_PCM_ALSA_CAPTURE); ++ err = line6_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_CAPTURE_STREAM); + + if (err < 0) + return err; +diff --git a/drivers/staging/line6/capture.h b/drivers/staging/line6/capture.h +index 366cbaa..4157bcb 100644 +--- a/drivers/staging/line6/capture.h ++++ b/drivers/staging/line6/capture.h +@@ -19,7 +19,6 @@ + + extern struct snd_pcm_ops snd_line6_capture_ops; + +-extern int line6_alloc_capture_buffer(struct snd_line6_pcm *line6pcm); + extern void line6_capture_copy(struct snd_line6_pcm *line6pcm, char *fbuf, + int fsize); + extern void line6_capture_check_period(struct snd_line6_pcm *line6pcm, +@@ -30,6 +29,7 @@ extern int line6_submit_audio_in_all_urbs(struct snd_line6_pcm *line6pcm); + extern void line6_unlink_audio_in_urbs(struct snd_line6_pcm *line6pcm); + extern void line6_unlink_wait_clear_audio_in_urbs(struct snd_line6_pcm + *line6pcm); ++extern void line6_wait_clear_audio_in_urbs(struct snd_line6_pcm *line6pcm); + extern int snd_line6_capture_trigger(struct snd_line6_pcm *line6pcm, int cmd); + + #endif +diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c +index 6a1959e..e8023af 100644 +--- a/drivers/staging/line6/driver.c ++++ b/drivers/staging/line6/driver.c +@@ -1346,7 +1346,7 @@ static void __exit line6_exit(void) + if (line6pcm == NULL) + continue; + +- line6_pcm_stop(line6pcm, ~0); ++ line6_pcm_release(line6pcm, ~0); + } + + usb_deregister(&line6_driver); +diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c +index 37675e6..90d2d44 100644 +--- a/drivers/staging/line6/pcm.c ++++ b/drivers/staging/line6/pcm.c +@@ -52,9 +52,9 @@ static ssize_t pcm_set_impulse_volume(struct device *dev, + line6pcm->impulse_volume = value; + + if (value > 0) +- line6_pcm_start(line6pcm, MASK_PCM_IMPULSE); ++ line6_pcm_acquire(line6pcm, LINE6_BITS_PCM_IMPULSE); + else +- line6_pcm_stop(line6pcm, MASK_PCM_IMPULSE); ++ line6_pcm_release(line6pcm, LINE6_BITS_PCM_IMPULSE); + + return count; + } +@@ -92,29 +92,43 @@ static bool test_flags(unsigned long flags0, unsigned long flags1, + return ((flags0 & mask) == 0) && ((flags1 & mask) != 0); + } + +-int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels) ++int line6_pcm_acquire(struct snd_line6_pcm *line6pcm, int channels) + { + unsigned long flags_old = + __sync_fetch_and_or(&line6pcm->flags, channels); + unsigned long flags_new = flags_old | channels; ++ unsigned long flags_final = flags_old; + int err = 0; + + line6pcm->prev_fbuf = NULL; + +- if (test_flags(flags_old, flags_new, MASK_CAPTURE)) { ++ if (test_flags(flags_old, flags_new, LINE6_BITS_CAPTURE_BUFFER)) { ++ /* We may be invoked multiple times in a row so allocate once only */ ++ if (!line6pcm->buffer_in) { ++ line6pcm->buffer_in = ++ kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS * ++ line6pcm->max_packet_size, GFP_KERNEL); ++ ++ if (!line6pcm->buffer_in) { ++ dev_err(line6pcm->line6->ifcdev, ++ "cannot malloc capture buffer\n"); ++ err = -ENOMEM; ++ goto pcm_acquire_error; ++ } ++ ++ flags_final |= channels & LINE6_BITS_CAPTURE_BUFFER; ++ } ++ } ++ ++ if (test_flags(flags_old, flags_new, LINE6_BITS_CAPTURE_STREAM)) { + /* + Waiting for completion of active URBs in the stop handler is + a bug, we therefore report an error if capturing is restarted + too soon. + */ +- if (line6pcm->active_urb_in | line6pcm->unlink_urb_in) ++ if (line6pcm->active_urb_in | line6pcm->unlink_urb_in) { ++ dev_err(line6pcm->line6->ifcdev, "Device not yet ready\n"); + return -EBUSY; +- +- if (!(flags_new & MASK_PCM_ALSA_CAPTURE)) { +- err = line6_alloc_capture_buffer(line6pcm); +- +- if (err < 0) +- goto pcm_start_error; + } + + line6pcm->count_in = 0; +@@ -122,55 +136,78 @@ int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels) + err = line6_submit_audio_in_all_urbs(line6pcm); + + if (err < 0) +- goto pcm_start_error; ++ goto pcm_acquire_error; ++ ++ flags_final |= channels & LINE6_BITS_CAPTURE_STREAM; + } + +- if (test_flags(flags_old, flags_new, MASK_PLAYBACK)) { +- /* +- See comment above regarding PCM restart. +- */ +- if (line6pcm->active_urb_out | line6pcm->unlink_urb_out) +- return -EBUSY; ++ if (test_flags(flags_old, flags_new, LINE6_BITS_PLAYBACK_BUFFER)) { ++ /* We may be invoked multiple times in a row so allocate once only */ ++ if (!line6pcm->buffer_out) { ++ line6pcm->buffer_out = ++ kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS * ++ line6pcm->max_packet_size, GFP_KERNEL); ++ ++ if (!line6pcm->buffer_out) { ++ dev_err(line6pcm->line6->ifcdev, ++ "cannot malloc playback buffer\n"); ++ err = -ENOMEM; ++ goto pcm_acquire_error; ++ } + +- if (!(flags_new & MASK_PCM_ALSA_PLAYBACK)) { +- err = line6_alloc_playback_buffer(line6pcm); ++ flags_final |= channels & LINE6_BITS_PLAYBACK_BUFFER; ++ } ++ } + +- if (err < 0) +- goto pcm_start_error; ++ if (test_flags(flags_old, flags_new, LINE6_BITS_PLAYBACK_STREAM)) { ++ /* ++ See comment above regarding PCM restart. ++ */ ++ if (line6pcm->active_urb_out | line6pcm->unlink_urb_out) { ++ dev_err(line6pcm->line6->ifcdev, "Device not yet ready\n"); ++ return -EBUSY; + } + + line6pcm->count_out = 0; + err = line6_submit_audio_out_all_urbs(line6pcm); + + if (err < 0) +- goto pcm_start_error; ++ goto pcm_acquire_error; ++ ++ flags_final |= channels & LINE6_BITS_PLAYBACK_STREAM; + } + + return 0; + +-pcm_start_error: +- __sync_fetch_and_and(&line6pcm->flags, ~channels); ++pcm_acquire_error: ++ /* ++ If not all requested resources/streams could be obtained, release ++ those which were successfully obtained (if any). ++ */ ++ line6_pcm_release(line6pcm, flags_final & channels); + return err; + } + +-int line6_pcm_stop(struct snd_line6_pcm *line6pcm, int channels) ++int line6_pcm_release(struct snd_line6_pcm *line6pcm, int channels) + { + unsigned long flags_old = + __sync_fetch_and_and(&line6pcm->flags, ~channels); + unsigned long flags_new = flags_old & ~channels; + +- if (test_flags(flags_new, flags_old, MASK_CAPTURE)) { ++ if (test_flags(flags_new, flags_old, LINE6_BITS_CAPTURE_STREAM)) + line6_unlink_audio_in_urbs(line6pcm); + +- if (!(flags_old & MASK_PCM_ALSA_CAPTURE)) +- line6_free_capture_buffer(line6pcm); ++ if (test_flags(flags_new, flags_old, LINE6_BITS_CAPTURE_BUFFER)) { ++ line6_wait_clear_audio_in_urbs(line6pcm); ++ line6_free_capture_buffer(line6pcm); + } + +- if (test_flags(flags_new, flags_old, MASK_PLAYBACK)) { ++ if (test_flags(flags_new, flags_old, LINE6_BITS_PLAYBACK_STREAM)) + line6_unlink_audio_out_urbs(line6pcm); + +- if (!(flags_old & MASK_PCM_ALSA_PLAYBACK)) +- line6_free_playback_buffer(line6pcm); ++ if (test_flags(flags_new, flags_old, LINE6_BITS_PLAYBACK_BUFFER)) { ++ line6_wait_clear_audio_out_urbs(line6pcm); ++ line6_free_playback_buffer(line6pcm); + } + + return 0; +@@ -185,7 +222,7 @@ int snd_line6_trigger(struct snd_pcm_substream *substream, int cmd) + unsigned long flags; + + spin_lock_irqsave(&line6pcm->lock_trigger, flags); +- clear_bit(BIT_PREPARED, &line6pcm->flags); ++ clear_bit(LINE6_INDEX_PREPARED, &line6pcm->flags); + + snd_pcm_group_for_each_entry(s, substream) { + switch (s->stream) { +@@ -498,13 +535,13 @@ int snd_line6_prepare(struct snd_pcm_substream *substream) + + switch (substream->stream) { + case SNDRV_PCM_STREAM_PLAYBACK: +- if ((line6pcm->flags & MASK_PLAYBACK) == 0) ++ if ((line6pcm->flags & LINE6_BITS_PLAYBACK_STREAM) == 0) + line6_unlink_wait_clear_audio_out_urbs(line6pcm); + + break; + + case SNDRV_PCM_STREAM_CAPTURE: +- if ((line6pcm->flags & MASK_CAPTURE) == 0) ++ if ((line6pcm->flags & LINE6_BITS_CAPTURE_STREAM) == 0) + line6_unlink_wait_clear_audio_in_urbs(line6pcm); + + break; +@@ -513,7 +550,7 @@ int snd_line6_prepare(struct snd_pcm_substream *substream) + MISSING_CASE; + } + +- if (!test_and_set_bit(BIT_PREPARED, &line6pcm->flags)) { ++ if (!test_and_set_bit(LINE6_INDEX_PREPARED, &line6pcm->flags)) { + line6pcm->count_out = 0; + line6pcm->pos_out = 0; + line6pcm->pos_out_done = 0; +diff --git a/drivers/staging/line6/pcm.h b/drivers/staging/line6/pcm.h +index 47c6d69..5210ec8 100644 +--- a/drivers/staging/line6/pcm.h ++++ b/drivers/staging/line6/pcm.h +@@ -46,57 +46,131 @@ + (line6pcm->pcm->streams[stream].substream) + + /* +- PCM mode bits and masks. +- "ALSA": operations triggered by applications via ALSA +- "MONITOR": software monitoring +- "IMPULSE": optional impulse response operation ++ PCM mode bits. ++ ++ There are several features of the Line6 USB driver which require PCM ++ data to be exchanged with the device: ++ *) PCM playback and capture via ALSA ++ *) software monitoring (for devices without hardware monitoring) ++ *) optional impulse response measurement ++ However, from the device's point of view, there is just a single ++ capture and playback stream, which must be shared between these ++ subsystems. It is therefore necessary to maintain the state of the ++ subsystems with respect to PCM usage. We define several constants of ++ the form LINE6_BIT_PCM___ with the ++ following meanings: ++ *) is one of ++ -) ALSA: PCM playback and capture via ALSA ++ -) MONITOR: software monitoring ++ -) IMPULSE: optional impulse response measurement ++ *) is one of ++ -) PLAYBACK: audio output (from host to device) ++ -) CAPTURE: audio input (from device to host) ++ *) is one of ++ -) BUFFER: buffer required by PCM data stream ++ -) STREAM: actual PCM data stream ++ ++ The subsystems call line6_pcm_acquire() to acquire the (shared) ++ resources needed for a particular operation (e.g., allocate the buffer ++ for ALSA playback or start the capture stream for software monitoring). ++ When a resource is no longer needed, it is released by calling ++ line6_pcm_release(). Buffer allocation and stream startup are handled ++ separately to allow the ALSA kernel driver to perform them at ++ appropriate places (since the callback which starts a PCM stream is not ++ allowed to sleep). + */ + enum { +- /* individual bits: */ +- BIT_PCM_ALSA_PLAYBACK, +- BIT_PCM_ALSA_CAPTURE, +- BIT_PCM_MONITOR_PLAYBACK, +- BIT_PCM_MONITOR_CAPTURE, ++ /* individual bit indices: */ ++ LINE6_INDEX_PCM_ALSA_PLAYBACK_BUFFER, ++ LINE6_INDEX_PCM_ALSA_PLAYBACK_STREAM, ++ LINE6_INDEX_PCM_ALSA_CAPTURE_BUFFER, ++ LINE6_INDEX_PCM_ALSA_CAPTURE_STREAM, ++ LINE6_INDEX_PCM_MONITOR_PLAYBACK_BUFFER, ++ LINE6_INDEX_PCM_MONITOR_PLAYBACK_STREAM, ++ LINE6_INDEX_PCM_MONITOR_CAPTURE_BUFFER, ++ LINE6_INDEX_PCM_MONITOR_CAPTURE_STREAM, + #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE +- BIT_PCM_IMPULSE_PLAYBACK, +- BIT_PCM_IMPULSE_CAPTURE, ++ LINE6_INDEX_PCM_IMPULSE_PLAYBACK_BUFFER, ++ LINE6_INDEX_PCM_IMPULSE_PLAYBACK_STREAM, ++ LINE6_INDEX_PCM_IMPULSE_CAPTURE_BUFFER, ++ LINE6_INDEX_PCM_IMPULSE_CAPTURE_STREAM, + #endif +- BIT_PAUSE_PLAYBACK, +- BIT_PREPARED, +- +- /* individual masks: */ +-/* *INDENT-OFF* */ +- MASK_PCM_ALSA_PLAYBACK = 1 << BIT_PCM_ALSA_PLAYBACK, +- MASK_PCM_ALSA_CAPTURE = 1 << BIT_PCM_ALSA_CAPTURE, +- MASK_PCM_MONITOR_PLAYBACK = 1 << BIT_PCM_MONITOR_PLAYBACK, +- MASK_PCM_MONITOR_CAPTURE = 1 << BIT_PCM_MONITOR_CAPTURE, ++ LINE6_INDEX_PAUSE_PLAYBACK, ++ LINE6_INDEX_PREPARED, ++ ++ /* individual bit masks: */ ++ LINE6_BIT(PCM_ALSA_PLAYBACK_BUFFER), ++ LINE6_BIT(PCM_ALSA_PLAYBACK_STREAM), ++ LINE6_BIT(PCM_ALSA_CAPTURE_BUFFER), ++ LINE6_BIT(PCM_ALSA_CAPTURE_STREAM), ++ LINE6_BIT(PCM_MONITOR_PLAYBACK_BUFFER), ++ LINE6_BIT(PCM_MONITOR_PLAYBACK_STREAM), ++ LINE6_BIT(PCM_MONITOR_CAPTURE_BUFFER), ++ LINE6_BIT(PCM_MONITOR_CAPTURE_STREAM), + #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE +- MASK_PCM_IMPULSE_PLAYBACK = 1 << BIT_PCM_IMPULSE_PLAYBACK, +- MASK_PCM_IMPULSE_CAPTURE = 1 << BIT_PCM_IMPULSE_CAPTURE, ++ LINE6_BIT(PCM_IMPULSE_PLAYBACK_BUFFER), ++ LINE6_BIT(PCM_IMPULSE_PLAYBACK_STREAM), ++ LINE6_BIT(PCM_IMPULSE_CAPTURE_BUFFER), ++ LINE6_BIT(PCM_IMPULSE_CAPTURE_STREAM), + #endif +- MASK_PAUSE_PLAYBACK = 1 << BIT_PAUSE_PLAYBACK, +- MASK_PREPARED = 1 << BIT_PREPARED, +-/* *INDENT-ON* */ ++ LINE6_BIT(PAUSE_PLAYBACK), ++ LINE6_BIT(PREPARED), + +- /* combined masks (by operation): */ +- MASK_PCM_ALSA = MASK_PCM_ALSA_PLAYBACK | MASK_PCM_ALSA_CAPTURE, +- MASK_PCM_MONITOR = MASK_PCM_MONITOR_PLAYBACK | MASK_PCM_MONITOR_CAPTURE, ++ /* combined bit masks (by operation): */ ++ LINE6_BITS_PCM_ALSA_BUFFER = ++ LINE6_BIT_PCM_ALSA_PLAYBACK_BUFFER | ++ LINE6_BIT_PCM_ALSA_CAPTURE_BUFFER, ++ ++ LINE6_BITS_PCM_ALSA_STREAM = ++ LINE6_BIT_PCM_ALSA_PLAYBACK_STREAM | ++ LINE6_BIT_PCM_ALSA_CAPTURE_STREAM, ++ ++ LINE6_BITS_PCM_MONITOR = ++ LINE6_BIT_PCM_MONITOR_PLAYBACK_BUFFER | ++ LINE6_BIT_PCM_MONITOR_PLAYBACK_STREAM | ++ LINE6_BIT_PCM_MONITOR_CAPTURE_BUFFER | ++ LINE6_BIT_PCM_MONITOR_CAPTURE_STREAM, ++ ++#ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE ++ LINE6_BITS_PCM_IMPULSE = ++ LINE6_BIT_PCM_IMPULSE_PLAYBACK_BUFFER | ++ LINE6_BIT_PCM_IMPULSE_PLAYBACK_STREAM | ++ LINE6_BIT_PCM_IMPULSE_CAPTURE_BUFFER | ++ LINE6_BIT_PCM_IMPULSE_CAPTURE_STREAM, ++#endif ++ ++ /* combined bit masks (by direction): */ ++ LINE6_BITS_PLAYBACK_BUFFER = ++#ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE ++ LINE6_BIT_PCM_IMPULSE_PLAYBACK_BUFFER | ++#endif ++ LINE6_BIT_PCM_ALSA_PLAYBACK_BUFFER | ++ LINE6_BIT_PCM_MONITOR_PLAYBACK_BUFFER , ++ ++ LINE6_BITS_PLAYBACK_STREAM = ++#ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE ++ LINE6_BIT_PCM_IMPULSE_PLAYBACK_STREAM | ++#endif ++ LINE6_BIT_PCM_ALSA_PLAYBACK_STREAM | ++ LINE6_BIT_PCM_MONITOR_PLAYBACK_STREAM , ++ ++ LINE6_BITS_CAPTURE_BUFFER = + #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE +- MASK_PCM_IMPULSE = MASK_PCM_IMPULSE_PLAYBACK | MASK_PCM_IMPULSE_CAPTURE, ++ LINE6_BIT_PCM_IMPULSE_CAPTURE_BUFFER | + #endif ++ LINE6_BIT_PCM_ALSA_CAPTURE_BUFFER | ++ LINE6_BIT_PCM_MONITOR_CAPTURE_BUFFER , + +- /* combined masks (by direction): */ ++ LINE6_BITS_CAPTURE_STREAM = + #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE +- MASK_PLAYBACK = +- MASK_PCM_ALSA_PLAYBACK | MASK_PCM_MONITOR_PLAYBACK | +- MASK_PCM_IMPULSE_PLAYBACK, +- MASK_CAPTURE = +- MASK_PCM_ALSA_CAPTURE | MASK_PCM_MONITOR_CAPTURE | +- MASK_PCM_IMPULSE_CAPTURE +-#else +- MASK_PLAYBACK = MASK_PCM_ALSA_PLAYBACK | MASK_PCM_MONITOR_PLAYBACK, +- MASK_CAPTURE = MASK_PCM_ALSA_CAPTURE | MASK_PCM_MONITOR_CAPTURE ++ LINE6_BIT_PCM_IMPULSE_CAPTURE_STREAM | + #endif ++ LINE6_BIT_PCM_ALSA_CAPTURE_STREAM | ++ LINE6_BIT_PCM_MONITOR_CAPTURE_STREAM, ++ ++ LINE6_BITS_STREAM = ++ LINE6_BITS_PLAYBACK_STREAM | ++ LINE6_BITS_CAPTURE_STREAM + }; + + struct line6_pcm_properties { +@@ -290,7 +364,7 @@ struct snd_line6_pcm { + #endif + + /** +- Several status bits (see BIT_*). ++ Several status bits (see LINE6_BIT_*). + */ + unsigned long flags; + +@@ -302,7 +376,7 @@ extern int line6_init_pcm(struct usb_line6 *line6, + extern int snd_line6_trigger(struct snd_pcm_substream *substream, int cmd); + extern int snd_line6_prepare(struct snd_pcm_substream *substream); + extern void line6_pcm_disconnect(struct snd_line6_pcm *line6pcm); +-extern int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels); +-extern int line6_pcm_stop(struct snd_line6_pcm *line6pcm, int channels); ++extern int line6_pcm_acquire(struct snd_line6_pcm *line6pcm, int channels); ++extern int line6_pcm_release(struct snd_line6_pcm *line6pcm, int channels); + + #endif +diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c +index 4152db2..a0ab9d0 100644 +--- a/drivers/staging/line6/playback.c ++++ b/drivers/staging/line6/playback.c +@@ -166,7 +166,7 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm) + struct usb_iso_packet_descriptor *fout = + &urb_out->iso_frame_desc[i]; + +- if (line6pcm->flags & MASK_CAPTURE) ++ if (line6pcm->flags & LINE6_BITS_CAPTURE_STREAM) + fsize = line6pcm->prev_fsize; + + if (fsize == 0) { +@@ -196,8 +196,8 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm) + urb_out->transfer_buffer_length = urb_size; + urb_out->context = line6pcm; + +- if (test_bit(BIT_PCM_ALSA_PLAYBACK, &line6pcm->flags) && +- !test_bit(BIT_PAUSE_PLAYBACK, &line6pcm->flags)) { ++ if (test_bit(LINE6_INDEX_PCM_ALSA_PLAYBACK_STREAM, &line6pcm->flags) && ++ !test_bit(LINE6_INDEX_PAUSE_PLAYBACK, &line6pcm->flags)) { + struct snd_pcm_runtime *runtime = + get_substream(line6pcm, SNDRV_PCM_STREAM_PLAYBACK)->runtime; + +@@ -238,10 +238,10 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm) + + if (line6pcm->prev_fbuf != NULL) { + #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE +- if (line6pcm->flags & MASK_PCM_IMPULSE) { ++ if (line6pcm->flags & LINE6_BITS_PCM_IMPULSE) { + create_impulse_test_signal(line6pcm, urb_out, + bytes_per_frame); +- if (line6pcm->flags & MASK_PCM_ALSA_CAPTURE) { ++ if (line6pcm->flags & LINE6_BIT_PCM_ALSA_CAPTURE_STREAM) { + line6_capture_copy(line6pcm, + urb_out->transfer_buffer, + urb_out-> +@@ -254,8 +254,8 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm) + if (! + (line6pcm->line6-> + properties->capabilities & LINE6_BIT_HWMON) +-&& (line6pcm->flags & MASK_PLAYBACK) +-&& (line6pcm->flags & MASK_CAPTURE)) ++ && (line6pcm->flags & LINE6_BITS_PLAYBACK_STREAM) ++ && (line6pcm->flags & LINE6_BITS_CAPTURE_STREAM)) + add_monitor_signal(urb_out, line6pcm->prev_fbuf, + line6pcm->volume_monitor, + bytes_per_frame); +@@ -321,7 +321,7 @@ void line6_unlink_audio_out_urbs(struct snd_line6_pcm *line6pcm) + /* + Wait until unlinking of all currently active playback URBs has been finished. + */ +-static void wait_clear_audio_out_urbs(struct snd_line6_pcm *line6pcm) ++void line6_wait_clear_audio_out_urbs(struct snd_line6_pcm *line6pcm) + { + int timeout = HZ; + unsigned int i; +@@ -348,26 +348,7 @@ static void wait_clear_audio_out_urbs(struct snd_line6_pcm *line6pcm) + void line6_unlink_wait_clear_audio_out_urbs(struct snd_line6_pcm *line6pcm) + { + line6_unlink_audio_out_urbs(line6pcm); +- wait_clear_audio_out_urbs(line6pcm); +-} +- +-int line6_alloc_playback_buffer(struct snd_line6_pcm *line6pcm) +-{ +- /* We may be invoked multiple times in a row so allocate once only */ +- if (line6pcm->buffer_out) +- return 0; +- +- line6pcm->buffer_out = +- kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS * +- line6pcm->max_packet_size, GFP_KERNEL); +- +- if (!line6pcm->buffer_out) { +- dev_err(line6pcm->line6->ifcdev, +- "cannot malloc playback buffer\n"); +- return -ENOMEM; +- } +- +- return 0; ++ line6_wait_clear_audio_out_urbs(line6pcm); + } + + void line6_free_playback_buffer(struct snd_line6_pcm *line6pcm) +@@ -407,7 +388,7 @@ static void audio_out_callback(struct urb *urb) + + spin_lock_irqsave(&line6pcm->lock_audio_out, flags); + +- if (test_bit(BIT_PCM_ALSA_PLAYBACK, &line6pcm->flags)) { ++ if (test_bit(LINE6_INDEX_PCM_ALSA_PLAYBACK_STREAM, &line6pcm->flags)) { + struct snd_pcm_runtime *runtime = substream->runtime; + line6pcm->pos_out_done += + length / line6pcm->properties->bytes_per_frame; +@@ -432,7 +413,7 @@ static void audio_out_callback(struct urb *urb) + if (!shutdown) { + submit_audio_out_urb(line6pcm); + +- if (test_bit(BIT_PCM_ALSA_PLAYBACK, &line6pcm->flags)) { ++ if (test_bit(LINE6_INDEX_PCM_ALSA_PLAYBACK_STREAM, &line6pcm->flags)) { + line6pcm->bytes_out += length; + if (line6pcm->bytes_out >= line6pcm->period_out) { + line6pcm->bytes_out %= line6pcm->period_out; +@@ -484,17 +465,17 @@ static int snd_line6_playback_hw_params(struct snd_pcm_substream *substream, + } + /* -- [FD] end */ + +- if ((line6pcm->flags & MASK_PLAYBACK) == 0) { +- ret = line6_alloc_playback_buffer(line6pcm); ++ ret = line6_pcm_acquire(line6pcm, LINE6_BIT_PCM_ALSA_PLAYBACK_BUFFER); + +- if (ret < 0) +- return ret; +- } ++ if (ret < 0) ++ return ret; + + ret = snd_pcm_lib_malloc_pages(substream, + params_buffer_bytes(hw_params)); +- if (ret < 0) ++ if (ret < 0) { ++ line6_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_PLAYBACK_BUFFER); + return ret; ++ } + + line6pcm->period_out = params_period_bytes(hw_params); + return 0; +@@ -504,12 +485,7 @@ static int snd_line6_playback_hw_params(struct snd_pcm_substream *substream, + static int snd_line6_playback_hw_free(struct snd_pcm_substream *substream) + { + struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream); +- +- if ((line6pcm->flags & MASK_PLAYBACK) == 0) { +- line6_unlink_wait_clear_audio_out_urbs(line6pcm); +- line6_free_playback_buffer(line6pcm); +- } +- ++ line6_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_PLAYBACK_BUFFER); + return snd_pcm_lib_free_pages(substream); + } + +@@ -523,7 +499,7 @@ int snd_line6_playback_trigger(struct snd_line6_pcm *line6pcm, int cmd) + #ifdef CONFIG_PM + case SNDRV_PCM_TRIGGER_RESUME: + #endif +- err = line6_pcm_start(line6pcm, MASK_PCM_ALSA_PLAYBACK); ++ err = line6_pcm_acquire(line6pcm, LINE6_BIT_PCM_ALSA_PLAYBACK_STREAM); + + if (err < 0) + return err; +@@ -534,7 +510,7 @@ int snd_line6_playback_trigger(struct snd_line6_pcm *line6pcm, int cmd) + #ifdef CONFIG_PM + case SNDRV_PCM_TRIGGER_SUSPEND: + #endif +- err = line6_pcm_stop(line6pcm, MASK_PCM_ALSA_PLAYBACK); ++ err = line6_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_PLAYBACK_STREAM); + + if (err < 0) + return err; +@@ -542,11 +518,11 @@ int snd_line6_playback_trigger(struct snd_line6_pcm *line6pcm, int cmd) + break; + + case SNDRV_PCM_TRIGGER_PAUSE_PUSH: +- set_bit(BIT_PAUSE_PLAYBACK, &line6pcm->flags); ++ set_bit(LINE6_INDEX_PAUSE_PLAYBACK, &line6pcm->flags); + break; + + case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: +- clear_bit(BIT_PAUSE_PLAYBACK, &line6pcm->flags); ++ clear_bit(LINE6_INDEX_PAUSE_PLAYBACK, &line6pcm->flags); + break; + + default: +diff --git a/drivers/staging/line6/playback.h b/drivers/staging/line6/playback.h +index 02487ff..743bd6f 100644 +--- a/drivers/staging/line6/playback.h ++++ b/drivers/staging/line6/playback.h +@@ -29,13 +29,13 @@ + + extern struct snd_pcm_ops snd_line6_playback_ops; + +-extern int line6_alloc_playback_buffer(struct snd_line6_pcm *line6pcm); + extern int line6_create_audio_out_urbs(struct snd_line6_pcm *line6pcm); + extern void line6_free_playback_buffer(struct snd_line6_pcm *line6pcm); + extern int line6_submit_audio_out_all_urbs(struct snd_line6_pcm *line6pcm); + extern void line6_unlink_audio_out_urbs(struct snd_line6_pcm *line6pcm); + extern void line6_unlink_wait_clear_audio_out_urbs(struct snd_line6_pcm + *line6pcm); ++extern void line6_wait_clear_audio_out_urbs(struct snd_line6_pcm *line6pcm); + extern int snd_line6_playback_trigger(struct snd_line6_pcm *line6pcm, int cmd); + + #endif +diff --git a/drivers/staging/line6/toneport.c b/drivers/staging/line6/toneport.c +index b776130..b754f69 100644 +--- a/drivers/staging/line6/toneport.c ++++ b/drivers/staging/line6/toneport.c +@@ -207,9 +207,9 @@ static int snd_toneport_monitor_put(struct snd_kcontrol *kcontrol, + line6pcm->volume_monitor = ucontrol->value.integer.value[0]; + + if (line6pcm->volume_monitor > 0) +- line6_pcm_start(line6pcm, MASK_PCM_MONITOR); ++ line6_pcm_acquire(line6pcm, LINE6_BITS_PCM_MONITOR); + else +- line6_pcm_stop(line6pcm, MASK_PCM_MONITOR); ++ line6_pcm_release(line6pcm, LINE6_BITS_PCM_MONITOR); + + return 1; + } +@@ -264,7 +264,7 @@ static void toneport_start_pcm(unsigned long arg) + { + struct usb_line6_toneport *toneport = (struct usb_line6_toneport *)arg; + struct usb_line6 *line6 = &toneport->line6; +- line6_pcm_start(line6->line6pcm, MASK_PCM_MONITOR); ++ line6_pcm_acquire(line6->line6pcm, LINE6_BITS_PCM_MONITOR); + } + + /* control definition */ +@@ -446,7 +446,7 @@ void line6_toneport_disconnect(struct usb_interface *interface) + struct snd_line6_pcm *line6pcm = toneport->line6.line6pcm; + + if (line6pcm != NULL) { +- line6_pcm_stop(line6pcm, MASK_PCM_MONITOR); ++ line6_pcm_release(line6pcm, LINE6_BITS_PCM_MONITOR); + line6_pcm_disconnect(line6pcm); + } + } +diff --git a/drivers/staging/line6/usbdefs.h b/drivers/staging/line6/usbdefs.h +index aff9e5c..353d59d 100644 +--- a/drivers/staging/line6/usbdefs.h ++++ b/drivers/staging/line6/usbdefs.h +@@ -39,31 +39,29 @@ + #define LINE6_DEVID_TONEPORT_UX2 0x4142 + #define LINE6_DEVID_VARIAX 0x534d + +-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 ++#define LINE6_BIT(x) LINE6_BIT_ ## x = 1 << LINE6_INDEX_ ## x + + enum { ++ LINE6_INDEX_BASSPODXT, ++ LINE6_INDEX_BASSPODXTLIVE, ++ LINE6_INDEX_BASSPODXTPRO, ++ LINE6_INDEX_GUITARPORT, ++ LINE6_INDEX_POCKETPOD, ++ LINE6_INDEX_PODHD300, ++ LINE6_INDEX_PODHD500, ++ LINE6_INDEX_PODSTUDIO_GX, ++ LINE6_INDEX_PODSTUDIO_UX1, ++ LINE6_INDEX_PODSTUDIO_UX2, ++ LINE6_INDEX_PODX3, ++ LINE6_INDEX_PODX3LIVE, ++ LINE6_INDEX_PODXT, ++ LINE6_INDEX_PODXTLIVE, ++ LINE6_INDEX_PODXTPRO, ++ LINE6_INDEX_TONEPORT_GX, ++ LINE6_INDEX_TONEPORT_UX1, ++ LINE6_INDEX_TONEPORT_UX2, ++ LINE6_INDEX_VARIAX, ++ + LINE6_BIT(BASSPODXT), + LINE6_BIT(BASSPODXTLIVE), + LINE6_BIT(BASSPODXTPRO), diff --git a/debian/patches/features/all/line6/0021-Staging-line6-remove-unneeded-initialization.patch b/debian/patches/features/all/line6/0021-Staging-line6-remove-unneeded-initialization.patch new file mode 100644 index 000000000..de4d50734 --- /dev/null +++ b/debian/patches/features/all/line6/0021-Staging-line6-remove-unneeded-initialization.patch @@ -0,0 +1,37 @@ +From: Greg Kroah-Hartman +Date: Mon, 23 Apr 2012 15:59:17 -0700 +Subject: [021/106] Staging: line6: remove unneeded initialization + +commit 305b8766a9833491b388ac98d57ce38a8106a1e0 upstream. + +Static variables are initialized to NULL, no need to do it again in the +module_init function. + +CC: Markus Grabner +CC: Stefan Hajnoczi +CC: Julia Lawall +CC: Dan Carpenter +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/driver.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c +index e8023af..312905a 100644 +--- a/drivers/staging/line6/driver.c ++++ b/drivers/staging/line6/driver.c +@@ -1297,13 +1297,10 @@ static struct usb_driver line6_driver = { + */ + static int __init line6_init(void) + { +- int i, retval; ++ int retval; + + printk(KERN_INFO "%s driver version %s\n", DRIVER_NAME, DRIVER_VERSION); + +- for (i = LINE6_MAX_DEVICES; i--;) +- line6_devices[i] = NULL; +- + retval = usb_register(&line6_driver); + + if (retval) { diff --git a/debian/patches/features/all/line6/0022-Staging-line6-only-allocate-a-buffer-if-it-is-needed.patch b/debian/patches/features/all/line6/0022-Staging-line6-only-allocate-a-buffer-if-it-is-needed.patch new file mode 100644 index 000000000..6e2fd6342 --- /dev/null +++ b/debian/patches/features/all/line6/0022-Staging-line6-only-allocate-a-buffer-if-it-is-needed.patch @@ -0,0 +1,103 @@ +From: Greg Kroah-Hartman +Date: Mon, 23 Apr 2012 16:09:56 -0700 +Subject: [022/106] Staging: line6: only allocate a buffer if it is needed + +commit c46b8a6567fb6e0119cb22819aa65faf8d101a2f upstream. + +Only allocate the version request buffer if it is needed, not when the +module starts up. This will let us make the module_init path much +smaller. + +CC: Markus Grabner +CC: Stefan Hajnoczi +CC: Julia Lawall +CC: Dan Carpenter +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/driver.c | 47 +++++++++++++++------------------------- + 1 file changed, 17 insertions(+), 30 deletions(-) + +diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c +index 312905a..351e860 100644 +--- a/drivers/staging/line6/driver.c ++++ b/drivers/staging/line6/driver.c +@@ -92,15 +92,10 @@ const unsigned char line6_midi_id[] = { + Code to request version of POD, Variax interface + (and maybe other devices). + */ +-static const char line6_request_version0[] = { ++static const char line6_request_version[] = { + 0xf0, 0x7e, 0x7f, 0x06, 0x01, 0xf7 + }; + +-/* +- Copy of version request code with GFP_KERNEL flag for use in URB. +-*/ +-static const char *line6_request_version; +- + struct usb_line6 *line6_devices[LINE6_MAX_DEVICES]; + + /** +@@ -336,8 +331,21 @@ int line6_send_raw_message_async(struct usb_line6 *line6, const char *buffer, + */ + int line6_version_request_async(struct usb_line6 *line6) + { +- return line6_send_raw_message_async(line6, line6_request_version, +- sizeof(line6_request_version0)); ++ char *buffer; ++ int retval; ++ ++ buffer = kmalloc(sizeof(line6_request_version), GFP_ATOMIC); ++ if (buffer == NULL) { ++ dev_err(line6->ifcdev, "Out of memory"); ++ return -ENOMEM; ++ } ++ ++ memcpy(buffer, line6_request_version, sizeof(line6_request_version)); ++ ++ retval = line6_send_raw_message_async(line6, buffer, ++ sizeof(line6_request_version)); ++ kfree(buffer); ++ return retval; + } + + /* +@@ -1297,29 +1305,9 @@ static struct usb_driver line6_driver = { + */ + static int __init line6_init(void) + { +- int retval; +- + printk(KERN_INFO "%s driver version %s\n", DRIVER_NAME, DRIVER_VERSION); + +- retval = usb_register(&line6_driver); +- +- if (retval) { +- err("usb_register failed. Error number %d", retval); +- return retval; +- } +- +- line6_request_version = kmalloc(sizeof(line6_request_version0), +- GFP_KERNEL); +- +- if (line6_request_version == NULL) { +- err("Out of memory"); +- return -ENOMEM; +- } +- +- memcpy((char *)line6_request_version, line6_request_version0, +- sizeof(line6_request_version0)); +- +- return retval; ++ return usb_register(&line6_driver); + } + + /* +@@ -1347,7 +1335,6 @@ static void __exit line6_exit(void) + } + + usb_deregister(&line6_driver); +- kfree(line6_request_version); + } + + module_init(line6_init); diff --git a/debian/patches/features/all/line6/0023-Staging-line6-remove-teardown-code-from-module_exit-.patch b/debian/patches/features/all/line6/0023-Staging-line6-remove-teardown-code-from-module_exit-.patch new file mode 100644 index 000000000..b532e8388 --- /dev/null +++ b/debian/patches/features/all/line6/0023-Staging-line6-remove-teardown-code-from-module_exit-.patch @@ -0,0 +1,49 @@ +From: Greg Kroah-Hartman +Date: Mon, 23 Apr 2012 16:11:26 -0700 +Subject: [023/106] Staging: line6: remove teardown code from module_exit path + +commit 15a89dc83bad5c22a02bd292cf87d72dacb7dcb3 upstream. + +These pcm values should all be stopped properly when the device is +removed from the system (i.e. when disconnect is called), so there's no +need to duplicate this when the module is unloaded as well. + +CC: Markus Grabner +CC: Stefan Hajnoczi +CC: Julia Lawall +CC: Dan Carpenter +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/driver.c | 19 ------------------- + 1 file changed, 19 deletions(-) + +diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c +index 351e860..c476fcc 100644 +--- a/drivers/staging/line6/driver.c ++++ b/drivers/staging/line6/driver.c +@@ -1315,25 +1315,6 @@ static int __init line6_init(void) + */ + static void __exit line6_exit(void) + { +- int i; +- struct usb_line6 *line6; +- struct snd_line6_pcm *line6pcm; +- +- /* stop all PCM channels */ +- for (i = LINE6_MAX_DEVICES; i--;) { +- line6 = line6_devices[i]; +- +- if (line6 == NULL) +- continue; +- +- line6pcm = line6->line6pcm; +- +- if (line6pcm == NULL) +- continue; +- +- line6_pcm_release(line6pcm, ~0); +- } +- + usb_deregister(&line6_driver); + } + diff --git a/debian/patches/features/all/line6/0024-Staging-line6-use-module_usb_driver.patch b/debian/patches/features/all/line6/0024-Staging-line6-use-module_usb_driver.patch new file mode 100644 index 000000000..967159d6f --- /dev/null +++ b/debian/patches/features/all/line6/0024-Staging-line6-use-module_usb_driver.patch @@ -0,0 +1,52 @@ +From: Greg Kroah-Hartman +Date: Mon, 23 Apr 2012 16:13:19 -0700 +Subject: [024/106] Staging: line6: use module_usb_driver() + +commit 4a6313644c3188f4aa1a6b4403896375baa2e09a upstream. + +Now that our module_init/exit path is just registering and unregistering +the usb driver, we can use module_usb_driver() instead. This also has +the nice side affect of removing the unneeded printk for the module +version number. + +CC: Markus Grabner +CC: Stefan Hajnoczi +CC: Julia Lawall +CC: Dan Carpenter +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/driver.c | 21 +-------------------- + 1 file changed, 1 insertion(+), 20 deletions(-) + +diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c +index c476fcc..4513f78 100644 +--- a/drivers/staging/line6/driver.c ++++ b/drivers/staging/line6/driver.c +@@ -1300,26 +1300,7 @@ static struct usb_driver line6_driver = { + .id_table = line6_id_table, + }; + +-/* +- Module initialization. +-*/ +-static int __init line6_init(void) +-{ +- printk(KERN_INFO "%s driver version %s\n", DRIVER_NAME, DRIVER_VERSION); +- +- return usb_register(&line6_driver); +-} +- +-/* +- Module cleanup. +-*/ +-static void __exit line6_exit(void) +-{ +- usb_deregister(&line6_driver); +-} +- +-module_init(line6_init); +-module_exit(line6_exit); ++module_usb_driver(line6_driver); + + MODULE_AUTHOR(DRIVER_AUTHOR); + MODULE_DESCRIPTION(DRIVER_DESC); diff --git a/debian/patches/features/all/line6/0025-staging-line6-toneport.c-remove-err-usage.patch b/debian/patches/features/all/line6/0025-staging-line6-toneport.c-remove-err-usage.patch new file mode 100644 index 000000000..13909ce2e --- /dev/null +++ b/debian/patches/features/all/line6/0025-staging-line6-toneport.c-remove-err-usage.patch @@ -0,0 +1,30 @@ +From: Greg Kroah-Hartman +Date: Fri, 20 Apr 2012 16:53:32 -0700 +Subject: [025/106] staging: line6: toneport.c: remove err() usage + +commit aa8f827a4d7dbea98a9076a4f85b1317391dc031 upstream. + +err() was a very old USB-specific macro that I thought had +gone away. This patch removes it from being used in the +driver and uses dev_err() instead. + +CC: Markus Grabner +CC: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/toneport.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/staging/line6/toneport.c b/drivers/staging/line6/toneport.c +index b754f69..31b624b 100644 +--- a/drivers/staging/line6/toneport.c ++++ b/drivers/staging/line6/toneport.c +@@ -168,7 +168,7 @@ static int toneport_send_cmd(struct usb_device *usbdev, int cmd1, int cmd2) + cmd1, cmd2, NULL, 0, LINE6_TIMEOUT * HZ); + + if (ret < 0) { +- err("send failed (error %d)\n", ret); ++ dev_err(&usbdev->dev, "send failed (error %d)\n", ret); + return ret; + } + diff --git a/debian/patches/features/all/line6/0026-staging-line6-midibuf.c-changed-printk-KERN_DEBUG-.-.patch b/debian/patches/features/all/line6/0026-staging-line6-midibuf.c-changed-printk-KERN_DEBUG-.-.patch new file mode 100644 index 000000000..672880536 --- /dev/null +++ b/debian/patches/features/all/line6/0026-staging-line6-midibuf.c-changed-printk-KERN_DEBUG-.-.patch @@ -0,0 +1,29 @@ +From: Johannes Thumshirn +Date: Sat, 5 May 2012 16:31:50 +0200 +Subject: [026/106] staging: line6/midibuf.c changed printk(KERN_DEBUG, ... to + pr_debug( + +commit 8878451510b11ee9095198f42bf1d59e6bab66fb upstream. + +Changed printk(KERN_DEBUG, ...) call to pr_debug call in function +void line6_midibuf_status(struct MidiBuffer *this) + +Signed-off-by: Johannes Thumshirn +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/midibuf.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/staging/line6/midibuf.c b/drivers/staging/line6/midibuf.c +index 7b532e5..836e8c8 100644 +--- a/drivers/staging/line6/midibuf.c ++++ b/drivers/staging/line6/midibuf.c +@@ -64,7 +64,7 @@ int line6_midibuf_init(struct MidiBuffer *this, int size, int split) + + void line6_midibuf_status(struct MidiBuffer *this) + { +- printk(KERN_DEBUG "midibuf size=%d split=%d pos_read=%d pos_write=%d " ++ pr_debug("midibuf size=%d split=%d pos_read=%d pos_write=%d " + "full=%d command_prev=%02x\n", this->size, this->split, + this->pos_read, this->pos_write, this->full, this->command_prev); + } diff --git a/debian/patches/features/all/line6/0027-staging-line6-midi.c-Added-space-between-switch-and-.patch b/debian/patches/features/all/line6/0027-staging-line6-midi.c-Added-space-between-switch-and-.patch new file mode 100644 index 000000000..066a38ec5 --- /dev/null +++ b/debian/patches/features/all/line6/0027-staging-line6-midi.c-Added-space-between-switch-and-.patch @@ -0,0 +1,28 @@ +From: Johannes Thumshirn +Date: Sat, 5 May 2012 16:31:51 +0200 +Subject: [027/106] staging: line6/midi.c: Added space between switch and open + parenthesis + +commit bc8fa144afe33bfbcae20dca4faff836ec7efedc upstream. + +Added space between switch and open parenthesis to make checkpatch.pl happy + +Signed-off-by: Johannes Thumshirn +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/midi.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c +index 13d0293..5040729 100644 +--- a/drivers/staging/line6/midi.c ++++ b/drivers/staging/line6/midi.c +@@ -406,7 +406,7 @@ int line6_init_midi(struct usb_line6 *line6) + + line6midi->line6 = line6; + +- switch(line6->product) { ++ switch (line6->product) { + case LINE6_DEVID_PODHD300: + case LINE6_DEVID_PODHD500: + line6midi->midi_mask_transmit = 1; diff --git a/debian/patches/features/all/line6/0028-staging-line6-pcm.c-Removed-trailing-whitespace.patch b/debian/patches/features/all/line6/0028-staging-line6-pcm.c-Removed-trailing-whitespace.patch new file mode 100644 index 000000000..621355c20 --- /dev/null +++ b/debian/patches/features/all/line6/0028-staging-line6-pcm.c-Removed-trailing-whitespace.patch @@ -0,0 +1,27 @@ +From: Johannes Thumshirn +Date: Sat, 5 May 2012 16:31:52 +0200 +Subject: [028/106] staging: line6/pcm.c: Removed trailing whitespace + +commit 82a74d4a8022fc01b99550e4cd6b90802acd4ef9 upstream. + +Removed a line of only whitespace + +Signed-off-by: Johannes Thumshirn +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pcm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c +index 90d2d44..5e319e3 100644 +--- a/drivers/staging/line6/pcm.c ++++ b/drivers/staging/line6/pcm.c +@@ -99,7 +99,7 @@ int line6_pcm_acquire(struct snd_line6_pcm *line6pcm, int channels) + unsigned long flags_new = flags_old | channels; + unsigned long flags_final = flags_old; + int err = 0; +- ++ + line6pcm->prev_fbuf = NULL; + + if (test_flags(flags_old, flags_new, LINE6_BITS_CAPTURE_BUFFER)) { diff --git a/debian/patches/features/all/line6/0029-staging-line6-config.h-Remove-CHECKPOINT-macro.patch b/debian/patches/features/all/line6/0029-staging-line6-config.h-Remove-CHECKPOINT-macro.patch new file mode 100644 index 000000000..e513ed6ba --- /dev/null +++ b/debian/patches/features/all/line6/0029-staging-line6-config.h-Remove-CHECKPOINT-macro.patch @@ -0,0 +1,30 @@ +From: Johannes Thumshirn +Date: Thu, 10 May 2012 19:12:02 +0200 +Subject: [029/106] staging: line6/config.h: Remove CHECKPOINT macro + +commit c15974ef1f2d858795f7f63280fb53bcab6064f9 upstream. + +Kill unused debugging macro CHECKPOINT + +Signed-off-by: Johannes Thumshirn +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/config.h | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/drivers/staging/line6/config.h b/drivers/staging/line6/config.h +index f8a5149..2493491 100644 +--- a/drivers/staging/line6/config.h ++++ b/drivers/staging/line6/config.h +@@ -34,11 +34,6 @@ + #define CREATE_RAW_FILE 0 + + #if DO_DEBUG_MESSAGES +-#define CHECKPOINT printk(KERN_INFO "line6usb: %s (%s:%d)\n", \ +- __func__, __FILE__, __LINE__) +-#endif +- +-#if DO_DEBUG_MESSAGES + #define DEBUG_MESSAGES(x) (x) + #else + #define DEBUG_MESSAGES(x) diff --git a/debian/patches/features/all/line6/0030-staging-line6-config.h-Delete-unused-header.patch b/debian/patches/features/all/line6/0030-staging-line6-config.h-Delete-unused-header.patch new file mode 100644 index 000000000..ecebc7942 --- /dev/null +++ b/debian/patches/features/all/line6/0030-staging-line6-config.h-Delete-unused-header.patch @@ -0,0 +1,64 @@ +From: Johannes Thumshirn +Date: Fri, 18 May 2012 16:49:32 +0200 +Subject: [030/106] staging: line6/config.h: Delete unused header + +commit 0f64507473b9d8fef6592748ed4180908f5d26cc upstream. + +Delete unused header file drivers/staging/line6/config.h + +Signed-off-by: Johannes Thumshirn +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/config.h | 43 ---------------------------------------- + 1 file changed, 43 deletions(-) + delete mode 100644 drivers/staging/line6/config.h + +diff --git a/drivers/staging/line6/config.h b/drivers/staging/line6/config.h +deleted file mode 100644 +index 2493491..0000000 +--- a/drivers/staging/line6/config.h ++++ /dev/null +@@ -1,43 +0,0 @@ +-/* +- * Line6 Linux USB driver - 0.8.0 +- * +- * Copyright (C) 2004-2009 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. +- * +- */ +- +-#ifndef CONFIG_H +-#define CONFIG_H +- +- +-#ifdef CONFIG_USB_DEBUG +-#define DEBUG 1 +-#endif +- +- +-/* +- * Development tools. +- */ +-#define DO_DEBUG_MESSAGES 0 +-#define DO_DUMP_URB_SEND DO_DEBUG_MESSAGES +-#define DO_DUMP_URB_RECEIVE DO_DEBUG_MESSAGES +-#define DO_DUMP_PCM_SEND 0 +-#define DO_DUMP_PCM_RECEIVE 0 +-#define DO_DUMP_MIDI_SEND DO_DEBUG_MESSAGES +-#define DO_DUMP_MIDI_RECEIVE DO_DEBUG_MESSAGES +-#define DO_DUMP_ANY (DO_DUMP_URB_SEND || DO_DUMP_URB_RECEIVE || \ +- DO_DUMP_PCM_SEND || DO_DUMP_PCM_RECEIVE || \ +- DO_DUMP_MIDI_SEND || DO_DUMP_MIDI_RECEIVE) +-#define CREATE_RAW_FILE 0 +- +-#if DO_DEBUG_MESSAGES +-#define DEBUG_MESSAGES(x) (x) +-#else +-#define DEBUG_MESSAGES(x) +-#endif +- +- +-#endif diff --git a/debian/patches/features/all/line6/0031-staging-line6-changed-interface-of-line6_transmit_pa.patch b/debian/patches/features/all/line6/0031-staging-line6-changed-interface-of-line6_transmit_pa.patch new file mode 100644 index 000000000..ed50a4065 --- /dev/null +++ b/debian/patches/features/all/line6/0031-staging-line6-changed-interface-of-line6_transmit_pa.patch @@ -0,0 +1,42 @@ +From: Johannes Thumshirn +Date: Wed, 27 Jun 2012 21:25:55 +0200 +Subject: [031/106] staging: line6: changed interface of + line6_transmit_parameter() + +commit 2471c0933988eede8040d58cefd6be4fbef9c057 upstream. + +Interface of line6_transmit_parameter() adjusted to clarify internal workings + +Signed-off-by: Johannes Thumshirn +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/driver.c | 2 +- + drivers/staging/line6/driver.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c +index 4513f78..d861230 100644 +--- a/drivers/staging/line6/driver.c ++++ b/drivers/staging/line6/driver.c +@@ -526,7 +526,7 @@ int line6_send_program(struct usb_line6 *line6, int value) + /* + Transmit Line6 control parameter. + */ +-int line6_transmit_parameter(struct usb_line6 *line6, int param, int value) ++int line6_transmit_parameter(struct usb_line6 *line6, int param, u8 value) + { + int retval; + unsigned char *buffer; +diff --git a/drivers/staging/line6/driver.h b/drivers/staging/line6/driver.h +index 117bf99..140ccfe 100644 +--- a/drivers/staging/line6/driver.h ++++ b/drivers/staging/line6/driver.h +@@ -224,7 +224,7 @@ extern void line6_start_timer(struct timer_list *timer, unsigned int msecs, + void (*function) (unsigned long), + unsigned long data); + extern int line6_transmit_parameter(struct usb_line6 *line6, int param, +- int value); ++ u8 value); + extern int line6_version_request_async(struct usb_line6 *line6); + extern int line6_write_data(struct usb_line6 *line6, int address, void *data, + size_t datalen); diff --git a/debian/patches/features/all/line6/0032-staging-line6-Changed-some-strict_strtouls-to-kstrto.patch b/debian/patches/features/all/line6/0032-staging-line6-Changed-some-strict_strtouls-to-kstrto.patch new file mode 100644 index 000000000..f2b79ae1e --- /dev/null +++ b/debian/patches/features/all/line6/0032-staging-line6-Changed-some-strict_strtouls-to-kstrto.patch @@ -0,0 +1,45 @@ +From: Johannes Thumshirn +Date: Wed, 27 Jun 2012 21:25:56 +0200 +Subject: [032/106] staging: line6: Changed some strict_strtouls to kstrtou8 + +commit 1383ec4dad392a1c316820e9afb27b5fb95a6f57 upstream. + +Adjusted strict_strtoul calls to kstrtou8 in order to take the changes of +line6_transmit_parameter() into account. + +Signed-off-by: Johannes Thumshirn +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/variax.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c +index d366222..bb99ee4 100644 +--- a/drivers/staging/line6/variax.c ++++ b/drivers/staging/line6/variax.c +@@ -319,10 +319,10 @@ static ssize_t variax_set_volume(struct device *dev, + { + struct usb_line6_variax *variax = + usb_get_intfdata(to_usb_interface(dev)); +- unsigned long value; ++ u8 value; + int ret; + +- ret = strict_strtoul(buf, 10, &value); ++ ret = kstrtou8(buf, 10, &value); + if (ret) + return ret; + +@@ -418,10 +418,10 @@ static ssize_t variax_set_tone(struct device *dev, + { + struct usb_line6_variax *variax = + usb_get_intfdata(to_usb_interface(dev)); +- unsigned long value; ++ u8 value; + int ret; + +- ret = strict_strtoul(buf, 10, &value); ++ ret = kstrtou8(buf, 10, &value); + if (ret) + return ret; + diff --git a/debian/patches/features/all/line6/0033-staging-line6-changed-interface-of-line6_pod_transmi.patch b/debian/patches/features/all/line6/0033-staging-line6-changed-interface-of-line6_pod_transmi.patch new file mode 100644 index 000000000..0d1ba6f03 --- /dev/null +++ b/debian/patches/features/all/line6/0033-staging-line6-changed-interface-of-line6_pod_transmi.patch @@ -0,0 +1,42 @@ +From: Johannes Thumshirn +Date: Wed, 27 Jun 2012 21:25:57 +0200 +Subject: [033/106] staging: line6: changed interface of + line6_pod_transmit_parameter() + +commit 5b9bd2ad5116c735cf8e4fa1689319849086a55e upstream. + +Adjusted interface of line6_pod_transmit_parameter() to take changes of +line6_transmit_parameter() into account + +Signed-off-by: Johannes Thumshirn +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 2 +- + drivers/staging/line6/pod.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 4dadc57..8667aaf 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -419,7 +419,7 @@ static void pod_send_channel(struct usb_line6_pod *pod, int value) + Transmit PODxt Pro control parameter. + */ + void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param, +- int value) ++ u8 value) + { + if (line6_transmit_parameter(&pod->line6, param, value) == 0) + pod_store_parameter(pod, param, value); +diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h +index 18b9d08..47e0d1a 100644 +--- a/drivers/staging/line6/pod.h ++++ b/drivers/staging/line6/pod.h +@@ -200,6 +200,6 @@ extern void line6_pod_midi_postprocess(struct usb_line6_pod *pod, + unsigned char *data, int length); + extern void line6_pod_process_message(struct usb_line6_pod *pod); + extern void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param, +- int value); ++ u8 value); + + #endif diff --git a/debian/patches/features/all/line6/0034-staging-line6-adjusted-interface-of-line6_send_progr.patch b/debian/patches/features/all/line6/0034-staging-line6-adjusted-interface-of-line6_send_progr.patch new file mode 100644 index 000000000..025df6016 --- /dev/null +++ b/debian/patches/features/all/line6/0034-staging-line6-adjusted-interface-of-line6_send_progr.patch @@ -0,0 +1,41 @@ +From: Johannes Thumshirn +Date: Wed, 27 Jun 2012 21:25:58 +0200 +Subject: [034/106] staging: line6: adjusted interface of line6_send_program() + +commit 317e188b2d48b7bc8537619b6c01208e1b03001a upstream. + +Adjusted interface of line6_send_program() to clarify internal working + +Signed-off-by: Johannes Thumshirn +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/driver.c | 2 +- + drivers/staging/line6/driver.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c +index d861230..b8358ca 100644 +--- a/drivers/staging/line6/driver.c ++++ b/drivers/staging/line6/driver.c +@@ -490,7 +490,7 @@ static void line6_data_received(struct urb *urb) + /* + Send channel number (i.e., switch to a different sound). + */ +-int line6_send_program(struct usb_line6 *line6, int value) ++int line6_send_program(struct usb_line6 *line6, u8 value) + { + int retval; + unsigned char *buffer; +diff --git a/drivers/staging/line6/driver.h b/drivers/staging/line6/driver.h +index 140ccfe..a3029eb 100644 +--- a/drivers/staging/line6/driver.h ++++ b/drivers/staging/line6/driver.h +@@ -209,7 +209,7 @@ extern int line6_read_data(struct usb_line6 *line6, int address, void *data, + size_t datalen); + extern int line6_read_serial_number(struct usb_line6 *line6, + int *serial_number); +-extern int line6_send_program(struct usb_line6 *line6, int value); ++extern int line6_send_program(struct usb_line6 *line6, u8 value); + extern int line6_send_raw_message(struct usb_line6 *line6, const char *buffer, + int size); + extern int line6_send_raw_message_async(struct usb_line6 *line6, diff --git a/debian/patches/features/all/line6/0035-staging-line6-changed-interface-of-pod_send_channel.patch b/debian/patches/features/all/line6/0035-staging-line6-changed-interface-of-pod_send_channel.patch new file mode 100644 index 000000000..57058bbeb --- /dev/null +++ b/debian/patches/features/all/line6/0035-staging-line6-changed-interface-of-pod_send_channel.patch @@ -0,0 +1,28 @@ +From: Johannes Thumshirn +Date: Wed, 27 Jun 2012 21:25:59 +0200 +Subject: [035/106] staging: line6: changed interface of pod_send_channel() + +commit 8d6b7f7c9b3c346f2fef496827c3fbbc2ebef1a9 upstream. + +Adjusted interface of pod_send_channel() in order to take changes of +line6_send_program() into account. + +Signed-off-by: Johannes Thumshirn +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 8667aaf..459f325 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -405,7 +405,7 @@ void line6_pod_midi_postprocess(struct usb_line6_pod *pod, unsigned char *data, + /* + Send channel number (i.e., switch to a different sound). + */ +-static void pod_send_channel(struct usb_line6_pod *pod, int value) ++static void pod_send_channel(struct usb_line6_pod *pod, u8 value) + { + line6_invalidate_current(&pod->dumpreq); + diff --git a/debian/patches/features/all/line6/0036-staging-line6-control.c-eliminate-strict_strtoul-in-.patch b/debian/patches/features/all/line6/0036-staging-line6-control.c-eliminate-strict_strtoul-in-.patch new file mode 100644 index 000000000..d33e828a2 --- /dev/null +++ b/debian/patches/features/all/line6/0036-staging-line6-control.c-eliminate-strict_strtoul-in-.patch @@ -0,0 +1,34 @@ +From: Johannes Thumshirn +Date: Wed, 27 Jun 2012 21:26:00 +0200 +Subject: [036/106] staging: line6: control.c eliminate strict_strtoul() in + pod_set_param_int() + +commit 336cab9afa2567fd41d2813d3f0f9249371219cb upstream. + +Exchange strict_strtoul() with kstrtou8() and make "value" a u8 instead of a +unsigned long. This is also needed for the changed +line6_pod_transmit_parameter(). + +Signed-off-by: Johannes Thumshirn +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/control.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/staging/line6/control.c b/drivers/staging/line6/control.c +index 67e23b6..f8326f5 100644 +--- a/drivers/staging/line6/control.c ++++ b/drivers/staging/line6/control.c +@@ -55,10 +55,10 @@ static ssize_t pod_set_param_int(struct device *dev, const char *buf, + { + struct usb_interface *interface = to_usb_interface(dev); + struct usb_line6_pod *pod = usb_get_intfdata(interface); +- unsigned long value; ++ u8 value; + int retval; + +- retval = strict_strtoul(buf, 10, &value); ++ retval = kstrtou8(buf, 10, &value); + if (retval) + return retval; + diff --git a/debian/patches/features/all/line6/0037-staging-line6-Exchanged-strict_strtoul-with-kstrtou8.patch b/debian/patches/features/all/line6/0037-staging-line6-Exchanged-strict_strtoul-with-kstrtou8.patch new file mode 100644 index 000000000..0306a1112 --- /dev/null +++ b/debian/patches/features/all/line6/0037-staging-line6-Exchanged-strict_strtoul-with-kstrtou8.patch @@ -0,0 +1,33 @@ +From: Johannes Thumshirn +Date: Wed, 27 Jun 2012 21:26:01 +0200 +Subject: [037/106] staging: line6: Exchanged strict_strtoul with kstrtou8() + in pod.c:pod_resolve() + +commit 1d0e834d62c6810385c2f0673cf6bd97a59aae68 upstream. + +Exchanged call to strict_strtoul() with kstrtou8() in pod_resolve(). + +Signed-off-by: Johannes Thumshirn +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 459f325..4c81914 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -434,11 +434,11 @@ void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param, + static int pod_resolve(const char *buf, short block0, short block1, + unsigned char *location) + { +- unsigned long value; ++ u8 value; + short block; + int ret; + +- ret = strict_strtoul(buf, 10, &value); ++ ret = kstrtou8(buf, 10, &value); + if (ret) + return ret; + diff --git a/debian/patches/features/all/line6/0038-staging-line6-Changed-strict_strtoul-to-kstrtou8-in-.patch b/debian/patches/features/all/line6/0038-staging-line6-Changed-strict_strtoul-to-kstrtou8-in-.patch new file mode 100644 index 000000000..205490337 --- /dev/null +++ b/debian/patches/features/all/line6/0038-staging-line6-Changed-strict_strtoul-to-kstrtou8-in-.patch @@ -0,0 +1,33 @@ +From: Johannes Thumshirn +Date: Wed, 27 Jun 2012 21:26:02 +0200 +Subject: [038/106] staging: line6: Changed strict_strtoul() to kstrtou8() in + pod_set_channel() + +commit a4fb7d53869f848fcef91fc6b571e0e8f6e835ce upstream. + +Changed strict_strtoul() to kstrtou() in pod_set_channel() to take changes in +pod_send_channel() into account. + +Signed-off-by: Johannes Thumshirn +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 4c81914..2a85ec3 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -560,10 +560,10 @@ static ssize_t pod_set_channel(struct device *dev, + { + struct usb_interface *interface = to_usb_interface(dev); + struct usb_line6_pod *pod = usb_get_intfdata(interface); +- unsigned long value; ++ u8 value; + int ret; + +- ret = strict_strtoul(buf, 10, &value); ++ ret = kstrtou8(buf, 10, &value); + if (ret) + return ret; + diff --git a/debian/patches/features/all/line6/0039-staging-line6-Changed-strict_strtoul-to-kstrtou8-in-.patch b/debian/patches/features/all/line6/0039-staging-line6-Changed-strict_strtoul-to-kstrtou8-in-.patch new file mode 100644 index 000000000..247a474bb --- /dev/null +++ b/debian/patches/features/all/line6/0039-staging-line6-Changed-strict_strtoul-to-kstrtou8-in-.patch @@ -0,0 +1,33 @@ +From: Johannes Thumshirn +Date: Wed, 27 Jun 2012 21:26:03 +0200 +Subject: [039/106] staging: line6: Changed strict_strtoul() to kstrtou8() in + pod_set_midi_postprocess() + +commit 06501787d843608c83864cc241f4fd464ce385ca upstream. + +Changed a call to strict_strtoul() into kstrtou8() in +pod_set_midi_postprocess(). + +Signed-off-by: Johannes Thumshirn +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 2a85ec3..9edd053 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -892,10 +892,10 @@ static ssize_t pod_set_midi_postprocess(struct device *dev, + { + struct usb_interface *interface = to_usb_interface(dev); + struct usb_line6_pod *pod = usb_get_intfdata(interface); +- unsigned long value; ++ u8 value; + int ret; + +- ret = strict_strtoul(buf, 10, &value); ++ ret = kstrtou8(buf, 10, &value); + if (ret) + return ret; + diff --git a/debian/patches/features/all/line6/0040-staging-line6-pcm.c-Changed-simple_strtoul-to-kstrto.patch b/debian/patches/features/all/line6/0040-staging-line6-pcm.c-Changed-simple_strtoul-to-kstrto.patch new file mode 100644 index 000000000..275b4891d --- /dev/null +++ b/debian/patches/features/all/line6/0040-staging-line6-pcm.c-Changed-simple_strtoul-to-kstrto.patch @@ -0,0 +1,34 @@ +From: Johannes Thumshirn +Date: Mon, 6 Aug 2012 14:08:50 +0200 +Subject: [040/106] staging: line6: pcm.c: Changed simple_strtoul to kstrtoint + +commit cdf5e55124e4804fc0027df7e89567a3f5eed8bf upstream. + +Changed call to simple_strtoul to kstrtoint in pcm_set_impulse_volume(...) + +Signed-off-by: Johannes Thumshirn +Reviewed-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pcm.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c +index 5e319e3..7fe44a6 100644 +--- a/drivers/staging/line6/pcm.c ++++ b/drivers/staging/line6/pcm.c +@@ -48,7 +48,13 @@ static ssize_t pcm_set_impulse_volume(struct device *dev, + const char *buf, size_t count) + { + struct snd_line6_pcm *line6pcm = dev2pcm(dev); +- int value = simple_strtoul(buf, NULL, 10); ++ int value; ++ int rv; ++ ++ rv = kstrtoint(buf, 10, &value); ++ if (rv < 0) ++ return rv; ++ + line6pcm->impulse_volume = value; + + if (value > 0) diff --git a/debian/patches/features/all/line6/0041-staging-line6-variax.c-Eliminated-remaining-strict_s.patch b/debian/patches/features/all/line6/0041-staging-line6-variax.c-Eliminated-remaining-strict_s.patch new file mode 100644 index 000000000..7fa8f55fc --- /dev/null +++ b/debian/patches/features/all/line6/0041-staging-line6-variax.c-Eliminated-remaining-strict_s.patch @@ -0,0 +1,46 @@ +From: Johannes Thumshirn +Date: Tue, 14 Aug 2012 20:22:48 +0200 +Subject: [041/106] staging: line6: variax.c: Eliminated remaining + strict_stroul()s + +commit 9291975d6647794710553630c2613b5658c81d3f upstream. + +Eliminated remaining calls to strict_stroul() and replaced them with +strict_kstrtou8(). + +Signed-off-by: Johannes Thumshirn +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/variax.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c +index bb99ee4..f97416b 100644 +--- a/drivers/staging/line6/variax.c ++++ b/drivers/staging/line6/variax.c +@@ -353,10 +353,10 @@ static ssize_t variax_set_model(struct device *dev, + { + struct usb_line6_variax *variax = + usb_get_intfdata(to_usb_interface(dev)); +- unsigned long value; ++ u8 value; + int ret; + +- ret = strict_strtoul(buf, 10, &value); ++ ret = kstrtou8(buf, 10, &value); + if (ret) + return ret; + +@@ -387,10 +387,10 @@ static ssize_t variax_set_active(struct device *dev, + { + struct usb_line6_variax *variax = + usb_get_intfdata(to_usb_interface(dev)); +- unsigned long value; ++ u8 value; + int ret; + +- ret = strict_strtoul(buf, 10, &value); ++ ret = kstrtou8(buf, 10, &value); + if (ret) + return ret; + diff --git a/debian/patches/features/all/line6/0042-staging-line6-drop-unused-line6_devices-array.patch b/debian/patches/features/all/line6/0042-staging-line6-drop-unused-line6_devices-array.patch new file mode 100644 index 000000000..3271a8411 --- /dev/null +++ b/debian/patches/features/all/line6/0042-staging-line6-drop-unused-line6_devices-array.patch @@ -0,0 +1,102 @@ +From: Stefan Hajnoczi +Date: Mon, 15 Oct 2012 20:26:46 +0200 +Subject: [042/106] staging: line6: drop unused line6_devices[] array + +commit b430b3dbdb74e86ee7da7a335cbca2c630167528 upstream. + +There is no reason to limit the number of line6 devices. Drop the +static array. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/driver.c | 20 +------------------- + drivers/staging/line6/driver.h | 2 -- + 2 files changed, 1 insertion(+), 21 deletions(-) + +diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c +index b8358ca..ac11a3b 100644 +--- a/drivers/staging/line6/driver.c ++++ b/drivers/staging/line6/driver.c +@@ -96,8 +96,6 @@ static const char line6_request_version[] = { + 0xf0, 0x7e, 0x7f, 0x06, 0x01, 0xf7 + }; + +-struct usb_line6 *line6_devices[LINE6_MAX_DEVICES]; +- + /** + Class for asynchronous messages. + */ +@@ -740,7 +738,6 @@ static int line6_probe(struct usb_interface *interface, + struct usb_device *usbdev; + struct usb_line6 *line6; + const struct line6_properties *properties; +- int devnum; + int interface_number, alternate = 0; + int product; + int size = 0; +@@ -774,16 +771,6 @@ static int line6_probe(struct usb_interface *interface, + goto err_put; + } + +- /* find free slot in device table: */ +- for (devnum = 0; devnum < LINE6_MAX_DEVICES; ++devnum) +- if (line6_devices[devnum] == NULL) +- break; +- +- if (devnum == LINE6_MAX_DEVICES) { +- ret = -ENODEV; +- goto err_put; +- } +- + /* initialize device info: */ + properties = &line6_properties_table[devtype]; + dev_info(&interface->dev, "Line6 %s found\n", properties->name); +@@ -1112,7 +1099,6 @@ static int line6_probe(struct usb_interface *interface, + + dev_info(&interface->dev, "Line6 %s now attached\n", + line6->properties->name); +- line6_devices[devnum] = line6; + + switch (product) { + case LINE6_DEVID_PODX3: +@@ -1141,7 +1127,7 @@ static void line6_disconnect(struct usb_interface *interface) + { + struct usb_line6 *line6; + struct usb_device *usbdev; +- int interface_number, i; ++ int interface_number; + + if (interface == NULL) + return; +@@ -1214,10 +1200,6 @@ static void line6_disconnect(struct usb_interface *interface) + + dev_info(&interface->dev, "Line6 %s now disconnected\n", + line6->properties->name); +- +- for (i = LINE6_MAX_DEVICES; i--;) +- if (line6_devices[i] == line6) +- line6_devices[i] = NULL; + } + + line6_destruct(interface); +diff --git a/drivers/staging/line6/driver.h b/drivers/staging/line6/driver.h +index a3029eb..35246cf 100644 +--- a/drivers/staging/line6/driver.h ++++ b/drivers/staging/line6/driver.h +@@ -25,7 +25,6 @@ + #endif + + #define LINE6_TIMEOUT 1 +-#define LINE6_MAX_DEVICES 8 + #define LINE6_BUFSIZE_LISTEN 32 + #define LINE6_MESSAGE_MAXLEN 256 + +@@ -78,7 +77,6 @@ do { \ + } while (0) + + extern const unsigned char line6_midi_id[3]; +-extern struct usb_line6 *line6_devices[LINE6_MAX_DEVICES]; + + static const int SYSEX_DATA_OFS = sizeof(line6_midi_id) + 3; + static const int SYSEX_EXTRA_SIZE = sizeof(line6_midi_id) + 4; diff --git a/debian/patches/features/all/line6/0043-staging-line6-drop-unused-line6_index-and-line6_id-a.patch b/debian/patches/features/all/line6/0043-staging-line6-drop-unused-line6_index-and-line6_id-a.patch new file mode 100644 index 000000000..9ab7bb73a --- /dev/null +++ b/debian/patches/features/all/line6/0043-staging-line6-drop-unused-line6_index-and-line6_id-a.patch @@ -0,0 +1,44 @@ +From: Stefan Hajnoczi +Date: Mon, 15 Oct 2012 20:52:27 +0200 +Subject: [043/106] staging: line6: drop unused line6_index and line6_id + arrays + +commit 54cd1e42f31040c74694a3b2de83cd2cbb2fff55 upstream. + +The line6 driver does not support 'index' and 'id' module parameters so +there is no need to keep arrays for these values. Do what other sound +drivers do and use the scalar constants instead of dummy arrays. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/audio.c | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +diff --git a/drivers/staging/line6/audio.c b/drivers/staging/line6/audio.c +index 8e73983..a92e21f 100644 +--- a/drivers/staging/line6/audio.c ++++ b/drivers/staging/line6/audio.c +@@ -16,20 +16,16 @@ + #include "driver.h" + #include "audio.h" + +-static int line6_index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; +-static char *line6_id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; +- + /* + Initialize the Line6 USB audio system. + */ + int line6_init_audio(struct usb_line6 *line6) + { +- static int dev; + struct snd_card *card; + int err; + +- err = snd_card_create(line6_index[dev], line6_id[dev], THIS_MODULE, 0, +- &card); ++ err = snd_card_create(SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1, ++ THIS_MODULE, 0, &card); + if (err < 0) + return err; + diff --git a/debian/patches/features/all/line6/0044-staging-line6-wrap-80-char-lines-in-capture.c.patch b/debian/patches/features/all/line6/0044-staging-line6-wrap-80-char-lines-in-capture.c.patch new file mode 100644 index 000000000..38c390e94 --- /dev/null +++ b/debian/patches/features/all/line6/0044-staging-line6-wrap-80-char-lines-in-capture.c.patch @@ -0,0 +1,57 @@ +From: Stefan Hajnoczi +Date: Sun, 11 Nov 2012 13:24:39 +0100 +Subject: [044/106] staging: line6: wrap >80 char lines in capture.c + +commit a71cac2a4c502b2ef6715b1576681834f9dbe693 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/capture.c | 13 ++++++++----- + 1 file changed, 8 insertions(+), 5 deletions(-) + +diff --git a/drivers/staging/line6/capture.c b/drivers/staging/line6/capture.c +index c85c5b6..389c41f 100644 +--- a/drivers/staging/line6/capture.c ++++ b/drivers/staging/line6/capture.c +@@ -256,8 +256,8 @@ static void audio_in_callback(struct urb *urb) + #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE + if (!(line6pcm->flags & LINE6_BITS_PCM_IMPULSE)) + #endif +- if (test_bit(LINE6_INDEX_PCM_ALSA_CAPTURE_STREAM, &line6pcm->flags) +- && (fsize > 0)) ++ if (test_bit(LINE6_INDEX_PCM_ALSA_CAPTURE_STREAM, ++ &line6pcm->flags) && (fsize > 0)) + line6_capture_copy(line6pcm, fbuf, fsize); + } + +@@ -274,7 +274,8 @@ static void audio_in_callback(struct urb *urb) + #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE + if (!(line6pcm->flags & LINE6_BITS_PCM_IMPULSE)) + #endif +- if (test_bit(LINE6_INDEX_PCM_ALSA_CAPTURE_STREAM, &line6pcm->flags)) ++ if (test_bit(LINE6_INDEX_PCM_ALSA_CAPTURE_STREAM, ++ &line6pcm->flags)) + line6_capture_check_period(line6pcm, length); + } + } +@@ -356,7 +357,8 @@ int snd_line6_capture_trigger(struct snd_line6_pcm *line6pcm, int cmd) + #ifdef CONFIG_PM + case SNDRV_PCM_TRIGGER_RESUME: + #endif +- err = line6_pcm_acquire(line6pcm, LINE6_BIT_PCM_ALSA_CAPTURE_STREAM); ++ err = line6_pcm_acquire(line6pcm, ++ LINE6_BIT_PCM_ALSA_CAPTURE_STREAM); + + if (err < 0) + return err; +@@ -367,7 +369,8 @@ int snd_line6_capture_trigger(struct snd_line6_pcm *line6pcm, int cmd) + #ifdef CONFIG_PM + case SNDRV_PCM_TRIGGER_SUSPEND: + #endif +- err = line6_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_CAPTURE_STREAM); ++ err = line6_pcm_release(line6pcm, ++ LINE6_BIT_PCM_ALSA_CAPTURE_STREAM); + + if (err < 0) + return err; diff --git a/debian/patches/features/all/line6/0045-staging-line6-fix-quoted-string-across-lines-in-midi.patch b/debian/patches/features/all/line6/0045-staging-line6-fix-quoted-string-across-lines-in-midi.patch new file mode 100644 index 000000000..619b70d19 --- /dev/null +++ b/debian/patches/features/all/line6/0045-staging-line6-fix-quoted-string-across-lines-in-midi.patch @@ -0,0 +1,35 @@ +From: Stefan Hajnoczi +Date: Sun, 11 Nov 2012 13:24:40 +0100 +Subject: [045/106] staging: line6: fix quoted string across lines in + midibuf.c + +commit b3a24fc4e2ded4f28d5f4c69ea01fea721608658 upstream. + +Checkpatch warns when quoted strings are split across lines. The +rationale is that quoted strings should be left on a single line so that +grep works. (The 80 character line limit does not apply to quoted +strings.) + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/midibuf.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/drivers/staging/line6/midibuf.c b/drivers/staging/line6/midibuf.c +index 836e8c8..968e0de 100644 +--- a/drivers/staging/line6/midibuf.c ++++ b/drivers/staging/line6/midibuf.c +@@ -64,9 +64,9 @@ int line6_midibuf_init(struct MidiBuffer *this, int size, int split) + + void line6_midibuf_status(struct MidiBuffer *this) + { +- pr_debug("midibuf size=%d split=%d pos_read=%d pos_write=%d " +- "full=%d command_prev=%02x\n", this->size, this->split, +- this->pos_read, this->pos_write, this->full, this->command_prev); ++ pr_debug("midibuf size=%d split=%d pos_read=%d pos_write=%d full=%d command_prev=%02x\n", ++ this->size, this->split, this->pos_read, this->pos_write, ++ this->full, this->command_prev); + } + + int line6_midibuf_bytes_free(struct MidiBuffer *this) diff --git a/debian/patches/features/all/line6/0046-staging-line6-shorten-comment-below-80-chars-in-pcm..patch b/debian/patches/features/all/line6/0046-staging-line6-shorten-comment-below-80-chars-in-pcm..patch new file mode 100644 index 000000000..2c529054a --- /dev/null +++ b/debian/patches/features/all/line6/0046-staging-line6-shorten-comment-below-80-chars-in-pcm..patch @@ -0,0 +1,34 @@ +From: Stefan Hajnoczi +Date: Sun, 11 Nov 2012 13:24:41 +0100 +Subject: [046/106] staging: line6: shorten comment below 80 chars in pcm.c + +commit 928f25ee4393a94d80ab829427e1047a64702187 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pcm.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c +index 7fe44a6..6c1e313 100644 +--- a/drivers/staging/line6/pcm.c ++++ b/drivers/staging/line6/pcm.c +@@ -109,7 +109,7 @@ int line6_pcm_acquire(struct snd_line6_pcm *line6pcm, int channels) + line6pcm->prev_fbuf = NULL; + + if (test_flags(flags_old, flags_new, LINE6_BITS_CAPTURE_BUFFER)) { +- /* We may be invoked multiple times in a row so allocate once only */ ++ /* Invoked multiple times in a row so allocate once only */ + if (!line6pcm->buffer_in) { + line6pcm->buffer_in = + kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS * +@@ -148,7 +148,7 @@ int line6_pcm_acquire(struct snd_line6_pcm *line6pcm, int channels) + } + + if (test_flags(flags_old, flags_new, LINE6_BITS_PLAYBACK_BUFFER)) { +- /* We may be invoked multiple times in a row so allocate once only */ ++ /* Invoked multiple times in a row so allocate once only */ + if (!line6pcm->buffer_out) { + line6pcm->buffer_out = + kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS * diff --git a/debian/patches/features/all/line6/0047-staging-line6-drop-trailing-whitespace-in-pcm.h.patch b/debian/patches/features/all/line6/0047-staging-line6-drop-trailing-whitespace-in-pcm.h.patch new file mode 100644 index 000000000..be8de3555 --- /dev/null +++ b/debian/patches/features/all/line6/0047-staging-line6-drop-trailing-whitespace-in-pcm.h.patch @@ -0,0 +1,25 @@ +From: Stefan Hajnoczi +Date: Sun, 11 Nov 2012 13:24:42 +0100 +Subject: [047/106] staging: line6: drop trailing whitespace in pcm.h + +commit b957e0ceb667fe4f2a18275b5187b2813b983baf upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pcm.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/staging/line6/pcm.h b/drivers/staging/line6/pcm.h +index 5210ec8..6aa0d46 100644 +--- a/drivers/staging/line6/pcm.h ++++ b/drivers/staging/line6/pcm.h +@@ -167,7 +167,7 @@ enum { + #endif + LINE6_BIT_PCM_ALSA_CAPTURE_STREAM | + LINE6_BIT_PCM_MONITOR_CAPTURE_STREAM, +- ++ + LINE6_BITS_STREAM = + LINE6_BITS_PLAYBACK_STREAM | + LINE6_BITS_CAPTURE_STREAM diff --git a/debian/patches/features/all/line6/0048-staging-line6-wrap-lines-to-80-chars-in-playback.c.patch b/debian/patches/features/all/line6/0048-staging-line6-wrap-lines-to-80-chars-in-playback.c.patch new file mode 100644 index 000000000..bad4f8c45 --- /dev/null +++ b/debian/patches/features/all/line6/0048-staging-line6-wrap-lines-to-80-chars-in-playback.c.patch @@ -0,0 +1,80 @@ +From: Stefan Hajnoczi +Date: Sun, 11 Nov 2012 13:24:43 +0100 +Subject: [048/106] staging: line6: wrap lines to 80 chars in playback.c + +commit 6a8ec8769d4613a5fbd981bfb3e5925b29d4140d upstream. + +There are a few instances of 80+ character lines in playback.c. Two +instances are just because of a useless comment "this is somewhat +paranoid", so drop the comment. Other instances are straightforward +line wrapping. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/playback.c | 17 +++++++++++------ + 1 file changed, 11 insertions(+), 6 deletions(-) + +diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c +index a0ab9d0..4cf23af 100644 +--- a/drivers/staging/line6/playback.c ++++ b/drivers/staging/line6/playback.c +@@ -185,7 +185,7 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm) + if (urb_size == 0) { + /* can't determine URB size */ + spin_unlock_irqrestore(&line6pcm->lock_audio_out, flags); +- dev_err(line6pcm->line6->ifcdev, "driver bug: urb_size = 0\n"); /* this is somewhat paranoid */ ++ dev_err(line6pcm->line6->ifcdev, "driver bug: urb_size = 0\n"); + return -EINVAL; + } + +@@ -218,7 +218,8 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm) + len * bytes_per_frame, runtime->dma_area, + (urb_frames - len) * bytes_per_frame); + } else +- dev_err(line6pcm->line6->ifcdev, "driver bug: len = %d\n", len); /* this is somewhat paranoid */ ++ dev_err(line6pcm->line6->ifcdev, "driver bug: len = %d\n", ++ len); + } else { + memcpy(urb_out->transfer_buffer, + runtime->dma_area + +@@ -319,7 +320,8 @@ void line6_unlink_audio_out_urbs(struct snd_line6_pcm *line6pcm) + } + + /* +- Wait until unlinking of all currently active playback URBs has been finished. ++ Wait until unlinking of all currently active playback URBs has been ++ finished. + */ + void line6_wait_clear_audio_out_urbs(struct snd_line6_pcm *line6pcm) + { +@@ -413,7 +415,8 @@ static void audio_out_callback(struct urb *urb) + if (!shutdown) { + submit_audio_out_urb(line6pcm); + +- if (test_bit(LINE6_INDEX_PCM_ALSA_PLAYBACK_STREAM, &line6pcm->flags)) { ++ if (test_bit(LINE6_INDEX_PCM_ALSA_PLAYBACK_STREAM, ++ &line6pcm->flags)) { + line6pcm->bytes_out += length; + if (line6pcm->bytes_out >= line6pcm->period_out) { + line6pcm->bytes_out %= line6pcm->period_out; +@@ -499,7 +502,8 @@ int snd_line6_playback_trigger(struct snd_line6_pcm *line6pcm, int cmd) + #ifdef CONFIG_PM + case SNDRV_PCM_TRIGGER_RESUME: + #endif +- err = line6_pcm_acquire(line6pcm, LINE6_BIT_PCM_ALSA_PLAYBACK_STREAM); ++ err = line6_pcm_acquire(line6pcm, ++ LINE6_BIT_PCM_ALSA_PLAYBACK_STREAM); + + if (err < 0) + return err; +@@ -510,7 +514,8 @@ int snd_line6_playback_trigger(struct snd_line6_pcm *line6pcm, int cmd) + #ifdef CONFIG_PM + case SNDRV_PCM_TRIGGER_SUSPEND: + #endif +- err = line6_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_PLAYBACK_STREAM); ++ err = line6_pcm_release(line6pcm, ++ LINE6_BIT_PCM_ALSA_PLAYBACK_STREAM); + + if (err < 0) + return err; diff --git a/debian/patches/features/all/line6/0049-staging-line6-replace-deprecated-strict_strtol-in-to.patch b/debian/patches/features/all/line6/0049-staging-line6-replace-deprecated-strict_strtol-in-to.patch new file mode 100644 index 000000000..7ac5cd485 --- /dev/null +++ b/debian/patches/features/all/line6/0049-staging-line6-replace-deprecated-strict_strtol-in-to.patch @@ -0,0 +1,52 @@ +From: Stefan Hajnoczi +Date: Sun, 11 Nov 2012 13:24:44 +0100 +Subject: [049/106] staging: line6: replace deprecated strict_strtol() in + toneport.c + +commit b07d945227e4e62d93e26c694bf0e7b70978a7d6 upstream. + +The LED value is an int, so replace strict_strtol() with kstrtoint(). +It's safe to pass in the actual variable instead of a local temporary +because strto*() doesn't write to the result unless the function returns +success. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/toneport.c | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +diff --git a/drivers/staging/line6/toneport.c b/drivers/staging/line6/toneport.c +index 31b624b..a529dd3 100644 +--- a/drivers/staging/line6/toneport.c ++++ b/drivers/staging/line6/toneport.c +@@ -127,13 +127,11 @@ static ssize_t toneport_set_led_red(struct device *dev, + const char *buf, size_t count) + { + int retval; +- long value; + +- retval = strict_strtol(buf, 10, &value); ++ retval = kstrtoint(buf, 10, &led_red); + if (retval) + return retval; + +- led_red = value; + toneport_update_led(dev); + return count; + } +@@ -143,13 +141,11 @@ static ssize_t toneport_set_led_green(struct device *dev, + const char *buf, size_t count) + { + int retval; +- long value; + +- retval = strict_strtol(buf, 10, &value); ++ retval = kstrtoint(buf, 10, &led_green); + if (retval) + return retval; + +- led_green = value; + toneport_update_led(dev); + return count; + } diff --git a/debian/patches/features/all/line6/0050-staging-line6-wrap-lines-to-80-chars-in-usbdefs.h.patch b/debian/patches/features/all/line6/0050-staging-line6-wrap-lines-to-80-chars-in-usbdefs.h.patch new file mode 100644 index 000000000..53db41e62 --- /dev/null +++ b/debian/patches/features/all/line6/0050-staging-line6-wrap-lines-to-80-chars-in-usbdefs.h.patch @@ -0,0 +1,35 @@ +From: Stefan Hajnoczi +Date: Sun, 11 Nov 2012 13:24:45 +0100 +Subject: [050/106] staging: line6: wrap lines to 80 chars in usbdefs.h + +commit 4391bb982b9d0ccbae724dd8f8d95c1ddb725ae3 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/usbdefs.h | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/drivers/staging/line6/usbdefs.h b/drivers/staging/line6/usbdefs.h +index 353d59d..43eb540 100644 +--- a/drivers/staging/line6/usbdefs.h ++++ b/drivers/staging/line6/usbdefs.h +@@ -83,11 +83,15 @@ enum { + LINE6_BIT(VARIAX), + + 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_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 ++ LINE6_BITS_BASSPODXTALL = LINE6_BIT_BASSPODXT | ++ LINE6_BIT_BASSPODXTLIVE | ++ LINE6_BIT_BASSPODXTPRO + }; + + /* device supports settings parameter via USB */ diff --git a/debian/patches/features/all/line6/0051-staging-line6-wrap-comment-to-80-chars-in-variax.c.patch b/debian/patches/features/all/line6/0051-staging-line6-wrap-comment-to-80-chars-in-variax.c.patch new file mode 100644 index 000000000..ed76232ba --- /dev/null +++ b/debian/patches/features/all/line6/0051-staging-line6-wrap-comment-to-80-chars-in-variax.c.patch @@ -0,0 +1,27 @@ +From: Stefan Hajnoczi +Date: Sun, 11 Nov 2012 13:24:46 +0100 +Subject: [051/106] staging: line6: wrap comment to 80 chars in variax.c + +commit e5603cbd7f6b8d8ec6a59d3ce11c3fa28ef2a733 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/variax.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c +index f97416b..1b85ecc 100644 +--- a/drivers/staging/line6/variax.c ++++ b/drivers/staging/line6/variax.c +@@ -160,7 +160,9 @@ static void variax_startup5(unsigned long data) + /* current model dump: */ + line6_dump_request_async(&variax->dumpreq, &variax->line6, 0, + VARIAX_DUMP_PASS1); +- /* passes 2 and 3 are performed implicitly before entering variax_startup6 */ ++ /* passes 2 and 3 are performed implicitly before entering ++ * variax_startup6. ++ */ + } + + static void variax_startup6(struct usb_line6_variax *variax) diff --git a/debian/patches/features/all/line6/0052-staging-line6-replace-DEBUG_MESSAGES-with-dev_dbg.patch b/debian/patches/features/all/line6/0052-staging-line6-replace-DEBUG_MESSAGES-with-dev_dbg.patch new file mode 100644 index 000000000..ec8d74ebe --- /dev/null +++ b/debian/patches/features/all/line6/0052-staging-line6-replace-DEBUG_MESSAGES-with-dev_dbg.patch @@ -0,0 +1,174 @@ +From: Stefan Hajnoczi +Date: Sun, 11 Nov 2012 13:52:24 +0100 +Subject: [052/106] staging: line6: replace DEBUG_MESSAGES() with dev_dbg() + +commit e00d33cb5de0c68ed95513d3b4f42f9e3697f8ee upstream. + +The dyndbg feature allows dev_dbg() calls to be enabled/disabled at +runtime and is therefore more convenient than static debug log messages. +Use dev_dbg() instead of the line6-specific DEBUG_MESSAGES() macro. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/driver.c | 6 ++--- + drivers/staging/line6/pod.c | 57 +++++++++++++++------------------------- + drivers/staging/line6/variax.c | 12 ++++----- + 3 files changed, 28 insertions(+), 47 deletions(-) + +diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c +index ac11a3b..571f2ce 100644 +--- a/drivers/staging/line6/driver.c ++++ b/drivers/staging/line6/driver.c +@@ -412,10 +412,8 @@ static void line6_data_received(struct urb *urb) + + if (done < urb->actual_length) { + line6_midibuf_ignore(mb, done); +- DEBUG_MESSAGES(dev_err +- (line6->ifcdev, +- "%d %d buffer overflow - message skipped\n", +- done, urb->actual_length)); ++ dev_dbg(line6->ifcdev, "%d %d buffer overflow - message skipped\n", ++ done, urb->actual_length); + } + + for (;;) { +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 9edd053..4a86f7a 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -252,25 +252,19 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + break; + + default: +- DEBUG_MESSAGES(dev_err +- (pod-> +- line6.ifcdev, +- "unknown dump code %02X\n", +- pod-> +- dumpreq.in_progress)); ++ dev_dbg(pod->line6.ifcdev, ++ "unknown dump code %02X\n", ++ pod->dumpreq.in_progress); + } + + line6_dump_finished(&pod->dumpreq); + pod_startup3(pod); + } else +- DEBUG_MESSAGES(dev_err +- (pod->line6.ifcdev, +- "wrong size of channel dump message (%d instead of %d)\n", +- pod-> +- line6.message_length, +- (int) +- sizeof(pod->prog_data) + +- 7)); ++ dev_dbg(pod->line6.ifcdev, ++ "wrong size of channel dump message (%d instead of %d)\n", ++ pod->line6.message_length, ++ (int)sizeof(pod->prog_data) + ++ 7); + + break; + +@@ -302,11 +296,9 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + #undef PROCESS_SYSTEM_PARAM + + default: +- DEBUG_MESSAGES(dev_err +- (pod-> +- line6.ifcdev, +- "unknown tuner/system response %02X\n", +- buf[6])); ++ dev_dbg(pod->line6.ifcdev, ++ "unknown tuner/system response %02X\n", ++ buf[6]); + } + + break; +@@ -321,25 +313,21 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + break; + + case POD_SYSEX_CLIP: +- DEBUG_MESSAGES(dev_err +- (pod->line6.ifcdev, +- "audio clipped\n")); ++ dev_dbg(pod->line6.ifcdev, "audio clipped\n"); + pod->clipping.value = 1; + wake_up(&pod->clipping.wait); + break; + + case POD_SYSEX_STORE: +- DEBUG_MESSAGES(dev_err +- (pod->line6.ifcdev, +- "message %02X not yet implemented\n", +- buf[5])); ++ dev_dbg(pod->line6.ifcdev, ++ "message %02X not yet implemented\n", ++ buf[5]); + break; + + default: +- DEBUG_MESSAGES(dev_err +- (pod->line6.ifcdev, +- "unknown sysex message %02X\n", +- buf[5])); ++ dev_dbg(pod->line6.ifcdev, ++ "unknown sysex message %02X\n", ++ buf[5]); + } + } else + if (memcmp +@@ -352,9 +340,7 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + buf[10]; + pod_startup4(pod); + } else +- DEBUG_MESSAGES(dev_err +- (pod->line6.ifcdev, +- "unknown sysex header\n")); ++ dev_dbg(pod->line6.ifcdev, "unknown sysex header\n"); + + break; + +@@ -362,9 +348,8 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + break; + + default: +- DEBUG_MESSAGES(dev_err +- (pod->line6.ifcdev, +- "POD: unknown message %02X\n", buf[0])); ++ dev_dbg(pod->line6.ifcdev, "POD: unknown message %02X\n", ++ buf[0]); + } + } + +diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c +index 1b85ecc..8df529f 100644 +--- a/drivers/staging/line6/variax.c ++++ b/drivers/staging/line6/variax.c +@@ -262,10 +262,9 @@ void line6_variax_process_message(struct usb_line6_variax *variax) + 2, VARIAX_DUMP_PASS3); + } + } else { +- DEBUG_MESSAGES(dev_err +- (variax->line6.ifcdev, +- "illegal length %d of model data\n", +- variax->line6.message_length)); ++ dev_dbg(variax->line6.ifcdev, ++ "illegal length %d of model data\n", ++ variax->line6.message_length); + line6_dump_finished(&variax->dumpreq); + } + } else if (memcmp(buf + 1, variax_request_bank + 1, +@@ -295,9 +294,8 @@ void line6_variax_process_message(struct usb_line6_variax *variax) + break; + + default: +- DEBUG_MESSAGES(dev_err +- (variax->line6.ifcdev, +- "Variax: unknown message %02X\n", buf[0])); ++ dev_dbg(variax->line6.ifcdev, ++ "Variax: unknown message %02X\n", buf[0]); + } + } + diff --git a/debian/patches/features/all/line6/0053-staging-line6-drop-unused-DEBUG_MESSAGES-macro.patch b/debian/patches/features/all/line6/0053-staging-line6-drop-unused-DEBUG_MESSAGES-macro.patch new file mode 100644 index 000000000..8043da08d --- /dev/null +++ b/debian/patches/features/all/line6/0053-staging-line6-drop-unused-DEBUG_MESSAGES-macro.patch @@ -0,0 +1,32 @@ +From: Stefan Hajnoczi +Date: Sun, 11 Nov 2012 13:52:25 +0100 +Subject: [053/106] staging: line6: drop unused DEBUG_MESSAGES() macro + +commit 60fb08b38eb1c9ffdde52817417f4b87f52be7b3 upstream. + +The DEBUG_MESSAGES() macro is no longer needed since dev_dbg() is now +used for debug messages. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/driver.h | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/drivers/staging/line6/driver.h b/drivers/staging/line6/driver.h +index 35246cf..9dd8ff4 100644 +--- a/drivers/staging/line6/driver.h ++++ b/drivers/staging/line6/driver.h +@@ -52,12 +52,6 @@ + + #define LINE6_CHANNEL_MASK 0x0f + +-#ifdef CONFIG_LINE6_USB_DEBUG +-#define DEBUG_MESSAGES(x) (x) +-#else +-#define DEBUG_MESSAGES(x) +-#endif +- + #define MISSING_CASE \ + printk(KERN_ERR "line6usb driver bug: missing case in %s:%d\n", \ + __FILE__, __LINE__) diff --git a/debian/patches/features/all/line6/0054-staging-line6-drop-unused-CONFIG_LINE6_USB_DEBUG.patch b/debian/patches/features/all/line6/0054-staging-line6-drop-unused-CONFIG_LINE6_USB_DEBUG.patch new file mode 100644 index 000000000..70beae909 --- /dev/null +++ b/debian/patches/features/all/line6/0054-staging-line6-drop-unused-CONFIG_LINE6_USB_DEBUG.patch @@ -0,0 +1,35 @@ +From: Stefan Hajnoczi +Date: Sun, 11 Nov 2012 13:52:26 +0100 +Subject: [054/106] staging: line6: drop unused CONFIG_LINE6_USB_DEBUG + +commit bf83e30ec654e3a6d79e89ae70d1c9811a2387df upstream. + +The CONFIG_LINE6_USB_DEBUG option is no longer relevant since dyndbg +dev_dbg() is now used instead of a compile-time decision whether to +enable debug messages or not. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/Kconfig | 8 -------- + 1 file changed, 8 deletions(-) + +diff --git a/drivers/staging/line6/Kconfig b/drivers/staging/line6/Kconfig +index 43120ff..a5ded12 100644 +--- a/drivers/staging/line6/Kconfig ++++ b/drivers/staging/line6/Kconfig +@@ -23,14 +23,6 @@ menuconfig LINE6_USB + + if LINE6_USB + +-config LINE6_USB_DEBUG +- bool "print debug messages" +- default n +- help +- Say Y here to write debug messages to the syslog. +- +- If unsure, say N. +- + config LINE6_USB_DUMP_CTRL + bool "dump control messages" + default n diff --git a/debian/patches/features/all/line6/0055-staging-line6-drop-control-URB-dumping-code.patch b/debian/patches/features/all/line6/0055-staging-line6-drop-control-URB-dumping-code.patch new file mode 100644 index 000000000..a717a8b84 --- /dev/null +++ b/debian/patches/features/all/line6/0055-staging-line6-drop-control-URB-dumping-code.patch @@ -0,0 +1,117 @@ +From: Stefan Hajnoczi +Date: Wed, 14 Nov 2012 08:50:41 +0100 +Subject: [055/106] staging: line6: drop control URB dumping code + +commit 70ce93954f571eb913ee52529fa87fd1a315b2d1 upstream. + +The usbmon feature should be used instead of manually dumping control +URBs. There are a few advantages to using usbmon: + + * Can be turned on/off at runtime + * Provides full USB-level traffic + * tcpdump and wireshark support for powerful analysis + * No driver-specific code is required + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/driver.c | 36 ------------------------------------ + drivers/staging/line6/midi.c | 3 --- + 2 files changed, 39 deletions(-) + +diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c +index 571f2ce..fda92d1e 100644 +--- a/drivers/staging/line6/driver.c ++++ b/drivers/staging/line6/driver.c +@@ -177,22 +177,6 @@ void line6_write_hexdump(struct usb_line6 *line6, char dir, + } + #endif + +-#ifdef CONFIG_LINE6_USB_DUMP_CTRL +-/* +- Dump URB data to syslog. +-*/ +-static void line6_dump_urb(struct urb *urb) +-{ +- struct usb_line6 *line6 = (struct usb_line6 *)urb->context; +- +- if (urb->status < 0) +- return; +- +- line6_write_hexdump(line6, 'R', (unsigned char *)urb->transfer_buffer, +- urb->actual_length); +-} +-#endif +- + /* + Send raw message in pieces of wMaxPacketSize bytes. + */ +@@ -201,10 +185,6 @@ int line6_send_raw_message(struct usb_line6 *line6, const char *buffer, + { + int i, done = 0; + +-#ifdef CONFIG_LINE6_USB_DUMP_CTRL +- line6_write_hexdump(line6, 'S', buffer, size); +-#endif +- + for (i = 0; i < size; i += line6->max_packet_size) { + int partial; + const char *frag_buf = buffer + i; +@@ -259,10 +239,6 @@ static int line6_send_raw_message_async_part(struct message *msg, + (char *)msg->buffer + done, bytes, + line6_async_request_sent, msg, line6->interval); + +-#ifdef CONFIG_LINE6_USB_DUMP_CTRL +- line6_write_hexdump(line6, 'S', (char *)msg->buffer + done, bytes); +-#endif +- + msg->done += bytes; + retval = usb_submit_urb(urb, GFP_ATOMIC); + +@@ -403,10 +379,6 @@ static void line6_data_received(struct urb *urb) + if (urb->status == -ESHUTDOWN) + return; + +-#ifdef CONFIG_LINE6_USB_DUMP_CTRL +- line6_dump_urb(urb); +-#endif +- + done = + line6_midibuf_write(mb, urb->transfer_buffer, urb->actual_length); + +@@ -502,10 +474,6 @@ int line6_send_program(struct usb_line6 *line6, u8 value) + buffer[0] = LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST; + buffer[1] = value; + +-#ifdef CONFIG_LINE6_USB_DUMP_CTRL +- line6_write_hexdump(line6, 'S', buffer, 2); +-#endif +- + retval = usb_interrupt_msg(line6->usbdev, + usb_sndintpipe(line6->usbdev, + line6->ep_control_write), +@@ -539,10 +507,6 @@ int line6_transmit_parameter(struct usb_line6 *line6, int param, u8 value) + buffer[1] = param; + buffer[2] = value; + +-#ifdef CONFIG_LINE6_USB_DUMP_CTRL +- line6_write_hexdump(line6, 'S', buffer, 3); +-#endif +- + retval = usb_interrupt_msg(line6->usbdev, + usb_sndintpipe(line6->usbdev, + line6->ep_control_write), +diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c +index 5040729..348d425 100644 +--- a/drivers/staging/line6/midi.c ++++ b/drivers/staging/line6/midi.c +@@ -131,9 +131,6 @@ static int send_midi_async(struct usb_line6 *line6, unsigned char *data, + dev_err(line6->ifcdev, "Out of memory\n"); + return -ENOMEM; + } +-#ifdef CONFIG_LINE6_USB_DUMP_CTRL +- line6_write_hexdump(line6, 'S', data, length); +-#endif + + transfer_buffer = kmemdup(data, length, GFP_ATOMIC); + diff --git a/debian/patches/features/all/line6/0056-staging-line6-drop-CONTROL-from-CONFIG_LINE6_USB_DUM.patch b/debian/patches/features/all/line6/0056-staging-line6-drop-CONTROL-from-CONFIG_LINE6_USB_DUM.patch new file mode 100644 index 000000000..95abbdad9 --- /dev/null +++ b/debian/patches/features/all/line6/0056-staging-line6-drop-CONTROL-from-CONFIG_LINE6_USB_DUM.patch @@ -0,0 +1,29 @@ +From: Stefan Hajnoczi +Date: Wed, 14 Nov 2012 08:50:42 +0100 +Subject: [056/106] staging: line6: drop CONTROL from + CONFIG_LINE6_USB_DUMP_ANY + +commit 19ae77935e45d60bf64144e2d67074a2886db245 upstream. + +CONFIG_LINE6_USB_DUMP_CTRL is no longer used by the code and therefore +no longer plays a role in CONFIG_LINE6_USB_DUMP_ANY. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/driver.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/staging/line6/driver.h b/drivers/staging/line6/driver.h +index 9dd8ff4..7770635 100644 +--- a/drivers/staging/line6/driver.h ++++ b/drivers/staging/line6/driver.h +@@ -20,7 +20,7 @@ + + #define DRIVER_NAME "line6usb" + +-#if defined(CONFIG_LINE6_USB_DUMP_CTRL) || defined(CONFIG_LINE6_USB_DUMP_MIDI) || defined(CONFIG_LINE6_USB_DUMP_PCM) ++#if defined(CONFIG_LINE6_USB_DUMP_MIDI) || defined(CONFIG_LINE6_USB_DUMP_PCM) + #define CONFIG_LINE6_USB_DUMP_ANY + #endif + diff --git a/debian/patches/features/all/line6/0057-staging-line6-drop-unused-CONFIG_LINE6_USB_DUMP_CTRL.patch b/debian/patches/features/all/line6/0057-staging-line6-drop-unused-CONFIG_LINE6_USB_DUMP_CTRL.patch new file mode 100644 index 000000000..28a0342a4 --- /dev/null +++ b/debian/patches/features/all/line6/0057-staging-line6-drop-unused-CONFIG_LINE6_USB_DUMP_CTRL.patch @@ -0,0 +1,32 @@ +From: Stefan Hajnoczi +Date: Wed, 14 Nov 2012 08:50:43 +0100 +Subject: [057/106] staging: line6: drop unused CONFIG_LINE6_USB_DUMP_CTRL + +commit 4aea449ac8c4955f18c49ecb6fd3e0417a2073c0 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/Kconfig | 9 --------- + 1 file changed, 9 deletions(-) + +diff --git a/drivers/staging/line6/Kconfig b/drivers/staging/line6/Kconfig +index a5ded12..2101799 100644 +--- a/drivers/staging/line6/Kconfig ++++ b/drivers/staging/line6/Kconfig +@@ -23,15 +23,6 @@ menuconfig LINE6_USB + + if LINE6_USB + +-config LINE6_USB_DUMP_CTRL +- bool "dump control messages" +- default n +- help +- Say Y here to write control messages sent to and received from +- Line6 devices to the syslog. +- +- If unsure, say N. +- + config LINE6_USB_DUMP_MIDI + bool "dump MIDI messages" + default n diff --git a/debian/patches/features/all/line6/0058-staging-line6-drop-MIDI-dumping-code.patch b/debian/patches/features/all/line6/0058-staging-line6-drop-MIDI-dumping-code.patch new file mode 100644 index 000000000..1e8cf0168 --- /dev/null +++ b/debian/patches/features/all/line6/0058-staging-line6-drop-MIDI-dumping-code.patch @@ -0,0 +1,46 @@ +From: Stefan Hajnoczi +Date: Wed, 14 Nov 2012 08:50:44 +0100 +Subject: [058/106] staging: line6: drop MIDI dumping code + +commit 36a01f4d971c4d2d9923a94ca21ccd3f2d579563 upstream. + +ALSA amidi(1) and aseqdump(1) can be used to dump MIDI instead of +manually dumping MIDI messages in the driver. The advantage of using +these existing tools is that can be used at run-time rather than +compile-time. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/driver.c | 3 --- + drivers/staging/line6/midi.c | 3 --- + 2 files changed, 6 deletions(-) + +diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c +index fda92d1e..0bc838d 100644 +--- a/drivers/staging/line6/driver.c ++++ b/drivers/staging/line6/driver.c +@@ -402,9 +402,6 @@ static void line6_data_received(struct urb *urb) + continue; + + line6->message_length = done; +-#ifdef CONFIG_LINE6_USB_DUMP_MIDI +- line6_write_hexdump(line6, 'r', line6->buffer_message, done); +-#endif + line6_midi_receive(line6, line6->buffer_message, done); + + switch (line6->usbdev->descriptor.idProduct) { +diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c +index 348d425..c8e099b 100644 +--- a/drivers/staging/line6/midi.c ++++ b/drivers/staging/line6/midi.c +@@ -59,9 +59,6 @@ static void line6_midi_transmit(struct snd_rawmidi_substream *substream) + if (done == 0) + break; + +-#ifdef CONFIG_LINE6_USB_DUMP_MIDI +- line6_write_hexdump(line6, 's', chunk, done); +-#endif + line6_midibuf_write(mb, chunk, done); + snd_rawmidi_transmit_ack(substream, done); + } diff --git a/debian/patches/features/all/line6/0059-staging-line6-drop-MIDI-from-CONFIG_LINE6_USB_DUMP_A.patch b/debian/patches/features/all/line6/0059-staging-line6-drop-MIDI-from-CONFIG_LINE6_USB_DUMP_A.patch new file mode 100644 index 000000000..22f123cf1 --- /dev/null +++ b/debian/patches/features/all/line6/0059-staging-line6-drop-MIDI-from-CONFIG_LINE6_USB_DUMP_A.patch @@ -0,0 +1,28 @@ +From: Stefan Hajnoczi +Date: Wed, 14 Nov 2012 08:50:45 +0100 +Subject: [059/106] staging: line6: drop MIDI from CONFIG_LINE6_USB_DUMP_ANY + +commit 10c39f1d717d3e5e8bcb2998f7dee4362edda26a upstream. + +CONFIG_LINE6_USB_DUMP_MIDI is no longer used by the code and therefore +no longer plays a role in CONFIG_LINE6_USB_DUMP_ANY. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/driver.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/staging/line6/driver.h b/drivers/staging/line6/driver.h +index 7770635..f0be5a2 100644 +--- a/drivers/staging/line6/driver.h ++++ b/drivers/staging/line6/driver.h +@@ -20,7 +20,7 @@ + + #define DRIVER_NAME "line6usb" + +-#if defined(CONFIG_LINE6_USB_DUMP_MIDI) || defined(CONFIG_LINE6_USB_DUMP_PCM) ++#if defined(CONFIG_LINE6_USB_DUMP_PCM) + #define CONFIG_LINE6_USB_DUMP_ANY + #endif + diff --git a/debian/patches/features/all/line6/0060-staging-line6-drop-unused-CONFIG_LINE6_USB_DUMP_MIDI.patch b/debian/patches/features/all/line6/0060-staging-line6-drop-unused-CONFIG_LINE6_USB_DUMP_MIDI.patch new file mode 100644 index 000000000..2638cc6dd --- /dev/null +++ b/debian/patches/features/all/line6/0060-staging-line6-drop-unused-CONFIG_LINE6_USB_DUMP_MIDI.patch @@ -0,0 +1,32 @@ +From: Stefan Hajnoczi +Date: Wed, 14 Nov 2012 08:50:46 +0100 +Subject: [060/106] staging: line6: drop unused CONFIG_LINE6_USB_DUMP_MIDI + +commit c6c2f47f30c44f3fdae9362f811f95109f81303e upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/Kconfig | 9 --------- + 1 file changed, 9 deletions(-) + +diff --git a/drivers/staging/line6/Kconfig b/drivers/staging/line6/Kconfig +index 2101799..80a7202 100644 +--- a/drivers/staging/line6/Kconfig ++++ b/drivers/staging/line6/Kconfig +@@ -23,15 +23,6 @@ menuconfig LINE6_USB + + if LINE6_USB + +-config LINE6_USB_DUMP_MIDI +- bool "dump MIDI messages" +- default n +- help +- Say Y here to write MIDI messages sent to and received from +- Line6 devices to the syslog. +- +- If unsure, say N. +- + config LINE6_USB_DUMP_PCM + bool "dump PCM data" + default n diff --git a/debian/patches/features/all/line6/0061-staging-line6-drop-channel-sysfs-attr.patch b/debian/patches/features/all/line6/0061-staging-line6-drop-channel-sysfs-attr.patch new file mode 100644 index 000000000..dd2f387bc --- /dev/null +++ b/debian/patches/features/all/line6/0061-staging-line6-drop-channel-sysfs-attr.patch @@ -0,0 +1,133 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:40 +0100 +Subject: [061/106] staging: line6: drop channel sysfs attr + +commit 236666e958dd3e0d2b9caf226b49633475d6cbd2 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 51 ------------------------------------------- + drivers/staging/line6/pod.h | 5 ----- + 2 files changed, 56 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 4a86f7a..e3e2247 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -223,7 +223,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + + case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_DEVICE: + case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST: +- pod->channel_num = buf[1]; + pod->dirty = 0; + set_bit(POD_CHANNEL_DIRTY, &pod->atomic_flags); + line6_dump_request_async(&pod->dumpreq, &pod->line6, 0, +@@ -388,19 +387,6 @@ void line6_pod_midi_postprocess(struct usb_line6_pod *pod, unsigned char *data, + } + + /* +- Send channel number (i.e., switch to a different sound). +-*/ +-static void pod_send_channel(struct usb_line6_pod *pod, u8 value) +-{ +- line6_invalidate_current(&pod->dumpreq); +- +- if (line6_send_program(&pod->line6, value) == 0) +- pod->channel_num = value; +- else +- line6_dump_finished(&pod->dumpreq); +-} +- +-/* + Transmit PODxt Pro control parameter. + */ + void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param, +@@ -526,37 +512,6 @@ static ssize_t get_name_generic(struct usb_line6_pod *pod, const char *str, + } + + /* +- "read" request on "channel" special file. +-*/ +-static ssize_t pod_get_channel(struct device *dev, +- struct device_attribute *attr, char *buf) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_pod *pod = usb_get_intfdata(interface); +- return sprintf(buf, "%d\n", pod->channel_num); +-} +- +-/* +- "write" request on "channel" special file. +-*/ +-static ssize_t pod_set_channel(struct device *dev, +- struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_pod *pod = usb_get_intfdata(interface); +- u8 value; +- int ret; +- +- ret = kstrtou8(buf, 10, &value); +- if (ret) +- return ret; +- +- pod_send_channel(pod, value); +- return count; +-} +- +-/* + "read" request on "name" special file. + */ + static ssize_t pod_get_name(struct device *dev, struct device_attribute *attr, +@@ -1036,8 +991,6 @@ POD_GET_SYSTEM_PARAM(tuner_pitch, 1); + #undef GET_SYSTEM_PARAM + + /* POD special files: */ +-static DEVICE_ATTR(channel, S_IWUSR | S_IRUGO, pod_get_channel, +- pod_set_channel); + static DEVICE_ATTR(clip, S_IRUGO, pod_wait_for_clip, line6_nop_write); + static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write); + static DEVICE_ATTR(dirty, S_IRUGO, pod_get_dirty, line6_nop_write); +@@ -1153,7 +1106,6 @@ static int pod_create_files2(struct device *dev) + { + int err; + +- CHECK_RETURN(device_create_file(dev, &dev_attr_channel)); + CHECK_RETURN(device_create_file(dev, &dev_attr_clip)); + CHECK_RETURN(device_create_file(dev, &dev_attr_device_id)); + CHECK_RETURN(device_create_file(dev, &dev_attr_dirty)); +@@ -1200,8 +1152,6 @@ static int pod_try_init(struct usb_interface *interface, + if ((interface == NULL) || (pod == NULL)) + return -ENODEV; + +- pod->channel_num = 255; +- + /* initialize wait queues: */ + init_waitqueue_head(&pod->monitor_level.wait); + init_waitqueue_head(&pod->routing.wait); +@@ -1300,7 +1250,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + pod->line6. + properties->device_bit, dev); + +- device_remove_file(dev, &dev_attr_channel); + device_remove_file(dev, &dev_attr_clip); + device_remove_file(dev, &dev_attr_device_id); + device_remove_file(dev, &dev_attr_dirty); +diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h +index 47e0d1a..0f9e83d 100644 +--- a/drivers/staging/line6/pod.h ++++ b/drivers/staging/line6/pod.h +@@ -89,11 +89,6 @@ struct usb_line6_pod { + struct line6_dump_request dumpreq; + + /** +- Current program number. +- */ +- unsigned char channel_num; +- +- /** + Current program settings. + */ + struct pod_program prog_data; diff --git a/debian/patches/features/all/line6/0062-staging-line6-drop-clip-sysfs-attr.patch b/debian/patches/features/all/line6/0062-staging-line6-drop-clip-sysfs-attr.patch new file mode 100644 index 000000000..c17cae332 --- /dev/null +++ b/debian/patches/features/all/line6/0062-staging-line6-drop-clip-sysfs-attr.patch @@ -0,0 +1,105 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:41 +0100 +Subject: [062/106] staging: line6: drop clip sysfs attr + +commit cab3c900c191a21dad70fcc35d0156dc42d509c8 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 23 ----------------------- + drivers/staging/line6/pod.h | 5 ----- + 2 files changed, 28 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index e3e2247..4abe2de 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -26,7 +26,6 @@ + /* *INDENT-OFF* */ + + enum { +- POD_SYSEX_CLIP = 0x0f, + POD_SYSEX_SAVE = 0x24, + POD_SYSEX_SYSTEM = 0x56, + POD_SYSEX_SYSTEMREQ = 0x57, +@@ -311,12 +310,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + pod_save_button_pressed(pod, buf[6], buf[7]); + break; + +- case POD_SYSEX_CLIP: +- dev_dbg(pod->line6.ifcdev, "audio clipped\n"); +- pod->clipping.value = 1; +- wake_up(&pod->clipping.wait); +- break; +- + case POD_SYSEX_STORE: + dev_dbg(pod->line6.ifcdev, + "message %02X not yet implemented\n", +@@ -879,18 +872,6 @@ static ssize_t pod_get_device_id(struct device *dev, + } + + /* +- "read" request on "clip" special file. +-*/ +-static ssize_t pod_wait_for_clip(struct device *dev, +- struct device_attribute *attr, char *buf) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_pod *pod = usb_get_intfdata(interface); +- return wait_event_interruptible(pod->clipping.wait, +- pod->clipping.value != 0); +-} +- +-/* + POD startup procedure. + This is a sequence of functions with special requirements (e.g., must + not run immediately after initialization, must not run in interrupt +@@ -991,7 +972,6 @@ POD_GET_SYSTEM_PARAM(tuner_pitch, 1); + #undef GET_SYSTEM_PARAM + + /* POD special files: */ +-static DEVICE_ATTR(clip, S_IRUGO, pod_wait_for_clip, line6_nop_write); + static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write); + static DEVICE_ATTR(dirty, S_IRUGO, pod_get_dirty, line6_nop_write); + static DEVICE_ATTR(dump, S_IWUSR | S_IRUGO, pod_get_dump, pod_set_dump); +@@ -1106,7 +1086,6 @@ static int pod_create_files2(struct device *dev) + { + int err; + +- CHECK_RETURN(device_create_file(dev, &dev_attr_clip)); + CHECK_RETURN(device_create_file(dev, &dev_attr_device_id)); + CHECK_RETURN(device_create_file(dev, &dev_attr_dirty)); + CHECK_RETURN(device_create_file(dev, &dev_attr_dump)); +@@ -1159,7 +1138,6 @@ static int pod_try_init(struct usb_interface *interface, + init_waitqueue_head(&pod->tuner_freq.wait); + init_waitqueue_head(&pod->tuner_note.wait); + init_waitqueue_head(&pod->tuner_pitch.wait); +- init_waitqueue_head(&pod->clipping.wait); + + memset(pod->param_dirty, 0xff, sizeof(pod->param_dirty)); + +@@ -1250,7 +1228,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + pod->line6. + properties->device_bit, dev); + +- device_remove_file(dev, &dev_attr_clip); + device_remove_file(dev, &dev_attr_device_id); + device_remove_file(dev, &dev_attr_dirty); + device_remove_file(dev, &dev_attr_dump); +diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h +index 0f9e83d..fa247b8 100644 +--- a/drivers/staging/line6/pod.h ++++ b/drivers/staging/line6/pod.h +@@ -133,11 +133,6 @@ struct usb_line6_pod { + struct ValueWait routing; + + /** +- Wait for audio clipping event. +- */ +- struct ValueWait clipping; +- +- /** + Timer for device initializaton. + */ + struct timer_list startup_timer; diff --git a/debian/patches/features/all/line6/0063-staging-line6-drop-unused-param_dirty-bitmap.patch b/debian/patches/features/all/line6/0063-staging-line6-drop-unused-param_dirty-bitmap.patch new file mode 100644 index 000000000..7d0530459 --- /dev/null +++ b/debian/patches/features/all/line6/0063-staging-line6-drop-unused-param_dirty-bitmap.patch @@ -0,0 +1,88 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:42 +0100 +Subject: [063/106] staging: line6: drop unused param_dirty bitmap + +commit 9c29cf51d16f36c6b20b49091a1263a28aba7794 upstream. + +The param_dirty bitmap tracks which parameters have been modified since +saving a preset. The bitmap is never used though so we can drop this +deadcode. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 16 ---------------- + drivers/staging/line6/pod.h | 5 ----- + 2 files changed, 21 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 4abe2de..8fdbe9f 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -130,17 +130,6 @@ static void pod_startup2(unsigned long data); + static void pod_startup3(struct usb_line6_pod *pod); + static void pod_startup4(struct usb_line6_pod *pod); + +-/* +- Mark all parameters as dirty and notify waiting processes. +-*/ +-static void pod_mark_batch_all_dirty(struct usb_line6_pod *pod) +-{ +- int i; +- +- for (i = 0; i < POD_CONTROL_SIZE; i++) +- set_bit(i, pod->param_dirty); +-} +- + static char *pod_alloc_sysex_buffer(struct usb_line6_pod *pod, int code, + int size) + { +@@ -163,7 +152,6 @@ static void pod_dump(struct usb_line6_pod *pod, const unsigned char *data) + memcpy(sysex + SYSEX_DATA_OFS + 1, data, sizeof(pod->prog_data)); + line6_send_sysex_message(&pod->line6, sysex, size); + memcpy(&pod->prog_data, data, sizeof(pod->prog_data)); +- pod_mark_batch_all_dirty(pod); + kfree(sysex); + } + +@@ -173,7 +161,6 @@ static void pod_dump(struct usb_line6_pod *pod, const unsigned char *data) + static void pod_store_parameter(struct usb_line6_pod *pod, int param, int value) + { + pod->prog_data.control[param] = value; +- set_bit(param, pod->param_dirty); + pod->dirty = 1; + } + +@@ -239,7 +226,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + case LINE6_DUMP_CURRENT: + memcpy(&pod->prog_data, buf + 7, + sizeof(pod->prog_data)); +- pod_mark_batch_all_dirty(pod); + break; + + case POD_DUMP_MEMORY: +@@ -1139,8 +1125,6 @@ static int pod_try_init(struct usb_interface *interface, + init_waitqueue_head(&pod->tuner_note.wait); + init_waitqueue_head(&pod->tuner_pitch.wait); + +- memset(pod->param_dirty, 0xff, sizeof(pod->param_dirty)); +- + /* initialize USB buffers: */ + err = line6_dumpreq_init(&pod->dumpreq, pod_request_channel, + sizeof(pod_request_channel)); +diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h +index fa247b8..dd6c318 100644 +--- a/drivers/staging/line6/pod.h ++++ b/drivers/staging/line6/pod.h +@@ -148,11 +148,6 @@ struct usb_line6_pod { + int startup_progress; + + /** +- Dirty flags for access to parameter data. +- */ +- unsigned long param_dirty[POD_CONTROL_SIZE / sizeof(unsigned long)]; +- +- /** + Some atomic flags. + */ + unsigned long atomic_flags; diff --git a/debian/patches/features/all/line6/0064-staging-line6-drop-dirty-sysfs-attr.patch b/debian/patches/features/all/line6/0064-staging-line6-drop-dirty-sysfs-attr.patch new file mode 100644 index 000000000..dac1caa37 --- /dev/null +++ b/debian/patches/features/all/line6/0064-staging-line6-drop-dirty-sysfs-attr.patch @@ -0,0 +1,107 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:43 +0100 +Subject: [064/106] staging: line6: drop dirty sysfs attr + +commit b772fe9e33b685bc552bc40eab6ff3160aee86c7 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 21 +-------------------- + drivers/staging/line6/pod.h | 5 ----- + 2 files changed, 1 insertion(+), 25 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 8fdbe9f..7c76b65 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -156,12 +156,11 @@ static void pod_dump(struct usb_line6_pod *pod, const unsigned char *data) + } + + /* +- Store parameter value in driver memory and mark it as dirty. ++ Store parameter value in driver memory. + */ + static void pod_store_parameter(struct usb_line6_pod *pod, int param, int value) + { + pod->prog_data.control[param] = value; +- pod->dirty = 1; + } + + /* +@@ -170,7 +169,6 @@ static void pod_store_parameter(struct usb_line6_pod *pod, int param, int value) + static void pod_save_button_pressed(struct usb_line6_pod *pod, int type, + int index) + { +- pod->dirty = 0; + set_bit(POD_SAVE_PRESSED, &pod->atomic_flags); + } + +@@ -209,7 +207,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + + case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_DEVICE: + case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST: +- pod->dirty = 0; + set_bit(POD_CHANNEL_DIRTY, &pod->atomic_flags); + line6_dump_request_async(&pod->dumpreq, &pod->line6, 0, + LINE6_DUMP_CURRENT); +@@ -778,19 +775,6 @@ static ssize_t pod_set_retrieve_amp_setup(struct device *dev, + } + + /* +- "read" request on "dirty" special file. +-*/ +-static ssize_t pod_get_dirty(struct device *dev, struct device_attribute *attr, +- char *buf) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_pod *pod = usb_get_intfdata(interface); +- buf[0] = pod->dirty ? '1' : '0'; +- buf[1] = '\n'; +- return 2; +-} +- +-/* + "read" request on "midi_postprocess" special file. + */ + static ssize_t pod_get_midi_postprocess(struct device *dev, +@@ -959,7 +943,6 @@ POD_GET_SYSTEM_PARAM(tuner_pitch, 1); + + /* POD special files: */ + static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write); +-static DEVICE_ATTR(dirty, S_IRUGO, pod_get_dirty, line6_nop_write); + static DEVICE_ATTR(dump, S_IWUSR | S_IRUGO, pod_get_dump, pod_set_dump); + static DEVICE_ATTR(dump_buf, S_IWUSR | S_IRUGO, pod_get_dump_buf, + pod_set_dump_buf); +@@ -1073,7 +1056,6 @@ static int pod_create_files2(struct device *dev) + int err; + + CHECK_RETURN(device_create_file(dev, &dev_attr_device_id)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_dirty)); + CHECK_RETURN(device_create_file(dev, &dev_attr_dump)); + CHECK_RETURN(device_create_file(dev, &dev_attr_dump_buf)); + CHECK_RETURN(device_create_file(dev, &dev_attr_finish)); +@@ -1213,7 +1195,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + properties->device_bit, dev); + + device_remove_file(dev, &dev_attr_device_id); +- device_remove_file(dev, &dev_attr_dirty); + device_remove_file(dev, &dev_attr_dump); + device_remove_file(dev, &dev_attr_dump_buf); + device_remove_file(dev, &dev_attr_finish); +diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h +index dd6c318..b3bf243 100644 +--- a/drivers/staging/line6/pod.h ++++ b/drivers/staging/line6/pod.h +@@ -168,11 +168,6 @@ struct usb_line6_pod { + int device_id; + + /** +- Flag to indicate modification of current program settings. +- */ +- char dirty; +- +- /** + Flag to enable MIDI postprocessing. + */ + char midi_postprocess; diff --git a/debian/patches/features/all/line6/0065-staging-line6-drop-dump-sysfs-attr.patch b/debian/patches/features/all/line6/0065-staging-line6-drop-dump-sysfs-attr.patch new file mode 100644 index 000000000..48075ab37 --- /dev/null +++ b/debian/patches/features/all/line6/0065-staging-line6-drop-dump-sysfs-attr.patch @@ -0,0 +1,121 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:44 +0100 +Subject: [065/106] staging: line6: drop dump sysfs attr + +commit 980688f9d79ef2e169037a94ae2c7a3e08f7adc3 upstream. + +Once further sysfs attrs have been removed it will also be possible to +drop prog_data and other pieces which we keep for now. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 60 +++---------------------------------------- + 1 file changed, 3 insertions(+), 57 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 7c76b65..56eab0a 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -138,24 +138,6 @@ static char *pod_alloc_sysex_buffer(struct usb_line6_pod *pod, int code, + } + + /* +- Send channel dump data to the PODxt Pro. +-*/ +-static void pod_dump(struct usb_line6_pod *pod, const unsigned char *data) +-{ +- int size = 1 + sizeof(pod->prog_data); +- char *sysex = pod_alloc_sysex_buffer(pod, POD_SYSEX_DUMP, size); +- if (!sysex) +- return; +- /* Don't know what this is good for, but PODxt Pro transmits it, so we +- * also do... */ +- sysex[SYSEX_DATA_OFS] = 5; +- memcpy(sysex + SYSEX_DATA_OFS + 1, data, sizeof(pod->prog_data)); +- line6_send_sysex_message(&pod->line6, sysex, size); +- memcpy(&pod->prog_data, data, sizeof(pod->prog_data)); +- kfree(sysex); +-} +- +-/* + Store parameter value in driver memory. + */ + static void pod_store_parameter(struct usb_line6_pod *pod, int param, int value) +@@ -411,7 +393,9 @@ static ssize_t pod_send_store_command(struct device *dev, const char *buf, + if (!sysex) + return 0; + +- sysex[SYSEX_DATA_OFS] = 5; /* see pod_dump() */ ++ /* Don't know what this is good for, but PODxt Pro transmits it, so we ++ * also do... */ ++ sysex[SYSEX_DATA_OFS] = 5; + ret = pod_resolve(buf, block0, block1, sysex + SYSEX_DATA_OFS + 1); + if (ret) { + kfree(sysex); +@@ -513,41 +497,6 @@ static ssize_t pod_get_name_buf(struct device *dev, + } + + /* +- "read" request on "dump" special file. +-*/ +-static ssize_t pod_get_dump(struct device *dev, struct device_attribute *attr, +- char *buf) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_pod *pod = usb_get_intfdata(interface); +- int retval = line6_dump_wait_interruptible(&pod->dumpreq); +- if (retval < 0) +- return retval; +- memcpy(buf, &pod->prog_data, sizeof(pod->prog_data)); +- return sizeof(pod->prog_data); +-} +- +-/* +- "write" request on "dump" special file. +-*/ +-static ssize_t pod_set_dump(struct device *dev, struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_pod *pod = usb_get_intfdata(interface); +- +- if (count != sizeof(pod->prog_data)) { +- dev_err(pod->line6.ifcdev, +- "data block must be exactly %d bytes\n", +- (int)sizeof(pod->prog_data)); +- return -EINVAL; +- } +- +- pod_dump(pod, buf); +- return sizeof(pod->prog_data); +-} +- +-/* + Identify system parameters related to the tuner. + */ + static bool pod_is_tuner(int code) +@@ -943,7 +892,6 @@ POD_GET_SYSTEM_PARAM(tuner_pitch, 1); + + /* POD special files: */ + static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write); +-static DEVICE_ATTR(dump, S_IWUSR | S_IRUGO, pod_get_dump, pod_set_dump); + static DEVICE_ATTR(dump_buf, S_IWUSR | S_IRUGO, pod_get_dump_buf, + pod_set_dump_buf); + static DEVICE_ATTR(finish, S_IWUSR, line6_nop_read, pod_set_finish); +@@ -1056,7 +1004,6 @@ static int pod_create_files2(struct device *dev) + int err; + + CHECK_RETURN(device_create_file(dev, &dev_attr_device_id)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_dump)); + CHECK_RETURN(device_create_file(dev, &dev_attr_dump_buf)); + CHECK_RETURN(device_create_file(dev, &dev_attr_finish)); + CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version)); +@@ -1195,7 +1142,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + properties->device_bit, dev); + + device_remove_file(dev, &dev_attr_device_id); +- device_remove_file(dev, &dev_attr_dump); + device_remove_file(dev, &dev_attr_dump_buf); + device_remove_file(dev, &dev_attr_finish); + device_remove_file(dev, &dev_attr_firmware_version); diff --git a/debian/patches/features/all/line6/0066-staging-line6-drop-dump_buf-sysfs-attr.patch b/debian/patches/features/all/line6/0066-staging-line6-drop-dump_buf-sysfs-attr.patch new file mode 100644 index 000000000..81fc75c19 --- /dev/null +++ b/debian/patches/features/all/line6/0066-staging-line6-drop-dump_buf-sysfs-attr.patch @@ -0,0 +1,84 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:45 +0100 +Subject: [066/106] staging: line6: drop dump_buf sysfs attr + +commit 4fe520dc27d4912913e9ce1cd76d4e9a1c73b93c upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 40 ---------------------------------------- + 1 file changed, 40 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 56eab0a..c1eb145 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -610,42 +610,6 @@ static ssize_t pod_set_system_param_string(struct usb_line6_pod *pod, + } + + /* +- "read" request on "dump_buf" special file. +-*/ +-static ssize_t pod_get_dump_buf(struct device *dev, +- struct device_attribute *attr, char *buf) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_pod *pod = usb_get_intfdata(interface); +- int retval = line6_dump_wait_interruptible(&pod->dumpreq); +- if (retval < 0) +- return retval; +- memcpy(buf, &pod->prog_data_buf, sizeof(pod->prog_data_buf)); +- return sizeof(pod->prog_data_buf); +-} +- +-/* +- "write" request on "dump_buf" special file. +-*/ +-static ssize_t pod_set_dump_buf(struct device *dev, +- struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_pod *pod = usb_get_intfdata(interface); +- +- if (count != sizeof(pod->prog_data)) { +- dev_err(pod->line6.ifcdev, +- "data block must be exactly %d bytes\n", +- (int)sizeof(pod->prog_data)); +- return -EINVAL; +- } +- +- memcpy(&pod->prog_data_buf, buf, sizeof(pod->prog_data)); +- return sizeof(pod->prog_data); +-} +- +-/* + "write" request on "finish" special file. + */ + static ssize_t pod_set_finish(struct device *dev, +@@ -892,8 +856,6 @@ POD_GET_SYSTEM_PARAM(tuner_pitch, 1); + + /* POD special files: */ + static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write); +-static DEVICE_ATTR(dump_buf, S_IWUSR | S_IRUGO, pod_get_dump_buf, +- pod_set_dump_buf); + static DEVICE_ATTR(finish, S_IWUSR, line6_nop_read, pod_set_finish); + static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version, + line6_nop_write); +@@ -1004,7 +966,6 @@ static int pod_create_files2(struct device *dev) + int err; + + CHECK_RETURN(device_create_file(dev, &dev_attr_device_id)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_dump_buf)); + CHECK_RETURN(device_create_file(dev, &dev_attr_finish)); + CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version)); + CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess)); +@@ -1142,7 +1103,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + properties->device_bit, dev); + + device_remove_file(dev, &dev_attr_device_id); +- device_remove_file(dev, &dev_attr_dump_buf); + device_remove_file(dev, &dev_attr_finish); + device_remove_file(dev, &dev_attr_firmware_version); + device_remove_file(dev, &dev_attr_midi_postprocess); diff --git a/debian/patches/features/all/line6/0067-staging-line6-drop-monitor_level-sysfs-attr.patch b/debian/patches/features/all/line6/0067-staging-line6-drop-monitor_level-sysfs-attr.patch new file mode 100644 index 000000000..6df000a2a --- /dev/null +++ b/debian/patches/features/all/line6/0067-staging-line6-drop-monitor_level-sysfs-attr.patch @@ -0,0 +1,75 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:46 +0100 +Subject: [067/106] staging: line6: drop monitor_level sysfs attr + +commit 410cefa7e9990373d2f46d6ea2c95f1bad284b04 upstream. + +The monitor level can be adjusted using an ALSA volume control. +Therefore the sysfs attribute is unnecessary. Note that we leave the +monitor_level driver variable so that the ALSA volume control still +works. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 12 ++++-------- + 1 file changed, 4 insertions(+), 8 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index c1eb145..5a941fa 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -244,8 +244,10 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + break; + + switch (buf[6]) { +- PROCESS_SYSTEM_PARAM +- (monitor_level); ++ case POD_monitor_level: ++ pod->monitor_level.value = value; ++ break; ++ + PROCESS_SYSTEM_PARAM(routing); + PROCESS_SYSTEM_PARAM + (tuner_mute); +@@ -844,7 +846,6 @@ static ssize_t pod_set_ ## code(struct device *dev, \ + return pod_set_system_param_string(pod, buf, count, POD_ ## code, mask); \ + } + +-POD_GET_SET_SYSTEM_PARAM(monitor_level, 0xffff, 0); + POD_GET_SET_SYSTEM_PARAM(routing, 0x0003, 0); + POD_GET_SET_SYSTEM_PARAM(tuner_mute, 0x0001, 0); + POD_GET_SET_SYSTEM_PARAM(tuner_freq, 0xffff, 0); +@@ -861,8 +862,6 @@ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version, + line6_nop_write); + static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO, + pod_get_midi_postprocess, pod_set_midi_postprocess); +-static DEVICE_ATTR(monitor_level, S_IWUSR | S_IRUGO, pod_get_monitor_level, +- pod_set_monitor_level); + static DEVICE_ATTR(name, S_IRUGO, pod_get_name, line6_nop_write); + static DEVICE_ATTR(name_buf, S_IRUGO, pod_get_name_buf, line6_nop_write); + static DEVICE_ATTR(retrieve_amp_setup, S_IWUSR, line6_nop_read, +@@ -969,7 +968,6 @@ static int pod_create_files2(struct device *dev) + CHECK_RETURN(device_create_file(dev, &dev_attr_finish)); + CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version)); + CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_monitor_level)); + CHECK_RETURN(device_create_file(dev, &dev_attr_name)); + CHECK_RETURN(device_create_file(dev, &dev_attr_name_buf)); + CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_amp_setup)); +@@ -1008,7 +1006,6 @@ static int pod_try_init(struct usb_interface *interface, + return -ENODEV; + + /* initialize wait queues: */ +- init_waitqueue_head(&pod->monitor_level.wait); + init_waitqueue_head(&pod->routing.wait); + init_waitqueue_head(&pod->tuner_mute.wait); + init_waitqueue_head(&pod->tuner_freq.wait); +@@ -1106,7 +1103,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + device_remove_file(dev, &dev_attr_finish); + device_remove_file(dev, &dev_attr_firmware_version); + device_remove_file(dev, &dev_attr_midi_postprocess); +- device_remove_file(dev, &dev_attr_monitor_level); + device_remove_file(dev, &dev_attr_name); + device_remove_file(dev, &dev_attr_name_buf); + device_remove_file(dev, &dev_attr_retrieve_amp_setup); diff --git a/debian/patches/features/all/line6/0068-staging-line6-change-monitor_level-type-ValueWait-in.patch b/debian/patches/features/all/line6/0068-staging-line6-change-monitor_level-type-ValueWait-in.patch new file mode 100644 index 000000000..5d90ab963 --- /dev/null +++ b/debian/patches/features/all/line6/0068-staging-line6-change-monitor_level-type-ValueWait-in.patch @@ -0,0 +1,74 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:47 +0100 +Subject: [068/106] staging: line6: change monitor_level type ValueWait -> int + +commit 2c35dc2186ba0acbff57846c19cfedee87efd272 upstream. + +The monitor_level sysfs attr has been dropped and we never need to wait +on the monitor_level value to change. Switch to a plain int and drop +the wait queue. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 10 +++++----- + drivers/staging/line6/pod.h | 2 +- + 2 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 5a941fa..165c7ad 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -245,7 +245,7 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + + switch (buf[6]) { + case POD_monitor_level: +- pod->monitor_level.value = value; ++ pod->monitor_level = value; + break; + + PROCESS_SYSTEM_PARAM(routing); +@@ -908,7 +908,7 @@ static int snd_pod_control_monitor_get(struct snd_kcontrol *kcontrol, + { + struct snd_line6_pcm *line6pcm = snd_kcontrol_chip(kcontrol); + struct usb_line6_pod *pod = (struct usb_line6_pod *)line6pcm->line6; +- ucontrol->value.integer.value[0] = pod->monitor_level.value; ++ ucontrol->value.integer.value[0] = pod->monitor_level; + return 0; + } + +@@ -919,10 +919,10 @@ static int snd_pod_control_monitor_put(struct snd_kcontrol *kcontrol, + struct snd_line6_pcm *line6pcm = snd_kcontrol_chip(kcontrol); + struct usb_line6_pod *pod = (struct usb_line6_pod *)line6pcm->line6; + +- if (ucontrol->value.integer.value[0] == pod->monitor_level.value) ++ if (ucontrol->value.integer.value[0] == pod->monitor_level) + return 0; + +- pod->monitor_level.value = ucontrol->value.integer.value[0]; ++ pod->monitor_level = ucontrol->value.integer.value[0]; + pod_set_system_param_int(pod, ucontrol->value.integer.value[0], + POD_monitor_level); + return 1; +@@ -1053,7 +1053,7 @@ static int pod_try_init(struct usb_interface *interface, + */ + + if (pod->line6.properties->capabilities & LINE6_BIT_CONTROL) { +- pod->monitor_level.value = POD_system_invalid; ++ pod->monitor_level = POD_system_invalid; + + /* initiate startup procedure: */ + pod_startup1(pod); +diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h +index b3bf243..d5bbd2f 100644 +--- a/drivers/staging/line6/pod.h ++++ b/drivers/staging/line6/pod.h +@@ -121,7 +121,7 @@ struct usb_line6_pod { + /** + Instrument monitor level. + */ +- struct ValueWait monitor_level; ++ int monitor_level; + + /** + Audio routing mode. diff --git a/debian/patches/features/all/line6/0069-staging-line6-drop-name-sysfs-attr.patch b/debian/patches/features/all/line6/0069-staging-line6-drop-name-sysfs-attr.patch new file mode 100644 index 000000000..b69479d45 --- /dev/null +++ b/debian/patches/features/all/line6/0069-staging-line6-drop-name-sysfs-attr.patch @@ -0,0 +1,59 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:48 +0100 +Subject: [069/106] staging: line6: drop name sysfs attr + +commit 3eac723b4b30a7a85777ea84453ff7f8866331cf upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 15 --------------- + 1 file changed, 15 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 165c7ad..76525c5 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -476,18 +476,6 @@ static ssize_t get_name_generic(struct usb_line6_pod *pod, const char *str, + /* + "read" request on "name" special file. + */ +-static ssize_t pod_get_name(struct device *dev, struct device_attribute *attr, +- char *buf) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_pod *pod = usb_get_intfdata(interface); +- return get_name_generic(pod, pod->prog_data.header + POD_NAME_OFFSET, +- buf); +-} +- +-/* +- "read" request on "name" special file. +-*/ + static ssize_t pod_get_name_buf(struct device *dev, + struct device_attribute *attr, char *buf) + { +@@ -862,7 +850,6 @@ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version, + line6_nop_write); + static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO, + pod_get_midi_postprocess, pod_set_midi_postprocess); +-static DEVICE_ATTR(name, S_IRUGO, pod_get_name, line6_nop_write); + static DEVICE_ATTR(name_buf, S_IRUGO, pod_get_name_buf, line6_nop_write); + static DEVICE_ATTR(retrieve_amp_setup, S_IWUSR, line6_nop_read, + pod_set_retrieve_amp_setup); +@@ -968,7 +955,6 @@ static int pod_create_files2(struct device *dev) + CHECK_RETURN(device_create_file(dev, &dev_attr_finish)); + CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version)); + CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_name)); + CHECK_RETURN(device_create_file(dev, &dev_attr_name_buf)); + CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_amp_setup)); + CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_channel)); +@@ -1103,7 +1089,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + device_remove_file(dev, &dev_attr_finish); + device_remove_file(dev, &dev_attr_firmware_version); + device_remove_file(dev, &dev_attr_midi_postprocess); +- device_remove_file(dev, &dev_attr_name); + device_remove_file(dev, &dev_attr_name_buf); + device_remove_file(dev, &dev_attr_retrieve_amp_setup); + device_remove_file(dev, &dev_attr_retrieve_channel); diff --git a/debian/patches/features/all/line6/0070-staging-line6-drop-name_buf-sysfs-attr.patch b/debian/patches/features/all/line6/0070-staging-line6-drop-name_buf-sysfs-attr.patch new file mode 100644 index 000000000..947460921 --- /dev/null +++ b/debian/patches/features/all/line6/0070-staging-line6-drop-name_buf-sysfs-attr.patch @@ -0,0 +1,87 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:49 +0100 +Subject: [070/106] staging: line6: drop name_buf sysfs attr + +commit c62c4df3f934582d26434a371e7676776fcd0fda upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 43 ------------------------------------------- + 1 file changed, 43 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 76525c5..dbf821e 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -447,46 +447,6 @@ static ssize_t pod_send_retrieve_command(struct device *dev, const char *buf, + } + + /* +- Generic get name function. +-*/ +-static ssize_t get_name_generic(struct usb_line6_pod *pod, const char *str, +- char *buf) +-{ +- int length = 0; +- const char *p1; +- char *p2; +- char *last_non_space = buf; +- +- int retval = line6_dump_wait_interruptible(&pod->dumpreq); +- if (retval < 0) +- return retval; +- +- for (p1 = str, p2 = buf; *p1; ++p1, ++p2) { +- *p2 = *p1; +- if (*p2 != ' ') +- last_non_space = p2; +- if (++length == POD_NAME_LENGTH) +- break; +- } +- +- *(last_non_space + 1) = '\n'; +- return last_non_space - buf + 2; +-} +- +-/* +- "read" request on "name" special file. +-*/ +-static ssize_t pod_get_name_buf(struct device *dev, +- struct device_attribute *attr, char *buf) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_pod *pod = usb_get_intfdata(interface); +- return get_name_generic(pod, +- pod->prog_data_buf.header + POD_NAME_OFFSET, +- buf); +-} +- +-/* + Identify system parameters related to the tuner. + */ + static bool pod_is_tuner(int code) +@@ -850,7 +810,6 @@ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version, + line6_nop_write); + static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO, + pod_get_midi_postprocess, pod_set_midi_postprocess); +-static DEVICE_ATTR(name_buf, S_IRUGO, pod_get_name_buf, line6_nop_write); + static DEVICE_ATTR(retrieve_amp_setup, S_IWUSR, line6_nop_read, + pod_set_retrieve_amp_setup); + static DEVICE_ATTR(retrieve_channel, S_IWUSR, line6_nop_read, +@@ -955,7 +914,6 @@ static int pod_create_files2(struct device *dev) + CHECK_RETURN(device_create_file(dev, &dev_attr_finish)); + CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version)); + CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_name_buf)); + CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_amp_setup)); + CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_channel)); + CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_effects_setup)); +@@ -1089,7 +1047,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + device_remove_file(dev, &dev_attr_finish); + device_remove_file(dev, &dev_attr_firmware_version); + device_remove_file(dev, &dev_attr_midi_postprocess); +- device_remove_file(dev, &dev_attr_name_buf); + device_remove_file(dev, &dev_attr_retrieve_amp_setup); + device_remove_file(dev, &dev_attr_retrieve_channel); + device_remove_file(dev, diff --git a/debian/patches/features/all/line6/0071-staging-line6-drop-retrieve_amp_setup-sysfs-attr.patch b/debian/patches/features/all/line6/0071-staging-line6-drop-retrieve_amp_setup-sysfs-attr.patch new file mode 100644 index 000000000..095429809 --- /dev/null +++ b/debian/patches/features/all/line6/0071-staging-line6-drop-retrieve_amp_setup-sysfs-attr.patch @@ -0,0 +1,58 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:50 +0100 +Subject: [071/106] staging: line6: drop retrieve_amp_setup sysfs attr + +commit 390174a9353b41f6aaab2ef90a4e94b56ec6974a upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 14 -------------- + 1 file changed, 14 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index dbf821e..6d6cd5a 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -628,16 +628,6 @@ static ssize_t pod_set_retrieve_effects_setup(struct device *dev, + } + + /* +- "write" request on "retrieve_amp_setup" special file. +-*/ +-static ssize_t pod_set_retrieve_amp_setup(struct device *dev, +- struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- return pod_send_retrieve_command(dev, buf, count, 0x0040, 0x0100); +-} +- +-/* + "read" request on "midi_postprocess" special file. + */ + static ssize_t pod_get_midi_postprocess(struct device *dev, +@@ -810,8 +800,6 @@ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version, + line6_nop_write); + static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO, + pod_get_midi_postprocess, pod_set_midi_postprocess); +-static DEVICE_ATTR(retrieve_amp_setup, S_IWUSR, line6_nop_read, +- pod_set_retrieve_amp_setup); + static DEVICE_ATTR(retrieve_channel, S_IWUSR, line6_nop_read, + pod_set_retrieve_channel); + static DEVICE_ATTR(retrieve_effects_setup, S_IWUSR, line6_nop_read, +@@ -914,7 +902,6 @@ static int pod_create_files2(struct device *dev) + CHECK_RETURN(device_create_file(dev, &dev_attr_finish)); + CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version)); + CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_amp_setup)); + CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_channel)); + CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_effects_setup)); + CHECK_RETURN(device_create_file(dev, &dev_attr_routing)); +@@ -1047,7 +1034,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + device_remove_file(dev, &dev_attr_finish); + device_remove_file(dev, &dev_attr_firmware_version); + device_remove_file(dev, &dev_attr_midi_postprocess); +- device_remove_file(dev, &dev_attr_retrieve_amp_setup); + device_remove_file(dev, &dev_attr_retrieve_channel); + device_remove_file(dev, + &dev_attr_retrieve_effects_setup); diff --git a/debian/patches/features/all/line6/0072-staging-line6-drop-retrieve_channel-sysfs-attr.patch b/debian/patches/features/all/line6/0072-staging-line6-drop-retrieve_channel-sysfs-attr.patch new file mode 100644 index 000000000..f1d6dde0d --- /dev/null +++ b/debian/patches/features/all/line6/0072-staging-line6-drop-retrieve_channel-sysfs-attr.patch @@ -0,0 +1,58 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:51 +0100 +Subject: [072/106] staging: line6: drop retrieve_channel sysfs attr + +commit 439f21fa2212fb839c5324c7fdfe6b04e9760e00 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 14 -------------- + 1 file changed, 14 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 6d6cd5a..bc65fc7 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -608,16 +608,6 @@ static ssize_t pod_set_store_amp_setup(struct device *dev, + } + + /* +- "write" request on "retrieve_channel" special file. +-*/ +-static ssize_t pod_set_retrieve_channel(struct device *dev, +- struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- return pod_send_retrieve_command(dev, buf, count, 0x0000, 0x00c0); +-} +- +-/* + "write" request on "retrieve_effects_setup" special file. + */ + static ssize_t pod_set_retrieve_effects_setup(struct device *dev, +@@ -800,8 +790,6 @@ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version, + line6_nop_write); + static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO, + pod_get_midi_postprocess, pod_set_midi_postprocess); +-static DEVICE_ATTR(retrieve_channel, S_IWUSR, line6_nop_read, +- pod_set_retrieve_channel); + static DEVICE_ATTR(retrieve_effects_setup, S_IWUSR, line6_nop_read, + pod_set_retrieve_effects_setup); + static DEVICE_ATTR(routing, S_IWUSR | S_IRUGO, pod_get_routing, +@@ -902,7 +890,6 @@ static int pod_create_files2(struct device *dev) + CHECK_RETURN(device_create_file(dev, &dev_attr_finish)); + CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version)); + CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_channel)); + CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_effects_setup)); + CHECK_RETURN(device_create_file(dev, &dev_attr_routing)); + CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number)); +@@ -1034,7 +1021,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + device_remove_file(dev, &dev_attr_finish); + device_remove_file(dev, &dev_attr_firmware_version); + device_remove_file(dev, &dev_attr_midi_postprocess); +- device_remove_file(dev, &dev_attr_retrieve_channel); + device_remove_file(dev, + &dev_attr_retrieve_effects_setup); + device_remove_file(dev, &dev_attr_routing); diff --git a/debian/patches/features/all/line6/0073-staging-line6-drop-retrieve_effects_setup-sysfs-attr.patch b/debian/patches/features/all/line6/0073-staging-line6-drop-retrieve_effects_setup-sysfs-attr.patch new file mode 100644 index 000000000..0904ad54a --- /dev/null +++ b/debian/patches/features/all/line6/0073-staging-line6-drop-retrieve_effects_setup-sysfs-attr.patch @@ -0,0 +1,99 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:52 +0100 +Subject: [073/106] staging: line6: drop retrieve_effects_setup sysfs attr + +commit 7404419c903087b9c9c73c69888c9af2b9d0f733 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 48 ------------------------------------------- + 1 file changed, 48 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index bc65fc7..95769c5 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -381,39 +381,6 @@ static int pod_resolve(const char *buf, short block0, short block1, + } + + /* +- Send command to store channel/effects setup/amp setup to PODxt Pro. +-*/ +-static ssize_t pod_send_store_command(struct device *dev, const char *buf, +- size_t count, short block0, short block1) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_pod *pod = usb_get_intfdata(interface); +- int ret; +- int size = 3 + sizeof(pod->prog_data_buf); +- char *sysex = pod_alloc_sysex_buffer(pod, POD_SYSEX_STORE, size); +- +- if (!sysex) +- return 0; +- +- /* Don't know what this is good for, but PODxt Pro transmits it, so we +- * also do... */ +- sysex[SYSEX_DATA_OFS] = 5; +- ret = pod_resolve(buf, block0, block1, sysex + SYSEX_DATA_OFS + 1); +- if (ret) { +- kfree(sysex); +- return ret; +- } +- +- memcpy(sysex + SYSEX_DATA_OFS + 3, &pod->prog_data_buf, +- sizeof(pod->prog_data_buf)); +- +- line6_send_sysex_message(&pod->line6, sysex, size); +- kfree(sysex); +- /* needs some delay here on AMD64 platform */ +- return count; +-} +- +-/* + Send command to retrieve channel/effects setup/amp setup to PODxt Pro. + */ + static ssize_t pod_send_retrieve_command(struct device *dev, const char *buf, +@@ -608,16 +575,6 @@ static ssize_t pod_set_store_amp_setup(struct device *dev, + } + + /* +- "write" request on "retrieve_effects_setup" special file. +-*/ +-static ssize_t pod_set_retrieve_effects_setup(struct device *dev, +- struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- return pod_send_retrieve_command(dev, buf, count, 0x0080, 0x0080); +-} +- +-/* + "read" request on "midi_postprocess" special file. + */ + static ssize_t pod_get_midi_postprocess(struct device *dev, +@@ -790,8 +747,6 @@ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version, + line6_nop_write); + static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO, + pod_get_midi_postprocess, pod_set_midi_postprocess); +-static DEVICE_ATTR(retrieve_effects_setup, S_IWUSR, line6_nop_read, +- pod_set_retrieve_effects_setup); + static DEVICE_ATTR(routing, S_IWUSR | S_IRUGO, pod_get_routing, + pod_set_routing); + static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number, +@@ -890,7 +845,6 @@ static int pod_create_files2(struct device *dev) + CHECK_RETURN(device_create_file(dev, &dev_attr_finish)); + CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version)); + CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_effects_setup)); + CHECK_RETURN(device_create_file(dev, &dev_attr_routing)); + CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number)); + CHECK_RETURN(device_create_file(dev, &dev_attr_store_amp_setup)); +@@ -1021,8 +975,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + device_remove_file(dev, &dev_attr_finish); + device_remove_file(dev, &dev_attr_firmware_version); + device_remove_file(dev, &dev_attr_midi_postprocess); +- device_remove_file(dev, +- &dev_attr_retrieve_effects_setup); + device_remove_file(dev, &dev_attr_routing); + device_remove_file(dev, &dev_attr_serial_number); + device_remove_file(dev, &dev_attr_store_amp_setup); diff --git a/debian/patches/features/all/line6/0074-staging-line6-drop-store_amp_setup-sysfs-attr.patch b/debian/patches/features/all/line6/0074-staging-line6-drop-store_amp_setup-sysfs-attr.patch new file mode 100644 index 000000000..260afd646 --- /dev/null +++ b/debian/patches/features/all/line6/0074-staging-line6-drop-store_amp_setup-sysfs-attr.patch @@ -0,0 +1,58 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:53 +0100 +Subject: [074/106] staging: line6: drop store_amp_setup sysfs attr + +commit 4c41d9210eb851b7c28c3af21c5069e68ec14497 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 14 -------------- + 1 file changed, 14 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 95769c5..deafee9 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -565,16 +565,6 @@ static ssize_t pod_set_store_effects_setup(struct device *dev, + } + + /* +- "write" request on "store_amp_setup" special file. +-*/ +-static ssize_t pod_set_store_amp_setup(struct device *dev, +- struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- return pod_send_store_command(dev, buf, count, 0x0040, 0x0100); +-} +- +-/* + "read" request on "midi_postprocess" special file. + */ + static ssize_t pod_get_midi_postprocess(struct device *dev, +@@ -751,8 +741,6 @@ static DEVICE_ATTR(routing, S_IWUSR | S_IRUGO, pod_get_routing, + pod_set_routing); + static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number, + line6_nop_write); +-static DEVICE_ATTR(store_amp_setup, S_IWUSR, line6_nop_read, +- pod_set_store_amp_setup); + static DEVICE_ATTR(store_channel, S_IWUSR, line6_nop_read, + pod_set_store_channel); + static DEVICE_ATTR(store_effects_setup, S_IWUSR, line6_nop_read, +@@ -847,7 +835,6 @@ static int pod_create_files2(struct device *dev) + CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess)); + CHECK_RETURN(device_create_file(dev, &dev_attr_routing)); + CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_store_amp_setup)); + CHECK_RETURN(device_create_file(dev, &dev_attr_store_channel)); + CHECK_RETURN(device_create_file(dev, &dev_attr_store_effects_setup)); + CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_freq)); +@@ -977,7 +964,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + device_remove_file(dev, &dev_attr_midi_postprocess); + device_remove_file(dev, &dev_attr_routing); + device_remove_file(dev, &dev_attr_serial_number); +- device_remove_file(dev, &dev_attr_store_amp_setup); + device_remove_file(dev, &dev_attr_store_channel); + device_remove_file(dev, &dev_attr_store_effects_setup); + device_remove_file(dev, &dev_attr_tuner_freq); diff --git a/debian/patches/features/all/line6/0075-staging-line6-drop-store_channel-sysfs-attr.patch b/debian/patches/features/all/line6/0075-staging-line6-drop-store_channel-sysfs-attr.patch new file mode 100644 index 000000000..0cba6e88f --- /dev/null +++ b/debian/patches/features/all/line6/0075-staging-line6-drop-store_channel-sysfs-attr.patch @@ -0,0 +1,58 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:54 +0100 +Subject: [075/106] staging: line6: drop store_channel sysfs attr + +commit e6bf11a7a70cbe63ad68ce783815b7fc76e791fe upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 14 -------------- + 1 file changed, 14 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index deafee9..abf7ebe 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -545,16 +545,6 @@ static ssize_t pod_set_finish(struct device *dev, + } + + /* +- "write" request on "store_channel" special file. +-*/ +-static ssize_t pod_set_store_channel(struct device *dev, +- struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- return pod_send_store_command(dev, buf, count, 0x0000, 0x00c0); +-} +- +-/* + "write" request on "store_effects_setup" special file. + */ + static ssize_t pod_set_store_effects_setup(struct device *dev, +@@ -741,8 +731,6 @@ static DEVICE_ATTR(routing, S_IWUSR | S_IRUGO, pod_get_routing, + pod_set_routing); + static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number, + line6_nop_write); +-static DEVICE_ATTR(store_channel, S_IWUSR, line6_nop_read, +- pod_set_store_channel); + static DEVICE_ATTR(store_effects_setup, S_IWUSR, line6_nop_read, + pod_set_store_effects_setup); + static DEVICE_ATTR(tuner_freq, S_IWUSR | S_IRUGO, pod_get_tuner_freq, +@@ -835,7 +823,6 @@ static int pod_create_files2(struct device *dev) + CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess)); + CHECK_RETURN(device_create_file(dev, &dev_attr_routing)); + CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_store_channel)); + CHECK_RETURN(device_create_file(dev, &dev_attr_store_effects_setup)); + CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_freq)); + CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_mute)); +@@ -964,7 +951,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + device_remove_file(dev, &dev_attr_midi_postprocess); + device_remove_file(dev, &dev_attr_routing); + device_remove_file(dev, &dev_attr_serial_number); +- device_remove_file(dev, &dev_attr_store_channel); + device_remove_file(dev, &dev_attr_store_effects_setup); + device_remove_file(dev, &dev_attr_tuner_freq); + device_remove_file(dev, &dev_attr_tuner_mute); diff --git a/debian/patches/features/all/line6/0076-staging-line6-drop-store_effects_setup-sysfs-attr.patch b/debian/patches/features/all/line6/0076-staging-line6-drop-store_effects_setup-sysfs-attr.patch new file mode 100644 index 000000000..1a8991b76 --- /dev/null +++ b/debian/patches/features/all/line6/0076-staging-line6-drop-store_effects_setup-sysfs-attr.patch @@ -0,0 +1,119 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:55 +0100 +Subject: [076/106] staging: line6: drop store_effects_setup sysfs attr + +commit d249652ac4649553ca5b58dc4bf8c6b7c18a0c80 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 68 ------------------------------------------- + 1 file changed, 68 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index abf7ebe..949b8f7 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -360,60 +360,6 @@ void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param, + } + + /* +- Resolve value to memory location. +-*/ +-static int pod_resolve(const char *buf, short block0, short block1, +- unsigned char *location) +-{ +- u8 value; +- short block; +- int ret; +- +- ret = kstrtou8(buf, 10, &value); +- if (ret) +- return ret; +- +- block = (value < 0x40) ? block0 : block1; +- value &= 0x3f; +- location[0] = block >> 7; +- location[1] = value | (block & 0x7f); +- return 0; +-} +- +-/* +- Send command to retrieve channel/effects setup/amp setup to PODxt Pro. +-*/ +-static ssize_t pod_send_retrieve_command(struct device *dev, const char *buf, +- size_t count, short block0, +- short block1) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_pod *pod = usb_get_intfdata(interface); +- int ret; +- int size = 4; +- char *sysex = pod_alloc_sysex_buffer(pod, POD_SYSEX_DUMPMEM, size); +- +- if (!sysex) +- return 0; +- +- ret = pod_resolve(buf, block0, block1, sysex + SYSEX_DATA_OFS); +- if (ret) { +- kfree(sysex); +- return ret; +- } +- sysex[SYSEX_DATA_OFS + 2] = 0; +- sysex[SYSEX_DATA_OFS + 3] = 0; +- line6_dump_started(&pod->dumpreq, POD_DUMP_MEMORY); +- +- if (line6_send_sysex_message(&pod->line6, sysex, size) < size) +- line6_dump_finished(&pod->dumpreq); +- +- kfree(sysex); +- /* needs some delay here on AMD64 platform */ +- return count; +-} +- +-/* + Identify system parameters related to the tuner. + */ + static bool pod_is_tuner(int code) +@@ -545,16 +491,6 @@ static ssize_t pod_set_finish(struct device *dev, + } + + /* +- "write" request on "store_effects_setup" special file. +-*/ +-static ssize_t pod_set_store_effects_setup(struct device *dev, +- struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- return pod_send_store_command(dev, buf, count, 0x0080, 0x0080); +-} +- +-/* + "read" request on "midi_postprocess" special file. + */ + static ssize_t pod_get_midi_postprocess(struct device *dev, +@@ -731,8 +667,6 @@ static DEVICE_ATTR(routing, S_IWUSR | S_IRUGO, pod_get_routing, + pod_set_routing); + static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number, + line6_nop_write); +-static DEVICE_ATTR(store_effects_setup, S_IWUSR, line6_nop_read, +- pod_set_store_effects_setup); + static DEVICE_ATTR(tuner_freq, S_IWUSR | S_IRUGO, pod_get_tuner_freq, + pod_set_tuner_freq); + static DEVICE_ATTR(tuner_mute, S_IWUSR | S_IRUGO, pod_get_tuner_mute, +@@ -823,7 +757,6 @@ static int pod_create_files2(struct device *dev) + CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess)); + CHECK_RETURN(device_create_file(dev, &dev_attr_routing)); + CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_store_effects_setup)); + CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_freq)); + CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_mute)); + CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_note)); +@@ -951,7 +884,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + device_remove_file(dev, &dev_attr_midi_postprocess); + device_remove_file(dev, &dev_attr_routing); + device_remove_file(dev, &dev_attr_serial_number); +- device_remove_file(dev, &dev_attr_store_effects_setup); + device_remove_file(dev, &dev_attr_tuner_freq); + device_remove_file(dev, &dev_attr_tuner_mute); + device_remove_file(dev, &dev_attr_tuner_note); diff --git a/debian/patches/features/all/line6/0077-staging-line6-drop-routing-sysfs-attr.patch b/debian/patches/features/all/line6/0077-staging-line6-drop-routing-sysfs-attr.patch new file mode 100644 index 000000000..86cb8007e --- /dev/null +++ b/debian/patches/features/all/line6/0077-staging-line6-drop-routing-sysfs-attr.patch @@ -0,0 +1,94 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:56 +0100 +Subject: [077/106] staging: line6: drop routing sysfs attr + +commit 4cade5c09ff0e483afbeb7546f6c87e708cdda00 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 8 -------- + drivers/staging/line6/pod.h | 9 --------- + 2 files changed, 17 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 949b8f7..f84a4ea 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -40,7 +40,6 @@ enum { + + enum { + POD_monitor_level = 0x04, +- POD_routing = 0x05, + POD_tuner_mute = 0x13, + POD_tuner_freq = 0x15, + POD_tuner_note = 0x16, +@@ -248,7 +247,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + pod->monitor_level = value; + break; + +- PROCESS_SYSTEM_PARAM(routing); + PROCESS_SYSTEM_PARAM + (tuner_mute); + PROCESS_SYSTEM_PARAM +@@ -647,7 +645,6 @@ static ssize_t pod_set_ ## code(struct device *dev, \ + return pod_set_system_param_string(pod, buf, count, POD_ ## code, mask); \ + } + +-POD_GET_SET_SYSTEM_PARAM(routing, 0x0003, 0); + POD_GET_SET_SYSTEM_PARAM(tuner_mute, 0x0001, 0); + POD_GET_SET_SYSTEM_PARAM(tuner_freq, 0xffff, 0); + POD_GET_SYSTEM_PARAM(tuner_note, 1); +@@ -663,8 +660,6 @@ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version, + line6_nop_write); + static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO, + pod_get_midi_postprocess, pod_set_midi_postprocess); +-static DEVICE_ATTR(routing, S_IWUSR | S_IRUGO, pod_get_routing, +- pod_set_routing); + static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number, + line6_nop_write); + static DEVICE_ATTR(tuner_freq, S_IWUSR | S_IRUGO, pod_get_tuner_freq, +@@ -755,7 +750,6 @@ static int pod_create_files2(struct device *dev) + CHECK_RETURN(device_create_file(dev, &dev_attr_finish)); + CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version)); + CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_routing)); + CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number)); + CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_freq)); + CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_mute)); +@@ -785,7 +779,6 @@ static int pod_try_init(struct usb_interface *interface, + return -ENODEV; + + /* initialize wait queues: */ +- init_waitqueue_head(&pod->routing.wait); + init_waitqueue_head(&pod->tuner_mute.wait); + init_waitqueue_head(&pod->tuner_freq.wait); + init_waitqueue_head(&pod->tuner_note.wait); +@@ -882,7 +875,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + device_remove_file(dev, &dev_attr_finish); + device_remove_file(dev, &dev_attr_firmware_version); + device_remove_file(dev, &dev_attr_midi_postprocess); +- device_remove_file(dev, &dev_attr_routing); + device_remove_file(dev, &dev_attr_serial_number); + device_remove_file(dev, &dev_attr_tuner_freq); + device_remove_file(dev, &dev_attr_tuner_mute); +diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h +index d5bbd2f..732311a 100644 +--- a/drivers/staging/line6/pod.h ++++ b/drivers/staging/line6/pod.h +@@ -124,15 +124,6 @@ struct usb_line6_pod { + int monitor_level; + + /** +- Audio routing mode. +- 0: send processed guitar +- 1: send clean guitar +- 2: send clean guitar re-amp playback +- 3: send re-amp playback +- */ +- struct ValueWait routing; +- +- /** + Timer for device initializaton. + */ + struct timer_list startup_timer; diff --git a/debian/patches/features/all/line6/0078-staging-line6-drop-tuner_freq-sysfs-attr.patch b/debian/patches/features/all/line6/0078-staging-line6-drop-tuner_freq-sysfs-attr.patch new file mode 100644 index 000000000..dd7fad041 --- /dev/null +++ b/debian/patches/features/all/line6/0078-staging-line6-drop-tuner_freq-sysfs-attr.patch @@ -0,0 +1,83 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:57 +0100 +Subject: [078/106] staging: line6: drop tuner_freq sysfs attr + +commit b972739fd8aeed17b07c060ab32141a151a4f901 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 8 -------- + drivers/staging/line6/pod.h | 5 ----- + 2 files changed, 13 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index f84a4ea..3184570 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -250,8 +250,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + PROCESS_SYSTEM_PARAM + (tuner_mute); + PROCESS_SYSTEM_PARAM +- (tuner_freq); +- PROCESS_SYSTEM_PARAM + (tuner_note); + PROCESS_SYSTEM_PARAM + (tuner_pitch); +@@ -646,7 +644,6 @@ static ssize_t pod_set_ ## code(struct device *dev, \ + } + + POD_GET_SET_SYSTEM_PARAM(tuner_mute, 0x0001, 0); +-POD_GET_SET_SYSTEM_PARAM(tuner_freq, 0xffff, 0); + POD_GET_SYSTEM_PARAM(tuner_note, 1); + POD_GET_SYSTEM_PARAM(tuner_pitch, 1); + +@@ -662,8 +659,6 @@ static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO, + pod_get_midi_postprocess, pod_set_midi_postprocess); + static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number, + line6_nop_write); +-static DEVICE_ATTR(tuner_freq, S_IWUSR | S_IRUGO, pod_get_tuner_freq, +- pod_set_tuner_freq); + static DEVICE_ATTR(tuner_mute, S_IWUSR | S_IRUGO, pod_get_tuner_mute, + pod_set_tuner_mute); + static DEVICE_ATTR(tuner_note, S_IRUGO, pod_get_tuner_note, line6_nop_write); +@@ -751,7 +746,6 @@ static int pod_create_files2(struct device *dev) + CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version)); + CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess)); + CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_freq)); + CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_mute)); + CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_note)); + CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_pitch)); +@@ -780,7 +774,6 @@ static int pod_try_init(struct usb_interface *interface, + + /* initialize wait queues: */ + init_waitqueue_head(&pod->tuner_mute.wait); +- init_waitqueue_head(&pod->tuner_freq.wait); + init_waitqueue_head(&pod->tuner_note.wait); + init_waitqueue_head(&pod->tuner_pitch.wait); + +@@ -876,7 +869,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + device_remove_file(dev, &dev_attr_firmware_version); + device_remove_file(dev, &dev_attr_midi_postprocess); + device_remove_file(dev, &dev_attr_serial_number); +- device_remove_file(dev, &dev_attr_tuner_freq); + device_remove_file(dev, &dev_attr_tuner_mute); + device_remove_file(dev, &dev_attr_tuner_note); + device_remove_file(dev, &dev_attr_tuner_pitch); +diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h +index 732311a..91f2661 100644 +--- a/drivers/staging/line6/pod.h ++++ b/drivers/staging/line6/pod.h +@@ -104,11 +104,6 @@ struct usb_line6_pod { + struct ValueWait tuner_mute; + + /** +- Tuner base frequency (typically 440Hz). +- */ +- struct ValueWait tuner_freq; +- +- /** + Note received from tuner. + */ + struct ValueWait tuner_note; diff --git a/debian/patches/features/all/line6/0079-staging-line6-drop-tuner_note-sysfs-attr.patch b/debian/patches/features/all/line6/0079-staging-line6-drop-tuner_note-sysfs-attr.patch new file mode 100644 index 000000000..3eb466e6b --- /dev/null +++ b/debian/patches/features/all/line6/0079-staging-line6-drop-tuner_note-sysfs-attr.patch @@ -0,0 +1,82 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:58 +0100 +Subject: [079/106] staging: line6: drop tuner_note sysfs attr + +commit c9040c84855afb290413909d24b32a1163a47303 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 7 ------- + drivers/staging/line6/pod.h | 5 ----- + 2 files changed, 12 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 3184570..57fbe27 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -250,8 +250,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + PROCESS_SYSTEM_PARAM + (tuner_mute); + PROCESS_SYSTEM_PARAM +- (tuner_note); +- PROCESS_SYSTEM_PARAM + (tuner_pitch); + + #undef PROCESS_SYSTEM_PARAM +@@ -644,7 +642,6 @@ static ssize_t pod_set_ ## code(struct device *dev, \ + } + + POD_GET_SET_SYSTEM_PARAM(tuner_mute, 0x0001, 0); +-POD_GET_SYSTEM_PARAM(tuner_note, 1); + POD_GET_SYSTEM_PARAM(tuner_pitch, 1); + + #undef GET_SET_SYSTEM_PARAM +@@ -661,7 +658,6 @@ static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number, + line6_nop_write); + static DEVICE_ATTR(tuner_mute, S_IWUSR | S_IRUGO, pod_get_tuner_mute, + pod_set_tuner_mute); +-static DEVICE_ATTR(tuner_note, S_IRUGO, pod_get_tuner_note, line6_nop_write); + static DEVICE_ATTR(tuner_pitch, S_IRUGO, pod_get_tuner_pitch, line6_nop_write); + + #ifdef CONFIG_LINE6_USB_RAW +@@ -747,7 +743,6 @@ static int pod_create_files2(struct device *dev) + CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess)); + CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number)); + CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_mute)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_note)); + CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_pitch)); + + #ifdef CONFIG_LINE6_USB_RAW +@@ -774,7 +769,6 @@ static int pod_try_init(struct usb_interface *interface, + + /* initialize wait queues: */ + init_waitqueue_head(&pod->tuner_mute.wait); +- init_waitqueue_head(&pod->tuner_note.wait); + init_waitqueue_head(&pod->tuner_pitch.wait); + + /* initialize USB buffers: */ +@@ -870,7 +864,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + device_remove_file(dev, &dev_attr_midi_postprocess); + device_remove_file(dev, &dev_attr_serial_number); + device_remove_file(dev, &dev_attr_tuner_mute); +- device_remove_file(dev, &dev_attr_tuner_note); + device_remove_file(dev, &dev_attr_tuner_pitch); + + #ifdef CONFIG_LINE6_USB_RAW +diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h +index 91f2661..1659120 100644 +--- a/drivers/staging/line6/pod.h ++++ b/drivers/staging/line6/pod.h +@@ -104,11 +104,6 @@ struct usb_line6_pod { + struct ValueWait tuner_mute; + + /** +- Note received from tuner. +- */ +- struct ValueWait tuner_note; +- +- /** + Pitch value received from tuner. + */ + struct ValueWait tuner_pitch; diff --git a/debian/patches/features/all/line6/0080-staging-line6-drop-tuner_mute-sysfs-attr.patch b/debian/patches/features/all/line6/0080-staging-line6-drop-tuner_mute-sysfs-attr.patch new file mode 100644 index 000000000..5dc36f11c --- /dev/null +++ b/debian/patches/features/all/line6/0080-staging-line6-drop-tuner_mute-sysfs-attr.patch @@ -0,0 +1,118 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:48:59 +0100 +Subject: [080/106] staging: line6: drop tuner_mute sysfs attr + +commit 5e275f4586484d7a8f17046930f473883a660a73 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 34 ---------------------------------- + drivers/staging/line6/pod.h | 5 ----- + 2 files changed, 39 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 57fbe27..df2f37a 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -248,8 +248,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + break; + + PROCESS_SYSTEM_PARAM +- (tuner_mute); +- PROCESS_SYSTEM_PARAM + (tuner_pitch); + + #undef PROCESS_SYSTEM_PARAM +@@ -453,20 +451,6 @@ static int pod_set_system_param_int(struct usb_line6_pod *pod, int value, + } + + /* +- Send system parameter (from string). +- @param tuner non-zero, if code refers to a tuner parameter +-*/ +-static ssize_t pod_set_system_param_string(struct usb_line6_pod *pod, +- const char *buf, int count, int code, +- unsigned short mask) +-{ +- int retval; +- unsigned short value = simple_strtoul(buf, NULL, 10) & mask; +- retval = pod_set_system_param_int(pod, value, code); +- return (retval < 0) ? retval : count; +-} +- +-/* + "write" request on "finish" special file. + */ + static ssize_t pod_set_finish(struct device *dev, +@@ -630,21 +614,8 @@ static ssize_t pod_get_ ## code(struct device *dev, \ + &pod->code, sign); \ + } + +-#define POD_GET_SET_SYSTEM_PARAM(code, mask, sign) \ +-POD_GET_SYSTEM_PARAM(code, sign) \ +-static ssize_t pod_set_ ## code(struct device *dev, \ +- struct device_attribute *attr, \ +- const char *buf, size_t count) \ +-{ \ +- struct usb_interface *interface = to_usb_interface(dev); \ +- struct usb_line6_pod *pod = usb_get_intfdata(interface); \ +- return pod_set_system_param_string(pod, buf, count, POD_ ## code, mask); \ +-} +- +-POD_GET_SET_SYSTEM_PARAM(tuner_mute, 0x0001, 0); + POD_GET_SYSTEM_PARAM(tuner_pitch, 1); + +-#undef GET_SET_SYSTEM_PARAM + #undef GET_SYSTEM_PARAM + + /* POD special files: */ +@@ -656,8 +627,6 @@ static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO, + pod_get_midi_postprocess, pod_set_midi_postprocess); + static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number, + line6_nop_write); +-static DEVICE_ATTR(tuner_mute, S_IWUSR | S_IRUGO, pod_get_tuner_mute, +- pod_set_tuner_mute); + static DEVICE_ATTR(tuner_pitch, S_IRUGO, pod_get_tuner_pitch, line6_nop_write); + + #ifdef CONFIG_LINE6_USB_RAW +@@ -742,7 +711,6 @@ static int pod_create_files2(struct device *dev) + CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version)); + CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess)); + CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_mute)); + CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_pitch)); + + #ifdef CONFIG_LINE6_USB_RAW +@@ -768,7 +736,6 @@ static int pod_try_init(struct usb_interface *interface, + return -ENODEV; + + /* initialize wait queues: */ +- init_waitqueue_head(&pod->tuner_mute.wait); + init_waitqueue_head(&pod->tuner_pitch.wait); + + /* initialize USB buffers: */ +@@ -863,7 +830,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + device_remove_file(dev, &dev_attr_firmware_version); + device_remove_file(dev, &dev_attr_midi_postprocess); + device_remove_file(dev, &dev_attr_serial_number); +- device_remove_file(dev, &dev_attr_tuner_mute); + device_remove_file(dev, &dev_attr_tuner_pitch); + + #ifdef CONFIG_LINE6_USB_RAW +diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h +index 1659120..4930742 100644 +--- a/drivers/staging/line6/pod.h ++++ b/drivers/staging/line6/pod.h +@@ -99,11 +99,6 @@ struct usb_line6_pod { + struct pod_program prog_data_buf; + + /** +- Tuner mute mode. +- */ +- struct ValueWait tuner_mute; +- +- /** + Pitch value received from tuner. + */ + struct ValueWait tuner_pitch; diff --git a/debian/patches/features/all/line6/0081-staging-line6-drop-tuner_pitch-sysfs-attr.patch b/debian/patches/features/all/line6/0081-staging-line6-drop-tuner_pitch-sysfs-attr.patch new file mode 100644 index 000000000..0d6a1ce08 --- /dev/null +++ b/debian/patches/features/all/line6/0081-staging-line6-drop-tuner_pitch-sysfs-attr.patch @@ -0,0 +1,220 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:00 +0100 +Subject: [081/106] staging: line6: drop tuner_pitch sysfs attr + +commit 99c54e9830feb746c9175fae887546e741bb56eb upstream. + +Dropping this final tuner sysfs attr also leaves the +POD_GET_SYSTEM_PARAM() macro, pod_get_system_param_string(), and +pod_get_system_param_int() unused. Remove them immediately to avoid +compiler warnings. + +POD_monitor_level is now the only SYSEX value that needs to be watched +by the driver since the ALSA volume control should reflect the current +monitor volume level used by the device. Therefore, drop the switch +statement entirely and just check for POD_monitor_level, ignoring +unknown system parameter changes. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 102 +------------------------------------------ + drivers/staging/line6/pod.h | 15 ------- + 2 files changed, 1 insertion(+), 116 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index df2f37a..052db4a 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -236,28 +236,8 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + << 8) | + ((int)buf[9] << 4) | (int)buf[10]; + +-#define PROCESS_SYSTEM_PARAM(x) \ +- case POD_ ## x: \ +- pod->x.value = value; \ +- wake_up(&pod->x.wait); \ +- break; +- +- switch (buf[6]) { +- case POD_monitor_level: ++ if (buf[6] == POD_monitor_level) + pod->monitor_level = value; +- break; +- +- PROCESS_SYSTEM_PARAM +- (tuner_pitch); +- +-#undef PROCESS_SYSTEM_PARAM +- +- default: +- dev_dbg(pod->line6.ifcdev, +- "unknown tuner/system response %02X\n", +- buf[6]); +- } +- + break; + } + +@@ -363,66 +343,6 @@ static bool pod_is_tuner(int code) + } + + /* +- Get system parameter (as integer). +- @param tuner non-zero, if code refers to a tuner parameter +-*/ +-static int pod_get_system_param_int(struct usb_line6_pod *pod, int *value, +- int code, struct ValueWait *param, int sign) +-{ +- char *sysex; +- static const int size = 1; +- int retval = 0; +- +- if (((pod->prog_data.control[POD_tuner] & 0x40) == 0) +- && pod_is_tuner(code)) +- return -ENODEV; +- +- /* send value request to device: */ +- param->value = POD_system_invalid; +- sysex = pod_alloc_sysex_buffer(pod, POD_SYSEX_SYSTEMREQ, size); +- +- if (!sysex) +- return -ENOMEM; +- +- sysex[SYSEX_DATA_OFS] = code; +- line6_send_sysex_message(&pod->line6, sysex, size); +- kfree(sysex); +- +- /* wait for device to respond: */ +- retval = +- wait_event_interruptible(param->wait, +- param->value != POD_system_invalid); +- +- if (retval < 0) +- return retval; +- +- *value = sign ? (int)(signed short)param->value : (int)(unsigned short) +- param->value; +- +- if (*value == POD_system_invalid) +- *value = 0; /* don't report uninitialized values */ +- +- return 0; +-} +- +-/* +- Get system parameter (as string). +- @param tuner non-zero, if code refers to a tuner parameter +-*/ +-static ssize_t pod_get_system_param_string(struct usb_line6_pod *pod, char *buf, +- int code, struct ValueWait *param, +- int sign) +-{ +- int retval, value = 0; +- retval = pod_get_system_param_int(pod, &value, code, param, sign); +- +- if (retval < 0) +- return retval; +- +- return sprintf(buf, "%d\n", value); +-} +- +-/* + Send system parameter (from integer). + @param tuner non-zero, if code refers to a tuner parameter + */ +@@ -604,20 +524,6 @@ static void pod_startup5(struct work_struct *work) + line6->properties->device_bit, line6->ifcdev); + } + +-#define POD_GET_SYSTEM_PARAM(code, sign) \ +-static ssize_t pod_get_ ## code(struct device *dev, \ +- struct device_attribute *attr, char *buf) \ +-{ \ +- struct usb_interface *interface = to_usb_interface(dev); \ +- struct usb_line6_pod *pod = usb_get_intfdata(interface); \ +- return pod_get_system_param_string(pod, buf, POD_ ## code, \ +- &pod->code, sign); \ +-} +- +-POD_GET_SYSTEM_PARAM(tuner_pitch, 1); +- +-#undef GET_SYSTEM_PARAM +- + /* POD special files: */ + static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write); + static DEVICE_ATTR(finish, S_IWUSR, line6_nop_read, pod_set_finish); +@@ -627,7 +533,6 @@ static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO, + pod_get_midi_postprocess, pod_set_midi_postprocess); + static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number, + line6_nop_write); +-static DEVICE_ATTR(tuner_pitch, S_IRUGO, pod_get_tuner_pitch, line6_nop_write); + + #ifdef CONFIG_LINE6_USB_RAW + static DEVICE_ATTR(raw, S_IWUSR, line6_nop_read, line6_set_raw); +@@ -711,7 +616,6 @@ static int pod_create_files2(struct device *dev) + CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version)); + CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess)); + CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_pitch)); + + #ifdef CONFIG_LINE6_USB_RAW + CHECK_RETURN(device_create_file(dev, &dev_attr_raw)); +@@ -735,9 +639,6 @@ static int pod_try_init(struct usb_interface *interface, + if ((interface == NULL) || (pod == NULL)) + return -ENODEV; + +- /* initialize wait queues: */ +- init_waitqueue_head(&pod->tuner_pitch.wait); +- + /* initialize USB buffers: */ + err = line6_dumpreq_init(&pod->dumpreq, pod_request_channel, + sizeof(pod_request_channel)); +@@ -830,7 +731,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + device_remove_file(dev, &dev_attr_firmware_version); + device_remove_file(dev, &dev_attr_midi_postprocess); + device_remove_file(dev, &dev_attr_serial_number); +- device_remove_file(dev, &dev_attr_tuner_pitch); + + #ifdef CONFIG_LINE6_USB_RAW + device_remove_file(dev, &dev_attr_raw); +diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h +index 4930742..481cce6 100644 +--- a/drivers/staging/line6/pod.h ++++ b/drivers/staging/line6/pod.h +@@ -15,7 +15,6 @@ + #include + #include + #include +-#include + + #include + +@@ -54,15 +53,6 @@ enum { + }; + + /** +- Data structure for values that need to be requested explicitly. +- This is the case for system and tuner settings. +-*/ +-struct ValueWait { +- int value; +- wait_queue_head_t wait; +-}; +- +-/** + Binary PODxt Pro program dump + */ + struct pod_program { +@@ -99,11 +89,6 @@ struct usb_line6_pod { + struct pod_program prog_data_buf; + + /** +- Pitch value received from tuner. +- */ +- struct ValueWait tuner_pitch; +- +- /** + Instrument monitor level. + */ + int monitor_level; diff --git a/debian/patches/features/all/line6/0082-staging-line6-drop-finish-sysfs-attr.patch b/debian/patches/features/all/line6/0082-staging-line6-drop-finish-sysfs-attr.patch new file mode 100644 index 000000000..41dfd0939 --- /dev/null +++ b/debian/patches/features/all/line6/0082-staging-line6-drop-finish-sysfs-attr.patch @@ -0,0 +1,65 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:01 +0100 +Subject: [082/106] staging: line6: drop finish sysfs attr + +commit c7b8ca5a596197f6b1069bf4164387f474873f00 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 21 --------------------- + 1 file changed, 21 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 052db4a..797f6e0 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -371,24 +371,6 @@ static int pod_set_system_param_int(struct usb_line6_pod *pod, int value, + } + + /* +- "write" request on "finish" special file. +-*/ +-static ssize_t pod_set_finish(struct device *dev, +- struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_pod *pod = usb_get_intfdata(interface); +- int size = 0; +- char *sysex = pod_alloc_sysex_buffer(pod, POD_SYSEX_FINISH, size); +- if (!sysex) +- return 0; +- line6_send_sysex_message(&pod->line6, sysex, size); +- kfree(sysex); +- return count; +-} +- +-/* + "read" request on "midi_postprocess" special file. + */ + static ssize_t pod_get_midi_postprocess(struct device *dev, +@@ -526,7 +508,6 @@ static void pod_startup5(struct work_struct *work) + + /* POD special files: */ + static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write); +-static DEVICE_ATTR(finish, S_IWUSR, line6_nop_read, pod_set_finish); + static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version, + line6_nop_write); + static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO, +@@ -612,7 +593,6 @@ static int pod_create_files2(struct device *dev) + int err; + + CHECK_RETURN(device_create_file(dev, &dev_attr_device_id)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_finish)); + CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version)); + CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess)); + CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number)); +@@ -727,7 +707,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + properties->device_bit, dev); + + device_remove_file(dev, &dev_attr_device_id); +- device_remove_file(dev, &dev_attr_finish); + device_remove_file(dev, &dev_attr_firmware_version); + device_remove_file(dev, &dev_attr_midi_postprocess); + device_remove_file(dev, &dev_attr_serial_number); diff --git a/debian/patches/features/all/line6/0083-staging-line6-drop-midi_postprocess-sysfs-attr.patch b/debian/patches/features/all/line6/0083-staging-line6-drop-midi_postprocess-sysfs-attr.patch new file mode 100644 index 000000000..3a465612c --- /dev/null +++ b/debian/patches/features/all/line6/0083-staging-line6-drop-midi_postprocess-sysfs-attr.patch @@ -0,0 +1,80 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:02 +0100 +Subject: [083/106] staging: line6: drop midi_postprocess sysfs attr + +commit bd99f84f484877ad87ee82adf2b3bbde4fdd9c2b upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 36 ------------------------------------ + 1 file changed, 36 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 797f6e0..37b20d7 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -371,38 +371,6 @@ static int pod_set_system_param_int(struct usb_line6_pod *pod, int value, + } + + /* +- "read" request on "midi_postprocess" special file. +-*/ +-static ssize_t pod_get_midi_postprocess(struct device *dev, +- struct device_attribute *attr, +- char *buf) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_pod *pod = usb_get_intfdata(interface); +- return sprintf(buf, "%d\n", pod->midi_postprocess); +-} +- +-/* +- "write" request on "midi_postprocess" special file. +-*/ +-static ssize_t pod_set_midi_postprocess(struct device *dev, +- struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_pod *pod = usb_get_intfdata(interface); +- u8 value; +- int ret; +- +- ret = kstrtou8(buf, 10, &value); +- if (ret) +- return ret; +- +- pod->midi_postprocess = value ? 1 : 0; +- return count; +-} +- +-/* + "read" request on "serial_number" special file. + */ + static ssize_t pod_get_serial_number(struct device *dev, +@@ -510,8 +478,6 @@ static void pod_startup5(struct work_struct *work) + static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write); + static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version, + line6_nop_write); +-static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO, +- pod_get_midi_postprocess, pod_set_midi_postprocess); + static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number, + line6_nop_write); + +@@ -594,7 +560,6 @@ static int pod_create_files2(struct device *dev) + + CHECK_RETURN(device_create_file(dev, &dev_attr_device_id)); + CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess)); + CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number)); + + #ifdef CONFIG_LINE6_USB_RAW +@@ -708,7 +673,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + + device_remove_file(dev, &dev_attr_device_id); + device_remove_file(dev, &dev_attr_firmware_version); +- device_remove_file(dev, &dev_attr_midi_postprocess); + device_remove_file(dev, &dev_attr_serial_number); + + #ifdef CONFIG_LINE6_USB_RAW diff --git a/debian/patches/features/all/line6/0084-staging-line6-drop-midi_mask_receive.patch b/debian/patches/features/all/line6/0084-staging-line6-drop-midi_mask_receive.patch new file mode 100644 index 000000000..fddea29ae --- /dev/null +++ b/debian/patches/features/all/line6/0084-staging-line6-drop-midi_mask_receive.patch @@ -0,0 +1,133 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:03 +0100 +Subject: [084/106] staging: line6: drop midi_mask_receive + +commit 3e58c868db1dc1402943f6a585529873f445c14f upstream. + +The midi_mask_receive sysfs attribute selects the MIDI channels on which +to receive messages. There is no need to do this at the driver level, +instead the MIDI application endpoints decide which channels to use. +Other drivers don't implement midi_mask_receive so applications cannot +make use of this feature. Therefore we drop it as part of the effort to +clean up the staging driver. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/driver.c | 5 ----- + drivers/staging/line6/midi.c | 42 ---------------------------------------- + drivers/staging/line6/midi.h | 5 ----- + 3 files changed, 52 deletions(-) + +diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c +index 0bc838d..e0e0779 100644 +--- a/drivers/staging/line6/driver.c ++++ b/drivers/staging/line6/driver.c +@@ -396,11 +396,6 @@ static void line6_data_received(struct urb *urb) + if (done == 0) + break; + +- /* MIDI input filter */ +- if (line6_midibuf_skip_message +- (mb, line6->line6midi->midi_mask_receive)) +- continue; +- + line6->message_length = done; + line6_midi_receive(line6, line6->buffer_message, done); + +diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c +index c8e099b..c543c48 100644 +--- a/drivers/staging/line6/midi.c ++++ b/drivers/staging/line6/midi.c +@@ -313,42 +313,8 @@ static ssize_t midi_set_midi_mask_transmit(struct device *dev, + return count; + } + +-/* +- "read" request on "midi_mask_receive" special file. +-*/ +-static ssize_t midi_get_midi_mask_receive(struct device *dev, +- struct device_attribute *attr, +- char *buf) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6 *line6 = usb_get_intfdata(interface); +- return sprintf(buf, "%d\n", line6->line6midi->midi_mask_receive); +-} +- +-/* +- "write" request on "midi_mask" special file. +-*/ +-static ssize_t midi_set_midi_mask_receive(struct device *dev, +- struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6 *line6 = usb_get_intfdata(interface); +- unsigned short value; +- int ret; +- +- ret = kstrtou16(buf, 10, &value); +- if (ret) +- return ret; +- +- line6->line6midi->midi_mask_receive = value; +- return count; +-} +- + static DEVICE_ATTR(midi_mask_transmit, S_IWUSR | S_IRUGO, + midi_get_midi_mask_transmit, midi_set_midi_mask_transmit); +-static DEVICE_ATTR(midi_mask_receive, S_IWUSR | S_IRUGO, +- midi_get_midi_mask_receive, midi_set_midi_mask_receive); + + /* MIDI device destructor */ + static int snd_line6_midi_free(struct snd_device *device) +@@ -356,8 +322,6 @@ static int snd_line6_midi_free(struct snd_device *device) + struct snd_line6_midi *line6midi = device->device_data; + device_remove_file(line6midi->line6->ifcdev, + &dev_attr_midi_mask_transmit); +- device_remove_file(line6midi->line6->ifcdev, +- &dev_attr_midi_mask_receive); + line6_midibuf_destroy(&line6midi->midibuf_in); + line6_midibuf_destroy(&line6midi->midibuf_out); + return 0; +@@ -404,12 +368,10 @@ int line6_init_midi(struct usb_line6 *line6) + 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; +@@ -429,10 +391,6 @@ int line6_init_midi(struct usb_line6 *line6) + if (err < 0) + return err; + +- err = device_create_file(line6->ifcdev, &dev_attr_midi_mask_receive); +- if (err < 0) +- return err; +- + init_waitqueue_head(&line6midi->send_wait); + spin_lock_init(&line6midi->send_urb_lock); + spin_lock_init(&line6midi->midi_transmit_lock); +diff --git a/drivers/staging/line6/midi.h b/drivers/staging/line6/midi.h +index 4a9e9f9..cf32d77 100644 +--- a/drivers/staging/line6/midi.h ++++ b/drivers/staging/line6/midi.h +@@ -60,11 +60,6 @@ struct snd_line6_midi { + unsigned short midi_mask_transmit; + + /** +- Bit mask for input MIDI channels. +- */ +- unsigned short midi_mask_receive; +- +- /** + Buffer for incoming MIDI stream. + */ + struct MidiBuffer midibuf_in; diff --git a/debian/patches/features/all/line6/0085-staging-line6-drop-midi_mask_transmit.patch b/debian/patches/features/all/line6/0085-staging-line6-drop-midi_mask_transmit.patch new file mode 100644 index 000000000..600090f3c --- /dev/null +++ b/debian/patches/features/all/line6/0085-staging-line6-drop-midi_mask_transmit.patch @@ -0,0 +1,128 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:04 +0100 +Subject: [085/106] staging: line6: drop midi_mask_transmit + +commit af89d2897a716e8e46cc5aad052a015d234e490f upstream. + +The midi_mask_transmit sysfs attribute selects the MIDI channels on +which to transmit messages. If ALSA wants to transmit a message that +does not match an allowed channel, the message will be dropped. This +driver feature is not really used and applications don't know how to +take advantage of it. Therefore we drop it and rely on applications or +MIDI sequencers to select the channels used for communication. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/midi.c | 56 ------------------------------------------ + drivers/staging/line6/midi.h | 5 ---- + 2 files changed, 61 deletions(-) + +diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c +index c543c48..6d9ecb9 100644 +--- a/drivers/staging/line6/midi.c ++++ b/drivers/staging/line6/midi.c +@@ -69,10 +69,6 @@ static void line6_midi_transmit(struct snd_rawmidi_substream *substream) + if (done == 0) + break; + +- if (line6_midibuf_skip_message +- (mb, line6midi->midi_mask_transmit)) +- continue; +- + send_midi_async(line6, chunk, done); + } + +@@ -281,47 +277,10 @@ static int snd_line6_new_midi(struct snd_line6_midi *line6midi) + return 0; + } + +-/* +- "read" request on "midi_mask_transmit" special file. +-*/ +-static ssize_t midi_get_midi_mask_transmit(struct device *dev, +- struct device_attribute *attr, +- char *buf) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6 *line6 = usb_get_intfdata(interface); +- return sprintf(buf, "%d\n", line6->line6midi->midi_mask_transmit); +-} +- +-/* +- "write" request on "midi_mask" special file. +-*/ +-static ssize_t midi_set_midi_mask_transmit(struct device *dev, +- struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6 *line6 = usb_get_intfdata(interface); +- unsigned short value; +- int ret; +- +- ret = kstrtou16(buf, 10, &value); +- if (ret) +- return ret; +- +- line6->line6midi->midi_mask_transmit = value; +- return count; +-} +- +-static DEVICE_ATTR(midi_mask_transmit, S_IWUSR | S_IRUGO, +- midi_get_midi_mask_transmit, midi_set_midi_mask_transmit); +- + /* MIDI device destructor */ + static int snd_line6_midi_free(struct snd_device *device) + { + struct snd_line6_midi *line6midi = device->device_data; +- device_remove_file(line6midi->line6->ifcdev, +- &dev_attr_midi_mask_transmit); + line6_midibuf_destroy(&line6midi->midibuf_in); + line6_midibuf_destroy(&line6midi->midibuf_out); + return 0; +@@ -363,17 +322,6 @@ int line6_init_midi(struct usb_line6 *line6) + } + + line6midi->line6 = line6; +- +- switch (line6->product) { +- case LINE6_DEVID_PODHD300: +- case LINE6_DEVID_PODHD500: +- line6midi->midi_mask_transmit = 1; +- break; +- +- default: +- line6midi->midi_mask_transmit = 1; +- } +- + line6->line6midi = line6midi; + + err = snd_device_new(line6->card, SNDRV_DEV_RAWMIDI, line6midi, +@@ -387,10 +335,6 @@ int line6_init_midi(struct usb_line6 *line6) + if (err < 0) + return err; + +- err = device_create_file(line6->ifcdev, &dev_attr_midi_mask_transmit); +- if (err < 0) +- return err; +- + init_waitqueue_head(&line6midi->send_wait); + spin_lock_init(&line6midi->send_urb_lock); + spin_lock_init(&line6midi->midi_transmit_lock); +diff --git a/drivers/staging/line6/midi.h b/drivers/staging/line6/midi.h +index cf32d77..19dabd5 100644 +--- a/drivers/staging/line6/midi.h ++++ b/drivers/staging/line6/midi.h +@@ -55,11 +55,6 @@ struct snd_line6_midi { + wait_queue_head_t send_wait; + + /** +- Bit mask for output MIDI channels. +- */ +- unsigned short midi_mask_transmit; +- +- /** + Buffer for incoming MIDI stream. + */ + struct MidiBuffer midibuf_in; diff --git a/debian/patches/features/all/line6/0086-staging-line6-drop-midi_postprocess-flag.patch b/debian/patches/features/all/line6/0086-staging-line6-drop-midi_postprocess-flag.patch new file mode 100644 index 000000000..0820fea88 --- /dev/null +++ b/debian/patches/features/all/line6/0086-staging-line6-drop-midi_postprocess-flag.patch @@ -0,0 +1,126 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:05 +0100 +Subject: [086/106] staging: line6: drop midi_postprocess flag + +commit 370a382fa72879a23eb92786009cd41e38b93385 upstream. + +It is no longer necessary to trigger on MIDI transmit messages that will +change the state of the device since: + +1. We've dropped the midi_postprocess sysfs attr in a previous commit so + it is not possible to activate this feature anymore. + +2. The other sysfs attrs that could inspect the state after a dump + request have been dropped. + +Therefore we can safely remove this dead code. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/midi.c | 22 ---------------------- + drivers/staging/line6/pod.c | 34 ---------------------------------- + drivers/staging/line6/pod.h | 7 ------- + 3 files changed, 63 deletions(-) + +diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c +index 6d9ecb9..6982eca 100644 +--- a/drivers/staging/line6/midi.c ++++ b/drivers/staging/line6/midi.c +@@ -148,28 +148,6 @@ static int send_midi_async(struct usb_line6 *line6, unsigned char *data, + } + + ++line6->line6midi->num_active_send_urbs; +- +- switch (line6->usbdev->descriptor.idProduct) { +- case LINE6_DEVID_BASSPODXT: +- case LINE6_DEVID_BASSPODXTLIVE: +- case LINE6_DEVID_BASSPODXTPRO: +- case LINE6_DEVID_PODXT: +- case LINE6_DEVID_PODXTLIVE: +- case LINE6_DEVID_PODXTPRO: +- case LINE6_DEVID_POCKETPOD: +- line6_pod_midi_postprocess((struct usb_line6_pod *)line6, data, +- length); +- break; +- +- case LINE6_DEVID_VARIAX: +- case LINE6_DEVID_PODHD300: +- case LINE6_DEVID_PODHD500: +- break; +- +- default: +- MISSING_CASE; +- } +- + return 0; + } + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 37b20d7..ddd0e54 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -285,40 +285,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + } + + /* +- Detect some cases that require a channel dump after sending a command to the +- device. Important notes: +- *) The actual dump request can not be sent here since we are not allowed to +- wait for the completion of the first message in this context, and sending +- the dump request before completion of the previous message leaves the POD +- in an undefined state. The dump request will be sent when the echoed +- commands are received. +- *) This method fails if a param change message is "chopped" after the first +- byte. +-*/ +-void line6_pod_midi_postprocess(struct usb_line6_pod *pod, unsigned char *data, +- int length) +-{ +- int i; +- +- if (!pod->midi_postprocess) +- return; +- +- for (i = 0; i < length; ++i) { +- if (data[i] == (LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST)) { +- line6_invalidate_current(&pod->dumpreq); +- break; +- } else +- if ((data[i] == (LINE6_PARAM_CHANGE | LINE6_CHANNEL_HOST)) +- && (i < length - 1)) +- if ((data[i + 1] == POD_amp_model_setup) +- || (data[i + 1] == POD_effect_setup)) { +- line6_invalidate_current(&pod->dumpreq); +- break; +- } +- } +-} +- +-/* + Transmit PODxt Pro control parameter. + */ + void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param, +diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h +index 481cce6..8543bae 100644 +--- a/drivers/staging/line6/pod.h ++++ b/drivers/staging/line6/pod.h +@@ -127,18 +127,11 @@ struct usb_line6_pod { + Device ID. + */ + int device_id; +- +- /** +- Flag to enable MIDI postprocessing. +- */ +- char midi_postprocess; + }; + + extern void line6_pod_disconnect(struct usb_interface *interface); + extern int line6_pod_init(struct usb_interface *interface, + struct usb_line6_pod *pod); +-extern void line6_pod_midi_postprocess(struct usb_line6_pod *pod, +- unsigned char *data, int length); + extern void line6_pod_process_message(struct usb_line6_pod *pod); + extern void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param, + u8 value); diff --git a/debian/patches/features/all/line6/0087-staging-line6-drop-pod.c-raw-sysfs-attr.patch b/debian/patches/features/all/line6/0087-staging-line6-drop-pod.c-raw-sysfs-attr.patch new file mode 100644 index 000000000..76897e619 --- /dev/null +++ b/debian/patches/features/all/line6/0087-staging-line6-drop-pod.c-raw-sysfs-attr.patch @@ -0,0 +1,55 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:06 +0100 +Subject: [087/106] staging: line6: drop pod.c raw sysfs attr + +commit e62025281bb565f2cdb3e42e900caf972809eb35 upstream. + +The raw sysfs attr transmits MIDI messages with less filtering. This +was a useful debugging tool while the staging driver still had a lot of +state and filtering. It is not useful anymore since the filtering is +being dropped. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 13 ------------- + 1 file changed, 13 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index ddd0e54..db9c905 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -447,10 +447,6 @@ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version, + static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number, + line6_nop_write); + +-#ifdef CONFIG_LINE6_USB_RAW +-static DEVICE_ATTR(raw, S_IWUSR, line6_nop_read, line6_set_raw); +-#endif +- + /* control info callback */ + static int snd_pod_control_monitor_info(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_info *uinfo) +@@ -527,11 +523,6 @@ static int pod_create_files2(struct device *dev) + CHECK_RETURN(device_create_file(dev, &dev_attr_device_id)); + CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version)); + CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number)); +- +-#ifdef CONFIG_LINE6_USB_RAW +- CHECK_RETURN(device_create_file(dev, &dev_attr_raw)); +-#endif +- + return 0; + } + +@@ -640,10 +631,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + device_remove_file(dev, &dev_attr_device_id); + device_remove_file(dev, &dev_attr_firmware_version); + device_remove_file(dev, &dev_attr_serial_number); +- +-#ifdef CONFIG_LINE6_USB_RAW +- device_remove_file(dev, &dev_attr_raw); +-#endif + } + } + diff --git a/debian/patches/features/all/line6/0088-staging-line6-drop-tuner-param-filtering.patch b/debian/patches/features/all/line6/0088-staging-line6-drop-tuner-param-filtering.patch new file mode 100644 index 000000000..12b6c270a --- /dev/null +++ b/debian/patches/features/all/line6/0088-staging-line6-drop-tuner-param-filtering.patch @@ -0,0 +1,64 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:07 +0100 +Subject: [088/106] staging: line6: drop tuner param filtering + +commit baa081f127dcb213e06dec828c091e4f1048e4b3 upstream. + +The pod_set_system_param_int() helper function is only used to set the +monitor level. Previously it was also used to control the tuner and has +special checks. These checks can now be dropped, along with the tuner +constants. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 21 --------------------- + 1 file changed, 21 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index db9c905..157ef68 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -40,10 +40,6 @@ enum { + + enum { + POD_monitor_level = 0x04, +- POD_tuner_mute = 0x13, +- POD_tuner_freq = 0x15, +- POD_tuner_note = 0x16, +- POD_tuner_pitch = 0x17, + POD_system_invalid = 0x10000 + }; + +@@ -298,19 +294,7 @@ void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param, + } + + /* +- Identify system parameters related to the tuner. +-*/ +-static bool pod_is_tuner(int code) +-{ +- return +- (code == POD_tuner_mute) || +- (code == POD_tuner_freq) || +- (code == POD_tuner_note) || (code == POD_tuner_pitch); +-} +- +-/* + Send system parameter (from integer). +- @param tuner non-zero, if code refers to a tuner parameter + */ + static int pod_set_system_param_int(struct usb_line6_pod *pod, int value, + int code) +@@ -318,11 +302,6 @@ static int pod_set_system_param_int(struct usb_line6_pod *pod, int value, + char *sysex; + static const int size = 5; + +- if (((pod->prog_data.control[POD_tuner] & 0x40) == 0) +- && pod_is_tuner(code)) +- return -EINVAL; +- +- /* send value to tuner: */ + sysex = pod_alloc_sysex_buffer(pod, POD_SYSEX_SYSTEM, size); + if (!sysex) + return -ENOMEM; diff --git a/debian/patches/features/all/line6/0089-staging-line6-drop-variax-model-sysfs-attr.patch b/debian/patches/features/all/line6/0089-staging-line6-drop-variax-model-sysfs-attr.patch new file mode 100644 index 000000000..9b8be40a4 --- /dev/null +++ b/debian/patches/features/all/line6/0089-staging-line6-drop-variax-model-sysfs-attr.patch @@ -0,0 +1,106 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:08 +0100 +Subject: [089/106] staging: line6: drop variax model sysfs attr + +commit a865e012a29a92f07ed25b81bc86d7e772edeb38 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/variax.c | 38 -------------------------------------- + drivers/staging/line6/variax.h | 5 ----- + 2 files changed, 43 deletions(-) + +diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c +index 8df529f..e76255b 100644 +--- a/drivers/staging/line6/variax.c ++++ b/drivers/staging/line6/variax.c +@@ -212,7 +212,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax) + + case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_DEVICE: + case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST: +- variax->model = buf[1]; + line6_dump_request_async(&variax->dumpreq, &variax->line6, 0, + VARIAX_DUMP_PASS1); + break; +@@ -334,39 +333,6 @@ static ssize_t variax_set_volume(struct device *dev, + } + + /* +- "read" request on "model" special file. +-*/ +-static ssize_t variax_get_model(struct device *dev, +- struct device_attribute *attr, char *buf) +-{ +- struct usb_line6_variax *variax = +- usb_get_intfdata(to_usb_interface(dev)); +- return sprintf(buf, "%d\n", variax->model); +-} +- +-/* +- "write" request on "model" special file. +-*/ +-static ssize_t variax_set_model(struct device *dev, +- struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- struct usb_line6_variax *variax = +- usb_get_intfdata(to_usb_interface(dev)); +- u8 value; +- int ret; +- +- ret = kstrtou8(buf, 10, &value); +- if (ret) +- return ret; +- +- if (line6_send_program(&variax->line6, value) == 0) +- variax->model = value; +- +- return count; +-} +- +-/* + "read" request on "active" special file. + */ + static ssize_t variax_get_active(struct device *dev, +@@ -549,8 +515,6 @@ static ssize_t variax_set_raw2(struct device *dev, + #endif + + /* Variax workbench special files: */ +-static DEVICE_ATTR(model, S_IWUSR | S_IRUGO, variax_get_model, +- variax_set_model); + static DEVICE_ATTR(volume, S_IWUSR | S_IRUGO, variax_get_volume, + variax_set_volume); + static DEVICE_ATTR(tone, S_IWUSR | S_IRUGO, variax_get_tone, variax_set_tone); +@@ -595,7 +559,6 @@ static void variax_destruct(struct usb_interface *interface) + static int variax_create_files2(struct device *dev) + { + int err; +- CHECK_RETURN(device_create_file(dev, &dev_attr_model)); + CHECK_RETURN(device_create_file(dev, &dev_attr_volume)); + CHECK_RETURN(device_create_file(dev, &dev_attr_tone)); + CHECK_RETURN(device_create_file(dev, &dev_attr_name)); +@@ -701,7 +664,6 @@ void line6_variax_disconnect(struct usb_interface *interface) + if (dev != NULL) { + /* remove sysfs entries: */ + line6_variax_remove_files(0, 0, dev); +- device_remove_file(dev, &dev_attr_model); + device_remove_file(dev, &dev_attr_volume); + device_remove_file(dev, &dev_attr_tone); + device_remove_file(dev, &dev_attr_name); +diff --git a/drivers/staging/line6/variax.h b/drivers/staging/line6/variax.h +index e2999ab..4151c14 100644 +--- a/drivers/staging/line6/variax.h ++++ b/drivers/staging/line6/variax.h +@@ -78,11 +78,6 @@ struct usb_line6_variax { + unsigned char *buffer_activate; + + /** +- Model number. +- */ +- int model; +- +- /** + Current model settings. + */ + struct variax_model model_data; diff --git a/debian/patches/features/all/line6/0090-staging-line6-drop-variax-volume-sysfs-attr.patch b/debian/patches/features/all/line6/0090-staging-line6-drop-variax-volume-sysfs-attr.patch new file mode 100644 index 000000000..3814bc083 --- /dev/null +++ b/debian/patches/features/all/line6/0090-staging-line6-drop-variax-volume-sysfs-attr.patch @@ -0,0 +1,110 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:09 +0100 +Subject: [090/106] staging: line6: drop variax volume sysfs attr + +commit 9f242ef59b72be7f1c71233a5c91b6e2b3dbc6dc upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/variax.c | 42 ---------------------------------------- + drivers/staging/line6/variax.h | 5 ----- + 2 files changed, 47 deletions(-) + +diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c +index e76255b..ef78f5a 100644 +--- a/drivers/staging/line6/variax.c ++++ b/drivers/staging/line6/variax.c +@@ -200,10 +200,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax) + switch (buf[0]) { + case LINE6_PARAM_CHANGE | LINE6_CHANNEL_HOST: + switch (buf[1]) { +- case VARIAXMIDI_volume: +- variax->volume = buf[2]; +- break; +- + case VARIAXMIDI_tone: + variax->tone = buf[2]; + } +@@ -299,40 +295,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax) + } + + /* +- "read" request on "volume" special file. +-*/ +-static ssize_t variax_get_volume(struct device *dev, +- struct device_attribute *attr, char *buf) +-{ +- struct usb_line6_variax *variax = +- usb_get_intfdata(to_usb_interface(dev)); +- return sprintf(buf, "%d\n", variax->volume); +-} +- +-/* +- "write" request on "volume" special file. +-*/ +-static ssize_t variax_set_volume(struct device *dev, +- struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- struct usb_line6_variax *variax = +- usb_get_intfdata(to_usb_interface(dev)); +- u8 value; +- int ret; +- +- ret = kstrtou8(buf, 10, &value); +- if (ret) +- return ret; +- +- if (line6_transmit_parameter(&variax->line6, VARIAXMIDI_volume, +- value) == 0) +- variax->volume = value; +- +- return count; +-} +- +-/* + "read" request on "active" special file. + */ + static ssize_t variax_get_active(struct device *dev, +@@ -515,8 +477,6 @@ static ssize_t variax_set_raw2(struct device *dev, + #endif + + /* Variax workbench special files: */ +-static DEVICE_ATTR(volume, S_IWUSR | S_IRUGO, variax_get_volume, +- variax_set_volume); + static DEVICE_ATTR(tone, S_IWUSR | S_IRUGO, variax_get_tone, variax_set_tone); + static DEVICE_ATTR(name, S_IRUGO, variax_get_name, line6_nop_write); + static DEVICE_ATTR(bank, S_IRUGO, variax_get_bank, line6_nop_write); +@@ -559,7 +519,6 @@ static void variax_destruct(struct usb_interface *interface) + static int variax_create_files2(struct device *dev) + { + int err; +- CHECK_RETURN(device_create_file(dev, &dev_attr_volume)); + CHECK_RETURN(device_create_file(dev, &dev_attr_tone)); + CHECK_RETURN(device_create_file(dev, &dev_attr_name)); + CHECK_RETURN(device_create_file(dev, &dev_attr_bank)); +@@ -664,7 +623,6 @@ void line6_variax_disconnect(struct usb_interface *interface) + if (dev != NULL) { + /* remove sysfs entries: */ + line6_variax_remove_files(0, 0, dev); +- device_remove_file(dev, &dev_attr_volume); + device_remove_file(dev, &dev_attr_tone); + device_remove_file(dev, &dev_attr_name); + device_remove_file(dev, &dev_attr_bank); +diff --git a/drivers/staging/line6/variax.h b/drivers/staging/line6/variax.h +index 4151c14..426c90c 100644 +--- a/drivers/staging/line6/variax.h ++++ b/drivers/staging/line6/variax.h +@@ -93,11 +93,6 @@ struct usb_line6_variax { + unsigned char bank[18]; + + /** +- Position of volume dial. +- */ +- int volume; +- +- /** + Position of tone control dial. + */ + int tone; diff --git a/debian/patches/features/all/line6/0091-staging-line6-drop-variax-tone-sysfs-attr.patch b/debian/patches/features/all/line6/0091-staging-line6-drop-variax-tone-sysfs-attr.patch new file mode 100644 index 000000000..9405980d1 --- /dev/null +++ b/debian/patches/features/all/line6/0091-staging-line6-drop-variax-tone-sysfs-attr.patch @@ -0,0 +1,110 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:10 +0100 +Subject: [091/106] staging: line6: drop variax tone sysfs attr + +commit abac15bd1812c8c8c7186b019dc2b946ac885e5b upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/variax.c | 42 ---------------------------------------- + drivers/staging/line6/variax.h | 5 ----- + 2 files changed, 47 deletions(-) + +diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c +index ef78f5a..31ece34 100644 +--- a/drivers/staging/line6/variax.c ++++ b/drivers/staging/line6/variax.c +@@ -199,11 +199,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax) + + switch (buf[0]) { + case LINE6_PARAM_CHANGE | LINE6_CHANNEL_HOST: +- switch (buf[1]) { +- case VARIAXMIDI_tone: +- variax->tone = buf[2]; +- } +- + break; + + case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_DEVICE: +@@ -326,40 +321,6 @@ static ssize_t variax_set_active(struct device *dev, + return count; + } + +-/* +- "read" request on "tone" special file. +-*/ +-static ssize_t variax_get_tone(struct device *dev, +- struct device_attribute *attr, char *buf) +-{ +- struct usb_line6_variax *variax = +- usb_get_intfdata(to_usb_interface(dev)); +- return sprintf(buf, "%d\n", variax->tone); +-} +- +-/* +- "write" request on "tone" special file. +-*/ +-static ssize_t variax_set_tone(struct device *dev, +- struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- struct usb_line6_variax *variax = +- usb_get_intfdata(to_usb_interface(dev)); +- u8 value; +- int ret; +- +- ret = kstrtou8(buf, 10, &value); +- if (ret) +- return ret; +- +- if (line6_transmit_parameter(&variax->line6, VARIAXMIDI_tone, +- value) == 0) +- variax->tone = value; +- +- return count; +-} +- + static ssize_t get_string(char *buf, const char *data, int length) + { + int i; +@@ -477,7 +438,6 @@ static ssize_t variax_set_raw2(struct device *dev, + #endif + + /* Variax workbench special files: */ +-static DEVICE_ATTR(tone, S_IWUSR | S_IRUGO, variax_get_tone, variax_set_tone); + static DEVICE_ATTR(name, S_IRUGO, variax_get_name, line6_nop_write); + static DEVICE_ATTR(bank, S_IRUGO, variax_get_bank, line6_nop_write); + static DEVICE_ATTR(dump, S_IRUGO, variax_get_dump, line6_nop_write); +@@ -519,7 +479,6 @@ static void variax_destruct(struct usb_interface *interface) + static int variax_create_files2(struct device *dev) + { + int err; +- CHECK_RETURN(device_create_file(dev, &dev_attr_tone)); + CHECK_RETURN(device_create_file(dev, &dev_attr_name)); + CHECK_RETURN(device_create_file(dev, &dev_attr_bank)); + CHECK_RETURN(device_create_file(dev, &dev_attr_dump)); +@@ -623,7 +582,6 @@ void line6_variax_disconnect(struct usb_interface *interface) + if (dev != NULL) { + /* remove sysfs entries: */ + line6_variax_remove_files(0, 0, dev); +- device_remove_file(dev, &dev_attr_tone); + device_remove_file(dev, &dev_attr_name); + device_remove_file(dev, &dev_attr_bank); + device_remove_file(dev, &dev_attr_dump); +diff --git a/drivers/staging/line6/variax.h b/drivers/staging/line6/variax.h +index 426c90c..745b5a1 100644 +--- a/drivers/staging/line6/variax.h ++++ b/drivers/staging/line6/variax.h +@@ -93,11 +93,6 @@ struct usb_line6_variax { + unsigned char bank[18]; + + /** +- Position of tone control dial. +- */ +- int tone; +- +- /** + Handler for device initializaton. + */ + struct work_struct startup_work; diff --git a/debian/patches/features/all/line6/0092-staging-line6-drop-variax-name-sysfs-attr.patch b/debian/patches/features/all/line6/0092-staging-line6-drop-variax-name-sysfs-attr.patch new file mode 100644 index 000000000..19bc62d63 --- /dev/null +++ b/debian/patches/features/all/line6/0092-staging-line6-drop-variax-name-sysfs-attr.patch @@ -0,0 +1,78 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:11 +0100 +Subject: [092/106] staging: line6: drop variax name sysfs attr + +commit ed5da06a77cef2aa64eb8298578fe1dc8e96ce35 upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/variax.c | 27 --------------------------- + 1 file changed, 27 deletions(-) + +diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c +index 31ece34..94a9f71 100644 +--- a/drivers/staging/line6/variax.c ++++ b/drivers/staging/line6/variax.c +@@ -218,17 +218,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax) + VARIAX_MODEL_MESSAGE_LENGTH) { + switch (variax->dumpreq.in_progress) { + case VARIAX_DUMP_PASS1: +- variax_decode(buf + +- VARIAX_MODEL_HEADER_LENGTH, +- (unsigned char *) +- &variax->model_data, +- (sizeof +- (variax->model_data. +- name) + +- sizeof(variax-> +- model_data. +- control) +- / 2) * 2); + line6_dump_request_async + (&variax->dumpreq, &variax->line6, + 1, VARIAX_DUMP_PASS2); +@@ -338,19 +327,6 @@ static ssize_t get_string(char *buf, const char *data, int length) + } + + /* +- "read" request on "name" special file. +-*/ +-static ssize_t variax_get_name(struct device *dev, +- struct device_attribute *attr, char *buf) +-{ +- struct usb_line6_variax *variax = +- usb_get_intfdata(to_usb_interface(dev)); +- line6_dump_wait_interruptible(&variax->dumpreq); +- return get_string(buf, variax->model_data.name, +- sizeof(variax->model_data.name)); +-} +- +-/* + "read" request on "bank" special file. + */ + static ssize_t variax_get_bank(struct device *dev, +@@ -438,7 +414,6 @@ static ssize_t variax_set_raw2(struct device *dev, + #endif + + /* Variax workbench special files: */ +-static DEVICE_ATTR(name, S_IRUGO, variax_get_name, line6_nop_write); + static DEVICE_ATTR(bank, S_IRUGO, variax_get_bank, line6_nop_write); + static DEVICE_ATTR(dump, S_IRUGO, variax_get_dump, line6_nop_write); + static DEVICE_ATTR(active, S_IWUSR | S_IRUGO, variax_get_active, +@@ -479,7 +454,6 @@ static void variax_destruct(struct usb_interface *interface) + static int variax_create_files2(struct device *dev) + { + int err; +- CHECK_RETURN(device_create_file(dev, &dev_attr_name)); + CHECK_RETURN(device_create_file(dev, &dev_attr_bank)); + CHECK_RETURN(device_create_file(dev, &dev_attr_dump)); + CHECK_RETURN(device_create_file(dev, &dev_attr_active)); +@@ -582,7 +556,6 @@ void line6_variax_disconnect(struct usb_interface *interface) + if (dev != NULL) { + /* remove sysfs entries: */ + line6_variax_remove_files(0, 0, dev); +- device_remove_file(dev, &dev_attr_name); + device_remove_file(dev, &dev_attr_bank); + device_remove_file(dev, &dev_attr_dump); + device_remove_file(dev, &dev_attr_active); diff --git a/debian/patches/features/all/line6/0093-staging-line6-drop-variax-bank-sysfs-attr.patch b/debian/patches/features/all/line6/0093-staging-line6-drop-variax-bank-sysfs-attr.patch new file mode 100644 index 000000000..23b76d61c --- /dev/null +++ b/debian/patches/features/all/line6/0093-staging-line6-drop-variax-bank-sysfs-attr.patch @@ -0,0 +1,104 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:12 +0100 +Subject: [093/106] staging: line6: drop variax bank sysfs attr + +commit a9de8ddabb542c33945f5c733d80978fee556029 upstream. + +The get_string() function is no longer used so drop it too. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/variax.c | 34 ---------------------------------- + drivers/staging/line6/variax.h | 5 ----- + 2 files changed, 39 deletions(-) + +diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c +index 94a9f71..8eec139 100644 +--- a/drivers/staging/line6/variax.c ++++ b/drivers/staging/line6/variax.c +@@ -248,9 +248,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax) + } + } else if (memcmp(buf + 1, variax_request_bank + 1, + sizeof(variax_request_bank) - 2) == 0) { +- memcpy(variax->bank, +- buf + sizeof(variax_request_bank) - 1, +- sizeof(variax->bank)); + line6_dump_finished(&variax->dumpreq); + variax_startup6(variax); + } else if (memcmp(buf + 1, variax_init_model + 1, +@@ -310,34 +307,6 @@ static ssize_t variax_set_active(struct device *dev, + return count; + } + +-static ssize_t get_string(char *buf, const char *data, int length) +-{ +- int i; +- memcpy(buf, data, length); +- +- for (i = length; i--;) { +- char c = buf[i]; +- +- if ((c != 0) && (c != ' ')) +- break; +- } +- +- buf[i + 1] = '\n'; +- return i + 2; +-} +- +-/* +- "read" request on "bank" special file. +-*/ +-static ssize_t variax_get_bank(struct device *dev, +- struct device_attribute *attr, char *buf) +-{ +- struct usb_line6_variax *variax = +- usb_get_intfdata(to_usb_interface(dev)); +- line6_dump_wait_interruptible(&variax->dumpreq); +- return get_string(buf, variax->bank, sizeof(variax->bank)); +-} +- + /* + "read" request on "dump" special file. + */ +@@ -414,7 +383,6 @@ static ssize_t variax_set_raw2(struct device *dev, + #endif + + /* Variax workbench special files: */ +-static DEVICE_ATTR(bank, S_IRUGO, variax_get_bank, line6_nop_write); + static DEVICE_ATTR(dump, S_IRUGO, variax_get_dump, line6_nop_write); + static DEVICE_ATTR(active, S_IWUSR | S_IRUGO, variax_get_active, + variax_set_active); +@@ -454,7 +422,6 @@ static void variax_destruct(struct usb_interface *interface) + static int variax_create_files2(struct device *dev) + { + int err; +- CHECK_RETURN(device_create_file(dev, &dev_attr_bank)); + CHECK_RETURN(device_create_file(dev, &dev_attr_dump)); + CHECK_RETURN(device_create_file(dev, &dev_attr_active)); + CHECK_RETURN(device_create_file(dev, &dev_attr_guitar)); +@@ -556,7 +523,6 @@ void line6_variax_disconnect(struct usb_interface *interface) + if (dev != NULL) { + /* remove sysfs entries: */ + line6_variax_remove_files(0, 0, dev); +- device_remove_file(dev, &dev_attr_bank); + device_remove_file(dev, &dev_attr_dump); + device_remove_file(dev, &dev_attr_active); + device_remove_file(dev, &dev_attr_guitar); +diff --git a/drivers/staging/line6/variax.h b/drivers/staging/line6/variax.h +index 745b5a1..b5d6a66 100644 +--- a/drivers/staging/line6/variax.h ++++ b/drivers/staging/line6/variax.h +@@ -88,11 +88,6 @@ struct usb_line6_variax { + unsigned char guitar[18]; + + /** +- Name of current model bank. +- */ +- unsigned char bank[18]; +- +- /** + Handler for device initializaton. + */ + struct work_struct startup_work; diff --git a/debian/patches/features/all/line6/0094-staging-line6-drop-variax-dump-sysfs-attr.patch b/debian/patches/features/all/line6/0094-staging-line6-drop-variax-dump-sysfs-attr.patch new file mode 100644 index 000000000..52d35cbf5 --- /dev/null +++ b/debian/patches/features/all/line6/0094-staging-line6-drop-variax-dump-sysfs-attr.patch @@ -0,0 +1,64 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:13 +0100 +Subject: [094/106] staging: line6: drop variax dump sysfs attr + +commit 502eb4ee43064ad40d10a9ea20477f841a35167d upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/variax.c | 20 -------------------- + 1 file changed, 20 deletions(-) + +diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c +index 8eec139..0f1846e 100644 +--- a/drivers/staging/line6/variax.c ++++ b/drivers/staging/line6/variax.c +@@ -308,23 +308,6 @@ static ssize_t variax_set_active(struct device *dev, + } + + /* +- "read" request on "dump" special file. +-*/ +-static ssize_t variax_get_dump(struct device *dev, +- struct device_attribute *attr, char *buf) +-{ +- struct usb_line6_variax *variax = +- usb_get_intfdata(to_usb_interface(dev)); +- int retval; +- retval = line6_dump_wait_interruptible(&variax->dumpreq); +- if (retval < 0) +- return retval; +- memcpy(buf, &variax->model_data.control, +- sizeof(variax->model_data.control)); +- return sizeof(variax->model_data.control); +-} +- +-/* + "read" request on "guitar" special file. + */ + static ssize_t variax_get_guitar(struct device *dev, +@@ -383,7 +366,6 @@ static ssize_t variax_set_raw2(struct device *dev, + #endif + + /* Variax workbench special files: */ +-static DEVICE_ATTR(dump, S_IRUGO, variax_get_dump, line6_nop_write); + static DEVICE_ATTR(active, S_IWUSR | S_IRUGO, variax_get_active, + variax_set_active); + static DEVICE_ATTR(guitar, S_IRUGO, variax_get_guitar, line6_nop_write); +@@ -422,7 +404,6 @@ static void variax_destruct(struct usb_interface *interface) + static int variax_create_files2(struct device *dev) + { + int err; +- CHECK_RETURN(device_create_file(dev, &dev_attr_dump)); + CHECK_RETURN(device_create_file(dev, &dev_attr_active)); + CHECK_RETURN(device_create_file(dev, &dev_attr_guitar)); + #ifdef CONFIG_LINE6_USB_RAW +@@ -523,7 +504,6 @@ void line6_variax_disconnect(struct usb_interface *interface) + if (dev != NULL) { + /* remove sysfs entries: */ + line6_variax_remove_files(0, 0, dev); +- device_remove_file(dev, &dev_attr_dump); + device_remove_file(dev, &dev_attr_active); + device_remove_file(dev, &dev_attr_guitar); + #ifdef CONFIG_LINE6_USB_RAW diff --git a/debian/patches/features/all/line6/0095-staging-line6-drop-variax-active-sysfs-attr.patch b/debian/patches/features/all/line6/0095-staging-line6-drop-variax-active-sysfs-attr.patch new file mode 100644 index 000000000..bebcff491 --- /dev/null +++ b/debian/patches/features/all/line6/0095-staging-line6-drop-variax-active-sysfs-attr.patch @@ -0,0 +1,82 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:14 +0100 +Subject: [095/106] staging: line6: drop variax active sysfs attr + +commit d46e7c215229c29008c30fb8bca16a381d3ef5f4 upstream. + +The get_string() function has no other callers so remove it too. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/variax.c | 36 ------------------------------------ + 1 file changed, 36 deletions(-) + +diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c +index 0f1846e..4600d24 100644 +--- a/drivers/staging/line6/variax.c ++++ b/drivers/staging/line6/variax.c +@@ -276,38 +276,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax) + } + + /* +- "read" request on "active" special file. +-*/ +-static ssize_t variax_get_active(struct device *dev, +- struct device_attribute *attr, char *buf) +-{ +- struct usb_line6_variax *variax = +- usb_get_intfdata(to_usb_interface(dev)); +- return sprintf(buf, "%d\n", +- variax->buffer_activate[VARIAX_OFFSET_ACTIVATE]); +-} +- +-/* +- "write" request on "active" special file. +-*/ +-static ssize_t variax_set_active(struct device *dev, +- struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- struct usb_line6_variax *variax = +- usb_get_intfdata(to_usb_interface(dev)); +- u8 value; +- int ret; +- +- ret = kstrtou8(buf, 10, &value); +- if (ret) +- return ret; +- +- variax_activate_async(variax, value ? 1 : 0); +- return count; +-} +- +-/* + "read" request on "guitar" special file. + */ + static ssize_t variax_get_guitar(struct device *dev, +@@ -366,8 +334,6 @@ static ssize_t variax_set_raw2(struct device *dev, + #endif + + /* Variax workbench special files: */ +-static DEVICE_ATTR(active, S_IWUSR | S_IRUGO, variax_get_active, +- variax_set_active); + static DEVICE_ATTR(guitar, S_IRUGO, variax_get_guitar, line6_nop_write); + + #ifdef CONFIG_LINE6_USB_RAW +@@ -404,7 +370,6 @@ static void variax_destruct(struct usb_interface *interface) + static int variax_create_files2(struct device *dev) + { + int err; +- CHECK_RETURN(device_create_file(dev, &dev_attr_active)); + CHECK_RETURN(device_create_file(dev, &dev_attr_guitar)); + #ifdef CONFIG_LINE6_USB_RAW + CHECK_RETURN(device_create_file(dev, &dev_attr_raw)); +@@ -504,7 +469,6 @@ void line6_variax_disconnect(struct usb_interface *interface) + if (dev != NULL) { + /* remove sysfs entries: */ + line6_variax_remove_files(0, 0, dev); +- device_remove_file(dev, &dev_attr_active); + device_remove_file(dev, &dev_attr_guitar); + #ifdef CONFIG_LINE6_USB_RAW + device_remove_file(dev, &dev_attr_raw); diff --git a/debian/patches/features/all/line6/0096-staging-line6-drop-variax-guitar-sysfs-attr.patch b/debian/patches/features/all/line6/0096-staging-line6-drop-variax-guitar-sysfs-attr.patch new file mode 100644 index 000000000..54e998592 --- /dev/null +++ b/debian/patches/features/all/line6/0096-staging-line6-drop-variax-guitar-sysfs-attr.patch @@ -0,0 +1,90 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:15 +0100 +Subject: [096/106] staging: line6: drop variax guitar sysfs attr + +commit 52c5505ac5ff0588c51c82893a782bd8571e180c upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/variax.c | 22 ---------------------- + drivers/staging/line6/variax.h | 5 ----- + 2 files changed, 27 deletions(-) + +diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c +index 4600d24..4db21a3 100644 +--- a/drivers/staging/line6/variax.c ++++ b/drivers/staging/line6/variax.c +@@ -250,11 +250,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax) + sizeof(variax_request_bank) - 2) == 0) { + line6_dump_finished(&variax->dumpreq); + variax_startup6(variax); +- } else if (memcmp(buf + 1, variax_init_model + 1, +- sizeof(variax_init_model) - 1) == 0) { +- memcpy(variax->guitar, +- buf + sizeof(variax_init_model), +- sizeof(variax->guitar)); + } else if (memcmp(buf + 1, variax_init_version + 1, + sizeof(variax_init_version) - 1) == 0) { + variax_startup3(variax); +@@ -275,17 +270,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax) + } + } + +-/* +- "read" request on "guitar" special file. +-*/ +-static ssize_t variax_get_guitar(struct device *dev, +- struct device_attribute *attr, char *buf) +-{ +- struct usb_line6_variax *variax = +- usb_get_intfdata(to_usb_interface(dev)); +- return sprintf(buf, "%s\n", variax->guitar); +-} +- + #ifdef CONFIG_LINE6_USB_RAW + + static char *variax_alloc_sysex_buffer(struct usb_line6_variax *variax, +@@ -333,9 +317,6 @@ static ssize_t variax_set_raw2(struct device *dev, + + #endif + +-/* Variax workbench special files: */ +-static DEVICE_ATTR(guitar, S_IRUGO, variax_get_guitar, line6_nop_write); +- + #ifdef CONFIG_LINE6_USB_RAW + static DEVICE_ATTR(raw, S_IWUSR, line6_nop_read, line6_set_raw); + static DEVICE_ATTR(raw2, S_IWUSR, line6_nop_read, variax_set_raw2); +@@ -369,8 +350,6 @@ static void variax_destruct(struct usb_interface *interface) + */ + static int variax_create_files2(struct device *dev) + { +- int err; +- CHECK_RETURN(device_create_file(dev, &dev_attr_guitar)); + #ifdef CONFIG_LINE6_USB_RAW + CHECK_RETURN(device_create_file(dev, &dev_attr_raw)); + CHECK_RETURN(device_create_file(dev, &dev_attr_raw2)); +@@ -469,7 +448,6 @@ void line6_variax_disconnect(struct usb_interface *interface) + if (dev != NULL) { + /* remove sysfs entries: */ + line6_variax_remove_files(0, 0, dev); +- device_remove_file(dev, &dev_attr_guitar); + #ifdef CONFIG_LINE6_USB_RAW + device_remove_file(dev, &dev_attr_raw); + device_remove_file(dev, &dev_attr_raw2); +diff --git a/drivers/staging/line6/variax.h b/drivers/staging/line6/variax.h +index b5d6a66..f3d95fa 100644 +--- a/drivers/staging/line6/variax.h ++++ b/drivers/staging/line6/variax.h +@@ -83,11 +83,6 @@ struct usb_line6_variax { + struct variax_model model_data; + + /** +- Name of connected guitar. +- */ +- unsigned char guitar[18]; +- +- /** + Handler for device initializaton. + */ + struct work_struct startup_work; diff --git a/debian/patches/features/all/line6/0097-staging-line6-drop-variax-raw-sysfs-attrs.patch b/debian/patches/features/all/line6/0097-staging-line6-drop-variax-raw-sysfs-attrs.patch new file mode 100644 index 000000000..9c708f165 --- /dev/null +++ b/debian/patches/features/all/line6/0097-staging-line6-drop-variax-raw-sysfs-attrs.patch @@ -0,0 +1,134 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:16 +0100 +Subject: [097/106] staging: line6: drop variax raw sysfs attrs + +commit 59ac6936bcb7fc95039eb7813bfb827271185c56 upstream. + +Note that VARIAX_SYSEX_ACTIVATE was never used so drop it along with the +other VARIAX_SYSEX_* constants which are now unused. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/variax.c | 73 ---------------------------------------- + 1 file changed, 73 deletions(-) + +diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c +index 4db21a3..ff55ad37 100644 +--- a/drivers/staging/line6/variax.c ++++ b/drivers/staging/line6/variax.c +@@ -16,9 +16,6 @@ + #include "driver.h" + #include "variax.h" + +-#define VARIAX_SYSEX_CODE 7 +-#define VARIAX_SYSEX_PARAM 0x3b +-#define VARIAX_SYSEX_ACTIVATE 0x2a + #define VARIAX_MODEL_HEADER_LENGTH 7 + #define VARIAX_MODEL_MESSAGE_LENGTH 199 + #define VARIAX_OFFSET_ACTIVATE 7 +@@ -70,7 +67,6 @@ static const char variax_request_model2[] = { + }; + + /* forward declarations: */ +-static int variax_create_files2(struct device *dev); + static void variax_startup2(unsigned long data); + static void variax_startup4(unsigned long data); + static void variax_startup5(unsigned long data); +@@ -187,7 +183,6 @@ static void variax_startup7(struct work_struct *work) + + /* device files: */ + line6_variax_create_files(0, 0, line6->ifcdev); +- variax_create_files2(line6->ifcdev); + } + + /* +@@ -270,58 +265,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax) + } + } + +-#ifdef CONFIG_LINE6_USB_RAW +- +-static char *variax_alloc_sysex_buffer(struct usb_line6_variax *variax, +- int code, int size) +-{ +- return line6_alloc_sysex_buffer(&variax->line6, VARIAX_SYSEX_CODE, code, +- size); +-} +- +-/* +- "write" request on "raw" special file. +-*/ +-static ssize_t variax_set_raw2(struct device *dev, +- struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- struct usb_line6_variax *variax = +- usb_get_intfdata(to_usb_interface(dev)); +- int size; +- int i; +- char *sysex; +- +- count -= count % 3; +- size = count * 2; +- sysex = variax_alloc_sysex_buffer(variax, VARIAX_SYSEX_PARAM, size); +- +- if (!sysex) +- return 0; +- +- for (i = 0; i < count; i += 3) { +- const unsigned char *p1 = buf + i; +- char *p2 = sysex + SYSEX_DATA_OFS + i * 2; +- p2[0] = p1[2] & 0x0f; +- p2[1] = p1[2] >> 4; +- p2[2] = p1[1] & 0x0f; +- p2[3] = p1[1] >> 4; +- p2[4] = p1[0] & 0x0f; +- p2[5] = p1[0] >> 4; +- } +- +- line6_send_sysex_message(&variax->line6, sysex, size); +- kfree(sysex); +- return count; +-} +- +-#endif +- +-#ifdef CONFIG_LINE6_USB_RAW +-static DEVICE_ATTR(raw, S_IWUSR, line6_nop_read, line6_set_raw); +-static DEVICE_ATTR(raw2, S_IWUSR, line6_nop_read, variax_set_raw2); +-#endif +- + /* + Variax destructor. + */ +@@ -346,18 +289,6 @@ static void variax_destruct(struct usb_interface *interface) + } + + /* +- Create sysfs entries. +-*/ +-static int variax_create_files2(struct device *dev) +-{ +-#ifdef CONFIG_LINE6_USB_RAW +- CHECK_RETURN(device_create_file(dev, &dev_attr_raw)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_raw2)); +-#endif +- return 0; +-} +- +-/* + Try to init workbench device. + */ + static int variax_try_init(struct usb_interface *interface, +@@ -448,10 +379,6 @@ void line6_variax_disconnect(struct usb_interface *interface) + if (dev != NULL) { + /* remove sysfs entries: */ + line6_variax_remove_files(0, 0, dev); +-#ifdef CONFIG_LINE6_USB_RAW +- device_remove_file(dev, &dev_attr_raw); +- device_remove_file(dev, &dev_attr_raw2); +-#endif + } + + variax_destruct(interface); diff --git a/debian/patches/features/all/line6/0098-staging-line6-drop-CONFIG_LINE6_USB_RAW.patch b/debian/patches/features/all/line6/0098-staging-line6-drop-CONFIG_LINE6_USB_RAW.patch new file mode 100644 index 000000000..70fcbeacf --- /dev/null +++ b/debian/patches/features/all/line6/0098-staging-line6-drop-CONFIG_LINE6_USB_RAW.patch @@ -0,0 +1,66 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:17 +0100 +Subject: [098/106] staging: line6: drop CONFIG_LINE6_USB_RAW + +commit 9f673d7a6022b9425fc412d619fd72bcadcf80c3 upstream. + +Now that both pod.c and variax.c have removed their raw sysfs attrs, the +CONFIG_LINE6_USB_RAW config option can be dropped. The drivers are +being stripped down to just PCM and MIDI I/O so there is less state and +filtering. Therefore it's no longer necessary to have a special sysfs +attr to bypass the filtering ("raw"). + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/Kconfig | 11 ----------- + drivers/staging/line6/driver.c | 14 -------------- + 2 files changed, 25 deletions(-) + +diff --git a/drivers/staging/line6/Kconfig b/drivers/staging/line6/Kconfig +index 80a7202..b635436 100644 +--- a/drivers/staging/line6/Kconfig ++++ b/drivers/staging/line6/Kconfig +@@ -33,17 +33,6 @@ config LINE6_USB_DUMP_PCM + + If unsure, say N. + +-config LINE6_USB_RAW +- bool "raw data communication" +- default n +- help +- Say Y here to create special files which allow to send raw data +- to the device. This bypasses any sanity checks, so if you discover +- the code to erase the firmware, feel free to render your device +- useless, but only after reading the GPL section "NO WARRANTY". +- +- If unsure, say N. +- + config LINE6_USB_IMPULSE_RESPONSE + bool "measure impulse response" + default n +diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c +index e0e0779..6f07a06c 100644 +--- a/drivers/staging/line6/driver.c ++++ b/drivers/staging/line6/driver.c +@@ -642,20 +642,6 @@ ssize_t line6_nop_write(struct device *dev, struct device_attribute *attr, + } + + /* +- "write" request on "raw" special file. +-*/ +-#ifdef CONFIG_LINE6_USB_RAW +-ssize_t line6_set_raw(struct device *dev, struct device_attribute *attr, +- const char *buf, size_t count) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6 *line6 = usb_get_intfdata(interface); +- line6_send_raw_message(line6, buf, count); +- return count; +-} +-#endif +- +-/* + Generic destructor. + */ + static void line6_destruct(struct usb_interface *interface) diff --git a/debian/patches/features/all/line6/0099-staging-line6-drop-amp-effects-dump-request-triggers.patch b/debian/patches/features/all/line6/0099-staging-line6-drop-amp-effects-dump-request-triggers.patch new file mode 100644 index 000000000..4a8b76ff7 --- /dev/null +++ b/debian/patches/features/all/line6/0099-staging-line6-drop-amp-effects-dump-request-triggers.patch @@ -0,0 +1,44 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:18 +0100 +Subject: [099/106] staging: line6: drop amp/effects dump request triggers + +commit 4528555c8cf8069795b4c842137979ff2510e84d upstream. + +Since the driver no longer needs to keep state of device parameters it +is no longer necessary to refresh state when messages that affect other +parameters are sent. Drop the code to trigger a dump when amp/effects +are changed. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 9 --------- + 1 file changed, 9 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 157ef68..aa3a547 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -174,12 +174,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + /* intentionally no break here! */ + + case LINE6_PARAM_CHANGE | LINE6_CHANNEL_HOST: +- if ((buf[1] == POD_amp_model_setup) || +- (buf[1] == POD_effect_setup)) +- /* these also affect other settings */ +- line6_dump_request_async(&pod->dumpreq, &pod->line6, 0, +- LINE6_DUMP_CURRENT); +- + break; + + case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_DEVICE: +@@ -288,9 +282,6 @@ void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param, + { + if (line6_transmit_parameter(&pod->line6, param, value) == 0) + pod_store_parameter(pod, param, value); +- +- if ((param == POD_amp_model_setup) || (param == POD_effect_setup)) /* these also affect other settings */ +- line6_invalidate_current(&pod->dumpreq); + } + + /* diff --git a/debian/patches/features/all/line6/0100-staging-line6-drop-MIDI-parameter-sysfs-attrs.patch b/debian/patches/features/all/line6/0100-staging-line6-drop-MIDI-parameter-sysfs-attrs.patch new file mode 100644 index 000000000..6b75fcae3 --- /dev/null +++ b/debian/patches/features/all/line6/0100-staging-line6-drop-MIDI-parameter-sysfs-attrs.patch @@ -0,0 +1,1329 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:19 +0100 +Subject: [100/106] staging: line6: drop MIDI parameter sysfs attrs + +commit 2807904441d4f1787425527a8193580d389cf497 upstream. + +Both pod.c and variax.c expose the device's MIDI parameters as sysfs +attrs. Knowledge of MIDI constants should be in userspace, not in the +driver. Drop the sysfs attrs and let userspace interpret parameters it +cares about instead. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/Makefile | 1 - + drivers/staging/line6/control.c | 995 --------------------------------------- + drivers/staging/line6/control.h | 195 -------- + drivers/staging/line6/driver.c | 1 - + drivers/staging/line6/pod.c | 9 - + drivers/staging/line6/variax.c | 13 - + 6 files changed, 1214 deletions(-) + delete mode 100644 drivers/staging/line6/control.c + delete mode 100644 drivers/staging/line6/control.h + +diff --git a/drivers/staging/line6/Makefile b/drivers/staging/line6/Makefile +index 34a2dda..44ee5ae 100644 +--- a/drivers/staging/line6/Makefile ++++ b/drivers/staging/line6/Makefile +@@ -3,7 +3,6 @@ obj-$(CONFIG_LINE6_USB) += line6usb.o + line6usb-y := \ + audio.o \ + capture.o \ +- control.o \ + driver.o \ + dumprequest.o \ + midi.o \ +diff --git a/drivers/staging/line6/control.c b/drivers/staging/line6/control.c +deleted file mode 100644 +index f8326f5..0000000 +--- a/drivers/staging/line6/control.c ++++ /dev/null +@@ -1,995 +0,0 @@ +-/* +- * 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 +- +-#include "control.h" +-#include "driver.h" +-#include "pod.h" +-#include "usbdefs.h" +-#include "variax.h" +- +-#define DEVICE_ATTR2(_name1, _name2, _mode, _show, _store) \ +-struct device_attribute dev_attr_##_name1 = __ATTR(_name2, _mode, _show, _store) +- +-#define LINE6_PARAM_R(PREFIX, prefix, type, param) \ +-static ssize_t prefix##_get_##param(struct device *dev, \ +- struct device_attribute *attr, char *buf) \ +-{ \ +- return prefix##_get_param_##type(dev, buf, PREFIX##_##param); \ +-} +- +-#define LINE6_PARAM_RW(PREFIX, prefix, type, param) \ +-LINE6_PARAM_R(PREFIX, prefix, type, param); \ +-static ssize_t prefix##_set_##param(struct device *dev, \ +- struct device_attribute *attr, const char *buf, size_t count) \ +-{ \ +- return prefix##_set_param_##type(dev, buf, count, PREFIX##_##param); \ +-} +- +-#define POD_PARAM_R(type, param) LINE6_PARAM_R(POD, pod, type, param) +-#define POD_PARAM_RW(type, param) LINE6_PARAM_RW(POD, pod, type, param) +-#define VARIAX_PARAM_R(type, param) LINE6_PARAM_R(VARIAX, variax, type, param) +-#define VARIAX_PARAM_RW(type, param) LINE6_PARAM_RW(VARIAX, variax, type, param) +- +-static ssize_t pod_get_param_int(struct device *dev, char *buf, int param) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_pod *pod = usb_get_intfdata(interface); +- int retval = line6_dump_wait_interruptible(&pod->dumpreq); +- if (retval < 0) +- return retval; +- return sprintf(buf, "%d\n", pod->prog_data.control[param]); +-} +- +-static ssize_t pod_set_param_int(struct device *dev, const char *buf, +- size_t count, int param) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_pod *pod = usb_get_intfdata(interface); +- u8 value; +- int retval; +- +- retval = kstrtou8(buf, 10, &value); +- if (retval) +- return retval; +- +- line6_pod_transmit_parameter(pod, param, value); +- return count; +-} +- +-static ssize_t variax_get_param_int(struct device *dev, char *buf, int param) +-{ +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_variax *variax = usb_get_intfdata(interface); +- int retval = line6_dump_wait_interruptible(&variax->dumpreq); +- if (retval < 0) +- return retval; +- return sprintf(buf, "%d\n", variax->model_data.control[param]); +-} +- +-static ssize_t variax_get_param_float(struct device *dev, char *buf, int param) +-{ +- /* +- We do our own floating point handling here since at the time +- this code was written (Jan 2006) it was highly discouraged to +- use floating point arithmetic in the kernel. If you think that +- this no longer applies, feel free to replace this by generic +- floating point code. +- */ +- +- static const int BIAS = 0x7f; +- static const int OFFSET = 0xf; +- static const int PRECISION = 1000; +- +- int len = 0; +- unsigned part_int, part_frac; +- struct usb_interface *interface = to_usb_interface(dev); +- struct usb_line6_variax *variax = usb_get_intfdata(interface); +- const unsigned char *p = variax->model_data.control + param; +- int retval = line6_dump_wait_interruptible(&variax->dumpreq); +- if (retval < 0) +- return retval; +- +- if ((p[0] == 0) && (p[1] == 0) && (p[2] == 0)) +- part_int = part_frac = 0; +- else { +- int exponent = (((p[0] & 0x7f) << 1) | (p[1] >> 7)) - BIAS; +- unsigned mantissa = (p[1] << 8) | p[2] | 0x8000; +- exponent -= OFFSET; +- +- if (exponent >= 0) { +- part_int = mantissa << exponent; +- part_frac = 0; +- } else { +- part_int = mantissa >> -exponent; +- part_frac = (mantissa << (32 + exponent)) & 0xffffffff; +- } +- +- part_frac = +- (part_frac / ((1UL << 31) / (PRECISION / 2 * 10)) + 5) / 10; +- } +- +- len += +- sprintf(buf + len, "%s%d.%03d\n", ((p[0] & 0x80) ? "-" : ""), +- part_int, part_frac); +- return len; +-} +- +-POD_PARAM_RW(int, tweak); +-POD_PARAM_RW(int, wah_position); +-POD_PARAM_RW(int, compression_gain); +-POD_PARAM_RW(int, vol_pedal_position); +-POD_PARAM_RW(int, compression_threshold); +-POD_PARAM_RW(int, pan); +-POD_PARAM_RW(int, amp_model_setup); +-POD_PARAM_RW(int, amp_model); +-POD_PARAM_RW(int, drive); +-POD_PARAM_RW(int, bass); +-POD_PARAM_RW(int, mid); +-POD_PARAM_RW(int, lowmid); +-POD_PARAM_RW(int, treble); +-POD_PARAM_RW(int, highmid); +-POD_PARAM_RW(int, chan_vol); +-POD_PARAM_RW(int, reverb_mix); +-POD_PARAM_RW(int, effect_setup); +-POD_PARAM_RW(int, band_1_frequency); +-POD_PARAM_RW(int, presence); +-POD_PARAM_RW(int, treble__bass); +-POD_PARAM_RW(int, noise_gate_enable); +-POD_PARAM_RW(int, gate_threshold); +-POD_PARAM_RW(int, gate_decay_time); +-POD_PARAM_RW(int, stomp_enable); +-POD_PARAM_RW(int, comp_enable); +-POD_PARAM_RW(int, stomp_time); +-POD_PARAM_RW(int, delay_enable); +-POD_PARAM_RW(int, mod_param_1); +-POD_PARAM_RW(int, delay_param_1); +-POD_PARAM_RW(int, delay_param_1_note_value); +-POD_PARAM_RW(int, band_2_frequency__bass); +-POD_PARAM_RW(int, delay_param_2); +-POD_PARAM_RW(int, delay_volume_mix); +-POD_PARAM_RW(int, delay_param_3); +-POD_PARAM_RW(int, reverb_enable); +-POD_PARAM_RW(int, reverb_type); +-POD_PARAM_RW(int, reverb_decay); +-POD_PARAM_RW(int, reverb_tone); +-POD_PARAM_RW(int, reverb_pre_delay); +-POD_PARAM_RW(int, reverb_pre_post); +-POD_PARAM_RW(int, band_2_frequency); +-POD_PARAM_RW(int, band_3_frequency__bass); +-POD_PARAM_RW(int, wah_enable); +-POD_PARAM_RW(int, modulation_lo_cut); +-POD_PARAM_RW(int, delay_reverb_lo_cut); +-POD_PARAM_RW(int, volume_pedal_minimum); +-POD_PARAM_RW(int, eq_pre_post); +-POD_PARAM_RW(int, volume_pre_post); +-POD_PARAM_RW(int, di_model); +-POD_PARAM_RW(int, di_delay); +-POD_PARAM_RW(int, mod_enable); +-POD_PARAM_RW(int, mod_param_1_note_value); +-POD_PARAM_RW(int, mod_param_2); +-POD_PARAM_RW(int, mod_param_3); +-POD_PARAM_RW(int, mod_param_4); +-POD_PARAM_RW(int, mod_param_5); +-POD_PARAM_RW(int, mod_volume_mix); +-POD_PARAM_RW(int, mod_pre_post); +-POD_PARAM_RW(int, modulation_model); +-POD_PARAM_RW(int, band_3_frequency); +-POD_PARAM_RW(int, band_4_frequency__bass); +-POD_PARAM_RW(int, mod_param_1_double_precision); +-POD_PARAM_RW(int, delay_param_1_double_precision); +-POD_PARAM_RW(int, eq_enable); +-POD_PARAM_RW(int, tap); +-POD_PARAM_RW(int, volume_tweak_pedal_assign); +-POD_PARAM_RW(int, band_5_frequency); +-POD_PARAM_RW(int, tuner); +-POD_PARAM_RW(int, mic_selection); +-POD_PARAM_RW(int, cabinet_model); +-POD_PARAM_RW(int, stomp_model); +-POD_PARAM_RW(int, roomlevel); +-POD_PARAM_RW(int, band_4_frequency); +-POD_PARAM_RW(int, band_6_frequency); +-POD_PARAM_RW(int, stomp_param_1_note_value); +-POD_PARAM_RW(int, stomp_param_2); +-POD_PARAM_RW(int, stomp_param_3); +-POD_PARAM_RW(int, stomp_param_4); +-POD_PARAM_RW(int, stomp_param_5); +-POD_PARAM_RW(int, stomp_param_6); +-POD_PARAM_RW(int, amp_switch_select); +-POD_PARAM_RW(int, delay_param_4); +-POD_PARAM_RW(int, delay_param_5); +-POD_PARAM_RW(int, delay_pre_post); +-POD_PARAM_RW(int, delay_model); +-POD_PARAM_RW(int, delay_verb_model); +-POD_PARAM_RW(int, tempo_msb); +-POD_PARAM_RW(int, tempo_lsb); +-POD_PARAM_RW(int, wah_model); +-POD_PARAM_RW(int, bypass_volume); +-POD_PARAM_RW(int, fx_loop_on_off); +-POD_PARAM_RW(int, tweak_param_select); +-POD_PARAM_RW(int, amp1_engage); +-POD_PARAM_RW(int, band_1_gain); +-POD_PARAM_RW(int, band_2_gain__bass); +-POD_PARAM_RW(int, band_2_gain); +-POD_PARAM_RW(int, band_3_gain__bass); +-POD_PARAM_RW(int, band_3_gain); +-POD_PARAM_RW(int, band_4_gain__bass); +-POD_PARAM_RW(int, band_5_gain__bass); +-POD_PARAM_RW(int, band_4_gain); +-POD_PARAM_RW(int, band_6_gain__bass); +-VARIAX_PARAM_R(int, body); +-VARIAX_PARAM_R(int, pickup1_enable); +-VARIAX_PARAM_R(int, pickup1_type); +-VARIAX_PARAM_R(float, pickup1_position); +-VARIAX_PARAM_R(float, pickup1_angle); +-VARIAX_PARAM_R(float, pickup1_level); +-VARIAX_PARAM_R(int, pickup2_enable); +-VARIAX_PARAM_R(int, pickup2_type); +-VARIAX_PARAM_R(float, pickup2_position); +-VARIAX_PARAM_R(float, pickup2_angle); +-VARIAX_PARAM_R(float, pickup2_level); +-VARIAX_PARAM_R(int, pickup_phase); +-VARIAX_PARAM_R(float, capacitance); +-VARIAX_PARAM_R(float, tone_resistance); +-VARIAX_PARAM_R(float, volume_resistance); +-VARIAX_PARAM_R(int, taper); +-VARIAX_PARAM_R(float, tone_dump); +-VARIAX_PARAM_R(int, save_tone); +-VARIAX_PARAM_R(float, volume_dump); +-VARIAX_PARAM_R(int, tuning_enable); +-VARIAX_PARAM_R(int, tuning6); +-VARIAX_PARAM_R(int, tuning5); +-VARIAX_PARAM_R(int, tuning4); +-VARIAX_PARAM_R(int, tuning3); +-VARIAX_PARAM_R(int, tuning2); +-VARIAX_PARAM_R(int, tuning1); +-VARIAX_PARAM_R(float, detune6); +-VARIAX_PARAM_R(float, detune5); +-VARIAX_PARAM_R(float, detune4); +-VARIAX_PARAM_R(float, detune3); +-VARIAX_PARAM_R(float, detune2); +-VARIAX_PARAM_R(float, detune1); +-VARIAX_PARAM_R(float, mix6); +-VARIAX_PARAM_R(float, mix5); +-VARIAX_PARAM_R(float, mix4); +-VARIAX_PARAM_R(float, mix3); +-VARIAX_PARAM_R(float, mix2); +-VARIAX_PARAM_R(float, mix1); +-VARIAX_PARAM_R(int, pickup_wiring); +- +-static DEVICE_ATTR(tweak, S_IWUSR | S_IRUGO, pod_get_tweak, pod_set_tweak); +-static DEVICE_ATTR(wah_position, S_IWUSR | S_IRUGO, pod_get_wah_position, +- pod_set_wah_position); +-static DEVICE_ATTR(compression_gain, S_IWUSR | S_IRUGO, +- pod_get_compression_gain, pod_set_compression_gain); +-static DEVICE_ATTR(vol_pedal_position, S_IWUSR | S_IRUGO, +- pod_get_vol_pedal_position, pod_set_vol_pedal_position); +-static DEVICE_ATTR(compression_threshold, S_IWUSR | S_IRUGO, +- pod_get_compression_threshold, +- pod_set_compression_threshold); +-static DEVICE_ATTR(pan, S_IWUSR | S_IRUGO, pod_get_pan, pod_set_pan); +-static DEVICE_ATTR(amp_model_setup, S_IWUSR | S_IRUGO, pod_get_amp_model_setup, +- pod_set_amp_model_setup); +-static DEVICE_ATTR(amp_model, S_IWUSR | S_IRUGO, pod_get_amp_model, +- pod_set_amp_model); +-static DEVICE_ATTR(drive, S_IWUSR | S_IRUGO, pod_get_drive, pod_set_drive); +-static DEVICE_ATTR(bass, S_IWUSR | S_IRUGO, pod_get_bass, pod_set_bass); +-static DEVICE_ATTR(mid, S_IWUSR | S_IRUGO, pod_get_mid, pod_set_mid); +-static DEVICE_ATTR(lowmid, S_IWUSR | S_IRUGO, pod_get_lowmid, pod_set_lowmid); +-static DEVICE_ATTR(treble, S_IWUSR | S_IRUGO, pod_get_treble, pod_set_treble); +-static DEVICE_ATTR(highmid, S_IWUSR | S_IRUGO, pod_get_highmid, +- pod_set_highmid); +-static DEVICE_ATTR(chan_vol, S_IWUSR | S_IRUGO, pod_get_chan_vol, +- pod_set_chan_vol); +-static DEVICE_ATTR(reverb_mix, S_IWUSR | S_IRUGO, pod_get_reverb_mix, +- pod_set_reverb_mix); +-static DEVICE_ATTR(effect_setup, S_IWUSR | S_IRUGO, pod_get_effect_setup, +- pod_set_effect_setup); +-static DEVICE_ATTR(band_1_frequency, S_IWUSR | S_IRUGO, +- pod_get_band_1_frequency, pod_set_band_1_frequency); +-static DEVICE_ATTR(presence, S_IWUSR | S_IRUGO, pod_get_presence, +- pod_set_presence); +-static DEVICE_ATTR2(treble__bass, treble, S_IWUSR | S_IRUGO, +- pod_get_treble__bass, pod_set_treble__bass); +-static DEVICE_ATTR(noise_gate_enable, S_IWUSR | S_IRUGO, +- pod_get_noise_gate_enable, pod_set_noise_gate_enable); +-static DEVICE_ATTR(gate_threshold, S_IWUSR | S_IRUGO, pod_get_gate_threshold, +- pod_set_gate_threshold); +-static DEVICE_ATTR(gate_decay_time, S_IWUSR | S_IRUGO, pod_get_gate_decay_time, +- pod_set_gate_decay_time); +-static DEVICE_ATTR(stomp_enable, S_IWUSR | S_IRUGO, pod_get_stomp_enable, +- pod_set_stomp_enable); +-static DEVICE_ATTR(comp_enable, S_IWUSR | S_IRUGO, pod_get_comp_enable, +- pod_set_comp_enable); +-static DEVICE_ATTR(stomp_time, S_IWUSR | S_IRUGO, pod_get_stomp_time, +- pod_set_stomp_time); +-static DEVICE_ATTR(delay_enable, S_IWUSR | S_IRUGO, pod_get_delay_enable, +- pod_set_delay_enable); +-static DEVICE_ATTR(mod_param_1, S_IWUSR | S_IRUGO, pod_get_mod_param_1, +- pod_set_mod_param_1); +-static DEVICE_ATTR(delay_param_1, S_IWUSR | S_IRUGO, pod_get_delay_param_1, +- pod_set_delay_param_1); +-static DEVICE_ATTR(delay_param_1_note_value, S_IWUSR | S_IRUGO, +- pod_get_delay_param_1_note_value, +- pod_set_delay_param_1_note_value); +-static DEVICE_ATTR2(band_2_frequency__bass, band_2_frequency, S_IWUSR | S_IRUGO, +- pod_get_band_2_frequency__bass, +- pod_set_band_2_frequency__bass); +-static DEVICE_ATTR(delay_param_2, S_IWUSR | S_IRUGO, pod_get_delay_param_2, +- pod_set_delay_param_2); +-static DEVICE_ATTR(delay_volume_mix, S_IWUSR | S_IRUGO, +- pod_get_delay_volume_mix, pod_set_delay_volume_mix); +-static DEVICE_ATTR(delay_param_3, S_IWUSR | S_IRUGO, pod_get_delay_param_3, +- pod_set_delay_param_3); +-static DEVICE_ATTR(reverb_enable, S_IWUSR | S_IRUGO, pod_get_reverb_enable, +- pod_set_reverb_enable); +-static DEVICE_ATTR(reverb_type, S_IWUSR | S_IRUGO, pod_get_reverb_type, +- pod_set_reverb_type); +-static DEVICE_ATTR(reverb_decay, S_IWUSR | S_IRUGO, pod_get_reverb_decay, +- pod_set_reverb_decay); +-static DEVICE_ATTR(reverb_tone, S_IWUSR | S_IRUGO, pod_get_reverb_tone, +- pod_set_reverb_tone); +-static DEVICE_ATTR(reverb_pre_delay, S_IWUSR | S_IRUGO, +- pod_get_reverb_pre_delay, pod_set_reverb_pre_delay); +-static DEVICE_ATTR(reverb_pre_post, S_IWUSR | S_IRUGO, pod_get_reverb_pre_post, +- pod_set_reverb_pre_post); +-static DEVICE_ATTR(band_2_frequency, S_IWUSR | S_IRUGO, +- pod_get_band_2_frequency, pod_set_band_2_frequency); +-static DEVICE_ATTR2(band_3_frequency__bass, band_3_frequency, S_IWUSR | S_IRUGO, +- pod_get_band_3_frequency__bass, +- pod_set_band_3_frequency__bass); +-static DEVICE_ATTR(wah_enable, S_IWUSR | S_IRUGO, pod_get_wah_enable, +- pod_set_wah_enable); +-static DEVICE_ATTR(modulation_lo_cut, S_IWUSR | S_IRUGO, +- pod_get_modulation_lo_cut, pod_set_modulation_lo_cut); +-static DEVICE_ATTR(delay_reverb_lo_cut, S_IWUSR | S_IRUGO, +- pod_get_delay_reverb_lo_cut, pod_set_delay_reverb_lo_cut); +-static DEVICE_ATTR(volume_pedal_minimum, S_IWUSR | S_IRUGO, +- pod_get_volume_pedal_minimum, pod_set_volume_pedal_minimum); +-static DEVICE_ATTR(eq_pre_post, S_IWUSR | S_IRUGO, pod_get_eq_pre_post, +- pod_set_eq_pre_post); +-static DEVICE_ATTR(volume_pre_post, S_IWUSR | S_IRUGO, pod_get_volume_pre_post, +- pod_set_volume_pre_post); +-static DEVICE_ATTR(di_model, S_IWUSR | S_IRUGO, pod_get_di_model, +- pod_set_di_model); +-static DEVICE_ATTR(di_delay, S_IWUSR | S_IRUGO, pod_get_di_delay, +- pod_set_di_delay); +-static DEVICE_ATTR(mod_enable, S_IWUSR | S_IRUGO, pod_get_mod_enable, +- pod_set_mod_enable); +-static DEVICE_ATTR(mod_param_1_note_value, S_IWUSR | S_IRUGO, +- pod_get_mod_param_1_note_value, +- pod_set_mod_param_1_note_value); +-static DEVICE_ATTR(mod_param_2, S_IWUSR | S_IRUGO, pod_get_mod_param_2, +- pod_set_mod_param_2); +-static DEVICE_ATTR(mod_param_3, S_IWUSR | S_IRUGO, pod_get_mod_param_3, +- pod_set_mod_param_3); +-static DEVICE_ATTR(mod_param_4, S_IWUSR | S_IRUGO, pod_get_mod_param_4, +- pod_set_mod_param_4); +-static DEVICE_ATTR(mod_param_5, S_IWUSR | S_IRUGO, pod_get_mod_param_5, +- pod_set_mod_param_5); +-static DEVICE_ATTR(mod_volume_mix, S_IWUSR | S_IRUGO, pod_get_mod_volume_mix, +- pod_set_mod_volume_mix); +-static DEVICE_ATTR(mod_pre_post, S_IWUSR | S_IRUGO, pod_get_mod_pre_post, +- pod_set_mod_pre_post); +-static DEVICE_ATTR(modulation_model, S_IWUSR | S_IRUGO, +- pod_get_modulation_model, pod_set_modulation_model); +-static DEVICE_ATTR(band_3_frequency, S_IWUSR | S_IRUGO, +- pod_get_band_3_frequency, pod_set_band_3_frequency); +-static DEVICE_ATTR2(band_4_frequency__bass, band_4_frequency, S_IWUSR | S_IRUGO, +- pod_get_band_4_frequency__bass, +- pod_set_band_4_frequency__bass); +-static DEVICE_ATTR(mod_param_1_double_precision, S_IWUSR | S_IRUGO, +- pod_get_mod_param_1_double_precision, +- pod_set_mod_param_1_double_precision); +-static DEVICE_ATTR(delay_param_1_double_precision, S_IWUSR | S_IRUGO, +- pod_get_delay_param_1_double_precision, +- pod_set_delay_param_1_double_precision); +-static DEVICE_ATTR(eq_enable, S_IWUSR | S_IRUGO, pod_get_eq_enable, +- pod_set_eq_enable); +-static DEVICE_ATTR(tap, S_IWUSR | S_IRUGO, pod_get_tap, pod_set_tap); +-static DEVICE_ATTR(volume_tweak_pedal_assign, S_IWUSR | S_IRUGO, +- pod_get_volume_tweak_pedal_assign, +- pod_set_volume_tweak_pedal_assign); +-static DEVICE_ATTR(band_5_frequency, S_IWUSR | S_IRUGO, +- pod_get_band_5_frequency, pod_set_band_5_frequency); +-static DEVICE_ATTR(tuner, S_IWUSR | S_IRUGO, pod_get_tuner, pod_set_tuner); +-static DEVICE_ATTR(mic_selection, S_IWUSR | S_IRUGO, pod_get_mic_selection, +- pod_set_mic_selection); +-static DEVICE_ATTR(cabinet_model, S_IWUSR | S_IRUGO, pod_get_cabinet_model, +- pod_set_cabinet_model); +-static DEVICE_ATTR(stomp_model, S_IWUSR | S_IRUGO, pod_get_stomp_model, +- pod_set_stomp_model); +-static DEVICE_ATTR(roomlevel, S_IWUSR | S_IRUGO, pod_get_roomlevel, +- pod_set_roomlevel); +-static DEVICE_ATTR(band_4_frequency, S_IWUSR | S_IRUGO, +- pod_get_band_4_frequency, pod_set_band_4_frequency); +-static DEVICE_ATTR(band_6_frequency, S_IWUSR | S_IRUGO, +- pod_get_band_6_frequency, pod_set_band_6_frequency); +-static DEVICE_ATTR(stomp_param_1_note_value, S_IWUSR | S_IRUGO, +- pod_get_stomp_param_1_note_value, +- pod_set_stomp_param_1_note_value); +-static DEVICE_ATTR(stomp_param_2, S_IWUSR | S_IRUGO, pod_get_stomp_param_2, +- pod_set_stomp_param_2); +-static DEVICE_ATTR(stomp_param_3, S_IWUSR | S_IRUGO, pod_get_stomp_param_3, +- pod_set_stomp_param_3); +-static DEVICE_ATTR(stomp_param_4, S_IWUSR | S_IRUGO, pod_get_stomp_param_4, +- pod_set_stomp_param_4); +-static DEVICE_ATTR(stomp_param_5, S_IWUSR | S_IRUGO, pod_get_stomp_param_5, +- pod_set_stomp_param_5); +-static DEVICE_ATTR(stomp_param_6, S_IWUSR | S_IRUGO, pod_get_stomp_param_6, +- pod_set_stomp_param_6); +-static DEVICE_ATTR(amp_switch_select, S_IWUSR | S_IRUGO, +- pod_get_amp_switch_select, pod_set_amp_switch_select); +-static DEVICE_ATTR(delay_param_4, S_IWUSR | S_IRUGO, pod_get_delay_param_4, +- pod_set_delay_param_4); +-static DEVICE_ATTR(delay_param_5, S_IWUSR | S_IRUGO, pod_get_delay_param_5, +- pod_set_delay_param_5); +-static DEVICE_ATTR(delay_pre_post, S_IWUSR | S_IRUGO, pod_get_delay_pre_post, +- pod_set_delay_pre_post); +-static DEVICE_ATTR(delay_model, S_IWUSR | S_IRUGO, pod_get_delay_model, +- pod_set_delay_model); +-static DEVICE_ATTR(delay_verb_model, S_IWUSR | S_IRUGO, +- pod_get_delay_verb_model, pod_set_delay_verb_model); +-static DEVICE_ATTR(tempo_msb, S_IWUSR | S_IRUGO, pod_get_tempo_msb, +- pod_set_tempo_msb); +-static DEVICE_ATTR(tempo_lsb, S_IWUSR | S_IRUGO, pod_get_tempo_lsb, +- pod_set_tempo_lsb); +-static DEVICE_ATTR(wah_model, S_IWUSR | S_IRUGO, pod_get_wah_model, +- pod_set_wah_model); +-static DEVICE_ATTR(bypass_volume, S_IWUSR | S_IRUGO, pod_get_bypass_volume, +- pod_set_bypass_volume); +-static DEVICE_ATTR(fx_loop_on_off, S_IWUSR | S_IRUGO, pod_get_fx_loop_on_off, +- pod_set_fx_loop_on_off); +-static DEVICE_ATTR(tweak_param_select, S_IWUSR | S_IRUGO, +- pod_get_tweak_param_select, pod_set_tweak_param_select); +-static DEVICE_ATTR(amp1_engage, S_IWUSR | S_IRUGO, pod_get_amp1_engage, +- pod_set_amp1_engage); +-static DEVICE_ATTR(band_1_gain, S_IWUSR | S_IRUGO, pod_get_band_1_gain, +- pod_set_band_1_gain); +-static DEVICE_ATTR2(band_2_gain__bass, band_2_gain, S_IWUSR | S_IRUGO, +- pod_get_band_2_gain__bass, pod_set_band_2_gain__bass); +-static DEVICE_ATTR(band_2_gain, S_IWUSR | S_IRUGO, pod_get_band_2_gain, +- pod_set_band_2_gain); +-static DEVICE_ATTR2(band_3_gain__bass, band_3_gain, S_IWUSR | S_IRUGO, +- pod_get_band_3_gain__bass, pod_set_band_3_gain__bass); +-static DEVICE_ATTR(band_3_gain, S_IWUSR | S_IRUGO, pod_get_band_3_gain, +- pod_set_band_3_gain); +-static DEVICE_ATTR2(band_4_gain__bass, band_4_gain, S_IWUSR | S_IRUGO, +- pod_get_band_4_gain__bass, pod_set_band_4_gain__bass); +-static DEVICE_ATTR2(band_5_gain__bass, band_5_gain, S_IWUSR | S_IRUGO, +- pod_get_band_5_gain__bass, pod_set_band_5_gain__bass); +-static DEVICE_ATTR(band_4_gain, S_IWUSR | S_IRUGO, pod_get_band_4_gain, +- pod_set_band_4_gain); +-static DEVICE_ATTR2(band_6_gain__bass, band_6_gain, S_IWUSR | S_IRUGO, +- pod_get_band_6_gain__bass, pod_set_band_6_gain__bass); +-static DEVICE_ATTR(body, S_IRUGO, variax_get_body, line6_nop_write); +-static DEVICE_ATTR(pickup1_enable, S_IRUGO, variax_get_pickup1_enable, +- line6_nop_write); +-static DEVICE_ATTR(pickup1_type, S_IRUGO, variax_get_pickup1_type, +- line6_nop_write); +-static DEVICE_ATTR(pickup1_position, S_IRUGO, variax_get_pickup1_position, +- line6_nop_write); +-static DEVICE_ATTR(pickup1_angle, S_IRUGO, variax_get_pickup1_angle, +- line6_nop_write); +-static DEVICE_ATTR(pickup1_level, S_IRUGO, variax_get_pickup1_level, +- line6_nop_write); +-static DEVICE_ATTR(pickup2_enable, S_IRUGO, variax_get_pickup2_enable, +- line6_nop_write); +-static DEVICE_ATTR(pickup2_type, S_IRUGO, variax_get_pickup2_type, +- line6_nop_write); +-static DEVICE_ATTR(pickup2_position, S_IRUGO, variax_get_pickup2_position, +- line6_nop_write); +-static DEVICE_ATTR(pickup2_angle, S_IRUGO, variax_get_pickup2_angle, +- line6_nop_write); +-static DEVICE_ATTR(pickup2_level, S_IRUGO, variax_get_pickup2_level, +- line6_nop_write); +-static DEVICE_ATTR(pickup_phase, S_IRUGO, variax_get_pickup_phase, +- line6_nop_write); +-static DEVICE_ATTR(capacitance, S_IRUGO, variax_get_capacitance, +- line6_nop_write); +-static DEVICE_ATTR(tone_resistance, S_IRUGO, variax_get_tone_resistance, +- line6_nop_write); +-static DEVICE_ATTR(volume_resistance, S_IRUGO, variax_get_volume_resistance, +- line6_nop_write); +-static DEVICE_ATTR(taper, S_IRUGO, variax_get_taper, line6_nop_write); +-static DEVICE_ATTR(tone_dump, S_IRUGO, variax_get_tone_dump, line6_nop_write); +-static DEVICE_ATTR(save_tone, S_IRUGO, variax_get_save_tone, line6_nop_write); +-static DEVICE_ATTR(volume_dump, S_IRUGO, variax_get_volume_dump, +- line6_nop_write); +-static DEVICE_ATTR(tuning_enable, S_IRUGO, variax_get_tuning_enable, +- line6_nop_write); +-static DEVICE_ATTR(tuning6, S_IRUGO, variax_get_tuning6, line6_nop_write); +-static DEVICE_ATTR(tuning5, S_IRUGO, variax_get_tuning5, line6_nop_write); +-static DEVICE_ATTR(tuning4, S_IRUGO, variax_get_tuning4, line6_nop_write); +-static DEVICE_ATTR(tuning3, S_IRUGO, variax_get_tuning3, line6_nop_write); +-static DEVICE_ATTR(tuning2, S_IRUGO, variax_get_tuning2, line6_nop_write); +-static DEVICE_ATTR(tuning1, S_IRUGO, variax_get_tuning1, line6_nop_write); +-static DEVICE_ATTR(detune6, S_IRUGO, variax_get_detune6, line6_nop_write); +-static DEVICE_ATTR(detune5, S_IRUGO, variax_get_detune5, line6_nop_write); +-static DEVICE_ATTR(detune4, S_IRUGO, variax_get_detune4, line6_nop_write); +-static DEVICE_ATTR(detune3, S_IRUGO, variax_get_detune3, line6_nop_write); +-static DEVICE_ATTR(detune2, S_IRUGO, variax_get_detune2, line6_nop_write); +-static DEVICE_ATTR(detune1, S_IRUGO, variax_get_detune1, line6_nop_write); +-static DEVICE_ATTR(mix6, S_IRUGO, variax_get_mix6, line6_nop_write); +-static DEVICE_ATTR(mix5, S_IRUGO, variax_get_mix5, line6_nop_write); +-static DEVICE_ATTR(mix4, S_IRUGO, variax_get_mix4, line6_nop_write); +-static DEVICE_ATTR(mix3, S_IRUGO, variax_get_mix3, line6_nop_write); +-static DEVICE_ATTR(mix2, S_IRUGO, variax_get_mix2, line6_nop_write); +-static DEVICE_ATTR(mix1, S_IRUGO, variax_get_mix1, line6_nop_write); +-static DEVICE_ATTR(pickup_wiring, S_IRUGO, variax_get_pickup_wiring, +- line6_nop_write); +- +-int line6_pod_create_files(int firmware, int type, struct device *dev) +-{ +- int err; +- CHECK_RETURN(device_create_file(dev, &dev_attr_tweak)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_wah_position)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_compression_gain)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_vol_pedal_position)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_compression_threshold)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_pan)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_amp_model_setup)); +- if (firmware >= 200) +- CHECK_RETURN(device_create_file(dev, &dev_attr_amp_model)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_drive)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_bass)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- CHECK_RETURN(device_create_file(dev, &dev_attr_mid)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- CHECK_RETURN(device_create_file(dev, &dev_attr_lowmid)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- CHECK_RETURN(device_create_file(dev, &dev_attr_treble)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- CHECK_RETURN(device_create_file(dev, &dev_attr_highmid)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_chan_vol)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_mix)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_effect_setup)); +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_band_1_frequency)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- CHECK_RETURN(device_create_file(dev, &dev_attr_presence)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- CHECK_RETURN(device_create_file(dev, &dev_attr_treble__bass)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_noise_gate_enable)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_gate_threshold)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_gate_decay_time)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_enable)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_comp_enable)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_time)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_delay_enable)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_1)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_1)); +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_delay_param_1_note_value)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_band_2_frequency__bass)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_2)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_delay_volume_mix)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_3)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_enable)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_type)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_decay)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_tone)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_reverb_pre_delay)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_reverb_pre_post)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_band_2_frequency)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_band_3_frequency__bass)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_wah_enable)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_modulation_lo_cut)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_delay_reverb_lo_cut)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_volume_pedal_minimum)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_eq_pre_post)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_volume_pre_post)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- CHECK_RETURN(device_create_file(dev, &dev_attr_di_model)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- CHECK_RETURN(device_create_file(dev, &dev_attr_di_delay)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_mod_enable)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_1_note_value)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_2)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_3)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_4)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_5)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_mod_volume_mix)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_mod_pre_post)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_modulation_model)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_band_3_frequency)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_band_4_frequency__bass)); +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_mod_param_1_double_precision)); +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_delay_param_1_double_precision)); +- if (firmware >= 200) +- CHECK_RETURN(device_create_file(dev, &dev_attr_eq_enable)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_tap)); +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_volume_tweak_pedal_assign)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_band_5_frequency)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_tuner)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_mic_selection)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_cabinet_model)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_model)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_roomlevel)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_band_4_frequency)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_band_6_frequency)); +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_stomp_param_1_note_value)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_2)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_3)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_4)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_5)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_6)); +- if ((type & (LINE6_BITS_LIVE)) != 0) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_amp_switch_select)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_4)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_5)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_delay_pre_post)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- CHECK_RETURN(device_create_file(dev, &dev_attr_delay_model)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_delay_verb_model)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_tempo_msb)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_tempo_lsb)); +- if (firmware >= 300) +- CHECK_RETURN(device_create_file(dev, &dev_attr_wah_model)); +- if (firmware >= 214) +- CHECK_RETURN(device_create_file(dev, &dev_attr_bypass_volume)); +- if ((type & (LINE6_BITS_PRO)) != 0) +- CHECK_RETURN(device_create_file(dev, &dev_attr_fx_loop_on_off)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_tweak_param_select)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_amp1_engage)); +- if (firmware >= 200) +- CHECK_RETURN(device_create_file(dev, &dev_attr_band_1_gain)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_band_2_gain__bass)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_band_2_gain)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_band_3_gain__bass)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_band_3_gain)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_band_4_gain__bass)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_band_5_gain__bass)); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_band_4_gain)); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- CHECK_RETURN(device_create_file +- (dev, &dev_attr_band_6_gain__bass)); +- return 0; +-} +- +-void line6_pod_remove_files(int firmware, int type, struct device *dev) +-{ +- device_remove_file(dev, &dev_attr_tweak); +- device_remove_file(dev, &dev_attr_wah_position); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_compression_gain); +- device_remove_file(dev, &dev_attr_vol_pedal_position); +- device_remove_file(dev, &dev_attr_compression_threshold); +- device_remove_file(dev, &dev_attr_pan); +- device_remove_file(dev, &dev_attr_amp_model_setup); +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_amp_model); +- device_remove_file(dev, &dev_attr_drive); +- device_remove_file(dev, &dev_attr_bass); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_mid); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_lowmid); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_treble); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_highmid); +- device_remove_file(dev, &dev_attr_chan_vol); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_reverb_mix); +- device_remove_file(dev, &dev_attr_effect_setup); +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_band_1_frequency); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_presence); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_treble__bass); +- device_remove_file(dev, &dev_attr_noise_gate_enable); +- device_remove_file(dev, &dev_attr_gate_threshold); +- device_remove_file(dev, &dev_attr_gate_decay_time); +- device_remove_file(dev, &dev_attr_stomp_enable); +- device_remove_file(dev, &dev_attr_comp_enable); +- device_remove_file(dev, &dev_attr_stomp_time); +- device_remove_file(dev, &dev_attr_delay_enable); +- device_remove_file(dev, &dev_attr_mod_param_1); +- device_remove_file(dev, &dev_attr_delay_param_1); +- device_remove_file(dev, &dev_attr_delay_param_1_note_value); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- device_remove_file(dev, +- &dev_attr_band_2_frequency__bass); +- device_remove_file(dev, &dev_attr_delay_param_2); +- device_remove_file(dev, &dev_attr_delay_volume_mix); +- device_remove_file(dev, &dev_attr_delay_param_3); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_reverb_enable); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_reverb_type); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_reverb_decay); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_reverb_tone); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_reverb_pre_delay); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_reverb_pre_post); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_band_2_frequency); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- device_remove_file(dev, +- &dev_attr_band_3_frequency__bass); +- device_remove_file(dev, &dev_attr_wah_enable); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_modulation_lo_cut); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_delay_reverb_lo_cut); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_volume_pedal_minimum); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_eq_pre_post); +- device_remove_file(dev, &dev_attr_volume_pre_post); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_di_model); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_di_delay); +- device_remove_file(dev, &dev_attr_mod_enable); +- device_remove_file(dev, &dev_attr_mod_param_1_note_value); +- device_remove_file(dev, &dev_attr_mod_param_2); +- device_remove_file(dev, &dev_attr_mod_param_3); +- device_remove_file(dev, &dev_attr_mod_param_4); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_mod_param_5); +- device_remove_file(dev, &dev_attr_mod_volume_mix); +- device_remove_file(dev, &dev_attr_mod_pre_post); +- device_remove_file(dev, &dev_attr_modulation_model); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_band_3_frequency); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- device_remove_file(dev, +- &dev_attr_band_4_frequency__bass); +- device_remove_file(dev, &dev_attr_mod_param_1_double_precision); +- device_remove_file(dev, &dev_attr_delay_param_1_double_precision); +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_eq_enable); +- device_remove_file(dev, &dev_attr_tap); +- device_remove_file(dev, &dev_attr_volume_tweak_pedal_assign); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_band_5_frequency); +- device_remove_file(dev, &dev_attr_tuner); +- device_remove_file(dev, &dev_attr_mic_selection); +- device_remove_file(dev, &dev_attr_cabinet_model); +- device_remove_file(dev, &dev_attr_stomp_model); +- device_remove_file(dev, &dev_attr_roomlevel); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_band_4_frequency); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_band_6_frequency); +- device_remove_file(dev, &dev_attr_stomp_param_1_note_value); +- device_remove_file(dev, &dev_attr_stomp_param_2); +- device_remove_file(dev, &dev_attr_stomp_param_3); +- device_remove_file(dev, &dev_attr_stomp_param_4); +- device_remove_file(dev, &dev_attr_stomp_param_5); +- device_remove_file(dev, &dev_attr_stomp_param_6); +- if ((type & (LINE6_BITS_LIVE)) != 0) +- device_remove_file(dev, &dev_attr_amp_switch_select); +- device_remove_file(dev, &dev_attr_delay_param_4); +- device_remove_file(dev, &dev_attr_delay_param_5); +- device_remove_file(dev, &dev_attr_delay_pre_post); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_delay_model); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- device_remove_file(dev, &dev_attr_delay_verb_model); +- device_remove_file(dev, &dev_attr_tempo_msb); +- device_remove_file(dev, &dev_attr_tempo_lsb); +- if (firmware >= 300) +- device_remove_file(dev, &dev_attr_wah_model); +- if (firmware >= 214) +- device_remove_file(dev, &dev_attr_bypass_volume); +- if ((type & (LINE6_BITS_PRO)) != 0) +- device_remove_file(dev, &dev_attr_fx_loop_on_off); +- device_remove_file(dev, &dev_attr_tweak_param_select); +- device_remove_file(dev, &dev_attr_amp1_engage); +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_band_1_gain); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_band_2_gain__bass); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_band_2_gain); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_band_3_gain__bass); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_band_3_gain); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_band_4_gain__bass); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_band_5_gain__bass); +- if ((type & (LINE6_BITS_PODXTALL)) != 0) +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_band_4_gain); +- if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) +- if (firmware >= 200) +- device_remove_file(dev, &dev_attr_band_6_gain__bass); +-} +- +-int line6_variax_create_files(int firmware, int type, struct device *dev) +-{ +- int err; +- CHECK_RETURN(device_create_file(dev, &dev_attr_body)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_enable)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_type)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_position)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_angle)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_level)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_enable)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_type)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_position)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_angle)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_level)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_pickup_phase)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_capacitance)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_tone_resistance)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_volume_resistance)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_taper)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_tone_dump)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_save_tone)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_volume_dump)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_tuning_enable)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_tuning6)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_tuning5)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_tuning4)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_tuning3)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_tuning2)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_tuning1)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_detune6)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_detune5)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_detune4)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_detune3)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_detune2)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_detune1)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_mix6)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_mix5)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_mix4)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_mix3)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_mix2)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_mix1)); +- CHECK_RETURN(device_create_file(dev, &dev_attr_pickup_wiring)); +- return 0; +-} +- +-void line6_variax_remove_files(int firmware, int type, struct device *dev) +-{ +- device_remove_file(dev, &dev_attr_body); +- device_remove_file(dev, &dev_attr_pickup1_enable); +- device_remove_file(dev, &dev_attr_pickup1_type); +- device_remove_file(dev, &dev_attr_pickup1_position); +- device_remove_file(dev, &dev_attr_pickup1_angle); +- device_remove_file(dev, &dev_attr_pickup1_level); +- device_remove_file(dev, &dev_attr_pickup2_enable); +- device_remove_file(dev, &dev_attr_pickup2_type); +- device_remove_file(dev, &dev_attr_pickup2_position); +- device_remove_file(dev, &dev_attr_pickup2_angle); +- device_remove_file(dev, &dev_attr_pickup2_level); +- device_remove_file(dev, &dev_attr_pickup_phase); +- device_remove_file(dev, &dev_attr_capacitance); +- device_remove_file(dev, &dev_attr_tone_resistance); +- device_remove_file(dev, &dev_attr_volume_resistance); +- device_remove_file(dev, &dev_attr_taper); +- device_remove_file(dev, &dev_attr_tone_dump); +- device_remove_file(dev, &dev_attr_save_tone); +- device_remove_file(dev, &dev_attr_volume_dump); +- device_remove_file(dev, &dev_attr_tuning_enable); +- device_remove_file(dev, &dev_attr_tuning6); +- device_remove_file(dev, &dev_attr_tuning5); +- device_remove_file(dev, &dev_attr_tuning4); +- device_remove_file(dev, &dev_attr_tuning3); +- device_remove_file(dev, &dev_attr_tuning2); +- device_remove_file(dev, &dev_attr_tuning1); +- device_remove_file(dev, &dev_attr_detune6); +- device_remove_file(dev, &dev_attr_detune5); +- device_remove_file(dev, &dev_attr_detune4); +- device_remove_file(dev, &dev_attr_detune3); +- device_remove_file(dev, &dev_attr_detune2); +- device_remove_file(dev, &dev_attr_detune1); +- device_remove_file(dev, &dev_attr_mix6); +- device_remove_file(dev, &dev_attr_mix5); +- device_remove_file(dev, &dev_attr_mix4); +- device_remove_file(dev, &dev_attr_mix3); +- device_remove_file(dev, &dev_attr_mix2); +- device_remove_file(dev, &dev_attr_mix1); +- device_remove_file(dev, &dev_attr_pickup_wiring); +-} +diff --git a/drivers/staging/line6/control.h b/drivers/staging/line6/control.h +deleted file mode 100644 +index e4c5d2c..0000000 +--- a/drivers/staging/line6/control.h ++++ /dev/null +@@ -1,195 +0,0 @@ +-/* +- * 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. +- * +- */ +- +-#ifndef LINE6_CONTROL_H +-#define LINE6_CONTROL_H +- +-/** +- List of PODxt Pro controls. +- See Appendix C of the "PODxt (Pro) Pilot's Handbook" by Line6. +- Comments after the number refer to the PODxt Pro firmware version required +- for this feature. +- +- Please *don't* reformat this file since "control.c" is created automatically +- from "control.h", and this process depends on the exact formatting of the +- code and the comments below! +-*/ +- +-/* *INDENT-OFF* */ +- +-enum { +- POD_tweak = 1, +- POD_wah_position = 4, +- POD_compression_gain = 5, /* device: LINE6_BITS_PODXTALL */ +- POD_vol_pedal_position = 7, +- POD_compression_threshold = 9, +- POD_pan = 10, +- POD_amp_model_setup = 11, +- POD_amp_model = 12, /* firmware: 2.0 */ +- POD_drive = 13, +- POD_bass = 14, +- POD_mid = 15, /* device: LINE6_BITS_PODXTALL */ +- POD_lowmid = 15, /* device: LINE6_BITS_BASSPODXTALL */ +- POD_treble = 16, /* device: LINE6_BITS_PODXTALL */ +- POD_highmid = 16, /* device: LINE6_BITS_BASSPODXTALL */ +- POD_chan_vol = 17, +- POD_reverb_mix = 18, /* device: LINE6_BITS_PODXTALL */ +- POD_effect_setup = 19, +- POD_band_1_frequency = 20, /* firmware: 2.0 */ +- POD_presence = 21, /* device: LINE6_BITS_PODXTALL */ +- POD_treble__bass = 21, /* device: LINE6_BITS_BASSPODXTALL */ +- POD_noise_gate_enable = 22, +- POD_gate_threshold = 23, +- POD_gate_decay_time = 24, +- POD_stomp_enable = 25, +- POD_comp_enable = 26, +- POD_stomp_time = 27, +- POD_delay_enable = 28, +- POD_mod_param_1 = 29, +- POD_delay_param_1 = 30, +- POD_delay_param_1_note_value = 31, +- POD_band_2_frequency__bass = 32, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ +- POD_delay_param_2 = 33, +- POD_delay_volume_mix = 34, +- POD_delay_param_3 = 35, +- POD_reverb_enable = 36, /* device: LINE6_BITS_PODXTALL */ +- POD_reverb_type = 37, /* device: LINE6_BITS_PODXTALL */ +- POD_reverb_decay = 38, /* device: LINE6_BITS_PODXTALL */ +- POD_reverb_tone = 39, /* device: LINE6_BITS_PODXTALL */ +- POD_reverb_pre_delay = 40, /* device: LINE6_BITS_PODXTALL */ +- POD_reverb_pre_post = 41, /* device: LINE6_BITS_PODXTALL */ +- POD_band_2_frequency = 42, /* device: LINE6_BITS_PODXTALL */ /* firmware: 2.0 */ +- POD_band_3_frequency__bass = 42, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ +- POD_wah_enable = 43, +- POD_modulation_lo_cut = 44, /* device: LINE6_BITS_BASSPODXTALL */ +- POD_delay_reverb_lo_cut = 45, /* device: LINE6_BITS_BASSPODXTALL */ +- POD_volume_pedal_minimum = 46, /* device: LINE6_BITS_PODXTALL */ /* firmware: 2.0 */ +- POD_eq_pre_post = 46, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ +- POD_volume_pre_post = 47, +- POD_di_model = 48, /* device: LINE6_BITS_BASSPODXTALL */ +- POD_di_delay = 49, /* device: LINE6_BITS_BASSPODXTALL */ +- POD_mod_enable = 50, +- POD_mod_param_1_note_value = 51, +- POD_mod_param_2 = 52, +- POD_mod_param_3 = 53, +- POD_mod_param_4 = 54, +- POD_mod_param_5 = 55, /* device: LINE6_BITS_BASSPODXTALL */ +- POD_mod_volume_mix = 56, +- POD_mod_pre_post = 57, +- POD_modulation_model = 58, +- POD_band_3_frequency = 60, /* device: LINE6_BITS_PODXTALL */ /* firmware: 2.0 */ +- POD_band_4_frequency__bass = 60, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ +- POD_mod_param_1_double_precision = 61, +- POD_delay_param_1_double_precision = 62, +- POD_eq_enable = 63, /* firmware: 2.0 */ +- POD_tap = 64, +- POD_volume_tweak_pedal_assign = 65, +- POD_band_5_frequency = 68, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ +- POD_tuner = 69, +- POD_mic_selection = 70, +- POD_cabinet_model = 71, +- POD_stomp_model = 75, +- POD_roomlevel = 76, +- POD_band_4_frequency = 77, /* device: LINE6_BITS_PODXTALL */ /* firmware: 2.0 */ +- POD_band_6_frequency = 77, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ +- POD_stomp_param_1_note_value = 78, +- POD_stomp_param_2 = 79, +- POD_stomp_param_3 = 80, +- POD_stomp_param_4 = 81, +- POD_stomp_param_5 = 82, +- POD_stomp_param_6 = 83, +- POD_amp_switch_select = 84, /* device: LINE6_BITS_LIVE */ +- POD_delay_param_4 = 85, +- POD_delay_param_5 = 86, +- POD_delay_pre_post = 87, +- POD_delay_model = 88, /* device: LINE6_BITS_PODXTALL */ +- POD_delay_verb_model = 88, /* device: LINE6_BITS_BASSPODXTALL */ +- POD_tempo_msb = 89, +- POD_tempo_lsb = 90, +- POD_wah_model = 91, /* firmware: 3.0 */ +- POD_bypass_volume = 105, /* firmware: 2.14 */ +- POD_fx_loop_on_off = 107, /* device: LINE6_BITS_PRO */ +- POD_tweak_param_select = 108, +- POD_amp1_engage = 111, +- POD_band_1_gain = 114, /* firmware: 2.0 */ +- POD_band_2_gain__bass = 115, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ +- POD_band_2_gain = 116, /* device: LINE6_BITS_PODXTALL */ /* firmware: 2.0 */ +- POD_band_3_gain__bass = 116, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ +- POD_band_3_gain = 117, /* device: LINE6_BITS_PODXTALL */ /* firmware: 2.0 */ +- POD_band_4_gain__bass = 117, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ +- POD_band_5_gain__bass = 118, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ +- POD_band_4_gain = 119, /* device: LINE6_BITS_PODXTALL */ /* firmware: 2.0 */ +- POD_band_6_gain__bass = 119 /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ +-}; +- +-/** +- List of Variax workbench controls (dump). +-*/ +-enum { +- VARIAX_body = 3, +- VARIAX_pickup1_enable = 4, /* 0: enabled, 1: disabled */ +- VARIAX_pickup1_type = 8, +- VARIAX_pickup1_position = 9, /* type: 24 bit float */ +- VARIAX_pickup1_angle = 12, /* type: 24 bit float */ +- VARIAX_pickup1_level = 15, /* type: 24 bit float */ +- VARIAX_pickup2_enable = 18, /* 0: enabled, 1: disabled */ +- VARIAX_pickup2_type = 22, +- VARIAX_pickup2_position = 23, /* type: 24 bit float */ +- VARIAX_pickup2_angle = 26, /* type: 24 bit float */ +- VARIAX_pickup2_level = 29, /* type: 24 bit float */ +- VARIAX_pickup_phase = 32, /* 0: in phase, 1: out of phase */ +- VARIAX_capacitance = 33, /* type: 24 bit float */ +- VARIAX_tone_resistance = 36, /* type: 24 bit float */ +- VARIAX_volume_resistance = 39, /* type: 24 bit float */ +- VARIAX_taper = 42, /* 0: Linear, 1: Audio */ +- VARIAX_tone_dump = 43, /* type: 24 bit float */ +- VARIAX_save_tone = 46, +- VARIAX_volume_dump = 47, /* type: 24 bit float */ +- VARIAX_tuning_enable = 50, +- VARIAX_tuning6 = 51, +- VARIAX_tuning5 = 52, +- VARIAX_tuning4 = 53, +- VARIAX_tuning3 = 54, +- VARIAX_tuning2 = 55, +- VARIAX_tuning1 = 56, +- VARIAX_detune6 = 57, /* type: 24 bit float */ +- VARIAX_detune5 = 60, /* type: 24 bit float */ +- VARIAX_detune4 = 63, /* type: 24 bit float */ +- VARIAX_detune3 = 66, /* type: 24 bit float */ +- VARIAX_detune2 = 69, /* type: 24 bit float */ +- VARIAX_detune1 = 72, /* type: 24 bit float */ +- VARIAX_mix6 = 75, /* type: 24 bit float */ +- VARIAX_mix5 = 78, /* type: 24 bit float */ +- VARIAX_mix4 = 81, /* type: 24 bit float */ +- VARIAX_mix3 = 84, /* type: 24 bit float */ +- VARIAX_mix2 = 87, /* type: 24 bit float */ +- VARIAX_mix1 = 90, /* type: 24 bit float */ +- VARIAX_pickup_wiring = 96 /* 0: parallel, 1: series */ +-}; +- +-/** +- List of Variax workbench controls (MIDI). +-*/ +-enum { +- VARIAXMIDI_volume = 7, +- VARIAXMIDI_tone = 79, +-}; +- +-/* *INDENT-ON* */ +- +-extern int line6_pod_create_files(int firmware, int type, struct device *dev); +-extern void line6_pod_remove_files(int firmware, int type, struct device *dev); +-extern int line6_variax_create_files(int firmware, int type, +- struct device *dev); +-extern void line6_variax_remove_files(int firmware, int type, +- struct device *dev); +- +-#endif +diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c +index 6f07a06c..1e4ce500 100644 +--- a/drivers/staging/line6/driver.c ++++ b/drivers/staging/line6/driver.c +@@ -16,7 +16,6 @@ + + #include "audio.h" + #include "capture.h" +-#include "control.h" + #include "driver.h" + #include "midi.h" + #include "playback.h" +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index aa3a547..278976d 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -15,7 +15,6 @@ + + #include "audio.h" + #include "capture.h" +-#include "control.h" + #include "driver.h" + #include "playback.h" + #include "pod.h" +@@ -404,10 +403,6 @@ static void pod_startup5(struct work_struct *work) + + /* ALSA audio interface: */ + line6_register_audio(line6); +- +- /* device files: */ +- line6_pod_create_files(pod->firmware_version, +- line6->properties->device_bit, line6->ifcdev); + } + + /* POD special files: */ +@@ -594,10 +589,6 @@ void line6_pod_disconnect(struct usb_interface *interface) + + if (dev != NULL) { + /* remove sysfs entries: */ +- line6_pod_remove_files(pod->firmware_version, +- pod->line6. +- properties->device_bit, dev); +- + device_remove_file(dev, &dev_attr_device_id); + device_remove_file(dev, &dev_attr_firmware_version); + device_remove_file(dev, &dev_attr_serial_number); +diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c +index ff55ad37..0adba32 100644 +--- a/drivers/staging/line6/variax.c ++++ b/drivers/staging/line6/variax.c +@@ -12,7 +12,6 @@ + #include + + #include "audio.h" +-#include "control.h" + #include "driver.h" + #include "variax.h" + +@@ -174,15 +173,11 @@ static void variax_startup7(struct work_struct *work) + { + struct usb_line6_variax *variax = + container_of(work, struct usb_line6_variax, startup_work); +- struct usb_line6 *line6 = &variax->line6; + + CHECK_STARTUP_PROGRESS(variax->startup_progress, VARIAX_STARTUP_SETUP); + + /* ALSA audio interface: */ + line6_register_audio(&variax->line6); +- +- /* device files: */ +- line6_variax_create_files(0, 0, line6->ifcdev); + } + + /* +@@ -370,16 +365,8 @@ int line6_variax_init(struct usb_interface *interface, + */ + void line6_variax_disconnect(struct usb_interface *interface) + { +- struct device *dev; +- + if (interface == NULL) + return; +- dev = &interface->dev; +- +- if (dev != NULL) { +- /* remove sysfs entries: */ +- line6_variax_remove_files(0, 0, dev); +- } + + variax_destruct(interface); + } diff --git a/debian/patches/features/all/line6/0101-staging-line6-drop-pod-prog_data-buffers.patch b/debian/patches/features/all/line6/0101-staging-line6-drop-pod-prog_data-buffers.patch new file mode 100644 index 000000000..d413fbbfa --- /dev/null +++ b/debian/patches/features/all/line6/0101-staging-line6-drop-pod-prog_data-buffers.patch @@ -0,0 +1,139 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:20 +0100 +Subject: [101/106] staging: line6: drop pod prog_data buffers + +commit 79038f61731bf0871d673c03fdc8a641b999f57a upstream. + +The driver no longer keeps state of MIDI-accessible device parameters. +Drop the buffers but be careful to keep the device startup procedure +working even though we no longer store the contents of the dump request. +The startup procedure will be simplified in a later patch. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 46 +++---------------------------------------- + drivers/staging/line6/pod.h | 25 ----------------------- + 2 files changed, 3 insertions(+), 68 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index 278976d..e892b4a 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -132,14 +132,6 @@ static char *pod_alloc_sysex_buffer(struct usb_line6_pod *pod, int code, + } + + /* +- Store parameter value in driver memory. +-*/ +-static void pod_store_parameter(struct usb_line6_pod *pod, int param, int value) +-{ +- pod->prog_data.control[param] = value; +-} +- +-/* + Handle SAVE button. + */ + static void pod_save_button_pressed(struct usb_line6_pod *pod, int type, +@@ -169,9 +161,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + /* process all remaining messages */ + switch (buf[0]) { + case LINE6_PARAM_CHANGE | LINE6_CHANNEL_DEVICE: +- pod_store_parameter(pod, buf[1], buf[2]); +- /* intentionally no break here! */ +- + case LINE6_PARAM_CHANGE | LINE6_CHANNEL_HOST: + break; + +@@ -187,36 +176,8 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + if (memcmp(buf + 1, line6_midi_id, sizeof(line6_midi_id)) == 0) { + switch (buf[5]) { + case POD_SYSEX_DUMP: +- if (pod->line6.message_length == +- sizeof(pod->prog_data) + 7) { +- switch (pod->dumpreq.in_progress) { +- case LINE6_DUMP_CURRENT: +- memcpy(&pod->prog_data, buf + 7, +- sizeof(pod->prog_data)); +- break; +- +- case POD_DUMP_MEMORY: +- memcpy(&pod->prog_data_buf, +- buf + 7, +- sizeof +- (pod->prog_data_buf)); +- break; +- +- default: +- dev_dbg(pod->line6.ifcdev, +- "unknown dump code %02X\n", +- pod->dumpreq.in_progress); +- } +- +- line6_dump_finished(&pod->dumpreq); +- pod_startup3(pod); +- } else +- dev_dbg(pod->line6.ifcdev, +- "wrong size of channel dump message (%d instead of %d)\n", +- pod->line6.message_length, +- (int)sizeof(pod->prog_data) + +- 7); +- ++ line6_dump_finished(&pod->dumpreq); ++ pod_startup3(pod); + break; + + case POD_SYSEX_SYSTEM:{ +@@ -279,8 +240,7 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param, + u8 value) + { +- if (line6_transmit_parameter(&pod->line6, param, value) == 0) +- pod_store_parameter(pod, param, value); ++ line6_transmit_parameter(&pod->line6, param, value); + } + + /* +diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h +index 8543bae..52534ca 100644 +--- a/drivers/staging/line6/pod.h ++++ b/drivers/staging/line6/pod.h +@@ -52,21 +52,6 @@ enum { + POD_STARTUP_LAST = POD_STARTUP_SETUP - 1 + }; + +-/** +- Binary PODxt Pro program dump +-*/ +-struct pod_program { +- /** +- Header information (including program name). +- */ +- unsigned char header[0x20]; +- +- /** +- Program parameters. +- */ +- unsigned char control[POD_CONTROL_SIZE]; +-}; +- + struct usb_line6_pod { + /** + Generic Line6 USB data. +@@ -79,16 +64,6 @@ struct usb_line6_pod { + struct line6_dump_request dumpreq; + + /** +- Current program settings. +- */ +- struct pod_program prog_data; +- +- /** +- Buffer for data retrieved from or to be stored on PODxt Pro. +- */ +- struct pod_program prog_data_buf; +- +- /** + Instrument monitor level. + */ + int monitor_level; diff --git a/debian/patches/features/all/line6/0102-staging-line6-drop-unused-pod-atomic_flags-field.patch b/debian/patches/features/all/line6/0102-staging-line6-drop-unused-pod-atomic_flags-field.patch new file mode 100644 index 000000000..b302d8d58 --- /dev/null +++ b/debian/patches/features/all/line6/0102-staging-line6-drop-unused-pod-atomic_flags-field.patch @@ -0,0 +1,65 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:21 +0100 +Subject: [102/106] staging: line6: drop unused pod atomic_flags field + +commit 3fb7991319d975a706e452bfa5c96c0af37abeaf upstream. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 11 ----------- + drivers/staging/line6/pod.h | 5 ----- + 2 files changed, 16 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index e892b4a..f8257be 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -132,15 +132,6 @@ static char *pod_alloc_sysex_buffer(struct usb_line6_pod *pod, int code, + } + + /* +- Handle SAVE button. +-*/ +-static void pod_save_button_pressed(struct usb_line6_pod *pod, int type, +- int index) +-{ +- set_bit(POD_SAVE_PRESSED, &pod->atomic_flags); +-} +- +-/* + Process a completely received message. + */ + void line6_pod_process_message(struct usb_line6_pod *pod) +@@ -166,7 +157,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + + case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_DEVICE: + case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST: +- set_bit(POD_CHANNEL_DIRTY, &pod->atomic_flags); + line6_dump_request_async(&pod->dumpreq, &pod->line6, 0, + LINE6_DUMP_CURRENT); + break; +@@ -196,7 +186,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + break; + + case POD_SYSEX_SAVE: +- pod_save_button_pressed(pod, buf[6], buf[7]); + break; + + case POD_SYSEX_STORE: +diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h +index 52534ca..843eb4e 100644 +--- a/drivers/staging/line6/pod.h ++++ b/drivers/staging/line6/pod.h +@@ -84,11 +84,6 @@ struct usb_line6_pod { + int startup_progress; + + /** +- Some atomic flags. +- */ +- unsigned long atomic_flags; +- +- /** + Serial number of device. + */ + int serial_number; diff --git a/debian/patches/features/all/line6/0103-staging-line6-drop-variax-model_data-field.patch b/debian/patches/features/all/line6/0103-staging-line6-drop-variax-model_data-field.patch new file mode 100644 index 000000000..b84014f41 --- /dev/null +++ b/debian/patches/features/all/line6/0103-staging-line6-drop-variax-model_data-field.patch @@ -0,0 +1,101 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:22 +0100 +Subject: [103/106] staging: line6: drop variax model_data field + +commit 81804c54db877b78b12bd1cf4f4e0f7bf6c86d72 upstream. + +The sysfs attrs to access the model dump have been removed so it's safe +to drop the model_data field. The next step will be to simplify the +startup process since we no longer need to fetch this data via dump +requests, but that will be done in a later patch. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/variax.c | 27 --------------------------- + drivers/staging/line6/variax.h | 20 -------------------- + 2 files changed, 47 deletions(-) + +diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c +index 0adba32..0262d7d 100644 +--- a/drivers/staging/line6/variax.c ++++ b/drivers/staging/line6/variax.c +@@ -70,21 +70,6 @@ static void variax_startup2(unsigned long data); + static void variax_startup4(unsigned long data); + static void variax_startup5(unsigned long data); + +-/* +- Decode data transmitted by workbench. +-*/ +-static void variax_decode(const unsigned char *raw_data, unsigned char *data, +- int raw_size) +-{ +- for (; raw_size > 0; raw_size -= 6) { +- data[2] = raw_data[0] | (raw_data[1] << 4); +- data[1] = raw_data[2] | (raw_data[3] << 4); +- data[0] = raw_data[4] | (raw_data[5] << 4); +- raw_data += 6; +- data += 3; +- } +-} +- + static void variax_activate_async(struct usb_line6_variax *variax, int a) + { + variax->buffer_activate[VARIAX_OFFSET_ACTIVATE] = a; +@@ -214,18 +199,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax) + break; + + case VARIAX_DUMP_PASS2: +- /* model name is transmitted twice, so skip it here: */ +- variax_decode(buf + +- VARIAX_MODEL_HEADER_LENGTH, +- (unsigned char *) +- &variax-> +- model_data.control + +- sizeof(variax->model_data. +- control) +- / 2, +- sizeof(variax->model_data. +- control) +- / 2 * 2); + line6_dump_request_async + (&variax->dumpreq, &variax->line6, + 2, VARIAX_DUMP_PASS3); +diff --git a/drivers/staging/line6/variax.h b/drivers/staging/line6/variax.h +index f3d95fa..13d5680 100644 +--- a/drivers/staging/line6/variax.h ++++ b/drivers/staging/line6/variax.h +@@ -44,21 +44,6 @@ enum { + VARIAX_DUMP_PASS3 + }; + +-/** +- Binary Variax model dump +-*/ +-struct variax_model { +- /** +- Header information (including program name). +- */ +- unsigned char name[18]; +- +- /** +- Model parameters. +- */ +- unsigned char control[78 * 2]; +-}; +- + struct usb_line6_variax { + /** + Generic Line6 USB data. +@@ -78,11 +63,6 @@ struct usb_line6_variax { + unsigned char *buffer_activate; + + /** +- Current model settings. +- */ +- struct variax_model model_data; +- +- /** + Handler for device initializaton. + */ + struct work_struct startup_work; diff --git a/debian/patches/features/all/line6/0104-staging-line6-drop-dump-requests-from-variax-startup.patch b/debian/patches/features/all/line6/0104-staging-line6-drop-dump-requests-from-variax-startup.patch new file mode 100644 index 000000000..236a49032 --- /dev/null +++ b/debian/patches/features/all/line6/0104-staging-line6-drop-dump-requests-from-variax-startup.patch @@ -0,0 +1,242 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:23 +0100 +Subject: [104/106] staging: line6: drop dump requests from variax startup + +commit 323246b2514f80e305399084f12792cc074c2d2d upstream. + +The variax startup procedure dumps model data. This is no longer useful +since the sysfs attrs which expose this information to userspace have +been removed. The dump request wasn't been processed anymore. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/variax.c | 106 ++-------------------------------------- + drivers/staging/line6/variax.h | 15 ------ + 2 files changed, 4 insertions(+), 117 deletions(-) + +diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c +index 0262d7d..4fca58f 100644 +--- a/drivers/staging/line6/variax.c ++++ b/drivers/staging/line6/variax.c +@@ -15,21 +15,10 @@ + #include "driver.h" + #include "variax.h" + +-#define VARIAX_MODEL_HEADER_LENGTH 7 +-#define VARIAX_MODEL_MESSAGE_LENGTH 199 + #define VARIAX_OFFSET_ACTIVATE 7 + + /* + This message is sent by the device during initialization and identifies +- the connected guitar model. +-*/ +-static const char variax_init_model[] = { +- 0xf0, 0x00, 0x01, 0x0c, 0x07, 0x00, 0x69, 0x02, +- 0x00 +-}; +- +-/* +- This message is sent by the device during initialization and identifies + the connected guitar version. + */ + static const char variax_init_version[] = { +@@ -49,22 +38,6 @@ static const char variax_activate[] = { + 0xf7 + }; + +-static const char variax_request_bank[] = { +- 0xf0, 0x00, 0x01, 0x0c, 0x07, 0x00, 0x6d, 0xf7 +-}; +- +-static const char variax_request_model1[] = { +- 0xf0, 0x00, 0x01, 0x0c, 0x07, 0x00, 0x3c, 0x00, +- 0x02, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0x03, +- 0x00, 0x00, 0x00, 0xf7 +-}; +- +-static const char variax_request_model2[] = { +- 0xf0, 0x00, 0x01, 0x0c, 0x07, 0x00, 0x3c, 0x00, +- 0x02, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x03, +- 0x00, 0x00, 0x00, 0xf7 +-}; +- + /* forward declarations: */ + static void variax_startup2(unsigned long data); + static void variax_startup4(unsigned long data); +@@ -135,26 +108,13 @@ static void variax_startup5(unsigned long data) + { + struct usb_line6_variax *variax = (struct usb_line6_variax *)data; + CHECK_STARTUP_PROGRESS(variax->startup_progress, +- VARIAX_STARTUP_DUMPREQ); +- +- /* current model dump: */ +- line6_dump_request_async(&variax->dumpreq, &variax->line6, 0, +- VARIAX_DUMP_PASS1); +- /* passes 2 and 3 are performed implicitly before entering +- * variax_startup6. +- */ +-} +- +-static void variax_startup6(struct usb_line6_variax *variax) +-{ +- CHECK_STARTUP_PROGRESS(variax->startup_progress, + VARIAX_STARTUP_WORKQUEUE); + + /* schedule work for global work queue: */ + schedule_work(&variax->startup_work); + } + +-static void variax_startup7(struct work_struct *work) ++static void variax_startup6(struct work_struct *work) + { + struct usb_line6_variax *variax = + container_of(work, struct usb_line6_variax, startup_work); +@@ -178,8 +138,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax) + + case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_DEVICE: + case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST: +- line6_dump_request_async(&variax->dumpreq, &variax->line6, 0, +- VARIAX_DUMP_PASS1); + break; + + case LINE6_RESET: +@@ -187,41 +145,14 @@ void line6_variax_process_message(struct usb_line6_variax *variax) + break; + + case LINE6_SYSEX_BEGIN: +- if (memcmp(buf + 1, variax_request_model1 + 1, +- VARIAX_MODEL_HEADER_LENGTH - 1) == 0) { +- if (variax->line6.message_length == +- VARIAX_MODEL_MESSAGE_LENGTH) { +- switch (variax->dumpreq.in_progress) { +- case VARIAX_DUMP_PASS1: +- line6_dump_request_async +- (&variax->dumpreq, &variax->line6, +- 1, VARIAX_DUMP_PASS2); +- break; +- +- case VARIAX_DUMP_PASS2: +- line6_dump_request_async +- (&variax->dumpreq, &variax->line6, +- 2, VARIAX_DUMP_PASS3); +- } +- } else { +- dev_dbg(variax->line6.ifcdev, +- "illegal length %d of model data\n", +- variax->line6.message_length); +- line6_dump_finished(&variax->dumpreq); +- } +- } else if (memcmp(buf + 1, variax_request_bank + 1, +- sizeof(variax_request_bank) - 2) == 0) { +- line6_dump_finished(&variax->dumpreq); +- variax_startup6(variax); +- } else if (memcmp(buf + 1, variax_init_version + 1, +- sizeof(variax_init_version) - 1) == 0) { ++ if (memcmp(buf + 1, variax_init_version + 1, ++ sizeof(variax_init_version) - 1) == 0) { + variax_startup3(variax); + } else if (memcmp(buf + 1, variax_init_done + 1, + sizeof(variax_init_done) - 1) == 0) { + /* notify of complete initialization: */ + variax_startup4((unsigned long)variax); + } +- + break; + + case LINE6_SYSEX_END: +@@ -248,11 +179,6 @@ static void variax_destruct(struct usb_interface *interface) + del_timer(&variax->startup_timer2); + cancel_work_sync(&variax->startup_work); + +- /* free dump request data: */ +- line6_dumpreq_destructbuf(&variax->dumpreq, 2); +- line6_dumpreq_destructbuf(&variax->dumpreq, 1); +- line6_dumpreq_destruct(&variax->dumpreq); +- + kfree(variax->buffer_activate); + } + +@@ -266,36 +192,12 @@ static int variax_try_init(struct usb_interface *interface, + + init_timer(&variax->startup_timer1); + init_timer(&variax->startup_timer2); +- INIT_WORK(&variax->startup_work, variax_startup7); ++ INIT_WORK(&variax->startup_work, variax_startup6); + + if ((interface == NULL) || (variax == NULL)) + return -ENODEV; + + /* initialize USB buffers: */ +- err = line6_dumpreq_init(&variax->dumpreq, variax_request_model1, +- sizeof(variax_request_model1)); +- +- if (err < 0) { +- dev_err(&interface->dev, "Out of memory\n"); +- return err; +- } +- +- err = line6_dumpreq_initbuf(&variax->dumpreq, variax_request_model2, +- sizeof(variax_request_model2), 1); +- +- if (err < 0) { +- dev_err(&interface->dev, "Out of memory\n"); +- return err; +- } +- +- err = line6_dumpreq_initbuf(&variax->dumpreq, variax_request_bank, +- sizeof(variax_request_bank), 2); +- +- if (err < 0) { +- dev_err(&interface->dev, "Out of memory\n"); +- return err; +- } +- + variax->buffer_activate = kmemdup(variax_activate, + sizeof(variax_activate), GFP_KERNEL); + +diff --git a/drivers/staging/line6/variax.h b/drivers/staging/line6/variax.h +index 13d5680..24de796 100644 +--- a/drivers/staging/line6/variax.h ++++ b/drivers/staging/line6/variax.h +@@ -18,7 +18,6 @@ + #include + + #include "driver.h" +-#include "dumprequest.h" + + #define VARIAX_STARTUP_DELAY1 1000 + #define VARIAX_STARTUP_DELAY3 100 +@@ -32,18 +31,11 @@ enum { + VARIAX_STARTUP_VERSIONREQ, + VARIAX_STARTUP_WAIT, + VARIAX_STARTUP_ACTIVATE, +- VARIAX_STARTUP_DUMPREQ, + VARIAX_STARTUP_WORKQUEUE, + VARIAX_STARTUP_SETUP, + VARIAX_STARTUP_LAST = VARIAX_STARTUP_SETUP - 1 + }; + +-enum { +- VARIAX_DUMP_PASS1 = LINE6_DUMP_CURRENT, +- VARIAX_DUMP_PASS2, +- VARIAX_DUMP_PASS3 +-}; +- + struct usb_line6_variax { + /** + Generic Line6 USB data. +@@ -51,13 +43,6 @@ struct usb_line6_variax { + struct usb_line6 line6; + + /** +- Dump request structure. +- Append two extra buffers for 3-pass data query. +- */ +- struct line6_dump_request dumpreq; +- struct line6_dump_reqbuf extrabuf[2]; +- +- /** + Buffer for activation code. + */ + unsigned char *buffer_activate; diff --git a/debian/patches/features/all/line6/0105-staging-line6-drop-dump-requests-from-pod-startup.patch b/debian/patches/features/all/line6/0105-staging-line6-drop-dump-requests-from-pod-startup.patch new file mode 100644 index 000000000..e9fa35c71 --- /dev/null +++ b/debian/patches/features/all/line6/0105-staging-line6-drop-dump-requests-from-pod-startup.patch @@ -0,0 +1,171 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:24 +0100 +Subject: [105/106] staging: line6: drop dump requests from pod startup + +commit 09fda10a0e6a4eec18edf8ed53f8be8ae10968b5 upstream. + +The pod startup procedure dumps model data. This is no longer useful +since the sysfs attrs which expose this information to userspace have +been removed. The dump request wasn't been processed anymore. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/pod.c | 44 ++++--------------------------------------- + drivers/staging/line6/pod.h | 7 ------- + 2 files changed, 4 insertions(+), 47 deletions(-) + +diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c +index f8257be..e542540 100644 +--- a/drivers/staging/line6/pod.c ++++ b/drivers/staging/line6/pod.c +@@ -111,10 +111,6 @@ static struct line6_pcm_properties pod_pcm_properties = { + .bytes_per_frame = POD_BYTES_PER_FRAME + }; + +-static const char pod_request_channel[] = { +- 0xf0, 0x00, 0x01, 0x0c, 0x03, 0x75, 0xf7 +-}; +- + static const char pod_version_header[] = { + 0xf2, 0x7e, 0x7f, 0x06, 0x02 + }; +@@ -122,7 +118,6 @@ static const char pod_version_header[] = { + /* forward declarations: */ + static void pod_startup2(unsigned long data); + static void pod_startup3(struct usb_line6_pod *pod); +-static void pod_startup4(struct usb_line6_pod *pod); + + static char *pod_alloc_sysex_buffer(struct usb_line6_pod *pod, int code, + int size) +@@ -157,8 +152,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + + case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_DEVICE: + case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST: +- line6_dump_request_async(&pod->dumpreq, &pod->line6, 0, +- LINE6_DUMP_CURRENT); + break; + + case LINE6_SYSEX_BEGIN | LINE6_CHANNEL_DEVICE: +@@ -166,8 +159,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + if (memcmp(buf + 1, line6_midi_id, sizeof(line6_midi_id)) == 0) { + switch (buf[5]) { + case POD_SYSEX_DUMP: +- line6_dump_finished(&pod->dumpreq); +- pod_startup3(pod); + break; + + case POD_SYSEX_SYSTEM:{ +@@ -208,7 +199,7 @@ void line6_pod_process_message(struct usb_line6_pod *pod) + pod->device_id = + ((int)buf[8] << 16) | ((int)buf[9] << 8) | (int) + buf[10]; +- pod_startup4(pod); ++ pod_startup3(pod); + } else + dev_dbg(pod->line6.ifcdev, "unknown sysex header\n"); + +@@ -308,22 +299,6 @@ static void pod_startup1(struct usb_line6_pod *pod) + static void pod_startup2(unsigned long data) + { + struct usb_line6_pod *pod = (struct usb_line6_pod *)data; +- +- /* schedule another startup procedure until startup is complete: */ +- if (pod->startup_progress >= POD_STARTUP_LAST) +- return; +- +- pod->startup_progress = POD_STARTUP_DUMPREQ; +- line6_start_timer(&pod->startup_timer, POD_STARTUP_DELAY, pod_startup2, +- (unsigned long)pod); +- +- /* current channel dump: */ +- line6_dump_request_async(&pod->dumpreq, &pod->line6, 0, +- LINE6_DUMP_CURRENT); +-} +- +-static void pod_startup3(struct usb_line6_pod *pod) +-{ + struct usb_line6 *line6 = &pod->line6; + CHECK_STARTUP_PROGRESS(pod->startup_progress, POD_STARTUP_VERSIONREQ); + +@@ -331,7 +306,7 @@ static void pod_startup3(struct usb_line6_pod *pod) + line6_version_request_async(line6); + } + +-static void pod_startup4(struct usb_line6_pod *pod) ++static void pod_startup3(struct usb_line6_pod *pod) + { + CHECK_STARTUP_PROGRESS(pod->startup_progress, POD_STARTUP_WORKQUEUE); + +@@ -339,7 +314,7 @@ static void pod_startup4(struct usb_line6_pod *pod) + schedule_work(&pod->startup_work); + } + +-static void pod_startup5(struct work_struct *work) ++static void pod_startup4(struct work_struct *work) + { + struct usb_line6_pod *pod = + container_of(work, struct usb_line6_pod, startup_work); +@@ -422,9 +397,6 @@ static void pod_destruct(struct usb_interface *interface) + + del_timer(&pod->startup_timer); + cancel_work_sync(&pod->startup_work); +- +- /* free dump request data: */ +- line6_dumpreq_destruct(&pod->dumpreq); + } + + /* +@@ -450,19 +422,11 @@ static int pod_try_init(struct usb_interface *interface, + struct usb_line6 *line6 = &pod->line6; + + init_timer(&pod->startup_timer); +- INIT_WORK(&pod->startup_work, pod_startup5); ++ INIT_WORK(&pod->startup_work, pod_startup4); + + if ((interface == NULL) || (pod == NULL)) + return -ENODEV; + +- /* initialize USB buffers: */ +- err = line6_dumpreq_init(&pod->dumpreq, pod_request_channel, +- sizeof(pod_request_channel)); +- if (err < 0) { +- dev_err(&interface->dev, "Out of memory\n"); +- return -ENOMEM; +- } +- + /* create sysfs entries: */ + err = pod_create_files2(&interface->dev); + if (err < 0) +diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h +index 843eb4e..3e3f167 100644 +--- a/drivers/staging/line6/pod.h ++++ b/drivers/staging/line6/pod.h +@@ -19,7 +19,6 @@ + #include + + #include "driver.h" +-#include "dumprequest.h" + + /* + PODxt Live interfaces +@@ -45,7 +44,6 @@ + */ + enum { + POD_STARTUP_INIT = 1, +- POD_STARTUP_DUMPREQ, + POD_STARTUP_VERSIONREQ, + POD_STARTUP_WORKQUEUE, + POD_STARTUP_SETUP, +@@ -59,11 +57,6 @@ struct usb_line6_pod { + struct usb_line6 line6; + + /** +- Dump request structure. +- */ +- struct line6_dump_request dumpreq; +- +- /** + Instrument monitor level. + */ + int monitor_level; diff --git a/debian/patches/features/all/line6/0106-staging-line6-drop-unused-dumprequest-code.patch b/debian/patches/features/all/line6/0106-staging-line6-drop-unused-dumprequest-code.patch new file mode 100644 index 000000000..40f8d9124 --- /dev/null +++ b/debian/patches/features/all/line6/0106-staging-line6-drop-unused-dumprequest-code.patch @@ -0,0 +1,254 @@ +From: Stefan Hajnoczi +Date: Thu, 22 Nov 2012 20:49:25 +0100 +Subject: [106/106] staging: line6: drop unused dumprequest code + +commit 64bce09563a2a4b7614583f14a7ee55b0e083949 upstream. + +The line6 drive no longer requests MIDI dumps from the device so +dumprequest.c is not needed. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/line6/Makefile | 1 - + drivers/staging/line6/dumprequest.c | 135 ----------------------------------- + drivers/staging/line6/dumprequest.h | 76 -------------------- + 3 files changed, 212 deletions(-) + delete mode 100644 drivers/staging/line6/dumprequest.c + delete mode 100644 drivers/staging/line6/dumprequest.h + +diff --git a/drivers/staging/line6/Makefile b/drivers/staging/line6/Makefile +index 44ee5ae..ae5c374 100644 +--- a/drivers/staging/line6/Makefile ++++ b/drivers/staging/line6/Makefile +@@ -4,7 +4,6 @@ line6usb-y := \ + audio.o \ + capture.o \ + driver.o \ +- dumprequest.o \ + midi.o \ + midibuf.o \ + pcm.o \ +diff --git a/drivers/staging/line6/dumprequest.c b/drivers/staging/line6/dumprequest.c +deleted file mode 100644 +index 60c7bae..0000000 +--- a/drivers/staging/line6/dumprequest.c ++++ /dev/null +@@ -1,135 +0,0 @@ +-/* +- * 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 +- +-#include "driver.h" +-#include "dumprequest.h" +- +-/* +- Set "dump in progress" flag. +-*/ +-void line6_dump_started(struct line6_dump_request *l6dr, int dest) +-{ +- l6dr->in_progress = dest; +-} +- +-/* +- Invalidate current channel, i.e., set "dump in progress" flag. +- Reading from the "dump" special file blocks until dump is completed. +-*/ +-void line6_invalidate_current(struct line6_dump_request *l6dr) +-{ +- line6_dump_started(l6dr, LINE6_DUMP_CURRENT); +-} +- +-/* +- Clear "dump in progress" flag and notify waiting processes. +-*/ +-void line6_dump_finished(struct line6_dump_request *l6dr) +-{ +- l6dr->in_progress = LINE6_DUMP_NONE; +- wake_up(&l6dr->wait); +-} +- +-/* +- Send an asynchronous channel dump request. +-*/ +-int line6_dump_request_async(struct line6_dump_request *l6dr, +- struct usb_line6 *line6, int num, int dest) +-{ +- int ret; +- line6_dump_started(l6dr, dest); +- ret = line6_send_raw_message_async(line6, l6dr->reqbufs[num].buffer, +- l6dr->reqbufs[num].length); +- +- if (ret < 0) +- line6_dump_finished(l6dr); +- +- return ret; +-} +- +-/* +- Wait for completion (interruptible). +-*/ +-int line6_dump_wait_interruptible(struct line6_dump_request *l6dr) +-{ +- return wait_event_interruptible(l6dr->wait, +- l6dr->in_progress == LINE6_DUMP_NONE); +-} +- +-/* +- Wait for completion. +-*/ +-void line6_dump_wait(struct line6_dump_request *l6dr) +-{ +- wait_event(l6dr->wait, l6dr->in_progress == LINE6_DUMP_NONE); +-} +- +-/* +- Wait for completion (with timeout). +-*/ +-int line6_dump_wait_timeout(struct line6_dump_request *l6dr, long timeout) +-{ +- return wait_event_timeout(l6dr->wait, +- l6dr->in_progress == LINE6_DUMP_NONE, +- timeout); +-} +- +-/* +- Initialize dump request buffer. +-*/ +-int line6_dumpreq_initbuf(struct line6_dump_request *l6dr, const void *buf, +- size_t len, int num) +-{ +- l6dr->reqbufs[num].buffer = kmemdup(buf, len, GFP_KERNEL); +- if (l6dr->reqbufs[num].buffer == NULL) +- return -ENOMEM; +- l6dr->reqbufs[num].length = len; +- return 0; +-} +- +-/* +- Initialize dump request data structure (including one buffer). +-*/ +-int line6_dumpreq_init(struct line6_dump_request *l6dr, const void *buf, +- size_t len) +-{ +- int ret; +- ret = line6_dumpreq_initbuf(l6dr, buf, len, 0); +- if (ret < 0) +- return ret; +- init_waitqueue_head(&l6dr->wait); +- return 0; +-} +- +-/* +- Destruct dump request data structure. +-*/ +-void line6_dumpreq_destructbuf(struct line6_dump_request *l6dr, int num) +-{ +- if (l6dr == NULL) +- return; +- if (l6dr->reqbufs[num].buffer == NULL) +- return; +- kfree(l6dr->reqbufs[num].buffer); +- l6dr->reqbufs[num].buffer = NULL; +-} +- +-/* +- Destruct dump request data structure. +-*/ +-void line6_dumpreq_destruct(struct line6_dump_request *l6dr) +-{ +- if (l6dr->reqbufs[0].buffer == NULL) +- return; +- line6_dumpreq_destructbuf(l6dr, 0); +-} +diff --git a/drivers/staging/line6/dumprequest.h b/drivers/staging/line6/dumprequest.h +deleted file mode 100644 +index c17a262..0000000 +--- a/drivers/staging/line6/dumprequest.h ++++ /dev/null +@@ -1,76 +0,0 @@ +-/* +- * 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. +- * +- */ +- +-#ifndef DUMPREQUEST_H +-#define DUMPREQUEST_H +- +-#include +-#include +-#include +- +-enum { +- LINE6_DUMP_NONE, +- LINE6_DUMP_CURRENT +-}; +- +-struct line6_dump_reqbuf { +- /** +- Buffer for dump requests. +- */ +- unsigned char *buffer; +- +- /** +- Size of dump request. +- */ +- size_t length; +-}; +- +-/** +- Provides the functionality to request channel/model/... dump data from a +- Line6 device. +-*/ +-struct line6_dump_request { +- /** +- Wait queue for access to program dump data. +- */ +- wait_queue_head_t wait; +- +- /** +- Indicates an unfinished program dump request. +- 0: no dump +- 1: dump current settings +- Other device-specific values are also allowed. +- */ +- int in_progress; +- +- /** +- Dump request buffers +- */ +- struct line6_dump_reqbuf reqbufs[1]; +-}; +- +-extern void line6_dump_finished(struct line6_dump_request *l6dr); +-extern int line6_dump_request_async(struct line6_dump_request *l6dr, +- struct usb_line6 *line6, int num, int dest); +-extern void line6_dump_started(struct line6_dump_request *l6dr, int dest); +-extern void line6_dumpreq_destruct(struct line6_dump_request *l6dr); +-extern void line6_dumpreq_destructbuf(struct line6_dump_request *l6dr, int num); +-extern int line6_dumpreq_init(struct line6_dump_request *l6dr, const void *buf, +- size_t len); +-extern int line6_dumpreq_initbuf(struct line6_dump_request *l6dr, +- const void *buf, size_t len, int num); +-extern void line6_invalidate_current(struct line6_dump_request *l6dr); +-extern void line6_dump_wait(struct line6_dump_request *l6dr); +-extern int line6_dump_wait_interruptible(struct line6_dump_request *l6dr); +-extern int line6_dump_wait_timeout(struct line6_dump_request *l6dr, +- long timeout); +- +-#endif diff --git a/debian/patches/series b/debian/patches/series index 2764f9b0e..15d23ceb2 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -517,3 +517,111 @@ features/all/virtio_scsi/0009-SCSI-scsi-virtio-scsi-Fix-address-translation-fail features/all/virtio_scsi/0010-SCSI-virtio-scsi-initialize-scatterlist-structure.patch features/all/virtio_scsi/0011-SCSI-virtio-scsi-fix-LUNs-greater-than-255.patch features/all/virtio_scsi/0012-SCSI-virtio-scsi-support-online-resizing-of-disks.patch + +# line6 from 3.8 +features/all/line6/0001-line6-fix-memory-leaks-in-line6_init_midi.patch +features/all/line6/0002-staging-line6-add-Pod-HD300-support.patch +features/all/line6/0003-staging-line6-add-missing-MIDI-postprocessing-case-f.patch +features/all/line6/0004-staging-line6-use-smallest-iso-ep-packet-size.patch +features/all/line6/0005-staging-line6-alloc-free-buffers-in-hw_params-hw_fre.patch +features/all/line6/0006-Staging-line6-Use-kmemdup-rather-than-duplicating-it.patch +features/all/line6/0007-Staging-line6-NULL-dereference-in-dev_err.patch +features/all/line6/0008-Staging-line6-midi.c-Fixed-call-of-obsolete-function.patch +features/all/line6/0009-Staging-line6-midi.c-Fixed-call-of-obsolete-function.patch +features/all/line6/0010-staging-line6-Remove-obsolete-code.patch +features/all/line6/0011-staging-line6-refactor-device-information-and-add-PO.patch +features/all/line6/0012-staging-line6-fix-memory-leak-in-.hw_params.patch +features/all/line6/0013-staging-line6-fix-playback-urb-transfer-buffer-calcu.patch +features/all/line6/0014-staging-line6-eliminate-useless-index_out-variable.patch +features/all/line6/0015-staging-line6-eliminate-useless-NULL-checks.patch +features/all/line6/0016-staging-line6-wait-for-urbs-in-snd_line6_prepare.patch +features/all/line6/0017-staging-line6-fixed-ALSA-PCM-interaction.patch +features/all/line6/0018-staging-line6-removed-obsolete-code.patch +features/all/line6/0019-staging-line6-use-source-select-control-for-UX2-devi.patch +features/all/line6/0020-staging-line6-separate-handling-of-buffer-allocation.patch +features/all/line6/0021-Staging-line6-remove-unneeded-initialization.patch +features/all/line6/0022-Staging-line6-only-allocate-a-buffer-if-it-is-needed.patch +features/all/line6/0023-Staging-line6-remove-teardown-code-from-module_exit-.patch +features/all/line6/0024-Staging-line6-use-module_usb_driver.patch +features/all/line6/0025-staging-line6-toneport.c-remove-err-usage.patch +features/all/line6/0026-staging-line6-midibuf.c-changed-printk-KERN_DEBUG-.-.patch +features/all/line6/0027-staging-line6-midi.c-Added-space-between-switch-and-.patch +features/all/line6/0028-staging-line6-pcm.c-Removed-trailing-whitespace.patch +features/all/line6/0029-staging-line6-config.h-Remove-CHECKPOINT-macro.patch +features/all/line6/0030-staging-line6-config.h-Delete-unused-header.patch +features/all/line6/0031-staging-line6-changed-interface-of-line6_transmit_pa.patch +features/all/line6/0032-staging-line6-Changed-some-strict_strtouls-to-kstrto.patch +features/all/line6/0033-staging-line6-changed-interface-of-line6_pod_transmi.patch +features/all/line6/0034-staging-line6-adjusted-interface-of-line6_send_progr.patch +features/all/line6/0035-staging-line6-changed-interface-of-pod_send_channel.patch +features/all/line6/0036-staging-line6-control.c-eliminate-strict_strtoul-in-.patch +features/all/line6/0037-staging-line6-Exchanged-strict_strtoul-with-kstrtou8.patch +features/all/line6/0038-staging-line6-Changed-strict_strtoul-to-kstrtou8-in-.patch +features/all/line6/0039-staging-line6-Changed-strict_strtoul-to-kstrtou8-in-.patch +features/all/line6/0040-staging-line6-pcm.c-Changed-simple_strtoul-to-kstrto.patch +features/all/line6/0041-staging-line6-variax.c-Eliminated-remaining-strict_s.patch +features/all/line6/0042-staging-line6-drop-unused-line6_devices-array.patch +features/all/line6/0043-staging-line6-drop-unused-line6_index-and-line6_id-a.patch +features/all/line6/0044-staging-line6-wrap-80-char-lines-in-capture.c.patch +features/all/line6/0045-staging-line6-fix-quoted-string-across-lines-in-midi.patch +features/all/line6/0046-staging-line6-shorten-comment-below-80-chars-in-pcm..patch +features/all/line6/0047-staging-line6-drop-trailing-whitespace-in-pcm.h.patch +features/all/line6/0048-staging-line6-wrap-lines-to-80-chars-in-playback.c.patch +features/all/line6/0049-staging-line6-replace-deprecated-strict_strtol-in-to.patch +features/all/line6/0050-staging-line6-wrap-lines-to-80-chars-in-usbdefs.h.patch +features/all/line6/0051-staging-line6-wrap-comment-to-80-chars-in-variax.c.patch +features/all/line6/0052-staging-line6-replace-DEBUG_MESSAGES-with-dev_dbg.patch +features/all/line6/0053-staging-line6-drop-unused-DEBUG_MESSAGES-macro.patch +features/all/line6/0054-staging-line6-drop-unused-CONFIG_LINE6_USB_DEBUG.patch +features/all/line6/0055-staging-line6-drop-control-URB-dumping-code.patch +features/all/line6/0056-staging-line6-drop-CONTROL-from-CONFIG_LINE6_USB_DUM.patch +features/all/line6/0057-staging-line6-drop-unused-CONFIG_LINE6_USB_DUMP_CTRL.patch +features/all/line6/0058-staging-line6-drop-MIDI-dumping-code.patch +features/all/line6/0059-staging-line6-drop-MIDI-from-CONFIG_LINE6_USB_DUMP_A.patch +features/all/line6/0060-staging-line6-drop-unused-CONFIG_LINE6_USB_DUMP_MIDI.patch +features/all/line6/0061-staging-line6-drop-channel-sysfs-attr.patch +features/all/line6/0062-staging-line6-drop-clip-sysfs-attr.patch +features/all/line6/0063-staging-line6-drop-unused-param_dirty-bitmap.patch +features/all/line6/0064-staging-line6-drop-dirty-sysfs-attr.patch +features/all/line6/0065-staging-line6-drop-dump-sysfs-attr.patch +features/all/line6/0066-staging-line6-drop-dump_buf-sysfs-attr.patch +features/all/line6/0067-staging-line6-drop-monitor_level-sysfs-attr.patch +features/all/line6/0068-staging-line6-change-monitor_level-type-ValueWait-in.patch +features/all/line6/0069-staging-line6-drop-name-sysfs-attr.patch +features/all/line6/0070-staging-line6-drop-name_buf-sysfs-attr.patch +features/all/line6/0071-staging-line6-drop-retrieve_amp_setup-sysfs-attr.patch +features/all/line6/0072-staging-line6-drop-retrieve_channel-sysfs-attr.patch +features/all/line6/0073-staging-line6-drop-retrieve_effects_setup-sysfs-attr.patch +features/all/line6/0074-staging-line6-drop-store_amp_setup-sysfs-attr.patch +features/all/line6/0075-staging-line6-drop-store_channel-sysfs-attr.patch +features/all/line6/0076-staging-line6-drop-store_effects_setup-sysfs-attr.patch +features/all/line6/0077-staging-line6-drop-routing-sysfs-attr.patch +features/all/line6/0078-staging-line6-drop-tuner_freq-sysfs-attr.patch +features/all/line6/0079-staging-line6-drop-tuner_note-sysfs-attr.patch +features/all/line6/0080-staging-line6-drop-tuner_mute-sysfs-attr.patch +features/all/line6/0081-staging-line6-drop-tuner_pitch-sysfs-attr.patch +features/all/line6/0082-staging-line6-drop-finish-sysfs-attr.patch +features/all/line6/0083-staging-line6-drop-midi_postprocess-sysfs-attr.patch +features/all/line6/0084-staging-line6-drop-midi_mask_receive.patch +features/all/line6/0085-staging-line6-drop-midi_mask_transmit.patch +features/all/line6/0086-staging-line6-drop-midi_postprocess-flag.patch +features/all/line6/0087-staging-line6-drop-pod.c-raw-sysfs-attr.patch +features/all/line6/0088-staging-line6-drop-tuner-param-filtering.patch +features/all/line6/0089-staging-line6-drop-variax-model-sysfs-attr.patch +features/all/line6/0090-staging-line6-drop-variax-volume-sysfs-attr.patch +features/all/line6/0091-staging-line6-drop-variax-tone-sysfs-attr.patch +features/all/line6/0092-staging-line6-drop-variax-name-sysfs-attr.patch +features/all/line6/0093-staging-line6-drop-variax-bank-sysfs-attr.patch +features/all/line6/0094-staging-line6-drop-variax-dump-sysfs-attr.patch +features/all/line6/0095-staging-line6-drop-variax-active-sysfs-attr.patch +features/all/line6/0096-staging-line6-drop-variax-guitar-sysfs-attr.patch +features/all/line6/0097-staging-line6-drop-variax-raw-sysfs-attrs.patch +features/all/line6/0098-staging-line6-drop-CONFIG_LINE6_USB_RAW.patch +features/all/line6/0099-staging-line6-drop-amp-effects-dump-request-triggers.patch +features/all/line6/0100-staging-line6-drop-MIDI-parameter-sysfs-attrs.patch +features/all/line6/0101-staging-line6-drop-pod-prog_data-buffers.patch +features/all/line6/0102-staging-line6-drop-unused-pod-atomic_flags-field.patch +features/all/line6/0103-staging-line6-drop-variax-model_data-field.patch +features/all/line6/0104-staging-line6-drop-dump-requests-from-variax-startup.patch +features/all/line6/0105-staging-line6-drop-dump-requests-from-pod-startup.patch +features/all/line6/0106-staging-line6-drop-unused-dumprequest-code.patch