Path: blob/master/sound/soc/intel/common/soc-acpi-intel-mtl-match.c
29268 views
// SPDX-License-Identifier: GPL-2.0-only1/*2* soc-acpi-intel-mtl-match.c - tables and support for MTL ACPI enumeration.3*4* Copyright (c) 2022, Intel Corporation.5*6*/78#include <linux/soundwire/sdw_intel.h>9#include <sound/sdca.h>10#include <sound/soc-acpi.h>11#include <sound/soc-acpi-intel-match.h>12#include <sound/soc-acpi-intel-ssp-common.h>13#include "sof-function-topology-lib.h"14#include "soc-acpi-intel-sdca-quirks.h"15#include "soc-acpi-intel-sdw-mockup-match.h"1617static const struct snd_soc_acpi_codecs mtl_rt5682_rt5682s_hp = {18.num_codecs = 2,19.codecs = {RT5682_ACPI_HID, RT5682S_ACPI_HID},20};2122static const struct snd_soc_acpi_codecs mtl_essx_83x6 = {23.num_codecs = 3,24.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},25};2627static const struct snd_soc_acpi_codecs mtl_lt6911_hdmi = {28.num_codecs = 1,29.codecs = {"INTC10B0"}30};3132struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_machines[] = {33{34.comp_ids = &mtl_essx_83x6,35.drv_name = "mtl_es83x6_c1_h02",36.machine_quirk = snd_soc_acpi_codec_list,37.quirk_data = &mtl_lt6911_hdmi,38.sof_tplg_filename = "sof-mtl-es83x6-ssp1-hdmi-ssp02.tplg",39},40{41.comp_ids = &mtl_essx_83x6,42.drv_name = "sof-essx8336",43.sof_tplg_filename = "sof-mtl-es8336", /* the tplg suffix is added at run time */44.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |45SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |46SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,47},48{49.comp_ids = &mtl_rt5682_rt5682s_hp,50.drv_name = "mtl_rt5682_c1_h02",51.machine_quirk = snd_soc_acpi_codec_list,52.quirk_data = &mtl_lt6911_hdmi,53.sof_tplg_filename = "sof-mtl-rt5682-ssp1-hdmi-ssp02.tplg",54},55/* place boards for each headphone codec: sof driver will complete the56* tplg name and machine driver will detect the amp type57*/58{59.id = CS42L42_ACPI_HID,60.drv_name = "mtl_cs42l42_def",61.sof_tplg_filename = "sof-mtl", /* the tplg suffix is added at run time */62.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |63SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,64},65{66.id = DA7219_ACPI_HID,67.drv_name = "mtl_da7219_def",68.sof_tplg_filename = "sof-mtl", /* the tplg suffix is added at run time */69.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |70SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,71},72{73.id = NAU8825_ACPI_HID,74.drv_name = "mtl_nau8825_def",75.sof_tplg_filename = "sof-mtl", /* the tplg suffix is added at run time */76.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |77SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,78},79{80.id = RT5650_ACPI_HID,81.drv_name = "mtl_rt5682_def",82.sof_tplg_filename = "sof-mtl", /* the tplg suffix is added at run time */83.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |84SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,85},86{87.comp_ids = &mtl_rt5682_rt5682s_hp,88.drv_name = "mtl_rt5682_def",89.sof_tplg_filename = "sof-mtl", /* the tplg suffix is added at run time */90.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |91SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,92},93/* place amp-only boards in the end of table */94{95.id = "INTC10B0",96.drv_name = "mtl_lt6911_hdmi_ssp",97.sof_tplg_filename = "sof-mtl-hdmi-ssp02.tplg",98},99{},100};101EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_machines);102103static const struct snd_soc_acpi_endpoint single_endpoint = {104.num = 0,105.aggregated = 0,106.group_position = 0,107.group_id = 0,108};109110static const struct snd_soc_acpi_endpoint spk_l_endpoint = {111.num = 0,112.aggregated = 1,113.group_position = 0,114.group_id = 1,115};116117static const struct snd_soc_acpi_endpoint spk_r_endpoint = {118.num = 0,119.aggregated = 1,120.group_position = 1,121.group_id = 1,122};123124static const struct snd_soc_acpi_endpoint rt712_endpoints[] = {125{126.num = 0,127.aggregated = 0,128.group_position = 0,129.group_id = 0,130},131{132.num = 1,133.aggregated = 0,134.group_position = 0,135.group_id = 0,136},137};138139static const struct snd_soc_acpi_endpoint rt712_vb_endpoints[] = {140{141.num = 0,142.aggregated = 0,143.group_position = 0,144.group_id = 0,145},146{147.num = 1,148.aggregated = 0,149.group_position = 0,150.group_id = 0,151},152{153.num = 2,154.aggregated = 0,155.group_position = 0,156.group_id = 0,157},158};159160/*161* RT722 is a multi-function codec, three endpoints are created for162* its headset, amp and dmic functions.163*/164static const struct snd_soc_acpi_endpoint rt722_endpoints[] = {165{166.num = 0,167.aggregated = 0,168.group_position = 0,169.group_id = 0,170},171{172.num = 1,173.aggregated = 0,174.group_position = 0,175.group_id = 0,176},177{178.num = 2,179.aggregated = 0,180.group_position = 0,181.group_id = 0,182},183};184185static const struct snd_soc_acpi_endpoint spk_2_endpoint = {186.num = 0,187.aggregated = 1,188.group_position = 2,189.group_id = 1,190};191192static const struct snd_soc_acpi_endpoint spk_3_endpoint = {193.num = 0,194.aggregated = 1,195.group_position = 3,196.group_id = 1,197};198199static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {200{201.adr = 0x000030025D071101ull,202.num_endpoints = 1,203.endpoints = &single_endpoint,204.name_prefix = "rt711"205}206};207208static const struct snd_soc_acpi_adr_device rt712_0_single_adr[] = {209{210.adr = 0x000030025D071201ull,211.num_endpoints = ARRAY_SIZE(rt712_endpoints),212.endpoints = rt712_endpoints,213.name_prefix = "rt712"214}215};216217static const struct snd_soc_acpi_adr_device rt712_vb_0_single_adr[] = {218{219.adr = 0x000030025D071201ull,220.num_endpoints = ARRAY_SIZE(rt712_vb_endpoints),221.endpoints = rt712_vb_endpoints,222.name_prefix = "rt712"223}224};225226static const struct snd_soc_acpi_adr_device rt1712_3_single_adr[] = {227{228.adr = 0x000330025D171201ull,229.num_endpoints = 1,230.endpoints = &single_endpoint,231.name_prefix = "rt712-dmic"232}233};234235static const struct snd_soc_acpi_adr_device rt722_0_single_adr[] = {236{237.adr = 0x000030025d072201ull,238.num_endpoints = ARRAY_SIZE(rt722_endpoints),239.endpoints = rt722_endpoints,240.name_prefix = "rt722"241}242};243244static const struct snd_soc_acpi_adr_device rt713_0_single_adr[] = {245{246.adr = 0x000031025D071301ull,247.num_endpoints = 1,248.endpoints = &single_endpoint,249.name_prefix = "rt713"250}251};252253static const struct snd_soc_acpi_adr_device rt1713_3_single_adr[] = {254{255.adr = 0x000331025D171301ull,256.num_endpoints = 1,257.endpoints = &single_endpoint,258.name_prefix = "rt713-dmic"259}260};261262static const struct snd_soc_acpi_adr_device mx8373_0_adr[] = {263{264.adr = 0x000023019F837300ull,265.num_endpoints = 1,266.endpoints = &spk_l_endpoint,267.name_prefix = "Left"268},269{270.adr = 0x000027019F837300ull,271.num_endpoints = 1,272.endpoints = &spk_r_endpoint,273.name_prefix = "Right"274}275};276277static const struct snd_soc_acpi_adr_device rt5682_2_adr[] = {278{279.adr = 0x000221025D568200ull,280.num_endpoints = 1,281.endpoints = &single_endpoint,282.name_prefix = "rt5682"283}284};285286static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = {287{288.adr = 0x000230025D131601ull,289.num_endpoints = 1,290.endpoints = &spk_l_endpoint,291.name_prefix = "rt1316-1"292}293};294295static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = {296{297.adr = 0x000331025D131601ull,298.num_endpoints = 1,299.endpoints = &spk_r_endpoint,300.name_prefix = "rt1316-2"301}302};303304static const struct snd_soc_acpi_adr_device rt1316_1_group2_adr[] = {305{306.adr = 0x000131025D131601ull,307.num_endpoints = 1,308.endpoints = &spk_l_endpoint,309.name_prefix = "rt1316-1"310}311};312313static const struct snd_soc_acpi_adr_device rt1316_2_group2_adr[] = {314{315.adr = 0x000230025D131601ull,316.num_endpoints = 1,317.endpoints = &spk_r_endpoint,318.name_prefix = "rt1316-2"319}320};321322static const struct snd_soc_acpi_adr_device rt1316_3_single_adr[] = {323{324.adr = 0x000330025D131601ull,325.num_endpoints = 1,326.endpoints = &single_endpoint,327.name_prefix = "rt1316-1"328}329};330331static const struct snd_soc_acpi_adr_device rt1318_1_single_adr[] = {332{333.adr = 0x000130025D131801ull,334.num_endpoints = 1,335.endpoints = &single_endpoint,336.name_prefix = "rt1318-1"337}338};339340static const struct snd_soc_acpi_adr_device rt1318_1_group1_adr[] = {341{342.adr = 0x000130025D131801ull,343.num_endpoints = 1,344.endpoints = &spk_l_endpoint,345.name_prefix = "rt1318-1"346}347};348349static const struct snd_soc_acpi_adr_device rt1318_2_group1_adr[] = {350{351.adr = 0x000232025D131801ull,352.num_endpoints = 1,353.endpoints = &spk_r_endpoint,354.name_prefix = "rt1318-2"355}356};357358static const struct snd_soc_acpi_adr_device rt714_0_adr[] = {359{360.adr = 0x000030025D071401ull,361.num_endpoints = 1,362.endpoints = &single_endpoint,363.name_prefix = "rt714"364}365};366367static const struct snd_soc_acpi_adr_device rt714_1_adr[] = {368{369.adr = 0x000130025D071401ull,370.num_endpoints = 1,371.endpoints = &single_endpoint,372.name_prefix = "rt714"373}374};375376static const struct snd_soc_acpi_link_adr mtl_712_l0_1712_l3[] = {377{378.mask = BIT(0),379.num_adr = ARRAY_SIZE(rt712_0_single_adr),380.adr_d = rt712_0_single_adr,381},382{383.mask = BIT(3),384.num_adr = ARRAY_SIZE(rt1712_3_single_adr),385.adr_d = rt1712_3_single_adr,386},387{}388};389390static const struct snd_soc_acpi_link_adr mtl_712_l0[] = {391{392.mask = BIT(0),393.num_adr = ARRAY_SIZE(rt712_0_single_adr),394.adr_d = rt712_0_single_adr,395},396{}397};398399static const struct snd_soc_acpi_link_adr mtl_712_vb_l0[] = {400{401.mask = BIT(0),402.num_adr = ARRAY_SIZE(rt712_vb_0_single_adr),403.adr_d = rt712_vb_0_single_adr,404},405{}406};407408static const struct snd_soc_acpi_endpoint cs42l43_endpoints[] = {409{ /* Jack Playback Endpoint */410.num = 0,411.aggregated = 0,412.group_position = 0,413.group_id = 0,414},415{ /* DMIC Capture Endpoint */416.num = 1,417.aggregated = 0,418.group_position = 0,419.group_id = 0,420},421{ /* Jack Capture Endpoint */422.num = 2,423.aggregated = 0,424.group_position = 0,425.group_id = 0,426},427{ /* Speaker Playback Endpoint */428.num = 3,429.aggregated = 0,430.group_position = 0,431.group_id = 0,432},433};434435static const struct snd_soc_acpi_adr_device cs42l43_0_adr[] = {436{437.adr = 0x00003001FA424301ull,438.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),439.endpoints = cs42l43_endpoints,440.name_prefix = "cs42l43"441}442};443444/* CS42L43 - speaker DAI aggregated with 4 amps */445static const struct snd_soc_acpi_endpoint cs42l43_4amp_spkagg_endpoints[] = {446{ /* Jack Playback Endpoint */447.num = 0,448.aggregated = 0,449.group_position = 0,450.group_id = 0,451},452{ /* DMIC Capture Endpoint */453.num = 1,454.aggregated = 0,455.group_position = 0,456.group_id = 0,457},458{ /* Jack Capture Endpoint */459.num = 2,460.aggregated = 0,461.group_position = 0,462.group_id = 0,463},464{ /* Speaker Playback Endpoint */465.num = 3,466.aggregated = 1,467.group_position = 4,468.group_id = 1,469},470};471472/* CS42L43 on link3 aggregated with 4 amps */473static const struct snd_soc_acpi_adr_device cs42l43_l3_4amp_spkagg_adr[] = {474{475.adr = 0x00033001FA424301ull,476.num_endpoints = ARRAY_SIZE(cs42l43_4amp_spkagg_endpoints),477.endpoints = cs42l43_4amp_spkagg_endpoints,478.name_prefix = "cs42l43"479}480};481482static const struct snd_soc_acpi_endpoint cs35l56_l_fb_endpoints[] = {483{ /* Speaker Playback Endpoint */484.num = 0,485.aggregated = 1,486.group_position = 0,487.group_id = 1,488},489{ /* Feedback Capture Endpoint */490.num = 1,491.aggregated = 1,492.group_position = 0,493.group_id = 2,494},495};496497static const struct snd_soc_acpi_endpoint cs35l56_r_fb_endpoints[] = {498{ /* Speaker Playback Endpoint */499.num = 0,500.aggregated = 1,501.group_position = 1,502.group_id = 1,503},504{ /* Feedback Capture Endpoint */505.num = 1,506.aggregated = 1,507.group_position = 1,508.group_id = 2,509},510};511512static const struct snd_soc_acpi_endpoint cs35l56_2_fb_endpoints[] = {513{ /* Speaker Playback Endpoint */514.num = 0,515.aggregated = 1,516.group_position = 2,517.group_id = 1,518},519{ /* Feedback Capture Endpoint */520.num = 1,521.aggregated = 1,522.group_position = 2,523.group_id = 2,524},525};526527static const struct snd_soc_acpi_endpoint cs35l56_3_fb_endpoints[] = {528{ /* Speaker Playback Endpoint */529.num = 0,530.aggregated = 1,531.group_position = 3,532.group_id = 1,533},534{ /* Feedback Capture Endpoint */535.num = 1,536.aggregated = 1,537.group_position = 3,538.group_id = 2,539},540};541542static const struct snd_soc_acpi_endpoint cs35l56_4_fb_endpoints[] = {543{ /* Speaker Playback Endpoint */544.num = 0,545.aggregated = 1,546.group_position = 4,547.group_id = 1,548},549{ /* Feedback Capture Endpoint */550.num = 1,551.aggregated = 1,552.group_position = 4,553.group_id = 2,554},555};556557static const struct snd_soc_acpi_endpoint cs35l56_5_fb_endpoints[] = {558{ /* Speaker Playback Endpoint */559.num = 0,560.aggregated = 1,561.group_position = 5,562.group_id = 1,563},564{ /* Feedback Capture Endpoint */565.num = 1,566.aggregated = 1,567.group_position = 5,568.group_id = 2,569},570};571572static const struct snd_soc_acpi_endpoint cs35l56_6_fb_endpoints[] = {573{ /* Speaker Playback Endpoint */574.num = 0,575.aggregated = 1,576.group_position = 6,577.group_id = 1,578},579{ /* Feedback Capture Endpoint */580.num = 1,581.aggregated = 1,582.group_position = 6,583.group_id = 2,584},585};586587static const struct snd_soc_acpi_endpoint cs35l56_7_fb_endpoints[] = {588{ /* Speaker Playback Endpoint */589.num = 0,590.aggregated = 1,591.group_position = 7,592.group_id = 1,593},594{ /* Feedback Capture Endpoint */595.num = 1,596.aggregated = 1,597.group_position = 7,598.group_id = 2,599},600};601602static const struct snd_soc_acpi_adr_device cs35l56_0_adr[] = {603{604.adr = 0x00003301FA355601ull,605.num_endpoints = 1,606.endpoints = &spk_l_endpoint,607.name_prefix = "AMP1"608},609{610.adr = 0x00003201FA355601ull,611.num_endpoints = 1,612.endpoints = &spk_2_endpoint,613.name_prefix = "AMP2"614}615};616617static const struct snd_soc_acpi_adr_device cs35l56_1_adr[] = {618{619.adr = 0x00013701FA355601ull,620.num_endpoints = 1,621.endpoints = &spk_r_endpoint,622.name_prefix = "AMP3"623},624{625.adr = 0x00013601FA355601ull,626.num_endpoints = 1,627.endpoints = &spk_3_endpoint,628.name_prefix = "AMP4"629}630};631632static const struct snd_soc_acpi_adr_device cs35l56_2_adr[] = {633{634.adr = 0x00023301FA355601ull,635.num_endpoints = 1,636.endpoints = &spk_l_endpoint,637.name_prefix = "AMP1"638},639{640.adr = 0x00023201FA355601ull,641.num_endpoints = 1,642.endpoints = &spk_2_endpoint,643.name_prefix = "AMP2"644}645};646647static const struct snd_soc_acpi_adr_device cs35l56_0_fb_adr[] = {648{649.adr = 0x00003301FA355601ull,650.num_endpoints = ARRAY_SIZE(cs35l56_l_fb_endpoints),651.endpoints = cs35l56_l_fb_endpoints,652.name_prefix = "AMP1"653},654{655.adr = 0x00003201FA355601ull,656.num_endpoints = ARRAY_SIZE(cs35l56_2_fb_endpoints),657.endpoints = cs35l56_2_fb_endpoints,658.name_prefix = "AMP2"659},660{661.adr = 0x00003101FA355601ull,662.num_endpoints = ARRAY_SIZE(cs35l56_4_fb_endpoints),663.endpoints = cs35l56_4_fb_endpoints,664.name_prefix = "AMP3"665},666{667.adr = 0x00003001FA355601ull,668.num_endpoints = ARRAY_SIZE(cs35l56_6_fb_endpoints),669.endpoints = cs35l56_6_fb_endpoints,670.name_prefix = "AMP4"671},672};673674static const struct snd_soc_acpi_adr_device cs35l56_1_fb_adr[] = {675{676.adr = 0x00013701FA355601ull,677.num_endpoints = ARRAY_SIZE(cs35l56_r_fb_endpoints),678.endpoints = cs35l56_r_fb_endpoints,679.name_prefix = "AMP8"680},681{682.adr = 0x00013601FA355601ull,683.num_endpoints = ARRAY_SIZE(cs35l56_3_fb_endpoints),684.endpoints = cs35l56_3_fb_endpoints,685.name_prefix = "AMP7"686},687{688.adr = 0x00013501FA355601ull,689.num_endpoints = ARRAY_SIZE(cs35l56_5_fb_endpoints),690.endpoints = cs35l56_5_fb_endpoints,691.name_prefix = "AMP6"692},693{694.adr = 0x00013401FA355601ull,695.num_endpoints = ARRAY_SIZE(cs35l56_7_fb_endpoints),696.endpoints = cs35l56_7_fb_endpoints,697.name_prefix = "AMP5"698},699};700701static const struct snd_soc_acpi_adr_device cs35l56_2_r_adr[] = {702{703.adr = 0x00023201FA355601ull,704.num_endpoints = ARRAY_SIZE(cs35l56_r_fb_endpoints),705.endpoints = cs35l56_r_fb_endpoints,706.name_prefix = "AMP3"707},708{709.adr = 0x00023301FA355601ull,710.num_endpoints = ARRAY_SIZE(cs35l56_3_fb_endpoints),711.endpoints = cs35l56_3_fb_endpoints,712.name_prefix = "AMP4"713}714715};716717static const struct snd_soc_acpi_adr_device cs35l56_3_l_adr[] = {718{719.adr = 0x00033001fa355601ull,720.num_endpoints = ARRAY_SIZE(cs35l56_l_fb_endpoints),721.endpoints = cs35l56_l_fb_endpoints,722.name_prefix = "AMP1"723},724{725.adr = 0x00033101fa355601ull,726.num_endpoints = ARRAY_SIZE(cs35l56_2_fb_endpoints),727.endpoints = cs35l56_2_fb_endpoints,728.name_prefix = "AMP2"729}730};731732static const struct snd_soc_acpi_adr_device cs35l63_1_fb_adr[] = {733{734.adr = 0x00013001FA356301ull,735.num_endpoints = ARRAY_SIZE(cs35l56_l_fb_endpoints),736.endpoints = cs35l56_l_fb_endpoints,737.name_prefix = "AMP1"738},739};740741static const struct snd_soc_acpi_adr_device cs35l63_3_fb_adr[] = {742{743.adr = 0x00033101FA356301ull,744.num_endpoints = ARRAY_SIZE(cs35l56_r_fb_endpoints),745.endpoints = cs35l56_r_fb_endpoints,746.name_prefix = "AMP2"747},748};749750static const struct snd_soc_acpi_link_adr rt5682_link2_max98373_link0[] = {751/* Expected order: jack -> amp */752{753.mask = BIT(2),754.num_adr = ARRAY_SIZE(rt5682_2_adr),755.adr_d = rt5682_2_adr,756},757{758.mask = BIT(0),759.num_adr = ARRAY_SIZE(mx8373_0_adr),760.adr_d = mx8373_0_adr,761},762{}763};764765static const struct snd_soc_acpi_link_adr mtl_rvp[] = {766{767.mask = BIT(0),768.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),769.adr_d = rt711_sdca_0_adr,770},771{}772};773774static const struct snd_soc_acpi_link_adr mtl_rt722_only[] = {775{776.mask = BIT(0),777.num_adr = ARRAY_SIZE(rt722_0_single_adr),778.adr_d = rt722_0_single_adr,779},780{}781};782783static const struct snd_soc_acpi_link_adr mtl_3_in_1_sdca[] = {784{785.mask = BIT(0),786.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),787.adr_d = rt711_sdca_0_adr,788},789{790.mask = BIT(2),791.num_adr = ARRAY_SIZE(rt1316_2_group1_adr),792.adr_d = rt1316_2_group1_adr,793},794{795.mask = BIT(3),796.num_adr = ARRAY_SIZE(rt1316_3_group1_adr),797.adr_d = rt1316_3_group1_adr,798},799{800.mask = BIT(1),801.num_adr = ARRAY_SIZE(rt714_1_adr),802.adr_d = rt714_1_adr,803},804{}805};806807static const struct snd_soc_acpi_link_adr mtl_sdw_rt1318_l12_rt714_l0[] = {808{809.mask = BIT(1),810.num_adr = ARRAY_SIZE(rt1318_1_group1_adr),811.adr_d = rt1318_1_group1_adr,812},813{814.mask = BIT(2),815.num_adr = ARRAY_SIZE(rt1318_2_group1_adr),816.adr_d = rt1318_2_group1_adr,817},818{819.mask = BIT(0),820.num_adr = ARRAY_SIZE(rt714_0_adr),821.adr_d = rt714_0_adr,822},823{}824};825826static const struct snd_soc_acpi_link_adr mtl_rt713_l0_rt1316_l12_rt1713_l3[] = {827{828.mask = BIT(0),829.num_adr = ARRAY_SIZE(rt713_0_single_adr),830.adr_d = rt713_0_single_adr,831},832{833.mask = BIT(1),834.num_adr = ARRAY_SIZE(rt1316_1_group2_adr),835.adr_d = rt1316_1_group2_adr,836},837{838.mask = BIT(2),839.num_adr = ARRAY_SIZE(rt1316_2_group2_adr),840.adr_d = rt1316_2_group2_adr,841},842{843.mask = BIT(3),844.num_adr = ARRAY_SIZE(rt1713_3_single_adr),845.adr_d = rt1713_3_single_adr,846},847{}848};849850static const struct snd_soc_acpi_link_adr mtl_rt713_l0_rt1318_l1_rt1713_l3[] = {851{852.mask = BIT(0),853.num_adr = ARRAY_SIZE(rt713_0_single_adr),854.adr_d = rt713_0_single_adr,855},856{857.mask = BIT(1),858.num_adr = ARRAY_SIZE(rt1318_1_single_adr),859.adr_d = rt1318_1_single_adr,860},861{862.mask = BIT(3),863.num_adr = ARRAY_SIZE(rt1713_3_single_adr),864.adr_d = rt1713_3_single_adr,865},866{}867};868869static const struct snd_soc_acpi_link_adr mtl_rt713_l0_rt1318_l12_rt1713_l3[] = {870{871.mask = BIT(0),872.num_adr = ARRAY_SIZE(rt713_0_single_adr),873.adr_d = rt713_0_single_adr,874},875{876.mask = BIT(1),877.num_adr = ARRAY_SIZE(rt1318_1_group1_adr),878.adr_d = rt1318_1_group1_adr,879},880{881.mask = BIT(2),882.num_adr = ARRAY_SIZE(rt1318_2_group1_adr),883.adr_d = rt1318_2_group1_adr,884},885{886.mask = BIT(3),887.num_adr = ARRAY_SIZE(rt1713_3_single_adr),888.adr_d = rt1713_3_single_adr,889},890{}891};892893static const struct snd_soc_acpi_link_adr mtl_rt713_l0_rt1316_l12[] = {894{895.mask = BIT(0),896.num_adr = ARRAY_SIZE(rt713_0_single_adr),897.adr_d = rt713_0_single_adr,898},899{900.mask = BIT(1),901.num_adr = ARRAY_SIZE(rt1316_1_group2_adr),902.adr_d = rt1316_1_group2_adr,903},904{905.mask = BIT(2),906.num_adr = ARRAY_SIZE(rt1316_2_group2_adr),907.adr_d = rt1316_2_group2_adr,908},909{}910};911912static const struct snd_soc_acpi_link_adr mtl_rt711_l0_rt1316_l3[] = {913{914.mask = BIT(0),915.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),916.adr_d = rt711_sdca_0_adr,917},918{919.mask = BIT(3),920.num_adr = ARRAY_SIZE(rt1316_3_single_adr),921.adr_d = rt1316_3_single_adr,922},923{}924};925926static const struct snd_soc_acpi_adr_device mx8363_2_adr[] = {927{928.adr = 0x000230019F836300ull,929.num_endpoints = 1,930.endpoints = &spk_l_endpoint,931.name_prefix = "Left"932},933{934.adr = 0x000231019F836300ull,935.num_endpoints = 1,936.endpoints = &spk_r_endpoint,937.name_prefix = "Right"938}939};940941static const struct snd_soc_acpi_adr_device cs42l42_0_adr[] = {942{943.adr = 0x00001001FA424200ull,944.num_endpoints = 1,945.endpoints = &single_endpoint,946.name_prefix = "cs42l42"947}948};949950static const struct snd_soc_acpi_adr_device tas2783_0_adr[] = {951{952.adr = 0x0000380102000001ull,953.num_endpoints = 1,954.endpoints = &spk_l_endpoint,955.name_prefix = "tas2783-1"956},957{958.adr = 0x0000390102000001ull,959.num_endpoints = 1,960.endpoints = &spk_r_endpoint,961.name_prefix = "tas2783-2"962}963};964965static const struct snd_soc_acpi_link_adr tas2783_link0[] = {966{967.mask = BIT(0),968.num_adr = ARRAY_SIZE(tas2783_0_adr),969.adr_d = tas2783_0_adr,970},971{}972};973974static const struct snd_soc_acpi_link_adr cs42l42_link0_max98363_link2[] = {975/* Expected order: jack -> amp */976{977.mask = BIT(0),978.num_adr = ARRAY_SIZE(cs42l42_0_adr),979.adr_d = cs42l42_0_adr,980},981{982.mask = BIT(2),983.num_adr = ARRAY_SIZE(mx8363_2_adr),984.adr_d = mx8363_2_adr,985},986{}987};988989static const struct snd_soc_acpi_link_adr mtl_cs42l43_l0[] = {990{991.mask = BIT(0),992.num_adr = ARRAY_SIZE(cs42l43_0_adr),993.adr_d = cs42l43_0_adr,994},995{}996};997998static const struct snd_soc_acpi_link_adr mtl_cs42l43_cs35l56[] = {999{1000.mask = BIT(0),1001.num_adr = ARRAY_SIZE(cs42l43_0_adr),1002.adr_d = cs42l43_0_adr,1003},1004{1005.mask = BIT(1),1006.num_adr = ARRAY_SIZE(cs35l56_1_adr),1007.adr_d = cs35l56_1_adr,1008},1009{1010.mask = BIT(2),1011.num_adr = ARRAY_SIZE(cs35l56_2_adr),1012.adr_d = cs35l56_2_adr,1013},1014{}1015};10161017static const struct snd_soc_acpi_link_adr cs42l43_link0_cs35l56_link2_link3[] = {1018/* Expected order: jack -> amp */1019{1020.mask = BIT(0),1021.num_adr = ARRAY_SIZE(cs42l43_0_adr),1022.adr_d = cs42l43_0_adr,1023},1024{1025.mask = BIT(2),1026.num_adr = ARRAY_SIZE(cs35l56_2_r_adr),1027.adr_d = cs35l56_2_r_adr,1028},1029{1030.mask = BIT(3),1031.num_adr = ARRAY_SIZE(cs35l56_3_l_adr),1032.adr_d = cs35l56_3_l_adr,1033},1034{}1035};10361037static const struct snd_soc_acpi_link_adr cs42l43_link3_cs35l56_x4_link0_link1_spkagg[] = {1038/* Expected order: jack -> amp */1039{1040.mask = BIT(3),1041.num_adr = ARRAY_SIZE(cs42l43_l3_4amp_spkagg_adr),1042.adr_d = cs42l43_l3_4amp_spkagg_adr,1043},1044{1045.mask = BIT(1),1046.num_adr = 2,1047.adr_d = cs35l56_1_adr,1048},1049{1050.mask = BIT(0),1051.num_adr = 2,1052.adr_d = cs35l56_0_adr,1053},1054{}1055};10561057static const struct snd_soc_acpi_link_adr mtl_cs35l56_x8_link0_link1_fb[] = {1058{1059.mask = BIT(1),1060.num_adr = ARRAY_SIZE(cs35l56_1_fb_adr),1061.adr_d = cs35l56_1_fb_adr,1062},1063{1064.mask = BIT(0),1065.num_adr = ARRAY_SIZE(cs35l56_0_fb_adr),1066.adr_d = cs35l56_0_fb_adr,1067},1068{}1069};10701071static const struct snd_soc_acpi_link_adr mtl_cs35l63_x2_link1_link3_fb[] = {1072{1073.mask = BIT(3),1074.num_adr = ARRAY_SIZE(cs35l63_3_fb_adr),1075.adr_d = cs35l63_3_fb_adr,1076},1077{1078.mask = BIT(1),1079.num_adr = ARRAY_SIZE(cs35l63_1_fb_adr),1080.adr_d = cs35l63_1_fb_adr,1081},1082{}1083};10841085/* this table is used when there is no I2S codec present */1086struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_sdw_machines[] = {1087/* mockup tests need to be first */1088{1089.link_mask = GENMASK(3, 0),1090.links = sdw_mockup_headset_2amps_mic,1091.drv_name = "sof_sdw",1092.sof_tplg_filename = "sof-mtl-rt711-rt1308-rt715.tplg",1093},1094{1095.link_mask = BIT(0) | BIT(1) | BIT(3),1096.links = sdw_mockup_headset_1amp_mic,1097.drv_name = "sof_sdw",1098.sof_tplg_filename = "sof-mtl-rt711-rt1308-mono-rt715.tplg",1099},1100{1101.link_mask = GENMASK(2, 0),1102.links = sdw_mockup_mic_headset_1amp,1103.drv_name = "sof_sdw",1104.sof_tplg_filename = "sof-mtl-rt715-rt711-rt1308-mono.tplg",1105},1106{1107.link_mask = BIT(0),1108.links = tas2783_link0,1109.drv_name = "sof_sdw",1110.sof_tplg_filename = "sof-mtl-tas2783.tplg",1111},1112{1113.link_mask = GENMASK(3, 0),1114.links = mtl_rt713_l0_rt1316_l12_rt1713_l3,1115.drv_name = "sof_sdw",1116.sof_tplg_filename = "sof-mtl-rt713-l0-rt1316-l12-rt1713-l3.tplg",1117},1118{1119.link_mask = GENMASK(3, 0),1120.links = mtl_rt713_l0_rt1318_l12_rt1713_l3,1121.drv_name = "sof_sdw",1122.sof_tplg_filename = "sof-mtl-rt713-l0-rt1318-l12-rt1713-l3.tplg",1123},1124{1125.link_mask = BIT(0) | BIT(1) | BIT(3),1126.links = mtl_rt713_l0_rt1318_l1_rt1713_l3,1127.drv_name = "sof_sdw",1128.sof_tplg_filename = "sof-mtl-rt713-l0-rt1318-l1-rt1713-l3.tplg",1129},1130{1131.link_mask = GENMASK(2, 0),1132.links = mtl_rt713_l0_rt1316_l12,1133.drv_name = "sof_sdw",1134.sof_tplg_filename = "sof-mtl-rt713-l0-rt1316-l12.tplg",1135},1136{1137.link_mask = BIT(3) | BIT(0),1138.links = mtl_712_l0_1712_l3,1139.drv_name = "sof_sdw",1140.sof_tplg_filename = "sof-mtl-rt712-l0-rt1712-l3.tplg",1141},1142{1143.link_mask = BIT(0),1144.links = mtl_712_vb_l0,1145.drv_name = "sof_sdw",1146.machine_check = snd_soc_acpi_intel_sdca_is_device_rt712_vb,1147.sof_tplg_filename = "sof-mtl-rt712-vb-l0.tplg",1148.get_function_tplg_files = sof_sdw_get_tplg_files,1149},1150{1151.link_mask = BIT(0),1152.links = mtl_712_l0,1153.drv_name = "sof_sdw",1154.sof_tplg_filename = "sof-mtl-rt712-l0.tplg",1155.get_function_tplg_files = sof_sdw_get_tplg_files,1156},1157{1158.link_mask = GENMASK(2, 0),1159.links = mtl_sdw_rt1318_l12_rt714_l0,1160.drv_name = "sof_sdw",1161.sof_tplg_filename = "sof-mtl-rt1318-l12-rt714-l0.tplg"1162},1163{1164.link_mask = BIT(0) | BIT(2) | BIT(3),1165.links = cs42l43_link0_cs35l56_link2_link3,1166.drv_name = "sof_sdw",1167.sof_tplg_filename = "sof-mtl-cs42l43-l0-cs35l56-l23.tplg",1168.get_function_tplg_files = sof_sdw_get_tplg_files,1169},1170{1171.link_mask = BIT(0) | BIT(1) | BIT(3),1172.links = cs42l43_link3_cs35l56_x4_link0_link1_spkagg,1173.drv_name = "sof_sdw",1174.sof_tplg_filename = "sof-mtl-cs42l43-l3-cs35l56-l01-spkagg.tplg",1175.get_function_tplg_files = sof_sdw_get_tplg_files,1176},1177{1178.link_mask = GENMASK(2, 0),1179.links = mtl_cs42l43_cs35l56,1180.drv_name = "sof_sdw",1181.sof_tplg_filename = "sof-mtl-cs42l43-l0-cs35l56-l12.tplg",1182.get_function_tplg_files = sof_sdw_get_tplg_files,1183},1184{1185.link_mask = BIT(0) | BIT(1),1186.links = mtl_cs35l56_x8_link0_link1_fb,1187.drv_name = "sof_sdw",1188.sof_tplg_filename = "sof-mtl-cs35l56-l01-fb8.tplg",1189.get_function_tplg_files = sof_sdw_get_tplg_files,1190},1191{1192.link_mask = BIT(0),1193.links = mtl_cs42l43_l0,1194.drv_name = "sof_sdw",1195.sof_tplg_filename = "sof-mtl-cs42l43-l0.tplg",1196.get_function_tplg_files = sof_sdw_get_tplg_files,1197},1198{1199.link_mask = BIT(1) | BIT(3),1200.links = mtl_cs35l63_x2_link1_link3_fb,1201.drv_name = "sof_sdw",1202.sof_tplg_filename = "sof-mtl-cs35l56-l01-fb8.tplg",1203},1204{1205.link_mask = GENMASK(3, 0),1206.links = mtl_3_in_1_sdca,1207.drv_name = "sof_sdw",1208.sof_tplg_filename = "sof-mtl-rt711-l0-rt1316-l23-rt714-l1.tplg",1209},1210{1211.link_mask = 0x9, /* 2 active links required */1212.links = mtl_rt711_l0_rt1316_l3,1213.drv_name = "sof_sdw",1214.sof_tplg_filename = "sof-mtl-rt711-l0-rt1316-l3.tplg",1215},1216{1217.link_mask = BIT(0),1218.links = mtl_rt722_only,1219.drv_name = "sof_sdw",1220.sof_tplg_filename = "sof-mtl-rt722-l0.tplg",1221.get_function_tplg_files = sof_sdw_get_tplg_files,1222},1223{1224.link_mask = BIT(0),1225.links = mtl_rvp,1226.drv_name = "sof_sdw",1227.sof_tplg_filename = "sof-mtl-rt711.tplg",1228},1229{1230.link_mask = BIT(0) | BIT(2),1231.links = rt5682_link2_max98373_link0,1232.drv_name = "sof_sdw",1233.sof_tplg_filename = "sof-mtl-sdw-rt5682-l2-max98373-l0.tplg",1234},1235{1236.link_mask = BIT(0) | BIT(2),1237.links = cs42l42_link0_max98363_link2,1238.drv_name = "sof_sdw",1239.sof_tplg_filename = "sof-mtl-sdw-cs42l42-l0-max98363-l2.tplg",1240},1241{},1242};1243EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_sdw_machines);12441245MODULE_IMPORT_NS("SND_SOC_ACPI_INTEL_SDCA_QUIRKS");124612471248