Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions sound/soc/amd/acp/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,14 @@ config SND_SOC_AMD_ACP_COMMON

config SND_SOC_ACPI_AMD_MATCH
tristate
select SND_SOC_ACPI_AMD_SDCA_QUIRKS
select SND_SOC_ACPI if ACPI

config SND_SOC_ACPI_AMD_SDCA_QUIRKS
tristate
depends on ACPI
depends on SND_SOC_SDCA

if SND_SOC_AMD_ACP_COMMON

config SND_SOC_AMD_ACP_PDM
Expand Down
2 changes: 2 additions & 0 deletions sound/soc/amd/acp/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ snd-soc-acpi-amd-match-y := amd-acp63-acpi-match.o amd-acp70-acpi-match.o
snd-acp-sdw-mach-y := acp-sdw-mach-common.o
snd-acp-sdw-sof-mach-y += acp-sdw-sof-mach.o
snd-acp-sdw-legacy-mach-y += acp-sdw-legacy-mach.o
snd-soc-acpi-amd-sdca-quirks-y += soc-acpi-amd-sdca-quirks.o

obj-$(CONFIG_SND_SOC_AMD_ACP_PCM) += snd-acp-pcm.o
obj-$(CONFIG_SND_SOC_AMD_ACP_I2S) += snd-acp-i2s.o
Expand All @@ -40,6 +41,7 @@ obj-$(CONFIG_SND_AMD_ASOC_REMBRANDT) += snd-acp-rembrandt.o
obj-$(CONFIG_SND_AMD_ASOC_ACP63) += snd-acp63.o
obj-$(CONFIG_SND_AMD_ASOC_ACP70) += snd-acp70.o

obj-$(CONFIG_SND_SOC_ACPI_AMD_SDCA_QUIRKS) += snd-soc-acpi-amd-sdca-quirks.o
obj-$(CONFIG_SND_AMD_SOUNDWIRE_ACPI) += snd-amd-sdw-acpi.o
obj-$(CONFIG_SND_SOC_AMD_MACH_COMMON) += snd-acp-mach.o
obj-$(CONFIG_SND_SOC_AMD_LEGACY_MACH) += snd-acp-legacy-mach.o
Expand Down
50 changes: 50 additions & 0 deletions sound/soc/amd/acp/amd-acp70-acpi-match.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
*/

#include <sound/soc-acpi.h>
#include "soc-acpi-amd-sdca-quirks.h"
#include "../mach-config.h"

static const struct snd_soc_acpi_endpoint single_endpoint = {
Expand Down Expand Up @@ -44,6 +45,39 @@ static const struct snd_soc_acpi_endpoint spk_3_endpoint = {
.group_id = 1
};

static const struct snd_soc_acpi_endpoint jack_amp_g1_dmic_endpoints[] = {
/* Jack Endpoint */
{
.num = 0,
.aggregated = 0,
.group_position = 0,
.group_id = 0,
},
/* Amp Endpoint, work as spk_l_endpoint */
{
.num = 1,
.aggregated = 1,
.group_position = 0,
.group_id = 1,
},
/* DMIC Endpoint */
{
.num = 2,
.aggregated = 0,
.group_position = 0,
.group_id = 0,
},
};

static const struct snd_soc_acpi_adr_device rt712_vb_1_group1_adr[] = {
{
.adr = 0x000130025D071201ull,
.num_endpoints = ARRAY_SIZE(jack_amp_g1_dmic_endpoints),
.endpoints = jack_amp_g1_dmic_endpoints,
.name_prefix = "rt712"
}
};

static const struct snd_soc_acpi_adr_device rt711_rt1316_group_adr[] = {
{
.adr = 0x000030025D071101ull,
Expand Down Expand Up @@ -254,6 +288,15 @@ static const struct snd_soc_acpi_link_adr acp70_cs35l56x4_l1[] = {
{}
};

static const struct snd_soc_acpi_link_adr acp70_alc712_vb_l1[] = {
{
.mask = BIT(1),
.num_adr = ARRAY_SIZE(rt712_vb_1_group1_adr),
.adr_d = rt712_vb_1_group1_adr,
},
{}
};

static const struct snd_soc_acpi_link_adr acp70_rt722_only[] = {
{
.mask = BIT(0),
Expand Down Expand Up @@ -308,6 +351,12 @@ struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sdw_machines[] = {
.links = acp70_cs35l56x4_l1,
.drv_name = "amd_sdw",
},
{
.link_mask = BIT(1),
.links = acp70_alc712_vb_l1,
.machine_check = snd_soc_acpi_amd_sdca_is_device_rt712_vb,
.drv_name = "amd_sdw",
},
{},
};
EXPORT_SYMBOL(snd_soc_acpi_amd_acp70_sdw_machines);
Expand All @@ -327,3 +376,4 @@ EXPORT_SYMBOL(snd_soc_acpi_amd_acp70_sof_sdw_machines);
MODULE_DESCRIPTION("AMD ACP7.0 & ACP7.1 tables and support for ACPI enumeration");
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Vijendar.Mukunda@amd.com");
MODULE_IMPORT_NS("SND_SOC_ACPI_AMD_SDCA_QUIRKS");
42 changes: 42 additions & 0 deletions sound/soc/amd/acp/soc-acpi-amd-sdca-quirks.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* soc-acpi-amd-sdca-quirks.c - tables and support for SDCA quirks
*
* Copyright(c) 2025 Advanced Micro Devices, Inc. All rights reserved.
*
*/

#include <linux/soundwire/sdw_amd.h>
#include <sound/sdca.h>
#include <sound/soc-acpi.h>
#include "soc-acpi-amd-sdca-quirks.h"

/*
* Pretend machine quirk. The argument type is not the traditional
* 'struct snd_soc_acpi_mach' pointer but instead the sdw_amd_ctx
* which contains the peripheral information required for the
* SoundWire/SDCA filter on the SMART_MIC setup and interface
* revision. When the return value is false, the entry in the
* 'snd_soc_acpi_mach' table needs to be skipped.
*/
bool snd_soc_acpi_amd_sdca_is_device_rt712_vb(void *arg)
{
struct sdw_amd_ctx *ctx = arg;
int i;

if (!ctx)
return false;

for (i = 0; i < ctx->peripherals->num_peripherals; i++) {
if (sdca_device_quirk_match(ctx->peripherals->array[i],
SDCA_QUIRKS_RT712_VB))
return true;
}

return false;
}
EXPORT_SYMBOL_NS(snd_soc_acpi_amd_sdca_is_device_rt712_vb, "SND_SOC_ACPI_AMD_SDCA_QUIRKS");

MODULE_DESCRIPTION("ASoC ACPI AMD SDCA quirks");
MODULE_LICENSE("GPL");
MODULE_IMPORT_NS("SND_SOC_SDCA");
14 changes: 14 additions & 0 deletions sound/soc/amd/acp/soc-acpi-amd-sdca-quirks.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* soc-acpi-amd-sdca-quirks.h - tables and support for SDCA quirks
*
* Copyright(c) 2025 Advanced Micro Devices, Inc. All rights reserved.
*
*/

#ifndef _SND_SOC_ACPI_AMD_SDCA_QUIRKS
#define _SND_SOC_ACPI_AMD_SDCA_QUIRKS

bool snd_soc_acpi_amd_sdca_is_device_rt712_vb(void *arg);

#endif
Loading