brintos

brintos / linux-shallow public Read only

0
0
Text · 5.9 KiB · e4c3492 Raw
236 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * soc-acpi-intel-cht-match.c - tables and support for CHT ACPI enumeration.4 *5 * Copyright (c) 2017, Intel Corporation.6 */7 8#include <linux/dmi.h>9#include <sound/soc-acpi.h>10#include <sound/soc-acpi-intel-match.h>11 12static unsigned long cht_machine_id;13 14#define CHT_SURFACE_MACH 115 16static int cht_surface_quirk_cb(const struct dmi_system_id *id)17{18	cht_machine_id = CHT_SURFACE_MACH;19	return 1;20}21 22static const struct dmi_system_id cht_table[] = {23	{24		.callback = cht_surface_quirk_cb,25		.matches = {26			DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),27			DMI_MATCH(DMI_PRODUCT_NAME, "Surface 3"),28		},29	},30	{ }31};32 33static struct snd_soc_acpi_mach cht_surface_mach = {34	.id = "10EC5640",35	.drv_name = "cht-bsw-rt5645",36	.fw_filename = "intel/fw_sst_22a8.bin",37	.board = "cht-bsw",38	.sof_tplg_filename = "sof-cht-rt5645.tplg",39};40 41static struct snd_soc_acpi_mach *cht_quirk(void *arg)42{43	struct snd_soc_acpi_mach *mach = arg;44 45	dmi_check_system(cht_table);46 47	if (cht_machine_id == CHT_SURFACE_MACH)48		return &cht_surface_mach;49	else50		return mach;51}52 53/*54 * Some tablets with Android factory OS have buggy DSDTs with an ESSX8316 device55 * in the ACPI tables. While they are not using an ESS8316 codec. These DSDTs56 * also have an ACPI device for the correct codec, ignore the ESSX8316.57 */58static const struct dmi_system_id cht_ess8316_not_present_table[] = {59	{60		/* Nextbook Ares 8A */61		.matches = {62			DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),63			DMI_MATCH(DMI_PRODUCT_NAME, "CherryTrail"),64			DMI_MATCH(DMI_BIOS_VERSION, "M882"),65		},66	},67	{ }68};69 70static struct snd_soc_acpi_mach *cht_ess8316_quirk(void *arg)71{72	if (dmi_check_system(cht_ess8316_not_present_table))73		return NULL;74 75	return arg;76}77 78/*79 * The Lenovo Yoga Tab 3 Pro YT3-X90, with Android factory OS has a buggy DSDT80 * with the coded not being listed at all.81 */82static const struct dmi_system_id lenovo_yoga_tab3_x90[] = {83	{84		/* Lenovo Yoga Tab 3 Pro YT3-X90, codec missing from DSDT */85		.matches = {86			DMI_MATCH(DMI_SYS_VENDOR, "Intel Corporation"),87			DMI_MATCH(DMI_PRODUCT_VERSION, "Blade3-10A-001"),88		},89	},90	{ }91};92 93static struct snd_soc_acpi_mach cht_lenovo_yoga_tab3_x90_mach = {94	.id = "10WM5102",95	.drv_name = "bytcr_wm5102",96	.fw_filename = "intel/fw_sst_22a8.bin",97	.board = "bytcr_wm5102",98	.sof_tplg_filename = "sof-cht-wm5102.tplg",99};100 101static struct snd_soc_acpi_mach *lenovo_yt3_x90_quirk(void *arg)102{103	if (dmi_check_system(lenovo_yoga_tab3_x90))104		return &cht_lenovo_yoga_tab3_x90_mach;105 106	/* Skip wildcard match snd_soc_acpi_intel_cherrytrail_machines[] entry */107	return NULL;108}109 110static const struct snd_soc_acpi_codecs rt5640_comp_ids = {111	.num_codecs = 2,112	.codecs = { "10EC5640", "10EC3276" },113};114 115static const struct snd_soc_acpi_codecs rt5670_comp_ids = {116	.num_codecs = 2,117	.codecs = { "10EC5670", "10EC5672" },118};119 120static const struct snd_soc_acpi_codecs rt5645_comp_ids = {121	.num_codecs = 3,122	.codecs = { "10EC5645", "10EC5650", "10EC3270" },123};124 125static const struct snd_soc_acpi_codecs da7213_comp_ids = {126	.num_codecs = 2,127	.codecs = { "DGLS7212", "DGLS7213"},128 129};130 131/* Cherryview-based platforms: CherryTrail and Braswell */132struct snd_soc_acpi_mach  snd_soc_acpi_intel_cherrytrail_machines[] = {133	{134		.comp_ids = &rt5670_comp_ids,135		.drv_name = "cht-bsw-rt5672",136		.fw_filename = "intel/fw_sst_22a8.bin",137		.board = "cht-bsw",138		.sof_tplg_filename = "sof-cht-rt5670.tplg",139	},140	{141		.comp_ids = &rt5645_comp_ids,142		.drv_name = "cht-bsw-rt5645",143		.fw_filename = "intel/fw_sst_22a8.bin",144		.board = "cht-bsw",145		.sof_tplg_filename = "sof-cht-rt5645.tplg",146	},147	{148		.id = "193C9890",149		.drv_name = "cht-bsw-max98090",150		.fw_filename = "intel/fw_sst_22a8.bin",151		.board = "cht-bsw",152		.sof_tplg_filename = "sof-cht-max98090.tplg",153	},154	{155		.id = "10508824",156		.drv_name = "cht-bsw-nau8824",157		.fw_filename = "intel/fw_sst_22a8.bin",158		.board = "cht-bsw",159		.sof_tplg_filename = "sof-cht-nau8824.tplg",160	},161	{162		.comp_ids = &da7213_comp_ids,163		.drv_name = "bytcht_da7213",164		.fw_filename = "intel/fw_sst_22a8.bin",165		.board = "bytcht_da7213",166		.sof_tplg_filename = "sof-cht-da7213.tplg",167	},168	{169		.id = "ESSX8316",170		.drv_name = "bytcht_es8316",171		.fw_filename = "intel/fw_sst_22a8.bin",172		.board = "bytcht_es8316",173		.machine_quirk = cht_ess8316_quirk,174		.sof_tplg_filename = "sof-cht-es8316.tplg",175	},176	/* some CHT-T platforms rely on RT5640, use Baytrail machine driver */177	{178		.comp_ids = &rt5640_comp_ids,179		.drv_name = "bytcr_rt5640",180		.fw_filename = "intel/fw_sst_22a8.bin",181		.board = "bytcr_rt5640",182		.machine_quirk = cht_quirk,183		.sof_tplg_filename = "sof-cht-rt5640.tplg",184	},185	{186		.id = "10EC5682",187		.drv_name = "sof_rt5682",188		.sof_tplg_filename = "sof-cht-rt5682.tplg",189	},190	/* some CHT-T platforms rely on RT5651, use Baytrail machine driver */191	{192		.id = "10EC5651",193		.drv_name = "bytcr_rt5651",194		.fw_filename = "intel/fw_sst_22a8.bin",195		.board = "bytcr_rt5651",196		.sof_tplg_filename = "sof-cht-rt5651.tplg",197	},198	{199		.id = "14F10720",200		.drv_name = "bytcht_cx2072x",201		.fw_filename = "intel/fw_sst_22a8.bin",202		.board = "bytcht_cx2072x",203		.sof_tplg_filename = "sof-cht-cx2072x.tplg",204	},205	{206		.id = "104C5122",207		.drv_name = "sof_pcm512x",208		.sof_tplg_filename = "sof-cht-src-50khz-pcm512x.tplg",209	},210	/*211	 * Special case for the Lenovo Yoga Tab 3 Pro YT3-X90 where the DSDT212	 * misses the codec. Match on the SST id instead, lenovo_yt3_x90_quirk()213	 * will return a YT3 specific mach or NULL when called on other hw,214	 * skipping this entry.215	 */216	{217		.id = "808622A8",218		.machine_quirk = lenovo_yt3_x90_quirk,219	},220 221#if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH)222	/*223	 * This is always last in the table so that it is selected only when224	 * enabled explicitly and there is no codec-related information in SSDT225	 */226	{227		.id = "808622A8",228		.drv_name = "bytcht_nocodec",229		.fw_filename = "intel/fw_sst_22a8.bin",230		.board = "bytcht_nocodec",231	},232#endif233	{},234};235EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cherrytrail_machines);236