AM3359 I2C 音频驱动问题
各位好,我在TI的 am335x平台上调试基于I2C的音频驱动。
碰到问题,请求大家帮忙
我的环境如下:
CPU: am3359
EVM包 psp04.06.00.07
音频芯片是:TLV320AIC3106RGZ
在调试音频过程中,碰到问题,过程描述如下:
首先,修改board-support/linux-3.2-psp04.06.00.07.sdk/arch/arm/mach-omap2/board-am33txevm.c
增加以下代码
/* Module pin mux for mcasp0 */
static struct pinmux_config mcasp0_pin_mux[] = {
{"mcasp0_aclkx.mcasp0_aclkx", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN},
{"mcasp0_fsx.mcasp0_fsx", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN},
{"mcasp0_axr0.mcasp0_axr0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN},
{"mcasp0_ahclkr.mcasp0_axr2", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN},
{NULL, 0},
};
static u8 am335x_iis_serializer_direction0[] = {
TX_MODE, INACTIVE_MODE, RX_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 am335x_evm_snd_data0 = {
.tx_dma_offset = 0x46000000, /* McASP0 */
.rx_dma_offset = 0x46000000,
.op_mode = DAVINCI_MCASP_IIS_MODE,
.num_serializer = ARRAY_SIZE(am335x_iis_serializer_direction0),
.tdm_slots = 2,
.serial_dir = am335x_iis_serializer_direction0,
.asp_chan_q = EVENTQ_2,
.version = MCASP_VERSION_3,
.txnumevt = 1,
.rxnumevt = 1,
};
static void mcasp0_init(int evm_id, int profile)
{
/* Configure McASP */
setup_pin_mux(mcasp0_pin_mux);
am335x_register_mcasp(&am335x_evm_snd_data0, 0);
return;
}
static struct evm_dev_cfg beaglebone_dev_cfg[] = {
......
{mcasp0_init, DEV_ON_BASEBOARD, PROFILE_NONE},
....
}
其次修改:sound/soc/davinci/davinci-evm.c
static struct snd_soc_dai_link am335x_evm_dai = {
.name = "TLV320AIC3X",
.stream_name = "AIC3X",
.cpu_dai_name = "davinci-mcasp.0", //1-->0
.codec_dai_name = "tlv320aic3x-hifi",
.codec_name = "tlv320aic3x-codec.3-001b", //2-->1
.platform_name = "davinci-pcm-audio",
.init = evm_aic3x_init,
.ops = &evm_ops,
};
输出信息:
[ 1.586273] usbhid: USB HID core driver
[ 1.591125] usbcore: registered new interface driver snd-usb-audio
[ 1.599212] tlv320aic3x-codec 3-001b: ---wxj---aic3x_i2c_probe()
[ 1.605529] tlv320aic3x-codec 3-001b: ---wxj---aic3x->control_type = SND_SOC_I2C
[ 1.613281] tlv320aic3x-codec 3-001b: ---wxj---snd_soc_register_codec return 0
[ 1.625732] soc-audio soc-audio.0: binding TLV320AIC3X at idx 0
[ 1.631927] ---wxj---soc-core.c soc_bind_dai_link(), binding TLV320AIC3X at idx 0
[ 1.639770] soc-audio soc-audio.0: find CPU DAI from registered DAIs: dai_name davinci-mcasp.0
[ 1.648803] soc-audio soc-audio.0: CODEC found, so find CODEC DAI from registered DAIs from this CODEC: dai_name davinci-mcasp.0
[ 1.660888] soc-audio soc-audio.0: then find one from the set of registered platforms: platform_name davinci-pcm-audio
[ 1.672088] ---wxj---soc-core.c soc_bind_dai_link(),rtd->complete=1, return 1
[ 1.679656] tlv320aic3x-codec 3-001b: ---wxj---tlv320aic3x.c aic3x_probe()
[ 1.686889] tlv320aic3x-codec 3-001b: Failed to get supply 'IOVDD': -19
[ 1.693817] tlv320aic3x-codec 3-001b: Failed to request supplies: -19
[ 1.700561] tlv320aic3x-codec 3-001b: asoc: failed to probe CODEC tlv320aic3x-codec.3-001b: -19
[ 1.709716] asoc: failed to instantiate card AM335X EVM: -19
[ 1.715698] ALSA device list:
[ 1.718811] No soundcards found.
音频芯片的供电部分硬件工程师测量正常。