Commit 5f017134 authored by Brent Lu's avatar Brent Lu Committed by Mark Brown

ASoC: Intel: sof_da7219: use ssp-common module to detect codec

Use ssp-common module to detect codec and amplifier type in driver
probe function and remove all quirks about amplifier type.
Signed-off-by: default avatarBrent Lu <brent.lu@intel.com>
Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Link: https://lore.kernel.org/r/20230915124852.1696857-20-yung-chuan.liao@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 6bd912d7
...@@ -621,6 +621,7 @@ config SND_SOC_INTEL_SOF_DA7219_MACH ...@@ -621,6 +621,7 @@ config SND_SOC_INTEL_SOF_DA7219_MACH
select SND_SOC_MAX98373_I2C select SND_SOC_MAX98373_I2C
select SND_SOC_DMIC select SND_SOC_DMIC
select SND_SOC_INTEL_SOF_MAXIM_COMMON select SND_SOC_INTEL_SOF_MAXIM_COMMON
select SND_SOC_INTEL_SOF_SSP_COMMON
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.
......
...@@ -17,12 +17,7 @@ ...@@ -17,12 +17,7 @@
#include "../../codecs/da7219.h" #include "../../codecs/da7219.h"
#include "hda_dsp_common.h" #include "hda_dsp_common.h"
#include "sof_maxim_common.h" #include "sof_maxim_common.h"
#include "sof_ssp_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)
/* Board Quirks */ /* Board Quirks */
#define SOF_DA7219_JSL_BOARD BIT(2) #define SOF_DA7219_JSL_BOARD BIT(2)
...@@ -39,6 +34,8 @@ struct card_private { ...@@ -39,6 +34,8 @@ struct card_private {
struct snd_soc_jack headset_jack; struct snd_soc_jack headset_jack;
struct list_head hdmi_pcm_list; struct list_head hdmi_pcm_list;
struct snd_soc_jack hdmi[3]; struct snd_soc_jack hdmi[3];
enum sof_ssp_codec codec_type;
enum sof_ssp_codec amp_type;
unsigned int pll_bypass:1; unsigned int pll_bypass:1;
}; };
...@@ -479,15 +476,24 @@ static int audio_probe(struct platform_device *pdev) ...@@ -479,15 +476,24 @@ static int audio_probe(struct platform_device *pdev)
if (pdev->id_entry && pdev->id_entry->driver_data) if (pdev->id_entry && pdev->id_entry->driver_data)
board_quirk = (unsigned long)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) { if (board_quirk & SOF_DA7219_JSL_BOARD) {
/* backward-compatible with existing devices */ /* 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, card_da7219.name = devm_kstrdup(&pdev->dev,
"da7219max98360a", "da7219max98360a",
GFP_KERNEL); GFP_KERNEL);
else if (board_quirk & SOF_MAX98373_SPEAKER_AMP_PRESENT) break;
case CODEC_MAX98373:
card_da7219.name = devm_kstrdup(&pdev->dev, "da7219max", card_da7219.name = devm_kstrdup(&pdev->dev, "da7219max",
GFP_KERNEL); GFP_KERNEL);
break;
default:
break;
}
dai_links = jsl_dais; dai_links = jsl_dais;
amp_idx = 0; amp_idx = 0;
...@@ -503,9 +509,11 @@ static int audio_probe(struct platform_device *pdev) ...@@ -503,9 +509,11 @@ static int audio_probe(struct platform_device *pdev)
dev_dbg(&pdev->dev, "board_quirk = %lx\n", board_quirk); dev_dbg(&pdev->dev, "board_quirk = %lx\n", board_quirk);
/* speaker amp */ /* 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]); 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].codecs = max_98373_components;
dai_links[amp_idx].num_codecs = ARRAY_SIZE(max_98373_components); dai_links[amp_idx].num_codecs = ARRAY_SIZE(max_98373_components);
dai_links[amp_idx].init = max_98373_spk_codec_init; dai_links[amp_idx].init = max_98373_spk_codec_init;
...@@ -518,6 +526,10 @@ static int audio_probe(struct platform_device *pdev) ...@@ -518,6 +526,10 @@ static int audio_probe(struct platform_device *pdev)
} }
max_98373_set_codec_conf(&card_da7219); 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; card_da7219.dai_link = dai_links;
...@@ -538,18 +550,16 @@ static int audio_probe(struct platform_device *pdev) ...@@ -538,18 +550,16 @@ static int audio_probe(struct platform_device *pdev)
static const struct platform_device_id board_ids[] = { static const struct platform_device_id board_ids[] = {
{ {
.name = "sof_da7219_mx98373", .name = "jsl_mx98373_da7219",
.driver_data = (kernel_ulong_t)(SOF_MAX98373_SPEAKER_AMP_PRESENT | .driver_data = (kernel_ulong_t)(SOF_DA7219_JSL_BOARD),
SOF_DA7219_JSL_BOARD),
}, },
{ {
.name = "sof_da7219_mx98360a", .name = "jsl_mx98360_da7219",
.driver_data = (kernel_ulong_t)(SOF_MAX98360A_SPEAKER_AMP_PRESENT | .driver_data = (kernel_ulong_t)(SOF_DA7219_JSL_BOARD),
SOF_DA7219_JSL_BOARD),
}, },
{ {
.name = "adl_mx98360_da7219", .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>"); ...@@ -572,3 +582,4 @@ MODULE_AUTHOR("Brent Lu <brent.lu@intel.com>");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
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_MAXIM_COMMON); MODULE_IMPORT_NS(SND_SOC_INTEL_SOF_MAXIM_COMMON);
MODULE_IMPORT_NS(SND_SOC_INTEL_SOF_SSP_COMMON);
...@@ -14,7 +14,7 @@ static const struct snd_soc_acpi_codecs essx_83x6 = { ...@@ -14,7 +14,7 @@ static const struct snd_soc_acpi_codecs essx_83x6 = {
.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"}, .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, .num_codecs = 1,
.codecs = {"MX98373"} .codecs = {"MX98373"}
}; };
...@@ -52,14 +52,16 @@ static const struct snd_soc_acpi_codecs rt5682_rt5682s_hp = { ...@@ -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[] = { struct snd_soc_acpi_mach snd_soc_acpi_intel_jsl_machines[] = {
{ {
.id = "DLGS7219", .id = "DLGS7219",
.drv_name = "sof_da7219_mx98373", .drv_name = "jsl_mx98373_da7219",
.sof_tplg_filename = "sof-jsl-da7219.tplg",
.machine_quirk = snd_soc_acpi_codec_list, .machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &jsl_7219_98373_codecs, .quirk_data = &mx98373_spk,
.sof_tplg_filename = "sof-jsl-da7219.tplg",
}, },
{ {
.id = "DLGS7219", .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", .sof_tplg_filename = "sof-jsl-da7219-mx98360a.tplg",
}, },
{ {
......
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