Hi,
I have a custom board based on iMX7D. I want to configure the I2S1 (SAI1) in following fashion:
pinctrl_sai1: sai1grp {
fsl,pins = <
MX7D_PAD_ENET1_RX_CLK__SAI1_TX_BCLK 0x14
MX7D_PAD_SAI1_TX_SYNC__SAI1_TX_SYNC 0x14
MX7D_PAD_ENET1_COL__SAI1_TX_DATA0 0x14
MX7D_PAD_SAI1_RX_DATA__SAI1_RX_DATA0 0x14
MX7D_PAD_ENET1_RGMII_TX_CTL__SAI1_RX_SYNC 0x14
MX7D_PAD_SAI1_RX_SYNC__SAI1_RX_SYNC 0x14
MX7D_PAD_SD1_CLK__SAI3_RX_SYNC 0x14
MX7D_PAD_ENET1_RGMII_TXC__SAI1_RX_BCLK 0x14
MX7D_PAD_SD1_CMD__SAI3_RX_BCLK 0x14
>;
};
Edit1:
Following are the register details just after I start recording (using "arecord")
# cat /sys/kernel/debug/regmap/308a0000.sai/registers
00: 00000000
04: 0000000c
08: 07000005
0c: 00000000
10: 00011f1b
14: 1f1f0f00
40: 00000000
60: fffffffc
80: 90000c01
84: 00000005
88: 02000000
8c: 00010000
90: 00011f1a
94: 1f1f0f00
a0: 00000000
c0: 00000000
e0: fffffffc
Any suggestions for debugging this issue further would be helpful.
Thanks,
Vishal
igorpadykov can you continue with the follow up?
Hi Vishal
I/O error may be reported due to pads
MX7D_PAD_ENET1_RGMII_TX_CTL.. as they are used by another group pinctrl_enet1: enet1grp
: linux-2.6-imx.git - Freescale i.MX Linux Tree also SAI3 configs seems are not needed if only SAI1 instance used in the case. Best regards igor ----------------------------------------------------------------------------------------------------------------------- Note: If this post answers your question, please click the Correct Answer button. Thank you! -----------------------------------------------------------------------------------------------------------------------
Hi Igor,
Thanks for your reply. I tried removing the pads used in ene1grp, and the pads for SAI3. Now the DTS entries for sai1grp looks like following. But still there is no success in the recording for SAI1 in slave mode.
pinctrl_sai1: sai1grp {
fsl,pins = <
MX7D_PAD_ENET1_RX_CLK__SAI1_TX_BCLK 0x14
MX7D_PAD_SAI1_TX_SYNC__SAI1_TX_SYNC 0x14
MX7D_PAD_ENET1_COL__SAI1_TX_DATA0 0x14
MX7D_PAD_SAI1_RX_DATA__SAI1_RX_DATA0 0x14
MX7D_PAD_SAI1_RX_SYNC__SAI1_RX_SYNC 0x14
/*
MX7D_PAD_ENET1_RGMII_TX_CTL__SAI1_RX_SYNC 0x14
MX7D_PAD_ENET1_RGMII_TXC__SAI1_RX_BCLK 0x14
MX7D_PAD_SD1_CLK__SAI3_RX_SYNC 0x14
MX7D_PAD_SD1_CMD__SAI3_RX_BCLK 0x14
*/
>;
};
For the sake of confirming the device-tree changes are actually applied, here is the dump of pin settings:
# hexdump sai1grp/fsl,pins
0000000 0000 6002 0000 d004 0000 a806 0000 0200
0000010 0000 0100 0000 1400 0000 0802 0000 7804
0000020 0000 ac06 0000 0000 0000 0000 0000 1400
0000030 0000 6802 0000 d804 0000 0000 0000 0200
0000040 0000 0000 0000 1400 0000 0002 0000 7004
0000050 0000 a006 0000 0000 0000 0000 0000 1400
0000060 0000 1002 0000 8004 0000 a406 0000 0000
0000070 0000 0000 0000 1400
0000078
EDIT1:
For the sake of testing, I made TX and RX synchronous (by removing "fsl,sai-asynchronous;") entry in DTS file. Then I started the playback followed by capture. In this case the capture works, but as soon as I stop the playback, the capture also stops with input/output error. I do not understand this behavior.
Thanks,
Vishal
Hi Vishal
in synchronous mode both clock and frame sync are used
by transmitter and receiver, so one can check them by oscilloscope. This is described in
sect.13.8.3.3.1 Synchronous mode i.MX7D Reference Manual
http://cache.nxp.com/files/32bit/doc/ref_manual/IMX7DRM.pdf
Regarding
"not see any I2S RX interrupt, and the "arecord" simply comes out by reporting I/O error."
one can debug it (probably try to read FIFO and its pointers), use AN4553 Debugging Tools
http://www.nxp.com/assets/documents/data/en/application-notes/AN4553.pdf
What BSP used in the case, please note that i.MX7 supported starting only
L4.1.15_1.2.0. Is it NXP BSP ? Please check NXP BSPs on
i.MX 6 Series Software and Development Tool|NXP
Just for reference please check attached Linux Manual Table 28-1. Stereo Codec SoC Driver Files
for sai driver sources.
Best regards
igor
Hi Igor,
The problem got fixed with correct value settings for following macros in arch/arm/boot/dts/imx7d-pinfunc.h
MX7D_PAD_ENET1_RGMII_TX_CTL__SAI1_RX_SYNC
MX7D_PAD_ENET1_RGMII_TXC__SAI1_RX_BCLK
Thanks,
Vishal