Commit aa9b88ee authored by Miguel Aguilar's avatar Miguel Aguilar Committed by Mark Brown

DaVinci: DM365: Voice Codec support for the DM365 EVM

The DM365 EVM has two codecs: the Audio Codec (AIC3x) and the Voice Codec,
the idea is to have both enabled in the same kernel simultaneously. However,
the current soc-core doesn't support simultaneous codecs, once that
support will have added, a patch will be posted to enable both codecs in
the DM365 EVM.
Signed-off-by: default avatarMiguel Aguilar <miguel.aguilar@ridgerun.com>
Acked-by: default avatarLiam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent b56e972b
...@@ -604,7 +604,11 @@ static __init void dm365_evm_init(void) ...@@ -604,7 +604,11 @@ static __init void dm365_evm_init(void)
/* maybe setup mmc1/etc ... _after_ mmc0 */ /* maybe setup mmc1/etc ... _after_ mmc0 */
evm_init_cpld(); evm_init_cpld();
#ifdef CONFIG_SND_DM365_AIC3X_CODEC
dm365_init_asp(&dm365_evm_snd_data); dm365_init_asp(&dm365_evm_snd_data);
#elif defined(CONFIG_SND_DM365_VOICE_CODEC)
dm365_init_vc(&dm365_evm_snd_data);
#endif
dm365_init_rtc(); dm365_init_rtc();
dm365_init_ks(&dm365evm_ks_data); dm365_init_ks(&dm365evm_ks_data);
......
...@@ -18,12 +18,32 @@ config SND_DAVINCI_SOC_VCIF ...@@ -18,12 +18,32 @@ config SND_DAVINCI_SOC_VCIF
config SND_DAVINCI_SOC_EVM config SND_DAVINCI_SOC_EVM
tristate "SoC Audio support for DaVinci DM6446, DM355 or DM365 EVM" tristate "SoC Audio support for DaVinci DM6446, DM355 or DM365 EVM"
depends on SND_DAVINCI_SOC depends on SND_DAVINCI_SOC
depends on MACH_DAVINCI_EVM || MACH_DAVINCI_DM355_EVM || MACH_DAVINCI_DM365_EVM depends on MACH_DAVINCI_EVM || MACH_DAVINCI_DM355_EVM || MACH_DAVINCI_DM365_EVM
select SND_DAVINCI_SOC_I2S select SND_DAVINCI_SOC_I2S
select SND_SOC_TLV320AIC3X select SND_SOC_TLV320AIC3X
help help
Say Y if you want to add support for SoC audio on TI Say Y if you want to add support for SoC audio on TI
DaVinci DM6446 or DM355 EVM platforms. DaVinci DM6446, DM355 or DM365 EVM platforms.
choice
prompt "DM365 codec select"
depends on SND_DAVINCI_SOC_EVM
depends on MACH_DAVINCI_DM365_EVM
default SND_DM365_EXTERNAL_CODEC
config SND_DM365_AIC3X_CODEC
bool "Audio Codec - AIC3101"
help
Say Y if you want to add support for AIC3101 audio codec
config SND_DM365_VOICE_CODEC
bool "Voice Codec - CQ93VC"
select MFD_DAVINCI_VOICECODEC
select SND_DAVINCI_SOC_VCIF
select SND_SOC_CQ0093VC
help
Say Y if you want to add support for SoC On-chip voice codec
endchoice
config SND_DM6467_SOC_EVM config SND_DM6467_SOC_EVM
tristate "SoC Audio support for DaVinci DM6467 EVM" tristate "SoC Audio support for DaVinci DM6467 EVM"
......
...@@ -28,10 +28,12 @@ ...@@ -28,10 +28,12 @@
#include <mach/mux.h> #include <mach/mux.h>
#include "../codecs/tlv320aic3x.h" #include "../codecs/tlv320aic3x.h"
#include "../codecs/cq93vc.h"
#include "../codecs/spdif_transciever.h" #include "../codecs/spdif_transciever.h"
#include "davinci-pcm.h" #include "davinci-pcm.h"
#include "davinci-i2s.h" #include "davinci-i2s.h"
#include "davinci-mcasp.h" #include "davinci-mcasp.h"
#include "davinci-vcif.h"
#define AUDIO_FORMAT (SND_SOC_DAIFMT_DSP_B | \ #define AUDIO_FORMAT (SND_SOC_DAIFMT_DSP_B | \
SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_IB_NF) SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_IB_NF)
...@@ -165,6 +167,22 @@ static struct snd_soc_dai_link evm_dai = { ...@@ -165,6 +167,22 @@ static struct snd_soc_dai_link evm_dai = {
.ops = &evm_ops, .ops = &evm_ops,
}; };
static struct snd_soc_dai_link dm365_evm_dai = {
#ifdef CONFIG_SND_DM365_AIC3X_CODEC
.name = "TLV320AIC3X",
.stream_name = "AIC3X",
.cpu_dai = &davinci_i2s_dai,
.codec_dai = &aic3x_dai,
.init = evm_aic3x_init,
.ops = &evm_ops,
#elif defined(CONFIG_SND_DM365_VOICE_CODEC)
.name = "Voice Codec - CQ93VC",
.stream_name = "CQ93",
.cpu_dai = &davinci_vcif_dai,
.codec_dai = &cq93vc_dai,
#endif
};
static struct snd_soc_dai_link dm6467_evm_dai[] = { static struct snd_soc_dai_link dm6467_evm_dai[] = {
{ {
.name = "TLV320AIC3X", .name = "TLV320AIC3X",
...@@ -191,7 +209,7 @@ static struct snd_soc_dai_link da8xx_evm_dai = { ...@@ -191,7 +209,7 @@ static struct snd_soc_dai_link da8xx_evm_dai = {
.ops = &evm_ops, .ops = &evm_ops,
}; };
/* davinci dm6446, dm355 or dm365 evm audio machine driver */ /* davinci dm6446, dm355 evm audio machine driver */
static struct snd_soc_card snd_soc_card_evm = { static struct snd_soc_card snd_soc_card_evm = {
.name = "DaVinci EVM", .name = "DaVinci EVM",
.platform = &davinci_soc_platform, .platform = &davinci_soc_platform,
...@@ -199,6 +217,15 @@ static struct snd_soc_card snd_soc_card_evm = { ...@@ -199,6 +217,15 @@ static struct snd_soc_card snd_soc_card_evm = {
.num_links = 1, .num_links = 1,
}; };
/* davinci dm365 evm audio machine driver */
static struct snd_soc_card dm365_snd_soc_card_evm = {
.name = "DaVinci DM365 EVM",
.platform = &davinci_soc_platform,
.dai_link = &dm365_evm_dai,
.num_links = 1,
};
/* davinci dm6467 evm audio machine driver */ /* davinci dm6467 evm audio machine driver */
static struct snd_soc_card dm6467_snd_soc_card_evm = { static struct snd_soc_card dm6467_snd_soc_card_evm = {
.name = "DaVinci DM6467 EVM", .name = "DaVinci DM6467 EVM",
...@@ -230,6 +257,17 @@ static struct snd_soc_device evm_snd_devdata = { ...@@ -230,6 +257,17 @@ static struct snd_soc_device evm_snd_devdata = {
.codec_data = &aic3x_setup, .codec_data = &aic3x_setup,
}; };
/* evm audio subsystem */
static struct snd_soc_device dm365_evm_snd_devdata = {
.card = &dm365_snd_soc_card_evm,
#ifdef CONFIG_SND_DM365_AIC3X_CODEC
.codec_dev = &soc_codec_dev_aic3x,
.codec_data = &aic3x_setup,
#elif defined(CONFIG_SND_DM365_VOICE_CODEC)
.codec_dev = &soc_codec_dev_cq93vc,
#endif
};
/* evm audio subsystem */ /* evm audio subsystem */
static struct snd_soc_device dm6467_evm_snd_devdata = { static struct snd_soc_device dm6467_evm_snd_devdata = {
.card = &dm6467_snd_soc_card_evm, .card = &dm6467_snd_soc_card_evm,
...@@ -258,12 +296,15 @@ static int __init evm_init(void) ...@@ -258,12 +296,15 @@ static int __init evm_init(void)
int index; int index;
int ret; int ret;
if (machine_is_davinci_evm() || machine_is_davinci_dm365_evm()) { if (machine_is_davinci_evm()) {
evm_snd_dev_data = &evm_snd_devdata; evm_snd_dev_data = &evm_snd_devdata;
index = 0; index = 0;
} else if (machine_is_davinci_dm355_evm()) { } else if (machine_is_davinci_dm355_evm()) {
evm_snd_dev_data = &evm_snd_devdata; evm_snd_dev_data = &evm_snd_devdata;
index = 1; index = 1;
} else if (machine_is_davinci_dm365_evm()) {
evm_snd_dev_data = &dm365_evm_snd_devdata;
index = 0;
} else if (machine_is_davinci_dm6467_evm()) { } else if (machine_is_davinci_dm6467_evm()) {
evm_snd_dev_data = &dm6467_evm_snd_devdata; evm_snd_dev_data = &dm6467_evm_snd_devdata;
index = 0; index = 0;
......
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