From e89c2a70a9db09803d2343ab1687090a8daa7d47 Mon Sep 17 00:00:00 2001 From: David Lin Date: Mon, 17 Nov 2025 20:51:51 +0800 Subject: [PATCH 1/2] ASoC: Intel: ti-common: support tas2563 amplifier Implement tas2563 support code in this common module so it could be shared between multiple SOF machine drivers. Signed-off-by: David Lin --- include/sound/soc-acpi-intel-ssp-common.h | 4 + sound/soc/intel/boards/Kconfig | 3 + sound/soc/intel/boards/Makefile | 3 + sound/soc/intel/boards/sof_ti_common.c | 76 +++++++++++++++++++ sound/soc/intel/boards/sof_ti_common.h | 24 ++++++ .../intel/common/soc-acpi-intel-ssp-common.c | 3 + 6 files changed, 113 insertions(+) create mode 100644 sound/soc/intel/boards/sof_ti_common.c create mode 100644 sound/soc/intel/boards/sof_ti_common.h diff --git a/include/sound/soc-acpi-intel-ssp-common.h b/include/sound/soc-acpi-intel-ssp-common.h index b4597c8dac782a..fdb2fce421158f 100644 --- a/include/sound/soc-acpi-intel-ssp-common.h +++ b/include/sound/soc-acpi-intel-ssp-common.h @@ -37,6 +37,9 @@ #define RT5682_ACPI_HID "10EC5682" #define RT5682S_ACPI_HID "RTL5682" +/* Texas Instruments */ +#define TAS2563_ACPI_HID "TXNW2563" + enum snd_soc_acpi_intel_codec { CODEC_NONE, @@ -63,6 +66,7 @@ enum snd_soc_acpi_intel_codec { CODEC_RT1015P, CODEC_RT1019P, CODEC_RT1308, + CODEC_TAS2563, }; enum snd_soc_acpi_intel_codec diff --git a/sound/soc/intel/boards/Kconfig b/sound/soc/intel/boards/Kconfig index c23fdb6aad4ca4..724064149906a5 100644 --- a/sound/soc/intel/boards/Kconfig +++ b/sound/soc/intel/boards/Kconfig @@ -41,6 +41,9 @@ config SND_SOC_INTEL_SOF_CIRRUS_COMMON config SND_SOC_INTEL_SOF_NUVOTON_COMMON tristate +config SND_SOC_INTEL_SOF_TI_COMMON + tristate + config SND_SOC_INTEL_SOF_BOARD_HELPERS select SND_SOC_ACPI_INTEL_MATCH tristate diff --git a/sound/soc/intel/boards/Makefile b/sound/soc/intel/boards/Makefile index fcd517d6c27912..25a1a9066cbfa5 100644 --- a/sound/soc/intel/boards/Makefile +++ b/sound/soc/intel/boards/Makefile @@ -69,5 +69,8 @@ obj-$(CONFIG_SND_SOC_INTEL_SOF_CIRRUS_COMMON) += snd-soc-intel-sof-cirrus-common snd-soc-intel-sof-nuvoton-common-y += sof_nuvoton_common.o obj-$(CONFIG_SND_SOC_INTEL_SOF_NUVOTON_COMMON) += snd-soc-intel-sof-nuvoton-common.o +snd-soc-intel-sof-ti-common-y += sof_ti_common.o +obj-$(CONFIG_SND_SOC_INTEL_SOF_TI_COMMON) += snd-soc-intel-sof-ti-common.o + snd-soc-intel-sof-board-helpers-y += sof_board_helpers.o obj-$(CONFIG_SND_SOC_INTEL_SOF_BOARD_HELPERS) += snd-soc-intel-sof-board-helpers.o diff --git a/sound/soc/intel/boards/sof_ti_common.c b/sound/soc/intel/boards/sof_ti_common.c new file mode 100644 index 00000000000000..218c3536723cf1 --- /dev/null +++ b/sound/soc/intel/boards/sof_ti_common.c @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: GPL-2.0-only +// +// Copyright(c) 2025 Intel Corporation +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "../common/soc-intel-quirks.h" +#include "sof_ti_common.h" + +/* + * Texas Instruments TAS2563 just mount one device to manage multiple devices, + * so the kcontrols, widgets and routes just keep one item, respectively. + */ +static const struct snd_kcontrol_new tas2563_spk_kcontrols[] = { + SOC_DAPM_PIN_SWITCH("Spk"), +}; + +static const struct snd_soc_dapm_widget tas2563_spk_dapm_widgets[] = { + SND_SOC_DAPM_SPK("Spk", NULL), +}; + +static const struct snd_soc_dapm_route tas2563_spk_dapm_routes[] = { + { "Spk", NULL, "OUT" }, +}; + +static struct snd_soc_dai_link_component tas2563_dai_link_components[] = { + { + .name = TAS2563_DEV0_NAME, + .dai_name = TAS2563_CODEC_DAI, + }, +}; + +static int tas2563_init(struct snd_soc_pcm_runtime *rtd) +{ + struct snd_soc_card *card = rtd->card; + int ret; + + ret = snd_soc_dapm_new_controls(&card->dapm, tas2563_spk_dapm_widgets, + ARRAY_SIZE(tas2563_spk_dapm_widgets)); + if (ret) { + dev_err(rtd->dev, "unable to add dapm widgets, ret %d\n", ret); + return ret; + } + + ret = snd_soc_add_card_controls(card, tas2563_spk_kcontrols, + ARRAY_SIZE(tas2563_spk_kcontrols)); + if (ret) { + dev_err(rtd->dev, "unable to add controls, ret %d\n", ret); + return ret; + } + + ret = snd_soc_dapm_add_routes(&card->dapm, tas2563_spk_dapm_routes, + ARRAY_SIZE(tas2563_spk_dapm_routes)); + if (ret) + dev_err(rtd->dev, "unable to add dapm routes, ret %d\n", ret); + + return ret; +} + +void sof_tas2563_dai_link(struct snd_soc_dai_link *link) +{ + link->codecs = tas2563_dai_link_components; + link->num_codecs = ARRAY_SIZE(tas2563_dai_link_components); + link->init = tas2563_init; +} +EXPORT_SYMBOL_NS(sof_tas2563_dai_link, "SND_SOC_INTEL_SOF_TI_COMMON"); + +MODULE_DESCRIPTION("ASoC Intel SOF Texas Instruments helpers"); +MODULE_LICENSE("GPL"); diff --git a/sound/soc/intel/boards/sof_ti_common.h b/sound/soc/intel/boards/sof_ti_common.h new file mode 100644 index 00000000000000..de15845aff0c61 --- /dev/null +++ b/sound/soc/intel/boards/sof_ti_common.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright(c) 2025 Intel Corporation. + */ + +/* + * This file defines data structures used in Machine Driver for Intel + * platforms with Texas Instruments Codecs. + */ +#ifndef __SOF_TI_COMMON_H +#define __SOF_TI_COMMON_H + +#include +#include + +/* + * Texas Instruments TAS2563 + */ +#define TAS2563_CODEC_DAI "tasdev_codec" +#define TAS2563_DEV0_NAME "i2c-" TAS2563_ACPI_HID ":00" + +void sof_tas2563_dai_link(struct snd_soc_dai_link *link); + +#endif /* __SOF_TI_COMMON_H */ diff --git a/sound/soc/intel/common/soc-acpi-intel-ssp-common.c b/sound/soc/intel/common/soc-acpi-intel-ssp-common.c index f56f4bfa518718..a12b11f2cd7ac3 100644 --- a/sound/soc/intel/common/soc-acpi-intel-ssp-common.c +++ b/sound/soc/intel/common/soc-acpi-intel-ssp-common.c @@ -65,6 +65,9 @@ static const struct codec_map amps[] = { CODEC_MAP_ENTRY("RT1019P", "rt1019", RT1019P_ACPI_HID, CODEC_RT1019P), CODEC_MAP_ENTRY("RT1308", "rt1308", RT1308_ACPI_HID, CODEC_RT1308), + /* Texas Instruments */ + CODEC_MAP_ENTRY("TAS2563", "tas2563", TAS2563_ACPI_HID, CODEC_TAS2563), + /* * Monolithic components * From 79fb1588f76eaa7070ca3701d69d99e5ded1ac9c Mon Sep 17 00:00:00 2001 From: David Lin Date: Wed, 12 Nov 2025 12:31:04 +0800 Subject: [PATCH 2/2] ASoC: Intel: sof_rt5682: add tas2563 speaker amp support This patch adds tas2563 which supports the RT5682 headset codec and TAS2563 speaker amplifier combination on PantherLake platform. Signed-off-by: David Lin --- sound/soc/intel/boards/Kconfig | 2 ++ sound/soc/intel/boards/sof_rt5682.c | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/sound/soc/intel/boards/Kconfig b/sound/soc/intel/boards/Kconfig index 724064149906a5..c5942b5655d339 100644 --- a/sound/soc/intel/boards/Kconfig +++ b/sound/soc/intel/boards/Kconfig @@ -330,11 +330,13 @@ config SND_SOC_INTEL_SOF_RT5682_MACH select SND_SOC_RT5645 select SND_SOC_RT5682_I2C select SND_SOC_RT5682S + select SND_SOC_TAS2781_I2C select SND_SOC_DMIC select SND_SOC_INTEL_HDA_DSP_COMMON select SND_SOC_INTEL_SOF_BOARD_HELPERS select SND_SOC_INTEL_SOF_MAXIM_COMMON select SND_SOC_INTEL_SOF_REALTEK_COMMON + select SND_SOC_INTEL_SOF_TI_COMMON select SND_SOC_ACPI_INTEL_MATCH help This adds support for ASoC machine driver for SOF platforms diff --git a/sound/soc/intel/boards/sof_rt5682.c b/sound/soc/intel/boards/sof_rt5682.c index 6ca114c30ae168..f60e68bcb2ab9a 100644 --- a/sound/soc/intel/boards/sof_rt5682.c +++ b/sound/soc/intel/boards/sof_rt5682.c @@ -27,6 +27,7 @@ #include "sof_board_helpers.h" #include "sof_maxim_common.h" #include "sof_realtek_common.h" +#include "sof_ti_common.h" /* Driver-specific board quirks: from bit 0 to 7 */ #define SOF_RT5682_MCLK_EN BIT(0) @@ -619,6 +620,9 @@ sof_card_dai_links_create(struct device *dev, struct snd_soc_card *card, ctx->amp_link->init = rt5650_spk_init; ctx->amp_link->ops = &sof_rt5682_ops; break; + case CODEC_TAS2563: + sof_tas2563_dai_link(ctx->amp_link); + break; default: dev_err(dev, "invalid amp type %d\n", ctx->amp_type); return -EINVAL; @@ -766,6 +770,7 @@ static int sof_audio_probe(struct platform_device *pdev) case CODEC_MAX98360A: case CODEC_RT1019P: case CODEC_RT5650: + case CODEC_TAS2563: case CODEC_NONE: /* no codec conf required */ break; @@ -933,3 +938,4 @@ MODULE_LICENSE("GPL v2"); MODULE_IMPORT_NS("SND_SOC_INTEL_SOF_BOARD_HELPERS"); MODULE_IMPORT_NS("SND_SOC_INTEL_SOF_MAXIM_COMMON"); MODULE_IMPORT_NS("SND_SOC_INTEL_SOF_REALTEK_COMMON"); +MODULE_IMPORT_NS("SND_SOC_INTEL_SOF_TI_COMMON");