Commit 494afd7a authored by Mark Brown's avatar Mark Brown

ASoC: Intel: machine driver updates for 5.20

Merge series from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>:

A couple of minor updates contributed and tested by Intel teams or end-users.
parents 4782b7cb 5b56db90
...@@ -401,6 +401,11 @@ static const struct config_entry config_table[] = { ...@@ -401,6 +401,11 @@ static const struct config_entry config_table[] = {
.device = 0x7a50, .device = 0x7a50,
}, },
/* Alderlake-P */ /* Alderlake-P */
{
.flags = FLAG_SOF,
.device = 0x51c8,
.codec_hid = &essx_83x6,
},
{ {
.flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE,
.device = 0x51c8, .device = 0x51c8,
......
...@@ -28,6 +28,24 @@ ...@@ -28,6 +28,24 @@
#define SOF_ES8336_SSP_CODEC_MASK (GENMASK(3, 0)) #define SOF_ES8336_SSP_CODEC_MASK (GENMASK(3, 0))
#define SOF_ES8336_SPEAKERS_EN_GPIO1_QUIRK BIT(4) #define SOF_ES8336_SPEAKERS_EN_GPIO1_QUIRK BIT(4)
/* HDMI capture*/
#define SOF_SSP_HDMI_CAPTURE_PRESENT BIT(14)
#define SOF_NO_OF_HDMI_CAPTURE_SSP_SHIFT 15
#define SOF_NO_OF_HDMI_CAPTURE_SSP_MASK (GENMASK(16, 15))
#define SOF_NO_OF_HDMI_CAPTURE_SSP(quirk) \
(((quirk) << SOF_NO_OF_HDMI_CAPTURE_SSP_SHIFT) & SOF_NO_OF_HDMI_CAPTURE_SSP_MASK)
#define SOF_HDMI_CAPTURE_1_SSP_SHIFT 7
#define SOF_HDMI_CAPTURE_1_SSP_MASK (GENMASK(9, 7))
#define SOF_HDMI_CAPTURE_1_SSP(quirk) \
(((quirk) << SOF_HDMI_CAPTURE_1_SSP_SHIFT) & SOF_HDMI_CAPTURE_1_SSP_MASK)
#define SOF_HDMI_CAPTURE_2_SSP_SHIFT 10
#define SOF_HDMI_CAPTURE_2_SSP_MASK (GENMASK(12, 10))
#define SOF_HDMI_CAPTURE_2_SSP(quirk) \
(((quirk) << SOF_HDMI_CAPTURE_2_SSP_SHIFT) & SOF_HDMI_CAPTURE_2_SSP_MASK)
#define SOF_ES8336_ENABLE_DMIC BIT(5) #define SOF_ES8336_ENABLE_DMIC BIT(5)
#define SOF_ES8336_JD_INVERTED BIT(6) #define SOF_ES8336_JD_INVERTED BIT(6)
#define SOF_ES8336_HEADPHONE_GPIO BIT(7) #define SOF_ES8336_HEADPHONE_GPIO BIT(7)
...@@ -57,28 +75,26 @@ static const struct acpi_gpio_params enable_gpio0 = { 0, 0, true }; ...@@ -57,28 +75,26 @@ static const struct acpi_gpio_params enable_gpio0 = { 0, 0, true };
static const struct acpi_gpio_params enable_gpio1 = { 1, 0, true }; static const struct acpi_gpio_params enable_gpio1 = { 1, 0, true };
static const struct acpi_gpio_mapping acpi_speakers_enable_gpio0[] = { static const struct acpi_gpio_mapping acpi_speakers_enable_gpio0[] = {
{ "speakers-enable-gpios", &enable_gpio0, 1 }, { "speakers-enable-gpios", &enable_gpio0, 1, ACPI_GPIO_QUIRK_ONLY_GPIOIO },
{ } { }
}; };
static const struct acpi_gpio_mapping acpi_speakers_enable_gpio1[] = { static const struct acpi_gpio_mapping acpi_speakers_enable_gpio1[] = {
{ "speakers-enable-gpios", &enable_gpio1, 1 }, { "speakers-enable-gpios", &enable_gpio1, 1, ACPI_GPIO_QUIRK_ONLY_GPIOIO },
}; };
static const struct acpi_gpio_mapping acpi_enable_both_gpios[] = { static const struct acpi_gpio_mapping acpi_enable_both_gpios[] = {
{ "speakers-enable-gpios", &enable_gpio0, 1 }, { "speakers-enable-gpios", &enable_gpio0, 1, ACPI_GPIO_QUIRK_ONLY_GPIOIO },
{ "headphone-enable-gpios", &enable_gpio1, 1 }, { "headphone-enable-gpios", &enable_gpio1, 1, ACPI_GPIO_QUIRK_ONLY_GPIOIO },
{ } { }
}; };
static const struct acpi_gpio_mapping acpi_enable_both_gpios_rev_order[] = { static const struct acpi_gpio_mapping acpi_enable_both_gpios_rev_order[] = {
{ "speakers-enable-gpios", &enable_gpio1, 1 }, { "speakers-enable-gpios", &enable_gpio1, 1, ACPI_GPIO_QUIRK_ONLY_GPIOIO },
{ "headphone-enable-gpios", &enable_gpio0, 1 }, { "headphone-enable-gpios", &enable_gpio0, 1, ACPI_GPIO_QUIRK_ONLY_GPIOIO },
{ } { }
}; };
static const struct acpi_gpio_mapping *gpio_mapping = acpi_speakers_enable_gpio0;
static void log_quirks(struct device *dev) static void log_quirks(struct device *dev)
{ {
dev_info(dev, "quirk mask %#lx\n", quirk); dev_info(dev, "quirk mask %#lx\n", quirk);
...@@ -272,15 +288,6 @@ static int sof_es8336_quirk_cb(const struct dmi_system_id *id) ...@@ -272,15 +288,6 @@ static int sof_es8336_quirk_cb(const struct dmi_system_id *id)
{ {
quirk = (unsigned long)id->driver_data; quirk = (unsigned long)id->driver_data;
if (quirk & SOF_ES8336_HEADPHONE_GPIO) {
if (quirk & SOF_ES8336_SPEAKERS_EN_GPIO1_QUIRK)
gpio_mapping = acpi_enable_both_gpios;
else
gpio_mapping = acpi_enable_both_gpios_rev_order;
} else if (quirk & SOF_ES8336_SPEAKERS_EN_GPIO1_QUIRK) {
gpio_mapping = acpi_speakers_enable_gpio1;
}
return 1; return 1;
} }
...@@ -356,6 +363,13 @@ static struct snd_soc_dai_link_component dmic_component[] = { ...@@ -356,6 +363,13 @@ static struct snd_soc_dai_link_component dmic_component[] = {
} }
}; };
static struct snd_soc_dai_link_component dummy_component[] = {
{
.name = "snd-soc-dummy",
.dai_name = "snd-soc-dummy-dai",
}
};
static int sof_es8336_late_probe(struct snd_soc_card *card) static int sof_es8336_late_probe(struct snd_soc_card *card)
{ {
struct sof_es8336_private *priv = snd_soc_card_get_drvdata(card); struct sof_es8336_private *priv = snd_soc_card_get_drvdata(card);
...@@ -507,6 +521,37 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, ...@@ -507,6 +521,37 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
id++; id++;
} }
/* HDMI-In SSP */
if (quirk & SOF_SSP_HDMI_CAPTURE_PRESENT) {
int num_of_hdmi_ssp = (quirk & SOF_NO_OF_HDMI_CAPTURE_SSP_MASK) >>
SOF_NO_OF_HDMI_CAPTURE_SSP_SHIFT;
for (i = 1; i <= num_of_hdmi_ssp; i++) {
int port = (i == 1 ? (quirk & SOF_HDMI_CAPTURE_1_SSP_MASK) >>
SOF_HDMI_CAPTURE_1_SSP_SHIFT :
(quirk & SOF_HDMI_CAPTURE_2_SSP_MASK) >>
SOF_HDMI_CAPTURE_2_SSP_SHIFT);
links[id].cpus = &cpus[id];
links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL,
"SSP%d Pin", port);
if (!links[id].cpus->dai_name)
return NULL;
links[id].name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-HDMI", port);
if (!links[id].name)
return NULL;
links[id].id = id + hdmi_id_offset;
links[id].codecs = dummy_component;
links[id].num_codecs = ARRAY_SIZE(dummy_component);
links[id].platforms = platform_component;
links[id].num_platforms = ARRAY_SIZE(platform_component);
links[id].dpcm_capture = 1;
links[id].no_pcm = 1;
links[id].num_cpus = 1;
id++;
}
}
return links; return links;
devm_err: devm_err:
...@@ -529,6 +574,7 @@ static int sof_es8336_probe(struct platform_device *pdev) ...@@ -529,6 +574,7 @@ static int sof_es8336_probe(struct platform_device *pdev)
struct acpi_device *adev; struct acpi_device *adev;
struct snd_soc_dai_link *dai_links; struct snd_soc_dai_link *dai_links;
struct device *codec_dev; struct device *codec_dev;
const struct acpi_gpio_mapping *gpio_mapping;
unsigned int cnt = 0; unsigned int cnt = 0;
int dmic_be_num = 0; int dmic_be_num = 0;
int hdmi_num = 3; int hdmi_num = 3;
...@@ -541,30 +587,35 @@ static int sof_es8336_probe(struct platform_device *pdev) ...@@ -541,30 +587,35 @@ static int sof_es8336_probe(struct platform_device *pdev)
card = &sof_es8336_card; card = &sof_es8336_card;
card->dev = dev; card->dev = dev;
if (pdev->id_entry && pdev->id_entry->driver_data)
quirk = (unsigned long)pdev->id_entry->driver_data;
/* check GPIO DMI quirks */ /* check GPIO DMI quirks */
dmi_check_system(sof_es8336_quirk_table); dmi_check_system(sof_es8336_quirk_table);
/* Use NHLT configuration only for Non-HDMI capture use case.
* Because more than one SSP will be enabled for HDMI capture hence wrong codec
* SSP will be set.
*/
if (mach->tplg_quirk_mask & SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER) {
if (!mach->mach_params.i2s_link_mask) { if (!mach->mach_params.i2s_link_mask) {
dev_warn(dev, "No I2S link information provided, using SSP0. This may need to be modified with the quirk module parameter\n"); dev_warn(dev, "No I2S link information provided, using SSP0. This may need to be modified with the quirk module parameter\n");
} else { } else {
/* /*
* Set configuration based on platform NHLT. * Set configuration based on platform NHLT.
* In this machine driver, we can only support one SSP for the * In this machine driver, we can only support one SSP for the
* ES8336 link, the else-if below are intentional. * ES8336 link.
* In some cases multiple SSPs can be reported by NHLT, starting MSB-first * In some cases multiple SSPs can be reported by NHLT, starting MSB-first
* seems to pick the right connection. * seems to pick the right connection.
*/ */
unsigned long ssp = 0; unsigned long ssp;
if (mach->mach_params.i2s_link_mask & BIT(2)) /* fls returns 1-based results, SSPs indices are 0-based */
ssp = SOF_ES8336_SSP_CODEC(2); ssp = fls(mach->mach_params.i2s_link_mask) - 1;
else if (mach->mach_params.i2s_link_mask & BIT(1))
ssp = SOF_ES8336_SSP_CODEC(1);
else if (mach->mach_params.i2s_link_mask & BIT(0))
ssp = SOF_ES8336_SSP_CODEC(0);
quirk |= ssp; quirk |= ssp;
} }
}
if (mach->mach_params.dmic_num) if (mach->mach_params.dmic_num)
quirk |= SOF_ES8336_ENABLE_DMIC; quirk |= SOF_ES8336_ENABLE_DMIC;
...@@ -579,7 +630,13 @@ static int sof_es8336_probe(struct platform_device *pdev) ...@@ -579,7 +630,13 @@ static int sof_es8336_probe(struct platform_device *pdev)
if (quirk & SOF_ES8336_ENABLE_DMIC) if (quirk & SOF_ES8336_ENABLE_DMIC)
dmic_be_num = 2; dmic_be_num = 2;
sof_es8336_card.num_links += dmic_be_num + hdmi_num; /* compute number of dai links */
sof_es8336_card.num_links = 1 + dmic_be_num + hdmi_num;
if (quirk & SOF_SSP_HDMI_CAPTURE_PRESENT)
sof_es8336_card.num_links += (quirk & SOF_NO_OF_HDMI_CAPTURE_SSP_MASK) >>
SOF_NO_OF_HDMI_CAPTURE_SSP_SHIFT;
dai_links = sof_card_dai_links_create(dev, dai_links = sof_card_dai_links_create(dev,
SOF_ES8336_SSP_CODEC(quirk), SOF_ES8336_SSP_CODEC(quirk),
dmic_be_num, hdmi_num); dmic_be_num, hdmi_num);
...@@ -635,6 +692,17 @@ static int sof_es8336_probe(struct platform_device *pdev) ...@@ -635,6 +692,17 @@ static int sof_es8336_probe(struct platform_device *pdev)
} }
/* get speaker enable GPIO */ /* get speaker enable GPIO */
if (quirk & SOF_ES8336_HEADPHONE_GPIO) {
if (quirk & SOF_ES8336_SPEAKERS_EN_GPIO1_QUIRK)
gpio_mapping = acpi_enable_both_gpios;
else
gpio_mapping = acpi_enable_both_gpios_rev_order;
} else if (quirk & SOF_ES8336_SPEAKERS_EN_GPIO1_QUIRK) {
gpio_mapping = acpi_speakers_enable_gpio1;
} else {
gpio_mapping = acpi_speakers_enable_gpio0;
}
ret = devm_acpi_dev_add_driver_gpios(codec_dev, gpio_mapping); ret = devm_acpi_dev_add_driver_gpios(codec_dev, gpio_mapping);
if (ret) if (ret)
dev_warn(codec_dev, "unable to add GPIO mapping table\n"); dev_warn(codec_dev, "unable to add GPIO mapping table\n");
...@@ -690,6 +758,21 @@ static int sof_es8336_remove(struct platform_device *pdev) ...@@ -690,6 +758,21 @@ static int sof_es8336_remove(struct platform_device *pdev)
return 0; return 0;
} }
static const struct platform_device_id board_ids[] = {
{
.name = "adl_es83x6_c1_h02",
.driver_data = (kernel_ulong_t)(SOF_ES8336_SSP_CODEC(1) |
SOF_NO_OF_HDMI_CAPTURE_SSP(2) |
SOF_HDMI_CAPTURE_1_SSP(0) |
SOF_HDMI_CAPTURE_2_SSP(2) |
SOF_SSP_HDMI_CAPTURE_PRESENT |
SOF_ES8336_SPEAKERS_EN_GPIO1_QUIRK |
SOF_ES8336_JD_INVERTED),
},
{ }
};
MODULE_DEVICE_TABLE(platform, board_ids);
static struct platform_driver sof_es8336_driver = { static struct platform_driver sof_es8336_driver = {
.driver = { .driver = {
.name = "sof-essx8336", .name = "sof-essx8336",
...@@ -697,6 +780,7 @@ static struct platform_driver sof_es8336_driver = { ...@@ -697,6 +780,7 @@ static struct platform_driver sof_es8336_driver = {
}, },
.probe = sof_es8336_probe, .probe = sof_es8336_probe,
.remove = sof_es8336_remove, .remove = sof_es8336_remove,
.id_table = board_ids,
}; };
module_platform_driver(sof_es8336_driver); module_platform_driver(sof_es8336_driver);
......
...@@ -190,11 +190,6 @@ static int sof_card_late_probe(struct snd_soc_card *card) ...@@ -190,11 +190,6 @@ static int sof_card_late_probe(struct snd_soc_card *card)
struct sof_hdmi_pcm *pcm; struct sof_hdmi_pcm *pcm;
int err; int err;
if (list_empty(&ctx->hdmi_pcm_list))
return -EINVAL;
pcm = list_first_entry(&ctx->hdmi_pcm_list, struct sof_hdmi_pcm, head);
if (sof_nau8825_quirk & SOF_MAX98373_SPEAKER_AMP_PRESENT) { if (sof_nau8825_quirk & SOF_MAX98373_SPEAKER_AMP_PRESENT) {
/* Disable Left and Right Spk pin after boot */ /* Disable Left and Right Spk pin after boot */
snd_soc_dapm_disable_pin(dapm, "Left Spk"); snd_soc_dapm_disable_pin(dapm, "Left Spk");
...@@ -204,6 +199,11 @@ static int sof_card_late_probe(struct snd_soc_card *card) ...@@ -204,6 +199,11 @@ static int sof_card_late_probe(struct snd_soc_card *card)
return err; return err;
} }
if (list_empty(&ctx->hdmi_pcm_list))
return -EINVAL;
pcm = list_first_entry(&ctx->hdmi_pcm_list, struct sof_hdmi_pcm, head);
return hda_dsp_hdmi_build_controls(card, pcm->codec_dai->component); return hda_dsp_hdmi_build_controls(card, pcm->codec_dai->component);
} }
......
...@@ -447,6 +447,15 @@ static int sof_card_late_probe(struct snd_soc_card *card) ...@@ -447,6 +447,15 @@ static int sof_card_late_probe(struct snd_soc_card *card)
struct sof_hdmi_pcm *pcm; struct sof_hdmi_pcm *pcm;
int err; int err;
if (sof_rt5682_quirk & SOF_MAX98373_SPEAKER_AMP_PRESENT) {
/* Disable Left and Right Spk pin after boot */
snd_soc_dapm_disable_pin(dapm, "Left Spk");
snd_soc_dapm_disable_pin(dapm, "Right Spk");
err = snd_soc_dapm_sync(dapm);
if (err < 0)
return err;
}
/* HDMI is not supported by SOF on Baytrail/CherryTrail */ /* HDMI is not supported by SOF on Baytrail/CherryTrail */
if (is_legacy_cpu || !ctx->idisp_codec) if (is_legacy_cpu || !ctx->idisp_codec)
return 0; return 0;
...@@ -477,15 +486,6 @@ static int sof_card_late_probe(struct snd_soc_card *card) ...@@ -477,15 +486,6 @@ static int sof_card_late_probe(struct snd_soc_card *card)
return err; return err;
} }
if (sof_rt5682_quirk & SOF_MAX98373_SPEAKER_AMP_PRESENT) {
/* Disable Left and Right Spk pin after boot */
snd_soc_dapm_disable_pin(dapm, "Left Spk");
snd_soc_dapm_disable_pin(dapm, "Right Spk");
err = snd_soc_dapm_sync(dapm);
if (err < 0)
return err;
}
return hdac_hdmi_jack_port_init(component, &card->dapm); return hdac_hdmi_jack_port_init(component, &card->dapm);
} }
...@@ -1092,6 +1092,14 @@ static const struct platform_device_id board_ids[] = { ...@@ -1092,6 +1092,14 @@ static const struct platform_device_id board_ids[] = {
SOF_RT5682_SSP_AMP(1) | SOF_RT5682_SSP_AMP(1) |
SOF_RT5682_NUM_HDMIDEV(4)), SOF_RT5682_NUM_HDMIDEV(4)),
}, },
{
.name = "mtl_mx98357_rt5682",
.driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
SOF_RT5682_SSP_CODEC(0) |
SOF_SPEAKER_AMP_PRESENT |
SOF_RT5682_SSP_AMP(1) |
SOF_RT5682_NUM_HDMIDEV(4)),
},
{ } { }
}; };
MODULE_DEVICE_TABLE(platform, board_ids); MODULE_DEVICE_TABLE(platform, board_ids);
......
...@@ -246,6 +246,16 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = { ...@@ -246,6 +246,16 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = {
SOF_BT_OFFLOAD_SSP(2) | SOF_BT_OFFLOAD_SSP(2) |
SOF_SSP_BT_OFFLOAD_PRESENT), SOF_SSP_BT_OFFLOAD_PRESENT),
}, },
{
.callback = sof_sdw_quirk_cb,
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc"),
DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "0AF0")
},
.driver_data = (void *)(SOF_SDW_TGL_HDMI |
RT711_JD2 |
SOF_SDW_FOUR_SPK),
},
{ {
.callback = sof_sdw_quirk_cb, .callback = sof_sdw_quirk_cb,
.matches = { .matches = {
......
...@@ -8,6 +8,11 @@ ...@@ -8,6 +8,11 @@
#include <sound/soc-acpi.h> #include <sound/soc-acpi.h>
#include <sound/soc-acpi-intel-match.h> #include <sound/soc-acpi-intel-match.h>
static const struct snd_soc_acpi_codecs essx_83x6 = {
.num_codecs = 3,
.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
};
static const struct snd_soc_acpi_endpoint single_endpoint = { static const struct snd_soc_acpi_endpoint single_endpoint = {
.num = 0, .num = 0,
.aggregated = 0, .aggregated = 0,
...@@ -435,6 +440,11 @@ static const struct snd_soc_acpi_codecs adl_max98390_amp = { ...@@ -435,6 +440,11 @@ static const struct snd_soc_acpi_codecs adl_max98390_amp = {
.codecs = {"MX98390"} .codecs = {"MX98390"}
}; };
static const struct snd_soc_acpi_codecs adl_lt6911_hdmi = {
.num_codecs = 1,
.codecs = {"INTC10B0"}
};
struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = { struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = {
{ {
.comp_ids = &adl_rt5682_rt5682s_hp, .comp_ids = &adl_rt5682_rt5682s_hp,
...@@ -515,6 +525,21 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = { ...@@ -515,6 +525,21 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = {
.drv_name = "adl_cs35l41", .drv_name = "adl_cs35l41",
.sof_tplg_filename = "sof-adl-cs35l41.tplg", .sof_tplg_filename = "sof-adl-cs35l41.tplg",
}, },
{
.comp_ids = &essx_83x6,
.drv_name = "adl_es83x6_c1_h02",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &adl_lt6911_hdmi,
.sof_tplg_filename = "sof-adl-es83x6-ssp1-hdmi-ssp02.tplg",
},
{
.comp_ids = &essx_83x6,
.drv_name = "sof-essx8336",
.sof_tplg_filename = "sof-adl-es83x6", /* the tplg suffix is added at run time */
.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
},
{}, {},
}; };
EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_adl_machines); EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_adl_machines);
......
...@@ -10,7 +10,24 @@ ...@@ -10,7 +10,24 @@
#include <sound/soc-acpi-intel-match.h> #include <sound/soc-acpi-intel-match.h>
#include "soc-acpi-intel-sdw-mockup-match.h" #include "soc-acpi-intel-sdw-mockup-match.h"
static const struct snd_soc_acpi_codecs mtl_max98357a_amp = {
.num_codecs = 1,
.codecs = {"MX98357A"}
};
static const struct snd_soc_acpi_codecs mtl_rt5682_rt5682s_hp = {
.num_codecs = 2,
.codecs = {"10EC5682", "RTL5682"},
};
struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_machines[] = { struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_machines[] = {
{
.comp_ids = &mtl_rt5682_rt5682s_hp,
.drv_name = "mtl_mx98357_rt5682",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &mtl_max98357a_amp,
.sof_tplg_filename = "sof-mtl-max98357a-rt5682.tplg",
},
{}, {},
}; };
EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_machines); EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_machines);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment