Path: blob/master/sound/soc/intel/common/soc-acpi-intel-lnl-match.c
26493 views
// SPDX-License-Identifier: GPL-2.0-only1/*2* soc-acpi-intel-lnl-match.c - tables and support for LNL ACPI enumeration.3*4* Copyright (c) 2023, Intel Corporation5*6*/78#include <sound/soc-acpi.h>9#include <sound/soc-acpi-intel-match.h>10#include "sof-function-topology-lib.h"11#include "soc-acpi-intel-sdca-quirks.h"12#include "soc-acpi-intel-sdw-mockup-match.h"1314struct snd_soc_acpi_mach snd_soc_acpi_intel_lnl_machines[] = {15{},16};17EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_lnl_machines);1819static const struct snd_soc_acpi_endpoint single_endpoint = {20.num = 0,21.aggregated = 0,22.group_position = 0,23.group_id = 0,24};2526static const struct snd_soc_acpi_endpoint spk_l_endpoint = {27.num = 0,28.aggregated = 1,29.group_position = 0,30.group_id = 1,31};3233static const struct snd_soc_acpi_endpoint spk_r_endpoint = {34.num = 0,35.aggregated = 1,36.group_position = 1,37.group_id = 1,38};3940static const struct snd_soc_acpi_endpoint spk_1_endpoint = {41.num = 0,42.aggregated = 1,43.group_position = 1,44.group_id = 1,45};4647static const struct snd_soc_acpi_endpoint spk_2_endpoint = {48.num = 0,49.aggregated = 1,50.group_position = 2,51.group_id = 1,52};5354static const struct snd_soc_acpi_endpoint spk_3_endpoint = {55.num = 0,56.aggregated = 1,57.group_position = 3,58.group_id = 1,59};6061static const struct snd_soc_acpi_endpoint spk_4_endpoint = {62.num = 0,63.aggregated = 1,64.group_position = 4,65.group_id = 1,66};6768static const struct snd_soc_acpi_endpoint spk_5_endpoint = {69.num = 0,70.aggregated = 1,71.group_position = 5,72.group_id = 1,73};7475static const struct snd_soc_acpi_endpoint spk_6_endpoint = {76.num = 0,77.aggregated = 1,78.group_position = 6,79.group_id = 1,80};8182static const struct snd_soc_acpi_endpoint rt712_endpoints[] = {83{84.num = 0,85.aggregated = 0,86.group_position = 0,87.group_id = 0,88},89{90.num = 1,91.aggregated = 0,92.group_position = 0,93.group_id = 0,94},95};9697/*98* RT722 is a multi-function codec, three endpoints are created for99* its headset, amp and dmic functions.100*/101static const struct snd_soc_acpi_endpoint rt722_endpoints[] = {102{103.num = 0,104.aggregated = 0,105.group_position = 0,106.group_id = 0,107},108{109.num = 1,110.aggregated = 0,111.group_position = 0,112.group_id = 0,113},114{115.num = 2,116.aggregated = 0,117.group_position = 0,118.group_id = 0,119},120};121122static const struct snd_soc_acpi_endpoint jack_dmic_endpoints[] = {123/* Jack Endpoint */124{125.num = 0,126.aggregated = 0,127.group_position = 0,128.group_id = 0,129},130/* DMIC Endpoint */131{132.num = 1,133.aggregated = 0,134.group_position = 0,135.group_id = 0,136},137};138139static const struct snd_soc_acpi_endpoint jack_amp_g1_dmic_endpoints[] = {140/* Jack Endpoint */141{142.num = 0,143.aggregated = 0,144.group_position = 0,145.group_id = 0,146},147/* Amp Endpoint, work as spk_l_endpoint */148{149.num = 1,150.aggregated = 1,151.group_position = 0,152.group_id = 1,153},154/* DMIC Endpoint */155{156.num = 2,157.aggregated = 0,158.group_position = 0,159.group_id = 0,160},161};162163static const struct snd_soc_acpi_endpoint cs42l43_endpoints[] = {164{ /* Jack Playback Endpoint */165.num = 0,166.aggregated = 0,167.group_position = 0,168.group_id = 0,169},170{ /* DMIC Capture Endpoint */171.num = 1,172.aggregated = 0,173.group_position = 0,174.group_id = 0,175},176{ /* Jack Capture Endpoint */177.num = 2,178.aggregated = 0,179.group_position = 0,180.group_id = 0,181},182{ /* Speaker Playback Endpoint */183.num = 3,184.aggregated = 0,185.group_position = 0,186.group_id = 0,187},188};189190static const struct snd_soc_acpi_endpoint cs42l43_amp_spkagg_endpoints[] = {191{ /* Jack Playback Endpoint */192.num = 0,193.aggregated = 0,194.group_position = 0,195.group_id = 0,196},197{ /* DMIC Capture Endpoint */198.num = 1,199.aggregated = 0,200.group_position = 0,201.group_id = 0,202},203{ /* Jack Capture Endpoint */204.num = 2,205.aggregated = 0,206.group_position = 0,207.group_id = 0,208},209{ /* Speaker Playback Endpoint */210.num = 3,211.aggregated = 1,212.group_position = 0,213.group_id = 1,214},215};216217static const struct snd_soc_acpi_adr_device cs35l56_2_l_adr[] = {218{219.adr = 0x00023001FA355601ull,220.num_endpoints = 1,221.endpoints = &spk_l_endpoint,222.name_prefix = "AMP1"223},224{225.adr = 0x00023101FA355601ull,226.num_endpoints = 1,227.endpoints = &spk_2_endpoint,228.name_prefix = "AMP2"229}230};231232static const struct snd_soc_acpi_adr_device cs35l56_3_r_adr[] = {233{234.adr = 0x00033201fa355601ull,235.num_endpoints = 1,236.endpoints = &spk_r_endpoint,237.name_prefix = "AMP3"238},239{240.adr = 0x00033301fa355601ull,241.num_endpoints = 1,242.endpoints = &spk_3_endpoint,243.name_prefix = "AMP4"244}245};246247static const struct snd_soc_acpi_adr_device cs35l56_3_lr_adr[] = {248{249.adr = 0x00033001fa355601ull,250.num_endpoints = 1,251.endpoints = &spk_l_endpoint,252.name_prefix = "AMP1"253},254{255.adr = 0x00033101fa355601ull,256.num_endpoints = 1,257.endpoints = &spk_r_endpoint,258.name_prefix = "AMP2"259}260};261262static const struct snd_soc_acpi_adr_device cs35l56_1_3amp_adr[] = {263{264.adr = 0x00013001fa355601ull,265.num_endpoints = 1,266.endpoints = &spk_1_endpoint,267.name_prefix = "AMP1"268},269{270.adr = 0x00013101fa355601ull,271.num_endpoints = 1,272.endpoints = &spk_2_endpoint,273.name_prefix = "AMP2"274},275{276.adr = 0x00013201fa355601ull,277.num_endpoints = 1,278.endpoints = &spk_3_endpoint,279.name_prefix = "AMP3"280}281};282283static const struct snd_soc_acpi_adr_device cs35l56_3_3amp_adr[] = {284{285.adr = 0x00033301fa355601ull,286.num_endpoints = 1,287.endpoints = &spk_4_endpoint,288.name_prefix = "AMP4"289},290{291.adr = 0x00033401fa355601ull,292.num_endpoints = 1,293.endpoints = &spk_5_endpoint,294.name_prefix = "AMP5"295},296{297.adr = 0x00033501fa355601ull,298.num_endpoints = 1,299.endpoints = &spk_6_endpoint,300.name_prefix = "AMP6"301}302};303304static const struct snd_soc_acpi_adr_device cs42l43_0_adr[] = {305{306.adr = 0x00003001FA424301ull,307.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),308.endpoints = cs42l43_endpoints,309.name_prefix = "cs42l43"310}311};312313static const struct snd_soc_acpi_adr_device cs42l43_2_adr[] = {314{315.adr = 0x00023001fa424301ull,316.num_endpoints = ARRAY_SIZE(cs42l43_amp_spkagg_endpoints),317.endpoints = cs42l43_amp_spkagg_endpoints,318.name_prefix = "cs42l43"319}320};321322static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {323{324.adr = 0x000030025D071101ull,325.num_endpoints = 1,326.endpoints = &single_endpoint,327.name_prefix = "rt711"328}329};330331static const struct snd_soc_acpi_adr_device rt712_2_single_adr[] = {332{333.adr = 0x000230025D071201ull,334.num_endpoints = ARRAY_SIZE(rt712_endpoints),335.endpoints = rt712_endpoints,336.name_prefix = "rt712"337}338};339340static const struct snd_soc_acpi_adr_device rt1712_3_single_adr[] = {341{342.adr = 0x000330025D171201ull,343.num_endpoints = 1,344.endpoints = &single_endpoint,345.name_prefix = "rt712-dmic"346}347};348349static const struct snd_soc_acpi_adr_device rt712_vb_2_group1_adr[] = {350{351.adr = 0x000230025D071201ull,352.num_endpoints = ARRAY_SIZE(jack_amp_g1_dmic_endpoints),353.endpoints = jack_amp_g1_dmic_endpoints,354.name_prefix = "rt712"355}356};357358static const struct snd_soc_acpi_adr_device rt722_0_single_adr[] = {359{360.adr = 0x000030025d072201ull,361.num_endpoints = ARRAY_SIZE(rt722_endpoints),362.endpoints = rt722_endpoints,363.name_prefix = "rt722"364}365};366367static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = {368{369.adr = 0x000230025D131601ull,370.num_endpoints = 1,371.endpoints = &spk_l_endpoint,372.name_prefix = "rt1316-1"373}374};375376static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = {377{378.adr = 0x000331025D131601ull,379.num_endpoints = 1,380.endpoints = &spk_r_endpoint,381.name_prefix = "rt1316-2"382}383};384385static const struct snd_soc_acpi_adr_device rt1318_1_adr[] = {386{387.adr = 0x000133025D131801ull,388.num_endpoints = 1,389.endpoints = &single_endpoint,390.name_prefix = "rt1318-1"391}392};393394static const struct snd_soc_acpi_adr_device rt1318_1_group1_adr[] = {395{396.adr = 0x000130025D131801ull,397.num_endpoints = 1,398.endpoints = &spk_l_endpoint,399.name_prefix = "rt1318-1"400}401};402403static const struct snd_soc_acpi_adr_device rt1318_2_group1_adr[] = {404{405.adr = 0x000232025D131801ull,406.num_endpoints = 1,407.endpoints = &spk_r_endpoint,408.name_prefix = "rt1318-2"409}410};411412static const struct snd_soc_acpi_adr_device rt1320_1_group1_adr[] = {413{414.adr = 0x000130025D132001ull,415.num_endpoints = 1,416.endpoints = &spk_r_endpoint,417.name_prefix = "rt1320-1"418}419};420421static const struct snd_soc_acpi_adr_device rt1320_2_group2_adr[] = {422{423.adr = 0x000231025D132001ull,424.num_endpoints = 1,425.endpoints = &spk_r_endpoint,426.name_prefix = "rt1320-2"427}428};429430static const struct snd_soc_acpi_adr_device rt1320_1_group2_adr[] = {431{432.adr = 0x000130025D132001ull,433.num_endpoints = 1,434.endpoints = &spk_l_endpoint,435.name_prefix = "rt1320-1"436}437};438439static const struct snd_soc_acpi_adr_device rt1320_3_group2_adr[] = {440{441.adr = 0x000330025D132001ull,442.num_endpoints = 1,443.endpoints = &spk_r_endpoint,444.name_prefix = "rt1320-2"445}446};447448static const struct snd_soc_acpi_adr_device rt713_0_adr[] = {449{450.adr = 0x000031025D071301ull,451.num_endpoints = 1,452.endpoints = &single_endpoint,453.name_prefix = "rt713"454}455};456457static const struct snd_soc_acpi_adr_device rt713_vb_2_adr[] = {458{459.adr = 0x000230025d071301ull,460.num_endpoints = ARRAY_SIZE(jack_dmic_endpoints),461.endpoints = jack_dmic_endpoints,462.name_prefix = "rt713"463}464};465466static const struct snd_soc_acpi_adr_device rt714_0_adr[] = {467{468.adr = 0x000030025D071401ull,469.num_endpoints = 1,470.endpoints = &single_endpoint,471.name_prefix = "rt714"472}473};474475static const struct snd_soc_acpi_adr_device rt714_1_adr[] = {476{477.adr = 0x000130025D071401ull,478.num_endpoints = 1,479.endpoints = &single_endpoint,480.name_prefix = "rt714"481}482};483484static const struct snd_soc_acpi_link_adr lnl_cs42l43_l0[] = {485{486.mask = BIT(0),487.num_adr = ARRAY_SIZE(cs42l43_0_adr),488.adr_d = cs42l43_0_adr,489},490{}491};492493static const struct snd_soc_acpi_link_adr lnl_cs42l43_l0_cs35l56_l3[] = {494{495.mask = BIT(0),496.num_adr = ARRAY_SIZE(cs42l43_0_adr),497.adr_d = cs42l43_0_adr,498},499{500.mask = BIT(3),501.num_adr = ARRAY_SIZE(cs35l56_3_lr_adr),502.adr_d = cs35l56_3_lr_adr,503},504{}505};506507static const struct snd_soc_acpi_link_adr lnl_cs42l43_l0_cs35l56_l23[] = {508{509.mask = BIT(0),510.num_adr = ARRAY_SIZE(cs42l43_0_adr),511.adr_d = cs42l43_0_adr,512},513{514.mask = BIT(2),515.num_adr = ARRAY_SIZE(cs35l56_2_l_adr),516.adr_d = cs35l56_2_l_adr,517},518{519.mask = BIT(3),520.num_adr = ARRAY_SIZE(cs35l56_3_r_adr),521.adr_d = cs35l56_3_r_adr,522},523{}524};525526static const struct snd_soc_acpi_link_adr lnl_cs42l43_l2_cs35l56x6_l13[] = {527{528.mask = BIT(2),529.num_adr = ARRAY_SIZE(cs42l43_2_adr),530.adr_d = cs42l43_2_adr,531},532{533.mask = BIT(1),534.num_adr = ARRAY_SIZE(cs35l56_1_3amp_adr),535.adr_d = cs35l56_1_3amp_adr,536},537{538.mask = BIT(3),539.num_adr = ARRAY_SIZE(cs35l56_3_3amp_adr),540.adr_d = cs35l56_3_3amp_adr,541},542{}543};544545static const struct snd_soc_acpi_link_adr lnl_rvp[] = {546{547.mask = BIT(0),548.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),549.adr_d = rt711_sdca_0_adr,550},551{}552};553554static const struct snd_soc_acpi_link_adr lnl_712_only[] = {555{556.mask = BIT(2),557.num_adr = ARRAY_SIZE(rt712_2_single_adr),558.adr_d = rt712_2_single_adr,559},560{561.mask = BIT(3),562.num_adr = ARRAY_SIZE(rt1712_3_single_adr),563.adr_d = rt1712_3_single_adr,564},565{}566};567568static const struct snd_soc_acpi_link_adr lnl_rt722_only[] = {569{570.mask = BIT(0),571.num_adr = ARRAY_SIZE(rt722_0_single_adr),572.adr_d = rt722_0_single_adr,573},574{}575};576577static const struct snd_soc_acpi_link_adr lnl_3_in_1_sdca[] = {578{579.mask = BIT(0),580.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),581.adr_d = rt711_sdca_0_adr,582},583{584.mask = BIT(2),585.num_adr = ARRAY_SIZE(rt1316_2_group1_adr),586.adr_d = rt1316_2_group1_adr,587},588{589.mask = BIT(3),590.num_adr = ARRAY_SIZE(rt1316_3_group1_adr),591.adr_d = rt1316_3_group1_adr,592},593{594.mask = BIT(1),595.num_adr = ARRAY_SIZE(rt714_1_adr),596.adr_d = rt714_1_adr,597},598{}599};600601static const struct snd_soc_acpi_link_adr lnl_sdw_rt1318_l12_rt714_l0[] = {602{603.mask = BIT(1),604.num_adr = ARRAY_SIZE(rt1318_1_group1_adr),605.adr_d = rt1318_1_group1_adr,606},607{608.mask = BIT(2),609.num_adr = ARRAY_SIZE(rt1318_2_group1_adr),610.adr_d = rt1318_2_group1_adr,611},612{613.mask = BIT(0),614.num_adr = ARRAY_SIZE(rt714_0_adr),615.adr_d = rt714_0_adr,616},617{}618};619620static const struct snd_soc_acpi_link_adr lnl_sdw_rt1320_l12_rt714_l0[] = {621{622.mask = BIT(1),623.num_adr = ARRAY_SIZE(rt1320_1_group2_adr),624.adr_d = rt1320_1_group2_adr,625},626{627.mask = BIT(2),628.num_adr = ARRAY_SIZE(rt1320_2_group2_adr),629.adr_d = rt1320_2_group2_adr,630},631{632.mask = BIT(0),633.num_adr = ARRAY_SIZE(rt714_0_adr),634.adr_d = rt714_0_adr,635},636{}637};638639static const struct snd_soc_acpi_link_adr lnl_sdw_rt713_l0_rt1318_l1[] = {640{641.mask = BIT(0),642.num_adr = ARRAY_SIZE(rt713_0_adr),643.adr_d = rt713_0_adr,644},645{646.mask = BIT(1),647.num_adr = ARRAY_SIZE(rt1318_1_adr),648.adr_d = rt1318_1_adr,649},650{}651};652653static const struct snd_soc_acpi_link_adr lnl_sdw_rt713_vb_l2_rt1320_l13[] = {654{655.mask = BIT(2),656.num_adr = ARRAY_SIZE(rt713_vb_2_adr),657.adr_d = rt713_vb_2_adr,658},659{660.mask = BIT(1),661.num_adr = ARRAY_SIZE(rt1320_1_group2_adr),662.adr_d = rt1320_1_group2_adr,663},664{665.mask = BIT(3),666.num_adr = ARRAY_SIZE(rt1320_3_group2_adr),667.adr_d = rt1320_3_group2_adr,668},669{}670};671672static const struct snd_soc_acpi_link_adr lnl_sdw_rt712_vb_l2_rt1320_l1[] = {673{674.mask = BIT(2),675.num_adr = ARRAY_SIZE(rt712_vb_2_group1_adr),676.adr_d = rt712_vb_2_group1_adr,677},678{679.mask = BIT(1),680.num_adr = ARRAY_SIZE(rt1320_1_group1_adr),681.adr_d = rt1320_1_group1_adr,682},683{}684};685686/* this table is used when there is no I2S codec present */687/* this table is used when there is no I2S codec present */688struct snd_soc_acpi_mach snd_soc_acpi_intel_lnl_sdw_machines[] = {689/* mockup tests need to be first */690{691.link_mask = GENMASK(3, 0),692.links = sdw_mockup_headset_2amps_mic,693.drv_name = "sof_sdw",694.sof_tplg_filename = "sof-lnl-rt711-rt1308-rt715.tplg",695},696{697.link_mask = BIT(0) | BIT(1) | BIT(3),698.links = sdw_mockup_headset_1amp_mic,699.drv_name = "sof_sdw",700.sof_tplg_filename = "sof-lnl-rt711-rt1308-mono-rt715.tplg",701},702{703.link_mask = GENMASK(2, 0),704.links = sdw_mockup_mic_headset_1amp,705.drv_name = "sof_sdw",706.sof_tplg_filename = "sof-lnl-rt715-rt711-rt1308-mono.tplg",707},708{709.link_mask = BIT(0),710.links = sdw_mockup_multi_func,711.drv_name = "sof_sdw",712.sof_tplg_filename = "sof-lnl-rt722-l0.tplg", /* Reuse the existing tplg file */713},714{715.link_mask = GENMASK(3, 0),716.links = lnl_3_in_1_sdca,717.drv_name = "sof_sdw",718.sof_tplg_filename = "sof-lnl-rt711-l0-rt1316-l23-rt714-l1.tplg",719},720{721.link_mask = BIT(0) | BIT(2) | BIT(3),722.links = lnl_cs42l43_l0_cs35l56_l23,723.drv_name = "sof_sdw",724.sof_tplg_filename = "sof-lnl-cs42l43-l0-cs35l56-l23.tplg",725},726{727.link_mask = BIT(1) | BIT(2) | BIT(3),728.links = lnl_cs42l43_l2_cs35l56x6_l13,729.drv_name = "sof_sdw",730.sof_tplg_filename = "sof-lnl-cs42l43-l2-cs35l56x6-l13.tplg",731},732{733.link_mask = BIT(0) | BIT(3),734.links = lnl_cs42l43_l0_cs35l56_l3,735.drv_name = "sof_sdw",736.sof_tplg_filename = "sof-lnl-cs42l43-l0-cs35l56-l3.tplg",737},738{739.link_mask = BIT(0),740.links = lnl_cs42l43_l0,741.drv_name = "sof_sdw",742.sof_tplg_filename = "sof-lnl-cs42l43-l0.tplg",743.get_function_tplg_files = sof_sdw_get_tplg_files,744},745{746.link_mask = BIT(0),747.links = lnl_rvp,748.drv_name = "sof_sdw",749.sof_tplg_filename = "sof-lnl-rt711.tplg",750},751{752.link_mask = BIT(2) | BIT(3),753.links = lnl_712_only,754.drv_name = "sof_sdw",755.sof_tplg_filename = "sof-lnl-rt712-l2-rt1712-l3.tplg",756},757{758.link_mask = BIT(0),759.links = lnl_rt722_only,760.drv_name = "sof_sdw",761.sof_tplg_filename = "sof-lnl-rt722-l0.tplg",762.get_function_tplg_files = sof_sdw_get_tplg_files,763},764{765.link_mask = GENMASK(2, 0),766.links = lnl_sdw_rt1318_l12_rt714_l0,767.drv_name = "sof_sdw",768.sof_tplg_filename = "sof-lnl-rt1318-l12-rt714-l0.tplg"769},770{771.link_mask = GENMASK(2, 0),772.links = lnl_sdw_rt1320_l12_rt714_l0,773.drv_name = "sof_sdw",774.sof_tplg_filename = "sof-lnl-rt1320-l12-rt714-l0.tplg"775},776{777.link_mask = BIT(0) | BIT(1),778.links = lnl_sdw_rt713_l0_rt1318_l1,779.drv_name = "sof_sdw",780.sof_tplg_filename = "sof-lnl-rt713-l0-rt1318-l1.tplg"781},782{783.link_mask = BIT(1) | BIT(2),784.links = lnl_sdw_rt712_vb_l2_rt1320_l1,785.drv_name = "sof_sdw",786.machine_check = snd_soc_acpi_intel_sdca_is_device_rt712_vb,787.sof_tplg_filename = "sof-lnl-rt712-l2-rt1320-l1.tplg",788.get_function_tplg_files = sof_sdw_get_tplg_files,789},790{791.link_mask = BIT(1) | BIT(2) | BIT(3),792.links = lnl_sdw_rt713_vb_l2_rt1320_l13,793.drv_name = "sof_sdw",794.machine_check = snd_soc_acpi_intel_sdca_is_device_rt712_vb,795.sof_tplg_filename = "sof-lnl-rt713-l2-rt1320-l13.tplg",796.get_function_tplg_files = sof_sdw_get_tplg_files,797},798{},799};800EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_lnl_sdw_machines);801802803