ubuntu@arm:~$ uname -rdiff --git a/sound/soc/codecs/tlv320aic31xx.c b/sound/soc/codecs/tlv320aic31xx.cindex d1929de..1c300a5 100644--- a/sound/soc/codecs/tlv320aic31xx.c+++ b/sound/soc/codecs/tlv320aic31xx.c@@ -19,7 +19,7 @@ * high performance codec which provides a stereo DAC, a mono ADC, * and mono/stereo Class-D speaker driver. */-+#define DEBUG #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/init.h>
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfigindex f0e8401..19036e3 100644--- a/sound/soc/codecs/Kconfig+++ b/sound/soc/codecs/Kconfig@@ -461,7 +461,8 @@ config SND_SOC_TLV320AIC26 depends on SPI config SND_SOC_TLV320AIC31XX- tristate+ tristate "TI TLV320AIC31xx class D codecs"+ depends on I2C config SND_SOC_TLV320AIC32X4 tristate
Create a DAI (digital audio interface) Link structure. This should allow a specific configuration for the McASP to be called when Linux is directed to play audio to the TLV320AIC31XX. For Sitara McASP machine layer driver is found at sound/soc/davinci/davinci-evm.c
diff --git a/sound/soc/davinci/davinci-evm.c b/sound/soc/davinci/davinci-evm.cindex cab98a5..41db457 100644--- a/sound/soc/davinci/davinci-evm.c+++ b/sound/soc/davinci/davinci-evm.c@@ -8,7 +8,7 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */-+#define DEBUG #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/timer.h>@@ -98,6 +98,13 @@ static const struct snd_soc_dapm_widget aic3x_dapm_widgets[] SND_SOC_DAPM_LINE("Line In", NULL), }; +static const struct snd_soc_dapm_widget aic31xx_dapm_widgets[] = {+ SND_SOC_DAPM_HP("Headphone Jack", NULL),+ SND_SOC_DAPM_SPK("Speaker", NULL),+ SND_SOC_DAPM_MIC("Mic Jack", NULL),+};++ /* davinci-evm machine audio_mapnections to the codec pins */ static const struct snd_soc_dapm_route audio_map[] = { /* Headphone connected to HPLOUT, HPROUT */@@ -120,6 +127,7 @@ static const struct snd_soc_dapm_route audio_map[] = { {"LINE2R", NULL, "Line In"}, }; + /* Logic for a aic3x as connected on a davinci-evm */ static int evm_aic3x_init(struct snd_soc_pcm_runtime *rtd) {@@ -150,6 +158,42 @@ static int evm_aic3x_init(struct snd_soc_pcm_runtime *rtd) return 0; } +/* Logic for a aic31xx as connected on a davinci-evm */+static int evm_aic31xx_init (struct snd_soc_pcm_runtime *rtd)+{ + struct snd_soc_codec *codec = rtd->codec;+ struct snd_soc_dapm_context *dapm = &codec->dapm;+ struct device_node *np = codec->card->dev->of_node;+ int ret;++ /* Add davinci-evm specific widgets */+ snd_soc_dapm_new_controls(dapm, aic31xx_dapm_widgets,+ ARRAY_SIZE(aic31xx_dapm_widgets));
++ if (np) {+ ret = snd_soc_of_parse_audio_routing(codec->card, "ti,audio-rou+ if (ret)+ return ret;+ } +/*+else {+*/+ /* Set up davinci-evm specific audio path audio_map */+/*+ snd_soc_dapm_add_routes(&card->dapm, audio_map,+ ARRAY_SIZE(audio_map));+ }+*/+ /* not connected */+ /* snd_soc_dapm_nc_pin(&codec->dapm, "MONO_LOUT");+ snd_soc_dapm_nc_pin(&codec->dapm, "HPLCOM");+ snd_soc_dapm_nc_pin(&codec->dapm, "HPRCOM");+*/+ return 0;+}+++ /* davinci-evm digital audio interface glue - connects codec <--> CPU */ static struct snd_soc_dai_link dm6446_evm_dai = { .name = "TLV320AIC3X",@@ -250,6 +294,8 @@ static struct snd_soc_dai_link da850_evm_dai = { SND_SOC_DAIFMT_IB_NF, }; ++ /* davinci dm6446 evm audio machine driver */ /* * ASP0 in DM6446 EVM is clocked by U55, as configured by@@ -343,16 +389,33 @@ static struct snd_soc_dai_link evm_dai_tlv320aic3x = { .stream_name = "AIC3X", .codec_dai_name = "tlv320aic3x-hifi", .ops = &evm_ops,- .init = evm_aic3x_init,+ .init = evm_aic3x_init, .dai_fmt = SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_IB_NF, };+/*Modified evm_dai_tlv320aic3x() for aic3110 */+static struct snd_soc_dai_link evm_dai_tlv320aic3110 = {+ .name = "TLV320AIC3110",+ .stream_name = "AIC3110", /* What should I put here? */+ .codec_dai_name = "tlv320aic31xx-hifi",+ .ops = &evm_ops,+ .init = evm_aic31xx_init,+ .dai_fmt = SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_CBM_CFM |+ SND_SOC_DAIFMT_IB_NF,+}; static const struct of_device_id davinci_evm_dt_ids[] = { { .compatible = "ti,da830-evm-audio",- .data = (void *) &evm_dai_tlv320aic3x,+ .data = (void *) &evm_dai_tlv320aic3x, +/* .data = (void *) &evm_dai_tlv320aic3110,*/ },++ {+ .compatible = "ti,TLV320AIC3110-audio",+ .data = (void *) &evm_dai_tlv320aic3110,+ },+ { /* sentinel */ } }; MODULE_DEVICE_TABLE(of, davinci_evm_dt_ids);
--- a/sound/soc/davinci/Kconfig+++ b/sound/soc/davinci/Kconfig@@ -13,7 +13,7 @@ config SND_DAVINCI_SOC_VCIF config SND_DAVINCI_SOC_GENERIC_EVM tristate- select SND_SOC_TLV320AIC3X+ select SND_SOC_TLV320AIC31XX select SND_DAVINCI_SOC_MCASP config SND_AM33XX_SOC_EVM@@ -22,7 +22,7 @@ config SND_AM33XX_SOC_EVM select SND_DAVINCI_SOC_GENERIC_EVM help Say Y or M if you want to add support for SoC audio on AM33XX- boards using McASP and TLV320AIC3X codec. For example AM335X-EVM,+ boards using McASP and TLV320AIC31XX codec. For example AM335X-EVM, AM335X-EVMSK, and BeagelBone with AudioCape boards have this setup.
--- a/arch/arm/boot/dts/am335x-boneblack.dts+++ b/arch/arm/boot/dts/am335x-boneblack.dts@@ -64,6 +64,11 @@ /* Pins: P9.24, P9.28, P9.29, P9.31, P9.30 */ /* #include "am335x-bone-audio.dtsi" */ +/*Customized Audio codec TLV320AIC31XX.C */+#include "am335x-bone-tlv320aic31xx.dtsi" +++ /* #include "am335x-bone-lcd3-01-00a2.dtsi" */
#include <dt-bindings/sound/tlv320aic31xx-micbias.h>
&i2c2 { tlv320aic3110: tlv320aic3110@18 { compatible ="ti,tlv320aic3110" ; reg = <0x18>; ai31xx-micbias-vg = <1>; status = "okay"; /* Regulators */ /* This might be eddited */ HPVDD-supply = <&ldo4_reg>; SPRVDD-supply = <&ldo4_reg>; SPLVDD-supply = <&ldo4_reg>; AVDD-supply = <&ldo4_reg>; IOVDD-supply = <&ldo4_reg>; DVDD-supply = <&vbat>; };};
&mcasp0 { pinctrl-names = "default"; pinctrl-0 = <&mcasp0_pins_audio>; status = "okay"; op-mode = <0>; /* MCASP_IIS_MODE */ tdm-slots = <2>; num-serializer = <16>; serial-dir = < /* 0: INACTIVE, 1: TX, 2: RX */ 2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 >; tx-num-evt = <1>; rx-num-evt = <1>;};/ { sound { compatible = "ti,TLV320AIC3110-audio"; ti,model = "DA830 EVM"; ti,audio-codec = <&tlv320aic3110>; ti,mcasp-controller = <&mcasp0>; ti,codec-clock-rate = <12000000>; ti,audio-routing = /* Source Sink */ /* output in driver*/ /* Speaker connections */ "Headphone Jack", "HPL", "Headphone Jack", "HPR", "Speaker", "SPL", "Speaker", "SPR", "Mic Jack", "MICBIAS", /* Microphone connections */ /* input in driver */ "MIC1LP", "Mic Jack", "MIC1RP", "Mic Jack", "MIC1LM", "Mic Jack"; };};
So at this point everything should be fine and I get sound from the codec. The only error that I have is about ai31xx-micbias-vg which cannot be initialized.I know that this works but am I doing everything right? I wonder if my approach is correct. \By the way, the reason I was writing this was that I could not get the codec to work but by the time I finished writing this post aic3110 was working:)Thanks for reading and your comments-Alex
--
For more options, visit http://beagleboard.org/discuss
---
You received this message because you are subscribed to the Google Groups "BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beagleboard...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Hi,I am trying to design a cape with TLV320AIC3110 for Beaglebone black using I2c2 and Mcasp0.
I essentially want to build a "radio," so I'll be developing a cape with audio out and amplifier
(is I2S the same as your "I2c2"?)
Could I ask you additional questions as I get further into this?
You received this message because you are subscribed to the Google Groups "BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beagleboard...@googlegroups.com.