cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

soc-acpi-intel-tgl-match.c (11515B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * soc-acpi-intel-tgl-match.c - tables and support for TGL ACPI enumeration.
      4 *
      5 * Copyright (c) 2019, Intel Corporation.
      6 *
      7 */
      8
      9#include <sound/soc-acpi.h>
     10#include <sound/soc-acpi-intel-match.h>
     11#include "soc-acpi-intel-sdw-mockup-match.h"
     12
     13static const struct snd_soc_acpi_codecs essx_83x6 = {
     14	.num_codecs = 3,
     15	.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
     16};
     17
     18static const struct snd_soc_acpi_codecs tgl_codecs = {
     19	.num_codecs = 1,
     20	.codecs = {"MX98357A"}
     21};
     22
     23static const struct snd_soc_acpi_endpoint single_endpoint = {
     24	.num = 0,
     25	.aggregated = 0,
     26	.group_position = 0,
     27	.group_id = 0,
     28};
     29
     30static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
     31	.num = 0,
     32	.aggregated = 1,
     33	.group_position = 0,
     34	.group_id = 1,
     35};
     36
     37static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
     38	.num = 0,
     39	.aggregated = 1,
     40	.group_position = 1,
     41	.group_id = 1,
     42};
     43
     44static const struct snd_soc_acpi_adr_device rt711_0_adr[] = {
     45	{
     46		.adr = 0x000020025D071100ull,
     47		.num_endpoints = 1,
     48		.endpoints = &single_endpoint,
     49		.name_prefix = "rt711"
     50	}
     51};
     52
     53static const struct snd_soc_acpi_adr_device rt711_1_adr[] = {
     54	{
     55		.adr = 0x000120025D071100ull,
     56		.num_endpoints = 1,
     57		.endpoints = &single_endpoint,
     58		.name_prefix = "rt711"
     59	}
     60};
     61
     62static const struct snd_soc_acpi_adr_device rt1308_1_dual_adr[] = {
     63	{
     64		.adr = 0x000120025D130800ull,
     65		.num_endpoints = 1,
     66		.endpoints = &spk_l_endpoint,
     67		.name_prefix = "rt1308-1"
     68	},
     69	{
     70		.adr = 0x000122025D130800ull,
     71		.num_endpoints = 1,
     72		.endpoints = &spk_r_endpoint,
     73		.name_prefix = "rt1308-2"
     74	}
     75};
     76
     77static const struct snd_soc_acpi_adr_device rt1308_1_single_adr[] = {
     78	{
     79		.adr = 0x000120025D130800ull,
     80		.num_endpoints = 1,
     81		.endpoints = &single_endpoint,
     82		.name_prefix = "rt1308-1"
     83	}
     84};
     85
     86static const struct snd_soc_acpi_adr_device rt1308_2_single_adr[] = {
     87	{
     88		.adr = 0x000220025D130800ull,
     89		.num_endpoints = 1,
     90		.endpoints = &single_endpoint,
     91		.name_prefix = "rt1308-1"
     92	}
     93};
     94
     95static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = {
     96	{
     97		.adr = 0x000120025D130800ull,
     98		.num_endpoints = 1,
     99		.endpoints = &spk_l_endpoint,
    100		.name_prefix = "rt1308-1"
    101	}
    102};
    103
    104static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = {
    105	{
    106		.adr = 0x000220025D130800ull,
    107		.num_endpoints = 1,
    108		.endpoints = &spk_r_endpoint,
    109		.name_prefix = "rt1308-2"
    110	}
    111};
    112
    113static const struct snd_soc_acpi_adr_device rt715_0_adr[] = {
    114	{
    115		.adr = 0x000021025D071500ull,
    116		.num_endpoints = 1,
    117		.endpoints = &single_endpoint,
    118		.name_prefix = "rt715"
    119	}
    120};
    121
    122static const struct snd_soc_acpi_adr_device rt715_3_adr[] = {
    123	{
    124		.adr = 0x000320025D071500ull,
    125		.num_endpoints = 1,
    126		.endpoints = &single_endpoint,
    127		.name_prefix = "rt715"
    128	}
    129};
    130
    131static const struct snd_soc_acpi_adr_device mx8373_1_adr[] = {
    132	{
    133		.adr = 0x000123019F837300ull,
    134		.num_endpoints = 1,
    135		.endpoints = &spk_r_endpoint,
    136		.name_prefix = "Right"
    137	},
    138	{
    139		.adr = 0x000127019F837300ull,
    140		.num_endpoints = 1,
    141		.endpoints = &spk_l_endpoint,
    142		.name_prefix = "Left"
    143	}
    144};
    145
    146static const struct snd_soc_acpi_adr_device rt5682_0_adr[] = {
    147	{
    148		.adr = 0x000021025D568200ull,
    149		.num_endpoints = 1,
    150		.endpoints = &single_endpoint,
    151		.name_prefix = "rt5682"
    152	}
    153};
    154
    155static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {
    156	{
    157		.adr = 0x000030025D071101ull,
    158		.num_endpoints = 1,
    159		.endpoints = &single_endpoint,
    160		.name_prefix = "rt711"
    161	}
    162};
    163
    164static const struct snd_soc_acpi_adr_device rt1316_1_single_adr[] = {
    165	{
    166		.adr = 0x000131025D131601ull,
    167		.num_endpoints = 1,
    168		.endpoints = &single_endpoint,
    169		.name_prefix = "rt1316-1"
    170	}
    171};
    172
    173static const struct snd_soc_acpi_adr_device rt1316_1_group1_adr[] = {
    174	{
    175		.adr = 0x000131025D131601ull, /* unique ID is set for some reason */
    176		.num_endpoints = 1,
    177		.endpoints = &spk_l_endpoint,
    178		.name_prefix = "rt1316-1"
    179	}
    180};
    181
    182static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = {
    183	{
    184		.adr = 0x000230025D131601ull,
    185		.num_endpoints = 1,
    186		.endpoints = &spk_r_endpoint,
    187		.name_prefix = "rt1316-2"
    188	}
    189};
    190
    191static const struct snd_soc_acpi_adr_device rt714_3_adr[] = {
    192	{
    193		.adr = 0x000330025D071401ull,
    194		.num_endpoints = 1,
    195		.endpoints = &single_endpoint,
    196		.name_prefix = "rt714"
    197	}
    198};
    199
    200static const struct snd_soc_acpi_link_adr tgl_rvp[] = {
    201	{
    202		.mask = BIT(0),
    203		.num_adr = ARRAY_SIZE(rt711_0_adr),
    204		.adr_d = rt711_0_adr,
    205	},
    206	{
    207		.mask = BIT(1),
    208		.num_adr = ARRAY_SIZE(rt1308_1_dual_adr),
    209		.adr_d = rt1308_1_dual_adr,
    210	},
    211	{}
    212};
    213
    214static const struct snd_soc_acpi_link_adr tgl_rvp_headset_only[] = {
    215	{
    216		.mask = BIT(0),
    217		.num_adr = ARRAY_SIZE(rt711_0_adr),
    218		.adr_d = rt711_0_adr,
    219	},
    220	{}
    221};
    222
    223static const struct snd_soc_acpi_link_adr tgl_hp[] = {
    224	{
    225		.mask = BIT(0),
    226		.num_adr = ARRAY_SIZE(rt711_0_adr),
    227		.adr_d = rt711_0_adr,
    228	},
    229	{
    230		.mask = BIT(1),
    231		.num_adr = ARRAY_SIZE(rt1308_1_single_adr),
    232		.adr_d = rt1308_1_single_adr,
    233	},
    234	{}
    235};
    236
    237static const struct snd_soc_acpi_link_adr tgl_chromebook_base[] = {
    238	{
    239		.mask = BIT(0),
    240		.num_adr = ARRAY_SIZE(rt5682_0_adr),
    241		.adr_d = rt5682_0_adr,
    242	},
    243	{
    244		.mask = BIT(1),
    245		.num_adr = ARRAY_SIZE(mx8373_1_adr),
    246		.adr_d = mx8373_1_adr,
    247	},
    248	{}
    249};
    250
    251static const struct snd_soc_acpi_link_adr tgl_3_in_1_default[] = {
    252	{
    253		.mask = BIT(0),
    254		.num_adr = ARRAY_SIZE(rt711_0_adr),
    255		.adr_d = rt711_0_adr,
    256	},
    257	{
    258		.mask = BIT(1),
    259		.num_adr = ARRAY_SIZE(rt1308_1_group1_adr),
    260		.adr_d = rt1308_1_group1_adr,
    261	},
    262	{
    263		.mask = BIT(2),
    264		.num_adr = ARRAY_SIZE(rt1308_2_group1_adr),
    265		.adr_d = rt1308_2_group1_adr,
    266	},
    267	{
    268		.mask = BIT(3),
    269		.num_adr = ARRAY_SIZE(rt715_3_adr),
    270		.adr_d = rt715_3_adr,
    271	},
    272	{}
    273};
    274
    275static const struct snd_soc_acpi_link_adr tgl_3_in_1_mono_amp[] = {
    276	{
    277		.mask = BIT(0),
    278		.num_adr = ARRAY_SIZE(rt711_0_adr),
    279		.adr_d = rt711_0_adr,
    280	},
    281	{
    282		.mask = BIT(1),
    283		.num_adr = ARRAY_SIZE(rt1308_1_single_adr),
    284		.adr_d = rt1308_1_single_adr,
    285	},
    286	{
    287		.mask = BIT(3),
    288		.num_adr = ARRAY_SIZE(rt715_3_adr),
    289		.adr_d = rt715_3_adr,
    290	},
    291	{}
    292};
    293
    294static const struct snd_soc_acpi_link_adr tgl_sdw_rt711_link1_rt1308_link2_rt715_link0[] = {
    295	{
    296		.mask = BIT(1),
    297		.num_adr = ARRAY_SIZE(rt711_1_adr),
    298		.adr_d = rt711_1_adr,
    299	},
    300	{
    301		.mask = BIT(2),
    302		.num_adr = ARRAY_SIZE(rt1308_2_single_adr),
    303		.adr_d = rt1308_2_single_adr,
    304	},
    305	{
    306		.mask = BIT(0),
    307		.num_adr = ARRAY_SIZE(rt715_0_adr),
    308		.adr_d = rt715_0_adr,
    309	},
    310	{}
    311};
    312
    313static const struct snd_soc_acpi_link_adr tgl_3_in_1_sdca[] = {
    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(rt1316_1_group1_adr),
    322		.adr_d = rt1316_1_group1_adr,
    323	},
    324	{
    325		.mask = BIT(2),
    326		.num_adr = ARRAY_SIZE(rt1316_2_group1_adr),
    327		.adr_d = rt1316_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};
    336
    337static const struct snd_soc_acpi_link_adr tgl_3_in_1_sdca_mono[] = {
    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(rt1316_1_single_adr),
    346		.adr_d = rt1316_1_single_adr,
    347	},
    348	{
    349		.mask = BIT(3),
    350		.num_adr = ARRAY_SIZE(rt714_3_adr),
    351		.adr_d = rt714_3_adr,
    352	},
    353	{}
    354};
    355
    356static const struct snd_soc_acpi_codecs tgl_max98373_amp = {
    357	.num_codecs = 1,
    358	.codecs = {"MX98373"}
    359};
    360
    361static const struct snd_soc_acpi_codecs tgl_rt1011_amp = {
    362	.num_codecs = 1,
    363	.codecs = {"10EC1011"}
    364};
    365
    366static const struct snd_soc_acpi_codecs tgl_rt5682_rt5682s_hp = {
    367	.num_codecs = 2,
    368	.codecs = {"10EC5682", "RTL5682"},
    369};
    370
    371static const struct snd_soc_acpi_codecs tgl_lt6911_hdmi = {
    372	.num_codecs = 1,
    373	.codecs = {"INTC10B0"}
    374};
    375
    376struct snd_soc_acpi_mach snd_soc_acpi_intel_tgl_machines[] = {
    377	{
    378		.comp_ids = &tgl_rt5682_rt5682s_hp,
    379		.drv_name = "tgl_mx98357_rt5682",
    380		.machine_quirk = snd_soc_acpi_codec_list,
    381		.quirk_data = &tgl_codecs,
    382		.sof_tplg_filename = "sof-tgl-max98357a-rt5682.tplg",
    383	},
    384	{
    385		.comp_ids = &tgl_rt5682_rt5682s_hp,
    386		.drv_name = "tgl_mx98373_rt5682",
    387		.machine_quirk = snd_soc_acpi_codec_list,
    388		.quirk_data = &tgl_max98373_amp,
    389		.sof_tplg_filename = "sof-tgl-max98373-rt5682.tplg",
    390	},
    391	{
    392		.comp_ids = &tgl_rt5682_rt5682s_hp,
    393		.drv_name = "tgl_rt1011_rt5682",
    394		.machine_quirk = snd_soc_acpi_codec_list,
    395		.quirk_data = &tgl_rt1011_amp,
    396		.sof_tplg_filename = "sof-tgl-rt1011-rt5682.tplg",
    397	},
    398	{
    399		.comp_ids = &essx_83x6,
    400		.drv_name = "sof-essx8336",
    401		.sof_tplg_filename = "sof-tgl-es8336", /* the tplg suffix is added at run time */
    402		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
    403					SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
    404					SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
    405	},
    406	{
    407		.id = "10EC1308",
    408		.drv_name = "tgl_rt1308_hdmi_ssp",
    409		.machine_quirk = snd_soc_acpi_codec_list,
    410		.quirk_data = &tgl_lt6911_hdmi,
    411		.sof_tplg_filename = "sof-tgl-rt1308-ssp2-hdmi-ssp15.tplg"
    412	},
    413	{},
    414};
    415EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_tgl_machines);
    416
    417/* this table is used when there is no I2S codec present */
    418struct snd_soc_acpi_mach snd_soc_acpi_intel_tgl_sdw_machines[] = {
    419	/* mockup tests need to be first */
    420	{
    421		.link_mask = GENMASK(3, 0),
    422		.links = sdw_mockup_headset_2amps_mic,
    423		.drv_name = "sof_sdw",
    424		.sof_tplg_filename = "sof-tgl-rt711-rt1308-rt715.tplg",
    425	},
    426	{
    427		.link_mask = BIT(0) | BIT(1) | BIT(3),
    428		.links = sdw_mockup_headset_1amp_mic,
    429		.drv_name = "sof_sdw",
    430		.sof_tplg_filename = "sof-tgl-rt711-rt1308-mono-rt715.tplg",
    431	},
    432	{
    433		.link_mask = BIT(0) | BIT(1) | BIT(2),
    434		.links = sdw_mockup_mic_headset_1amp,
    435		.drv_name = "sof_sdw",
    436		.sof_tplg_filename = "sof-tgl-rt715-rt711-rt1308-mono.tplg",
    437	},
    438	{
    439		.link_mask = 0x7,
    440		.links = tgl_sdw_rt711_link1_rt1308_link2_rt715_link0,
    441		.drv_name = "sof_sdw",
    442		.sof_tplg_filename = "sof-tgl-rt715-rt711-rt1308-mono.tplg",
    443	},
    444	{
    445		.link_mask = 0xF, /* 4 active links required */
    446		.links = tgl_3_in_1_default,
    447		.drv_name = "sof_sdw",
    448		.sof_tplg_filename = "sof-tgl-rt711-rt1308-rt715.tplg",
    449	},
    450	{
    451		/*
    452		 * link_mask should be 0xB, but all links are enabled by BIOS.
    453		 * This entry will be selected if there is no rt1308 exposed
    454		 * on link2 since it will fail to match the above entry.
    455		 */
    456		.link_mask = 0xF,
    457		.links = tgl_3_in_1_mono_amp,
    458		.drv_name = "sof_sdw",
    459		.sof_tplg_filename = "sof-tgl-rt711-rt1308-mono-rt715.tplg",
    460	},
    461	{
    462		.link_mask = 0xF, /* 4 active links required */
    463		.links = tgl_3_in_1_sdca,
    464		.drv_name = "sof_sdw",
    465		.sof_tplg_filename = "sof-tgl-rt711-rt1316-rt714.tplg",
    466	},
    467	{
    468		/*
    469		 * link_mask should be 0xB, but all links are enabled by BIOS.
    470		 * This entry will be selected if there is no rt1316 amplifier exposed
    471		 * on link2 since it will fail to match the above entry.
    472		 */
    473
    474		.link_mask = 0xF, /* 4 active links required */
    475		.links = tgl_3_in_1_sdca_mono,
    476		.drv_name = "sof_sdw",
    477		.sof_tplg_filename = "sof-tgl-rt711-l0-rt1316-l1-mono-rt714-l3.tplg",
    478	},
    479
    480	{
    481		.link_mask = 0x3, /* rt711 on link 0 and 1 rt1308 on link 1 */
    482		.links = tgl_hp,
    483		.drv_name = "sof_sdw",
    484		.sof_tplg_filename = "sof-tgl-rt711-rt1308.tplg",
    485	},
    486	{
    487		.link_mask = 0x3, /* rt711 on link 0 and 2 rt1308s on link 1 */
    488		.links = tgl_rvp,
    489		.drv_name = "sof_sdw",
    490		.sof_tplg_filename = "sof-tgl-rt711-rt1308.tplg",
    491	},
    492	{
    493		.link_mask = 0x3, /* rt5682 on link0 & 2xmax98373 on link 1 */
    494		.links = tgl_chromebook_base,
    495		.drv_name = "sof_sdw",
    496		.sof_tplg_filename = "sof-tgl-sdw-max98373-rt5682.tplg",
    497	},
    498	{
    499		.link_mask = 0x1, /* rt711 on link 0 */
    500		.links = tgl_rvp_headset_only,
    501		.drv_name = "sof_sdw",
    502		.sof_tplg_filename = "sof-tgl-rt711.tplg",
    503	},
    504	{},
    505};
    506EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_tgl_sdw_machines);