Path: blob/master/sound/soc/intel/common/soc-acpi-intel-mtl-match.c
53644 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_6amp_1_fb_adr[] = {702{703.adr = 0x00013701FA355601ull,704.num_endpoints = ARRAY_SIZE(cs35l56_r_fb_endpoints),705.endpoints = cs35l56_r_fb_endpoints,706.name_prefix = "AMP6"707},708{709.adr = 0x00013601FA355601ull,710.num_endpoints = ARRAY_SIZE(cs35l56_3_fb_endpoints),711.endpoints = cs35l56_3_fb_endpoints,712.name_prefix = "AMP5"713},714{715.adr = 0x00013501FA355601ull,716.num_endpoints = ARRAY_SIZE(cs35l56_5_fb_endpoints),717.endpoints = cs35l56_5_fb_endpoints,718.name_prefix = "AMP4"719},720};721722static const struct snd_soc_acpi_adr_device cs35l63_6amp_3_fb_adr[] = {723{724.adr = 0x00033001FA356301ull,725.num_endpoints = ARRAY_SIZE(cs35l56_l_fb_endpoints),726.endpoints = cs35l56_l_fb_endpoints,727.name_prefix = "AMP1"728},729{730.adr = 0x00033201FA356301ull,731.num_endpoints = ARRAY_SIZE(cs35l56_2_fb_endpoints),732.endpoints = cs35l56_2_fb_endpoints,733.name_prefix = "AMP3"734},735{736.adr = 0x00033401FA356301ull,737.num_endpoints = ARRAY_SIZE(cs35l56_4_fb_endpoints),738.endpoints = cs35l56_4_fb_endpoints,739.name_prefix = "AMP5"740},741};742743static const struct snd_soc_acpi_adr_device cs35l63_6amp_2_fb_adr[] = {744{745.adr = 0x00023101FA356301ull,746.num_endpoints = ARRAY_SIZE(cs35l56_r_fb_endpoints),747.endpoints = cs35l56_r_fb_endpoints,748.name_prefix = "AMP2"749},750{751.adr = 0x00023301FA356301ull,752.num_endpoints = ARRAY_SIZE(cs35l56_3_fb_endpoints),753.endpoints = cs35l56_3_fb_endpoints,754.name_prefix = "AMP4"755},756{757.adr = 0x00023501FA356301ull,758.num_endpoints = ARRAY_SIZE(cs35l56_5_fb_endpoints),759.endpoints = cs35l56_5_fb_endpoints,760.name_prefix = "AMP6"761},762};763764static const struct snd_soc_acpi_adr_device cs35l56_2_r_adr[] = {765{766.adr = 0x00023201FA355601ull,767.num_endpoints = ARRAY_SIZE(cs35l56_r_fb_endpoints),768.endpoints = cs35l56_r_fb_endpoints,769.name_prefix = "AMP3"770},771{772.adr = 0x00023301FA355601ull,773.num_endpoints = ARRAY_SIZE(cs35l56_3_fb_endpoints),774.endpoints = cs35l56_3_fb_endpoints,775.name_prefix = "AMP4"776}777778};779780static const struct snd_soc_acpi_adr_device cs35l56_3_l_adr[] = {781{782.adr = 0x00033001fa355601ull,783.num_endpoints = ARRAY_SIZE(cs35l56_l_fb_endpoints),784.endpoints = cs35l56_l_fb_endpoints,785.name_prefix = "AMP1"786},787{788.adr = 0x00033101fa355601ull,789.num_endpoints = ARRAY_SIZE(cs35l56_2_fb_endpoints),790.endpoints = cs35l56_2_fb_endpoints,791.name_prefix = "AMP2"792}793};794795static const struct snd_soc_acpi_adr_device cs35l63_1_fb_adr[] = {796{797.adr = 0x00013001FA356301ull,798.num_endpoints = ARRAY_SIZE(cs35l56_l_fb_endpoints),799.endpoints = cs35l56_l_fb_endpoints,800.name_prefix = "AMP1"801},802};803804static const struct snd_soc_acpi_adr_device cs35l63_3_fb_adr[] = {805{806.adr = 0x00033101FA356301ull,807.num_endpoints = ARRAY_SIZE(cs35l56_r_fb_endpoints),808.endpoints = cs35l56_r_fb_endpoints,809.name_prefix = "AMP2"810},811};812813static const struct snd_soc_acpi_link_adr rt5682_link2_max98373_link0[] = {814/* Expected order: jack -> amp */815{816.mask = BIT(2),817.num_adr = ARRAY_SIZE(rt5682_2_adr),818.adr_d = rt5682_2_adr,819},820{821.mask = BIT(0),822.num_adr = ARRAY_SIZE(mx8373_0_adr),823.adr_d = mx8373_0_adr,824},825{}826};827828static const struct snd_soc_acpi_link_adr mtl_rvp[] = {829{830.mask = BIT(0),831.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),832.adr_d = rt711_sdca_0_adr,833},834{}835};836837static const struct snd_soc_acpi_link_adr mtl_rt722_only[] = {838{839.mask = BIT(0),840.num_adr = ARRAY_SIZE(rt722_0_single_adr),841.adr_d = rt722_0_single_adr,842},843{}844};845846static const struct snd_soc_acpi_link_adr mtl_3_in_1_sdca[] = {847{848.mask = BIT(0),849.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),850.adr_d = rt711_sdca_0_adr,851},852{853.mask = BIT(2),854.num_adr = ARRAY_SIZE(rt1316_2_group1_adr),855.adr_d = rt1316_2_group1_adr,856},857{858.mask = BIT(3),859.num_adr = ARRAY_SIZE(rt1316_3_group1_adr),860.adr_d = rt1316_3_group1_adr,861},862{863.mask = BIT(1),864.num_adr = ARRAY_SIZE(rt714_1_adr),865.adr_d = rt714_1_adr,866},867{}868};869870static const struct snd_soc_acpi_link_adr mtl_sdw_rt1318_l12_rt714_l0[] = {871{872.mask = BIT(1),873.num_adr = ARRAY_SIZE(rt1318_1_group1_adr),874.adr_d = rt1318_1_group1_adr,875},876{877.mask = BIT(2),878.num_adr = ARRAY_SIZE(rt1318_2_group1_adr),879.adr_d = rt1318_2_group1_adr,880},881{882.mask = BIT(0),883.num_adr = ARRAY_SIZE(rt714_0_adr),884.adr_d = rt714_0_adr,885},886{}887};888889static const struct snd_soc_acpi_link_adr mtl_rt713_l0_rt1316_l12_rt1713_l3[] = {890{891.mask = BIT(0),892.num_adr = ARRAY_SIZE(rt713_0_single_adr),893.adr_d = rt713_0_single_adr,894},895{896.mask = BIT(1),897.num_adr = ARRAY_SIZE(rt1316_1_group2_adr),898.adr_d = rt1316_1_group2_adr,899},900{901.mask = BIT(2),902.num_adr = ARRAY_SIZE(rt1316_2_group2_adr),903.adr_d = rt1316_2_group2_adr,904},905{906.mask = BIT(3),907.num_adr = ARRAY_SIZE(rt1713_3_single_adr),908.adr_d = rt1713_3_single_adr,909},910{}911};912913static const struct snd_soc_acpi_link_adr mtl_rt713_l0_rt1318_l1_rt1713_l3[] = {914{915.mask = BIT(0),916.num_adr = ARRAY_SIZE(rt713_0_single_adr),917.adr_d = rt713_0_single_adr,918},919{920.mask = BIT(1),921.num_adr = ARRAY_SIZE(rt1318_1_single_adr),922.adr_d = rt1318_1_single_adr,923},924{925.mask = BIT(3),926.num_adr = ARRAY_SIZE(rt1713_3_single_adr),927.adr_d = rt1713_3_single_adr,928},929{}930};931932static const struct snd_soc_acpi_link_adr mtl_rt713_l0_rt1318_l12_rt1713_l3[] = {933{934.mask = BIT(0),935.num_adr = ARRAY_SIZE(rt713_0_single_adr),936.adr_d = rt713_0_single_adr,937},938{939.mask = BIT(1),940.num_adr = ARRAY_SIZE(rt1318_1_group1_adr),941.adr_d = rt1318_1_group1_adr,942},943{944.mask = BIT(2),945.num_adr = ARRAY_SIZE(rt1318_2_group1_adr),946.adr_d = rt1318_2_group1_adr,947},948{949.mask = BIT(3),950.num_adr = ARRAY_SIZE(rt1713_3_single_adr),951.adr_d = rt1713_3_single_adr,952},953{}954};955956static const struct snd_soc_acpi_link_adr mtl_rt713_l0_rt1316_l12[] = {957{958.mask = BIT(0),959.num_adr = ARRAY_SIZE(rt713_0_single_adr),960.adr_d = rt713_0_single_adr,961},962{963.mask = BIT(1),964.num_adr = ARRAY_SIZE(rt1316_1_group2_adr),965.adr_d = rt1316_1_group2_adr,966},967{968.mask = BIT(2),969.num_adr = ARRAY_SIZE(rt1316_2_group2_adr),970.adr_d = rt1316_2_group2_adr,971},972{}973};974975static const struct snd_soc_acpi_link_adr mtl_rt711_l0_rt1316_l3[] = {976{977.mask = BIT(0),978.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),979.adr_d = rt711_sdca_0_adr,980},981{982.mask = BIT(3),983.num_adr = ARRAY_SIZE(rt1316_3_single_adr),984.adr_d = rt1316_3_single_adr,985},986{}987};988989static const struct snd_soc_acpi_adr_device mx8363_2_adr[] = {990{991.adr = 0x000230019F836300ull,992.num_endpoints = 1,993.endpoints = &spk_l_endpoint,994.name_prefix = "Left"995},996{997.adr = 0x000231019F836300ull,998.num_endpoints = 1,999.endpoints = &spk_r_endpoint,1000.name_prefix = "Right"1001}1002};10031004static const struct snd_soc_acpi_adr_device cs42l42_0_adr[] = {1005{1006.adr = 0x00001001FA424200ull,1007.num_endpoints = 1,1008.endpoints = &single_endpoint,1009.name_prefix = "cs42l42"1010}1011};10121013static const struct snd_soc_acpi_adr_device tas2783_0_adr[] = {1014{1015.adr = 0x00003c0102000001ull,1016.num_endpoints = 1,1017.endpoints = &spk_l_endpoint,1018.name_prefix = "tas2783-1"1019},1020{1021.adr = 0x0000390102000001ull,1022.num_endpoints = 1,1023.endpoints = &spk_r_endpoint,1024.name_prefix = "tas2783-2"1025},1026{1027.adr = 0x00003d0102000001ull,1028.num_endpoints = 1,1029.endpoints = &spk_l_endpoint,1030.name_prefix = "tas2783-3"1031},1032{1033.adr = 0x00003a0102000001ull,1034.num_endpoints = 1,1035.endpoints = &spk_r_endpoint,1036.name_prefix = "tas2783-4"1037}1038};10391040static const struct snd_soc_acpi_link_adr tas2783_link0[] = {1041{1042.mask = BIT(0),1043.num_adr = ARRAY_SIZE(tas2783_0_adr),1044.adr_d = tas2783_0_adr,1045},1046{}1047};10481049static const struct snd_soc_acpi_link_adr cs42l42_link0_max98363_link2[] = {1050/* Expected order: jack -> amp */1051{1052.mask = BIT(0),1053.num_adr = ARRAY_SIZE(cs42l42_0_adr),1054.adr_d = cs42l42_0_adr,1055},1056{1057.mask = BIT(2),1058.num_adr = ARRAY_SIZE(mx8363_2_adr),1059.adr_d = mx8363_2_adr,1060},1061{}1062};10631064static const struct snd_soc_acpi_link_adr mtl_cs42l43_l0[] = {1065{1066.mask = BIT(0),1067.num_adr = ARRAY_SIZE(cs42l43_0_adr),1068.adr_d = cs42l43_0_adr,1069},1070{}1071};10721073static const struct snd_soc_acpi_link_adr mtl_cs42l43_cs35l56[] = {1074{1075.mask = BIT(0),1076.num_adr = ARRAY_SIZE(cs42l43_0_adr),1077.adr_d = cs42l43_0_adr,1078},1079{1080.mask = BIT(1),1081.num_adr = ARRAY_SIZE(cs35l56_1_adr),1082.adr_d = cs35l56_1_adr,1083},1084{1085.mask = BIT(2),1086.num_adr = ARRAY_SIZE(cs35l56_2_adr),1087.adr_d = cs35l56_2_adr,1088},1089{}1090};10911092static const struct snd_soc_acpi_link_adr cs42l43_link0_cs35l56_link2_link3[] = {1093/* Expected order: jack -> amp */1094{1095.mask = BIT(0),1096.num_adr = ARRAY_SIZE(cs42l43_0_adr),1097.adr_d = cs42l43_0_adr,1098},1099{1100.mask = BIT(2),1101.num_adr = ARRAY_SIZE(cs35l56_2_r_adr),1102.adr_d = cs35l56_2_r_adr,1103},1104{1105.mask = BIT(3),1106.num_adr = ARRAY_SIZE(cs35l56_3_l_adr),1107.adr_d = cs35l56_3_l_adr,1108},1109{}1110};11111112static const struct snd_soc_acpi_link_adr cs42l43_link3_cs35l56_x4_link0_link1_spkagg[] = {1113/* Expected order: jack -> amp */1114{1115.mask = BIT(3),1116.num_adr = ARRAY_SIZE(cs42l43_l3_4amp_spkagg_adr),1117.adr_d = cs42l43_l3_4amp_spkagg_adr,1118},1119{1120.mask = BIT(1),1121.num_adr = 2,1122.adr_d = cs35l56_1_adr,1123},1124{1125.mask = BIT(0),1126.num_adr = 2,1127.adr_d = cs35l56_0_adr,1128},1129{}1130};11311132static const struct snd_soc_acpi_link_adr mtl_cs35l56_x8_link0_link1_fb[] = {1133{1134.mask = BIT(1),1135.num_adr = ARRAY_SIZE(cs35l56_1_fb_adr),1136.adr_d = cs35l56_1_fb_adr,1137},1138{1139.mask = BIT(0),1140.num_adr = ARRAY_SIZE(cs35l56_0_fb_adr),1141.adr_d = cs35l56_0_fb_adr,1142},1143{}1144};11451146static const struct snd_soc_acpi_link_adr mtl_cs35l56_x6_link0_link1_fb[] = {1147{1148.mask = BIT(1),1149.num_adr = ARRAY_SIZE(cs35l56_6amp_1_fb_adr),1150.adr_d = cs35l56_6amp_1_fb_adr,1151},1152{1153.mask = BIT(0),1154/* First 3 amps in cs35l56_0_fb_adr */1155.num_adr = 3,1156.adr_d = cs35l56_0_fb_adr,1157},1158{}1159};11601161static const struct snd_soc_acpi_link_adr mtl_cs35l63_x6_link2_link3_fb[] = {1162{1163.mask = BIT(3),1164.num_adr = ARRAY_SIZE(cs35l63_6amp_3_fb_adr),1165.adr_d = cs35l63_6amp_3_fb_adr,1166},1167{1168.mask = BIT(2),1169.num_adr = ARRAY_SIZE(cs35l63_6amp_2_fb_adr),1170.adr_d = cs35l63_6amp_2_fb_adr,1171},1172{}1173};11741175static const struct snd_soc_acpi_link_adr mtl_cs35l63_x2_link1_link3_fb[] = {1176{1177.mask = BIT(3),1178.num_adr = ARRAY_SIZE(cs35l63_3_fb_adr),1179.adr_d = cs35l63_3_fb_adr,1180},1181{1182.mask = BIT(1),1183.num_adr = ARRAY_SIZE(cs35l63_1_fb_adr),1184.adr_d = cs35l63_1_fb_adr,1185},1186{}1187};11881189/* this table is used when there is no I2S codec present */1190struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_sdw_machines[] = {1191/* mockup tests need to be first */1192{1193.link_mask = GENMASK(3, 0),1194.links = sdw_mockup_headset_2amps_mic,1195.drv_name = "sof_sdw",1196.sof_tplg_filename = "sof-mtl-rt711-rt1308-rt715.tplg",1197},1198{1199.link_mask = BIT(0) | BIT(1) | BIT(3),1200.links = sdw_mockup_headset_1amp_mic,1201.drv_name = "sof_sdw",1202.sof_tplg_filename = "sof-mtl-rt711-rt1308-mono-rt715.tplg",1203},1204{1205.link_mask = GENMASK(2, 0),1206.links = sdw_mockup_mic_headset_1amp,1207.drv_name = "sof_sdw",1208.sof_tplg_filename = "sof-mtl-rt715-rt711-rt1308-mono.tplg",1209},1210{1211.link_mask = BIT(0),1212.links = tas2783_link0,1213.drv_name = "sof_sdw",1214.sof_tplg_filename = "sof-mtl-tas2783.tplg",1215},1216{1217.link_mask = GENMASK(3, 0),1218.links = mtl_rt713_l0_rt1316_l12_rt1713_l3,1219.drv_name = "sof_sdw",1220.sof_tplg_filename = "sof-mtl-rt713-l0-rt1316-l12-rt1713-l3.tplg",1221},1222{1223.link_mask = GENMASK(3, 0),1224.links = mtl_rt713_l0_rt1318_l12_rt1713_l3,1225.drv_name = "sof_sdw",1226.sof_tplg_filename = "sof-mtl-rt713-l0-rt1318-l12-rt1713-l3.tplg",1227},1228{1229.link_mask = BIT(0) | BIT(1) | BIT(3),1230.links = mtl_rt713_l0_rt1318_l1_rt1713_l3,1231.drv_name = "sof_sdw",1232.sof_tplg_filename = "sof-mtl-rt713-l0-rt1318-l1-rt1713-l3.tplg",1233},1234{1235.link_mask = GENMASK(2, 0),1236.links = mtl_rt713_l0_rt1316_l12,1237.drv_name = "sof_sdw",1238.sof_tplg_filename = "sof-mtl-rt713-l0-rt1316-l12.tplg",1239},1240{1241.link_mask = BIT(3) | BIT(0),1242.links = mtl_712_l0_1712_l3,1243.drv_name = "sof_sdw",1244.sof_tplg_filename = "sof-mtl-rt712-l0-rt1712-l3.tplg",1245},1246{1247.link_mask = BIT(0),1248.links = mtl_712_vb_l0,1249.drv_name = "sof_sdw",1250.machine_check = snd_soc_acpi_intel_sdca_is_device_rt712_vb,1251.sof_tplg_filename = "sof-mtl-rt712-vb-l0.tplg",1252.get_function_tplg_files = sof_sdw_get_tplg_files,1253},1254{1255.link_mask = BIT(0),1256.links = mtl_712_l0,1257.drv_name = "sof_sdw",1258.sof_tplg_filename = "sof-mtl-rt712-l0.tplg",1259.get_function_tplg_files = sof_sdw_get_tplg_files,1260},1261{1262.link_mask = GENMASK(2, 0),1263.links = mtl_sdw_rt1318_l12_rt714_l0,1264.drv_name = "sof_sdw",1265.sof_tplg_filename = "sof-mtl-rt1318-l12-rt714-l0.tplg"1266},1267{1268.link_mask = BIT(0) | BIT(2) | BIT(3),1269.links = cs42l43_link0_cs35l56_link2_link3,1270.drv_name = "sof_sdw",1271.sof_tplg_filename = "sof-mtl-cs42l43-l0-cs35l56-l23.tplg",1272.get_function_tplg_files = sof_sdw_get_tplg_files,1273},1274{1275.link_mask = BIT(0) | BIT(1) | BIT(3),1276.links = cs42l43_link3_cs35l56_x4_link0_link1_spkagg,1277.drv_name = "sof_sdw",1278.sof_tplg_filename = "sof-mtl-cs42l43-l3-cs35l56-l01-spkagg.tplg",1279.get_function_tplg_files = sof_sdw_get_tplg_files,1280},1281{1282.link_mask = GENMASK(2, 0),1283.links = mtl_cs42l43_cs35l56,1284.drv_name = "sof_sdw",1285.sof_tplg_filename = "sof-mtl-cs42l43-l0-cs35l56-l12.tplg",1286.get_function_tplg_files = sof_sdw_get_tplg_files,1287},1288{1289.link_mask = BIT(0) | BIT(1),1290.links = mtl_cs35l56_x8_link0_link1_fb,1291.drv_name = "sof_sdw",1292.sof_tplg_filename = "sof-mtl-cs35l56-l01-fb8.tplg",1293.get_function_tplg_files = sof_sdw_get_tplg_files,1294},1295{1296.link_mask = BIT(0) | BIT(1),1297.links = mtl_cs35l56_x6_link0_link1_fb,1298.drv_name = "sof_sdw",1299.sof_tplg_filename = "sof-mtl-cs35l56-l01-fb6.tplg"1300},1301{1302.link_mask = BIT(0),1303.links = mtl_cs42l43_l0,1304.drv_name = "sof_sdw",1305.sof_tplg_filename = "sof-mtl-cs42l43-l0.tplg",1306.get_function_tplg_files = sof_sdw_get_tplg_files,1307},1308{1309.link_mask = BIT(1) | BIT(3),1310.links = mtl_cs35l63_x2_link1_link3_fb,1311.drv_name = "sof_sdw",1312.sof_tplg_filename = "sof-mtl-cs35l56-l01-fb8.tplg",1313},1314{1315.link_mask = BIT(2) | BIT(3),1316.links = mtl_cs35l63_x6_link2_link3_fb,1317.drv_name = "sof_sdw",1318.sof_tplg_filename = "sof-mtl-cs35l56-l01-fb6.tplg",1319},1320{1321.link_mask = GENMASK(3, 0),1322.links = mtl_3_in_1_sdca,1323.drv_name = "sof_sdw",1324.sof_tplg_filename = "sof-mtl-rt711-l0-rt1316-l23-rt714-l1.tplg",1325},1326{1327.link_mask = 0x9, /* 2 active links required */1328.links = mtl_rt711_l0_rt1316_l3,1329.drv_name = "sof_sdw",1330.sof_tplg_filename = "sof-mtl-rt711-l0-rt1316-l3.tplg",1331},1332{1333.link_mask = BIT(0),1334.links = mtl_rt722_only,1335.drv_name = "sof_sdw",1336.sof_tplg_filename = "sof-mtl-rt722-l0.tplg",1337.get_function_tplg_files = sof_sdw_get_tplg_files,1338},1339{1340.link_mask = BIT(0),1341.links = mtl_rvp,1342.drv_name = "sof_sdw",1343.sof_tplg_filename = "sof-mtl-rt711.tplg",1344},1345{1346.link_mask = BIT(0) | BIT(2),1347.links = rt5682_link2_max98373_link0,1348.drv_name = "sof_sdw",1349.sof_tplg_filename = "sof-mtl-sdw-rt5682-l2-max98373-l0.tplg",1350},1351{1352.link_mask = BIT(0) | BIT(2),1353.links = cs42l42_link0_max98363_link2,1354.drv_name = "sof_sdw",1355.sof_tplg_filename = "sof-mtl-sdw-cs42l42-l0-max98363-l2.tplg",1356},1357{},1358};1359EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_sdw_machines);13601361MODULE_IMPORT_NS("SND_SOC_ACPI_INTEL_SDCA_QUIRKS");136213631364