imx6ul基于Linux-4.1.15适配nau88c22

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

imx6ul基于Linux-4.1.15适配nau88c22

91 Views
李瑞杰
Contributor I

imx6ul

linux kernel 4.1.15

外设:nau88c22yg

现象:

[root@root:~]# ls /dev/snd/
by-path controlC0 pcmC0D0c pcmC0D0p timer
[root@root:~]# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: imx6ulnau8822 [imx6ul-nau8822], device 0: 202c000.sai-nau8822-hifi nau8822-hifi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0

[root@root:~]# aplay ding.wav

aplay: pcm_write:2059: write error: Input/output error

原理图:

_0-1714289470654.png

设备树配置:

&i2c2 {
clock_frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c2>;
status = "okay";
nau88c22_codec: nau88c22@1a {
compatible = "nuvoton,nau8822";
reg = <0x1a>;
#sound-dai-cells = <0>;
clocks = <&clks IMX6UL_CLK_SAI2>;
clock-names = "mclk";
wlf,shared-lrclk;
};
};
 
pinctrl_sai2: sai2grp {
fsl,pins = <
MX6UL_PAD_JTAG_TDI__SAI2_TX_BCLK 0x17088
MX6UL_PAD_JTAG_TDO__SAI2_TX_SYNC 0x17088
MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA 0x11088
MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA 0x11088
MX6UL_PAD_JTAG_TMS__SAI2_MCLK 0x17088
MX6UL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x17059
>;
};
&sai2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sai2>;
assigned-clocks = <&clks IMX6UL_CLK_SAI2_SEL>,
  <&clks IMX6UL_CLK_SAI2>;
assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
assigned-clock-rates = <0>, <12288000>;
#sound-dai-cells = <0>;
status = "okay";
};
 
sound_card: sound-card {
compatible = "simple-audio-card";
status = "okay";
simple-audio-card,bitclock-master = <&dailink_master>;
simple-audio-card,format = "i2s";
simple-audio-card,frame-master = <&dailink_master>;
simple-audio-card,name = "imx6ul-nau8822";
hp-det = 0>;
hp-det-gpios = <&gpio5 4 0>;
mic-det-gpios = <&gpio5 4 0>;
simple-audio-card,routing =
"Headphones", "LHP",
"Headphones", "RHP",
"Speaker", "LSPK",
"Speaker", "RSPK",
"Line Out", "AUXOUT1",
"Line Out", "AUXOUT2",
"LAUX", "Line In",
"RAUX", "Line In",
"LMICP", "Mic In",
"RMICP", "Mic In";
simple-audio-card,widgets =
"Headphones", "Headphones",
"Line Out", "Line Out",
"Speaker", "Speaker",
"Microphone", "Mic In",
"Line", "Line In";
 
dailink_master: simple-audio-card,codec {
sound-dai = <&nau88c22_codec>;
clocks = <&clks IMX6UL_CLK_SAI2>;
};
 
simple-audio-card,cpu {
sound-dai = <&sai2>;
};
};
执行aplay命令时可以看到内核信息中I2C的数据发送成功
[root@root:~]# aplay ding.wav
Playing WAVE 'ding.wav' : Signed 16 bit Little Endian, Rate 22050 Hz, Mono
[17943.333898] i2c i2c-1: master_xfer[0] W, addr=0x1a, len=2
[17943.339340] i2c i2c-1: <i2c_imx_xfer>
[17943.343779] i2c i2c-1: <i2c_imx_start>
[17943.347629] i2c i2c-1: <i2c_imx_bus_busy>
[17943.352197] i2c i2c-1: <i2c_imx_xfer> transfer message: 0
[17943.357634] i2c i2c-1: <i2c_imx_xfer> CONTROL: IEN=1, IIEN=1, MSTA=1, MTX=1, TXAK=1, RSTA=0
[17943.366511] i2c i2c-1: <i2c_imx_xfer> STATUS: ICF=1, IAAS=0, IBB=1, IAL=0, SRW=0, IIF=0, RXAK=1
[17943.375365] i2c i2c-1: <i2c_imx_write> write slave address: addr=0x34
[17943.382395] i2c i2c-1: <i2c_imx_trx_complete> TRX complete
[17943.387916] i2c i2c-1: <i2c_imx_acked> ACK received
[17943.393251] i2c i2c-1: <i2c_imx_write> write data
[17943.397987] i2c i2c-1: <i2c_imx_write> write byte: B0=0x14
[17943.404054] i2c i2c-1: <i2c_imx_trx_complete> TRX complete
[17943.409573] i2c i2c-1: <i2c_imx_acked> ACK received
[17943.414907] i2c i2c-1: <i2c_imx_write> write byte: B1=0x0
[17943.420482] i2c i2c-1: <i2c_imx_trx_complete> TRX complete
[17943.426474] i2c i2c-1: <i2c_imx_acked> ACK received
[17943.431443] i2c i2c-1: <i2c_imx_stop>
[17943.435155] i2c i2c-1: <i2c_imx_bus_busy>
[17943.439191] i2c i2c-1: <i2c_imx_xfer> exit with: success msg: 1
aplay: pcm_write:2059: [17953.442194] i2c i2c-1: master_xfer[0] W, addr=0x1a, len=2
write error: Input/output error
[17953.449011] i2c i2c-1: <i2c_imx_xfer>
[17953.456848] i2c i2c-1: <i2c_imx_start>
[17953.460761] i2c i2c-1: <i2c_imx_bus_busy>
[17953.465908] i2c i2c-1: <i2c_imx_xfer> transfer message: 0
[17953.471644] i2c i2c-1: <i2c_imx_xfer> CONTROL: IEN=1, IIEN=1, MSTA=1, MTX=1, TXAK=1, RSTA=0
[17953.480084] i2c i2c-1: <i2c_imx_xfer> STATUS: ICF=1, IAAS=0, IBB=1, IAL=0, SRW=0, IIF=0, RXAK=1
[17953.490032] i2c i2c-1: <i2c_imx_write> write slave address: addr=0x34
[17953.496861] i2c i2c-1: <i2c_imx_trx_complete> TRX complete
[17953.503278] i2c i2c-1: <i2c_imx_acked> ACK received
[17953.508237] i2c i2c-1: <i2c_imx_write> write data
[17953.513897] i2c i2c-1: <i2c_imx_write> write byte: B0=0x14
[17953.519654] i2c i2c-1: <i2c_imx_trx_complete> TRX complete
[17953.526091] i2c i2c-1: <i2c_imx_acked> ACK received
[17953.531055] i2c i2c-1: <i2c_imx_write> write byte: B1=0x40
[17953.537884] i2c i2c-1: <i2c_imx_trx_complete> TRX complete
[17953.544147] i2c i2c-1: <i2c_imx_acked> ACK received
[17953.549053] i2c i2c-1: <i2c_imx_stop>
[17953.553407] i2c i2c-1: <i2c_imx_bus_busy>
[17953.557462] i2c i2c-1: <i2c_imx_xfer> exit with: success msg: 1
 
现在不知道问题出在哪里
 
 

 

Labels (1)
Tags (2)
0 Kudos
1 Reply

60 Views
JorgeCas
NXP TechSupport
NXP TechSupport

Hello,

 

"pcm_write:2059: write error: Input/output error" could occur due to incorrect clock settings.

 

Please try probing MCLK and check with the oscilloscope.

 

Maybe could be helpful our reference device tree of our i.MX6UL EVK board.

 

imx6ul.dtsi

 

Best regards.

 

0 Kudos