Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: amlogic: add radxa-zero-i2s-hifiberry-dac #389

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

CodeChenL
Copy link
Contributor

@CodeChenL CodeChenL commented Dec 23, 2024

目前除了发现无法隔离hdmi单独管理外,当相同的内容写成overlay时,子设备索引从2开始,写入设备本身的设备树则不会:

rock@radxa-zero:~$ aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
pipewire
    PipeWire Sound Server
default
    Default ALSA Output (currently PipeWire Media Server)
hw:CARD=RADXAZERO,DEV=2
    RADXA-ZERO, 
    Direct hardware device without any conversions
hw:CARD=RADXAZERO,DEV=3
    RADXA-ZERO, 
    Direct hardware device without any conversions
hw:CARD=RADXAZERO,DEV=4
    RADXA-ZERO, 
    Direct hardware device without any conversions
plughw:CARD=RADXAZERO,DEV=2
    RADXA-ZERO, 
    Hardware device with all software conversions
plughw:CARD=RADXAZERO,DEV=3
    RADXA-ZERO, 
    Hardware device with all software conversions
plughw:CARD=RADXAZERO,DEV=4
    RADXA-ZERO, 
    Hardware device with all software conversions
dmix:CARD=RADXAZERO,DEV=2
    RADXA-ZERO, 
    Direct sample mixing device
dmix:CARD=RADXAZERO,DEV=3
    RADXA-ZERO, 
    Direct sample mixing device
dmix:CARD=RADXAZERO,DEV=4
    RADXA-ZERO, 
    Direct sample mixing device

Copy link
Member

@RadxaYuntian RadxaYuntian left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

对比一下两个在系统内的设备树:/proc/device-tree
dtc可以反编译这个目录结构,然后diff看看

@CodeChenL
Copy link
Contributor Author

对比一下两个在系统内的设备树:/proc/device-tree dtc可以反编译这个目录结构,然后diff看看

结构是一样的dtc -I fs -O dts /proc/device-tree,感觉这个目录应该看不出排序

@RadxaYuntian
Copy link
Member

数据一样那序号应该也一样才对。你看看具体哪个部分放到overlay会导致顺序不对

@CodeChenL
Copy link
Contributor Author

数据一样那序号应该也一样才对。你看看具体哪个部分放到overlay会导致顺序不对

新增的dai-link导致的顺序不对

@RadxaYuntian
Copy link
Member

有试过建一个新的声卡节点么

@CodeChenL
Copy link
Contributor Author

有试过建一个新的声卡节点么

simple-audio-card试过不行,应该是因为不是标准i2s控制器节点,新建amlogic,axg-sound-card的话需要删除自带声卡的一些前端daplink,否则创建失败,我就没接着走了

@RadxaYuntian
Copy link
Member

是说用同一个驱动

@CodeChenL
Copy link
Contributor Author

是说用同一个驱动

amlogic,axg-sound-card就是同一个驱动

@RadxaYuntian
Copy link
Member

我的意思是新建一个单独的节点,compatible = amlogic,axg-sound-card,不用simple-audio-card

@CodeChenL
Copy link
Contributor Author

我的意思是新建一个单独的节点,compatible = amlogic,axg-sound-card,不用simple-audio-card

前面说的“新建amlogic,axg-sound-card的话需要删除自带声卡的一些前端daplink,否则创建失败,我就没接着走了“

@CodeChenL
Copy link
Contributor Author

amlogic,axg-sound-card 需要类似frddr*这样的前端dailink配合带codec的后端dailink,所以新建一个声卡要删除自带的amlogic,axg-sound-card部分前端dailink来给新加的amlogic,axg-sound-card用

@CodeChenL
Copy link
Contributor Author

CodeChenL commented Dec 24, 2024

amlogic,axg-sound-card 需要类似frddr*这样的前端dailink配合带codec的后端dailink,所以新建一个声卡要删除自带的amlogic,axg-sound-card部分前端dailink来给新加的amlogic,axg-sound-card用

这样是最小实现:

ext-sound {
		compatible = "amlogic,axg-sound-card";
		model = "RADXA-ZERO-EXT";
		audio-aux-devs = <&tdmout_a>;
		audio-routing = "TDMOUT_A IN 0", "FRDDR_A OUT 0",
				"TDMOUT_A IN 1", "FRDDR_B OUT 0",
				"TDMOUT_A IN 2", "FRDDR_C OUT 0",
				"TDM_A Playback", "TDMOUT_A OUT";

		assigned-clocks = <&clkc CLKID_MPLL2>,
				  <&clkc CLKID_MPLL0>,
				  <&clkc CLKID_MPLL1>;
		assigned-clock-parents = <0>, <0>, <0>;
		assigned-clock-rates = <294912000>,
				       <270950400>,
				       <393216000>;
		status = "okay";

		dai-link-0 {
			sound-dai = <&frddr_a>;
		};

		dai-link-1 {
			sound-dai = <&tdmif_a>;
			dai-format = "i2s";
			dai-tdm-slot-tx-mask-0 = <1 1>;
			mclk-fs = <256>;

			codec@0 {
				sound-dai = <&pcm5102a_codec>;
			};

			codec@1 {
				sound-dai = <&tohdmitx TOHDMITX_I2S_IN_A>;
			};
		};

		dai-link-2 {
			sound-dai = <&tohdmitx TOHDMITX_I2S_OUT>;

			codec {
				sound-dai = <&hdmi_tx>;
			};
		};
	};

@CodeChenL
Copy link
Contributor Author

有个新发现是可以用alsamixer控制hdmi和i2s的单独开关,虽然还是不能隔离为两个设备

@RadxaYuntian
Copy link
Member

alsa config可能要单独定义两个输出?

@CodeChenL
Copy link
Contributor Author

alsa config可能要单独定义两个输出?

已经找到用alsamixer将i2s和hdmi隔离为两个设备的方法了!需要重写一下libreelec的udev规则,可能改动有点大,是重新打包还是写个教程?

@RadxaYuntian
Copy link
Member

你先大致说一下到底要怎么改

@CodeChenL
Copy link
Contributor Author

你先大致说一下到底要怎么改

设备树的改动已提交,alsa udev那边我再看看怎么改比较好

Copy link
Member

@RadxaYuntian RadxaYuntian left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

那个序号的问题还存在么?

@CodeChenL
Copy link
Contributor Author

那个序号的问题还存在么?

还在的

@CodeChenL
Copy link
Contributor Author

感觉只能disable掉原来的sound节点新建一个才能解决

@RadxaYuntian
Copy link
Member

也可以试试先干掉alsa-utils看看是不是这个脚本导致的?不过可能不太是它的原因

@CodeChenL
Copy link
Contributor Author

CodeChenL commented Dec 25, 2024

也可以试试先干掉alsa-utils看看是不是这个脚本导致的?不过可能不太是它的原因

干掉了libreelec-alsa-utils还是index一样还是不是从0开始的,alsa-utils干掉就没有命令看不了设备列表了

@CodeChenL
Copy link
Contributor Author

还发现以overlay形式会让pipewire探测失败,太奇怪了这

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants