xaled Posted September 26, 2019 Share Posted September 26, 2019 (edited) Hi, I want to use the I2S GPIO output pins on Nanopi m4 to connect to multi channel DAC. Unfortunately I can not see it as a playback device: user@nanopim4:/home$ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: realtekrt5651co [realtek,rt5651-codec], device 0: ff890000.i2s-rt5651-aif1 rt5651-aif1-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: rockchiphdmi [rockchip,hdmi], device 0: ff8a0000.i2s-i2s-hifi i2s-hifi-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0 Is there a way to enable I2S output on GPIO? 36 | I2S0_SDO0(1.8V) 37 | I2S0_SDI1SDO3(1.8V) 38 | I2S0_SDI2SDO2(1.8V) 39 | GND 40 | I2S0_SDI3SDO1(1.8V) user@nanopim4:/home$ cat /etc/armbian-image-release # PLEASE DO NOT EDIT THIS FILE BOARD=nanopim4 BOARD_NAME="NanoPi M4" BOARDFAMILY=rk3399 BUILD_REPOSITORY_URL=https://github.com/armbian/build BUILD_REPOSITORY_COMMIT=1221d592 VERSION=5.95 LINUXFAMILY=rk3399 BRANCH=default ARCH=arm64 IMAGE_TYPE=stable BOARD_TYPE=conf INITRD_ARCH=arm64 KERNEL_IMAGE_TYPE=Image IMAGE_UUID=aa7287f5-d3a9-444e-b198-e24e2ed8aa1f Edited September 26, 2019 by xaled Added system info Link to comment Share on other sites More sharing options...
baronets Posted November 29, 2019 Share Posted November 29, 2019 Hi, after some trials and errors, I was able to enable I2S0 interface and using the GPIO pins to record with a MEMs microphone. I am using armbian OS image with current kernel (5.3.11+) and ubuntu 18.04, I built it using armbian documentation (https://docs.armbian.com/Developer-Guide_Using-Vagrant/). I am using SD card. The board takes some time before booting up with this image, but it works. After getting the SD card ready, I went to the /boot directory and decompiled the device tree used by boot-loader (in my case, the file is rk3399-nanopi-m4.dtb). dtc -I dtb -o <filename>.dts -<filename>.dtb To check which device tree is loaded by the boot-loader, check the file armbianEnv.txt in the /boot directory (check the name of the fdtfile). You need to modify the device tree as follows: Go to I2S0 node and add the following two lines pinctrl-names = "default"; pinctrl-0 = < 0x96 >; i2s@ff880000 { compatible = "rockchip,rk3399-i2s\0rockchip,rk3066-i2s"; reg = < 0x00 0xff880000 0x00 0x1000 >; rockchip,grf = < 0x18 >; interrupts = < 0x00 0x27 0x04 0x00 >; dmas = < 0x5c 0x00 0x5c 0x01 >; dma-names = "tx\0rx"; clock-names = "i2s_clk\0i2s_hclk"; clocks = < 0x08 0x56 0x08 0x1d4 >; power-domains = < 0x17 0x1c >; #sound-dai-cells = < 0x00 >; pinctrl-names = "default"; pinctrl-0 = < 0x96 >; rockchip,playback-channels = <8>; rockchip,capture-channels = <8>; status = "okay"; phandle = < 0x10d >; }; Check that the status of driver is "okay" and not disabled. You have then to register a simple-sound-card and link it to the i2s driver by phandle (the device tree pointer) rockchip-i2s-sound { compatible = "simple-audio-card"; simple-audio-card,format = "i2s"; simple-audio-card,name = "rk3399-i2s"; simple-audio-card,mclk-fs = < 0x100 >; status = "okay"; phandle = < 0x153 >; simple-audio-card,cpu { sound-dai = < 0x10d > ; }; simple-audio-card,codec { sound-dai = < 0x10d >; }; }; After you changed the devite tree, recompile it by running the command line dtc -I dts -o <filename>.dtb -<filename>.dts After that, reboot and check ALSA list of devices. You should see it listed as "rk3399-i2s". Link to comment Share on other sites More sharing options...
Recommended Posts