26 Feb, 2014

1 commit

  • 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: Takashi Iwai

    Takashi Iwai
     

12 Nov, 2013

1 commit

  • 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: Anssi Hannula
    Signed-off-by: Takashi Iwai

    Anssi Hannula
     

05 Nov, 2013

3 commits

  • In case the channel count of the input terminal is not the same as
    the channel count of the streaming descriptor, the channel config of
    the input terminal can not be trusted. Instead fall back to a default
    (guessed) channel map.

    This was found on a Logitech USB Headset.

    Signed-off-by: David Henningsson
    Signed-off-by: Takashi Iwai

    David Henningsson
     
  • The channel config from the streaming descriptor is probably a
    better indicator of the channel map than the input terminal.
    Use the input terminal's channel map as fallback only.

    Signed-off-by: David Henningsson
    Signed-off-by: Takashi Iwai

    David Henningsson
     
  • If wChannelconfig is given for some formats but not others, userspace
    might not be able to set the channel map.

    This is RFC because I'm not sure what the best behaviour is - to guess
    the channel map from the given number of channels (it's quite likely
    that one channel is MONO and two channels is FL FR), or just to supply
    UNKNOWN for all channels.

    But the complete lack of channel map for a format leads userspace to
    believe that the format is not available at all. Or am I
    misunderstanding how this should be used?

    Signed-off-by: David Henningsson
    Signed-off-by: Takashi Iwai

    David Henningsson
     

28 Jun, 2013

2 commits

  • 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: Clemens Ladisch

    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: Clemens Ladisch

    Clemens Ladisch
     

25 Apr, 2013

1 commit

  • 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: Daniel Mack
    Reported-and-tested-by: Torstein Hegge
    Reported-and-tested-by: Yves G
    Cc: stable@kernel.org
    Signed-off-by: Takashi Iwai

    Daniel Mack
     

13 Apr, 2013

1 commit

  • 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: Calvin Owens
    Cc:
    Signed-off-by: Takashi Iwai

    Calvin Owens
     

04 Apr, 2013

1 commit


18 Mar, 2013

1 commit


26 Nov, 2012

1 commit

  • 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: Takashi Iwai

    Takashi Iwai
     

30 Oct, 2012

1 commit

  • 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: Matthieu CASTET
    Cc:
    Signed-off-by: Takashi Iwai

    Takashi Iwai
     

08 Jun, 2012

1 commit

  • 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-g71fae7e #2
    Call Trace:
    [] warn_slowpath_common+0x83/0x9c
    [] warn_slowpath_fmt+0x46/0x48
    [] ? add_preempt_count+0x39/0x3b
    [] proc_register+0x169/0x1a6
    [] create_proc_entry+0x74/0x8c
    [] snd_info_register+0x3e/0xc3 [snd]
    [] snd_pcm_new_stream+0xb1/0x404 [snd_pcm]
    [] snd_usb_add_audio_stream+0xd2/0x230 [snd_usb_audio]
    [] ? snd_usb_parse_audio_format+0x252/0x34f [snd_usb_audio]
    [] ? kmem_cache_alloc_trace+0xab/0xbb
    [] snd_usb_parse_audio_interface+0x4ac/0x567 [snd_usb_audio]
    [] snd_usb_create_stream+0xe9/0x125 [snd_usb_audio]
    [] 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: Jamie Heilman
    Signed-off-by: Takashi Iwai

    Takashi Iwai
     

13 Apr, 2012

1 commit


14 Sep, 2011

2 commits