221 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * soc-acpi-intel-byt-match.c - tables and support for BYT 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 byt_machine_id;13 14#define BYT_RT5672 115#define BYT_POV_P1006W 216 17static int byt_rt5672_quirk_cb(const struct dmi_system_id *id)18{19 byt_machine_id = BYT_RT5672;20 return 1;21}22 23static int byt_pov_p1006w_quirk_cb(const struct dmi_system_id *id)24{25 byt_machine_id = BYT_POV_P1006W;26 return 1;27}28 29static const struct dmi_system_id byt_table[] = {30 {31 .callback = byt_rt5672_quirk_cb,32 .matches = {33 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),34 DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad 8"),35 },36 },37 {38 .callback = byt_rt5672_quirk_cb,39 .matches = {40 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),41 DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad 10"),42 },43 },44 {45 .callback = byt_rt5672_quirk_cb,46 .matches = {47 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),48 DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad Tablet B"),49 },50 },51 {52 .callback = byt_rt5672_quirk_cb,53 .matches = {54 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),55 DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Miix 2 10"),56 },57 },58 {59 /* Point of View mobii wintab p1006w (v1.0) */60 .callback = byt_pov_p1006w_quirk_cb,61 .matches = {62 DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Insyde"),63 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "BayTrail"),64 /* Note 105b is Foxcon's USB/PCI vendor id */65 DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "105B"),66 DMI_EXACT_MATCH(DMI_BOARD_NAME, "0E57"),67 },68 },69 {70 /* Aegex 10 tablet (RU2) */71 .callback = byt_rt5672_quirk_cb,72 .matches = {73 DMI_MATCH(DMI_SYS_VENDOR, "AEGEX"),74 DMI_MATCH(DMI_PRODUCT_VERSION, "RU2"),75 },76 },77 {78 /* Dell Venue 10 Pro 5055 */79 .callback = byt_rt5672_quirk_cb,80 .matches = {81 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),82 DMI_MATCH(DMI_PRODUCT_NAME, "Venue 10 Pro 5055"),83 },84 },85 { }86};87 88/* Various devices use an ACPI id of 10EC5640 while using a rt5672 codec */89static struct snd_soc_acpi_mach byt_rt5672 = {90 .id = "10EC5640",91 .drv_name = "cht-bsw-rt5672",92 .fw_filename = "intel/fw_sst_0f28.bin",93 .board = "cht-bsw",94 .sof_tplg_filename = "sof-byt-rt5670.tplg",95};96 97static struct snd_soc_acpi_mach byt_pov_p1006w = {98 .id = "10EC5640",99 .drv_name = "bytcr_rt5651",100 .fw_filename = "intel/fw_sst_0f28.bin",101 .board = "bytcr_rt5651",102 .sof_tplg_filename = "sof-byt-rt5651.tplg",103};104 105static struct snd_soc_acpi_mach *byt_quirk(void *arg)106{107 struct snd_soc_acpi_mach *mach = arg;108 109 dmi_check_system(byt_table);110 111 switch (byt_machine_id) {112 case BYT_RT5672:113 return &byt_rt5672;114 case BYT_POV_P1006W:115 return &byt_pov_p1006w;116 default:117 return mach;118 }119}120 121static const struct snd_soc_acpi_codecs rt5640_comp_ids = {122 .num_codecs = 3,123 .codecs = { "10EC5640", "10EC5642", "INTCCFFD"},124};125 126static const struct snd_soc_acpi_codecs wm5102_comp_ids = {127 .num_codecs = 3,128 .codecs = { "10WM5102", "WM510204", "WM510205"},129};130 131static const struct snd_soc_acpi_codecs da7213_comp_ids = {132 .num_codecs = 2,133 .codecs = { "DGLS7212", "DGLS7213"},134};135 136static const struct snd_soc_acpi_codecs rt5645_comp_ids = {137 .num_codecs = 2,138 .codecs = { "10EC5645", "10EC5648"},139};140 141struct snd_soc_acpi_mach snd_soc_acpi_intel_baytrail_machines[] = {142 {143 .comp_ids = &rt5640_comp_ids,144 .drv_name = "bytcr_rt5640",145 .fw_filename = "intel/fw_sst_0f28.bin",146 .board = "bytcr_rt5640",147 .machine_quirk = byt_quirk,148 .sof_tplg_filename = "sof-byt-rt5640.tplg",149 },150 {151 .id = "10EC5651",152 .drv_name = "bytcr_rt5651",153 .fw_filename = "intel/fw_sst_0f28.bin",154 .board = "bytcr_rt5651",155 .sof_tplg_filename = "sof-byt-rt5651.tplg",156 },157 {158 .comp_ids = &wm5102_comp_ids,159 .drv_name = "bytcr_wm5102",160 .fw_filename = "intel/fw_sst_0f28.bin",161 .board = "bytcr_wm5102",162 .sof_tplg_filename = "sof-byt-wm5102.tplg",163 },164 {165 .comp_ids = &da7213_comp_ids,166 .drv_name = "bytcht_da7213",167 .fw_filename = "intel/fw_sst_0f28.bin",168 .board = "bytcht_da7213",169 .sof_tplg_filename = "sof-byt-da7213.tplg",170 },171 {172 .id = "ESSX8316",173 .drv_name = "bytcht_es8316",174 .fw_filename = "intel/fw_sst_0f28.bin",175 .board = "bytcht_es8316",176 .sof_tplg_filename = "sof-byt-es8316.tplg",177 },178 {179 .id = "10EC5682",180 .drv_name = "sof_rt5682",181 .sof_tplg_filename = "sof-byt-rt5682.tplg",182 },183 /* some Baytrail platforms rely on RT5645, use CHT machine driver */184 {185 .comp_ids = &rt5645_comp_ids,186 .drv_name = "cht-bsw-rt5645",187 .fw_filename = "intel/fw_sst_0f28.bin",188 .board = "cht-bsw",189 .sof_tplg_filename = "sof-byt-rt5645.tplg",190 },191 /* use CHT driver to Baytrail Chromebooks */192 {193 .id = "193C9890",194 .drv_name = "cht-bsw-max98090",195 .fw_filename = "intel/fw_sst_0f28.bin",196 .board = "cht-bsw",197 .sof_tplg_filename = "sof-byt-max98090.tplg",198 },199 {200 .id = "14F10720",201 .drv_name = "bytcht_cx2072x",202 .fw_filename = "intel/fw_sst_0f28.bin",203 .board = "bytcht_cx2072x",204 .sof_tplg_filename = "sof-byt-cx2072x.tplg",205 },206#if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH)207 /*208 * This is always last in the table so that it is selected only when209 * enabled explicitly and there is no codec-related information in SSDT210 */211 {212 .id = "80860F28",213 .drv_name = "bytcht_nocodec",214 .fw_filename = "intel/fw_sst_0f28.bin",215 .board = "bytcht_nocodec",216 },217#endif218 {},219};220EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_baytrail_machines);221