1. 29 1月, 2015 1 次提交
  2. 28 1月, 2015 4 次提交
    • T
      ALSA: line6: Make common PCM pointer callback · 2954f914
      Takashi Iwai 提交于
      Both playback and capture callbacks are identical, so let's merge
      them.
      Tested-by: NChris Rorvick <chris@rorvick.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      2954f914
    • T
      ALSA: line6: Reorganize PCM stream handling · 63e20df1
      Takashi Iwai 提交于
      The current code deals with the stream start / stop solely via
      line6_pcm_acquire() and line6_pcm_release().  This was (supposedly)
      intended to avoid the races, but it doesn't work as expected.  The
      concurrent acquire and release calls can be performed without proper
      protections, thus this might result in memory corruption.
      Furthermore, we can't take a mutex to protect the whole function
      because it can be called from the PCM trigger callback that is an
      atomic context.  Also spinlock isn't appropriate because the function
      allocates with kmalloc with GFP_KERNEL.  That is, these function just
      lead to singular problems.
      
      This is an attempt to reduce the existing races.  First off, separate
      both the stream buffer management and the stream URB management.  The
      former is protected via a newly introduced state_mutex while the
      latter is protected via each line6_pcm_stream lock.
      
      Secondly, the stream state are now managed in opened and running bit
      flags of each line6_pcm_stream.  Not only this a bit clearer than
      previous combined bit flags, this also gives a better abstraction.
      These rewrites allows us to make common hw_params and hw_free
      callbacks for both playback and capture directions.
      
      For the monitor and impulse operations, still line6_pcm_acquire() and
      line6_pcm_release() are used.  They call internally the corresponding
      functions for both playback and capture streams with proper lock or
      mutex.  Unlike the previous versions, these function don't take the
      bit masks but the only single type value.  Also they are supposed to
      be applied only as duplex operations.
      Tested-by: NChris Rorvick <chris@rorvick.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      63e20df1
    • T
      ALSA: line6: Rearrange PCM structure · ad0119ab
      Takashi Iwai 提交于
      Introduce a new line6_pcm_stream structure and group individual
      fields of snd_line6_pcm struct to playback and capture groups.
      
      This patch itself just does rename and nothing else.  More
      meaningful cleanups based on these fields shuffling will follow.
      Tested-by: NChris Rorvick <chris@rorvick.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      ad0119ab
    • T
      ALSA: line6: Drop superfluous spinlock for trigger · f2a76225
      Takashi Iwai 提交于
      The trigger callback is already spinlocked, so we need no more lock
      here (even for the linked substreams).  Let's drop it.
      Tested-by: NChris Rorvick <chris@rorvick.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      f2a76225
  3. 20 1月, 2015 3 次提交
  4. 13 1月, 2015 4 次提交
  5. 14 11月, 2012 1 次提交
  6. 10 2月, 2012 2 次提交
    • M
      staging: line6: separate handling of buffer allocation and stream startup · 0ca54888
      Markus Grabner 提交于
      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_<subsystem>_<direction>_<resource> with the
      following meanings:
      *) <subsystem> is one of
      -) ALSA: PCM playback and capture via ALSA
      -) MONITOR: software monitoring
      -) IMPULSE: optional impulse response measurement
      *) <direction> is one of
      -) PLAYBACK: audio output (from host to device)
      -) CAPTURE: audio input (from device to host)
      *) <resource> 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: NMarkus Grabner <grabner@icg.tugraz.at>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0ca54888
    • M
      3784129a
  7. 10 12月, 2011 1 次提交
  8. 09 12月, 2011 1 次提交
  9. 22 9月, 2010 1 次提交
  10. 01 9月, 2010 2 次提交
  11. 04 4月, 2009 2 次提交
    • G
      Staging: line6: coding style cleanups for .h files. · a49e4838
      Greg Kroah-Hartman 提交于
      Mostly all line length issues.
      Skipped the control.h file as it makes sense to leave it alone.
      
      Cc: Markus Grabner <grabner@icg.tugraz.at>
      Cc: Mariusz Kozlowski <m.kozlowski@tuxland.pl>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      a49e4838
    • M
      Staging: add line6 usb driver · 705ececd
      Markus Grabner 提交于
      This is an experimental Linux driver for the guitar amp, cab, and
      effects modeller PODxt Pro by Line6 (and similar devices), supporting
      the following features:
      
        - Reading/writing individual parameters
        - Reading/writing complete channel, effects setup, and amp setup data
        - Channel switching
        - Virtual MIDI interface
        - Tuner access
        - Playback/capture/mixer device for any  ALSA-compatible PCM audio
          application
        - Signal routing (record clean/processed  guitar signal, re-amping)
      
      Moreover, preliminary support for the Variax Workbench is included.
      
      From: Markus Grabner <grabner@icg.tugraz.at>
      Cc: Mariusz Kozlowski <m.kozlowski@tuxland.pl>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      705ececd