I2S Codec on Euler bus of Pine A64+
#1
I have recently purchased Pina64+ board and tested with Armbain server image based on kernel 3.10. I need to connect audio codec
in the I2S pin of Euler bus.  I would like to know what all changes in the dtb file or even in the kernel need to be made in order to work
with my audio codec which works in master mode. Basically A64+ should work in slave mode.

Any help will be highly appreciated.

Regards
Ranjit
  Reply
#2
AFAIK, Armbian is using Ayufan's kernel 3.10.105, which should have the patched dts for pine64, pine64+ and sopine64.

In case not, compare them with the ones in the attachment, these are the ones I used for my kernel (3.10.105-bsp-1.2+) to build Volumio 
pine64.dts is for pine64+
pinenoplus.dts is for pine64
pine64so.dts is for sopine64


Attached Files
.zip   pine64-patched-dts.zip (Size: 38.65 KB / Downloads: 27)
  Reply
#3
Hi, Thanks for the reply. the dtb file used in arbmian image is sun50iw1pi-pine64-plus.dtb. and the noticeable difference is as below
[email protected] {
compatible = "allwinner,sunxi-daudio0-machine";
sunxi,daudio0-controller = <0x4e>;
status = "disabled";
device_type = "snddaudio0";
};
I have changed the staus to "okay" and also changed the "CONFIG_SND_SOC_DAUDIO0_MACHINE=m" in the config file. With the
change I could see the kernel module sunxi-snddaudio0.ko in the /lib/modules/3.10.107-pine64/kernel/sound/soc/sunxi
However the module is not loaded.

Then I manually tried to load by calling "insmod" which returns the following errors.
De 3 11:18:00 localhost kernel: [ 982.711898] snddaudio0 sound.8: ASoC: CPU DAI (null) not registered
Dec 3 11:18:00 localhost kernel: [ 982.711953] snddaudio0 sound.8: snd_soc_register_card() failed: -517
Dec 3 11:18:00 localhost kernel: [ 982.711898] snddaudio0 sound.8: ASoC: CPU DAI (null) not registered
Dec 3 11:18:00 localhost kernel: [ 982.711953] snddaudio0 sound.8: snd_soc_register_card() failed: -517
Dec 3 11:18:00 localhost kernel: [ 982.711991] platform sound.8: Driver snddaudio0 requests probe deferral

As I understand certain dependency driver need to be install as well. Could you please help what else need to be enabled in configure file during kernel build?
the kernel version in the armbian build environment is 3.10.107

Any help will be highly apricated.
Regards
Ranjit
  Reply
#4
Well, you could have a look at my config in the attachment.
I enabled "ASoC Simple sound card support "and with "ASoC support for SUNXI" the following:
 
<*>   ASoC support for audiocodec
   <*>   ASoC support for internal-i2s 
   <*>   ASoC support for audiocodec machine 
   <*>   ASoC support for daudio platform. 
   <*>   ASoC support for vircodec  
   <*>   ASoC support for daudio0 machine 
   < >   ASoC support for daudio1 machine 
   <*>   ASoC support for hdmiaudio 
   <*>   ASoC support for spdif soundcard

As you see, I only selected daudio0, you don't need daudio1


Attached Files
.txt   config-3.10.105-bsp-1.2+-2017.11.10-17.29.txt (Size: 89.12 KB / Downloads: 31)
  Reply
#5
I have changed the configure file as suggested to make it built-in the. Below is the snippet of config file
CONFIG_SND_SOC_SUNXI_RW=y
CONFIG_SND_SOC_SUNXI_AUDIO_DMA=y
CONFIG_SND_SOC_SUNXI_TDM=y
CONFIG_SND_SUNXI_SOC=y
CONFIG_SND_SOC_INTERNAL_AUDIOCODEC=y
CONFIG_SND_SOC_INTERNAL_I2S=y
CONFIG_SND_SOC_AUDIO_CODEC_MACHINE=y
CONFIG_SND_SOC_DAUDIO_PLATFORM=y
CONFIG_SND_SOC_VIRCODEC=y
CONFIG_SND_SOC_DAUDIO0_MACHINE=y
# CONFIG_SND_SOC_DAUDIO1_MACHINE is not set
CONFIG_SND_SUNXI_SOC_HDMIAUDIO=y

However I still see the failure log
Dec 4 02:22:10 localhost kernel: [ 10.453351] snddaudio0 sound.8: ASoC: CPU DAI (null) not registered
Dec 4 02:22:10 localhost kernel: [ 10.453386] snddaudio0 sound.8: snd_soc_register_card() failed: -517
Dec 4 02:22:10 localhost kernel: [ 10.453390] [RANJ] sunxi_snddaudio0_dev_probe done with -517


Kindly could you please let me know kernel source code that you are using to build for PINE A64 and the build instruction. It would be
great help if you let me know the procedure of your kernel build to test the I2S on Euler bus.

Regards
Ranjit
  Reply
#6
(11-29-2018, 08:37 PM)RANJITT76 Wrote: I have recently purchased Pina64+ board and tested with Armbain server image based on kernel 3.10. I need to connect audio codec
in the I2S pin of Euler bus.  I would like to know what all changes in the dtb file or even in the kernel need to be made in order to work
with my audio codec which works in master mode. Basically A64+ should work in slave mode.

Any help will be highly appreciated.

