02 May, 2020

1 commit

  • Pull sound fixes from Takashi Iwai:
    "Just a collection of small fixes around this time:

    - One more try for fixing PCM OSS regression

    - HD-audio: a new quirk for Lenovo, the improved driver blacklisting,
    a lock fix in the minor error path, and a fix for the possible race
    at monitor notifiaction

    - USB-audio: a quirk ID fix, a fix for POD HD500 workaround"

    * tag 'sound-5.7-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
    ALSA: usb-audio: Correct a typo of NuPrime DAC-10 USB ID
    ALSA: opti9xx: shut up gcc-10 range warning
    ALSA: hda/hdmi: fix without unlocked before return
    ALSA: hda/hdmi: fix race in monitor detection during probe
    ALSA: hda/realtek - Two front mics on a Lenovo ThinkCenter
    ALSA: line6: Fix POD HD500 audio playback
    ALSA: pcm: oss: Place the plugin buffer overflow checks correctly (for 5.7)
    ALSA: pcm: oss: Place the plugin buffer overflow checks correctly
    ALSA: hda: Match both PCI ID and SSID for driver blacklist

    Linus Torvalds
     

30 Apr, 2020

2 commits

  • The USB vendor ID of NuPrime DAC-10 is not 16b0 but 16d0.

    Fixes: f656891c6619 ("ALSA: usb-audio: add more quirks for DSD interfaces")
    Cc:
    Link: https://lore.kernel.org/r/20200430124755.15940-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai

    Takashi Iwai
     
  • gcc-10 points out a few instances of suspicious integer arithmetic
    leading to value truncation:

    sound/isa/opti9xx/opti92x-ad1848.c: In function 'snd_opti9xx_configure':
    sound/isa/opti9xx/opti92x-ad1848.c:322:43: error: overflow in conversion from 'int' to 'unsigned char' changes value from '(int)snd_opti9xx_read(chip, 3) & -256 | 240' to '240' [-Werror=overflow]
    322 | (snd_opti9xx_read(chip, reg) & ~(mask)) | ((value) & (mask)))
    | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
    sound/isa/opti9xx/opti92x-ad1848.c:351:3: note: in expansion of macro 'snd_opti9xx_write_mask'
    351 | snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(3), 0xf0, 0xff);
    | ^~~~~~~~~~~~~~~~~~~~~~
    sound/isa/opti9xx/miro.c: In function 'snd_miro_configure':
    sound/isa/opti9xx/miro.c:873:40: error: overflow in conversion from 'int' to 'unsigned char' changes value from '(int)snd_miro_read(chip, 3) & -256 | 240' to '240' [-Werror=overflow]
    873 | (snd_miro_read(chip, reg) & ~(mask)) | ((value) & (mask)))
    | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
    sound/isa/opti9xx/miro.c:1010:3: note: in expansion of macro 'snd_miro_write_mask'
    1010 | snd_miro_write_mask(chip, OPTi9XX_MC_REG(3), 0xf0, 0xff);
    | ^~~~~~~~~~~~~~~~~~~

    These are all harmless here as only the low 8 bit are passed down
    anyway. Change the macros to inline functions to make the code
    more readable and also avoid the warning.

    Strictly speaking those functions also need locking to make the
    read/write pair atomic, but it seems unlikely that anyone would
    still run into that issue.

    Fixes: 1841f613fd2e ("[ALSA] Add snd-miro driver")
    Signed-off-by: Arnd Bergmann
    Link: https://lore.kernel.org/r/20200429190216.85919-1-arnd@arndb.de
    Signed-off-by: Takashi Iwai

    Arnd Bergmann
     

29 Apr, 2020

1 commit

  • Fix the following coccicheck warning:
    sound/pci/hda/patch_hdmi.c:1852:2-8: preceding lock on line 1846

    After add sanity check to pass klockwork check,
    The spdif_mutex should be unlock before return true
    in check_non_pcm_per_cvt().

    Fixes: 960a581e22d9 ("ALSA: hda: fix some klockwork scan warnings")
    Signed-off-by: Wu Bo
    Cc:
    Link: https://lore.kernel.org/r/1587907042-694161-1-git-send-email-wubo40@huawei.com
    Signed-off-by: Takashi Iwai

    Wu Bo
     

28 Apr, 2020

1 commit

  • A race exists between build_pcms() and build_controls() phases of codec
    setup. Build_pcms() sets up notifier for jack events. If a monitor event
    is received before build_controls() is run, the initial jack state is
    lost and never reported via mixer controls.

    The problem can be hit at least with SOF as the controller driver. SOF
    calls snd_hda_codec_build_controls() in its workqueue-based probe and
    this can be delayed enough to hit the race condition.

    Fix the issue by invalidating the per-pin ELD information when
    build_controls() is called. The existing call to hdmi_present_sense()
    will update the ELD contents. This ensures initial monitor state is
    correctly reflected via mixer controls.

    BugLink: https://github.com/thesofproject/linux/issues/1687
    Signed-off-by: Kai Vehmanen
    Link: https://lore.kernel.org/r/20200428123836.24512-1-kai.vehmanen@linux.intel.com
    Signed-off-by: Takashi Iwai

    Kai Vehmanen
     

