Add CPCAP codec support to the Tegra ASoC machine driver. This codec is
found in Motorola T20 devices like Atrix 4G and Droid X2.
Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
---
sound/soc/tegra/Kconfig | 9 +++++
sound/soc/tegra/tegra_asoc_machine.c | 52 ++++++++++++++++++++++++++++
2 files changed, 61 insertions(+)
diff --git a/sound/soc/tegra/Kconfig b/sound/soc/tegra/Kconfig
index 9dbd589879fb..f9257830daa1 100644
--- a/sound/soc/tegra/Kconfig
+++ b/sound/soc/tegra/Kconfig
@@ -294,6 +294,15 @@ config SND_SOC_TEGRA_SGTL5000
boards using the SGTL5000 codec, such as Apalis T30, Apalis TK1 or
Colibri T30.
+config SND_SOC_TEGRA_CPCAP
+ tristate "SoC Audio support for Tegra boards using a CPCAP codec"
+ depends on I2C && GPIOLIB
+ select SND_SOC_TEGRA_MACHINE_DRV
+ select SND_SOC_CPCAP
+ help
+ Say Y or M here if you want to add support for SoC audio on Tegra
+ boards using the CPCAP codec, such as Motorola Atrix 4G or Droid X2.
+
endif
endmenu
diff --git a/sound/soc/tegra/tegra_asoc_machine.c b/sound/soc/tegra/tegra_asoc_machine.c
index d48463ac16fc..10834f9c3422 100644
--- a/sound/soc/tegra/tegra_asoc_machine.c
+++ b/sound/soc/tegra/tegra_asoc_machine.c
@@ -287,6 +287,25 @@ static unsigned int tegra_machine_mclk_rate_6mhz(unsigned int srate)
return mclk;
}
+static unsigned int tegra_machine_mclk_rate_cpcap(unsigned int srate)
+{
+ unsigned int mclk;
+
+ switch (srate) {
+ case 11025:
+ case 22050:
+ case 44100:
+ case 88200:
+ mclk = 26000000;
+ break;
+ default:
+ mclk = 256 * srate;
+ break;
+ }
+
+ return mclk;
+}
+
static int tegra_machine_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params)
{
@@ -985,6 +1004,38 @@ static const struct tegra_asoc_data tegra_rt5631_data = {
.add_hp_jack = true,
};
+/* CPCAP machine */
+
+SND_SOC_DAILINK_DEFS(cpcap_hifi,
+ DAILINK_COMP_ARRAY(COMP_EMPTY()),
+ DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "cpcap-hifi")),
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+static struct snd_soc_dai_link tegra_cpcap_dai = {
+ .name = "CPCAP",
+ .stream_name = "CPCAP PCM",
+ .init = tegra_asoc_machine_init,
+ .dai_fmt = SND_SOC_DAIFMT_I2S |
+ SND_SOC_DAIFMT_NB_NF |
+ SND_SOC_DAIFMT_CBP_CFP,
+ SND_SOC_DAILINK_REG(cpcap_hifi),
+};
+
+static struct snd_soc_card snd_soc_tegra_cpcap = {
+ .components = "codec:cpcap",
+ .dai_link = &tegra_cpcap_dai,
+ .num_links = 1,
+ .fully_routed = true,
+};
+
+static const struct tegra_asoc_data tegra_cpcap_data = {
+ .mclk_rate = tegra_machine_mclk_rate_cpcap,
+ .card = &snd_soc_tegra_cpcap,
+ .add_common_dapm_widgets = true,
+ .add_common_controls = true,
+ .add_common_snd_ops = true,
+};
+
static const struct of_device_id tegra_machine_of_match[] = {
{ .compatible = "nvidia,tegra-audio-trimslice", .data = &tegra_trimslice_data },
{ .compatible = "nvidia,tegra-audio-max98090", .data = &tegra_max98090_data },
@@ -997,6 +1048,7 @@ static const struct of_device_id tegra_machine_of_match[] = {
{ .compatible = "nvidia,tegra-audio-rt5640", .data = &tegra_rt5640_data },
{ .compatible = "nvidia,tegra-audio-alc5632", .data = &tegra_rt5632_data },
{ .compatible = "nvidia,tegra-audio-rt5631", .data = &tegra_rt5631_data },
+ { .compatible = "nvidia,tegra-audio-cpcap", .data = &tegra_cpcap_data },
{},
};
MODULE_DEVICE_TABLE(of, tegra_machine_of_match);
--
2.51.0
Hi Svyatoslav,
kernel test robot noticed the following build warnings:
[auto build test WARNING on tegra/for-next]
[also build test WARNING on broonie-sound/for-next robh/for-next linus/master v6.19-rc7 next-20260130]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Svyatoslav-Ryhel/ASoC-dt-bindings-nvidia-tegra-audio-document-CPCAP-CODEC/20260130-214002
base: https://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux.git for-next
patch link: https://lore.kernel.org/r/20260130133434.353353-3-clamor95%40gmail.com
patch subject: [PATCH v1 2/4] ASoC: tegra: Support CPCAP by machine driver
config: arm-kismet-CONFIG_SND_SOC_CPCAP-CONFIG_SND_SOC_TEGRA_CPCAP-0-0 (https://download.01.org/0day-ci/archive/20260130/202601302320.3lveRyEF-lkp@intel.com/config)
reproduce: (https://download.01.org/0day-ci/archive/20260130/202601302320.3lveRyEF-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202601302320.3lveRyEF-lkp@intel.com/
kismet warnings: (new ones prefixed by >>)
>> kismet: WARNING: unmet direct dependencies detected for SND_SOC_CPCAP when selected by SND_SOC_TEGRA_CPCAP
WARNING: unmet direct dependencies detected for SND_SOC_CPCAP
Depends on [n]: SOUND [=y] && SND [=y] && SND_SOC [=y] && (MFD_CPCAP [=n] || COMPILE_TEST [=n])
Selected by [y]:
- SND_SOC_TEGRA_CPCAP [=y] && SOUND [=y] && SND [=y] && SND_SOC [=y] && SND_SOC_TEGRA [=y] && I2C [=y] && GPIOLIB [=y]
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
© 2016 - 2026 Red Hat, Inc.