From: Brent Lu brent.lu@intel.com
Use ssp-common module to detect codec and amplifier type in driver probe function and remove all quirks about amplifier type.
Signed-off-by: Brent Lu brent.lu@intel.com Reviewed-by: Pierre-Louis Bossart pierre-louis.bossart@linux.intel.com Signed-off-by: Bard Liao yung-chuan.liao@linux.intel.com --- sound/soc/intel/boards/Kconfig | 1 + sound/soc/intel/boards/sof_da7219.c | 45 ++++++++++++------- .../intel/common/soc-acpi-intel-jsl-match.c | 12 ++--- 3 files changed, 36 insertions(+), 22 deletions(-)
diff --git a/sound/soc/intel/boards/Kconfig b/sound/soc/intel/boards/Kconfig index 6c97e22f248c..fa3252b6f1bf 100644 --- a/sound/soc/intel/boards/Kconfig +++ b/sound/soc/intel/boards/Kconfig @@ -621,6 +621,7 @@ config SND_SOC_INTEL_SOF_DA7219_MACH select SND_SOC_MAX98373_I2C select SND_SOC_DMIC select SND_SOC_INTEL_SOF_MAXIM_COMMON + select SND_SOC_INTEL_SOF_SSP_COMMON help This adds support for ASoC machine driver for SOF platforms with Dialog DA7219 I2S audio codec. diff --git a/sound/soc/intel/boards/sof_da7219.c b/sound/soc/intel/boards/sof_da7219.c index 9fe9fe5e795d..6a71d5871938 100644 --- a/sound/soc/intel/boards/sof_da7219.c +++ b/sound/soc/intel/boards/sof_da7219.c @@ -17,12 +17,7 @@ #include "../../codecs/da7219.h" #include "hda_dsp_common.h" #include "sof_maxim_common.h" - -/* Speaker amp type - * TBD: use ssp-common module for type detection - */ -#define SOF_MAX98360A_SPEAKER_AMP_PRESENT BIT(0) -#define SOF_MAX98373_SPEAKER_AMP_PRESENT BIT(1) +#include "sof_ssp_common.h"
/* Board Quirks */ #define SOF_DA7219_JSL_BOARD BIT(2) @@ -39,6 +34,8 @@ struct card_private { struct snd_soc_jack headset_jack; struct list_head hdmi_pcm_list; struct snd_soc_jack hdmi[3]; + enum sof_ssp_codec codec_type; + enum sof_ssp_codec amp_type;
unsigned int pll_bypass:1; }; @@ -479,15 +476,24 @@ static int audio_probe(struct platform_device *pdev) if (pdev->id_entry && pdev->id_entry->driver_data) board_quirk = (unsigned long)pdev->id_entry->driver_data;
+ ctx->codec_type = sof_ssp_detect_codec_type(&pdev->dev); + ctx->amp_type = sof_ssp_detect_amp_type(&pdev->dev); + if (board_quirk & SOF_DA7219_JSL_BOARD) { /* backward-compatible with existing devices */ - if (board_quirk & SOF_MAX98360A_SPEAKER_AMP_PRESENT) + switch (ctx->amp_type) { + case CODEC_MAX98360A: card_da7219.name = devm_kstrdup(&pdev->dev, "da7219max98360a", GFP_KERNEL); - else if (board_quirk & SOF_MAX98373_SPEAKER_AMP_PRESENT) + break; + case CODEC_MAX98373: card_da7219.name = devm_kstrdup(&pdev->dev, "da7219max", GFP_KERNEL); + break; + default: + break; + }
dai_links = jsl_dais; amp_idx = 0; @@ -503,9 +509,11 @@ static int audio_probe(struct platform_device *pdev) dev_dbg(&pdev->dev, "board_quirk = %lx\n", board_quirk);
/* speaker amp */ - if (board_quirk & SOF_MAX98360A_SPEAKER_AMP_PRESENT) { + switch (ctx->amp_type) { + case CODEC_MAX98360A: max_98360a_dai_link(&dai_links[amp_idx]); - } else if (board_quirk & SOF_MAX98373_SPEAKER_AMP_PRESENT) { + break; + case CODEC_MAX98373: dai_links[amp_idx].codecs = max_98373_components; dai_links[amp_idx].num_codecs = ARRAY_SIZE(max_98373_components); dai_links[amp_idx].init = max_98373_spk_codec_init; @@ -518,6 +526,10 @@ static int audio_probe(struct platform_device *pdev) }
max_98373_set_codec_conf(&card_da7219); + break; + default: + dev_err(&pdev->dev, "invalid amp type %d\n", ctx->amp_type); + return -EINVAL; }
card_da7219.dai_link = dai_links; @@ -538,18 +550,16 @@ static int audio_probe(struct platform_device *pdev)
static const struct platform_device_id board_ids[] = { { - .name = "sof_da7219_mx98373", - .driver_data = (kernel_ulong_t)(SOF_MAX98373_SPEAKER_AMP_PRESENT | - SOF_DA7219_JSL_BOARD), + .name = "jsl_mx98373_da7219", + .driver_data = (kernel_ulong_t)(SOF_DA7219_JSL_BOARD), }, { - .name = "sof_da7219_mx98360a", - .driver_data = (kernel_ulong_t)(SOF_MAX98360A_SPEAKER_AMP_PRESENT | - SOF_DA7219_JSL_BOARD), + .name = "jsl_mx98360_da7219", + .driver_data = (kernel_ulong_t)(SOF_DA7219_JSL_BOARD), }, { .name = "adl_mx98360_da7219", - .driver_data = (kernel_ulong_t)(SOF_MAX98360A_SPEAKER_AMP_PRESENT), + /* no quirk needed for this board */ }, { } }; @@ -572,3 +582,4 @@ MODULE_AUTHOR("Brent Lu brent.lu@intel.com"); MODULE_LICENSE("GPL v2"); MODULE_IMPORT_NS(SND_SOC_INTEL_HDA_DSP_COMMON); MODULE_IMPORT_NS(SND_SOC_INTEL_SOF_MAXIM_COMMON); +MODULE_IMPORT_NS(SND_SOC_INTEL_SOF_SSP_COMMON); diff --git a/sound/soc/intel/common/soc-acpi-intel-jsl-match.c b/sound/soc/intel/common/soc-acpi-intel-jsl-match.c index f56bd7d656e9..342bbbb48ca7 100644 --- a/sound/soc/intel/common/soc-acpi-intel-jsl-match.c +++ b/sound/soc/intel/common/soc-acpi-intel-jsl-match.c @@ -14,7 +14,7 @@ static const struct snd_soc_acpi_codecs essx_83x6 = { .codecs = { "ESSX8316", "ESSX8326", "ESSX8336"}, };
-static const struct snd_soc_acpi_codecs jsl_7219_98373_codecs = { +static const struct snd_soc_acpi_codecs mx98373_spk = { .num_codecs = 1, .codecs = {"MX98373"} }; @@ -52,14 +52,16 @@ static const struct snd_soc_acpi_codecs rt5682_rt5682s_hp = { struct snd_soc_acpi_mach snd_soc_acpi_intel_jsl_machines[] = { { .id = "DLGS7219", - .drv_name = "sof_da7219_mx98373", + .drv_name = "jsl_mx98373_da7219", + .machine_quirk = snd_soc_acpi_codec_list, + .quirk_data = &mx98373_spk, .sof_tplg_filename = "sof-jsl-da7219.tplg", - .machine_quirk = snd_soc_acpi_codec_list, - .quirk_data = &jsl_7219_98373_codecs, }, { .id = "DLGS7219", - .drv_name = "sof_da7219_mx98360a", + .drv_name = "jsl_mx98360_da7219", + .machine_quirk = snd_soc_acpi_codec_list, + .quirk_data = &mx98360a_spk, .sof_tplg_filename = "sof-jsl-da7219-mx98360a.tplg", }, {