Skip to content
  1. Oct 14, 2021
  2. Oct 13, 2021
    • Jonas Hahnfeld's avatar
      ALSA: usb-audio: Add quirk for VF0770 · 48827e1d
      Jonas Hahnfeld authored
      
      
      The device advertises 8 formats, but only a rate of 48kHz is honored
      by the hardware and 24 bits give chopped audio, so only report the
      one working combination. This fixes out-of-the-box audio experience
      with PipeWire which otherwise attempts to choose S24_3LE (while
      PulseAudio defaulted to S16_LE).
      
      Signed-off-by: default avatarJonas Hahnfeld <hahnjo@hahnjo.de>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20211012200906.3492-1-hahnjo@hahnjo.de
      
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      48827e1d
    • Kai Vehmanen's avatar
      ALSA: hda: avoid write to STATESTS if controller is in reset · b37a1518
      Kai Vehmanen authored
      The snd_hdac_bus_reset_link() contains logic to clear STATESTS register
      before performing controller reset. This code dates back to an old
      bugfix in commit e8a7f136 ("[ALSA] hda-intel - Improve HD-audio
      codec probing robustness"). Originally the code was added to
      azx_reset().
      
      The code was moved around in commit a41d1224
      
       ("ALSA: hda - Embed bus
      into controller object") and ended up to snd_hdac_bus_reset_link() and
      called primarily via snd_hdac_bus_init_chip().
      
      The logic to clear STATESTS is correct when snd_hdac_bus_init_chip() is
      called when controller is not in reset. In this case, STATESTS can be
      cleared. This can be useful e.g. when forcing a controller reset to retry
      codec probe. A normal non-power-on reset will not clear the bits.
      
      However, this old logic is problematic when controller is already in
      reset. The HDA specification states that controller must be taken out of
      reset before writing to registers other than GCTL.CRST (1.0a spec,
      3.3.7). The write to STATESTS in snd_hdac_bus_reset_link() will be lost
      if the controller is already in reset per the HDA specification mentioned.
      
      This has been harmless on older hardware. On newer generation of Intel
      PCIe based HDA controllers, if configured to report issues, this write
      will emit an unsupported request error. If ACPI Platform Error Interface
      (APEI) is enabled in kernel, this will end up to kernel log.
      
      Fix the code in snd_hdac_bus_reset_link() to only clear the STATESTS if
      the function is called when controller is not in reset. Otherwise
      clearing the bits is not possible and should be skipped.
      
      Signed-off-by: default avatarKai Vehmanen <kai.vehmanen@linux.intel.com>
      Link: https://lore.kernel.org/r/20211012142935.3731820-1-kai.vehmanen@linux.intel.com
      
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      b37a1518
  3. Oct 12, 2021
    • Takashi Iwai's avatar
      ALSA: usb-audio: Less restriction for low-latency playback mode · 53451b6d
      Takashi Iwai authored
      The recent support for the improved low-latency playback mode applied
      the SNDRV_PCM_INFO_EXPLICIT_SYNC flag for the target streams, but this
      was a slight overkill.  The use of the flag above disables effectively
      both PCM status and control mmaps, while basically what we want to
      track is only about the appl_ptr update.
      
      For less restriction, use a more proper flag,
      SNDRV_PCM_INFO_SYNC_APPLPTR instead, which disables only the control
      mmap.
      
      Fixes: d5f871f8 ("ALSA: usb-audio: Improved lowlatency playback support")
      Link: https://lore.kernel.org/r/20211011103650.10182-1-tiwai@suse.de
      
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      53451b6d
    • Hui Wang's avatar
      ALSA: hda/realtek: Fix the mic type detection issue for ASUS G551JW · a3fd1a98
      Hui Wang authored
      We need to define the codec pin 0x1b to be the mic, but somehow
      the mic doesn't support hot plugging detection, and Windows also has
      this issue, so we set it to phantom headset-mic.
      
      Also the determine_headset_type() often returns the omtp type by a
      mistake when we plug a ctia headset, this makes the mic can't record
      sound at all. Because most of the headset are ctia type nowadays and
      some machines have the fixed ctia type audio jack, it is possible this
      machine has the fixed ctia jack too. Here we set this mic jack to
      fixed ctia type, this could avoid the mic type detection mistake and
      make the ctia headset work stable.
      
      BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=214537
      
      
      Reported-and-tested-by: default avatarmsd <msd.mmq@gmail.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarHui Wang <hui.wang@canonical.com>
      Link: https://lore.kernel.org/r/20211012114748.5238-1-hui.wang@canonical.com
      
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      a3fd1a98
    • Takashi Iwai's avatar
      ALSA: pcm: Workaround for a wrong offset in SYNC_PTR compat ioctl · 228af5a4
      Takashi Iwai authored
      Michael Forney reported an incorrect padding type that was defined in
      the commit 80fe7430 ("ALSA: add new 32-bit layout for
      snd_pcm_mmap_status/control") for PCM control mmap data.
      His analysis is correct, and this caused the misplacements of PCM
      control data on 32bit arch and 32bit compat mode.
      
      The bug is that the __pad2 definition in __snd_pcm_mmap_control64
      struct was wrongly with __pad_before_uframe, which should have been
      __pad_after_uframe instead.  This struct is used in SYNC_PTR ioctl and
      control mmap.  Basically this bug leads to two problems:
      
      - The offset of avail_min field becomes wrong, it's placed right after
        appl_ptr without padding on little-endian
      
      - When appl_ptr and avail_min are read as 64bit values in kernel side,
        the values become either zero or corrupted (mixed up)
      
      One good news is that, because both user-space and kernel
      misunderstand the wrong offset, at least, 32bit application running on
      32bit kernel works as is.  Also, 64bit applications are unaffected
      because the padding size is zero.  The remaining problem is the 32bit
      compat mode; as mentioned in the above, avail_min is placed right
      after appl_ptr on little-endian archs, 64bit kernel reads bogus values
      for appl_ptr updates, which may lead to streaming bugs like jumping,
      XRUN or whatever unexpected.
      (However, we haven't heard any serious bug reports due to this over
      years, so practically seen, it's fairly safe to assume that the impact
      by this bug is limited.)
      
      Ideally speaking, we should correct the wrong mmap status control
      definition.  But this would cause again incompatibility with the
      existing binaries, and fixing it (e.g. by renumbering ioctls) would be
      really messy.
      
      So, as of this patch, we only correct the behavior of 32bit compat
      mode and keep the rest as is.  Namely, the SYNC_PTR ioctl is now
      handled differently in compat mode to read/write the 32bit values at
      the right offsets.  The control mmap of 32bit apps on 64bit kernels
      has been already disabled (which is likely rather an overlook, but
      this worked fine at this time :), so covering SYNC_PTR ioctl should
      suffice as a fallback.
      
      Fixes: 80fe7430
      
       ("ALSA: add new 32-bit layout for snd_pcm_mmap_status/control")
      Reported-by: default avatarMichael Forney <mforney@mforney.org>
      Reviewed-by: default avatarArnd Bergmann <arnd@arndb.de>
      Cc: <stable@vger.kernel.org>
      Cc: Rich Felker <dalias@libc.org>
      Link: https://lore.kernel.org/r/29QBMJU8DE71E.2YZSH8IHT5HMH@mforney.org
      Link: https://lore.kernel.org/r/20211010075546.23220-1-tiwai@suse.de
      
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      228af5a4
  4. Oct 11, 2021
  5. Oct 07, 2021
  6. Oct 06, 2021
  7. Oct 05, 2021
  8. Oct 04, 2021
  9. Oct 01, 2021
  10. Sep 30, 2021
  11. Sep 28, 2021
    • Thomas Gleixner's avatar
      ALSA: pcsp: Make hrtimer forwarding more robust · f2ff7147
      Thomas Gleixner authored
      The hrtimer callback pcsp_do_timer() prepares rearming of the timer with
      hrtimer_forward(). hrtimer_forward() is intended to provide a mechanism to
      forward the expiry time of the hrtimer by a multiple of the period argument
      so that the expiry time greater than the time provided in the 'now'
      argument.
      
      pcsp_do_timer() invokes hrtimer_forward() with the current timer expiry
      time as 'now' argument. That's providing a periodic timer expiry, but is
      not really robust when the timer callback is delayed so that the resulting
      new expiry time is already in the past which causes the callback to be
      invoked immediately again. If the timer is delayed then the back to back
      invocation is not really making it better than skipping the missed
      periods. Sound is distorted in any case.
      
      Use hrtimer_forward_now() which ensures that the next expiry is in the
      future. This prevents hogging the CPU in the timer expiry code and allows
      later on to remove hrtimer_forward() from the publi...
      f2ff7147