Path: blob/master/sound/soc/intel/common/soc-acpi-intel-rpl-match.c
26493 views
// SPDX-License-Identifier: GPL-2.0-only1/*2* soc-apci-intel-rpl-match.c - tables and support for RPL ACPI enumeration.3*4* Copyright (c) 2022 Intel Corporation.5*/67#include <sound/soc-acpi.h>8#include <sound/soc-acpi-intel-match.h>9#include <sound/soc-acpi-intel-ssp-common.h>1011static const struct snd_soc_acpi_endpoint single_endpoint = {12.num = 0,13.aggregated = 0,14.group_position = 0,15.group_id = 0,16};1718static const struct snd_soc_acpi_endpoint spk_l_endpoint = {19.num = 0,20.aggregated = 1,21.group_position = 0,22.group_id = 1,23};2425static const struct snd_soc_acpi_endpoint spk_r_endpoint = {26.num = 0,27.aggregated = 1,28.group_position = 1,29.group_id = 1,30};3132static const struct snd_soc_acpi_endpoint cs42l43_endpoints[] = {33{ /* Jack Playback Endpoint */34.num = 0,35.aggregated = 0,36.group_position = 0,37.group_id = 0,38},39{ /* DMIC Capture Endpoint */40.num = 1,41.aggregated = 0,42.group_position = 0,43.group_id = 0,44},45{ /* Jack Capture Endpoint */46.num = 2,47.aggregated = 0,48.group_position = 0,49.group_id = 0,50},51{ /* Speaker Playback Endpoint */52.num = 3,53.aggregated = 0,54.group_position = 0,55.group_id = 0,56},57};5859static const struct snd_soc_acpi_adr_device cs42l43_0_adr[] = {60{61.adr = 0x00003001FA424301ull,62.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),63.endpoints = cs42l43_endpoints,64.name_prefix = "cs42l43"65}66};6768static const struct snd_soc_acpi_adr_device rt711_0_adr[] = {69{70.adr = 0x000020025D071100ull,71.num_endpoints = 1,72.endpoints = &single_endpoint,73.name_prefix = "rt711"74}75};7677static const struct snd_soc_acpi_link_adr rpl_rvp[] = {78{79.mask = BIT(0),80.num_adr = ARRAY_SIZE(rt711_0_adr),81.adr_d = rt711_0_adr,82},83{}84};8586static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {87{88.adr = 0x000030025D071101ull,89.num_endpoints = 1,90.endpoints = &single_endpoint,91.name_prefix = "rt711"92}93};9495static const struct snd_soc_acpi_adr_device rt711_sdca_2_adr[] = {96{97.adr = 0x000230025D071101ull,98.num_endpoints = 1,99.endpoints = &single_endpoint,100.name_prefix = "rt711"101}102};103104static const struct snd_soc_acpi_adr_device rt1316_1_group1_adr[] = {105{106.adr = 0x000131025D131601ull, /* unique ID is set for some reason */107.num_endpoints = 1,108.endpoints = &spk_l_endpoint,109.name_prefix = "rt1316-1"110}111};112113static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = {114{115.adr = 0x000230025D131601ull,116.num_endpoints = 1,117.endpoints = &spk_r_endpoint,118.name_prefix = "rt1316-2"119}120};121122static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = {123{124.adr = 0x000330025D131601ull,125.num_endpoints = 1,126.endpoints = &spk_r_endpoint,127.name_prefix = "rt1316-2"128}129};130131static const struct snd_soc_acpi_adr_device rt1316_0_group2_adr[] = {132{133.adr = 0x000030025D131601ull,134.num_endpoints = 1,135.endpoints = &spk_l_endpoint,136.name_prefix = "rt1316-1"137}138};139140static const struct snd_soc_acpi_adr_device rt1316_1_group2_adr[] = {141{142.adr = 0x000131025D131601ull,143.num_endpoints = 1,144.endpoints = &spk_r_endpoint,145.name_prefix = "rt1316-2"146}147};148149static const struct snd_soc_acpi_adr_device rt1318_1_group1_adr[] = {150{151.adr = 0x000132025D131801ull,152.num_endpoints = 1,153.endpoints = &spk_l_endpoint,154.name_prefix = "rt1318-1"155}156};157158static const struct snd_soc_acpi_adr_device rt1318_2_group1_adr[] = {159{160.adr = 0x000230025D131801ull,161.num_endpoints = 1,162.endpoints = &spk_r_endpoint,163.name_prefix = "rt1318-2"164}165};166167static const struct snd_soc_acpi_adr_device rt714_0_adr[] = {168{169.adr = 0x000030025D071401ull,170.num_endpoints = 1,171.endpoints = &single_endpoint,172.name_prefix = "rt714"173}174};175176static const struct snd_soc_acpi_adr_device rt714_2_adr[] = {177{178.adr = 0x000230025D071401ull,179.num_endpoints = 1,180.endpoints = &single_endpoint,181.name_prefix = "rt714"182}183};184185static const struct snd_soc_acpi_adr_device rt714_3_adr[] = {186{187.adr = 0x000330025D071401ull,188.num_endpoints = 1,189.endpoints = &single_endpoint,190.name_prefix = "rt714"191}192};193194static const struct snd_soc_acpi_link_adr rpl_cs42l43_l0[] = {195{196.mask = BIT(0),197.num_adr = ARRAY_SIZE(cs42l43_0_adr),198.adr_d = cs42l43_0_adr,199},200{}201};202203static const struct snd_soc_acpi_link_adr rpl_sdca_3_in_1[] = {204{205.mask = BIT(0),206.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),207.adr_d = rt711_sdca_0_adr,208},209{210.mask = BIT(1),211.num_adr = ARRAY_SIZE(rt1316_1_group1_adr),212.adr_d = rt1316_1_group1_adr,213},214{215.mask = BIT(2),216.num_adr = ARRAY_SIZE(rt714_2_adr),217.adr_d = rt714_2_adr,218},219{220.mask = BIT(3),221.num_adr = ARRAY_SIZE(rt1316_3_group1_adr),222.adr_d = rt1316_3_group1_adr,223},224{}225};226227static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link0_rt1316_link12_rt714_link3[] = {228{229.mask = BIT(0),230.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),231.adr_d = rt711_sdca_0_adr,232},233{234.mask = BIT(1),235.num_adr = ARRAY_SIZE(rt1316_1_group1_adr),236.adr_d = rt1316_1_group1_adr,237},238{239.mask = BIT(2),240.num_adr = ARRAY_SIZE(rt1316_2_group1_adr),241.adr_d = rt1316_2_group1_adr,242},243{244.mask = BIT(3),245.num_adr = ARRAY_SIZE(rt714_3_adr),246.adr_d = rt714_3_adr,247},248{}249};250251static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link2_rt1316_link01_rt714_link3[] = {252{253.mask = BIT(2),254.num_adr = ARRAY_SIZE(rt711_sdca_2_adr),255.adr_d = rt711_sdca_2_adr,256},257{258.mask = BIT(0),259.num_adr = ARRAY_SIZE(rt1316_0_group2_adr),260.adr_d = rt1316_0_group2_adr,261},262{263.mask = BIT(1),264.num_adr = ARRAY_SIZE(rt1316_1_group2_adr),265.adr_d = rt1316_1_group2_adr,266},267{268.mask = BIT(3),269.num_adr = ARRAY_SIZE(rt714_3_adr),270.adr_d = rt714_3_adr,271},272{}273};274275static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link2_rt1316_link01[] = {276{277.mask = BIT(2),278.num_adr = ARRAY_SIZE(rt711_sdca_2_adr),279.adr_d = rt711_sdca_2_adr,280},281{282.mask = BIT(0),283.num_adr = ARRAY_SIZE(rt1316_0_group2_adr),284.adr_d = rt1316_0_group2_adr,285},286{287.mask = BIT(1),288.num_adr = ARRAY_SIZE(rt1316_1_group2_adr),289.adr_d = rt1316_1_group2_adr,290},291{}292};293294static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link0_rt1316_link12[] = {295{296.mask = BIT(0),297.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),298.adr_d = rt711_sdca_0_adr,299},300{301.mask = BIT(1),302.num_adr = ARRAY_SIZE(rt1316_1_group1_adr),303.adr_d = rt1316_1_group1_adr,304},305{306.mask = BIT(2),307.num_adr = ARRAY_SIZE(rt1316_2_group1_adr),308.adr_d = rt1316_2_group1_adr,309},310{}311};312313static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link0_rt1318_link12_rt714_link3[] = {314{315.mask = BIT(0),316.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),317.adr_d = rt711_sdca_0_adr,318},319{320.mask = BIT(1),321.num_adr = ARRAY_SIZE(rt1318_1_group1_adr),322.adr_d = rt1318_1_group1_adr,323},324{325.mask = BIT(2),326.num_adr = ARRAY_SIZE(rt1318_2_group1_adr),327.adr_d = rt1318_2_group1_adr,328},329{330.mask = BIT(3),331.num_adr = ARRAY_SIZE(rt714_3_adr),332.adr_d = rt714_3_adr,333},334{}335};336337static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link0_rt1318_link12[] = {338{339.mask = BIT(0),340.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),341.adr_d = rt711_sdca_0_adr,342},343{344.mask = BIT(1),345.num_adr = ARRAY_SIZE(rt1318_1_group1_adr),346.adr_d = rt1318_1_group1_adr,347},348{349.mask = BIT(2),350.num_adr = ARRAY_SIZE(rt1318_2_group1_adr),351.adr_d = rt1318_2_group1_adr,352},353{}354};355356static const struct snd_soc_acpi_link_adr rpl_sdw_rt1316_link12_rt714_link0[] = {357{358.mask = BIT(1),359.num_adr = ARRAY_SIZE(rt1316_1_group1_adr),360.adr_d = rt1316_1_group1_adr,361},362{363.mask = BIT(2),364.num_adr = ARRAY_SIZE(rt1316_2_group1_adr),365.adr_d = rt1316_2_group1_adr,366},367{368.mask = BIT(0),369.num_adr = ARRAY_SIZE(rt714_0_adr),370.adr_d = rt714_0_adr,371},372{}373};374375static const struct snd_soc_acpi_link_adr rpl_sdca_rvp[] = {376{377.mask = BIT(0),378.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),379.adr_d = rt711_sdca_0_adr,380},381{}382};383384static const struct snd_soc_acpi_link_adr rplp_crb[] = {385{386.mask = BIT(2),387.num_adr = ARRAY_SIZE(rt711_sdca_2_adr),388.adr_d = rt711_sdca_2_adr,389},390{}391};392393static const struct snd_soc_acpi_codecs rpl_rt5682_hp = {394.num_codecs = 2,395.codecs = {RT5682_ACPI_HID, RT5682S_ACPI_HID},396};397398static const struct snd_soc_acpi_codecs rpl_essx_83x6 = {399.num_codecs = 3,400.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},401};402403static const struct snd_soc_acpi_codecs rpl_max98357a_amp = {404.num_codecs = 1,405.codecs = {"MX98357A"}406};407408static const struct snd_soc_acpi_codecs rpl_lt6911_hdmi = {409.num_codecs = 1,410.codecs = {"INTC10B0"}411};412413struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_machines[] = {414{415.comp_ids = &rpl_rt5682_hp,416.drv_name = "rpl_mx98357_rt5682",417.machine_quirk = snd_soc_acpi_codec_list,418.quirk_data = &rpl_max98357a_amp,419.sof_tplg_filename = "sof-rpl-max98357a-rt5682.tplg",420},421{422.comp_ids = &rpl_rt5682_hp,423.drv_name = "rpl_rt5682_c1_h02",424.machine_quirk = snd_soc_acpi_codec_list,425.quirk_data = &rpl_lt6911_hdmi,426.sof_tplg_filename = "sof-rpl-rt5682-ssp1-hdmi-ssp02.tplg",427},428{429.comp_ids = &rpl_essx_83x6,430.drv_name = "rpl_es83x6_c1_h02",431.machine_quirk = snd_soc_acpi_codec_list,432.quirk_data = &rpl_lt6911_hdmi,433.sof_tplg_filename = "sof-rpl-es83x6-ssp1-hdmi-ssp02.tplg",434},435{436.comp_ids = &rpl_essx_83x6,437.drv_name = "sof-essx8336",438.sof_tplg_filename = "sof-rpl-es83x6", /* the tplg suffix is added at run time */439.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |440SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |441SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,442},443/* place boards for each headphone codec: sof driver will complete the444* tplg name and machine driver will detect the amp type445*/446{447.id = CS42L42_ACPI_HID,448.drv_name = "rpl_cs42l42_def",449.sof_tplg_filename = "sof-rpl", /* the tplg suffix is added at run time */450.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |451SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,452},453{454.id = DA7219_ACPI_HID,455.drv_name = "rpl_da7219_def",456.sof_tplg_filename = "sof-rpl", /* the tplg suffix is added at run time */457.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |458SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,459},460{461.id = NAU8825_ACPI_HID,462.drv_name = "rpl_nau8825_def",463.sof_tplg_filename = "sof-rpl", /* the tplg suffix is added at run time */464.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |465SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,466},467{468.id = RT5650_ACPI_HID,469.drv_name = "rpl_rt5682_def",470.sof_tplg_filename = "sof-rpl", /* the tplg suffix is added at run time */471.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |472SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,473},474{475.comp_ids = &rpl_rt5682_hp,476.drv_name = "rpl_rt5682_def",477.sof_tplg_filename = "sof-rpl", /* the tplg suffix is added at run time */478.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |479SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,480},481/* place amp-only boards in the end of table */482{483.id = "INTC10B0",484.drv_name = "rpl_lt6911_hdmi_ssp",485.sof_tplg_filename = "sof-rpl-nocodec-hdmi-ssp02.tplg"486},487{},488};489EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_rpl_machines);490491/* this table is used when there is no I2S codec present */492struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_sdw_machines[] = {493{494.link_mask = BIT(0),495.links = rpl_cs42l43_l0,496.drv_name = "sof_sdw",497.sof_tplg_filename = "sof-rpl-cs42l43-l0.tplg",498},499{500.link_mask = 0xF, /* 4 active links required */501.links = rpl_sdca_3_in_1,502.drv_name = "sof_sdw",503.sof_tplg_filename = "sof-rpl-rt711-l0-rt1316-l13-rt714-l2.tplg",504},505{506.link_mask = 0xF, /* 4 active links required */507.links = rpl_sdw_rt711_link2_rt1316_link01_rt714_link3,508.drv_name = "sof_sdw",509.sof_tplg_filename = "sof-rpl-rt711-l2-rt1316-l01-rt714-l3.tplg",510},511{512.link_mask = 0xF, /* 4 active links required */513.links = rpl_sdw_rt711_link0_rt1316_link12_rt714_link3,514.drv_name = "sof_sdw",515.sof_tplg_filename = "sof-rpl-rt711-l0-rt1316-l12-rt714-l3.tplg",516},517{518.link_mask = 0xF, /* 4 active links required */519.links = rpl_sdw_rt711_link0_rt1318_link12_rt714_link3,520.drv_name = "sof_sdw",521.sof_tplg_filename = "sof-rpl-rt711-l0-rt1318-l12-rt714-l3.tplg",522},523{524.link_mask = 0x7, /* rt711 on link0 & two rt1316s on link1 and link2 */525.links = rpl_sdw_rt711_link0_rt1316_link12,526.drv_name = "sof_sdw",527.sof_tplg_filename = "sof-rpl-rt711-l0-rt1316-l12.tplg",528},529{530.link_mask = 0x7, /* rt711 on link0 & two rt1318s on link1 and link2 */531.links = rpl_sdw_rt711_link0_rt1318_link12,532.drv_name = "sof_sdw",533.sof_tplg_filename = "sof-rpl-rt711-l0-rt1318-l12.tplg",534},535{536.link_mask = 0x7, /* rt714 on link0 & two rt1316s on link1 and link2 */537.links = rpl_sdw_rt1316_link12_rt714_link0,538.drv_name = "sof_sdw",539.sof_tplg_filename = "sof-rpl-rt1316-l12-rt714-l0.tplg",540},541{542.link_mask = 0x7, /* rt711 on link2 & two rt1316s on link0 and link1 */543.links = rpl_sdw_rt711_link2_rt1316_link01,544.drv_name = "sof_sdw",545.sof_tplg_filename = "sof-rpl-rt711-l2-rt1316-l01.tplg",546},547{548.link_mask = 0x1, /* link0 required */549.links = rpl_rvp,550.drv_name = "sof_sdw",551.sof_tplg_filename = "sof-rpl-rt711-l0.tplg",552},553{554.link_mask = 0x1, /* link0 required */555.links = rpl_sdca_rvp,556.drv_name = "sof_sdw",557.sof_tplg_filename = "sof-rpl-rt711-l0.tplg",558},559{560.link_mask = 0x4, /* link2 required */561.links = rplp_crb,562.drv_name = "sof_sdw",563.sof_tplg_filename = "sof-rpl-rt711-l2.tplg",564},565{},566};567EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_rpl_sdw_machines);568569570