1. 18 4月, 2013 1 次提交
    • D
      ALSA: snd-usb: add support for DSD DOP stream transport · d24f5061
      Daniel Mack 提交于
      In order to provide a compatibility way for pushing DSD
      samples through ordinary PCM channels, the "DoP open Standard" was
      invented. See http://www.dsd-guide.com for the official document.
      
      The host is required to stuff DSD marker bytes (0x05, 0xfa,
      alternating) in the MSB of 24 bit wide samples on the bus, in addition
      to the 16 bits of actual DSD sample payload.
      
      To support this, the hardware and software stride logic in the driver
      has to be tweaked a bit, as we make the userspace believe we're
      operating on 16 bit samples, while we in fact push one more byte per
      channel down to the hardware.
      
      The DOP runtime information is stored in struct snd_usb_substream, so
      we can keep track of our state across multiple calls to
      prepare_playback_urb_dsd_dop().
      Signed-off-by: NDaniel Mack <zonque@gmail.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      d24f5061
  2. 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
  3. 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
  4. 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
  5. 19 9月, 2012 2 次提交
    • T
      ALSA: usb-audio: Avoid unnecessary EP setups in prepare · 384dc085
      Takashi Iwai 提交于
      The recent fix for USB suspend breakage moved the code to set up EP
      from hw_params to prepare, but it means also the EP setup might be
      called multiple times unnecessarily because the prepare callback can
      be called multiple times without starting the stream (e.g. OSS
      emulation).
      
      This patch adds a new flag to struct snd_usb_substream indicating
      whether the setup of EP is required, and do it only when necessary,
      i.e. right after hw_params or suspend.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      384dc085
    • D
      ALSA: usb-audio: Move configuration to prepare. · 61a70950
      Dylan Reid 提交于
      Move interface and endpoint configuration from hw_params to prepare
      callback.  During system suspend/resume when the USB device power isn't
      cycled the interface and endpoint configuration need to be set before
      audio playback can continue.  Resume involves another call to prepare
      but not to hw_params, moving it here allows a playing stream to continue
      after resume.
      Signed-off-by: NDylan Reid <dgreid@chromium.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      61a70950
  6. 04 9月, 2012 1 次提交
    • D
      ALSA: snd-usb: Add quirks for Playback Designs devices · 2b58fd5b
      Daniel Mack 提交于
      Playback Designs' USB devices have some hardware limitations on their
      USB interface. In particular:
      
       - They need a 20ms delay after each class compliant request as the
         hardware ACKs the USB packets before the device is actually ready
         for the next command. Sending data immediately will result in buffer
         overflows in the hardware.
       - The devices send bogus feedback data at the start of each stream
         which confuse the feedback format auto-detection.
      
      This patch introduces a new quirks hook that is called after each
      control packet and which adds a delay for all devices that match
      Playback Designs' USB VID for now.
      
      In addition, it adds a counter to snd_usb_endpoint to drop received
      packets on the floor. Another new quirks function that is called once
      an endpoint is started initializes that counter for these devices on
      their sync endpoint.
      Signed-off-by: NDaniel Mack <zonque@gmail.com>
      Reported-and-tested-by: NAndreas Koch <andreas@akdesigninc.com>
      Supported-by: NDemian Martin <demianm_1@yahoo.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      2b58fd5b
  7. 29 8月, 2012 1 次提交
  8. 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
  9. 21 4月, 2012 1 次提交
  10. 13 4月, 2012 3 次提交
    • T
      ALSA: usb: Remove obsoleted fields from struct snd_usb_substream · 22026c1a
      Takashi Iwai 提交于
      Many fields have been moved to struct snd_usb_endpoint.
      Also fix the proc output to correspond to the new structure.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      22026c1a
    • D
      ALSA: snd-usb: switch over to new endpoint streaming logic · edcd3633
      Daniel Mack 提交于
      With the previous commit that added the new streaming model, all
      endpoint and streaming related code is now in endpoint.c, and pcm.c
      only acts as a wrapper for handling the packet's payload.
      Signed-off-by: NDaniel Mack <zonque@gmail.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      edcd3633
    • D
      ALSA: snd-usb: implement new endpoint streaming model · 8fdff6a3
      Daniel Mack 提交于
      This patch adds a new generic streaming logic for audio over USB.
      
      It defines a model (snd_usb_endpoint) that handles everything that
      is related to an USB endpoint and its streaming. There are functions to
      activate and deactivate an endpoint (which call usb_set_interface()),
      and to start and stop its URBs. It also has function pointers to be
      called when data was received or is about to be sent, and pointer to
      a sync slave (another snd_usb_endpoint) that is informed when data has
      been received.
      
      A snd_usb_endpoint knows about its state and implements a refcounting,
      so only the first user will actually start the URBs and only the last
      one to stop it will tear them down again.
      
      With this sort of abstraction, the actual streaming is decoupled from
      the pcm handling, which makes the "implicit feedback" mechanisms easy to
      implement.
      
      In order to split changes properly, this patch only adds the new
      implementation but leaves the old one around, so the the driver doesn't
      change its behaviour. The switch to actually use the new code is
      submitted separately.
      Signed-off-by: NDaniel Mack <zonque@gmail.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      8fdff6a3
  11. 15 2月, 2012 1 次提交
  12. 12 9月, 2011 1 次提交
    • P
      ALSA: usb: refine delay information with USB frame counter · 294c4fb8
      Pierre-Louis Bossart 提交于
      Existing code only updates the audio delay when URBs were
      submitted/retired. This can introduce an uncertainty of 8ms
      on the number of samples played out with the default settings,
      and a lot more when URBs convey more packets to reduce the
      interrupt rate and power consumption.
      
      This patch relies on the USB frame counter to reduce the
      uncertainty to less than 2ms worst-case. The delay information
      essentially becomes independent of the URB size and number of
      packets. This should help applications like PulseAudio which
      require accurate audio timing. Clemens Ladisch reported
      a decrease of mplayer's A-V difference from nrpacks down to at
      most 1ms.
      
      Thanks to Clemens for also pointing out that the implementation
      of frame counters varies between different HCDs. Only the
      8 lowest-bits are used to estimate the delay.
      Signed-off-by: NPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
      [clemens: changed debug code]
      Signed-off-by: NClemens Ladisch <clemens@ladisch.de>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      294c4fb8
  13. 27 10月, 2010 1 次提交
    • C
      ALSA: usb-audio: automatically detect feedback format · 89e1e66d
      Clemens Ladisch 提交于
      There are two USB Audio Class specifications (v1 and v2), but neither of
      them clearly defines the feedback format for high-speed UAC v1 devices.
      Add to this whatever the Creative and M-Audio firmware writers have been
      smoking, and it becomes impossible to predict the exact feedback format
      used by a particular device.
      
      Therefore, automatically detect the feedback format by looking at the
      magnitude of the first received feedback value.
      
      Also, this allows us to get rid of some special cases for E-Mu devices.
      Signed-off-by: NClemens Ladisch <clemens@ladisch.de>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      89e1e66d
  14. 01 6月, 2010 1 次提交
    • D
      ALSA: usb-audio: parse clock topology of UAC2 devices · 79f920fb
      Daniel Mack 提交于
      Audio devices which comply to the UAC2 standard can export complex clock
      topologies in its descriptors and set up links between them.
      
      The entities that are defined are
      
       - clock sources, which define the end-leafs.
       - clock selectors, which act as switch to select one out of many
         possible clocks sources.
       - clock multipliers, which have an input clock source, and act as clock
         source again. They can be used to derive one clock from another.
      
      All sample rate changes, clock validity queries and the like must go to
      clock source elements, while clock selectors and multipliers can be used
      as terminal clock source.
      
      The following patch adds a parser for these elements and functions to
      iterate over the tree and find the leaf nodes (clock sources).
      
      The samplerate set functions were moved to the new clock.c file.
      Signed-off-by: NDaniel Mack <daniel@caiaq.de>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      79f920fb
  15. 05 3月, 2010 3 次提交