aboutsummaryrefslogtreecommitdiff
path: root/sound/soc/amd/acp
AgeCommit message (Collapse)AuthorFilesLines
2026-10-16ASoC: Address remaining PCM constraint issuesMark Brown1-0/+5
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: amd: Explain component open return value handlingbui duc phuc1-0/+5
Add comments explaining why the .open() callbacks must return 0 on success to ensure proper rollback handling and prevent future changes from reintroducing the issue. Reviewed-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Signed-off-by: bui duc phuc <phucduc.bui@gmail.com> Link: https://patch.msgid.link/20261016040946.521195-2-phucduc.bui@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-10-14ASoC: amd: acp: move ACP7X_PDM_DMIC0/1 to acp-mach-common.hVijendar Mukunda1-0/+4
ACP7X_PDM_DMIC0 and ACP7X_PDM_DMIC1 identify the active PDM controller on ACP7.B/7.F platforms. They are carried in amd_pdm_pdata.pdm_sel, which is defined in acp-mach-common.h, and in amd_mc_ctx.pdm_sel, which is defined in soc_amd_sdw_common.h. Move the constants to acp-mach-common.h so there is a single shared location for all PDM types and values, accessible to every AMD ACP machine driver (I2S, SoundWire, and SOF paths) without driver-specific header duplication. Remove the duplicate definition from sound/soc/sof/amd/acp.h. Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Signed-off-by: Mark Brown <broonie@kernel.org>
2026-10-13ASoC: SOF/amd: ACP7.B support and ASP carveout firmware loadingMark Brown2-13/+26
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: amd: acp: add acp-mach-common.h for shared machine driver typesVijendar Mukunda2-13/+26
ACP7.B/7.F platforms expose a PDM controller selection via the acp-audio-ep-port ACPI _DSD property. struct amd_pdm_pdata carries this selection and is required by multiple machine driver variants - the legacy (non-DSP) and SOF stacks - for both I2S and SoundWire paths. Currently the struct lives in soc_amd_sdw_common.h, which is SoundWire-specific, making it unavailable to I2S machine drivers without an inappropriate header dependency. Add acp-mach-common.h as a minimal header for types shared across all AMD ACP machine drivers. Move struct amd_pdm_pdata there and retain an #include of it in soc_amd_sdw_common.h so that no call sites require modification. Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Link: https://patch.msgid.link/20261013154644.3788064-8-Vijendar.Mukunda@amd.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-10-13ASoC: tegra: Support auxiliary devicesMark Brown1-0/+35
Svyatoslav Ryhel <clamor95@gmail.com> says: Add support for auxiliary devices, such as amplifiers, sound-muxes or dsp, to be added to the sound card. Link: https://patch.msgid.link/20261013180253.477605-1-clamor95@gmail.com
2026-10-13ASoC: Fix constraint return value handlingMark Brown1-1/+1
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: amd: acp: Fix .close() being skipped on rollbackbui duc phuc1-1/+1
snd_pcm_hw_constraint_integer() may return 1, which is then returned from acp_dma_open(). ASoC only marks the component as opened when .open() returns 0, so .close() can be skipped on rollback. Return 0 explicitly on success. Fixes: 623621a9f9e1 ("ASoC: amd: Add common framework to support I2S on ACP SOC") Signed-off-by: bui duc phuc <phucduc.bui@gmail.com> Link: https://patch.msgid.link/20261008103831.542533-2-phucduc.bui@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-10-13Merge asoc/for-7.4 into asoc-nextMark Brown5-3/+111
2026-10-08ASoC: amd: acp63: add standalone ES9356 SoundWire machineMario Limonciello2-0/+51
The MECHREVO WUJIE 14SAH exposes a single ES9356 SDCA codec on ACP6.3 SoundWire link 0. The peripheral and its UAJ, SmartMic, SmartAmp and HID functions enumerate, but the ACP6.3 match table has no entry for it. Machine selection therefore fails and no sound card is registered. Add a link 0 machine entry containing all four ES9356 audio endpoints so the generic amd_sdw machine driver creates jack playback and capture, DMIC capture, and speaker playback links. Select the ES9356 codec from the legacy SoundWire machine configuration when SDCA support is enabled. Reported-by: Zachary Huang <zuzhenhuang365@gmail.com> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=222092 Assisted-by: LLM Tested-by: Zachary Huang <zuzhenhuang365@gmail.com> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> Reviewed-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Link: https://patch.msgid.link/20261007193038.2473068-1-mario.limonciello@amd.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-10-07ASoC: amd: acp: Add more ACP7.0 match entries for Cirrus Logic partsSimon Trimmer1-0/+35
This adds the following SoundWire configuration: cs42l43b link 0 UID 1 cs35l57 link 0 UID 0 cs35l57 link 0 UID 1 Signed-off-by: Simon Trimmer <simont@opensource.cirrus.com> Link: https://patch.msgid.link/20261007130857.102432-1-simont@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-10-06ASoC: amd: acp-legacy-mach: skip dai link for amp reference streamNiranjan H Y1-0/+32
Amps can provide reference stream to hosts DSP which can be used for input audio proocessing. But legacy AMD soc doesn't support such a feature. So skip adding the dai link for the same. Signed-off-by: Niranjan H Y <niranjan.hy@ti.com> Suggested-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Link: https://patch.msgid.link/20261006042315.1038-1-niranjan.hy@ti.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-28ASoC: amd: Fix borrowed ACPI codec device referencesMark Brown1-1/+13
Yibo Tan <lhfff@tju.edu.cn> says: Two AMD machine drivers treat a borrowed ACPI physical device pointer as an owned reference. The ES8336 driver drops it on a GPIO lookup failure; the ACP3x driver drops it on an allocation failure and also stores it beyond probe. Both paths produced a KASAN use-after-free during device unregister in focused tests calling the production callbacks. The corresponding fixed tests reached the same failure paths without a kernel diagnostic. The tests did not exercise a complete sound card or physical hardware. The changed ACP3x object builds with W=1 with CONFIG_ACPI=y and CONFIG_ACPI=n. The ES8336 object builds with W=1 with CONFIG_ACPI=y. Link: https://patch.msgid.link/20260922185057.954150-1-lhfff@tju.edu.cn
2026-09-28ASoC: amd: acp3x-es83xx: Keep an owned codec device referenceYibo Tan1-1/+13
acpi_get_first_physical_node() returns a borrowed device pointer. The private data allocation failure path in acp3x_es83xx_probe() puts that pointer despite not owning a reference. The successful path also saves the borrowed pointer for later card operations. This was reproduced on current mainline with failslab restricted to the real static callback. The rejected devm_kzalloc() returned -ENOMEM, and normal codec platform-device unregister then produced a KASAN slab-use-after-free in device_del(), with allocation in acpi_create_platform_device() and release in acpi_unbind_one(). Use acpi_bus_get_primary_device() to acquire the reference while the physical-node lock is held. After allocating private data, register a devres put action before publishing the pointer. This balances action allocation and later probe failures, keeps the saved pointer alive during card use, and drops the reference after ASoC card unregister during successful teardown. The existing OOM put now correctly balances the owned lookup. The same filtered KASAN guest with this change reached the same -ENOMEM and unregister path without KASAN, WARNING, Oops or panic. The test directly invoked the production callback and did not emulate a complete ACP/ASoC card or physical Huawei hardware. Fixes: 54fcd9dd44b2 ("ASoC: amd: acp: Add machine driver that enables sound for systems with a ES8336 codec") Signed-off-by: Yibo Tan <lhfff@tju.edu.cn> Link: https://patch.msgid.link/20260922185057.954150-3-lhfff@tju.edu.cn Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-25ASoC: amd: acp: add EFI dependency for selecting TAS2783Arnd Bergmann1-1/+1
The TAS2783 codec requires EFI support, so it cannot be selected unless that is also enabled: WARNING: unmet direct dependencies detected for SND_SOC_TAS2783_SDW Depends on [n]: SOUND [=m] && SND [=m] && SND_SOC [=m] && SOUNDWIRE [=m] && SND_SOC_SDCA [=m] && EFI [=n] Selected by [m]: - SND_SOC_AMD_LEGACY_SDW_MACH [=m] && SOUND [=m] && SND [=m] && SND_SOC [=m] && SND_SOC_AMD_ACP_COMMON [=m] && X86 [=y] && PCI [=y] && ACPI [=y] && SOUNDWIRE [=m] Add this as a dependency for SND_SOC_AMD_LEGACY_SDW_MACH, assuming that this is only needed on modern x86 machines that require EFI support already. It would likely be possible to do something more complex to still allow SND_SOC_AMD_LEGACY_SDW_MACH to be used without TAS2783 when EFI is disabled, but I cannot see a usecase for that. Fixes: 28114992dd2f ("ASoC: amd: acp: enable TAS2783 and add RT712-VB SoundWire machine") Signed-off-by: Arnd Bergmann <arnd@arndb.de> Link: https://patch.msgid.link/20260925131137.146638-1-arnd@kernel.org Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-24ASoC: amd: acp: fix TAS2783 SoundWire codec unmet dependenciesSyed Saba Kareem1-1/+1
SND_SOC_AMD_LEGACY_SDW_MACH unconditionally selects SND_SOC_TAS2783_SDW, but that codec depends on SND_SOC_SDCA and EFI in addition to SOUNDWIRE. An unconditional select force-enables the codec even when those dependencies are not met, which the kernel test robot reported as unmet direct dependencies when EFI=n: WARNING: unmet direct dependencies detected for SND_SOC_TAS2783_SDW Depends on [n]: SOUND [=y] && SND [=y] && SND_SOC [=y] && SOUNDWIRE [=y] && SND_SOC_SDCA [=y] && EFI [=n] Selected by [y]: - SND_SOC_AMD_LEGACY_SDW_MACH [=y] && ... The other SoundWire codecs selected by this machine driver only depend on SOUNDWIRE, which the driver already depends on, so they select cleanly. SND_SOC_TAS2783_SDW is the only one that additionally needs the SDCA core and EFI (it reads speaker calibration data from EFI variables). SND_SOC_SDCA cannot simply be selected here, as that introduces a recursive Kconfig dependency (SOUNDWIRE depends on SND_SOC_SDCA_OPTIONAL, whose default pulls in SND_SOC_SDCA), and EFI is a platform feature that must not be selected by a driver. Instead, guard the select with the missing dependencies so the codec is only (and always) built when they are satisfied: select SND_SOC_TAS2783_SDW if SND_SOC_SDCA && EFI This keeps the TAS2783 SoundWire codec built together with the machine driver on platforms that can use it, while avoiding the unmet dependency when SND_SOC_SDCA or EFI is disabled. Fixes: 28114992dd2f ("ASoC: amd: acp: enable TAS2783 and add RT712-VB SoundWire machine") Reported-by: kernel test robot <lkp@intel.com> Closes: https://lore.kernel.org/oe-kbuild-all/202609182147.gfofWIXW-lkp@intel.com/ Signed-off-by: Syed Saba Kareem <Syed.SabaKareem@amd.com> Link: https://patch.msgid.link/20260924124205.3376083-1-syed.sabakareem@amd.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-18ASoC: Add support for Airoha AN7581Mark Brown4-8/+50
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: amd: acp: enable TAS2783 and add RT712-VB SoundWire machineSyed Saba Kareem2-0/+21
The ACP7.0 SoundWire machine table did not cover boards that combine TI TAS2783 smart amplifiers on SoundWire link 0 with a Realtek RT712-VB codec on link 1. In addition, the TAS2783 SoundWire codec driver was not selected by the AMD legacy SoundWire machine config, so it was not built for these platforms. Select SND_SOC_TAS2783_SDW from SND_SOC_AMD_LEGACY_SDW_MACH so the TAS2783 SoundWire codec driver is built together with the AMD legacy (no-DSP) SoundWire machine. Add a new link/address map, acp70_tas2783a_l0_rt712_vb_l1, describing the TAS2783 amplifiers on link 0 and the RT712-VB codec on link 1, and register a corresponding entry in snd_soc_acpi_amd_acp70_sdw_machines[]. The entry uses snd_soc_acpi_amd_sdca_is_device_rt712_vb() as its machine_check callback so it only matches platforms that actually expose the RT712-VB device. Signed-off-by: Syed Saba Kareem <Syed.SabaKareem@amd.com> Link: https://patch.msgid.link/20260917165314.1880855-1-syed.sabakareem@amd.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-17ASoC: SOF: amd: add ACP7.B/7.F PDM controller scan and pdata propagationVijendar Mukunda1-0/+13
Add acp_sof_scan_pdm_devices() to read the acp-audio-ep-port ACPI _DSD property from the PDM child device on ACP7.B/7.F platforms. Value 4 selects PDM0 (ACP7X_PDM_DMIC0), value 5 selects PDM1 (ACP7X_PDM_DMIC1). Unrecognized values are reported via dev_warn(). The selected controller is stored in acp_dev_data.pdm_sel and propagated to the machine driver via mach->pdata in amd_sof_machine_select() so the machine driver probe can register the correct SOF DMIC DAI link. Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Link: https://patch.msgid.link/20260910132251.1171943-5-Vijendar.Mukunda@amd.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-16ASoC: amd: acp: fix card name length warning in SOF SoundWire machine driverVijendar Mukunda1-1/+1
The ALSA snd_card driver[] field is 16 bytes (including the NUL terminator), leaving 15 usable characters. The SOF framework prepends a "sof-" prefix when registering the card, so card->name = "amd-soundwire" becomes driver name "sof-amd-soundwire" which is 17 characters and overflows the driver[16] buffer, triggering a kernel warning. Fix by shortening the card name to "amd-sdw"; the resulting driver name "sof-amd-sdw" fits within the 15-character limit. Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org> Link: https://patch.msgid.link/20260910161728.1452808-5-Vijendar.Mukunda@amd.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-16ASoC: amd: acp: fix ffs() operator precedence for SoundWire link IDVijendar Mukunda2-4/+4
ffs(link_mask - 1) computes ffs on (link_mask - 1) instead of subtracting 1 from the result of ffs(link_mask). For a typical power-of-2 link_mask this returns the wrong link ID, causing cpu_pin_id lookup to select the incorrect SoundWire manager. Fix the operator precedence to ffs(link_mask) - 1 in both acp-sdw-sof-mach.c and acp-sdw-legacy-mach.c. Fixes: 6d8348ddc56e ("ASoC: amd: acp: refactor SoundWire machine driver code") Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org> Link: https://patch.msgid.link/20260910161728.1452808-4-Vijendar.Mukunda@amd.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-16ASoC: amd: acp: refactor codec config count in SOF SoundWire machine driverVijendar Mukunda1-3/+5
num_devs was used both as the endpoint count and as the output for asoc_sdw_parse_sdw_endpoints(), which overwrites it with the codec configuration count. Introduce a separate num_confs variable to hold the codec conf count so the two values remain distinct across codec_conf allocation and card->num_configs assignment. Fixes: 6d8348ddc56e ("ASoC: amd: acp: refactor SoundWire machine driver code") Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org> Link: https://patch.msgid.link/20260910161728.1452808-3-Vijendar.Mukunda@amd.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-16ASoC: amd: acp: bounds-check SoundWire link ID in machine driversVijendar Mukunda2-0/+19
Add a bounds check in create_sdw_dailink() to validate that the SoundWire link ID derived from link_mask does not exceed the maximum supported by the platform. If the link ID is out of range or link_mask is zero, log an error and return -EINVAL to prevent accessing invalid CPU pin ID tables. Applied to both acp-sdw-sof-mach.c and acp-sdw-legacy-mach.c. Fixes: 6d8348ddc56e ("ASoC: amd: acp: refactor SoundWire machine driver code") Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org> Link: https://patch.msgid.link/20260910161728.1452808-2-Vijendar.Mukunda@amd.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-08-26ASoC: amd: acp3x-es83xx: Add HVY-WXX9/M1060 DMI quirkMehmet Aysel1-0/+8
Add matching DMI table entry for the ES83xx machine driver, so the HUAWEI HVY-WXX9 / M1060 board (MateBook D16 2021, Ryzen 5 4600H) can successfully probe its ES8316 codec via the acp3x-es83xx machine driver, consistent with the existing M1010/M1020/M1040 entries for the same board name. Signed-off-by: Mehmet Aysel <mehmet4ysel@gmail.com> Link: https://patch.msgid.link/20260825092432.56292-2-mehmet4ysel@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-08-11ASoC: amd: enable audio on HP OmniBook X Flip 14Mark Brown1-0/+56
Ville Saarinen <wiza@saarinenkoti.fi> says: The HP OmniBook X Flip 14-kc0xxx (board 8EA1, Strix Point, ACP 7.2) has no usable audio on mainline at all. Its BIOS reports an ACP configuration flag of FLAG_AMD_LEGACY_ONLY_DMIC, which binds the legacy ACP driver and registers a PDM-only card, so the SoundWire links are never scanned. The two TAS2783 speaker amplifiers on link 0 and the RT712-VB jack codec on link 1 never enumerate, and the machine has no playback path whatsoever. Patch 1 adds a DMI quirk overriding the flag so snd_pci_ps probes. Patch 2 adds the machine entry describing the link topology. With both applied the card comes up and every path on the machine works: internal speakers, headphone jack with detection, headset microphone and the internal DMIC array. Two further patches are needed for the speakers to render stereo rather than mono, and to survive a system resume; those are in the TAS2783 codec driver and are being sent separately to the TI maintainers, since they have no build dependency on this pair. Related reports for the same root cause on other machines: - kernel bugzilla #221226 (ASUS Zenbook S16) - CachyOS linux-cachyos#820 (HP OmniBook X Flip 16, board 8EA2 -- the sibling board, which would need its own entry; I have no access to one and have not added it) Tested on the affected machine only. I do not have any other ACP 7.2 board, so the gating on patch 2 is written to be conservative rather than broad. Testing ======= The hardware testing was done on v7.1.6, where an equivalent version of this pair is what makes audio work on the machine. Against the master commit named below, both patches have been compile-tested only (gcc, W=1, no new warnings, no new external symbol references). Patch 2 has been reworked slightly relative to the tested build: the RT712-VB entry now reuses the existing jack_dmic_endpoints array, which already describes exactly the AIF1 jack + AIF3 DMIC pairing this board needs, instead of adding a second identical copy of it. That was a mechanical substitution, but it has not been through hardware. Tool disclosure, per Documentation/process/generated-content.rst ================================================================ This work was done in extended interactive sessions with Claude (Anthropic, model claude-opus-5) acting as a coding and debugging assistant, and a substantial amount of the analysis and of the patch text originated with it. Both patches carry an Assisted-by tag as described in Documentation/process/coding-assistants.rst. The division of work: - The assistant read the DMI data and ACP configuration flag off the running machine, identified the flag override as the fix, derived the SoundWire topology from the enumerated peripherals, and drafted both patches and both changelogs. - I ran everything that needed root or physical access, rebooted into each build, and did the listening tests. The left/right ordering in patch 2 is set by the order of the two amplifier entries; the first version had the sides reversed and that was caught by ear, not by the assistant. - No single prompt generated these patches. The session was iterative over roughly a day: inspect state, form a hypothesis, build, reboot, measure, discard the hypothesis if the measurement disagreed. Several confident intermediate conclusions were wrong and were only caught by measurement. I have reviewed both patches, I understand what they do, and I take responsibility for them. Link: https://patch.msgid.link/20260809101439.4798-1-wiza@saarinenkoti.fi
2026-08-11ASoC: amd: acp70: add HP OmniBook X Flip 14 SoundWire machineVille Saarinen1-0/+56
Describe the SoundWire topology of the HP OmniBook X Flip 14-kc0xxx (board 8EA1): two TAS2783 smart amplifiers aggregated on link 0 (unique IDs 0xC and 0x9, group_position 0 and 1, name prefixes tas2783-1 and tas2783-2) driving the left and right internal speakers, and an RT712-VB on link 1 providing the headset jack on AIF1 and the internal DMIC array on AIF3. The RT712 amplifier path (AIF2) is left unused because the speakers are driven by the external TAS2783 pair, so the existing jack_dmic_endpoints array describes it exactly. The entry is gated on snd_soc_acpi_amd_sdca_is_device_rt712_vb() so it does not capture a board carrying a different link 1 codec. Developed with AI assistance. The assistant derived the link topology from the enumerated peripherals and drafted the table entry. The order of the two amplifier entries, which is what assigns the physical sides, was corrected after a listening test by the submitter. All hardware measurements quoted above were run by the submitter on the affected machine. The submitter has reviewed the change, understands it and takes responsibility for it. Assisted-by: Claude:claude-opus-5 Signed-off-by: Ville Saarinen <wiza@saarinenkoti.fi> Link: https://patch.msgid.link/20260809101439.4798-3-wiza@saarinenkoti.fi Signed-off-by: Mark Brown <broonie@kernel.org>
2026-07-30ASoC: amd: acp: Use pcim_iomap_region() in acp-pciRosen Penev1-20/+6
Convert acp-pci to the pcim-managed PCI life-cycle. Replace pci_enable_device() with pcim_enable_device() and fold the open-coded pci_request_regions() + devm_ioremap() pair into a single pcim_iomap_region() call for BAR0, which reserves and iomaps the register window. This lets the driver drop the manual pci_release_regions() and pci_disable_device() calls from the probe error path; pcim releases the device and region automatically on detach or probe failure. The error check moves from a NULL test to IS_ERR(), since pcim_iomap_region() returns an IOMEM_ERR_PTR on failure. The child platform devices only use devm_ioremap() on their sub-range of BAR0 (no request_mem_region), so reserving the full BAR0 here does not conflict with them. Assisted-by: opencode:hy3-free Signed-off-by: Rosen Penev <rosenp@gmail.com> Link: https://patch.msgid.link/20260720001054.1439409-1-rosenp@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-07-27ASoC: Use named initializers for platform_device_id arraysMark Brown3-11/+11
Uwe Kleine-König (The Capable Hub) <u.kleine-koenig@baylibre.com> says: the objective of this series is still to prepare making struct platform_device_id::driver_data an anonymous union. See https://lore.kernel.org/all/cover.1780048925.git.u.kleine-koenig@baylibre.com/ for the details about that. Link: https://patch.msgid.link/cover.1784528081.git.u.kleine-koenig@baylibre.com
2026-07-27ASoC: amd: acp: Unify code style for platform_device_id arrayUwe Kleine-König (The Capable Hub)1-7/+7
- Add a trailing comma for initializers unless the closing brace is on the same line and for the list terminator; - Use a single space in the list terminator; Acked-by: Cezary Rojewski <cezary.rojewski@intel.com> Signed-off-by: Uwe Kleine-König (The Capable Hub) <u.kleine-koenig@baylibre.com> Reviewed-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Link: https://patch.msgid.link/08137cf5b3cdd0cc2e00da32256664f3cb9b1e4e.1784528081.git.u.kleine-koenig@baylibre.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-07-27ASoC: amd: acp: Use named initializers for platform_device_id arraysUwe Kleine-König (The Capable Hub)2-4/+4
Named initializers are better readable and more robust to changes of the struct definition. This robustness is relevant for a planned change to struct platform_device_id replacing .driver_data by an anonymous union. While touching these arrays unify spacing and usage of commas. Signed-off-by: Uwe Kleine-König (The Capable Hub) <u.kleine-koenig@baylibre.com> Reviewed-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Link: https://patch.msgid.link/a23fa9f649eaab706c704b671527c238f211ee26.1784528081.git.u.kleine-koenig@baylibre.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-07-27ASoC: remove conditional return with no effectSang-Heon Jeon1-8/+3
Both branches of the check return the same value, so the check has no effect. Remove it and return the value directly. This is the result of running the Coccinelle script from scripts/coccinelle/misc/cond_return_no_effect.cocci. Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com> Link: https://patch.msgid.link/20260723184538.3888637-15-ekffu200098@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-07-21ASoC: amd: acp-sdw-sof-mach: use &pdev->dev instead of card->devKuninori Morimoto1-5/+5
acp-sdw-sof-mach.c will be updated when Card capsuling. To makes its review easy, use &pdev->dev instead of card->dev in mc_probe(). There is no diff, because static int mc_probe(...) { ... card->dev = &pdev->dev; ... } No functional change, but is preparation for cleanup driver. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Reviewed-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Link: https://patch.msgid.link/878q75i04q.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-07-21ASoC: amd: acp-sdw-legacy-mach: use &pdev->dev instead of card->devKuninori Morimoto1-7/+7
acp-sdw-legacy-mach.c will be updated when Card capsuling. To makes its review easy, use &pdev->dev instead of card->dev in mc_probe(). There is no diff, because static int mc_probe(...) { ... card->dev = &pdev->dev; ... } No functional change, but is preparation for cleanup driver. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Reviewed-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Link: https://patch.msgid.link/87a4rli04u.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-07-15ASoC: tegra: Simplify error handlingMark Brown4-10/+54
bui duc phuc <phucduc.bui@gmail.com> says: This series contains a few small cleanups for the Tegra ASoC drivers. - Use dev_err_probe() for regmap initialization failures. - Return the original error from snd_soc_add_component_controls(). - Use devm_clk_get_optional() for the optional sync_input clock. Overall, this simplifies the error paths and makes the code more consistent. Link: https://patch.msgid.link/20260715051115.17385-1-phucduc.bui@gmail.com
2026-07-09ASoC: use .auto_selectable_formatsMark Brown1-0/+6
Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> says: This is v2 to add .auto_selectable_formats to each drivers. I have posted it for all drivers in v1, but is separated into few parts in v2. [x]: already applied [o]: this patch-set [ ]: will post later [x]: convert existing .auto_selectable_formats [o]: add .auto_selectable_formats on driver (already got Reviewed-by) [ ]: add .auto_selectable_formats on driver Link: https://patch.msgid.link/87mrwmhvjd.wl-kuninori.morimoto.gx@renesas.com
2026-07-09ASoC: amd: use .auto_selectable_formatsKuninori Morimoto1-0/+6
We can use .auto_selectable_formats. Let's adds it. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Reviewed-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Link: https://patch.msgid.link/87ldc6hvil.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-07-07ASoC: amd: acp: amd-acp70-acpi-match: Add tas2783 supportBaojun Xu1-0/+45
Add driver data and ACPI match table entries for the TAS2783 on ACP7.0 and ACP7.1 platforms using SoundWire link 0. Signed-off-by: Baojun Xu <baojun.xu@ti.com> Link: https://patch.msgid.link/20260702104429.1157-1-baojun.xu@ti.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-07-06ASoC: amd: acp: Fix linker error with SDCA quirksSyed Saba Kareem4-10/+9
Fix undefined reference to `snd_soc_acpi_amd_sdca_is_device_rt712_vb` linker error when CONFIG_SND_SOC_ACPI_AMD_MATCH=y and CONFIG_SND_SOC_ACPI_AMD_SDCA_QUIRKS=m, which causes built-in code to reference a symbol only available in a module. Fix this by changing SND_SOC_ACPI_AMD_SDCA_QUIRKS from tristate to bool and compiling the quirks code directly into snd-soc-acpi-amd-match rather than as a separate module. This ensures the quirks symbols are always available at link time when the match tables reference them. Fixes: 10d366a846be ("ASoC: amd: acp: Fix Kconfig dependencies for SND_SOC_ACPI_AMD_SDCA_QUIRKS") Reported-by: Arnd Bergmann <arnd@arndb.de> Tested-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Syed Saba Kareem <Syed.SabaKareem@amd.com> Reviewed-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Link: https://patch.msgid.link/20260703123314.147977-1-syed.sabakareem@amd.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-06-30ASoC: sdw_utils: tidyup asoc_sdw_parse_sdw_endpoints()Kuninori Morimoto2-2/+2
We can avoid to use *card. Tidyup it. Current code makes old style / new style conversion difficult. To make future conversions easier to understand, this patch clean up the code a little. but no functional change. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Reviewed-by: Cezary Rojewski <cezary.rojewski@intel.com> Reviewed-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Link: https://patch.msgid.link/87ik75etxw.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-06-08ASoC: amd: acp-sdw-legacy: Bound DAI link iterationMark Brown2-6/+8
Link: https://patch.msgid.link/20260528082110.915549-1-aaron.ma@canonical.com
2026-06-08ASoC: amd: acp-sdw-sof: Bound DAI link iterationAaron Ma1-3/+4
create_sdw_dailinks() walks sof_dais until it finds an entry with initialised cleared, but sof_dais is allocated with exactly num_ends entries. If all entries are initialised, the loop reads past the end of the array. Pass the allocated entry count to create_sdw_dailinks() and stop before reading past the array. Fixes: 6d8348ddc56e ("ASoC: amd: acp: refactor SoundWire machine driver code") Signed-off-by: Aaron Ma <aaron.ma@canonical.com> Link: https://patch.msgid.link/20260528082110.915549-2-aaron.ma@canonical.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-06-08ASoC: amd: acp-sdw-legacy: Bound DAI link iterationAaron Ma1-3/+4
create_sdw_dailinks() walks soc_dais until it finds an entry with initialised cleared, but soc_dais is allocated with exactly num_ends entries. If all entries are initialised, the loop reads past the end of the array. This was reported by KASAN: BUG: KASAN: slab-out-of-bounds in mc_probe+0x26b3/0x2774 [snd_acp_sdw_legacy_mach] Read of size 1 Pass the allocated entry count to create_sdw_dailinks() and stop before reading past the array. Fixes: 2981d9b0789c ("ASoC: amd: acp: add soundwire machine driver for legacy stack") Signed-off-by: Aaron Ma <aaron.ma@canonical.com> Link: https://patch.msgid.link/20260528082110.915549-1-aaron.ma@canonical.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-06-04ASoC: amd: acp70: add standalone RT721 SoundWire machineAleksander Pshenitsyn1-0/+44
The ASUS Vivobook 18 M1807GA (AMD ACP7.x, PCI 1022:15e2, subsystem 1043:3531) exposes a single Realtek RT721 SDCA codec on SoundWire link 1. The BIOS reports the ACP audio config flag as 0 (SoundWire mode), so snd_pci_ps claims the device, brings up the SoundWire managers and enumerates the RT721 peripheral (sdw:0:1:025d:0721:01); the rt721-sdca codec driver binds successfully. No sound card is created, however: acp63_sdw_machine_select() walks snd_soc_acpi_amd_acp70_sdw_machines[] and finds no entry whose declared SoundWire peripherals are all present on the bus. The only existing RT721 entry, acp70_rt721_l1u0_tas2783x2_l1u8b, additionally requires two TAS2783 amplifiers and deliberately exposes the RT721 as jack + DMIC only. This M1807GA variant has no external amplifiers - the RT721's internal AIF2 amplifier path drives the speakers - so that entry never matches and no machine device is registered. Add a standalone RT721 machine entry for link 1 exposing all three RT721 endpoints (jack/AIF1, speaker amplifier/AIF2, DMIC/AIF3), mirroring the standalone RT722 configuration. Place it after the TAS2783 combo entry so platforms that do have the external amplifiers continue to match the more specific entry first. ACPI _ADR of the codec: 0x000130025D072101 (link_id=1 version=3 mfg_id=0x025d Realtek part_id=0x0721 class=0x01). Verified on the hardware: with the entry present the amd_sdw machine binds, an "amd-soundwire" card is registered exposing the rt721-sdca AIF1 (SimpleJack) and AIF2 (SmartAmp) PCM devices, and audio plays out of the built-in speakers. Link: https://bugzilla.kernel.org/show_bug.cgi?id=221282 Signed-off-by: Aleksander Pshenitsyn <brains.fatman@gmail.com> Link: https://patch.msgid.link/20260531101159.14241-1-brains.fatman@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-05-16ASoC: amd: acp-sdw-legacy: check CPU DAI name before loggingCássio Gabriel1-1/+1
devm_kasprintf() can fail and return NULL. The legacy AMD SoundWire machine driver logs cpus->dai_name before checking the allocation result. Move the debug print after the NULL check, matching the ordering used by the SOF AMD SoundWire path after commit 5726b68473f7 ("ASoC: amd/sdw_utils: avoid NULL deref when devm_kasprintf() fails"). Fixes: 2981d9b0789c ("ASoC: amd: acp: add soundwire machine driver for legacy stack") Signed-off-by: Cássio Gabriel <cassiogabrielcontato@gmail.com> Link: https://patch.msgid.link/20260511-asoc-amd-acp-sdw-legacy-dai-name-null-v1-1-dc6151b6da8a@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-04-27ASoC: amd: acp: Add DMI quirk for Valve Steam Deck OLEDGuilherme G. Piccoli4-5/+25
Commit 671dd2ffbd8b ("ASoC: amd: acp: Add new cpu dai and dailink creation for I2S BT instance") introduced a change that "broke" Steam Deck's audio probe, in the OLED model, as observed in the following dmesg snippet: [...] snd_sof_amd_vangogh 0000:04:00.5: Topology: ABI 3:26:0 Kernel ABI 3:23:1 sof_mach nau8821-max: ASoC: physical link acp-bt-codec (id 2) not exist sof_mach nau8821-max: ASoC: topology: could not load header: -22 snd_sof_amd_vangogh 0000:04:00.5: tplg amd/sof-tplg/sof-vangogh-nau8821-max.tplg component load failed -22 snd_sof_amd_vangogh 0000:04:00.5: error: failed to load DSP topology -22 snd_sof_amd_vangogh 0000:04:00.5: ASoC error (-22): at snd_soc_component_probe() on 0000:04:00.5 sof_mach nau8821-max: ASoC: failed to instantiate card -22 sof_mach nau8821-max: error -EINVAL: Failed to register card(sof-nau8821-max) sof_mach nau8821-max: probe with driver sof_mach failed with error -22 [...] Notice the quotes in "broke": it's not really a bug in such commit, but instead a problem with a topology file from Steam Deck OLED. This was discussed to great extent in [1], and Cristian proposed a pretty simple and functional change that resolved the issue for the Deck's issue. That change, though, would break other devices, so it wasn't accepted upstream. And the proper suggested solution (fix the topology) was never implemented, so Valve's kernel (and anyone that wants to boot the mainline on Steam Deck OLED) is carrying that fix downstream. So, we propose hereby a different approach: a DMI quirk, as many already present in the sound drivers, to address this issue solely on Steam Deck OLED, not breaking other devices and as a bonus, allowing simple patch up in case eventually the topology file gets fixed (we'd just need to check against any DMI info reflecting that or the topology/FW versions). The motivation of such upstream quirk is related to users that want to test latest kernel trees on their devices and get no only non-working sound device, but seems some games (like Ori and the Blind Forest) can't properly work without a proper functional audio device. Example of such report can be seen at [2]. Cc: Mark Brown <broonie@kernel.org> Cc: Robert Beckett <bob.beckett@collabora.com> Cc: Umang Jain <uajain@igalia.com> Fixes: 671dd2ffbd8b ("ASoC: amd: acp: Add new cpu dai and dailink creation for I2S BT instance") Link: https://lore.kernel.org/r/20231209205351.880797-11-cristian.ciocaltea@collabora.com/ [1] Link: https://bugzilla.kernel.org/show_bug.cgi?id=218677 [2] Reviewed-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com> Tested-by: Melissa Wen <mwen@igalia.com> Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com> Link: https://patch.msgid.link/20260423183505.116445-1-gpiccoli@igalia.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-04-09ASoC: Yet another round of SDCA fixesMark Brown1-4/+20
Charles Keepax <ckeepax@opensource.cirrus.com> says: Another round of SDCA fixes a couple of fix to the IRQ cleanup from Richard, and a minor tweak to the IRQ handling from me.
2026-04-08ASoC: amd: acp: update DMI quirk and add ACP DMIC for Lenovo platformsSyed Saba Kareem1-4/+4
Replace DMI_EXACT_MATCH with DMI_MATCH for Lenovo SKU entries (21YW, 21YX) so the quirk applies to all variants of these models, not just exact SKU matches. Add ASOC_SDW_ACP_DMIC flag alongside ASOC_SDW_CODEC_SPKR in driver_data for these Lenovo platform entries, as these platforms use ACP PDM DMIC instead of SoundWire DMIC for digital microphone support. Fixes: 3acf517e1ae0 ("ASoC: amd: amd_sdw: add machine driver quirk for Lenovo models") Tested-by: Mark Pearson <mpearson-lenovo@squebb.ca> Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca> Signed-off-by: Syed Saba Kareem <Syed.SabaKareem@amd.com> Reviewed-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Link: https://patch.msgid.link/20260408133029.1368317-1-syed.sabakareem@amd.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-04-06ASoC: amd: acp: add Lenovo P16s G5 AMD quirk for legacy SDW machineMark Pearson1-0/+16