27 Apr, 2020

1 commit

  • This new Lenovo ThinkCenter has two front mics which can't be handled
    by PA so far, so apply the fixup ALC283_FIXUP_HEADSET_MIC to change
    the location for one of the mics.

    Cc:
    Signed-off-by: Hui Wang
    Link: https://lore.kernel.org/r/20200427030039.10121-1-hui.wang@canonical.com
    Signed-off-by: Takashi Iwai

    Hui Wang
     

26 Apr, 2020

1 commit

  • Apparently interface 1 is control interface akin to HD500X,
    setting LINE6_CAP_CONTROL and choosing it as ctrl_if fixes
    audio playback on POD HD500.

    Signed-off-by: Vasily Khoruzhick
    Cc:
    Link: https://lore.kernel.org/r/20200425201115.3430-1-anarsoul@gmail.com
    Signed-off-by: Takashi Iwai

    Vasily Khoruzhick
     

25 Apr, 2020

2 commits

  • [ This is again a forward-port of the fix applied for 5.6-base code
    (commit 4285de0725b1) to 5.7-base, hence neither Fixes nor
    Cc-to-stable tags are included here -- tiwai ]

    The checks of the plugin buffer overflow in the previous fix by commit
    f2ecf903ef06 ("ALSA: pcm: oss: Avoid plugin buffer overflow")
    are put in the wrong places mistakenly, which leads to the expected
    (repeated) sound when the rate plugin is involved. Fix in the right
    places.

    Also, at those right places, the zero check is needed for the
    termination node, so added there as well, and let's get it done,
    finally.

    Link: https://lore.kernel.org/r/20200424193843.20397-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai

    Takashi Iwai
     
  • Pull sound fixes from Takashi Iwai:
    "This became a slightly big pull request, as the accumulated ASoC fixes
    are included here. Some highlights:

    - Revert of ASoC DAI startup changes that caused regression on some
    x86 platforms

    - Regression fix in HD-audio power management and driver blacklist

    - A collection of ASoC DAPM and topology fixes

    - Continued USB-audio fixes and quirks

    - Lots of small device-specific fixes

    - Rockchip S/PDIF DT stuff update for validation issues"

    * tag 'sound-5.7-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (51 commits)
    ALSA: hda: Always use jackpoll helper for jack update after resume
    ALSA: hda/realtek - Add new codec supported for ALC245
    ALSA: usb-audio: Fix usb audio refcnt leak when getting spdif
    ALSA: usb-audio: Add connector notifier delegation
    ALSA: usb-audio: Apply async workaround for Scarlett 2i4 2nd gen
    ASoC: wm8960: Fix wrong clock after suspend & resume
    ALSA: usx2y: Fix potential NULL dereference
    ALSA: usb-audio: Add quirk for Focusrite Scarlett 2i2
    ASoC: wm89xx: Add missing dependency
    ASoC: dapm: fixup dapm kcontrol widget
    ASoC: rsnd: Fix "status check failed" spam for multi-SSI
    ASoC: rsnd: Don't treat master SSI in multi SSI setup as parent
    ASoC: meson: gx-card: fix codec-to-codec link setup
    ASoC: meson: axg-card: fix codec-to-codec link setup
    ALSA: usb-audio: Add static mapping table for ALC1220-VB-based mobos
    ALSA: hda: Remove ASUS ROG Zenith from the blacklist
    ALSA: hda/realtek - Fix unexpected init_amp override
    ALSA: usb-audio: Filter out unsupported sample rates on Focusrite devices
    ASoC: SOF: Intel: add min/max channels for SSP on Baytrail/Broadwell
    ASoC: stm32: sai: fix sai probe
    ...

    Linus Torvalds
     

24 Apr, 2020

1 commit

  • The commit 3c6fd1f07ed0 ("ALSA: hda: Add driver blacklist") added a
    new blacklist for the devices that are known to have empty codecs, and
    one of the entries was ASUS ROG Zenith II (PCI SSID 1043:874f).
    However, it turned out that the very same PCI SSID is used for the
    previous model that does have the valid HD-audio codecs and the change
    broke the sound on it.

    Since the empty codec problem appear on the certain AMD platform (PCI
    ID 1022:1487), this patch changes the blacklist matching to both PCI
    ID and SSID using pci_match_id(). Also, the entry that was removed by
    the previous fix for ASUS ROG Zenigh II is re-added.

    Link: https://lore.kernel.org/r/20200424061222.19792-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai

    Takashi Iwai
     

23 Apr, 2020

