Path: blob/master/sound/soc/amd/acp/amd-acp70-acpi-match.c
54067 views
// SPDX-License-Identifier: GPL-2.0-only1/*2* amd-acp70-acpi-match.c - tables and support for ACP 7.0 & ACP7.13* ACPI enumeration.4*5* Copyright 2025 Advanced Micro Devices, Inc.6*/78#include <sound/soc-acpi.h>9#include "soc-acpi-amd-sdca-quirks.h"10#include "../mach-config.h"1112static const struct snd_soc_acpi_endpoint single_endpoint = {13.num = 0,14.aggregated = 0,15.group_position = 0,16.group_id = 017};1819static const struct snd_soc_acpi_endpoint spk_l_endpoint = {20.num = 0,21.aggregated = 1,22.group_position = 0,23.group_id = 124};2526static const struct snd_soc_acpi_endpoint spk_r_endpoint = {27.num = 0,28.aggregated = 1,29.group_position = 1,30.group_id = 131};3233static const struct snd_soc_acpi_endpoint spk_2_endpoint = {34.num = 0,35.aggregated = 1,36.group_position = 2,37.group_id = 138};3940static const struct snd_soc_acpi_endpoint spk_3_endpoint = {41.num = 0,42.aggregated = 1,43.group_position = 3,44.group_id = 145};4647static const struct snd_soc_acpi_endpoint jack_amp_g1_dmic_endpoints[] = {48/* Jack Endpoint */49{50.num = 0,51.aggregated = 0,52.group_position = 0,53.group_id = 0,54},55/* Amp Endpoint, work as spk_l_endpoint */56{57.num = 1,58.aggregated = 1,59.group_position = 0,60.group_id = 1,61},62/* DMIC Endpoint */63{64.num = 2,65.aggregated = 0,66.group_position = 0,67.group_id = 0,68},69};7071static const struct snd_soc_acpi_adr_device rt712_vb_1_group1_adr[] = {72{73.adr = 0x000130025D071201ull,74.num_endpoints = ARRAY_SIZE(jack_amp_g1_dmic_endpoints),75.endpoints = jack_amp_g1_dmic_endpoints,76.name_prefix = "rt712"77}78};7980static const struct snd_soc_acpi_adr_device rt711_rt1316_group_adr[] = {81{82.adr = 0x000030025D071101ull,83.num_endpoints = 1,84.endpoints = &single_endpoint,85.name_prefix = "rt711"86},87{88.adr = 0x000030025D131601ull,89.num_endpoints = 1,90.endpoints = &spk_l_endpoint,91.name_prefix = "rt1316-1"92},93{94.adr = 0x000032025D131601ull,95.num_endpoints = 1,96.endpoints = &spk_r_endpoint,97.name_prefix = "rt1316-2"98},99};100101static const struct snd_soc_acpi_adr_device rt714_adr[] = {102{103.adr = 0x130025d071401ull,104.num_endpoints = 1,105.endpoints = &single_endpoint,106.name_prefix = "rt714"107}108};109110static const struct snd_soc_acpi_link_adr acp70_4_in_1_sdca[] = {111{ .mask = BIT(0),112.num_adr = ARRAY_SIZE(rt711_rt1316_group_adr),113.adr_d = rt711_rt1316_group_adr,114},115{116.mask = BIT(1),117.num_adr = ARRAY_SIZE(rt714_adr),118.adr_d = rt714_adr,119},120{}121};122123static const struct snd_soc_acpi_endpoint rt722_endpoints[] = {124{125.num = 0,126.aggregated = 0,127.group_position = 0,128.group_id = 0,129},130{131.num = 1,132.aggregated = 0,133.group_position = 0,134.group_id = 0,135},136{137.num = 2,138.aggregated = 0,139.group_position = 0,140.group_id = 0,141},142};143144static const struct snd_soc_acpi_adr_device rt722_0_single_adr[] = {145{146.adr = 0x000030025d072201ull,147.num_endpoints = ARRAY_SIZE(rt722_endpoints),148.endpoints = rt722_endpoints,149.name_prefix = "rt722"150}151};152153static const struct snd_soc_acpi_adr_device rt1320_1_single_adr[] = {154{155.adr = 0x000130025D132001ull,156.num_endpoints = 1,157.endpoints = &single_endpoint,158.name_prefix = "rt1320-1"159}160};161162static const struct snd_soc_acpi_endpoint cs42l43_endpoints[] = {163{ /* Jack Playback Endpoint */164.num = 0,165.aggregated = 0,166.group_position = 0,167.group_id = 0,168},169{ /* DMIC Capture Endpoint */170.num = 1,171.aggregated = 0,172.group_position = 0,173.group_id = 0,174},175{ /* Jack Capture Endpoint */176.num = 2,177.aggregated = 0,178.group_position = 0,179.group_id = 0,180},181{ /* Speaker Playback Endpoint */182.num = 3,183.aggregated = 0,184.group_position = 0,185.group_id = 0,186},187};188189static const struct snd_soc_acpi_adr_device cs35l56x4_l1u3210_adr[] = {190{191.adr = 0x00013301FA355601ull,192.num_endpoints = 1,193.endpoints = &spk_l_endpoint,194.name_prefix = "AMP1"195},196{197.adr = 0x00013201FA355601ull,198.num_endpoints = 1,199.endpoints = &spk_r_endpoint,200.name_prefix = "AMP2"201},202{203.adr = 0x00013101FA355601ull,204.num_endpoints = 1,205.endpoints = &spk_2_endpoint,206.name_prefix = "AMP3"207},208{209.adr = 0x00013001FA355601ull,210.num_endpoints = 1,211.endpoints = &spk_3_endpoint,212.name_prefix = "AMP4"213},214};215216static const struct snd_soc_acpi_adr_device cs35l63x2_l0u01_adr[] = {217{218.adr = 0x00003001FA356301ull,219.num_endpoints = 1,220.endpoints = &spk_l_endpoint,221.name_prefix = "AMP1"222},223{224.adr = 0x00003101FA356301ull,225.num_endpoints = 1,226.endpoints = &spk_r_endpoint,227.name_prefix = "AMP2"228},229};230231static const struct snd_soc_acpi_adr_device cs35l63x2_l1u01_adr[] = {232{233.adr = 0x00013001FA356301ull,234.num_endpoints = 1,235.endpoints = &spk_l_endpoint,236.name_prefix = "AMP1"237},238{239.adr = 0x00013101FA356301ull,240.num_endpoints = 1,241.endpoints = &spk_r_endpoint,242.name_prefix = "AMP2"243},244};245246static const struct snd_soc_acpi_adr_device cs35l63x2_l1u13_adr[] = {247{248.adr = 0x00013101FA356301ull,249.num_endpoints = 1,250.endpoints = &spk_l_endpoint,251.name_prefix = "AMP1"252},253{254.adr = 0x00013301FA356301ull,255.num_endpoints = 1,256.endpoints = &spk_r_endpoint,257.name_prefix = "AMP2"258},259};260261static const struct snd_soc_acpi_adr_device cs35l63x4_l0u0246_adr[] = {262{263.adr = 0x00003001FA356301ull,264.num_endpoints = 1,265.endpoints = &spk_l_endpoint,266.name_prefix = "AMP1"267},268{269.adr = 0x00003201FA356301ull,270.num_endpoints = 1,271.endpoints = &spk_r_endpoint,272.name_prefix = "AMP2"273},274{275.adr = 0x00003401FA356301ull,276.num_endpoints = 1,277.endpoints = &spk_2_endpoint,278.name_prefix = "AMP3"279},280{281.adr = 0x00003601FA356301ull,282.num_endpoints = 1,283.endpoints = &spk_3_endpoint,284.name_prefix = "AMP4"285},286};287288static const struct snd_soc_acpi_adr_device cs42l43_l0u0_adr[] = {289{290.adr = 0x00003001FA424301ull,291.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),292.endpoints = cs42l43_endpoints,293.name_prefix = "cs42l43"294}295};296297static const struct snd_soc_acpi_adr_device cs42l43_l0u1_adr[] = {298{299.adr = 0x00003101FA424301ull,300.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),301.endpoints = cs42l43_endpoints,302.name_prefix = "cs42l43"303}304};305306static const struct snd_soc_acpi_adr_device cs42l43b_l0u1_adr[] = {307{308.adr = 0x00003101FA2A3B01ull,309.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),310.endpoints = cs42l43_endpoints,311.name_prefix = "cs42l43"312}313};314315static const struct snd_soc_acpi_adr_device cs42l43_l1u0_cs35l56x4_l1u0123_adr[] = {316{317.adr = 0x00013001FA424301ull,318.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),319.endpoints = cs42l43_endpoints,320.name_prefix = "cs42l43"321},322{323.adr = 0x00013001FA355601ull,324.num_endpoints = 1,325.endpoints = &spk_l_endpoint,326.name_prefix = "AMP1"327},328{329.adr = 0x00013101FA355601ull,330.num_endpoints = 1,331.endpoints = &spk_r_endpoint,332.name_prefix = "AMP2"333},334{335.adr = 0x00013201FA355601ull,336.num_endpoints = 1,337.endpoints = &spk_2_endpoint,338.name_prefix = "AMP3"339},340{341.adr = 0x00013301FA355601ull,342.num_endpoints = 1,343.endpoints = &spk_3_endpoint,344.name_prefix = "AMP4"345},346};347348static const struct snd_soc_acpi_adr_device cs42l45_l0u0_adr[] = {349{350.adr = 0x00003001FA424501ull,351/* Re-use endpoints, but cs42l45 has no speaker */352.num_endpoints = ARRAY_SIZE(cs42l43_endpoints) - 1,353.endpoints = cs42l43_endpoints,354.name_prefix = "cs42l45"355}356};357358static const struct snd_soc_acpi_adr_device cs42l45_l1u0_adr[] = {359{360.adr = 0x00013001FA424501ull,361/* Re-use endpoints, but cs42l45 has no speaker */362.num_endpoints = ARRAY_SIZE(cs42l43_endpoints) - 1,363.endpoints = cs42l43_endpoints,364.name_prefix = "cs42l45"365}366};367368static const struct snd_soc_acpi_link_adr acp70_cs35l56x4_l1u3210[] = {369{370.mask = BIT(1),371.num_adr = ARRAY_SIZE(cs35l56x4_l1u3210_adr),372.adr_d = cs35l56x4_l1u3210_adr,373},374{}375};376377static const struct snd_soc_acpi_link_adr acp70_cs35l63x4_l0u0246[] = {378{379.mask = BIT(0),380.num_adr = ARRAY_SIZE(cs35l63x4_l0u0246_adr),381.adr_d = cs35l63x4_l0u0246_adr,382},383{}384};385386static const struct snd_soc_acpi_link_adr acp70_cs42l43_l0u1[] = {387{388.mask = BIT(0),389.num_adr = ARRAY_SIZE(cs42l43_l0u1_adr),390.adr_d = cs42l43_l0u1_adr,391},392{}393};394395static const struct snd_soc_acpi_link_adr acp70_cs42l43b_l0u1[] = {396{397.mask = BIT(0),398.num_adr = ARRAY_SIZE(cs42l43b_l0u1_adr),399.adr_d = cs42l43b_l0u1_adr,400},401{}402};403404static const struct snd_soc_acpi_link_adr acp70_cs42l43_l0u0_cs35l56x4_l1u3210[] = {405{406.mask = BIT(0),407.num_adr = ARRAY_SIZE(cs42l43_l0u0_adr),408.adr_d = cs42l43_l0u0_adr,409},410{411.mask = BIT(1),412.num_adr = ARRAY_SIZE(cs35l56x4_l1u3210_adr),413.adr_d = cs35l56x4_l1u3210_adr,414},415{}416};417418static const struct snd_soc_acpi_link_adr acp70_cs42l43_l1u0_cs35l56x4_l1u0123[] = {419{420.mask = BIT(1),421.num_adr = ARRAY_SIZE(cs42l43_l1u0_cs35l56x4_l1u0123_adr),422.adr_d = cs42l43_l1u0_cs35l56x4_l1u0123_adr,423},424{}425};426427static const struct snd_soc_acpi_link_adr acp70_cs42l45_l0u0[] = {428{429.mask = BIT(0),430.num_adr = ARRAY_SIZE(cs42l45_l0u0_adr),431.adr_d = cs42l45_l0u0_adr,432},433{}434};435436static const struct snd_soc_acpi_link_adr acp70_cs42l45_l0u0_cs35l63x2_l1u01[] = {437{438.mask = BIT(0),439.num_adr = ARRAY_SIZE(cs42l45_l0u0_adr),440.adr_d = cs42l45_l0u0_adr,441},442{443.mask = BIT(1),444.num_adr = ARRAY_SIZE(cs35l63x2_l1u01_adr),445.adr_d = cs35l63x2_l1u01_adr,446},447{}448};449450static const struct snd_soc_acpi_link_adr acp70_cs42l45_l0u0_cs35l63x2_l1u13[] = {451{452.mask = BIT(0),453.num_adr = ARRAY_SIZE(cs42l45_l0u0_adr),454.adr_d = cs42l45_l0u0_adr,455},456{457.mask = BIT(1),458.num_adr = ARRAY_SIZE(cs35l63x2_l1u13_adr),459.adr_d = cs35l63x2_l1u13_adr,460},461{}462};463464static const struct snd_soc_acpi_link_adr acp70_cs42l45_l1u0[] = {465{466.mask = BIT(1),467.num_adr = ARRAY_SIZE(cs42l45_l1u0_adr),468.adr_d = cs42l45_l1u0_adr,469},470{}471};472473static const struct snd_soc_acpi_link_adr acp70_cs42l45_l1u0_cs35l63x2_l0u01[] = {474{475.mask = BIT(1),476.num_adr = ARRAY_SIZE(cs42l45_l1u0_adr),477.adr_d = cs42l45_l1u0_adr,478},479{480.mask = BIT(0),481.num_adr = ARRAY_SIZE(cs35l63x2_l0u01_adr),482.adr_d = cs35l63x2_l0u01_adr,483},484{}485};486487static const struct snd_soc_acpi_link_adr acp70_cs42l45_l1u0_cs35l63x4_l0u0246[] = {488{489.mask = BIT(1),490.num_adr = ARRAY_SIZE(cs42l45_l1u0_adr),491.adr_d = cs42l45_l1u0_adr,492},493{494.mask = BIT(0),495.num_adr = ARRAY_SIZE(cs35l63x4_l0u0246_adr),496.adr_d = cs35l63x4_l0u0246_adr,497},498{}499};500501static const struct snd_soc_acpi_link_adr acp70_alc712_vb_l1[] = {502{503.mask = BIT(1),504.num_adr = ARRAY_SIZE(rt712_vb_1_group1_adr),505.adr_d = rt712_vb_1_group1_adr,506},507{}508};509510static const struct snd_soc_acpi_link_adr acp70_rt722_only[] = {511{512.mask = BIT(0),513.num_adr = ARRAY_SIZE(rt722_0_single_adr),514.adr_d = rt722_0_single_adr,515},516{}517};518519static const struct snd_soc_acpi_link_adr acp70_rt722_l0_rt1320_l1[] = {520{521.mask = BIT(0),522.num_adr = ARRAY_SIZE(rt722_0_single_adr),523.adr_d = rt722_0_single_adr,524},525{526.mask = BIT(1),527.num_adr = ARRAY_SIZE(rt1320_1_single_adr),528.adr_d = rt1320_1_single_adr,529},530{}531};532533struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sdw_machines[] = {534{535.link_mask = BIT(0) | BIT(1),536.links = acp70_rt722_l0_rt1320_l1,537.drv_name = "amd_sdw",538},539{540.link_mask = BIT(0) | BIT(1),541.links = acp70_4_in_1_sdca,542.drv_name = "amd_sdw",543},544{545.link_mask = BIT(0) | BIT(1),546.links = acp70_cs42l43_l0u0_cs35l56x4_l1u3210,547.drv_name = "amd_sdw",548},549{550.link_mask = BIT(0) | BIT(1),551.links = acp70_cs42l45_l1u0_cs35l63x4_l0u0246,552.drv_name = "amd_sdw",553},554{555.link_mask = BIT(0) | BIT(1),556.links = acp70_cs42l45_l0u0_cs35l63x2_l1u01,557.drv_name = "amd_sdw",558},559{560.link_mask = BIT(0) | BIT(1),561.links = acp70_cs42l45_l0u0_cs35l63x2_l1u13,562.drv_name = "amd_sdw",563},564{565.link_mask = BIT(0) | BIT(1),566.links = acp70_cs42l45_l1u0_cs35l63x2_l0u01,567.drv_name = "amd_sdw",568},569{570.link_mask = BIT(1),571.links = acp70_cs42l43_l1u0_cs35l56x4_l1u0123,572.drv_name = "amd_sdw",573},574{575.link_mask = BIT(1),576.links = acp70_cs35l56x4_l1u3210,577.drv_name = "amd_sdw",578},579{580.link_mask = BIT(0),581.links = acp70_cs35l63x4_l0u0246,582.drv_name = "amd_sdw",583},584{585.link_mask = BIT(0),586.links = acp70_rt722_only,587.drv_name = "amd_sdw",588},589{590.link_mask = BIT(0),591.links = acp70_cs42l43_l0u1,592.drv_name = "amd_sdw",593},594{595.link_mask = BIT(0),596.links = acp70_cs42l43b_l0u1,597.drv_name = "amd_sdw",598},599{600.link_mask = BIT(0),601.links = acp70_cs42l45_l0u0,602.drv_name = "amd_sdw",603},604{605.link_mask = BIT(1),606.links = acp70_cs42l45_l1u0,607.drv_name = "amd_sdw",608},609{610.link_mask = BIT(1),611.links = acp70_alc712_vb_l1,612.machine_check = snd_soc_acpi_amd_sdca_is_device_rt712_vb,613.drv_name = "amd_sdw",614},615{},616};617EXPORT_SYMBOL(snd_soc_acpi_amd_acp70_sdw_machines);618619struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sof_sdw_machines[] = {620{621.link_mask = BIT(0),622.links = acp70_rt722_only,623.drv_name = "amd_sof_sdw",624.sof_tplg_filename = "sof-acp_7_0-rt722-l0.tplg",625.fw_filename = "sof-acp_7_0.ri",626},627{},628};629EXPORT_SYMBOL(snd_soc_acpi_amd_acp70_sof_sdw_machines);630631MODULE_DESCRIPTION("AMD ACP7.0 & ACP7.1 tables and support for ACPI enumeration");632MODULE_LICENSE("GPL");633MODULE_AUTHOR("[email protected]");634#if IS_ENABLED(CONFIG_SND_SOC_ACPI_AMD_SDCA_QUIRKS)635MODULE_IMPORT_NS("SND_SOC_ACPI_AMD_SDCA_QUIRKS");636#endif637638639