Hi John,
I have made custom audio cape using TLV320AIC3107 codec and here is a schematic diagram.

My device tree is as follows :
/dts-v1/;
/plugin/;
/ {
compatible = “ti,beaglebone”, “ti,beaglebone-black”;
/* identification */
part-number = “BB-BONE-AUDI-02”;
version = “00A0”, “A0”;
/* state the resources this cape uses */
exclusive-use =
/* the pin header uses */
“P9.31”, /* mcasp0: mcasp0_aclkx */
“P9.30”, /* mcasp0: mcasp0_axr0 */
“P9.29”, /* mcasp0: mcasp0_fsx */
“P9.28”, /* mcasp0: mcasp0_axr2 */
“P9.25”, /* mcasp0: mcasp0_ahclkx */
/* the hardware ip uses */
“mcasp0”;
fragment@0 {
target = <&am33xx_pinmux>;
overlay {
i2c2_pins: pinmux_i2c2_pins {
pinctrl-single,pins = <
0x150 0x72 /spi0_scl.i2c2_sda,SLEWCTRL_SLOW | INPUT_PULLUP |MODE2/
0x154 0x72 /spi0_d0.i2c2_scl,SLEWCTRL_SLOW | INPUT_PULLUP | MODE2/
;
};
bone_audio_cape_audio_pins: pinmux_bone_audio_cape_audio_pins {
pinctrl-single,pins = <
0x1ac 0x20 /* mcasp0_ahclkx, INPUT | MODE0 */
0x19c 0x22 /* mcasp0_axr2, INPUT | MODE2 */
0x194 0x20 /* mcasp0_fsx, INPUT | MODE0 */
0x198 0x00 /* mcasp0_axr0, OUTPUT | MODE0 */
0x190 0x20 /* mcasp0_aclkx, INPUT | MODE0 */
;
};
};
};
fragment@1 {
target = <&i2c2>;
overlay {
#address-cells = <1>;
#size-cells = <0>;
clock-frequency = <100000>;
status = “okay”;
pinctrl-names = “default”;
pinctrl-0 = <&i2c2_pins>;
tlv320aic3007: tlv320aic3007@18 {
compatible = “ti,tlv320aic3007”;
reg = <0x18>;
status = “okay”;
};
};
};
fragment@2 {
target = <&mcasp0>;
overlay {
pinctrl-names = “default”;
pinctrl-0 = <&bone_audio_cape_audio_pins>;
status = “okay”;
op-mode = <0>; /* MCASP_IIS_MODE */
tdm-slots = <2>;
num-serializer = <16>;
serial-dir = < /* 0: INACTIVE, 1: TX, 2: RX */
0 0 2 1 /* AXR0 AXR1 AXR2 AXR3 */
0 0 0 0
0 0 0 0
0 0 0 0
;
tx-num-evt = <1>;
rx-num-evt = <1>;
};
};
fragment@3 {
target = <&ocp>;
overlay {
sound {
compatible = “ti,da830-evm-audio”;
ti,model = “DA830 EVM”;
ti,audio-codec = <&tlv320aic3007>;
ti,mcasp-controller = <&mcasp0>;
ti,codec-clock-rate = <12000000>;
ti,audio-routing =
“Headphone Jack”, “HPLOUT”,
“Headphone Jack”, “HPROUT”,
“Line Out”, “LLOUT”,
“Line Out”, “RLOUT”,
“MIC3L”, “Mic Jack”,
“MIC3R”, “Mic Jack”,
“LINE1L”, “Line In”,
“LINE2L”, “Line In”,
“LINE1R”, “Line In”,
“LINE2R”, “Line In”;
};
};
};
};
I install DT and here is for confirmation :
in dmesg :
[ 254.659557] bone-capemgr bone_capemgr.8: part_number 'BB-BONE-AUDI-02', version 'N/A'
[ 254.659641] bone-capemgr bone_capemgr.8: slot #7: generic override
[ 254.659659] bone-capemgr bone_capemgr.8: bone: Using override eeprom data at slot 7
[ 254.659677] bone-capemgr bone_capemgr.8: slot #7: 'Override Board Name,00A0,Override Manuf,BB-BONE-AUDI-02'
[ 254.659784] bone-capemgr bone_capemgr.8: slot #7: Requesting part number/version based 'BB-BONE-AUDI-02-00A0.dtbo
[ 254.659802] bone-capemgr bone_capemgr.8: slot #7: Requesting firmware 'BB-BONE-AUDI-02-00A0.dtbo' for board-name 'Override Board Name', version '00A0'
[ 254.668469] bone-capemgr bone_capemgr.8: slot #7: dtbo 'BB-BONE-AUDI-02-00A0.dtbo' loaded; converting to live tree
[ 254.668961] bone-capemgr bone_capemgr.8: slot #7: #4 overlays
[ 254.678886] of_get_named_gpio_flags: can't parse gpios property
[ 254.682895] 1-0018 supply IOVDD not found, using dummy regulator
[ 254.682971] 1-0018 supply DVDD not found, using dummy regulator
[ 254.683035] 1-0018 supply AVDD not found, using dummy regulator
[ 254.683096] 1-0018 supply DRVDD not found, using dummy regulator
[ 254.692524] davinci_evm sound.13: tlv320aic3x-hifi <-> 48038000.mcasp mapping ok
[ 254.701641] bone-capemgr bone_capemgr.8: slot #7: Applied #4 overlays.
root@beaglebone:~# cat /proc/asound/devices
2: [ 0- 0]: digital audio playback
3: [ 0- 0]: digital audio capture
4: [ 0] : control
33: : timer
root@beaglebone:~# aplay -L
null
Discard all samples (playback) or generate zero samples (capture)
default:CARD=EVM
DA830 EVM,
Default Audio Device
sysdefault:CARD=EVM
DA830 EVM,
Default Audio Device
root@beaglebone:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: EVM [DA830 EVM], device 0: AIC3X tlv320aic3x-hifi-0
Subdevices: 1/1
Subdevice #0: subdevice #0
Now I try to play wave file :
root@beaglebone:~/Desktop# aplay -vv test_stereo_8000Hz_8bit_PCM.wav
Playing WAVE ‘test_stereo_8000Hz_8bit_PCM.wav’ : Unsigned 8 bit, Rate 8000 Hz, Stereo
Plug PCM: Linear conversion PCM (S16_LE)
Its setup is:
stream : PLAYBACK
access : RW_INTERLEAVED
format : U8
subformat : STD
channels : 2
rate : 8000
exact rate : 8000 (8000/1)
msbits : 8
buffer_size : 16000
period_size : 1000
period_time : 125000
tstamp_mode : NONE
period_step : 1
avail_min : 1000
period_event : 0
start_threshold : 16000
stop_threshold : 16000
silence_threshold: 0
silence_size : 0
boundary : 2097152000
Slave: Hardware PCM card 0 ‘DA830 EVM’ device 0 subdevice 0
Its setup is:
stream : PLAYBACK
access : MMAP_INTERLEAVED
format : S16_LE
subformat : STD
channels : 2
rate : 8000
exact rate : 8000 (8000/1)
msbits : 16
buffer_size : 16000
period_size : 1000
period_time : 125000
tstamp_mode : NONE
period_step : 1
avail_min : 1000
period_event : 0
start_threshold : 16000
stop_threshold : 16000
silence_threshold: 0
silence_size : 0
boundary : 2097152000
appl_ptr : 0
hw_ptr : 0
####### + | 19%
after that board freezes and not responding.
When I check dmesg, I see the following error:
root@beaglebone:~/Desktop# dmesg
[ 904.298073] omap_i2c 4819c000.i2c: Arbitration lost
[ 905.330496] omap_i2c 4819c000.i2c: controller timed out
You have Idea, what’s wrong ?
Please help me.
Thanks in Advance.