Path: blob/master/sound/soc/intel/common/soc-acpi-intel-mtl-match.c
26493 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_link_adr cs42l42_link0_max98363_link2[] = {951/* Expected order: jack -> amp */952{953.mask = BIT(0),954.num_adr = ARRAY_SIZE(cs42l42_0_adr),955.adr_d = cs42l42_0_adr,956},957{958.mask = BIT(2),959.num_adr = ARRAY_SIZE(mx8363_2_adr),960.adr_d = mx8363_2_adr,961},962{}963};964965static const struct snd_soc_acpi_link_adr mtl_cs42l43_l0[] = {966{967.mask = BIT(0),968.num_adr = ARRAY_SIZE(cs42l43_0_adr),969.adr_d = cs42l43_0_adr,970},971{}972};973974static const struct snd_soc_acpi_link_adr mtl_cs42l43_cs35l56[] = {975{976.mask = BIT(0),977.num_adr = ARRAY_SIZE(cs42l43_0_adr),978.adr_d = cs42l43_0_adr,979},980{981.mask = BIT(1),982.num_adr = ARRAY_SIZE(cs35l56_1_adr),983.adr_d = cs35l56_1_adr,984},985{986.mask = BIT(2),987.num_adr = ARRAY_SIZE(cs35l56_2_adr),988.adr_d = cs35l56_2_adr,989},990{}991};992993static const struct snd_soc_acpi_link_adr cs42l43_link0_cs35l56_link2_link3[] = {994/* Expected order: jack -> amp */995{996.mask = BIT(0),997.num_adr = ARRAY_SIZE(cs42l43_0_adr),998.adr_d = cs42l43_0_adr,999},1000{1001.mask = BIT(2),1002.num_adr = ARRAY_SIZE(cs35l56_2_r_adr),1003.adr_d = cs35l56_2_r_adr,1004},1005{1006.mask = BIT(3),1007.num_adr = ARRAY_SIZE(cs35l56_3_l_adr),1008.adr_d = cs35l56_3_l_adr,1009},1010{}1011};10121013static const struct snd_soc_acpi_link_adr cs42l43_link3_cs35l56_x4_link0_link1_spkagg[] = {1014/* Expected order: jack -> amp */1015{1016.mask = BIT(3),1017.num_adr = ARRAY_SIZE(cs42l43_l3_4amp_spkagg_adr),1018.adr_d = cs42l43_l3_4amp_spkagg_adr,1019},1020{1021.mask = BIT(1),1022.num_adr = 2,1023.adr_d = cs35l56_1_adr,1024},1025{1026.mask = BIT(0),1027.num_adr = 2,1028.adr_d = cs35l56_0_adr,1029},1030{}1031};10321033static const struct snd_soc_acpi_link_adr mtl_cs35l56_x8_link0_link1_fb[] = {1034{1035.mask = BIT(1),1036.num_adr = ARRAY_SIZE(cs35l56_1_fb_adr),1037.adr_d = cs35l56_1_fb_adr,1038},1039{1040.mask = BIT(0),1041.num_adr = ARRAY_SIZE(cs35l56_0_fb_adr),1042.adr_d = cs35l56_0_fb_adr,1043},1044{}1045};10461047static const struct snd_soc_acpi_link_adr mtl_cs35l63_x2_link1_link3_fb[] = {1048{1049.mask = BIT(3),1050.num_adr = ARRAY_SIZE(cs35l63_3_fb_adr),1051.adr_d = cs35l63_3_fb_adr,1052},1053{1054.mask = BIT(1),1055.num_adr = ARRAY_SIZE(cs35l63_1_fb_adr),1056.adr_d = cs35l63_1_fb_adr,1057},1058{}1059};10601061/* this table is used when there is no I2S codec present */1062struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_sdw_machines[] = {1063/* mockup tests need to be first */1064{1065.link_mask = GENMASK(3, 0),1066.links = sdw_mockup_headset_2amps_mic,1067.drv_name = "sof_sdw",1068.sof_tplg_filename = "sof-mtl-rt711-rt1308-rt715.tplg",1069},1070{1071.link_mask = BIT(0) | BIT(1) | BIT(3),1072.links = sdw_mockup_headset_1amp_mic,1073.drv_name = "sof_sdw",1074.sof_tplg_filename = "sof-mtl-rt711-rt1308-mono-rt715.tplg",1075},1076{1077.link_mask = GENMASK(2, 0),1078.links = sdw_mockup_mic_headset_1amp,1079.drv_name = "sof_sdw",1080.sof_tplg_filename = "sof-mtl-rt715-rt711-rt1308-mono.tplg",1081},1082{1083.link_mask = GENMASK(3, 0),1084.links = mtl_rt713_l0_rt1316_l12_rt1713_l3,1085.drv_name = "sof_sdw",1086.sof_tplg_filename = "sof-mtl-rt713-l0-rt1316-l12-rt1713-l3.tplg",1087},1088{1089.link_mask = GENMASK(3, 0),1090.links = mtl_rt713_l0_rt1318_l12_rt1713_l3,1091.drv_name = "sof_sdw",1092.sof_tplg_filename = "sof-mtl-rt713-l0-rt1318-l12-rt1713-l3.tplg",1093},1094{1095.link_mask = BIT(0) | BIT(1) | BIT(3),1096.links = mtl_rt713_l0_rt1318_l1_rt1713_l3,1097.drv_name = "sof_sdw",1098.sof_tplg_filename = "sof-mtl-rt713-l0-rt1318-l1-rt1713-l3.tplg",1099},1100{1101.link_mask = GENMASK(2, 0),1102.links = mtl_rt713_l0_rt1316_l12,1103.drv_name = "sof_sdw",1104.sof_tplg_filename = "sof-mtl-rt713-l0-rt1316-l12.tplg",1105},1106{1107.link_mask = BIT(3) | BIT(0),1108.links = mtl_712_l0_1712_l3,1109.drv_name = "sof_sdw",1110.sof_tplg_filename = "sof-mtl-rt712-l0-rt1712-l3.tplg",1111},1112{1113.link_mask = BIT(0),1114.links = mtl_712_vb_l0,1115.drv_name = "sof_sdw",1116.machine_check = snd_soc_acpi_intel_sdca_is_device_rt712_vb,1117.sof_tplg_filename = "sof-mtl-rt712-vb-l0.tplg",1118.get_function_tplg_files = sof_sdw_get_tplg_files,1119},1120{1121.link_mask = BIT(0),1122.links = mtl_712_l0,1123.drv_name = "sof_sdw",1124.sof_tplg_filename = "sof-mtl-rt712-l0.tplg",1125.get_function_tplg_files = sof_sdw_get_tplg_files,1126},1127{1128.link_mask = GENMASK(2, 0),1129.links = mtl_sdw_rt1318_l12_rt714_l0,1130.drv_name = "sof_sdw",1131.sof_tplg_filename = "sof-mtl-rt1318-l12-rt714-l0.tplg"1132},1133{1134.link_mask = BIT(0) | BIT(2) | BIT(3),1135.links = cs42l43_link0_cs35l56_link2_link3,1136.drv_name = "sof_sdw",1137.sof_tplg_filename = "sof-mtl-cs42l43-l0-cs35l56-l23.tplg",1138.get_function_tplg_files = sof_sdw_get_tplg_files,1139},1140{1141.link_mask = BIT(0) | BIT(1) | BIT(3),1142.links = cs42l43_link3_cs35l56_x4_link0_link1_spkagg,1143.drv_name = "sof_sdw",1144.sof_tplg_filename = "sof-mtl-cs42l43-l3-cs35l56-l01-spkagg.tplg",1145.get_function_tplg_files = sof_sdw_get_tplg_files,1146},1147{1148.link_mask = GENMASK(2, 0),1149.links = mtl_cs42l43_cs35l56,1150.drv_name = "sof_sdw",1151.sof_tplg_filename = "sof-mtl-cs42l43-l0-cs35l56-l12.tplg",1152.get_function_tplg_files = sof_sdw_get_tplg_files,1153},1154{1155.link_mask = BIT(0) | BIT(1),1156.links = mtl_cs35l56_x8_link0_link1_fb,1157.drv_name = "sof_sdw",1158.sof_tplg_filename = "sof-mtl-cs35l56-l01-fb8.tplg",1159.get_function_tplg_files = sof_sdw_get_tplg_files,1160},1161{1162.link_mask = BIT(0),1163.links = mtl_cs42l43_l0,1164.drv_name = "sof_sdw",1165.sof_tplg_filename = "sof-mtl-cs42l43-l0.tplg",1166.get_function_tplg_files = sof_sdw_get_tplg_files,1167},1168{1169.link_mask = BIT(1) | BIT(3),1170.links = mtl_cs35l63_x2_link1_link3_fb,1171.drv_name = "sof_sdw",1172.sof_tplg_filename = "sof-mtl-cs35l56-l01-fb8.tplg",1173},1174{1175.link_mask = GENMASK(3, 0),1176.links = mtl_3_in_1_sdca,1177.drv_name = "sof_sdw",1178.sof_tplg_filename = "sof-mtl-rt711-l0-rt1316-l23-rt714-l1.tplg",1179},1180{1181.link_mask = 0x9, /* 2 active links required */1182.links = mtl_rt711_l0_rt1316_l3,1183.drv_name = "sof_sdw",1184.sof_tplg_filename = "sof-mtl-rt711-l0-rt1316-l3.tplg",1185},1186{1187.link_mask = BIT(0),1188.links = mtl_rt722_only,1189.drv_name = "sof_sdw",1190.sof_tplg_filename = "sof-mtl-rt722-l0.tplg",1191.get_function_tplg_files = sof_sdw_get_tplg_files,1192},1193{1194.link_mask = BIT(0),1195.links = mtl_rvp,1196.drv_name = "sof_sdw",1197.sof_tplg_filename = "sof-mtl-rt711.tplg",1198},1199{1200.link_mask = BIT(0) | BIT(2),1201.links = rt5682_link2_max98373_link0,1202.drv_name = "sof_sdw",1203.sof_tplg_filename = "sof-mtl-sdw-rt5682-l2-max98373-l0.tplg",1204},1205{1206.link_mask = BIT(0) | BIT(2),1207.links = cs42l42_link0_max98363_link2,1208.drv_name = "sof_sdw",1209.sof_tplg_filename = "sof-mtl-sdw-cs42l42-l0-max98363-l2.tplg",1210},1211{},1212};1213EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_sdw_machines);12141215MODULE_IMPORT_NS("SND_SOC_ACPI_INTEL_SDCA_QUIRKS");121612171218