Regards
Ranjit

You have a PM
  Reply
#7
(12-04-2018, 02:21 AM)gkkpch Wrote:
(11-29-2018, 08:37 PM)RANJITT76 Wrote: I have recently purchased Pina64+ board and tested with Armbain server image based on kernel 3.10. I need to connect audio codec
in the I2S pin of Euler bus.  I would like to know what all changes in the dtb file or even in the kernel need to be made in order to work
with my audio codec which works in master mode. Basically A64+ should work in slave mode.

Any help will be highly appreciated.

Regards
Ranjit

You have a PM

Could you please write an explanation here on how to get the external I2S bus working for audio DAC?
It would definitely help me and some other users!
Thank you!
  Reply
#8
Ok, I figured this out on my own and share what I know. I'm including my diff for the DTS file. The key issues are that you need enable daudio and daudio0. You need to disable uart2 because it conflicts with the I2S MCK pin.

You need to change your kernel configuration to enable the DAUDIO and DAUDIO0 sound driver. I enabled them as modules. You also need to enable the rudimentary sound drivers for sunxi. If you build as modules, you will need to insert the daudio module before the daudio0 module.

Doing these things, I was able to see the I2S signals toggling correctly on my logic analyzer when I play a wav file using aplay. The aplay device name can be found using aplay -L

Hope this helps everybody. This enables the I2S on the Pine64 with the Pine64 as a master. It also doesn't do anything to communicate with your CODEC through its control port. That is my next step as I'm using a CS4270 where the CS4270 is the clock master. So, I need the I2C functioning and I need to change the DTS to make the Pine a clock slave.



diff --git a/arch/arm64/boot/dts/sun50iw1p1-pine64-plus.dts b/arch/arm64/boot/dts/sun50iw1p1-pine64-plus.dts
index 0675b205..f1db8bc4 100644
--- a/arch/arm64/boot/dts/sun50iw1p1-pine64-plus.dts
+++ b/arch/arm64/boot/dts/sun50iw1p1-pine64-plus.dts
@@ -1737,7 +1737,7 @@
pinctrl-1 = <0x20>;
uart2_port = <0x2>;
uart2_type = <0x4>;
- status = "okay";
+ status = "disabled";
pinctrl-0 = <0xa4>;
};

@@ -1956,7 +1956,7 @@
frametype = <0x0>;
tdm_config = <0x1>;
tdm_num = <0x0>;
- status = "disabled";
+ status = "okay";
linux,phandle = <0x4e>;
phandle = <0x4e>;
device_type = "daudio0";
@@ -1981,7 +1981,7 @@
frametype = <0x0>;
tdm_config = <0x1>;
tdm_num = <0x1>;
- status = "disabled";
+ status = "okay";
linux,phandle = <0x4f>;
phandle = <0x4f>;
device_type = "daudio1";
@@ -2026,14 +2026,14 @@
[email protected] {
compatible = "allwinner,sunxi-daudio0-machine";
sunxi,daudio0-controller = <0x4e>;
- status = "disabled";
+ status = "okay";
device_type = "snddaudio0";
};

[email protected] {
compatible = "allwinner,sunxi-daudio1-machine";
sunxi,daudio1-controller = <0x4f>;
- status = "disabled";
+ status = "okay";
device_type = "snddaudio1";
};
  Reply
#9
I've made a few changes to make it possible to specify the CODEC from the device tree assuming that the CODEC doesn't need anything more than what the sunxi provides, you can use different codecs without having to change the driver. I'll bundle up my patches this weekend and make them available. I'm doing kernel development outside of Armbian, but I'm modifying the Armbian kernel. The only thing that I haven't figured out yet is the gpio-reset in the cs4270 node. I'm using a different method in the device tree to set that gpio high. BTW, after doing these changes, I can't say that I'm a big fan of the device tree implementation. The concept is good, but the consistency of format and documentation are very poor.
  Reply


Possibly Related Threads...
Thread Author Replies Views Last Post
  NetBSD for Pine A64(+) Luke 3 1,029 10-05-2019, 11:04 PM
Last Post: mrgtwentythree
  Can anyone run Boinc on Pine models? MarijusR 6 248 09-11-2019, 06:41 AM
Last Post: letarg
  There is a usable distro for Pine A64? polv89 6 1,922 06-09-2019, 03:32 PM
Last Post: dkebler
  Pine A64 stuck in boot process joey 1 225 05-28-2019, 09:07 PM
Last Post: joey
  dead Pine A64? Truglio 2 437 01-22-2019, 10:06 AM
Last Post: Truglio
Rainbow Pine a64 + Armbian + RTL-SDR = fun Drowwy 5 756 10-11-2018, 11:46 AM
Last Post: Drowwy
  Selling Pine A64 with lots of accessories marcelser 1 558 09-26-2018, 11:25 PM
Last Post: ntindle
  Supply DC power to Pine64 via Pi-2 Connector & Euler Bus? crapped 2 561 05-24-2018, 01:58 AM
Last Post: crapped
  Just installed Ubuntu Xenial on Pine 64+ and no sound adamjedgar 1 532 04-12-2018, 11:35 PM
Last Post: DanielRounds
  sd format?for pine 64 angegardien 2 405 04-12-2018, 12:47 PM
Last Post: Punkyclown

Forum Jump:


Users browsing this thread: 1 Guest(s)