3 commits

  • HD-audio codec driver applies a tricky procedure to forcibly perform
    the runtime resume by mimicking the usage count even if the device has
    been runtime-suspended beforehand. This was needed to assure to
    trigger the jack detection update after the system resume.

    And recently we also applied the similar logic to the HD-audio
    controller side. However this seems leading to some inconsistency,
    and eventually PCI controller gets screwed up.

    This patch is an attempt to fix and clean up those behavior: instead
    of the tricky runtime resume procedure, the existing jackpoll work is
    scheduled when such a forced codec resume is required. The jackpoll
    work will power up the codec, and this alone should suffice for the
    jack status update in usual cases. If the extra polling is requested
    (by checking codec->jackpoll_interval), the manual update is invoked
    after that, and the codec is powered down again.

    Also, we filter the spurious wake up of the codec from the controller
    runtime resume by checking codec->relaxed_resume flag. If this flag
    is set, basically we don't need to wake up explicitly, but it's
    supposed to be done via the audio component notifier.

    Fixes: c4c8dd6ef807 ("ALSA: hda: Skip controller resume if not needed")
    Link: https://lore.kernel.org/r/20200422203744.26299-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai

    Takashi Iwai
     
  • Enable new codec supported for ALC245.

    Signed-off-by: Kailang Yang
    Cc:
    Link: https://lore.kernel.org/r/8c0804738b2c42439f59c39c8437817f@realtek.com
    Signed-off-by: Takashi Iwai

    Kailang Yang
     
  • snd_microii_spdif_default_get() invokes snd_usb_lock_shutdown(), which
    increases the refcount of the snd_usb_audio object "chip".

    When snd_microii_spdif_default_get() returns, local variable "chip"
    becomes invalid, so the refcount should be decreased to keep refcount
    balanced.

    The reference counting issue happens in several exception handling paths
    of snd_microii_spdif_default_get(). When those error scenarios occur
    such as usb_ifnum_to_if() returns NULL, the function forgets to decrease
    the refcnt increased by snd_usb_lock_shutdown(), causing a refcnt leak.

    Fix this issue by jumping to "end" label when those error scenarios
    occur.

    Fixes: 447d6275f0c2 ("ALSA: usb-audio: Add sanity checks for endpoint accesses")
    Signed-off-by: Xiyu Yang
    Signed-off-by: Xin Tan
    Cc:
    Link: https://lore.kernel.org/r/1587617711-13200-1-git-send-email-xiyuyang19@fudan.edu.cn
    Signed-off-by: Takashi Iwai

    Xiyu Yang
     

22 Apr, 2020

3 commits

  • It turned out that ALC1220-VB USB-audio device gives the interrupt
    event to some PCM terminals while those don't allow the connector
    state request but only the actual I/O terminals return the request.
    The recent commit 7dc3c5a0172e ("ALSA: usb-audio: Don't create jack
    controls for PCM terminals") excluded those phantom terminals, so
    those events are ignored, too.

    My first thought was that this could be easily deduced from the
    associated terminals, but some of them have even no associate terminal
    ID, hence it's not too trivial to figure out.

    Since the number of such terminals are small and limited, this patch
    implements another quirk table for the simple mapping of the
    connectors. It's not really scalable, but let's hope that there will
    be not many such funky devices in future.

    Fixes: 7dc3c5a0172e ("ALSA: usb-audio: Don't create jack controls for PCM terminals")
    BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=206873
    Link: https://lore.kernel.org/r/20200422113320.26664-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai

    Takashi Iwai
     
  • …/broonie/sound into for-linus

    ASoC: Fixes for v5.7

    Quite a lot of fixes here, a lot of driver specific ones but the biggest
    one is the revert of changes to the startup and shutdown sequence for
    DAIs that went in during the merge window - they broke some older x86
    platforms and attempts to fix them didn't succeed so it's safer to just
    roll them back and try to make sure those platforms are handled properly
    in any future attempt.

    The rockchip S/PDIF DT stuff was IIRC for validation issues.

    Takashi Iwai
     
  • Due to rounding error driver sometimes incorrectly calculate next packet
    size, which results in audible clicks on devices with synchronous playback
    endpoints. For example on a high speed bus and a sample rate 44.1 kHz it
    loses one sample every ~40.9 seconds. Fortunately playback interface on
    Scarlett 2i4 2nd gen has a working explicit feedback endpoint, so we can
    switch playback data endpoint to asynchronous mode as a workaround.

    Signed-off-by: Alexander Tsoy
    Link: https://lore.kernel.org/r/20200421190908.462860-1-alexander@tsoy.me
    Signed-off-by: Takashi Iwai

    Alexander Tsoy
     

21 Apr, 2020

3 commits

  • After suspend & resume, wm8960_hw_params may be called when
    bias_level is not SND_SOC_BIAS_ON, then wm8960_configure_clocking
    is not called. But if sample rate is changed at that time, then
    the output clock rate will be not correct.

    So judgement of bias_level is SND_SOC_BIAS_ON in wm8960_hw_params
    is not necessary and it causes above issue.

    Fixes: 3176bf2d7ccd ("ASoC: wm8960: update pll and clock setting function")
    Signed-off-by: Shengjiu Wang
    Acked-by: Charles Keepax
    Link: https://lore.kernel.org/r/1587468525-27514-1-git-send-email-shengjiu.wang@nxp.com
    Signed-off-by: Mark Brown

    Shengjiu Wang
     
  • The error handling code in usX2Y_rate_set() may hit a potential NULL
    dereference when an error occurs before allocating all us->urb[].
    Add a proper NULL check for fixing the corner case.

    Reported-by: Lin Yi
    Cc:
    Link: https://lore.kernel.org/r/20200420075529.27203-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai

    Takashi Iwai
     
  • Force it to use asynchronous playback.

    Same quirk has already been added for Focusrite Scarlett Solo (2nd gen)
    with a commit 46f5710f0b88 ("ALSA: usb-audio: Add quirk for Focusrite
    Scarlett Solo").

    This also seems to prevent regular clicks when playing at 44100Hz
    on Scarlett 2i2 (2nd gen). I did not notice any side effects.

    Moved both quirks to snd_usb_audioformat_attributes_quirk() as suggested.

    Signed-off-by: Gregor Pintar
    Reviewed-by: Alexander Tsoy
    Link: https://lore.kernel.org/r/20200420214030.2361-1-grpintar@gmail.com
    Signed-off-by: Takashi Iwai

    Gregor Pintar
     

20 Apr, 2020

10 commits

  • sound/soc/codecs/wm8900.o: In function `wm8900_i2c_probe':
    wm8900.c:(.text+0xa36): undefined reference to `__devm_regmap_init_i2c'
    sound/soc/codecs/wm8900.o: In function `wm8900_modinit':
    wm8900.c:(.init.text+0xb): undefined reference to `i2c_register_driver'
    sound/soc/codecs/wm8900.o: In function `wm8900_exit':
    wm8900.c:(.exit.text+0x8): undefined reference to `i2c_del_driver'
    sound/soc/codecs/wm8988.o: In function `wm8988_i2c_probe':
    wm8988.c:(.text+0x857): undefined reference to `__devm_regmap_init_i2c'
    sound/soc/codecs/wm8988.o: In function `wm8988_modinit':
    wm8988.c:(.init.text+0xb): undefined reference to `i2c_register_driver'
    sound/soc/codecs/wm8988.o: In function `wm8988_exit':
    wm8988.c:(.exit.text+0x8): undefined reference to `i2c_del_driver'
    sound/soc/codecs/wm8995.o: In function `wm8995_i2c_probe':
    wm8995.c:(.text+0x1c4f): undefined reference to `__devm_regmap_init_i2c'
    sound/soc/codecs/wm8995.o: In function `wm8995_modinit':
    wm8995.c:(.init.text+0xb): undefined reference to `i2c_register_driver'
    sound/soc/codecs/wm8995.o: In function `wm8995_exit':
    wm8995.c:(.exit.text+0x8): undefined reference to `i2c_del_driver'

    Add SND_SOC_I2C_AND_SPI dependency to fix this.

    Fixes: ea00d95200d02ece ("ASoC: Use imply for SND_SOC_ALL_CODECS")
    Reported-by: Hulk Robot
    Signed-off-by: YueHaibing
    Acked-by: Charles Keepax
    Link: https://lore.kernel.org/r/20200420125343.20920-1-yuehaibing@huawei.com
    Signed-off-by: Mark Brown

    YueHaibing
     
  • …as.blankertz@cetitec.com>:

    Fix rsnd_dai_call() operations being performed twice for the master SSI
    in multi-SSI setups, and fix the rsnd_ssi_stop operation for multi-SSI
    setups.
    The only visible effect of these issues was some "status check failed"
    spam when the rsnd_ssi_stop was called, but overall the code is cleaner
    now, and some questionable writes to the SSICR register which did not
    lead to any observable misbehaviour but were contrary to the datasheet
    are fixed.

    Mark:
    The first patch kind of reverts my "ASoC: rsnd: Fix parent SSI
    start/stop in multi-SSI mode" from a few days ago and achieves the same
    effect in a simpler fashion, if you would prefer a clean patch series
    based on v5.6 drop me a note.

    Greetings,
    Matthias

    Matthias Blankertz (2):
    ASoC: rsnd: Don't treat master SSI in multi SSI setup as parent
    ASoC: rsnd: Fix "status check failed" spam for multi-SSI

    sound/soc/sh/rcar/ssi.c | 18 +++++++++++++-----
    1 file changed, 13 insertions(+), 5 deletions(-)

    base-commit: 15a5760cb8b6d5c1ebbf1d2e1f0b77380ab68a82
    --
    2.26.1

    Mark Brown
     
  • This patchset fixes the problem reported by Marc in this thread [0]
    The problem was due to an error in the meson card drivers which had
    the "no_pcm" dai_link property set on codec-to-codec links

    [0]: https://lore.kernel.org/r/20200417122732.GC5315@sirena.org.uk

    Jerome Brunet (2):
    ASoC: meson: axg-card: fix codec-to-codec link setup
    ASoC: meson: gx-card: fix codec-to-codec link setup

    sound/soc/meson/axg-card.c | 4 +++-
    sound/soc/meson/gx-card.c | 4 +++-
    2 files changed, 6 insertions(+), 2 deletions(-)

    --
    2.25.2

    Mark Brown
     
  • snd_soc_dapm_kcontrol widget which is created by autodisable control
    should contain correct on_val, mask and shift because it is set when the
    widget is powered and changed value is applied on registers by following
    code in dapm_seq_run_coalesced().

    mask |= w->mask << w->shift;
    if (w->power)
    value |= w->on_val << w->shift;
    else
    value |= w->off_val << w->shift;

    Shift on the mask in dapm_kcontrol_data_alloc() is removed to prevent
    double shift.
    And, on_val in dapm_kcontrol_set_value() is modified to get correct
    value in the dapm_seq_run_coalesced().

    Signed-off-by: Gyeongtaek Lee
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/000001d61537$b212f620$1638e260$@samsung.com
    Signed-off-by: Mark Brown

    Gyeongtaek Lee
     
  • Fix the rsnd_ssi_stop function to skip disabling the individual SSIs of
    a multi-SSI setup, as the actual stop is performed by rsnd_ssiu_stop_gen2
    - the same logic as in rsnd_ssi_start. The attempt to disable these SSIs
    was harmless, but caused a "status check failed" message to be printed
    for every SSI in the multi-SSI setup.
    The disabling of interrupts is still performed, as they are enabled for
    all SSIs in rsnd_ssi_init, but care is taken to not accidentally set the
    EN bit for an SSI where it was not set by rsnd_ssi_start.

    Signed-off-by: Matthias Blankertz
    Acked-by: Kuninori Morimoto
    Link: https://lore.kernel.org/r/20200417153017.1744454-3-matthias.blankertz@cetitec.com
    Signed-off-by: Mark Brown

    Matthias Blankertz
     
  • The master SSI of a multi-SSI setup was attached both to the
    RSND_MOD_SSI slot and the RSND_MOD_SSIP slot of the rsnd_dai_stream.
    This is not correct wrt. the meaning of being "parent" in the rest of
    the SSI code, where it seems to indicate an SSI that provides clock and
    word sync but is not transmitting/receiving audio data.

    Not treating the multi-SSI master as parent allows removal of various
    special cases to the rsnd_ssi_is_parent conditions introduced in commit
    a09fb3f28a60 ("ASoC: rsnd: Fix parent SSI start/stop in multi-SSI mode").
    It also fixes the issue that operations performed via rsnd_dai_call()
    were performed twice for the master SSI. This caused some "status check
    failed" spam when stopping a multi-SSI stream as the driver attempted to
    stop the master SSI twice.

    Signed-off-by: Matthias Blankertz
    Acked-by: Kuninori Morimoto
    Link: https://lore.kernel.org/r/20200417153017.1744454-2-matthias.blankertz@cetitec.com
    Signed-off-by: Mark Brown

    Matthias Blankertz
     
  • Since the addition of commit 9b5db059366a ("ASoC: soc-pcm: dpcm: Only allow
    playback/capture if supported"), meson-axg cards which have codec-to-codec
    links fail to init and Oops.

    Unable to handle kernel NULL pointer dereference at virtual address 0000000000000128
    Internal error: Oops: 96000044 [#1] PREEMPT SMP
    CPU: 3 PID: 1582 Comm: arecord Not tainted 5.7.0-rc1
    pc : invalidate_paths_ep+0x30/0xe0
    lr : snd_soc_dapm_dai_get_connected_widgets+0x170/0x1a8
    Call trace:
    invalidate_paths_ep+0x30/0xe0
    snd_soc_dapm_dai_get_connected_widgets+0x170/0x1a8
    dpcm_path_get+0x38/0xd0
    dpcm_fe_dai_open+0x70/0x920
    snd_pcm_open_substream+0x564/0x840
    snd_pcm_open+0xfc/0x228
    snd_pcm_capture_open+0x4c/0x78
    snd_open+0xac/0x1a8
    ...

    While this error was initially reported the axg-card type, it also applies
    to the gx-card type.

    While initiliazing the links, ASoC treats the codec-to-codec links of this
    card type as a DPCM backend. This error eventually leads to the Oops.

    Most of the card driver code is shared between DPCM backends and
    codec-to-codec links. The property "no_pcm" marking DCPM BE was left set on
    codec-to-codec links, leading to this problem. This commit fixes that.

    Fixes: e37a0c313a0f ("ASoC: meson: gx: add sound card support")
    Signed-off-by: Jerome Brunet
    Link: https://lore.kernel.org/r/20200420114511.450560-3-jbrunet@baylibre.com
    Signed-off-by: Mark Brown

    Jerome Brunet
     
  • Since the addition of commit 9b5db059366a ("ASoC: soc-pcm: dpcm: Only allow
    playback/capture if supported"), meson-axg cards which have codec-to-codec
    links fail to init and Oops:

    Unable to handle kernel NULL pointer dereference at virtual address 0000000000000128
    Internal error: Oops: 96000044 [#1] PREEMPT SMP
    CPU: 3 PID: 1582 Comm: arecord Not tainted 5.7.0-rc1
    pc : invalidate_paths_ep+0x30/0xe0
    lr : snd_soc_dapm_dai_get_connected_widgets+0x170/0x1a8
    Call trace:
    invalidate_paths_ep+0x30/0xe0
    snd_soc_dapm_dai_get_connected_widgets+0x170/0x1a8
    dpcm_path_get+0x38/0xd0
    dpcm_fe_dai_open+0x70/0x920
    snd_pcm_open_substream+0x564/0x840
    snd_pcm_open+0xfc/0x228
    snd_pcm_capture_open+0x4c/0x78
    snd_open+0xac/0x1a8
    ...

    While initiliazing the links, ASoC treats the codec-to-codec links of this
    card type as a DPCM backend. This error eventually leads to the Oops.

    Most of the card driver code is shared between DPCM backends and
    codec-to-codec links. The property "no_pcm" marking DCPM BE was left set on
    codec-to-codec links, leading to this problem. This commit fixes that.

    Fixes: 0a8f1117a680 ("ASoC: meson: axg-card: add basic codec-to-codec link support")
    Signed-off-by: Jerome Brunet
    Link: https://lore.kernel.org/r/20200420114511.450560-2-jbrunet@baylibre.com
    Signed-off-by: Mark Brown

    Jerome Brunet
     
  • TRX40 mobos from MSI and others with ALC1220-VB USB-audio device need
    yet more quirks for the proper control names.

    This patch provides the mapping table for those boards, correcting the
    FU names for volume and mute controls as well as the terminal names
    for jack controls. It also improves build_connector_control() not to
    add the directional suffix blindly if the string is given from the
    mapping table.

    With this patch applied, the new UCM profiles will be effective.

    BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=206873
    Link: https://lore.kernel.org/r/20200420062036.28567-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai

    Takashi Iwai
     
  • The commit 3c6fd1f07ed0 ("ALSA: hda: Add driver blacklist") added a
    new blacklist for the devices that are known to have empty codecs, and
    one of the entries was ASUS ROG Zenith II (PCI SSID 1043:874f).
    However, it turned out that the very same PCI SSID is used for the
    previous model that does have the valid HD-audio codecs and the change
    broke the sound on it.

    This patch reverts the corresponding entry as a temporary solution.
    Although Zenith II and co will see get the empty HD-audio bus again,
    it'd be merely resource wastes and won't affect the functionality,
    so it's no end of the world. We'll need to address this later,
    e.g. by either switching to DMI string matching or using PCI ID &
    SSID pairs.

    Fixes: 3c6fd1f07ed0 ("ALSA: hda: Add driver blacklist")
    Reported-by: Johnathan Smithinovic
    Cc:
    Link: https://lore.kernel.org/r/20200419071926.22683-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai

    Takashi Iwai
     

19 Apr, 2020

2 commits

  • The commit 1c76aa5fb48d ("ALSA: hda/realtek - Allow skipping
    spec->init_amp detection") changed the way to assign spec->init_amp
    field that specifies the way to initialize the amp. Along with the
    change, the commit also replaced a few fixups that set spec->init_amp
    in HDA_FIXUP_ACT_PROBE with HDA_FIXUP_ACT_PRE_PROBE. This was rather
    aligning to the other fixups, and not supposed to change the actual
    behavior.

    However, this change turned out to cause a regression on FSC S7020,
    which hit exactly the above. The reason was that there is still one
    place that overrides spec->init_amp after HDA_FIXUP_ACT_PRE_PROBE
    call, namely in alc_ssid_check().

    This patch fixes the regression by adding the proper spec->init_amp
    override check, i.e. verifying whether it's still ALC_INIT_UNDEFINED.

    Fixes: 1c76aa5fb48d ("ALSA: hda/realtek - Allow skipping spec->init_amp detection")
    Cc:
    BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=207329
    Link: https://lore.kernel.org/r/20200418190639.10082-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai

    Takashi Iwai
     
  • Many Focusrite devices supports a limited set of sample rates per
    altsetting. These includes audio interfaces with ADAT ports:
    - Scarlett 18i6, 18i8 1st gen, 18i20 1st gen;
    - Scarlett 18i8 2nd gen, 18i20 2nd gen;
    - Scarlett 18i8 3rd gen, 18i20 3rd gen;
    - Clarett 2Pre USB, 4Pre USB, 8Pre USB.

    Maximum rate is exposed in the last 4 bytes of Format Type descriptor
    which has a non-standard bLength = 10.

    Tested-by: Alexey Skobkin
    Signed-off-by: Alexander Tsoy
    Cc:
    Link: https://lore.kernel.org/r/20200418175815.12211-1-alexander@tsoy.me
    Signed-off-by: Takashi Iwai

    Alexander Tsoy
     

18 Apr, 2020

3 commits

  • Major regressions were detected by SOF CI on CherryTrail and Broadwell:

    [ 25.705750] SSP2-Codec: ASoC: no backend playback stream
    [ 27.923378] SSP2-Codec: ASoC: no users playback at close - state

    This is root-caused to the introduction of the DAI capability checks
    with snd_soc_dai_stream_valid(). Its use in soc-pcm.c makes it a
    requirement for all DAIs to report at least a non-zero min_channels
    field.

    For some reason the SSP structures used for SKL+ did provide this
    information but legacy platforms didn't.

    Fixes: 9b5db059366ae2 ("ASoC: soc-pcm: dpcm: Only allow playback/capture if supported")
    Signed-off-by: Pierre-Louis Bossart
    Reviewed-by: Ranjani Sridharan
    Reviewed-by: Kai Vehmanen
    Link: https://lore.kernel.org/r/20200417172014.11760-1-pierre-louis.bossart@linux.intel.com
    Signed-off-by: Mark Brown

    Pierre-Louis Bossart
     
  • pcm config must be set before snd_dmaengine_pcm_register() call.

    Fixes: 0d6defc7e0e4 ("ASoC: stm32: sai: manage rebind issue")

    Signed-off-by: Olivier Moysan
    Link: https://lore.kernel.org/r/20200417142122.10212-1-olivier.moysan@st.com
    Signed-off-by: Mark Brown

    Olivier Moysan
     
  • Pull sound fixes from Takashi Iwai:
    "One significant regression fix is for HD-audio buffer preallocation.
    In 5.6 it was set to non-prompt for x86 and forced to 0, but this
    turned out to be problematic for some applications, hence it gets
    reverted. Distros would need to restore CONFIG_SND_HDA_PREALLOC_SIZE
    value to the earlier values they've used in the past.

    Other than that, we've received quite a few small fixes for HD-audio
    and USB-audio. Most of them are for dealing with the broken TRX40
    mobos and the runtime PM without HD-audio codecs"

    * tag 'sound-5.7-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
    ALSA: hda: call runtime_allow() for all hda controllers
    ALSA: hda: Allow setting preallocation again for x86
    ALSA: hda: Explicitly permit using autosuspend if runtime PM is supported
    ALSA: hda: Skip controller resume if not needed
    ALSA: hda: Keep the controller initialization even if no codecs found
    ALSA: hda: Release resources at error in delayed probe
    ALSA: hda: Honor PM disablement in PM freeze and thaw_noirq ops
    ALSA: hda: Don't release card at firmware loading error
    ALSA: usb-audio: Check mapping at creating connector controls, too
    ALSA: usb-audio: Don't create jack controls for PCM terminals
    ALSA: usb-audio: Don't override ignore_ctl_error value from the map
    ALSA: usb-audio: Filter error from connector kctl ops, too
    ALSA: hda/realtek - Enable the headset mic on Asus FX505DT
    ALSA: ctxfi: Remove unnecessary cast in kfree

    Linus Torvalds
     

17 Apr, 2020

1 commit

  • As the recent regression showed, we want sometimes to turn off the
    audio component binding just for debugging. This patch adds the
    module option to control it easily without compilation.

    Fixes: ade49db337a9 ("ALSA: hda/hdmi - Allow audio component for AMD/ATI and Nvidia HDMI")
    BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=207223
    Cc:
    Link: https://lore.kernel.org/r/20200415162523.27499-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai

    Takashi Iwai
     

16 Apr, 2020

5 commits

  • …s Blankertz <matthias.blankertz@cetitec.com>:

    This fixes two issues in the snd-soc-rcar driver blocking multichannel
    HDMI audio out: The parent SSI in a multi-SSI configuration is not
    correctly set up and started, and the SSI->HDMI channel mapping is
    wrong.

    With these patches, the following device tree snippet can be used on an
    r8a7795-based platform (Salvator-X) to enable multichannel HDMI audio on
    HDMI0:

    rsnd_port1: port@1 {
    rsnd_endpoint1: endpoint {
    remote-endpoint = <&dw_hdmi0_snd_in>;

    dai-format = "i2s";
    bitclock-master = <&rsnd_endpoint1>;
    frame-master = <&rsnd_endpoint1>;

    playback = <&ssi0 &ssi1 &ssi2 &ssi9>;
    };
    };

    With a capable receiver attached, all of 2ch (stereo), 6ch (e.g. 5.1)
    and 8ch audio output should work.

    Matthias Blankertz (2):
    ASoC: rsnd: Fix parent SSI start/stop in multi-SSI mode
    ASoC: rsnd: Fix HDMI channel mapping for multi-SSI mode

    sound/soc/sh/rcar/ssi.c | 8 ++++----
    sound/soc/sh/rcar/ssiu.c | 2 +-
    2 files changed, 5 insertions(+), 5 deletions(-)

    base-commit: 7111951b8d4973bda27ff663f2cf18b663d15b48
    --
    2.26.0

    Mark Brown
     
  • If we don't find any pcm, pcm will point at address at an offset from
    the the list head and not a meaningful structure. Fix this by returning
    correct pcm if found and NULL if not. Found with coccinelle.

    Signed-off-by: Amadeusz Sławiński
    Link: https://lore.kernel.org/r/20200415162849.308-1-amadeuszx.slawinski@linux.intel.com
    Signed-off-by: Mark Brown

    Amadeusz Sławiński
     
  • The HDMI?_SEL register maps up to four stereo SSI data lanes onto the
    sdata[0..3] inputs of the HDMI output block. The upper half of the
    register contains four blocks of 4 bits, with the most significant
    controlling the sdata3 line and the least significant the sdata0 line.

    The shift calculation has an off-by-one error, causing the parent SSI to
    be mapped to sdata3, the first multi-SSI child to sdata0 and so forth.
    As the parent SSI transmits the stereo L/R channels, and the HDMI core
    expects it on the sdata0 line, this causes no audio to be output when
    playing stereo audio on a multichannel capable HDMI out, and
    multichannel audio has permutated channels.

    Fix the shift calculation to map the parent SSI to sdata0, the first
    child to sdata1 etc.

    Signed-off-by: Matthias Blankertz
    Acked-by: Kuninori Morimoto
    Link: https://lore.kernel.org/r/20200415141017.384017-3-matthias.blankertz@cetitec.com
    Signed-off-by: Mark Brown

    Matthias Blankertz
     
  • The parent SSI of a multi-SSI setup must be fully setup, started and
    stopped since it is also part of the playback/capture setup. So only
    skip the SSI (as per commit 203cdf51f288 ("ASoC: rsnd: SSI parent cares
    SWSP bit") and commit 597b046f0d99 ("ASoC: rsnd: control SSICR::EN
    correctly")) if the SSI is parent outside of a multi-SSI setup.

    Signed-off-by: Matthias Blankertz
    Acked-by: Kuninori Morimoto
    Link: https://lore.kernel.org/r/20200415141017.384017-2-matthias.blankertz@cetitec.com
    Signed-off-by: Mark Brown

    Matthias Blankertz
     
  • On Baytrail/Cherrytrail, the Atom/SST driver fails miserably:

    [ 9.741953] intel_sst_acpi 80860F28:00: FW Version 01.0c.00.01
    [ 9.832992] intel_sst_acpi 80860F28:00: FW sent error response 0x40034
    [ 9.833019] intel_sst_acpi 80860F28:00: FW alloc failed ret -4
    [ 9.833028] intel_sst_acpi 80860F28:00: sst_get_stream returned err -5
    [ 9.833033] sst-mfld-platform sst-mfld-platform: ASoC: DAI prepare error: -5
    [ 9.833037] Baytrail Audio Port: ASoC: prepare FE Baytrail Audio Port failed
    [ 9.853942] intel_sst_acpi 80860F28:00: FW sent error response 0x40034
    [ 9.853974] intel_sst_acpi 80860F28:00: FW alloc failed ret -4
    [ 9.853984] intel_sst_acpi 80860F28:00: sst_get_stream returned err -5
    [ 9.853990] sst-mfld-platform sst-mfld-platform: ASoC: DAI prepare error: -5
    [ 9.853994] Baytrail Audio Port: ASoC: prepare FE Baytrail Audio Port failed

    Commit b56be800f1292 ("ASoC: soc-pcm: call
    snd_soc_dai_startup()/shutdown() once") was the initial problematic
    commit.

    Commit 1ba616bd1a6d5e ("ASoC: soc-dai: fix DAI startup/shutdown sequence")
    was an attempt to fix things but it does not work on Baytrail,
    reverting all changes seems necessary for now.

    Fixes: 1ba616bd1a6d5e ("ASoC: soc-dai: fix DAI startup/shutdown sequence")
    Signed-off-by: Pierre-Louis Bossart
    Tested-by: Hans de Goede
    Link: https://lore.kernel.org/r/20200415030437.23803-1-pierre-louis.bossart@linux.intel.com
    Signed-off-by: Mark Brown

    Pierre-Louis Bossart