Hi,
Our custom HW has a different codec instead of tlv320aic3x in dm814x evm
Connection to codec is through Mcasp 0 instead of Mcasp 2(used in dm814x evm)
Codec is controlled through a used space i2c driver instead of i2c slave driver in kernel.
Currenlty we need a playback path
The following changes are made for this
file: . \arch\arm\mach-omap2\board-ti8148evm.c
Pin muxing are made for macasp0
omap_mux_init_signal("mcasp0_aclkr", OMAP_PIN_OUTPUT);
omap_mux_init_signal("mcasp0_fsr", OMAP_PIN_OUTPUT);
omap_mux_init_signal("mcasp0_axr0", OMAP_PIN_OUTPUT);
omap_mux_init_signal("mcasp0_axr1", OMAP_PIN_OUTPUT);
omap_mux_init_signal("mcasp0_axr2", OMAP_PIN_OUTPUT);
omap_mux_init_signal("mcasp0_axr3", OMAP_PIN_INPUT);
omap_mux_init_signal("mcasp0_axr4", OMAP_PIN_INPUT);
omap_mux_init_signal("mcasp0_axr5", OMAP_PIN_INPUT);
/* Only Playback path for now */
static u8 ti8148_iis_serializer_direction[] = {
TX_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
};
static struct snd_platform_data ti8148_evm_snd_data = {
.tx_dma_offset = 0x46000000,
.rx_dma_offset = 0x46000000,
.op_mode = DAVINCI_MCASP_IIS_MODE,
.num_serializer = ARRAY_SIZE(ti8148_iis_serializer_direction),
.tdm_slots = 2,
.serial_dir = ti8148_iis_serializer_direction,
.asp_chan_q = EVENTQ_2,
.version = MCASP_VERSION_2,
.txnumevt = 1,
.rxnumevt = 0,
};
Not sure about the setting
.asp_chan_q = EVENTQ_2,
In \sound\soc\davinci\davinci-evm.c
a dummy platform device ad73311-codec was added so that the codec will not control the audio path. In our there is a user space driver control the codec
static struct snd_soc_dai_link ti81xx_evm_dai = {
.name = "ad73311",
.stream_name = "AD73311",
.cpu_dai_name = "davinci-mcasp.0",
.codec_dai_name = "ad73311-hifi",
.codec_name = "ad73311-codec",
.platform_name = "davinci-pcm-audio",
.ops = &evm_ops,
};
and evm_hw_params modified as follows
static int evm_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params)
{
struct snd_soc_pcm_runtime *rtd = substream->private_data;
struct snd_soc_dai *codec_dai = rtd->codec_dai;
struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
int ret = 0;
unsigned sysclk;
/* ASP1 on DM355 EVM is clocked by an external oscillator */
if (machine_is_davinci_dm355_evm() || machine_is_davinci_dm6467_evm() ||
machine_is_davinci_dm365_evm())
sysclk = 27000000;
/* ASP0 in DM6446 EVM is clocked by U55, as configured by
* board-dm644x-evm.c using GPIOs from U18. There are six
* options; here we "know" we use a 48 KHz sample rate.
*/
else if (machine_is_davinci_evm())
sysclk = 12288000;
else if (machine_is_davinci_da830_evm() ||
machine_is_davinci_da850_evm() ||
machine_is_ti8168evm() ||
machine_is_ti8148evm())
sysclk = 24576000;
else
return -EINVAL;
/* set cpu DAI configuration */
ret = snd_soc_dai_set_fmt(cpu_dai, AUDIO_FORMAT);
if (ret < 0)
return ret;
return 0;
}
and the AUDIO_FORMAT is changed as follows to e use J4 as clock master instead of codec
#define AUDIO_FORMAT (SND_SOC_DAIFMT_DSP_B | \
SND_SOC_DAIFMT_CBS_CFS | SND_SOC_DAIFMT_NB_NF)
with these changes Alsa link is detected
<-----capture---->
asoc: ad73311-hifi <-> davinci-mcasp.0 mapping ok
platform_device_add
ALSA device list:
#0: TI81XX EVM
TCP cubic registered
<---end capture--->
Are these changes ok? Is the EVENTQ_2 correct? Where can we find these EventQ IDs documented?
When I ran aplay <xxx.wav>
It is hanging.
Thanks and regards,
Ishaqe