1. 29 5月, 2018 1 次提交
    • T
      ALSA: usb-audio: Allow non-vmalloc buffer for PCM buffers · f274baa4
      Takashi Iwai 提交于
      Currently, USB-audio driver allocates the PCM buffer via vmalloc(), as
      this serves merely as an intermediate buffer that is copied to each
      URB transfer buffer.  This works well in general on x86, but on some
      archs this may result in cache coherency issues when mmap is used.
      OTOH, it works also on such arch unless mmap is used.
      
      This patch is a step for mitigating the inconvenience; a new module
      option "use_vmalloc" is provided so that user can choose to allocate
      the DMA coherent buffer instead of the existing vmalloc buffer.
      The drawback is that it'd be the standard dma_alloc_coherent() calls
      and the system would require contiguous pages on non-x86 archs.
      
      Note that it's a global option and not dynamically switchable since
      the buffer is pre-allocated at the probe time.  In theory, it's
      possible to be switchable, but it'd be trickier and racier.
      
      As default use_vmalloc option is set to true, so that the old behavior
      is kept.  For allowing the coherent mmap on ARM or MIPS, pass
      use_vmalloc=0 option explicitly.
      Reported-and-tested-by: NDaniel Danzberger <daniel@dd-wrt.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      f274baa4
  2. 18 5月, 2018 1 次提交
  3. 15 5月, 2018 1 次提交
  4. 13 5月, 2018 1 次提交
    • R
      ALSA: usb: add UAC3 BADD profiles support · 17156f23
      Ruslan Bilovol 提交于
      Recently released USB Audio Class 3.0 specification
      contains BADD (Basic Audio Device Definition) document
      which describes pre-defined UAC3 configurations.
      
      BADD support is mandatory for UAC3 devices, it should be
      implemented as a separate USB device configuration.
      As per BADD document, class-specific descriptors
      shall not be included in the Device’s Configuration
      descriptor ("inferred"), but host can guess them
      from BADD profile number, number of endpoints and
      their max packed sizes.
      
      This patch adds support of all BADD profiles from the spec
      Signed-off-by: NRuslan Bilovol <ruslan.bilovol@gmail.com>
      Tested-by: NJorge Sanjuan <jorge.sanjuan@codethink.co.uk>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      17156f23
  5. 04 5月, 2018 3 次提交
  6. 25 4月, 2018 1 次提交
  7. 21 3月, 2018 1 次提交
    • R
      ALSA: usb: initial USB Audio Device Class 3.0 support · 9a2fe9b8
      Ruslan Bilovol 提交于
      Recently released USB Audio Class 3.0 specification
      introduces many significant changes comparing to
      previous versions, like
       - new Power Domains, support for LPM/L1
       - new Cluster descriptor
       - changed layout of all class-specific descriptors
       - new High Capability descriptors
       - New class-specific String descriptors
       - new and removed units
       - additional sources for interrupts
       - removed Type II Audio Data Formats
       - ... and many other things (check spec)
      
      It also provides backward compatibility through
      multiple configurations, as well as requires
      mandatory support for BADD (Basic Audio Device
      Definition) on each ADC3.0 compliant device
      
      This patch adds initial support of UAC3 specification
      that is enough for Generic I/O Profile (BAOF, BAIF)
      device support from BADD document.
      Signed-off-by: NRuslan Bilovol <ruslan.bilovol@gmail.com>
      Reviewed-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      9a2fe9b8
  8. 20 3月, 2018 1 次提交
  9. 13 8月, 2017 1 次提交
  10. 01 4月, 2016 2 次提交
  11. 04 3月, 2016 1 次提交
  12. 22 12月, 2015 1 次提交
  13. 19 10月, 2015 1 次提交
    • R
      ALSA: USB-audio: Add quirk for Zoom R16/24 playback · e0570446
      Ricard Wanderlof 提交于
      The Zoom R16/24 have a nonstandard playback format where each isochronous
      packet contains a length descriptor in the first four bytes. (Curiously,
      capture data does not contain this and requires no quirk.)
      
      The quirk involves adding the extra length descriptor whenever outgoing
      isochronous packets are generated, both in pcm.c (outgoing audio) and
      endpoint.c (silent data).
      
      In order to make the quirk as unintrusive as possible, for
      pcm.c:prepare_playback_urb(), the isochronous packet descriptors are
      initially set up in the same way no matter if the quirk is enabled or not.
      Once it is time to actually copy the data into the outgoing packet buffer
      (together with the added length descriptors) the isochronous descriptors
      are adjusted in order take the increased payload length into account.
      
      For endpoint.c:prepare_silent_urb() it makes more sense to modify the
      actual function, partly because the function is less complex to start with
      and partly because it is not as time-critical as prepare_playback_urb()
      (whose bulk is run with interrupts disabled), so the (minute) additional
      time spent in the non-quirk case is motivated by the simplicity of having
      a single function for all cases.
      
      The quirk is controlled by the new tx_length_quirk member in struct
      snd_usb_substream and struct snd_usb_audio, which is conveyed to pcm.c
      and endpoint.c from quirks.c in a similar manner to the txfr_quirk member
      in the same structs.
      
      In contrast to txfr_quirk however, the quirk is enabled directly in
      quirks.c:create_standard_audio_quirk() by checking the USB ID in that
      function. Another option would be to introduce a new
      QUIRK_AUDIO_ZOOM_INTERFACE or somesuch, which would have made the quirk
      very plain to see in the quirk table, but it was felt that the additional
      code needed to implement it this way would just make the implementation
      more complex with no real gain.
      
      Tested with a Zoom R16, both by doing capture and playback separately
      using arecord and aplay (8 channel capture and 2 channel playback,
      respectively), as well as capture and playback together using Ardour, as
      well as Audacity and Qtractor together with jackd.
      
      The R24 is reportedly compatible with the R16 when used as an audio
      interface. Both devices share the same USB ID and have the same number of
      inputs (8) and outputs (2). Therefore "R16/24" is mentioned throughout the
      patch.
      
      Regression tested using an Edirol UA-5 in both class compliant (16-bit)
      and "advanced" (24 bit, forces the use of quirks) modes.
      Signed-off-by: NRicard Wanderlof <ricardw@axis.com>
      Tested-by: NPanu Matilainen <pmatilai@laiskiainen.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      e0570446
  14. 07 9月, 2015 1 次提交
    • J
      ALSA: usb-audio: Change internal PCM order · 5ee20bc7
      Johan Rastén 提交于
      New PCMs will now be added to the end of the chip's PCM list instead of to the
      front. This changes the way streams are combined so that the first capture
      stream will now be merged with the first playback stream instead of the last.
      
      This fixes a problem with ASUS U7. Cards with one playback stream and cards
      without capture streams should be unaffected by this change.
      
      Exception added for M-Audio Audiophile USB (tm) since it seems to have a fix to
      swap capture stream numbering in alsa-lib conf/cards/USB-audio.conf
      Signed-off-by: NJohan Rastén <johan@oljud.se>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      5ee20bc7
  15. 26 2月, 2014 1 次提交
    • T
      ALSA: usb-audio: Use standard printk helpers · 0ba41d91
      Takashi Iwai 提交于
      Convert with dev_err() and co from snd_printk(), etc.
      As there are too deep indirections (e.g. ep->chip->dev->dev),
      a few new local macros, usb_audio_err() & co, are introduced.
      
      Also, the device numbers in some messages are dropped, as they are
      shown in the prefix automatically.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      0ba41d91
  16. 12 11月, 2013 1 次提交
    • A
      ALSA: usb: Fix wrong mapping of RLC and RRC channels · 71373fdd
      Anssi Hannula 提交于
      According to USB Audio spec v2 bits 25 and 26 of bmChannelConfig are
      "Back Left of Center - BLC" and "Back Right of Center - BRC",
      respectively.
      
      They are currently assigned to ALSA channels BLC/BRC. However, the ALSA
      BLC/BRC are actually the rather nonsensical "bottom left center" and
      "bottom right center", so the channels will be assigned wrongly. The
      comments in the USB code are also similarly wrong, so this is not
      readily apparent without looking at the actual specification.
      
      Fix the channel mapping by mapping bits 25 and 26 to RLC (Rear Left
      Center) and RRC (Rear Right Center), respectively, instead.
      Signed-off-by: NAnssi Hannula <anssi.hannula@iki.fi>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      71373fdd
  17. 05 11月, 2013 3 次提交
  18. 28 6月, 2013 2 次提交
    • C
      ALSA: usb-audio: add support for many Roland/Yamaha devices · aafe77cc
      Clemens Ladisch 提交于
      Add quirks to detect the various vendor-specific descriptors used by
      Roland and Yamaha in most of their recent USB audio and MIDI devices.
      
      Together with the previous patch, this should add audio/MIDI support for
      the following USB devices:
      - Edirol motion dive .tokyo performance package
      - Roland MC-808 Synthesizer
      - Roland BK-7m Synthesizer
      - Roland VIMA JM-5/8 Synthesizer
      - Roland SP-555 Sequencer
      - Roland V-Synth GT Synthesizer
      - Roland Music Atelier AT-75/100/300/350C/500/800/900/900C Organ
      - Edirol V-Mixer M-200i/300/380/400/480/R-1000
      - BOSS GT-10B Effects Processor
      - Roland Fantom G6/G7/G8 Keyboard
      - Cakewalk Sonar V-Studio 20/100/700 Audio Interface
      - Roland GW-8 Keyboard
      - Roland AX-Synth Keyboard
      - Roland JUNO-Di/STAGE/Gi Keyboard
      - Roland VB-99 Effects Processor
      - Cakewalk UM-2G MIDI Interface
      - Roland A-500S Keyboard
      - Roland SD-50 Synthesizer
      - Roland OCTAPAD SPD-30 Controller
      - Roland Lucina AX-09 Synthesizer
      - BOSS BR-800 Digital Recorder
      - Roland DUO/TRI-CAPTURE (EX) Audio Interface
      - BOSS RC-300 Loop Station
      - Roland JUPITER-50/80 Keyboard
      - Roland R-26 Recorder
      - Roland SPD-SX Controller
      - BOSS JS-10 Audio Player
      - Roland TD-11/15/30 Drum Module
      - Roland A-49/88 Keyboard
      - Roland INTEGRA-7 Synthesizer
      - Roland R-88 Recorder
      Signed-off-by: NClemens Ladisch <clemens@ladisch.de>
      aafe77cc
    • C
      ALSA: usb-audio: store protocol version in struct audioformat · 8f898e92
      Clemens Ladisch 提交于
      Instead of reading bInterfaceProtocol from the descriptor whenever it's
      needed, store this value in the audioformat structure.  Besides
      simplifying some code, this will allow us to correctly handle vendor-
      specific devices where the descriptors are marked with other values.
      Signed-off-by: NClemens Ladisch <clemens@ladisch.de>
      8f898e92
  19. 25 4月, 2013 1 次提交
    • D
      ALSA: snd-usb: try harder to find USB_DT_CS_ENDPOINT · ebfc594c
      Daniel Mack 提交于
      The USB_DT_CS_ENDPOINT class-specific endpoint descriptor is usually
      stuffed directly after the standard USB endpoint descriptor, and this is
      where the driver currently expects it to be.
      
      There are, however, devices in the wild that have it the other way
      around in their descriptor sets, so the USB_DT_CS_ENDPOINT comes
      *before* the standard enpoint. Devices known to implement it that way
      are "Sennheiser BTD-500" and Plantronics USB headsets.
      
      When the driver can't find the USB_DT_CS_ENDPOINT, it won't be able to
      change sample rates, as the bitmask for the validity of this command is
      storen in bmAttributes of that descriptor.
      
      Fix this by searching the entire interface instead of just the extra
      bytes of the first endpoint, in case the latter fails.
      Signed-off-by: NDaniel Mack <zonque@gmail.com>
      Reported-and-tested-by: NTorstein Hegge <hegge@resisty.net>
      Reported-and-tested-by: NYves G <alsa-user@vivigatt.com>
      Cc: stable@kernel.org
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      ebfc594c
  20. 13 4月, 2013 1 次提交
    • C
      ALSA: usb: Add quirk for 192KHz recording on E-Mu devices · 1539d4f8
      Calvin Owens 提交于
      When recording at 176.2KHz or 192Khz, the device adds a 32-bit length
      header to the capture packets, which obviously needs to be ignored for
      recording to work properly.
      
      Userspace expected:  L0 L1 L2 R0 R1 R2
      ...but actually got: R2 L0 L1 L2 R0 R1
      
      Also, the last byte of the length header being interpreted as L0 of
      the first sample caused spikes every 0.5ms, resulting in a loud 16KHz
      tone (about the highest 'B' on a piano) being present throughout
      captures.
      
      Tested at all sample rates on an E-Mu 0404USB, and tested for
      regressions on a generic USB headset.
      Signed-off-by: NCalvin Owens <jcalvinowens@gmail.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      1539d4f8
  21. 04 4月, 2013 1 次提交
  22. 18 3月, 2013 1 次提交
  23. 26 11月, 2012 1 次提交
    • T
      ALSA: usb-audio: add channel map support · 04324ccc
      Takashi Iwai 提交于
      Add the support for channel maps of the PCM streams on USB audio
      devices.  The channel map information is already found in
      ChannelConfig descriptor entries, which haven't been referred until
      now.
      
      Each chmap entry is added to audioformat list entry and copied to TLV
      dynamically instead of creating a whole chmap array.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      04324ccc
  24. 30 10月, 2012 1 次提交
    • T
      ALSA: usb-audio: Fix races at disconnection · 978520b7
      Takashi Iwai 提交于
      Close some races at disconnection of a USB audio device by adding the
      chip->shutdown_mutex and chip->shutdown check at appropriate places.
      
      The spots to put bandaids are:
      - PCM prepare, hw_params and hw_free
      - where the usb device is accessed for communication or get speed, in
       mixer.c and others; the device speed is now cached in subs->speed
       instead of accessing to chip->dev
      
      The accesses in PCM open and close don't need the mutex protection
      because these are already handled in the core PCM disconnection code.
      
      The autosuspend/autoresume codes are still uncovered by this patch
      because of possible mutex deadlocks.  They'll be covered by the
      upcoming change to rwsem.
      
      Also the mixer codes are untouched, too.  These will be fixed in
      another patch, too.
      Reported-by: NMatthieu CASTET <matthieu.castet@parrot.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      978520b7
  25. 08 6月, 2012 1 次提交
    • T
      ALSA: usb-audio: Fix substream assignments · 8260ef07
      Takashi Iwai 提交于
      In 3.5 kernel, the endpoint is assigned dynamically for the
      substreams, but the PCM assignment still checks the presence of the
      endpoint pointer.  This ended up in duplicated PCM substream creations
      at probing time, resulting in kernel warnings like:
      
      WARNING: at fs/proc/generic.c:586 proc_register+0x169/0x1a6()
      Pid: 1152, comm: modprobe Not tainted 3.5.0-rc1-00110-g71fae7e7 #2
      Call Trace:
       [<ffffffff8102a400>] warn_slowpath_common+0x83/0x9c
       [<ffffffff8102a4bc>] warn_slowpath_fmt+0x46/0x48
       [<ffffffff813829ad>] ? add_preempt_count+0x39/0x3b
       [<ffffffff811292f0>] proc_register+0x169/0x1a6
       [<ffffffff8112962e>] create_proc_entry+0x74/0x8c
       [<ffffffffa018eb63>] snd_info_register+0x3e/0xc3 [snd]
       [<ffffffffa01fde2e>] snd_pcm_new_stream+0xb1/0x404 [snd_pcm]
       [<ffffffffa024861f>] snd_usb_add_audio_stream+0xd2/0x230 [snd_usb_audio]
       [<ffffffffa0241d33>] ? snd_usb_parse_audio_format+0x252/0x34f [snd_usb_audio]
       [<ffffffff810d6b17>] ? kmem_cache_alloc_trace+0xab/0xbb
       [<ffffffffa0248c29>] snd_usb_parse_audio_interface+0x4ac/0x567 [snd_usb_audio]
       [<ffffffffa023f0ff>] snd_usb_create_stream+0xe9/0x125 [snd_usb_audio]
       [<ffffffffa023f9b1>] usb_audio_probe+0x62a/0x72c [snd_usb_audio]
       .....
      
      This patch fixes the regression by checking the fixed endpoint number
      for each substream instead of the endpoint pointer.
      Reported-and-tested-by: NJamie Heilman <jamie@audible.transient.net>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      8260ef07
  26. 13 4月, 2012 1 次提交
  27. 14 9月, 2011 2 次提交
  28. 04 8月, 2011 1 次提交
  29. 13 7月, 2011 1 次提交
  30. 04 9月, 2010 1 次提交
    • C
      ALSA: usb-audio: fix detection of vendor-specific device protocol settings · a2acad82
      Clemens Ladisch 提交于
      The Audio Class v2 support code in 2.6.35 added checks for the
      bInterfaceProtocol field.  However, there are devices (usually those
      detected by vendor-specific quirks) that do not have one of the
      predefined values in this field, which made the driver reject them.
      
      To fix this regression, restore the old behaviour, i.e., assume that
      a device with an unknown bInterfaceProtocol field (other than
      UAC_VERSION_2) has more or less UAC-v1-compatible descriptors.
      
      [compile warning fixes by tiwai]
      Signed-off-by: NClemens Ladisch <clemens@ladisch.de>
      Cc: Daniel Mack <daniel@caiaq.de>
      Cc: <stable@kernel.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      a2acad82
  31. 02 9月, 2010 1 次提交
  32. 23 6月, 2010 2 次提交