Commit 439c69f8 authored by Mark Brown's avatar Mark Brown

ASoC: Intel: boards: updates for 6.10 - part3

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

This last part is the continuation of Brent Lu's cleanups. Multiple
quirks have been removed to use "default" configurations and
ACPI-based detection of codecs and selection of topology files.

This cleanup has been done in multiple steps/phases since Fall 2023,
thanks Brent for this contribution!
parents ccec9402 57ad033c
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
* Copyright(c) 2023 Intel Corporation. * Copyright(c) 2023 Intel Corporation.
*/ */
#ifndef __SOF_SSP_COMMON_H #ifndef __LINUX_SND_SOC_ACPI_INTEL_SSP_COMMON_H
#define __SOF_SSP_COMMON_H #define __LINUX_SND_SOC_ACPI_INTEL_SSP_COMMON_H
/* Cirrus Logic */ /* Cirrus Logic */
#define CS35L41_ACPI_HID "CSC3541" #define CS35L41_ACPI_HID "CSC3541"
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
#define RT5682_ACPI_HID "10EC5682" #define RT5682_ACPI_HID "10EC5682"
#define RT5682S_ACPI_HID "RTL5682" #define RT5682S_ACPI_HID "RTL5682"
enum sof_ssp_codec { enum snd_soc_acpi_intel_codec {
CODEC_NONE, CODEC_NONE,
/* headphone codec */ /* headphone codec */
...@@ -65,9 +65,17 @@ enum sof_ssp_codec { ...@@ -65,9 +65,17 @@ enum sof_ssp_codec {
CODEC_RT1308, CODEC_RT1308,
}; };
enum sof_ssp_codec sof_ssp_detect_codec_type(struct device *dev); enum snd_soc_acpi_intel_codec
enum sof_ssp_codec sof_ssp_detect_amp_type(struct device *dev); snd_soc_acpi_intel_detect_codec_type(struct device *dev);
enum snd_soc_acpi_intel_codec
snd_soc_acpi_intel_detect_amp_type(struct device *dev);
const char *sof_ssp_get_codec_name(enum sof_ssp_codec codec_type); const char *
snd_soc_acpi_intel_get_codec_name(enum snd_soc_acpi_intel_codec codec_type);
#endif /* __SOF_SSP_COMMON_H */ const char *
snd_soc_acpi_intel_get_codec_tplg_suffix(enum snd_soc_acpi_intel_codec codec_type);
const char *
snd_soc_acpi_intel_get_amp_tplg_suffix(enum snd_soc_acpi_intel_codec codec_type);
#endif /* __LINUX_SND_SOC_ACPI_INTEL_SSP_COMMON_H */
...@@ -151,6 +151,18 @@ struct snd_soc_acpi_link_adr { ...@@ -151,6 +151,18 @@ struct snd_soc_acpi_link_adr {
*/ */
#define SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER BIT(2) #define SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER BIT(2)
/*
* when set the speaker amplifier name suffix (i.e. "-max98360a") will be
* appended to topology file name
*/
#define SND_SOC_ACPI_TPLG_INTEL_AMP_NAME BIT(3)
/*
* when set the headphone codec name suffix (i.e. "-rt5682") will be appended to
* topology file name
*/
#define SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME BIT(4)
/** /**
* snd_soc_acpi_mach: ACPI-based machine descriptor. Most of the fields are * snd_soc_acpi_mach: ACPI-based machine descriptor. Most of the fields are
* related to the hardware, except for the firmware and topology file names. * related to the hardware, except for the firmware and topology file names.
......
...@@ -41,9 +41,6 @@ config SND_SOC_INTEL_SOF_CIRRUS_COMMON ...@@ -41,9 +41,6 @@ config SND_SOC_INTEL_SOF_CIRRUS_COMMON
config SND_SOC_INTEL_SOF_NUVOTON_COMMON config SND_SOC_INTEL_SOF_NUVOTON_COMMON
tristate tristate
config SND_SOC_INTEL_SOF_SSP_COMMON
tristate
config SND_SOC_INTEL_SOF_BOARD_HELPERS config SND_SOC_INTEL_SOF_BOARD_HELPERS
tristate tristate
...@@ -503,7 +500,7 @@ config SND_SOC_INTEL_SOF_RT5682_MACH ...@@ -503,7 +500,7 @@ config SND_SOC_INTEL_SOF_RT5682_MACH
select SND_SOC_INTEL_SOF_BOARD_HELPERS select SND_SOC_INTEL_SOF_BOARD_HELPERS
select SND_SOC_INTEL_SOF_MAXIM_COMMON select SND_SOC_INTEL_SOF_MAXIM_COMMON
select SND_SOC_INTEL_SOF_REALTEK_COMMON select SND_SOC_INTEL_SOF_REALTEK_COMMON
select SND_SOC_INTEL_SOF_SSP_COMMON select SND_SOC_ACPI_INTEL_MATCH
help help
This adds support for ASoC machine driver for SOF platforms This adds support for ASoC machine driver for SOF platforms
with rt5650 or rt5682 codec. with rt5650 or rt5682 codec.
...@@ -521,7 +518,7 @@ config SND_SOC_INTEL_SOF_CS42L42_MACH ...@@ -521,7 +518,7 @@ config SND_SOC_INTEL_SOF_CS42L42_MACH
select SND_SOC_INTEL_HDA_DSP_COMMON select SND_SOC_INTEL_HDA_DSP_COMMON
select SND_SOC_INTEL_SOF_BOARD_HELPERS select SND_SOC_INTEL_SOF_BOARD_HELPERS
select SND_SOC_INTEL_SOF_MAXIM_COMMON select SND_SOC_INTEL_SOF_MAXIM_COMMON
select SND_SOC_INTEL_SOF_SSP_COMMON select SND_SOC_ACPI_INTEL_MATCH
help help
This adds support for ASoC machine driver for SOF platforms This adds support for ASoC machine driver for SOF platforms
with cs42l42 codec. with cs42l42 codec.
...@@ -574,7 +571,7 @@ config SND_SOC_INTEL_SOF_NAU8825_MACH ...@@ -574,7 +571,7 @@ config SND_SOC_INTEL_SOF_NAU8825_MACH
select SND_SOC_INTEL_SOF_MAXIM_COMMON select SND_SOC_INTEL_SOF_MAXIM_COMMON
select SND_SOC_INTEL_SOF_NUVOTON_COMMON select SND_SOC_INTEL_SOF_NUVOTON_COMMON
select SND_SOC_INTEL_SOF_REALTEK_COMMON select SND_SOC_INTEL_SOF_REALTEK_COMMON
select SND_SOC_INTEL_SOF_SSP_COMMON select SND_SOC_ACPI_INTEL_MATCH
help help
This adds support for ASoC machine driver for SOF platforms This adds support for ASoC machine driver for SOF platforms
with nau8825 codec. with nau8825 codec.
...@@ -626,7 +623,7 @@ config SND_SOC_INTEL_SOF_DA7219_MACH ...@@ -626,7 +623,7 @@ config SND_SOC_INTEL_SOF_DA7219_MACH
select SND_SOC_DMIC select SND_SOC_DMIC
select SND_SOC_INTEL_SOF_BOARD_HELPERS select SND_SOC_INTEL_SOF_BOARD_HELPERS
select SND_SOC_INTEL_SOF_MAXIM_COMMON select SND_SOC_INTEL_SOF_MAXIM_COMMON
select SND_SOC_INTEL_SOF_SSP_COMMON select SND_SOC_ACPI_INTEL_MATCH
help help
This adds support for ASoC machine driver for SOF platforms This adds support for ASoC machine driver for SOF platforms
with Dialog DA7219 I2S audio codec. with Dialog DA7219 I2S audio codec.
...@@ -646,7 +643,7 @@ config SND_SOC_INTEL_SOF_SSP_AMP_MACH ...@@ -646,7 +643,7 @@ config SND_SOC_INTEL_SOF_SSP_AMP_MACH
select SND_SOC_INTEL_SOF_BOARD_HELPERS select SND_SOC_INTEL_SOF_BOARD_HELPERS
select SND_SOC_INTEL_SOF_REALTEK_COMMON select SND_SOC_INTEL_SOF_REALTEK_COMMON
select SND_SOC_INTEL_SOF_CIRRUS_COMMON select SND_SOC_INTEL_SOF_CIRRUS_COMMON
select SND_SOC_INTEL_SOF_SSP_COMMON select SND_SOC_ACPI_INTEL_MATCH
help help
This adds support for ASoC machine driver for SOF platforms This adds support for ASoC machine driver for SOF platforms
with RT1308/CS35L41 I2S audio codec. with RT1308/CS35L41 I2S audio codec.
......
...@@ -101,8 +101,5 @@ obj-$(CONFIG_SND_SOC_INTEL_SOF_CIRRUS_COMMON) += snd-soc-intel-sof-cirrus-common ...@@ -101,8 +101,5 @@ obj-$(CONFIG_SND_SOC_INTEL_SOF_CIRRUS_COMMON) += snd-soc-intel-sof-cirrus-common
snd-soc-intel-sof-nuvoton-common-objs += sof_nuvoton_common.o snd-soc-intel-sof-nuvoton-common-objs += sof_nuvoton_common.o
obj-$(CONFIG_SND_SOC_INTEL_SOF_NUVOTON_COMMON) += snd-soc-intel-sof-nuvoton-common.o obj-$(CONFIG_SND_SOC_INTEL_SOF_NUVOTON_COMMON) += snd-soc-intel-sof-nuvoton-common.o
snd-soc-intel-sof-ssp-common-objs += sof_ssp_common.o
obj-$(CONFIG_SND_SOC_INTEL_SOF_SSP_COMMON) += snd-soc-intel-sof-ssp-common.o
snd-soc-intel-sof-board-helpers-objs += sof_board_helpers.o snd-soc-intel-sof-board-helpers-objs += sof_board_helpers.o
obj-$(CONFIG_SND_SOC_INTEL_SOF_BOARD_HELPERS) += snd-soc-intel-sof-board-helpers.o obj-$(CONFIG_SND_SOC_INTEL_SOF_BOARD_HELPERS) += snd-soc-intel-sof-board-helpers.o
...@@ -103,13 +103,13 @@ static struct snd_soc_dai_link_component platform_component[] = { ...@@ -103,13 +103,13 @@ static struct snd_soc_dai_link_component platform_component[] = {
}; };
static int set_ssp_codec_link(struct device *dev, struct snd_soc_dai_link *link, static int set_ssp_codec_link(struct device *dev, struct snd_soc_dai_link *link,
int be_id, enum sof_ssp_codec codec_type, int be_id, enum snd_soc_acpi_intel_codec codec_type,
int ssp_codec) int ssp_codec)
{ {
struct snd_soc_dai_link_component *cpus; struct snd_soc_dai_link_component *cpus;
dev_dbg(dev, "link %d: ssp codec %s, ssp %d\n", be_id, dev_dbg(dev, "link %d: ssp codec %s, ssp %d\n", be_id,
sof_ssp_get_codec_name(codec_type), ssp_codec); snd_soc_acpi_intel_get_codec_name(codec_type), ssp_codec);
/* link name */ /* link name */
link->name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-Codec", ssp_codec); link->name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-Codec", ssp_codec);
...@@ -259,12 +259,13 @@ static int set_idisp_hdmi_link(struct device *dev, struct snd_soc_dai_link *link ...@@ -259,12 +259,13 @@ static int set_idisp_hdmi_link(struct device *dev, struct snd_soc_dai_link *link
} }
static int set_ssp_amp_link(struct device *dev, struct snd_soc_dai_link *link, static int set_ssp_amp_link(struct device *dev, struct snd_soc_dai_link *link,
int be_id, enum sof_ssp_codec amp_type, int ssp_amp) int be_id, enum snd_soc_acpi_intel_codec amp_type,
int ssp_amp)
{ {
struct snd_soc_dai_link_component *cpus; struct snd_soc_dai_link_component *cpus;
dev_dbg(dev, "link %d: ssp amp %s, ssp %d\n", be_id, dev_dbg(dev, "link %d: ssp amp %s, ssp %d\n", be_id,
sof_ssp_get_codec_name(amp_type), ssp_amp); snd_soc_acpi_intel_get_codec_name(amp_type), ssp_amp);
/* link name */ /* link name */
link->name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-Codec", ssp_amp); link->name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-Codec", ssp_amp);
...@@ -598,8 +599,8 @@ sof_intel_board_get_ctx(struct device *dev, unsigned long board_quirk) ...@@ -598,8 +599,8 @@ sof_intel_board_get_ctx(struct device *dev, unsigned long board_quirk)
if (!ctx) if (!ctx)
return NULL; return NULL;
ctx->codec_type = sof_ssp_detect_codec_type(dev); ctx->codec_type = snd_soc_acpi_intel_detect_codec_type(dev);
ctx->amp_type = sof_ssp_detect_amp_type(dev); ctx->amp_type = snd_soc_acpi_intel_detect_amp_type(dev);
ctx->dmic_be_num = 2; ctx->dmic_be_num = 2;
ctx->hdmi_num = (board_quirk & SOF_NUM_IDISP_HDMI_MASK) >> ctx->hdmi_num = (board_quirk & SOF_NUM_IDISP_HDMI_MASK) >>
...@@ -634,4 +635,4 @@ MODULE_DESCRIPTION("ASoC Intel SOF Machine Driver Board Helpers"); ...@@ -634,4 +635,4 @@ MODULE_DESCRIPTION("ASoC Intel SOF Machine Driver Board Helpers");
MODULE_AUTHOR("Brent Lu <brent.lu@intel.com>"); MODULE_AUTHOR("Brent Lu <brent.lu@intel.com>");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_IMPORT_NS(SND_SOC_INTEL_HDA_DSP_COMMON); MODULE_IMPORT_NS(SND_SOC_INTEL_HDA_DSP_COMMON);
MODULE_IMPORT_NS(SND_SOC_INTEL_SOF_SSP_COMMON); MODULE_IMPORT_NS(SND_SOC_ACPI_INTEL_MATCH);
...@@ -7,8 +7,8 @@ ...@@ -7,8 +7,8 @@
#define __SOF_INTEL_BOARD_HELPERS_H #define __SOF_INTEL_BOARD_HELPERS_H
#include <sound/soc.h> #include <sound/soc.h>
#include <sound/soc-acpi-intel-ssp-common.h>
#include "sof_hdmi_common.h" #include "sof_hdmi_common.h"
#include "sof_ssp_common.h"
/* /*
* Common board quirks: from bit 8 to 31, LSB 8 bits reserved for machine * Common board quirks: from bit 8 to 31, LSB 8 bits reserved for machine
...@@ -132,8 +132,8 @@ struct sof_card_private { ...@@ -132,8 +132,8 @@ struct sof_card_private {
struct snd_soc_jack headset_jack; struct snd_soc_jack headset_jack;
struct sof_hdmi_private hdmi; struct sof_hdmi_private hdmi;
enum sof_ssp_codec codec_type; enum snd_soc_acpi_intel_codec codec_type;
enum sof_ssp_codec amp_type; enum snd_soc_acpi_intel_codec amp_type;
int dmic_be_num; int dmic_be_num;
int hdmi_num; int hdmi_num;
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#define __SOF_CIRRUS_COMMON_H #define __SOF_CIRRUS_COMMON_H
#include <sound/soc.h> #include <sound/soc.h>
#include "sof_ssp_common.h" #include <sound/soc-acpi-intel-ssp-common.h>
/* /*
* Cirrus Logic CS35L41/CS35L53 * Cirrus Logic CS35L41/CS35L53
......
...@@ -263,13 +263,28 @@ static const struct platform_device_id board_ids[] = { ...@@ -263,13 +263,28 @@ static const struct platform_device_id board_ids[] = {
SOF_SSP_PORT_AMP(1)), SOF_SSP_PORT_AMP(1)),
}, },
{ {
.name = "adl_mx98360a_cs4242", .name = "adl_cs42l42_def",
.driver_data = (kernel_ulong_t)(SOF_SSP_PORT_CODEC(0) | .driver_data = (kernel_ulong_t)(SOF_SSP_PORT_CODEC(0) |
SOF_SSP_PORT_AMP(1) | SOF_SSP_PORT_AMP(1) |
SOF_NUM_IDISP_HDMI(4) | SOF_NUM_IDISP_HDMI(4) |
SOF_BT_OFFLOAD_PRESENT | SOF_BT_OFFLOAD_PRESENT |
SOF_SSP_PORT_BT_OFFLOAD(2)), SOF_SSP_PORT_BT_OFFLOAD(2)),
}, },
{
.name = "rpl_cs42l42_def",
.driver_data = (kernel_ulong_t)(SOF_SSP_PORT_CODEC(0) |
SOF_SSP_PORT_AMP(1) |
SOF_NUM_IDISP_HDMI(4) |
SOF_BT_OFFLOAD_PRESENT |
SOF_SSP_PORT_BT_OFFLOAD(2)),
},
{
.name = "mtl_cs42l42_def",
.driver_data = (kernel_ulong_t)(SOF_SSP_PORT_CODEC(2) |
SOF_SSP_PORT_AMP(0) |
SOF_BT_OFFLOAD_PRESENT |
SOF_SSP_PORT_BT_OFFLOAD(1)),
},
{ } { }
}; };
MODULE_DEVICE_TABLE(platform, board_ids); MODULE_DEVICE_TABLE(platform, board_ids);
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#define __SOF_MAXIM_COMMON_H #define __SOF_MAXIM_COMMON_H
#include <sound/soc.h> #include <sound/soc.h>
#include "sof_ssp_common.h" #include <sound/soc-acpi-intel-ssp-common.h>
/* /*
* Maxim MAX98373 * Maxim MAX98373
......
...@@ -319,6 +319,13 @@ static const struct platform_device_id board_ids[] = { ...@@ -319,6 +319,13 @@ static const struct platform_device_id board_ids[] = {
SOF_SSP_PORT_BT_OFFLOAD(2) | SOF_SSP_PORT_BT_OFFLOAD(2) |
SOF_BT_OFFLOAD_PRESENT), SOF_BT_OFFLOAD_PRESENT),
}, },
{
.name = "mtl_nau8825_def",
.driver_data = (kernel_ulong_t)(SOF_SSP_PORT_CODEC(2) |
SOF_SSP_PORT_AMP(0) |
SOF_SSP_PORT_BT_OFFLOAD(1) |
SOF_BT_OFFLOAD_PRESENT),
},
{ } { }
}; };
MODULE_DEVICE_TABLE(platform, board_ids); MODULE_DEVICE_TABLE(platform, board_ids);
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#define __SOF_NUVOTON_COMMON_H #define __SOF_NUVOTON_COMMON_H
#include <sound/soc.h> #include <sound/soc.h>
#include "sof_ssp_common.h" #include <sound/soc-acpi-intel-ssp-common.h>
/* /*
* Nuvoton NAU8318 * Nuvoton NAU8318
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#define __SOF_REALTEK_COMMON_H #define __SOF_REALTEK_COMMON_H
#include <sound/soc.h> #include <sound/soc.h>
#include "sof_ssp_common.h" #include <sound/soc-acpi-intel-ssp-common.h>
/* /*
* Realtek ALC1011 * Realtek ALC1011
......
...@@ -15,5 +15,7 @@ snd-soc-acpi-intel-match-objs := soc-acpi-intel-byt-match.o soc-acpi-intel-cht-m ...@@ -15,5 +15,7 @@ snd-soc-acpi-intel-match-objs := soc-acpi-intel-byt-match.o soc-acpi-intel-cht-m
soc-acpi-intel-hda-match.o \ soc-acpi-intel-hda-match.o \
soc-acpi-intel-sdw-mockup-match.o soc-acpi-intel-sdw-mockup-match.o
snd-soc-acpi-intel-match-objs += soc-acpi-intel-ssp-common.o
obj-$(CONFIG_SND_SOC_INTEL_SST) += snd-soc-sst-dsp.o snd-soc-sst-ipc.o obj-$(CONFIG_SND_SOC_INTEL_SST) += snd-soc-sst-dsp.o snd-soc-sst-ipc.o
obj-$(CONFIG_SND_SOC_ACPI_INTEL_MATCH) += snd-soc-acpi-intel-match.o obj-$(CONFIG_SND_SOC_ACPI_INTEL_MATCH) += snd-soc-acpi-intel-match.o
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <sound/soc-acpi.h> #include <sound/soc-acpi.h>
#include <sound/soc-acpi-intel-match.h> #include <sound/soc-acpi-intel-match.h>
#include <sound/soc-acpi-intel-ssp-common.h>
static const struct snd_soc_acpi_codecs essx_83x6 = { static const struct snd_soc_acpi_codecs essx_83x6 = {
.num_codecs = 3, .num_codecs = 3,
...@@ -447,11 +448,6 @@ static const struct snd_soc_acpi_link_adr adl_chromebook_base[] = { ...@@ -447,11 +448,6 @@ static const struct snd_soc_acpi_link_adr adl_chromebook_base[] = {
{} {}
}; };
static const struct snd_soc_acpi_codecs adl_max98373_amp = {
.num_codecs = 1,
.codecs = {"MX98373"}
};
static const struct snd_soc_acpi_codecs adl_max98357a_amp = { static const struct snd_soc_acpi_codecs adl_max98357a_amp = {
.num_codecs = 1, .num_codecs = 1,
.codecs = {"MX98357A"} .codecs = {"MX98357A"}
...@@ -464,12 +460,7 @@ static const struct snd_soc_acpi_codecs adl_max98360a_amp = { ...@@ -464,12 +460,7 @@ static const struct snd_soc_acpi_codecs adl_max98360a_amp = {
static const struct snd_soc_acpi_codecs adl_rt5682_rt5682s_hp = { static const struct snd_soc_acpi_codecs adl_rt5682_rt5682s_hp = {
.num_codecs = 2, .num_codecs = 2,
.codecs = {"10EC5682", "RTL5682"}, .codecs = {RT5682_ACPI_HID, RT5682S_ACPI_HID},
};
static const struct snd_soc_acpi_codecs adl_rt1015p_amp = {
.num_codecs = 1,
.codecs = {"RTL1015"}
}; };
static const struct snd_soc_acpi_codecs adl_rt1019p_amp = { static const struct snd_soc_acpi_codecs adl_rt1019p_amp = {
...@@ -477,34 +468,12 @@ static const struct snd_soc_acpi_codecs adl_rt1019p_amp = { ...@@ -477,34 +468,12 @@ static const struct snd_soc_acpi_codecs adl_rt1019p_amp = {
.codecs = {"RTL1019"} .codecs = {"RTL1019"}
}; };
static const struct snd_soc_acpi_codecs adl_max98390_amp = {
.num_codecs = 1,
.codecs = {"MX98390"}
};
static const struct snd_soc_acpi_codecs adl_lt6911_hdmi = { static const struct snd_soc_acpi_codecs adl_lt6911_hdmi = {
.num_codecs = 1, .num_codecs = 1,
.codecs = {"INTC10B0"} .codecs = {"INTC10B0"}
}; };
static const struct snd_soc_acpi_codecs adl_nau8318_amp = {
.num_codecs = 1,
.codecs = {"NVTN2012"}
};
static struct snd_soc_acpi_codecs adl_rt5650_amp = {
.num_codecs = 1,
.codecs = {"10EC5650"}
};
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,
.drv_name = "adl_rt5682_def",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &adl_max98373_amp,
.sof_tplg_filename = "sof-adl-max98373-rt5682.tplg",
},
{ {
.comp_ids = &adl_rt5682_rt5682s_hp, .comp_ids = &adl_rt5682_rt5682s_hp,
.drv_name = "adl_mx98357_rt5682", .drv_name = "adl_mx98357_rt5682",
...@@ -512,13 +481,6 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = { ...@@ -512,13 +481,6 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = {
.quirk_data = &adl_max98357a_amp, .quirk_data = &adl_max98357a_amp,
.sof_tplg_filename = "sof-adl-max98357a-rt5682.tplg", .sof_tplg_filename = "sof-adl-max98357a-rt5682.tplg",
}, },
{
.comp_ids = &adl_rt5682_rt5682s_hp,
.drv_name = "adl_rt5682_def",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &adl_max98360a_amp,
.sof_tplg_filename = "sof-adl-max98360a-rt5682.tplg",
},
{ {
.id = "10508825", .id = "10508825",
.drv_name = "adl_rt1019p_8825", .drv_name = "adl_rt1019p_8825",
...@@ -526,53 +488,6 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = { ...@@ -526,53 +488,6 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = {
.quirk_data = &adl_rt1019p_amp, .quirk_data = &adl_rt1019p_amp,
.sof_tplg_filename = "sof-adl-rt1019-nau8825.tplg", .sof_tplg_filename = "sof-adl-rt1019-nau8825.tplg",
}, },
{
.id = "10508825",
.drv_name = "adl_nau8825_def",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &adl_max98373_amp,
.sof_tplg_filename = "sof-adl-max98373-nau8825.tplg",
},
{
.id = "10508825",
.drv_name = "adl_nau8825_def",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &adl_max98360a_amp,
.sof_tplg_filename = "sof-adl-max98360a-nau8825.tplg",
},
{
.comp_ids = &adl_rt5682_rt5682s_hp,
.drv_name = "adl_rt5682_def",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &adl_rt1019p_amp,
.sof_tplg_filename = "sof-adl-rt1019-rt5682.tplg",
},
{
.id = "10508825",
.drv_name = "adl_nau8825_def",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &adl_rt1015p_amp,
.sof_tplg_filename = "sof-adl-rt1015-nau8825.tplg",
},
{
.id = "10508825",
.drv_name = "adl_nau8825_def",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &adl_nau8318_amp,
.sof_tplg_filename = "sof-adl-nau8318-nau8825.tplg",
},
{
.id = "10508825",
.drv_name = "adl_nau8825_def",
.sof_tplg_filename = "sof-adl-nau8825.tplg",
},
{
.comp_ids = &adl_rt5682_rt5682s_hp,
.drv_name = "adl_rt5682_def",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &adl_max98390_amp,
.sof_tplg_filename = "sof-adl-max98390-rt5682.tplg",
},
{ {
.comp_ids = &adl_rt5682_rt5682s_hp, .comp_ids = &adl_rt5682_rt5682s_hp,
.drv_name = "adl_rt5682_c1_h02", .drv_name = "adl_rt5682_c1_h02",
...@@ -580,18 +495,6 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = { ...@@ -580,18 +495,6 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = {
.quirk_data = &adl_lt6911_hdmi, .quirk_data = &adl_lt6911_hdmi,
.sof_tplg_filename = "sof-adl-rt5682-ssp1-hdmi-ssp02.tplg", .sof_tplg_filename = "sof-adl-rt5682-ssp1-hdmi-ssp02.tplg",
}, },
{
.comp_ids = &adl_rt5682_rt5682s_hp,
.drv_name = "adl_rt5682_def",
.sof_tplg_filename = "sof-adl-rt5682.tplg",
},
{
.id = "10134242",
.drv_name = "adl_mx98360a_cs4242",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &adl_max98360a_amp,
.sof_tplg_filename = "sof-adl-max98360a-cs42l42.tplg",
},
{ {
.comp_ids = &essx_83x6, .comp_ids = &essx_83x6,
.drv_name = "adl_es83x6_c1_h02", .drv_name = "adl_es83x6_c1_h02",
...@@ -607,13 +510,6 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = { ...@@ -607,13 +510,6 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = {
SND_SOC_ACPI_TPLG_INTEL_SSP_MSB | SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER, SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
}, },
{
.id = "10EC5650",
.drv_name = "adl_rt5682_def",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &adl_rt5650_amp,
.sof_tplg_filename = "sof-adl-rt5650.tplg",
},
{ {
.id = "DLGS7219", .id = "DLGS7219",
.drv_name = "adl_da7219_def", .drv_name = "adl_da7219_def",
...@@ -621,6 +517,37 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = { ...@@ -621,6 +517,37 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = {
.quirk_data = &adl_max98360a_amp, .quirk_data = &adl_max98360a_amp,
.sof_tplg_filename = "sof-adl-max98360a-da7219.tplg", .sof_tplg_filename = "sof-adl-max98360a-da7219.tplg",
}, },
/* place boards for each headphone codec: sof driver will complete the
* tplg name and machine driver will detect the amp type
*/
{
.id = CS42L42_ACPI_HID,
.drv_name = "adl_cs42l42_def",
.sof_tplg_filename = "sof-adl", /* the tplg suffix is added at run time */
.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
},
{
.id = NAU8825_ACPI_HID,
.drv_name = "adl_nau8825_def",
.sof_tplg_filename = "sof-adl", /* the tplg suffix is added at run time */
.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
},
{
.id = RT5650_ACPI_HID,
.drv_name = "adl_rt5682_def",
.sof_tplg_filename = "sof-adl", /* the tplg suffix is added at run time */
.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
},
{
.comp_ids = &adl_rt5682_rt5682s_hp,
.drv_name = "adl_rt5682_def",
.sof_tplg_filename = "sof-adl", /* the tplg suffix is added at run time */
.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
},
/* place amp-only boards in the end of table */ /* place amp-only boards in the end of table */
{ {
.id = "CSC3541", .id = "CSC3541",
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <sound/soc-acpi.h> #include <sound/soc-acpi.h>
#include <sound/soc-acpi-intel-match.h> #include <sound/soc-acpi-intel-match.h>
#include <sound/soc-acpi-intel-ssp-common.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 = { static const struct snd_soc_acpi_codecs mtl_max98357a_amp = {
...@@ -20,14 +21,9 @@ static const struct snd_soc_acpi_codecs mtl_max98360a_amp = { ...@@ -20,14 +21,9 @@ static const struct snd_soc_acpi_codecs mtl_max98360a_amp = {
.codecs = {"MX98360A"} .codecs = {"MX98360A"}
}; };
static const struct snd_soc_acpi_codecs mtl_rt1019p_amp = {
.num_codecs = 1,
.codecs = {"RTL1019"}
};
static const struct snd_soc_acpi_codecs mtl_rt5682_rt5682s_hp = { static const struct snd_soc_acpi_codecs mtl_rt5682_rt5682s_hp = {
.num_codecs = 2, .num_codecs = 2,
.codecs = {"10EC5682", "RTL5682"}, .codecs = {RT5682_ACPI_HID, RT5682S_ACPI_HID},
}; };
static const struct snd_soc_acpi_codecs mtl_essx_83x6 = { static const struct snd_soc_acpi_codecs mtl_essx_83x6 = {
...@@ -40,11 +36,6 @@ static const struct snd_soc_acpi_codecs mtl_lt6911_hdmi = { ...@@ -40,11 +36,6 @@ static const struct snd_soc_acpi_codecs mtl_lt6911_hdmi = {
.codecs = {"INTC10B0"} .codecs = {"INTC10B0"}
}; };
static const struct snd_soc_acpi_codecs mtl_rt5650_amp = {
.num_codecs = 1,
.codecs = {"10EC5650"}
};
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, .comp_ids = &mtl_rt5682_rt5682s_hp,
...@@ -60,13 +51,6 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_machines[] = { ...@@ -60,13 +51,6 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_machines[] = {
.quirk_data = &mtl_max98360a_amp, .quirk_data = &mtl_max98360a_amp,
.sof_tplg_filename = "sof-mtl-max98360a-rt5682.tplg", .sof_tplg_filename = "sof-mtl-max98360a-rt5682.tplg",
}, },
{
.comp_ids = &mtl_rt5682_rt5682s_hp,
.drv_name = "mtl_rt5682_def",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &mtl_rt1019p_amp,
.sof_tplg_filename = "sof-mtl-rt1019-rt5682.tplg",
},
{ {
.comp_ids = &mtl_essx_83x6, .comp_ids = &mtl_essx_83x6,
.drv_name = "mtl_es83x6_c1_h02", .drv_name = "mtl_es83x6_c1_h02",
...@@ -82,12 +66,36 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_machines[] = { ...@@ -82,12 +66,36 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_machines[] = {
SND_SOC_ACPI_TPLG_INTEL_SSP_MSB | SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER, SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
}, },
/* place boards for each headphone codec: sof driver will complete the
* tplg name and machine driver will detect the amp type
*/
{
.id = CS42L42_ACPI_HID,
.drv_name = "mtl_cs42l42_def",
.sof_tplg_filename = "sof-mtl", /* the tplg suffix is added at run time */
.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
},
{
.id = NAU8825_ACPI_HID,
.drv_name = "mtl_nau8825_def",
.sof_tplg_filename = "sof-mtl", /* the tplg suffix is added at run time */
.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
},
{ {
.id = "10EC5650", .id = RT5650_ACPI_HID,
.drv_name = "mtl_rt5682_def", .drv_name = "mtl_rt5682_def",
.machine_quirk = snd_soc_acpi_codec_list, .sof_tplg_filename = "sof-mtl", /* the tplg suffix is added at run time */
.quirk_data = &mtl_rt5650_amp, .tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
.sof_tplg_filename = "sof-mtl-rt5650.tplg", SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
},
{
.comp_ids = &mtl_rt5682_rt5682s_hp,
.drv_name = "mtl_rt5682_def",
.sof_tplg_filename = "sof-mtl", /* the tplg suffix is added at run time */
.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
}, },
/* place amp-only boards in the end of table */ /* place amp-only boards in the end of table */
{ {
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <sound/soc-acpi.h> #include <sound/soc-acpi.h>
#include <sound/soc-acpi-intel-match.h> #include <sound/soc-acpi-intel-match.h>
#include <sound/soc-acpi-intel-ssp-common.h>
static const struct snd_soc_acpi_endpoint single_endpoint = { static const struct snd_soc_acpi_endpoint single_endpoint = {
.num = 0, .num = 0,
...@@ -347,7 +348,7 @@ static const struct snd_soc_acpi_link_adr rplp_crb[] = { ...@@ -347,7 +348,7 @@ static const struct snd_soc_acpi_link_adr rplp_crb[] = {
static const struct snd_soc_acpi_codecs rpl_rt5682_hp = { static const struct snd_soc_acpi_codecs rpl_rt5682_hp = {
.num_codecs = 2, .num_codecs = 2,
.codecs = {"10EC5682", "RTL5682"}, .codecs = {RT5682_ACPI_HID, RT5682S_ACPI_HID},
}; };
static const struct snd_soc_acpi_codecs rpl_essx_83x6 = { static const struct snd_soc_acpi_codecs rpl_essx_83x6 = {
...@@ -365,26 +366,11 @@ static const struct snd_soc_acpi_codecs rpl_max98360a_amp = { ...@@ -365,26 +366,11 @@ static const struct snd_soc_acpi_codecs rpl_max98360a_amp = {
.codecs = {"MX98360A"}, .codecs = {"MX98360A"},
}; };
static const struct snd_soc_acpi_codecs rpl_max98373_amp = {
.num_codecs = 1,
.codecs = {"MX98373"}
};
static const struct snd_soc_acpi_codecs rpl_lt6911_hdmi = { static const struct snd_soc_acpi_codecs rpl_lt6911_hdmi = {
.num_codecs = 1, .num_codecs = 1,
.codecs = {"INTC10B0"} .codecs = {"INTC10B0"}
}; };
static const struct snd_soc_acpi_codecs rpl_nau8318_amp = {
.num_codecs = 1,
.codecs = {"NVTN2012"}
};
static const struct snd_soc_acpi_codecs rpl_rt1019p_amp = {
.num_codecs = 1,
.codecs = {"RTL1019"}
};
struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_machines[] = { struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_machines[] = {
{ {
.comp_ids = &rpl_rt5682_hp, .comp_ids = &rpl_rt5682_hp,
...@@ -393,41 +379,6 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_machines[] = { ...@@ -393,41 +379,6 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_machines[] = {
.quirk_data = &rpl_max98357a_amp, .quirk_data = &rpl_max98357a_amp,
.sof_tplg_filename = "sof-rpl-max98357a-rt5682.tplg", .sof_tplg_filename = "sof-rpl-max98357a-rt5682.tplg",
}, },
{
.comp_ids = &rpl_rt5682_hp,
.drv_name = "rpl_rt5682_def",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &rpl_max98360a_amp,
.sof_tplg_filename = "sof-rpl-max98360a-rt5682.tplg",
},
{
.id = "10508825",
.drv_name = "rpl_nau8825_def",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &rpl_max98373_amp,
.sof_tplg_filename = "sof-rpl-max98373-nau8825.tplg",
},
{
.id = "10508825",
.drv_name = "rpl_nau8825_def",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &rpl_max98360a_amp,
.sof_tplg_filename = "sof-rpl-max98360a-nau8825.tplg",
},
{
.id = "10508825",
.drv_name = "rpl_nau8825_def",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &rpl_nau8318_amp,
.sof_tplg_filename = "sof-rpl-nau8318-nau8825.tplg",
},
{
.comp_ids = &rpl_rt5682_hp,
.drv_name = "rpl_rt5682_def",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &rpl_rt1019p_amp,
.sof_tplg_filename = "sof-rpl-rt1019-rt5682.tplg",
},
{ {
.comp_ids = &rpl_rt5682_hp, .comp_ids = &rpl_rt5682_hp,
.drv_name = "rpl_rt5682_c1_h02", .drv_name = "rpl_rt5682_c1_h02",
...@@ -450,6 +401,38 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_machines[] = { ...@@ -450,6 +401,38 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_machines[] = {
SND_SOC_ACPI_TPLG_INTEL_SSP_MSB | SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER, SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
}, },
/* place boards for each headphone codec: sof driver will complete the
* tplg name and machine driver will detect the amp type
*/
{
.id = CS42L42_ACPI_HID,
.drv_name = "rpl_cs42l42_def",
.sof_tplg_filename = "sof-rpl", /* the tplg suffix is added at run time */
.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
},
{
.id = NAU8825_ACPI_HID,
.drv_name = "rpl_nau8825_def",
.sof_tplg_filename = "sof-rpl", /* the tplg suffix is added at run time */
.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
},
{
.id = RT5650_ACPI_HID,
.drv_name = "rpl_rt5682_def",
.sof_tplg_filename = "sof-rpl", /* the tplg suffix is added at run time */
.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
},
{
.comp_ids = &rpl_rt5682_hp,
.drv_name = "rpl_rt5682_def",
.sof_tplg_filename = "sof-rpl", /* the tplg suffix is added at run time */
.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
},
/* place amp-only boards in the end of table */
{ {
.id = "INTC10B0", .id = "INTC10B0",
.drv_name = "rpl_lt6911_hdmi_ssp", .drv_name = "rpl_lt6911_hdmi_ssp",
...@@ -462,11 +445,6 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_machines[] = { ...@@ -462,11 +445,6 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_machines[] = {
.quirk_data = &rpl_max98360a_amp, .quirk_data = &rpl_max98360a_amp,
.sof_tplg_filename = "sof-rpl-max98360a-da7219.tplg", .sof_tplg_filename = "sof-rpl-max98360a-da7219.tplg",
}, },
{
.id = "10EC5650",
.drv_name = "rpl_rt5682_def",
.sof_tplg_filename = "sof-rpl-rt5650.tplg",
},
{}, {},
}; };
EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_rpl_machines); EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_rpl_machines);
......
...@@ -4,67 +4,70 @@ ...@@ -4,67 +4,70 @@
#include <linux/device.h> #include <linux/device.h>
#include <sound/soc-acpi.h> #include <sound/soc-acpi.h>
#include "sof_ssp_common.h" #include <sound/soc-acpi-intel-ssp-common.h>
/* /*
* Codec probe function * Codec probe function
*/ */
#define CODEC_MAP_ENTRY(n, h, t) \ #define CODEC_MAP_ENTRY(n, s, h, t) \
{ \ { \
.name = n, \ .name = n, \
.tplg_suffix = s, \
.acpi_hid = h, \ .acpi_hid = h, \
.codec_type = t, \ .codec_type = t, \
} }
struct codec_map { struct codec_map {
const char *name; const char *name;
const char *tplg_suffix;
const char *acpi_hid; const char *acpi_hid;
enum sof_ssp_codec codec_type; enum snd_soc_acpi_intel_codec codec_type;
}; };
static const struct codec_map codecs[] = { static const struct codec_map codecs[] = {
/* Cirrus Logic */ /* Cirrus Logic */
CODEC_MAP_ENTRY("CS42L42", CS42L42_ACPI_HID, CODEC_CS42L42), CODEC_MAP_ENTRY("CS42L42", "cs42l42", CS42L42_ACPI_HID, CODEC_CS42L42),
/* Dialog */ /* Dialog */
CODEC_MAP_ENTRY("DA7219", DA7219_ACPI_HID, CODEC_DA7219), CODEC_MAP_ENTRY("DA7219", "da7219", DA7219_ACPI_HID, CODEC_DA7219),
/* Everest */ /* Everest */
CODEC_MAP_ENTRY("ES8316", ES8316_ACPI_HID, CODEC_ES8316), CODEC_MAP_ENTRY("ES8316", "es8336", ES8316_ACPI_HID, CODEC_ES8316),
CODEC_MAP_ENTRY("ES8326", ES8326_ACPI_HID, CODEC_ES8326), CODEC_MAP_ENTRY("ES8326", "es8336", ES8326_ACPI_HID, CODEC_ES8326),
CODEC_MAP_ENTRY("ES8336", ES8336_ACPI_HID, CODEC_ES8336), CODEC_MAP_ENTRY("ES8336", "es8336", ES8336_ACPI_HID, CODEC_ES8336),
/* Nuvoton */ /* Nuvoton */
CODEC_MAP_ENTRY("NAU8825", NAU8825_ACPI_HID, CODEC_NAU8825), CODEC_MAP_ENTRY("NAU8825", "nau8825", NAU8825_ACPI_HID, CODEC_NAU8825),
/* Realtek */ /* Realtek */
CODEC_MAP_ENTRY("RT5650", RT5650_ACPI_HID, CODEC_RT5650), CODEC_MAP_ENTRY("RT5650", "rt5650", RT5650_ACPI_HID, CODEC_RT5650),
CODEC_MAP_ENTRY("RT5682", RT5682_ACPI_HID, CODEC_RT5682), CODEC_MAP_ENTRY("RT5682", "rt5682", RT5682_ACPI_HID, CODEC_RT5682),
CODEC_MAP_ENTRY("RT5682S", RT5682S_ACPI_HID, CODEC_RT5682S), CODEC_MAP_ENTRY("RT5682S", "rt5682", RT5682S_ACPI_HID, CODEC_RT5682S),
}; };
static const struct codec_map amps[] = { static const struct codec_map amps[] = {
/* Cirrus Logic */ /* Cirrus Logic */
CODEC_MAP_ENTRY("CS35L41", CS35L41_ACPI_HID, CODEC_CS35L41), CODEC_MAP_ENTRY("CS35L41", "cs35l41", CS35L41_ACPI_HID, CODEC_CS35L41),
/* Maxim */ /* Maxim */
CODEC_MAP_ENTRY("MAX98357A", MAX_98357A_ACPI_HID, CODEC_MAX98357A), CODEC_MAP_ENTRY("MAX98357A", "max98357a", MAX_98357A_ACPI_HID, CODEC_MAX98357A),
CODEC_MAP_ENTRY("MAX98360A", MAX_98360A_ACPI_HID, CODEC_MAX98360A), CODEC_MAP_ENTRY("MAX98360A", "max98360a", MAX_98360A_ACPI_HID, CODEC_MAX98360A),
CODEC_MAP_ENTRY("MAX98373", MAX_98373_ACPI_HID, CODEC_MAX98373), CODEC_MAP_ENTRY("MAX98373", "max98373", MAX_98373_ACPI_HID, CODEC_MAX98373),
CODEC_MAP_ENTRY("MAX98390", MAX_98390_ACPI_HID, CODEC_MAX98390), CODEC_MAP_ENTRY("MAX98390", "max98390", MAX_98390_ACPI_HID, CODEC_MAX98390),
/* Nuvoton */ /* Nuvoton */
CODEC_MAP_ENTRY("NAU8318", NAU8318_ACPI_HID, CODEC_NAU8318), CODEC_MAP_ENTRY("NAU8318", "nau8318", NAU8318_ACPI_HID, CODEC_NAU8318),
/* Realtek */ /* Realtek */
CODEC_MAP_ENTRY("RT1011", RT1011_ACPI_HID, CODEC_RT1011), CODEC_MAP_ENTRY("RT1011", "rt1011", RT1011_ACPI_HID, CODEC_RT1011),
CODEC_MAP_ENTRY("RT1015", RT1015_ACPI_HID, CODEC_RT1015), CODEC_MAP_ENTRY("RT1015", "rt1015", RT1015_ACPI_HID, CODEC_RT1015),
CODEC_MAP_ENTRY("RT1015P", RT1015P_ACPI_HID, CODEC_RT1015P), CODEC_MAP_ENTRY("RT1015P", "rt1015", RT1015P_ACPI_HID, CODEC_RT1015P),
CODEC_MAP_ENTRY("RT1019P", RT1019P_ACPI_HID, CODEC_RT1019P), CODEC_MAP_ENTRY("RT1019P", "rt1019", RT1019P_ACPI_HID, CODEC_RT1019P),
CODEC_MAP_ENTRY("RT1308", RT1308_ACPI_HID, CODEC_RT1308), CODEC_MAP_ENTRY("RT1308", "rt1308", RT1308_ACPI_HID, CODEC_RT1308),
}; };
enum sof_ssp_codec sof_ssp_detect_codec_type(struct device *dev) enum snd_soc_acpi_intel_codec
snd_soc_acpi_intel_detect_codec_type(struct device *dev)
{ {
int i; int i;
...@@ -78,9 +81,10 @@ enum sof_ssp_codec sof_ssp_detect_codec_type(struct device *dev) ...@@ -78,9 +81,10 @@ enum sof_ssp_codec sof_ssp_detect_codec_type(struct device *dev)
return CODEC_NONE; return CODEC_NONE;
} }
EXPORT_SYMBOL_NS(sof_ssp_detect_codec_type, SND_SOC_INTEL_SOF_SSP_COMMON); EXPORT_SYMBOL_NS(snd_soc_acpi_intel_detect_codec_type, SND_SOC_ACPI_INTEL_MATCH);
enum sof_ssp_codec sof_ssp_detect_amp_type(struct device *dev) enum snd_soc_acpi_intel_codec
snd_soc_acpi_intel_detect_amp_type(struct device *dev)
{ {
int i; int i;
...@@ -94,9 +98,10 @@ enum sof_ssp_codec sof_ssp_detect_amp_type(struct device *dev) ...@@ -94,9 +98,10 @@ enum sof_ssp_codec sof_ssp_detect_amp_type(struct device *dev)
return CODEC_NONE; return CODEC_NONE;
} }
EXPORT_SYMBOL_NS(sof_ssp_detect_amp_type, SND_SOC_INTEL_SOF_SSP_COMMON); EXPORT_SYMBOL_NS(snd_soc_acpi_intel_detect_amp_type, SND_SOC_ACPI_INTEL_MATCH);
const char *sof_ssp_get_codec_name(enum sof_ssp_codec codec_type) const char *
snd_soc_acpi_intel_get_codec_name(enum snd_soc_acpi_intel_codec codec_type)
{ {
int i; int i;
...@@ -115,7 +120,39 @@ const char *sof_ssp_get_codec_name(enum sof_ssp_codec codec_type) ...@@ -115,7 +120,39 @@ const char *sof_ssp_get_codec_name(enum sof_ssp_codec codec_type)
return NULL; return NULL;
} }
EXPORT_SYMBOL_NS(sof_ssp_get_codec_name, SND_SOC_INTEL_SOF_SSP_COMMON); EXPORT_SYMBOL_NS(snd_soc_acpi_intel_get_codec_name, SND_SOC_ACPI_INTEL_MATCH);
const char *
snd_soc_acpi_intel_get_codec_tplg_suffix(enum snd_soc_acpi_intel_codec codec_type)
{
int i;
for (i = 0; i < ARRAY_SIZE(codecs); i++) {
if (codecs[i].codec_type != codec_type)
continue;
return codecs[i].tplg_suffix;
}
return NULL;
}
EXPORT_SYMBOL_NS(snd_soc_acpi_intel_get_codec_tplg_suffix, SND_SOC_ACPI_INTEL_MATCH);
const char *
snd_soc_acpi_intel_get_amp_tplg_suffix(enum snd_soc_acpi_intel_codec codec_type)
{
int i;
for (i = 0; i < ARRAY_SIZE(amps); i++) {
if (amps[i].codec_type != codec_type)
continue;
return amps[i].tplg_suffix;
}
return NULL;
}
EXPORT_SYMBOL_NS(snd_soc_acpi_intel_get_amp_tplg_suffix, SND_SOC_ACPI_INTEL_MATCH);
MODULE_DESCRIPTION("ASoC Intel SOF Common Machine Driver Helpers"); MODULE_DESCRIPTION("ASoC Intel SOF Common Machine Driver Helpers");
MODULE_AUTHOR("Brent Lu <brent.lu@intel.com>"); MODULE_AUTHOR("Brent Lu <brent.lu@intel.com>");
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <sound/soc-acpi.h> #include <sound/soc-acpi.h>
#include <sound/soc-acpi-intel-match.h> #include <sound/soc-acpi-intel-match.h>
#include <sound/soc-acpi-intel-ssp-common.h>
#include "soc-acpi-intel-sdw-mockup-match.h" #include "soc-acpi-intel-sdw-mockup-match.h"
static const struct snd_soc_acpi_codecs essx_83x6 = { static const struct snd_soc_acpi_codecs essx_83x6 = {
...@@ -15,11 +16,6 @@ static const struct snd_soc_acpi_codecs essx_83x6 = { ...@@ -15,11 +16,6 @@ static const struct snd_soc_acpi_codecs essx_83x6 = {
.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"}, .codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
}; };
static const struct snd_soc_acpi_codecs tgl_codecs = {
.num_codecs = 1,
.codecs = {"MX98357A"}
};
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,
...@@ -499,19 +495,9 @@ static const struct snd_soc_acpi_link_adr tgl_cs42l43_cs35l56[] = { ...@@ -499,19 +495,9 @@ static const struct snd_soc_acpi_link_adr tgl_cs42l43_cs35l56[] = {
{} {}
}; };
static const struct snd_soc_acpi_codecs tgl_max98373_amp = {
.num_codecs = 1,
.codecs = {"MX98373"}
};
static const struct snd_soc_acpi_codecs tgl_rt1011_amp = {
.num_codecs = 1,
.codecs = {"10EC1011"}
};
static const struct snd_soc_acpi_codecs tgl_rt5682_rt5682s_hp = { static const struct snd_soc_acpi_codecs tgl_rt5682_rt5682s_hp = {
.num_codecs = 2, .num_codecs = 2,
.codecs = {"10EC5682", "RTL5682"}, .codecs = {RT5682_ACPI_HID, RT5682S_ACPI_HID},
}; };
static const struct snd_soc_acpi_codecs tgl_lt6911_hdmi = { static const struct snd_soc_acpi_codecs tgl_lt6911_hdmi = {
...@@ -520,27 +506,6 @@ static const struct snd_soc_acpi_codecs tgl_lt6911_hdmi = { ...@@ -520,27 +506,6 @@ static const struct snd_soc_acpi_codecs tgl_lt6911_hdmi = {
}; };
struct snd_soc_acpi_mach snd_soc_acpi_intel_tgl_machines[] = { struct snd_soc_acpi_mach snd_soc_acpi_intel_tgl_machines[] = {
{
.comp_ids = &tgl_rt5682_rt5682s_hp,
.drv_name = "tgl_rt5682_def",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &tgl_codecs,
.sof_tplg_filename = "sof-tgl-max98357a-rt5682.tplg",
},
{
.comp_ids = &tgl_rt5682_rt5682s_hp,
.drv_name = "tgl_rt5682_def",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &tgl_max98373_amp,
.sof_tplg_filename = "sof-tgl-max98373-rt5682.tplg",
},
{
.comp_ids = &tgl_rt5682_rt5682s_hp,
.drv_name = "tgl_rt5682_def",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &tgl_rt1011_amp,
.sof_tplg_filename = "sof-tgl-rt1011-rt5682.tplg",
},
{ {
.comp_ids = &essx_83x6, .comp_ids = &essx_83x6,
.drv_name = "sof-essx8336", .drv_name = "sof-essx8336",
...@@ -549,6 +514,17 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_tgl_machines[] = { ...@@ -549,6 +514,17 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_tgl_machines[] = {
SND_SOC_ACPI_TPLG_INTEL_SSP_MSB | SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER, SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
}, },
/* place boards for each headphone codec: sof driver will complete the
* tplg name and machine driver will detect the amp type
*/
{
.comp_ids = &tgl_rt5682_rt5682s_hp,
.drv_name = "tgl_rt5682_def",
.sof_tplg_filename = "sof-tgl", /* the tplg suffix is added at run time */
.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
},
/* place amp-only boards in the end of table */
{ {
.id = "10EC1308", .id = "10EC1308",
.drv_name = "tgl_rt1308_hdmi_ssp", .drv_name = "tgl_rt1308_hdmi_ssp",
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <linux/soundwire/sdw_intel.h> #include <linux/soundwire/sdw_intel.h>
#include <sound/intel-dsp-config.h> #include <sound/intel-dsp-config.h>
#include <sound/intel-nhlt.h> #include <sound/intel-nhlt.h>
#include <sound/soc-acpi-intel-ssp-common.h>
#include <sound/sof.h> #include <sound/sof.h>
#include <sound/sof/xtensa.h> #include <sound/sof/xtensa.h>
#include <sound/hda-mlink.h> #include <sound/hda-mlink.h>
...@@ -1676,13 +1677,36 @@ void hda_set_mach_params(struct snd_soc_acpi_mach *mach, ...@@ -1676,13 +1677,36 @@ void hda_set_mach_params(struct snd_soc_acpi_mach *mach,
mach_params->dai_drivers = desc->ops->drv; mach_params->dai_drivers = desc->ops->drv;
} }
static int check_tplg_quirk_mask(struct snd_soc_acpi_mach *mach)
{
u32 dmic_ssp_quirk;
u32 codec_amp_name_quirk;
/*
* In current implementation dmic and ssp quirks are designed for es8336
* machine driver and could not be mixed with codec name and amp name
* quirks.
*/
dmic_ssp_quirk = mach->tplg_quirk_mask &
(SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER | SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER);
codec_amp_name_quirk = mach->tplg_quirk_mask &
(SND_SOC_ACPI_TPLG_INTEL_AMP_NAME | SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME);
if (dmic_ssp_quirk && codec_amp_name_quirk)
return -EINVAL;
return 0;
}
struct snd_soc_acpi_mach *hda_machine_select(struct snd_sof_dev *sdev) struct snd_soc_acpi_mach *hda_machine_select(struct snd_sof_dev *sdev)
{ {
u32 interface_mask = hda_get_interface_mask(sdev); u32 interface_mask = hda_get_interface_mask(sdev);
struct snd_sof_pdata *sof_pdata = sdev->pdata; struct snd_sof_pdata *sof_pdata = sdev->pdata;
const struct sof_dev_desc *desc = sof_pdata->desc; const struct sof_dev_desc *desc = sof_pdata->desc;
struct snd_soc_acpi_mach *mach = NULL; struct snd_soc_acpi_mach *mach = NULL;
enum snd_soc_acpi_intel_codec codec_type;
const char *tplg_filename; const char *tplg_filename;
const char *tplg_suffix;
/* Try I2S or DMIC if it is supported */ /* Try I2S or DMIC if it is supported */
if (interface_mask & (BIT(SOF_DAI_INTEL_SSP) | BIT(SOF_DAI_INTEL_DMIC))) if (interface_mask & (BIT(SOF_DAI_INTEL_SSP) | BIT(SOF_DAI_INTEL_DMIC)))
...@@ -1701,6 +1725,17 @@ struct snd_soc_acpi_mach *hda_machine_select(struct snd_sof_dev *sdev) ...@@ -1701,6 +1725,17 @@ struct snd_soc_acpi_mach *hda_machine_select(struct snd_sof_dev *sdev)
tplg_fixup = true; tplg_fixup = true;
} }
/*
* Checking quirk mask integrity; some quirk flags could not be
* set concurrently.
*/
if (tplg_fixup &&
check_tplg_quirk_mask(mach)) {
dev_err(sdev->dev, "Invalid tplg quirk mask 0x%x\n",
mach->tplg_quirk_mask);
return NULL;
}
/* report to machine driver if any DMICs are found */ /* report to machine driver if any DMICs are found */
mach->mach_params.dmic_num = check_dmic_num(sdev); mach->mach_params.dmic_num = check_dmic_num(sdev);
...@@ -1775,6 +1810,52 @@ struct snd_soc_acpi_mach *hda_machine_select(struct snd_sof_dev *sdev) ...@@ -1775,6 +1810,52 @@ struct snd_soc_acpi_mach *hda_machine_select(struct snd_sof_dev *sdev)
} }
} }
codec_type = snd_soc_acpi_intel_detect_amp_type(sdev->dev);
if (tplg_fixup &&
mach->tplg_quirk_mask & SND_SOC_ACPI_TPLG_INTEL_AMP_NAME &&
codec_type != CODEC_NONE) {
tplg_suffix = snd_soc_acpi_intel_get_amp_tplg_suffix(codec_type);
if (!tplg_suffix) {
dev_err(sdev->dev, "no tplg suffix found, amp %d\n",
codec_type);
return NULL;
}
tplg_filename = devm_kasprintf(sdev->dev, GFP_KERNEL,
"%s-%s",
sof_pdata->tplg_filename,
tplg_suffix);
if (!tplg_filename)
return NULL;
sof_pdata->tplg_filename = tplg_filename;
add_extension = true;
}
codec_type = snd_soc_acpi_intel_detect_codec_type(sdev->dev);
if (tplg_fixup &&
mach->tplg_quirk_mask & SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME &&
codec_type != CODEC_NONE) {
tplg_suffix = snd_soc_acpi_intel_get_codec_tplg_suffix(codec_type);
if (!tplg_suffix) {
dev_err(sdev->dev, "no tplg suffix found, codec %d\n",
codec_type);
return NULL;
}
tplg_filename = devm_kasprintf(sdev->dev, GFP_KERNEL,
"%s-%s",
sof_pdata->tplg_filename,
tplg_suffix);
if (!tplg_filename)
return NULL;
sof_pdata->tplg_filename = tplg_filename;
add_extension = true;
}
if (tplg_fixup && add_extension) { if (tplg_fixup && add_extension) {
tplg_filename = devm_kasprintf(sdev->dev, GFP_KERNEL, tplg_filename = devm_kasprintf(sdev->dev, GFP_KERNEL,
"%s%s", "%s%s",
...@@ -1842,3 +1923,4 @@ MODULE_IMPORT_NS(SND_INTEL_SOUNDWIRE_ACPI); ...@@ -1842,3 +1923,4 @@ MODULE_IMPORT_NS(SND_INTEL_SOUNDWIRE_ACPI);
MODULE_IMPORT_NS(SOUNDWIRE_INTEL_INIT); MODULE_IMPORT_NS(SOUNDWIRE_INTEL_INIT);
MODULE_IMPORT_NS(SOUNDWIRE_INTEL); MODULE_IMPORT_NS(SOUNDWIRE_INTEL);
MODULE_IMPORT_NS(SND_SOC_SOF_HDA_MLINK); MODULE_IMPORT_NS(SND_SOC_SOF_HDA_MLINK);
MODULE_IMPORT_NS(SND_SOC_ACPI_INTEL_MATCH);
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