summaryrefslogtreecommitdiff
path: root/sound/soc/intel
AgeCommit message (Collapse)Author
8 daysMerge tag 'sound-7.4-rc1' of ↵Linus Torvalds
git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound updates from Takashi Iwai: "The AI flood continues, which brought us a fairly busy development cycle again with changes spread across the subsystem, ranging from (lots of) core hardening to new platforms and codecs. Here are some highlights. ALSA core: - PCM: race fixes around channel-map controls, draining/unlink, drop sync-stop handling, and DMA buffer delay sync - Compress-offload: state and geometry validations, buffer leak fix, and stream/card lifetime management - Jack: module pinning during debugfs access, control removal race fix, and early injection exposure - Timer & sequencer: module pinning for user timers, RCU grace period wait on port deletion, UMP bounds fixes - Mark OSS sequencer emulation as deprecated - RawMIDI: proper disconnect handling and input work drain cleanup - Control: fixes for vmaster racy setups and control callback serialization, UAF fix on card disconnect ASoC core: - Continued framework refactoring, deployment of auto_selectable_formats across codecs and platform DAIs - Generic card cleanup: free jack GPIOs on card remove for simple-card and audio-graph-card variants - SDCA improvements: SimpleJack function type support, library helpers, and non-ACPI build support - Conversion of deprecated DMA API calls ASoC SOF: - Support for compressed audio playback on SOF IPC4 with Intel TGL+ - AMD ACP 7.B / 7.F SoundWire and PDM controller support, ASP carveout firmware loading - Function topology support for Intel I2S machines ASoC platforms & codecs: - Qualcomm: New QAIF driver for Shikra platform, WCD9378 SDCA codec, Nord Ride/RRD and Motorola Edge 30 boards, LPASS macro cache converted to maple tree - New codec drivers: ESS ES9039Q2M, Nuvoton NAU83G60 amplifier, Senary SN624x SoundWire SDCA codec - MediaTek / Airoha: New Airoha AN7581 AFE and WM8960 machine drivers, extensive clock and error-handling cleanups across MediaTek SoCs - NVIDIA Tegra: WM8994 machine driver and CS35L45 MDSYNC support - Realtek: RT766/RT767, RT721_U, RT718 variants, RT712 GPIO LED control - Cirrus Logic: CS35L45 MDSYNC support, CS35L56 regmap default tests - TI: TAS2573 DSP support in TAS2781, TAS2783 SoundWire fixes - Everest Semi: ES8326 standby / HPF controls, ES8389 / ES8375 resume fixes - Removal of obsolete ST-Ericsson Ux500 MOP500 machine driver HD-audio: - ACPI controller runtime PM suspend/resume support - Controller shutdown and unbind race fixes for unsol events and jack polling - HDMI: High Bit Rate (HBR) audio capability enabled, ELD proc and converter bounds checks - AW88399 side codec SSID-specific firmware naming and Lenovo Legion R9000P enablement - Realtek / Conexant / Cirrus / TI quirks for numerous laptops (Lenovo, ASUS, HP, Acer, HONOR, Minisforum, MSI, etc.) - Creative CA0132 Sound BlasterX AE-5 external RGB LED strip support USB-audio: - Dedicated mixer driver for Audient EVO4 - Native Instruments Kore controller LCD support and keymap fix - Pioneer DJ DDJ-SZ and Roland (OCTA-CAPTURE / QUAD-CAPTURE multirate, TD-11) support - UAC2/3 mixer unit matrix evaluation and bounds checking - Hardening for LINE6 and caiaq drivers against malformed packets and races - Device-specific quirks for PreSonus, TASCAM, Logitech, Mayflower, MOONDROP, Yamaha, etc. Misc: - Auto-cleanup conversion for snd_card_free() and devres migration across dozens of legacy PCI, ISA, and Sparc drivers - ALSA loopback (aloop) timer lifecycle fixes and new aloop selftest - pcmtest driver fixes and kselftest updates" * tag 'sound-7.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (924 commits) ALSA: hda/realtek: Add mute and mic-mute LEDs for HP ENVY 16 (103c:8be5) selftests: ALSA: pcmtest: Compare all captured bytes in ni_capture ALSA: usb-audio: Use strscpy() in append_ctl_name() ALSA: caiaq: Use strscpy() in snd_usb_caiaq_input_init() ALSA: hiface: Use scnprintf() in hiface_chip_create() selftests/alsa: Check the aloop PCM Slave controls for a matching playback ALSA: aloop: Update the PCM Slave controls for a matching playback selftests: ALSA: pcmtest: Make room for the longest fill pattern selftests: ALSA: pcmtest: Check the frame count of each transfer ALSA: hda/realtek: Fix speakers on COLORFUL L1 Plus ALSA: hda/realtek: enable AW88399 on Lenovo Legion R9000P AFR10 ALSA: line6: Handle period elapsed calls outside the locks ALSA: emux: Stop voices before freeing zones in all cases ALSA: emux: Fix UAF of soundfont zones at note-on ALSA: mtpav: restore negation dropped in guard() conversion ALSA: compress: reject restarting an ACTIVE task via origin_seqno ALSA: compress: add missing OPEN-state gate to SET_METADATA ALSA: compress: reject buffer geometry change on gapless next_track ALSA: compress: fix buffer leak on failed SET_PARAMS ALSA: hda/realtek: Enable jack detection on Minisforum AI X1 ...
11 daysMerge tag 'acpi-7.4-rc1' of ↵Linus Torvalds
git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm Pull ACPI support updates from Rafael Wysocki: "The most significant change here is the rework of the core ACPI device enumeration code to avoid initializing ACPI power management prematurely for devices with unmet dependencies. This essentially is a problem fix, but it requires taking PCI device enumeration ordering into account among other things, so it is far from straightforward. There was an attempt to do this in the 7.3 time frame that had to be reverted, so this time it is done much more carefully. There is also an ACPI thermal control update rearranging the code to register thermal class cooling devices under specific parents, which is visible in sysfs. This helps to figure out what is represented by those devices much more easily, but it also allows the binding of cooling devices to trip points in thermal zones to be adjusted so it need not rely on specific cooling device data usage in thermal drivers. From the number of commits perspective, the most visible part is the one replacing acpi_get_first_physical_node() with acpi_bus_get_primary_device() everywhere and dropping the former that was inherently racy and generally unsafe to use. Fortunately, the maintainers involved responded timely and all of that could be done within one development cycle. Another quite visible part is Dave Jiang's series fixing multiple issues reported by Sashiko in the ACPI APEI support code with a PCI AER improvement on top. It took several iterations of this to make Sashiko happy and the code in question should be much more robust going forward. One other thing worth mentioning separately is that the ACPI bus type is now going to be registered as a "companion" one and it will not be possible to register a driver binding directly to a struct acpi_device. All of the existing users of those drivers in the tree were converted to platform drivers in the previous cycles, so this is just a final step in a longer journey. Apart from the above, there are many fixes, mostly in drivers, with a noticeable exception of a fix in the code binding devices to their ACPI companions, new IOVT IOMMU support in ACPICA, new _Ixx object support for suspend-to-idle on x86, multiple new quirks, mostly related to unused ACPI power resources and backlight handling, and assorted cleanups. Specifics: - Make the core ACPI device enumeration code stop attempting to initialize ACPI power management for devices before they are known to be present and functional (Rafael Wysocki) - Simplify and clean up the core ACPI device enumeration code on top of the previous adjustment and reduce debug noise coming from it (Rafael Wysocki) - Fix locking in the code binding devices to their ACPI companions, prevent it from replacing a valid ACPI companion pointer with NULL incidentally, improve its messaging (including debug noise reduction), and reduce its overhead by making it skip the cases in which no ACPI companion may exist early (Rafael Wysocki) - Reduce runtime memory footprint of struct acpi_device by rearranging fields in it (Andy Shevchenko) - Update the driver core to allow bus types without drivers to be registered as "companion bus types" without driver-related sysfs attributes and register the ACPI bus type as a companion one (Rafael Wysocki) - Use strscpy() instead of strcpy() in the ACPI sysfs interface (Ruslan Vagner) - Remove __meminitdata from hmat_adist_nb declaration preserving it even when CONFIG_MEMORY_HOTPLUG is not set to prevent notifier chain corruption in some cases (Alejandro Lucero) - Prevent a NULL pointer dereference when attempting to read the table length after a mapping bookkeeping failure during an initrd override invocation with permanent table mappings enabled (Slavin Liu) - Use for_each_populated_zone() in get_node_num() in the MRRM table pareser (Sang-Heon Jeon) - Use vsnprintf() in acpi_os_vprintf() to prevent memory corruption resulting from overly long diagnostic messages that may not fit into a static buffer used by ACPICA and may be produced by a malformed ACPI table (Vlatko Kosturjak) - Ignore leading root scope prefix in string _UID match to allow AMD IOMMU matching to work as expected in some cases (Mario Limonciello) - Adjust message printing macros for ACPI objects to use dev_fmt() for more consistency with the analogous dev_*() macros (Rafael Wysocki) - Add _Ixx GPE wake indicator support to the x86 suspend-to-idle handling code (Saranya Gopal) - Clear driver_data before free in the ACPI PCI Link driver to prevent a dangling pointer from being used later (Jiale Yao) - Accumulate the queued flag across error sections of a CPER record in ghes_do_proc() to prevent it from being cleared by a later section or entry that does not queue memory-failure work (Breno Leitao) - Map a raw PCI AER Capability image field by field to prevent information loss from occurring while processing it (Dave Jiang) - Update a stale driver source reference in the ACPI APEI EINJ driver documentation (Prabhakar Pujeri) - Reject CPER records with an out-of-range error_data_length or an error status block length wrapping a u32 in the EFI CPER driver (Dave Jiang) - Address multiple assorted issues in the ACPI extlog driver (Dave Jiang) - Address two issues related to CXL in the ACPI APEI GHES driver (Dave Jiang) - Read only validated fields in cper_mem_err_pack() (Dave Jiang) - Validate memory error section length before payload access, prevent writes past array bounds from occurring and sanitize software metadata in the ACPI APEI GHES driver (Dave Jiang) - Make cxl_cper_handle_prot_err() static (Dave Jiang) - Add IOVT IOMMU support to ACPICA (Bibo Mao) - Fix PCC OperationRegion command offsets in ACPICA (Sudeep Holla) - Fix memory leak in acpi_ds_create_field() related to the handling of internal_pcc_buffer allocations (Breno Leitao) - Fix memory leak due to leftover devm_kcalloc() argument in the ACPI fan driver (Rafael Wysocki) - Fix backlight unregistration ordering in the ACPI video bus device driver (Rafael Wysocki) - Update the thermal core to allow the registration of thermal class cooling devices under specific parents and convert the ACPI fan, ACPI processor, and ACPI video bus device drivers to do so (Rafael Wysocki) - Adjust the ACPI thermal zone driver to use thermal class cooling device parent information for binding cooling devices to trip points in thermal zones (Rafael Wysocki) - Use cooling device data that is a better match for a given driver instead of a struct acpi_device pointer that had to be used for this purpose previously in the ACPI fan and processor drivers (Rafael Wysocki) - Fix acpi_thermal_guess_offset() in the ACPI thermal zone driver for thermal zone devices with a 273.0°K offset (Hans de Goede) - Define a free for ACPI objects allocated by ACPICA helpers and use it to simplify AML error handling in the ACPI fan driver (Rafael Wysocki) - Switch over the users of acpi_get_first_physical_node(), that was inherently racy and therefore not really safe to use, to use its replacement acpi_bus_get_primary_device(), and eliminate the former (Rafael Wysocki) - Add !CONFIG_ACPI stubs for acpi_find_child_device() and acpi_device_uid() (Mario Limonciello and Robin Murphy) - Fix bogus cycle count values on systems without _BIX in the ACPI battery driver (Armin Wolf) - Fix NULL pointer dereference on allocation failure and report relative state of charge as CAPACITY in the ACPI SBS driver (Itay Shem-tov and Guangshuo Li) - Add lid_init_state quirk for Razer Blade Stealth 13 (Early 2020) RZ09-0310 to the ACPI button driver (Ian Gallagher) - Add new quirks to force the native backlight on Dell OptiPlex AIO 7410 35W and Acer Nitro AN515-58 in the ACPI video bus device driver (Chitransh Mandhaniya and Dirga Yuza) - Fix the shared memory signature handling in the ACPI PCC address space handler, free the PCC mailbox channel on operation region deactivation, and avoid unnecessary repeated computations of the PCC operation region command timeout (Sudeep Holla) - Fix a log message typo in the ACPI NUMA support code (Hemanth Selam) - Zero-initialize capability query result in the ACPI Platform Firmware Runtime Update and Telemetry driver to avoid disclosure of kernel stack data to user space (Karl Mehltretter) - Replace the remaining built-in/module check for CONFIG_ACPI_WMI in a header file with IS_ENABLED() macro (Lalit Shankar Chowdhury) - Retry probing battery docks after hotplug in the ACPI docking station driver to avoid missing ACPI add notifications (Vibhor Goel) - Detach device after resource transition failure in pnp_device_probe() to avoid blocking later manual PNP configuration attempts (Myeonghun Pak)" * tag 'acpi-7.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (90 commits) ACPI: PM: Add Acer Aspire A515-53G to dmi_leave_unused_power_resources_on[] ACPI: video: force native backlight on Dell OptiPlex AIO 7410 35W ACPI: PM: sleep: Drop unused sleep_no_lps0 define ACPI: PM: Add unused power resource quirk for Casper Excalibur G900 ACPI: dock: Retry probing battery docks after hotplug ACPI: PCI: pci_link: clear driver_data before free ACPI: APEI: accumulate the queued flag across error sections ACPICA: actbl2.h: Add bit constants of the Flags field in the IOVT IOMMU structure ACPI: bus: Drop acpi_get_first_physical_node() efi/dev-path-parser: Switch to use acpi_bus_get_primary_device() ALSA: hda: tas2781: Switch to use acpi_bus_get_primary_device() ALSA: hda: cs35l41: Switch to use acpi_bus_get_primary_device() iommu/arm-smmu-v3: Switch to use acpi_bus_get_primary_device() PCI/AER: Map a raw AER Capability image field by field ACPI: NUMA: fix typo in log message ACPI: Add stub for acpi_find_child_device() driver core/ACPI: Introduce companion_bus_register() ACPI: PCC: Cache OpRegion command timeout ACPI: PCC: Free channel on OpRegion deactivation ACPI: PCC: Preserve shared memory signature in OpRegion handler ...
14 daysMerge branch 'acpi-driver'Rafael J. Wysocki
Merge changes related to ACPI support in device drivers for 7.4: - Switch over the users of acpi_get_first_physical_node(), that was inherently racy and therefore not really safe to use, to use its replacement acpi_bus_get_primary_device(), and eliminate the former (Rafael Wysocki) - Add !CONFIG_ACPI stubs for acpi_find_child_device() and acpi_device_uid() (Mario Limonciello and Robin Murphy) * acpi-driver: ACPI: bus: Drop acpi_get_first_physical_node() efi/dev-path-parser: Switch to use acpi_bus_get_primary_device() ALSA: hda: tas2781: Switch to use acpi_bus_get_primary_device() ALSA: hda: cs35l41: Switch to use acpi_bus_get_primary_device() iommu/arm-smmu-v3: Switch to use acpi_bus_get_primary_device() ACPI: Add stub for acpi_find_child_device() ACPI: bus: Provide !ACPI stub for acpi_device_uid() ALSA: hda: aw88399: Switch to use acpi_bus_get_primary_device() ASoC: loongson: Switch to use acpi_bus_get_primary_device() ASoC: intel: boards: Switch to use acpi_bus_get_primary_device() ASoC: amd: acp3x-es83xx: Switch to use acpi_bus_get_primary_device() ASoC: amd: acp-es8336: Switch to use acpi_bus_get_primary_device() thunderbolt: Switch to use acpi_bus_get_primary_device() platform/x86: apple-gmux: Switch to use acpi_bus_get_primary_device() platform/x86: x86-android-tablets: Use acpi_bus_get_primary_device() platform/x86: serdev_helpers: Switch to use acpi_bus_get_primary_device() platform/x86: yogabook: Switch to use acpi_bus_get_primary_device() ACPI: amba: Switch to use acpi_bus_get_primary_device() ACPI: bus: Use acpi/acpi_bus.h without CONFIG_ACPI
2026-10-16ASoC: Address remaining PCM constraint issuesMark Brown
bui duc phuc <phucduc.bui@gmail.com> says: Since v1 has already been applied, this series provides incremental changes to address the remaining items from v2: - Add comments explaining why .open() and .startup() must return 0 on success to prevent the issue from being reintroduced. - Add Reviewed-by tags from Vijendar Mukunda and Chancel Liu, and Acked-by tags from Morimoto-san and Cezary. - Remove redundant integer constraints already applied by snd_dmaengine_pcm_open(). Link v1: https://lore.kernel.org/all/20261008103831.542533-1-phucduc.bui@gmail.com/ Link v2: https://lore.kernel.org/all/20261015014324.5569-1-phucduc.bui@gmail.com/ Compile-tested only. Link: https://patch.msgid.link/20261016040946.521195-1-phucduc.bui@gmail.com
2026-10-16ASoC: intel: atom: Explain DAI startup return value handlingbui duc phuc
Add a comment explaining why .startup() must return 0 on success to ensure proper rollback handling and prevent future changes from reintroducing the issue. Acked-by: Cezary Rojewski <cezary.rojewski@intel.com> Signed-off-by: bui duc phuc <phucduc.bui@gmail.com> Link: https://patch.msgid.link/20261016040946.521195-7-phucduc.bui@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-10-15ASoC: Intel: avs: Fix for recovery procedure and new size-checksMark Brown
Cezary Rojewski <cezary.rojewski@intel.com> says: The first change addresses XRUN recovery for HDA-Link i.e.: BackEnd side of a HDAudio stream. It is the BE side equivalent of job done previously for FE side only with commit cfca1637bc2b ("ASoC: Intel: avs: Unprepare a stream when XRUN occurs") and its follow up titled: ("ASoC: Intel: avs: Reset the stream unless it is already prepared") [1]. The next fix problems found by static analyzers. Additional size checks for topology and a fix for module underflow should a DSP-module be unloaded on the DSP side in unexpected fashion. Theoretically that's not possible without a corrupted firmware, but the if-statement is already there, just a dev_warn() though. [1]: https://lore.kernel.org/linux-sound/20261010103753.16969-1-stiraspo@gmail.com/ Link: https://patch.msgid.link/20261015190240.729793-1-cezary.rojewski@intel.com
2026-10-15ASoC: Intel: avs: Prevent module info underflowCezary Rojewski
Typically modules information is first initialized when loading the base AudioDSP base firmware and then expanded when loadable DSP modules are requested by platform-components, see avs_component_load_libraries(). While theoretically not possible in a production scenario, there is no reason to continue the IDAs preparation if an event caused the newly obtained module information to be smaller or equal than the existing information. Fixes: c1a427e8da93 ("ASoC: Intel: avs: Firmware resources management utilities") Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20261015190240.729793-4-cezary.rojewski@intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-10-15ASoC: Intel: avs: Verify sizes of configs coming from topologyCezary Rojewski
Before operating on the init_config or NHLT-blob entries check whether their sizes are within bounds of the block being parsed. Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20261015190240.729793-3-cezary.rojewski@intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-10-15ASoC: Intel: avs: Unprepare a stream when recovery occursCezary Rojewski
Recovery on alsa-lib side is handled with either: 1) snd_pcm_prepare(state=XRUN) 2) snd_pcm_drop/drain() -> snd_pcm_prepare(state=SETUP) before starting the PCM anew. Relying solely on state=XRUN leaves 2) unaccounted for. sound/core/pcm_native.c ensures correctness of the state machine so plain state!=PREPARED check suffices. This is the BE equivalent of job done previously for FE side only with commit cfca1637bc2b ("ASoC: Intel: avs: Unprepare a stream when XRUN occurs") and its follow up titled: ("ASoC: Intel: avs: Reset the stream unless it is already prepared"). Link: https://lore.kernel.org/linux-sound/20261010103753.16969-1-stiraspo@gmail.com/T/ Fixes: d070002a20fc ("ASoC: Intel: avs: HDA PCM BE operations") Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20261015190240.729793-2-cezary.rojewski@intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-10-13ASoC: SOF/amd: ACP7.B support and ASP carveout firmware loadingMark Brown
Vijendar Mukunda <Vijendar.Mukunda@amd.com> says: This series adds ACP7.B platform support to the AMD SOF driver stack and implements the ASP-authenticated firmware load path required by both ACP7.B and ACP7.F. Patches 1-2 are preparatory renames and restructuring. The existing acp7x machine table and chip descriptor are renamed to acp7f to accurately reflect the hardware they target (ACP7.F). The probe callback is restructured to select the per-revision descriptor via a dedicated static pci_device_id entry rather than encoding it in driver_data of the shared ID table. Patches 3-4 add ACP7.B hardware support. Patch 3 adds the ACP7.B I2S machine table with its driver name, firmware image, and topology file. Patch 4 adds the acp7b chip descriptor and extends acp7x_pci_probe() to select it for ACP7B_PCI_ID revisions alongside the existing acp7f_desc path. Patch 5 propagates the PCI subsystem Vendor and Device IDs from the AMD SOF machine driver into mach_params, enabling downstream SDW machine drivers to use them as an SSID. Patch 6 is a cleanup: register variable declarations in the ACP7.x SDW wake and PME handlers are consolidated to u32. Patches 7-8 address PDM controller selection for ACP7.B/7.F. Patch 7 introduces acp-mach-common.h as a minimal shared header for types used across all AMD ACP machine driver variants (I2S, SoundWire, and SOF), and moves struct amd_pdm_pdata there from the SoundWire-specific soc_amd_sdw_common.h. Patch 8 fixes a gap in the SDW machine select path where pdm_sel was not propagated to the machine driver, preventing acp-sdw-sof-mach.c from configuring the correct DMIC DAI link on ACP7.B/7.F platforms. Patch 9 implements the two-stage ASP carveout firmware load path for ACP7.B and ACP7.F. At probe time the driver queries ASP for the physical base address and ATU group of a pre-allocated 32 MB MALL carveout region; probe fails immediately if ASP does not support carveout. At load time the signed firmware image is sent to ASP via the MPASP mailbox VALIDATE_IMAGE command. ASP authenticates the image and deposits the raw binary into the carveout; the driver then SHA-DMAs from the carveout into DSP IRAM. On D3->D0 resume the carveout content is preserved, so the ASP authentication step is skipped and the driver restores directly from the saved carveout address. Link: https://patch.msgid.link/20261013154644.3788064-1-Vijendar.Mukunda@amd.com
2026-10-13ASoC: Fix constraint return value handlingMark Brown
bui duc phuc <phucduc.bui@gmail.com> says: snd_pcm_hw_constraint_minmax() and snd_pcm_hw_constraint_integer() may return positive values on success. However, ASoC only marks the DAI, link, or component as started or opened when the corresponding callback returns 0. This series fixes affected ASoC drivers to return 0 on success and properly handle rollback paths. Found by manual code inspection. Compile-tested only. Link: https://patch.msgid.link/20261008103831.542533-1-phucduc.bui@gmail.com
2026-10-13ASoC: intel: atom: Fix .shutdown() being skipped on rollbackbui duc phuc
snd_pcm_hw_constraint_integer() may return 1, which is then returned from sst_media_open(). ASoC only marks the DAI as started when .startup() returns 0, so .shutdown() can be skipped on rollback. Return 0 explicitly on success. Fixes: 4889a8a73f65 ("ASoC: intel: atom: Use __free(kfree) for stream pointer") Fixes: 6cc0f4e63994 ("ASoC: Intel: mfld_pcm: move stream handling to dai_ops") Signed-off-by: bui duc phuc <phucduc.bui@gmail.com> Link: https://patch.msgid.link/20261008103831.542533-20-phucduc.bui@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-10-13Merge asoc/for-7.4 into asoc-nextMark Brown
2026-10-12ASoC: core: Create new components in sane stateMark Brown
Cezary Rojewski <cezary.rojewski@intel.com> says: There is a gap between snd_soc_component_alloc() and snd_soc_register_component(). A driver that obtains a component object through snd_soc_component_alloc() receives an object in uninitialized state. soc_component_initialize() is the function responsible for bringing it into a sane one but it is not accessible by the framework users. Example of the uninitialized members are the lists e.g.: comp->dai_list. The framework shall prevent manipulation of uninitialized components. Introduce snd_soc_component_new() which acts as a constructor: allocates and initializes the component object before returning it to the caller. Given the quite recent discussion related to all things component-register [1], decided to stick to the "register" wording and renamed soc_component_add() to snd_soc_component_register(). With that, register/unregister pattern is kept. At the same time, the update brings a clear division between: 1) snd_soc_component_register(component..) 2) snd_soc_register_component(dev..) A driver uses 1) when operating on pre-constructed component object explicitly and 2) when they want the ASoC framework to do everything for them. Parameter "name" is added to the ctor parameter list as it is one of the fields that is always initialized, see the 'if (!component->name)' within soc_component_initialize(). Private data on the other hand is not so opted out of including it. And thus snd_soc_component_set_priv() remains intact. [1]: https://lore.kernel.org/all/87y0f2rz8l.wl-kuninori.morimoto.gx@renesas.com/ Link: https://patch.msgid.link/20261007133353.455185-1-cezary.rojewski@intel.com
2026-10-12ASoC: Intel: avs: Switch to snd_snd_component_new()Cezary Rojewski
snd_soc_component_alloc() leaves the component object in uninitialized state. Switch to the constructor function to retrieve and operate on object in sane state. Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20261007133353.455185-7-cezary.rojewski@intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-10-12ASoC: Intel: catpt: Switch to snd_snd_component_new()Cezary Rojewski
snd_soc_component_alloc() leaves the component object in uninitialized state. Switch to the constructor function to retrieve and operate on object in sane state. Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20261007133353.455185-6-cezary.rojewski@intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-10-12ASoC: Intel: avs: Reset the stream unless it is already preparedSergey Tiraspolsky
Commit cfca1637bc2b ("ASoC: Intel: avs: Unprepare a stream when XRUN occurs") resets the HDA stream when ->prepare() is called in the XRUN state. User space does not always recover that way. PipeWire's ALSA backend recovers from an underrun with snd_pcm_drop(), snd_pcm_prepare() and a new start, so ->prepare() runs in the SETUP state, hdac_stream->prepared is still set and the reset is skipped. Every recovery attempt then fails the same way: spa.alsa: hw:avsmax98927,1p: snd_pcm_avail after recover: Broken pipe On a Google Pixelbook (Kaby Lake, max98927 speakers) this happens after an occasional underrun during normal playback and silences the speakers for one to four minutes, until the PCM is closed. It can be provoked by stopping PipeWire with SIGSTOP for 0.5 s during playback: in one run that single underrun led to 1297 failed recoveries over two minutes, until the sink was suspended. A plain alsa-lib program that recovers with snd_pcm_drop() and snd_pcm_prepare() hits the same loop, while snd_pcm_prepare() straight from XRUN recovers at once. Skip the reset only when the stream is already PREPARED, the repeated ->prepare() case the check exists for, and reset it otherwise. With this change both kinds of recovery succeed with a single restart. Fixes: cfca1637bc2b ("ASoC: Intel: avs: Unprepare a stream when XRUN occurs") Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Sergey Tiraspolsky <stiraspo@gmail.com> Acked-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20261010103753.16969-1-stiraspo@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-10-07ASoC: Intel: Add Yoga Book RT5677 supportMark Brown
Maurizio Casciano <mauriziocasciano7@gmail.com> says: This series adds the Cherry Trail machine driver and machine-table entry needed by the Lenovo Yoga Book YB1-X91F/L with its RT5677 codec and TS3A227E headset detector. The driver supports both legacy SST and SOF. The Intel DSP configuration selects one backend at probe time, so the paths are mutually exclusive. The series has a runtime dependency on the Yoga Book platform/x86 v3 series. That series creates the TS3A227E I2C client and attaches software-node properties for RT5677 GPIO2 and GPIO4: https://lore.kernel.org/r/20260829225729.395270-1-mauriziocasciano7@gmail.com The v9 patches apply to ASoC for-next at 74612d0b448f. On the remote build host, the two affected objects build with W=1. The exact v9 cht_rt5677.c source was used for that build. For runtime validation, the same driver and machine-table sources were integrated into the known-working Yoga Book 7.2 test tree. On a Lenovo YB1-X91L, automatic SOF and forced SST both registered the RT5677 card. PCM0 playback and capture and PCM1 deep-buffer playback passed on both paths. SOF passed S16_LE, S24_LE and S32_LE; SST advertised and passed S16_LE. Routed speaker-test completed on both paths, the SOF tone was audible, and internal-microphone captures contained signal on both paths. No ASoC or DSP stream errors were logged. Desktop PipeWire exposed the stereo speakers and internal microphone after the test. Link: https://patch.msgid.link/20260925135915.338670-1-mauriziocasciano7@gmail.com
2026-10-07ASoC: Intel: cht: Add Yoga Book RT5677 machine entryMaurizio Casciano
The Yoga Book YB1-X91F/L exposes its RT5677 codec as ACPI device 10EC5677. Add a Cherry Trail machine-table entry that supplies the legacy SST firmware and board names and the SOF topology name. The Intel DSP configuration selects one firmware path at probe time. SST loads intel/fw_sst_22a8.bin and uses the cht_rt5677 board name; SOF loads sof-cht-rt5677.tplg through the standard firmware search path. The same kernel and machine entry were boot-tested with both paths on a YB1-X91L. The SOF topology sources are maintained and distributed separately by the SOF project. Assisted-by: LLM Co-developed-by: Yauhen Kharuzhy <jekhor@gmail.com> Signed-off-by: Yauhen Kharuzhy <jekhor@gmail.com> Signed-off-by: Maurizio Casciano <mauriziocasciano7@gmail.com> Link: https://patch.msgid.link/20260925135915.338670-3-mauriziocasciano7@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-10-07ASoC: Intel: Add Cherry Trail RT5677 machine driverMaurizio Casciano
The Lenovo Yoga Book YB1-X91F/L uses the Cherry Trail SSP2 link with an RT5677 codec and a TS3A227E headset detector. Its amplifiers and headphone path also need board-specific GPIO sequencing. Add a Cherry Trail RT5677 machine driver derived from Yauhen Kharuzhy's earlier implementation. Clone the card, DAI links and link components per device so probing never mutates global templates. Allocate jack storage with the device lifetime, and configure MCLK and PLL, jack buttons, microphones, and output controls. Propagate clock, GPIO and ASRC setup failures so DAPM and probe callers do not continue with partially configured hardware. If the second speaker GPIO update fails, restore the first GPIO to its previous state. Reproduce the mode-3 enable pulse and settling delay required by the external speaker boost amplifier. The RT5677 GPIO2 and GPIO4 mappings are supplied as software-node properties by the Yoga Book x86-android-tablets quirk. The ACPI GPIO mapping in this driver covers the external speaker enable described in the codec device's _CRS. Select the card identity from the firmware parent. The SOF path uses the "cht rt5677" card name and "SOF" driver name, while the legacy SST path uses the conventional "cht-rt5677" card name. The firmware paths are mutually exclusive and share the rest of the machine driver. The card registers on both paths without snd_soc_fixup_dai_links_platform_name(). The same kernel was booted with automatic SOF selection and with snd_intel_dspcfg.dsp_driver=2 for SST. PCM0 playback and capture plus PCM1 deep-buffer playback passed on both paths. SOF passed S16_LE, S24_LE and S32_LE; SST advertises and passed S16_LE. The built-in speakers were audible on both paths, and internal-microphone capture contained signal. No ASoC or DSP stream errors were logged during the final tests. Link: https://github.com/jekhor/yogabook-linux-kernel/commit/4e41d0ff72c1d1fd8d5c59dda247e4ca8a1da999 Link: https://lore.kernel.org/linux-sound/20260611-asoc-yogabook-v2-v3-3-3128447b67b6@gmail.com/ Link: https://lore.kernel.org/r/20260829225729.395270-1-mauriziocasciano7@gmail.com Assisted-by: LLM Co-developed-by: Yauhen Kharuzhy <jekhor@gmail.com> Signed-off-by: Yauhen Kharuzhy <jekhor@gmail.com> Signed-off-by: Maurizio Casciano <mauriziocasciano7@gmail.com> Link: https://patch.msgid.link/20260925135915.338670-2-mauriziocasciano7@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-10-07ALSA compress / ASoC compress / SOF: Compressed audio support with IPC4Mark Brown
Peter Ujfalusi <peter.ujfalusi@linux.intel.com> says: This series adds compressed audio support for SOF with IPC4 firmware. Supported formats are PCM, MP3, AAC and VORBIS, the feature set is PAUSE_PUSH/RELEASE, DRAIN and position reporting. Patches 1-5 are prerequisites in the ALSA compress core and in soc-compress.c. These are core fixes rather than driver level workarounds on purpose. The other users of compressed DPCM have DSP internal ports on their BEs, driven by code they own. An Intel/SOF BE ends at a third party CODEC driver which is shared with the non DPCM case and has no reason to know that the FE is compressed. That set of CODECs is open ended, so teaching each of them to cope with a compressed FE does not scale. The core has to hand a BE the same substream state whether the FE is a PCM or a compressed one. Two of these patches change behaviour for the existing users of compressed DPCM, so they would need a look from Qualcomm and NXP: - "ASoC: soc-compress: Implement trigger FE-BE sequencing as with normal PCMs" makes the FE/BE trigger order follow dai_link->trigger[], the way dpcm_fe_dai_do_trigger() does it. Neither sound/soc/qcom/ nor sound/soc/fsl/ sets it, so both default to SND_SOC_DPCM_TRIGGER_PRE: START keeps the current order, but STOP, SUSPEND and PAUSE_PUSH now trigger the BE before the FE. - "ASoC: soc-compress: Stop running dpcm on free" sends a STOP trigger from soc_compr_free_fe() if the DPCM is still in START state, which is the case when the last trigger the stream received was a DRAIN. Patches 6-20 implement the IPC4 compressed support, patch 21 is a Kconfig cleanup. The last two patches enable the feature, in Kconfig for TGL and later and in the topology parser, so the compressed device type only becomes usable once the code behind it is in place. Testing: - IPC4: Arrow Lake, compressed playback on speaker and headphone (cs42l43), MP3, AAC and VORBIS. - IPC3: tested by NXP. This does not cover the STOP on free path above, as they do not implement DRAIN. Link: https://patch.msgid.link/20261007084955.1256-1-peter.ujfalusi@linux.intel.com
2026-09-28ASoC: Intel: Add quirk to block match table for Lenovo Yoga Slim 7Charles Keepax
A variant of the Lenovo Yoga Slim 7 exists on Lunar Lake that doesn't have a physical jack socket. Cirrus codecs still use match tables on LNL but the match table makes no distinction between a system with or without a jack. This leads to the system failing probe as the jack in the topology file is not matched by a DAI link as the machine driver is constructed. Add a new quirk to block using match tables for specific devices, and rely on function topologies which can handle this difference seamlessly. This is slightly preferred over moving everything to function topologies due to the lower chance of causing regressions on other systems. Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://patch.msgid.link/20260928105610.242687-1-ckeepax@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-25ASoC: Intel: bytcr_rt5651: Add quirk for Chuwi Hi8 with generic DMI stringsJasper Firth
Some Chuwi Hi8 tablets with model number CWI513 ship with a BIOS (American Megatrends 5.11, dated 05/21/2016) whose DMI sys_vendor and product_name are both "Default string". The tested unit is labelled just "Hi8", but its model number is the same as the existing "Chuwi Hi8 Pro (CWI513)" entry, and it needs the same quirks. That entry matches on sys_vendor "Hampoo" and product_name "X1D3_C806N", so it never applies to these units. Without its quirks the internal speaker, whose amplifier has a differential input wired across LOUT left and right, cancels to a faint distorted residual for any centred (L == R) content, and the headphone channels are swapped. Add an entry matching board_vendor "Hampoo" and board_name "Cherry Trail CR", plus the BIOS date since those two are too generic on their own. drivers/platform/x86/touchscreen_dmi.c already matches the Chuwi HiBook the same way. The quirks are those of the existing Hi8 Pro entry, except for the over-current detection scale factor: 1.0 instead of the 0.75 from BYT_RT5651_DEFAULT_QUIRKS. With 0.75 and a CTIA headset (inline mic and one button), loud speech into the mic, and headphone playback coupling onto the mic line, were reported as spurious KEY_PLAYPAUSE presses, one of them held for a whole 8 second speech window. With 1.0 the same test gave no spurious events, and 3 real button presses were reported as exactly 3 press/release pairs. Tested on a unit with the generic DMI strings, with a module built from this patch and no quirk module parameter. The quirks were applied via the new entry, the card components read "cfg-spk:1 cfg-mic:in2 cfg-hp:lrswap", and the following all work: speaker, headphone left/right order, jack and headset-mic detection, headset button, and the internal and headset mics. The problem was diagnosed with the help of an AI coding assistant, which also drafted this changelog. Assisted-by: Claude Opus 5.5 Signed-off-by: Jasper Firth <jasper.m.f@hotmail.com> Link: https://patch.msgid.link/20260925-hi8-quirk-v1-1-ffd00b0447f9@hotmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-24ASoC: Intel: atom: Fix platform device leak on probe failureGuangshuo Li
sst_acpi_probe() registers platform devices for the SST platform and machine board using platform_device_register_data(), but does not unregister them when later probe steps fail. Fixes: caf94ed8629a ("ASoC: Intel: bytcr_rt5640: fixup DAI codec_name with HID") Cc: stable@vger.kernel.org Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com> Link: https://patch.msgid.link/20260924134932.1590967-1-lgs201920130244@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-24ASoC: Intel: sof-function-topology-lib: fix sscanf typeBard Liao
Change %d to %u as ssp_port is unsigned int. Fixes: 6736426f31e8 ("ASoC: Intel: sof-function-topology-lib: add I2S support for sof_sdw_get_tplg_files") Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Link: https://patch.msgid.link/20260924054015.2600784-1-yung-chuan.liao@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-22ASoC: intel: boards: Switch to use acpi_bus_get_primary_device()Rafael J. Wysocki
Replace acpi_get_first_physical_node() that is slated for removal with acpi_bus_get_primary_device() that takes a reference to the device it is about to return. This addresses a potential use-after-free that may occur if the device returned by acpi_get_first_physical_node() is removed right after dropping its ACPI companion's physical_node_lock in that function. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Acked-by: Cezary Rojewski <cezary.rojewski@intel.com> Acked-by: Mark Brown <broonie@kernel.org> Link: https://patch.msgid.link/15844908.tv2OnDr8pf@rafael.j.wysocki
2026-09-22ALSA/ASoC: Intel: add I2S function topology supportMark Brown
Bard Liao <yung-chuan.liao@linux.intel.com> says: Currently, function topology is only used by the SoundWire machines. Extend the support to the I2S machines. The only ALSA change is to lower the log level. Let's go through the ASoC tree. Link: https://patch.msgid.link/20260922092316.2296039-1-yung-chuan.liao@linux.intel.com
2026-09-22ASoC: soc-acpi-intel-ptl-match: I2S machines: use function topologyBard Liao
Use sof_i2s_get_tplg_files() for SOF es83x6 machines. Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Liam Girdwood <liam.r.girdwood@intel.com> Link: https://patch.msgid.link/20260922092316.2296039-8-yung-chuan.liao@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-22ASoC: Intel: sof-function-topology-lib: add get_function_topology for I2S ↵Bard Liao
machines Add sof_i2s_get_tplg_files() callback for Intel SOF I2S machines. Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Liam Girdwood <liam.r.girdwood@intel.com> Link: https://patch.msgid.link/20260922092316.2296039-7-yung-chuan.liao@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-22ASoC: Intel: sof-function-topology-lib: add I2S support for ↵Bard Liao
sof_sdw_get_tplg_files The Intel SOF SDW machine drive also supports I2S interface. Add related supports for the sof_sdw_get_tplg_files() callback. Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Liam Girdwood <liam.r.girdwood@intel.com> Link: https://patch.msgid.link/20260922092316.2296039-6-yung-chuan.liao@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-22ASoC: Intel: sof-function-topology-lib: skip non-exist file in best_effort modeBard Liao
Currently we will fallback to the monolithic topology if any function topology is missing. But the monolithic topology may not exist if best_effort is set. We should load the existing function topologies in the case. Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Liam Girdwood <liam.r.girdwood@intel.com> Link: https://patch.msgid.link/20260922092316.2296039-5-yung-chuan.liao@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-22ASoC: Intel: sof-function-topology-lib: create common helpersBard Liao
The existing code supports get_function_tplg_files callback for SoundWire machine driver only. Some common sections can be used to extend the support to other machines. Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Liam Girdwood <liam.r.girdwood@intel.com> Link: https://patch.msgid.link/20260922092316.2296039-4-yung-chuan.liao@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-18ASoC: Add support for Airoha AN7581Mark Brown
Christian Marangi <ansuelsmth@gmail.com> says: Add all the patch and documentation to support Airoha AN7581 sound driver. The card follows similar implementation with Mediatek with the codec present on i2c but with a simplified implementation register wise and additional frequency supported. Link: https://patch.msgid.link/20260908090448.3332-1-ansuelsmth@gmail.com
2026-09-17ASoC: fix typos in commentsHemanth Selam
Fix typos in comments, reported by scripts/checkpatch.pl using the misspelling list in scripts/spelling.txt. Only touches comments, no code changes. Signed-off-by: Hemanth Selam <hemanth.selam@gmail.com> Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://patch.msgid.link/20260917054001.15728-1-hemanth.selam@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-15ASoC: Intel: avs: Remove topology-loading wrappersCezary Rojewski
With recent changes avs_load_topology() became unused whereas avs_remove_topology() is a simple wrapper. Drop them both. Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20260915101037.3087956-1-cezary.rojewski@intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-14ASoC: Intel: avs: Use list_count_nodes() to simplify the codeCezary Rojewski
By enlisting list_count_nodes(), a recent addition to the list.h, the code responsible for manual counting of the HDAudio PCMs can be dropped. Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20260914101917.2969665-1-cezary.rojewski@intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-14ASoC: codecs: Fix resource leaks on card re-bindMark Brown
Chancel Liu <chancel.liu@oss.nxp.com> says: Several ASoC codec drivers set up per-device resources from their ASoC component probe, but the associated cleanup is tied to the underlying bus (I2C/SPI) device rather than being balanced per component probe. This is fine for a plain probe/remove, but it breaks when the sound card is unregistered and re-registered while the bus device stays bound (a card re-bind): the component probe runs again while the previous bus-level resources are still live. Two kinds of resources are affected: - Regulator disable notifiers (wm8962, wm8995, tlv320aic31xx, tlv320aic3x) The same notifier_block is re-registered on the still-registered regulator notifier chain, which triggers notifier callback ..._regulator_event_N already registered WARNING: ... at kernel/notifier.c:23 notifier_chain_register and corrupts the chain. - Beep input devices (wm8962, cs42l52, cs42l56) A new input device is allocated and registered on every component probe while the free path only clears the pointer, leaking the previous input device and its sysfs/input node. The two problems need opposite fixes: the notifiers are registered from the component probe, so the registration is moved to the bus probe so it runs once per bus bind; the beep device is freed from the component remove path, so it is switched from devm_input_allocate_device() to input_allocate_device() paired with an explicit input_unregister_device() on that same free path. Verified with wm8962. The remaining patches fix other codec drivers following the same patterns. Link: https://patch.msgid.link/20260913101531.2787654-1-chancel.liu@oss.nxp.com
2026-09-14ASoC: Intel: sof_es8336: Add a quirk for Huawei Matebook B3-420Ai Chao
Add DMI entry for Huawei Matebook B3-420 (BDZ-WXX9) with HEADPHONE_GPIO and HEADSET_MIC1 quirks. Similar to Huawei Matebook D (BOD-WXX9). On the same machine,audio routing between speakers and headphones works correctly when running Windows with the Huawei audio driver. However, after reinstalling Linux, both the speakers and headphones output sound simultaneously,indicating that the amplifier enable GPIOs are not being toggled correctly to separate the two outputs. Signed-off-by: Ai Chao <aichao@kylinos.cn> Link: https://patch.msgid.link/20260911081932.2605407-1-aichao@kylinos.cn Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-07ASoC: Intel: SST: Publish the PCI module aliaseshpp.iscas
The legacy SST PCI driver matches Intel Tangier devices using intel_sst_ids, but its only explicit module alias is "sst". That alias does not match PCI modalias events when this driver is built as a module. Publish its PCI table. The independently configurable SOF driver does not provide aliases for the legacy SST module. Fixes: f533a035e4da ("ASoC: Intel: mrfld - create separate module for pci part") Signed-off-by: hpp.iscas <hppiscas@163.com> Link: https://patch.msgid.link/20260905133133.63661-1-hppiscas@163.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-03ALSA/ASoC: Intel: avs: HDAudio bus and general fixesMark Brown
Cezary Rojewski <cezary.rojewski@intel.com> says: The first half of the patchset concentrates on the driver initialization procedure - a number of steps do not clean up after themselves when they fail. This is for both, HDAudio bus (ext) and the DSP part (avs) and targets following procedures: - stream initialization - link initialization - bus initialization The next five are loosely related fixes. First, split topology-loading error handling from request-firmware one. Currently -ENOENT coming from topology-loading, which is a real error, is ignored. Second, with deeper test coverage around corrupted firmware/DSP exception handling, new issues are unearthed. Switch to async d0ix_work cancellation to avoid deadlock when D0IX has been scheduled just before the recovery work. The 09/10 patch, init_config change fixes possible out-of-bounds bug. The fix is larger than what one could expect as instead of patching with if-statements I've decided to refactor the parsing of init_configs. The scenario that causes the problem no longer exists. Note: the solution does not impose any changes on the existing topology files (userspace). The remaining two, IMHO are self-explanatory. [1]: https://lore.kernel.org/all/tencent_8E5BBBD19D53B1EFCDB6E89F3B6246A70B06@qq.com/ Link: https://patch.msgid.link/20260902081814.1590883-1-cezary.rojewski@intel.com
2026-09-03ASoC: Intel: avs: hda: Constrain MSBs on startupCezary Rojewski
Front-end DAI links are marked as dynamic for the card thus the __soc_pcm_open() function never gets to soc_pcm_apply_msb() step which performs MSBs-constraint rule. Do that on link startup instead. Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20260902081814.1590883-11-cezary.rojewski@intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-03ASoC: Intel: avs: Refactor and fix init_config accessCezary Rojewski
Existing code accesses enties found in ->init_configs array through indexes that are part of ->config_ids array. Those two are limited by: ->num_init_configs and ->num_config_ids respectively. Using ID larger or equal to ->num_init_configs leads to out-of-bounds access: avs_path_module_send_init_configs() loop: (...) &acomp->tplg->init_configs[ids[i]] ^ out-of-bounds candidate Rather than adding another if-statement, refactor the code. There is no need to store the IDs, have a list of pointers to actual config-entries instead. As the verification of ->init_config entries does not differ from verification of other types that are part of the topology.c file, simply reuse the code. Fixes: 8a49ef789b1b ("ASoC: Intel: avs: Send initial config to module if present") Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20260902081814.1590883-10-cezary.rojewski@intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-03ASoC: Intel: avs: Fix unbalanced module reference countCezary Rojewski
strace_open() invokes try_module_get() which on success takes the module reference. If any follow up operation causes strace_open() to fail, the refcount shall be put down. Fixes: 0a5fb3cc28fd ("ASoC: Intel: avs: Keep module refcount up when gathering traces") Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20260902081814.1590883-9-cezary.rojewski@intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-03ASoC: Intel: avs: Cancel d0ix_work asynchrounously during recoveryCezary Rojewski
Tests with corrupted firmware binaries prove that the recovery procedure can hit deadlock with d0ix_work if the work has been scheduled shortly before the event that triggered the recovery e.g.: timeouts on communication with a dead AudioDSP firmware. At the same time, the ready-check shall be done after acquiring the msg_mutex as the flag might have been modified by the time the lock is granted. The recovery case is one of such examples. Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20260902081814.1590883-8-cezary.rojewski@intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-03ASoC: Intel: avs: Do not ignore -ENOENT when loading a topologyCezary Rojewski
avs_load_topology() combines request_firmware() and snd_soc_tplg_component_load(). The fallback mechanism introduced for the HDAudio based boards honors -ENOENT and checks for a generic topology if no specific is found before giving up and failing the component probing. However, if -ENOENT is returned by the latter function - snd_soc_tplg_component_load() - is shall not be ignored. That means there is an actual problem with the topology file and no fallback shall be attempted. Fixes: 739c031110da ("ASoC: Intel: avs: Provide support for fallback topology") Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20260902081814.1590883-7-cezary.rojewski@intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-03ASoC: Intel: avs: Clean up streams if their initialization failsCezary Rojewski
When streams are being initialized the memory allocation may fail. Have an error path and return early if that is the case. Fixes: 1affc44ea5dd ("ASoC: Intel: avs: PCI driver implementation") Co-developed-by: Amadeusz Sławiński <amade@asmblr.net> Signed-off-by: Amadeusz Sławiński <amade@asmblr.net> Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20260902081814.1590883-6-cezary.rojewski@intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-03ASoC: Intel: avs: Clean up the bus when fetching ML caps failsCezary Rojewski
snd_hdac_ext_bus_get_ml_capabilities() may fail and its return code shall be checked and accounted for. Address the issue by updating the error-path for avs_pci_probe(). At the same time, if the function in question succeeds but the next part of avs_pci_probe() fails, the hlink list shall be cleaned up before leaving the scope. Fixes: 1affc44ea5dd ("ASoC: Intel: avs: PCI driver implementation") Co-developed-by: Amadeusz Sławiński <amade@asmblr.net> Signed-off-by: Amadeusz Sławiński <amade@asmblr.net> Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20260902081814.1590883-5-cezary.rojewski@intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-03ASoC: Intel: avs: Clean up the bus when its initialization failsCezary Rojewski
snd_hdac_i915_init() which is part of the initialization may return -EPROBE_DEFER what fails the procedure and the existing avs_bus_init() and avs_pci_probe() do not clean up the bus fields with snd_hdac_ext_bus_exit() when that happens. Fix avs_bus_init() by rearranging the initialization blocks: allocations first, snd_hdac_ext_bus_init() last. Such approach generates no error-path whilst still achieving the goal of cleaning up the bus. For avs_pci_probe() update the existing error-path instead. Co-developed-by: Amadeusz Sławiński <amade@asmblr.net> Signed-off-by: Amadeusz Sławiński <amade@asmblr.net> Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20260902081814.1590883-4-cezary.rojewski@intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-01ASoC: Intel: sof_sdw: add tac5xx2-sdw familyNiranjan H Y
Add Texas Instrument's tac5xx2-sdw family to include support for soundwire codecs tac5572, tac5682 Signed-off-by: Niranjan H Y <niranjan.hy@ti.com> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Link: https://patch.msgid.link/20260901021132.231908-1-yung-chuan.liao@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-01ASoC: Intel: sof_rt5682: Add support for nvl_max98360a_rt5682Jairaj Arava
This patch adds the driver data for rt5682 codec on SSP0 and max98360a speaker amplifiers on SSP1 for NVL platform. The existing one is not aligned with PTL. Hence, changed it to align with the working changes in PTL. Signed-off-by: Jairaj Arava <jairaj.arava@intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Link: https://patch.msgid.link/20260901011951.230315-1-yung-chuan.liao@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>