brintos

brintos / linux-shallow public Read only

0
0
Text · 10.0 KiB · 094ed4b Raw
491 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * soc-acpi-intel-lnl-match.c - tables and support for LNL ACPI enumeration.4 *5 * Copyright (c) 2023, Intel Corporation6 *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 13struct snd_soc_acpi_mach snd_soc_acpi_intel_lnl_machines[] = {14	{},15};16EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_lnl_machines);17 18static const struct snd_soc_acpi_endpoint single_endpoint = {19	.num = 0,20	.aggregated = 0,21	.group_position = 0,22	.group_id = 0,23};24 25static const struct snd_soc_acpi_endpoint spk_l_endpoint = {26	.num = 0,27	.aggregated = 1,28	.group_position = 0,29	.group_id = 1,30};31 32static const struct snd_soc_acpi_endpoint spk_r_endpoint = {33	.num = 0,34	.aggregated = 1,35	.group_position = 1,36	.group_id = 1,37};38 39static const struct snd_soc_acpi_endpoint spk_2_endpoint = {40	.num = 0,41	.aggregated = 1,42	.group_position = 2,43	.group_id = 1,44};45 46static const struct snd_soc_acpi_endpoint spk_3_endpoint = {47	.num = 0,48	.aggregated = 1,49	.group_position = 3,50	.group_id = 1,51};52 53static const struct snd_soc_acpi_endpoint rt712_endpoints[] = {54	{55		.num = 0,56		.aggregated = 0,57		.group_position = 0,58		.group_id = 0,59	},60	{61		.num = 1,62		.aggregated = 0,63		.group_position = 0,64		.group_id = 0,65	},66};67 68/*69 * RT722 is a multi-function codec, three endpoints are created for70 * its headset, amp and dmic functions.71 */72static const struct snd_soc_acpi_endpoint rt722_endpoints[] = {73	{74		.num = 0,75		.aggregated = 0,76		.group_position = 0,77		.group_id = 0,78	},79	{80		.num = 1,81		.aggregated = 0,82		.group_position = 0,83		.group_id = 0,84	},85	{86		.num = 2,87		.aggregated = 0,88		.group_position = 0,89		.group_id = 0,90	},91};92 93static const struct snd_soc_acpi_endpoint cs42l43_endpoints[] = {94	{ /* Jack Playback Endpoint */95		.num = 0,96		.aggregated = 0,97		.group_position = 0,98		.group_id = 0,99	},100	{ /* DMIC Capture Endpoint */101		.num = 1,102		.aggregated = 0,103		.group_position = 0,104		.group_id = 0,105	},106	{ /* Jack Capture Endpoint */107		.num = 2,108		.aggregated = 0,109		.group_position = 0,110		.group_id = 0,111	},112	{ /* Speaker Playback Endpoint */113		.num = 3,114		.aggregated = 0,115		.group_position = 0,116		.group_id = 0,117	},118};119 120static const struct snd_soc_acpi_adr_device cs35l56_2_l_adr[] = {121	{122		.adr = 0x00023001FA355601ull,123		.num_endpoints = 1,124		.endpoints = &spk_l_endpoint,125		.name_prefix = "AMP1"126	},127	{128		.adr = 0x00023101FA355601ull,129		.num_endpoints = 1,130		.endpoints = &spk_2_endpoint,131		.name_prefix = "AMP2"132	}133};134 135static const struct snd_soc_acpi_adr_device cs35l56_3_r_adr[] = {136	{137		.adr = 0x00033201fa355601ull,138		.num_endpoints = 1,139		.endpoints = &spk_r_endpoint,140		.name_prefix = "AMP3"141	},142	{143		.adr = 0x00033301fa355601ull,144		.num_endpoints = 1,145		.endpoints = &spk_3_endpoint,146		.name_prefix = "AMP4"147	}148};149 150static const struct snd_soc_acpi_adr_device cs35l56_3_lr_adr[] = {151	{152		.adr = 0x00033001fa355601ull,153		.num_endpoints = 1,154		.endpoints = &spk_l_endpoint,155		.name_prefix = "AMP1"156	},157	{158		.adr = 0x00033101fa355601ull,159		.num_endpoints = 1,160		.endpoints = &spk_r_endpoint,161		.name_prefix = "AMP2"162	}163};164 165static const struct snd_soc_acpi_adr_device cs42l43_0_adr[] = {166	{167		.adr = 0x00003001FA424301ull,168		.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),169		.endpoints = cs42l43_endpoints,170		.name_prefix = "cs42l43"171	}172};173 174static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {175	{176		.adr = 0x000030025D071101ull,177		.num_endpoints = 1,178		.endpoints = &single_endpoint,179		.name_prefix = "rt711"180	}181};182 183static const struct snd_soc_acpi_adr_device rt712_2_single_adr[] = {184	{185		.adr = 0x000230025D071201ull,186		.num_endpoints = ARRAY_SIZE(rt712_endpoints),187		.endpoints = rt712_endpoints,188		.name_prefix = "rt712"189	}190};191 192static const struct snd_soc_acpi_adr_device rt1712_3_single_adr[] = {193	{194		.adr = 0x000330025D171201ull,195		.num_endpoints = 1,196		.endpoints = &single_endpoint,197		.name_prefix = "rt712-dmic"198	}199};200 201static const struct snd_soc_acpi_adr_device rt722_0_single_adr[] = {202	{203		.adr = 0x000030025d072201ull,204		.num_endpoints = ARRAY_SIZE(rt722_endpoints),205		.endpoints = rt722_endpoints,206		.name_prefix = "rt722"207	}208};209 210static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = {211	{212		.adr = 0x000230025D131601ull,213		.num_endpoints = 1,214		.endpoints = &spk_l_endpoint,215		.name_prefix = "rt1316-1"216	}217};218 219static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = {220	{221		.adr = 0x000331025D131601ull,222		.num_endpoints = 1,223		.endpoints = &spk_r_endpoint,224		.name_prefix = "rt1316-2"225	}226};227 228static const struct snd_soc_acpi_adr_device rt1318_1_adr[] = {229	{230		.adr = 0x000133025D131801ull,231		.num_endpoints = 1,232		.endpoints = &single_endpoint,233		.name_prefix = "rt1318-1"234	}235};236 237static const struct snd_soc_acpi_adr_device rt1318_1_group1_adr[] = {238	{239		.adr = 0x000130025D131801ull,240		.num_endpoints = 1,241		.endpoints = &spk_l_endpoint,242		.name_prefix = "rt1318-1"243	}244};245 246static const struct snd_soc_acpi_adr_device rt1318_2_group1_adr[] = {247	{248		.adr = 0x000232025D131801ull,249		.num_endpoints = 1,250		.endpoints = &spk_r_endpoint,251		.name_prefix = "rt1318-2"252	}253};254 255static const struct snd_soc_acpi_adr_device rt713_0_adr[] = {256	{257		.adr = 0x000031025D071301ull,258		.num_endpoints = 1,259		.endpoints = &single_endpoint,260		.name_prefix = "rt713"261	}262};263 264static const struct snd_soc_acpi_adr_device rt714_0_adr[] = {265	{266		.adr = 0x000030025D071401ull,267		.num_endpoints = 1,268		.endpoints = &single_endpoint,269		.name_prefix = "rt714"270	}271};272 273static const struct snd_soc_acpi_adr_device rt714_1_adr[] = {274	{275		.adr = 0x000130025D071401ull,276		.num_endpoints = 1,277		.endpoints = &single_endpoint,278		.name_prefix = "rt714"279	}280};281 282static const struct snd_soc_acpi_link_adr lnl_cs42l43_l0[] = {283	{284		.mask = BIT(0),285		.num_adr = ARRAY_SIZE(cs42l43_0_adr),286		.adr_d = cs42l43_0_adr,287	},288	{}289};290 291static const struct snd_soc_acpi_link_adr lnl_cs42l43_l0_cs35l56_l3[] = {292	{293		.mask = BIT(0),294		.num_adr = ARRAY_SIZE(cs42l43_0_adr),295		.adr_d = cs42l43_0_adr,296	},297	{298		.mask = BIT(3),299		.num_adr = ARRAY_SIZE(cs35l56_3_lr_adr),300		.adr_d = cs35l56_3_lr_adr,301	},302	{}303};304 305static const struct snd_soc_acpi_link_adr lnl_cs42l43_l0_cs35l56_l23[] = {306	{307		.mask = BIT(0),308		.num_adr = ARRAY_SIZE(cs42l43_0_adr),309		.adr_d = cs42l43_0_adr,310	},311	{312		.mask = BIT(2),313		.num_adr = ARRAY_SIZE(cs35l56_2_l_adr),314		.adr_d = cs35l56_2_l_adr,315	},316	{317		.mask = BIT(3),318		.num_adr = ARRAY_SIZE(cs35l56_3_r_adr),319		.adr_d = cs35l56_3_r_adr,320	},321	{}322};323 324static const struct snd_soc_acpi_link_adr lnl_rvp[] = {325	{326		.mask = BIT(0),327		.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),328		.adr_d = rt711_sdca_0_adr,329	},330	{}331};332 333static const struct snd_soc_acpi_link_adr lnl_712_only[] = {334	{335		.mask = BIT(2),336		.num_adr = ARRAY_SIZE(rt712_2_single_adr),337		.adr_d = rt712_2_single_adr,338	},339	{340		.mask = BIT(3),341		.num_adr = ARRAY_SIZE(rt1712_3_single_adr),342		.adr_d = rt1712_3_single_adr,343	},344	{}345};346 347static const struct snd_soc_acpi_link_adr lnl_rt722_only[] = {348	{349		.mask = BIT(0),350		.num_adr = ARRAY_SIZE(rt722_0_single_adr),351		.adr_d = rt722_0_single_adr,352	},353	{}354};355 356static const struct snd_soc_acpi_link_adr lnl_3_in_1_sdca[] = {357	{358		.mask = BIT(0),359		.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),360		.adr_d = rt711_sdca_0_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(3),369		.num_adr = ARRAY_SIZE(rt1316_3_group1_adr),370		.adr_d = rt1316_3_group1_adr,371	},372	{373		.mask = BIT(1),374		.num_adr = ARRAY_SIZE(rt714_1_adr),375		.adr_d = rt714_1_adr,376	},377	{}378};379 380static const struct snd_soc_acpi_link_adr lnl_sdw_rt1318_l12_rt714_l0[] = {381	{382		.mask = BIT(1),383		.num_adr = ARRAY_SIZE(rt1318_1_group1_adr),384		.adr_d = rt1318_1_group1_adr,385	},386	{387		.mask = BIT(2),388		.num_adr = ARRAY_SIZE(rt1318_2_group1_adr),389		.adr_d = rt1318_2_group1_adr,390	},391	{392		.mask = BIT(0),393		.num_adr = ARRAY_SIZE(rt714_0_adr),394		.adr_d = rt714_0_adr,395	},396	{}397};398 399static const struct snd_soc_acpi_link_adr lnl_sdw_rt713_l0_rt1318_l1[] = {400	{401		.mask = BIT(0),402		.num_adr = ARRAY_SIZE(rt713_0_adr),403		.adr_d = rt713_0_adr,404	},405	{406		.mask = BIT(1),407		.num_adr = ARRAY_SIZE(rt1318_1_adr),408		.adr_d = rt1318_1_adr,409	},410	{}411};412 413/* this table is used when there is no I2S codec present */414struct snd_soc_acpi_mach snd_soc_acpi_intel_lnl_sdw_machines[] = {415	/* mockup tests need to be first */416	{417		.link_mask = GENMASK(3, 0),418		.links = sdw_mockup_headset_2amps_mic,419		.drv_name = "sof_sdw",420		.sof_tplg_filename = "sof-lnl-rt711-rt1308-rt715.tplg",421	},422	{423		.link_mask = BIT(0) | BIT(1) | BIT(3),424		.links = sdw_mockup_headset_1amp_mic,425		.drv_name = "sof_sdw",426		.sof_tplg_filename = "sof-lnl-rt711-rt1308-mono-rt715.tplg",427	},428	{429		.link_mask = GENMASK(2, 0),430		.links = sdw_mockup_mic_headset_1amp,431		.drv_name = "sof_sdw",432		.sof_tplg_filename = "sof-lnl-rt715-rt711-rt1308-mono.tplg",433	},434	{435		.link_mask = GENMASK(3, 0),436		.links = lnl_3_in_1_sdca,437		.drv_name = "sof_sdw",438		.sof_tplg_filename = "sof-lnl-rt711-l0-rt1316-l23-rt714-l1.tplg",439	},440	{441		.link_mask = BIT(0) | BIT(2) | BIT(3),442		.links = lnl_cs42l43_l0_cs35l56_l23,443		.drv_name = "sof_sdw",444		.sof_tplg_filename = "sof-lnl-cs42l43-l0-cs35l56-l23.tplg",445	},446	{447		.link_mask = BIT(0) | BIT(3),448		.links = lnl_cs42l43_l0_cs35l56_l3,449		.drv_name = "sof_sdw",450		.sof_tplg_filename = "sof-lnl-cs42l43-l0-cs35l56-l3.tplg",451	},452	{453		.link_mask = BIT(0),454		.links = lnl_cs42l43_l0,455		.drv_name = "sof_sdw",456		.sof_tplg_filename = "sof-lnl-cs42l43-l0.tplg",457	},458	{459		.link_mask = BIT(0),460		.links = lnl_rvp,461		.drv_name = "sof_sdw",462		.sof_tplg_filename = "sof-lnl-rt711.tplg",463	},464	{465		.link_mask = BIT(2) | BIT(3),466		.links = lnl_712_only,467		.drv_name = "sof_sdw",468		.sof_tplg_filename = "sof-lnl-rt712-l2-rt1712-l3.tplg",469	},470	{471		.link_mask = BIT(0),472		.links = lnl_rt722_only,473		.drv_name = "sof_sdw",474		.sof_tplg_filename = "sof-lnl-rt722-l0.tplg",475	},476	{477		.link_mask = GENMASK(2, 0),478		.links = lnl_sdw_rt1318_l12_rt714_l0,479		.drv_name = "sof_sdw",480		.sof_tplg_filename = "sof-lnl-rt1318-l12-rt714-l0.tplg"481	},482	{483		.link_mask = BIT(0) | BIT(1),484		.links = lnl_sdw_rt713_l0_rt1318_l1,485		.drv_name = "sof_sdw",486		.sof_tplg_filename = "sof-lnl-rt713-l0-rt1318-l1.tplg"487	},488	{},489};490EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_lnl_sdw_machines);491