rockchip: fix asound.conf for rk322x-box and xt-q8l-v10 boards

sound node in device trees have been migrated to audio-graph-card2
to overcome limitations and configuration mayhems in ALSA userland
libraries
This commit is contained in:
Paolo Sabatino
2024-12-01 21:54:10 +01:00
committed by Igor
parent 316169b0a0
commit 4ede989f2c
7 changed files with 242 additions and 227 deletions

View File

@@ -1,27 +1,3 @@
pcm.OnBoard_D0 {
type hw
card OnBoard
device 0
}
pcm.OnBoard_D1 {
type hw
card OnBoard
device 1
}
pcm.OnBoard_D2 {
type hw
card OnBoard
device 2
}
# Configuration to expose the SPDIF device of RK3288 to ALSA. # Configuration to expose the SPDIF device of RK3288 to ALSA.
# The device tree must describe a simple-audio-card device named "SPDIF" # The device tree must describe a simple-audio-card device named "SPDIF"
# for this to work properly # for this to work properly
@@ -53,24 +29,18 @@ cards.SPDIF.pcm.iec958.0 {
} }
# Configuration to expose the HDMI device of RK3288 to ALSA. # Configuration to expose the HDMI device of RK3288 to ALSA.
# The device tree must describe a simple-audio-card device named "DW-I2S-HDMI" # The device tree must describe a simple-audio-card device named "HDMI"
# for this to work properly # for this to work properly
# This percolates to PulseAudio, which will eventually show the proper # This percolates to PulseAudio, which will eventually show the proper
# labels to the audio device # labels to the audio device
<confdir:pcm/hdmi.conf> <confdir:pcm/hdmi.conf>
cards.DW-I2S-HDMI.pcm.hdmi.0 { cards.HDMI.pcm.hdmi.0 {
@args [ CARD DEVICE CTLINDEX AES0 AES1 AES2 AES3 ] @args [ CARD AES0 AES1 AES2 AES3 ]
@args.CARD { @args.CARD {
type string type string
} }
@args.DEVICE {
type integer
}
@args.CTLINDEX {
type integer
}
@args.AES0 { @args.AES0 {
type integer type integer
} }
@@ -83,6 +53,22 @@ cards.DW-I2S-HDMI.pcm.hdmi.0 {
@args.AES3 { @args.AES3 {
type integer type integer
} }
type hw type hooks
card $CARD slave.pcm {
type hw
card $CARD
}
hooks.0 {
type ctl_elems
hook_args [
{
interface PCM
name "IEC958 Playback Default"
lock true
preserve true
value [ $AES0 $AES1 $AES2 $AES3 ]
}
]
}
} }

View File

@@ -24,7 +24,7 @@
/delete-node/ opp-table-0; /delete-node/ opp-table-0;
/* /*
* Rebuild the thermal zones and cooling maps ourselved * Rebuild the thermal zones and cooling maps ourselves
*/ */
/delete-node/ thermal-zones; /delete-node/ thermal-zones;
@@ -37,20 +37,6 @@
mmc2 = &emmc; mmc2 = &emmc;
}; };
analog-sound {
compatible = "simple-audio-card";
simple-audio-card,format = "i2s";
simple-audio-card,mclk-fs = <256>;
simple-audio-card,name = "analog";
simple-audio-card,cpu {
sound-dai = <&i2s1>;
};
simple-audio-card,codec {
sound-dai = <&codec>;
};
};
chosen { chosen {
bootargs = "earlyprintk=uart8250,mmio32,0x11030000"; bootargs = "earlyprintk=uart8250,mmio32,0x11030000";
}; };
@@ -142,25 +128,6 @@
reset-gpios = <&gpio2 RK_PD2 GPIO_ACTIVE_LOW>; reset-gpios = <&gpio2 RK_PD2 GPIO_ACTIVE_LOW>;
}; };
spdif_out: spdif-out {
status = "okay";
compatible = "linux,spdif-dit";
#sound-dai-cells = <0>;
};
spdif-sound {
status = "okay";
compatible = "simple-audio-card";
simple-audio-card,name = "SPDIF";
simple-audio-card,cpu {
sound-dai = <&spdif>;
};
simple-audio-card,codec {
sound-dai = <&spdif_out>;
};
};
vcc_sys: vcc-sys-regulator { vcc_sys: vcc-sys-regulator {
compatible = "regulator-fixed"; compatible = "regulator-fixed";
regulator-name = "vcc_sys"; regulator-name = "vcc_sys";
@@ -318,11 +285,35 @@
}; };
}; };
}; hdmi-sound {
compatible = "audio-graph-card2";
label = "HDMI";
links = <&i2s0_port>;
};
analog-sound {
compatible = "audio-graph-card2";
label = "analog";
links = <&i2s1_port>;
};
spdif-sound {
compatible = "audio-graph-card2";
label = "SPDIF";
links = <&spdif_port>;
};
spdif_out: spdif-out {
status = "okay";
compatible = "linux,spdif-dit";
#sound-dai-cells = <0>;
spdif_out_port: port {
spdif_out_ep: endpoint {
remote-endpoint = <&spdif_ep>;
};
};
};
&codec {
#sound-dai-cells = <0>;
status = "okay";
}; };
&cpu0 { &cpu0 {
@@ -460,23 +451,63 @@
&hdmi { &hdmi {
status = "okay"; status = "okay";
}; hdmi_port: port {
hdmi_ep: endpoint {
&hdmi_sound { remote-endpoint = <&i2s0_ep>;
status = "okay"; };
};
}; };
&hdmi_phy { &hdmi_phy {
status = "okay"; status = "okay";
}; };
&codec {
#sound-dai-cells = <0>;
status = "okay";
codec_port: port {
codec_ep: endpoint {
remote-endpoint = <&i2s1_ep>;
};
};
};
&spdif {
status = "okay";
spdif_port: port {
spdif_ep: endpoint {
remote-endpoint = <&spdif_out_ep>;
};
};
};
&i2s0 { &i2s0 {
status = "okay"; status = "okay";
i2s0_port: port {
i2s0_ep: endpoint {
system-clock-direction-out;
frame-master;
bitclock-master;
mclk-fs = <256>;
dai-format = "i2s";
remote-endpoint = <&hdmi_ep>;
};
};
}; };
&i2s1 { &i2s1 {
#sound-dai-cells = <0>; #sound-dai-cells = <0>;
status = "okay"; status = "okay";
i2s1_port: port {
i2s1_ep: endpoint {
system-clock-direction-out;
frame-master;
bitclock-master;
mclk-fs = <256>;
dai-format = "i2s";
remote-endpoint = <&codec_ep>;
};
};
}; };
/** Integration to pin controller */ /** Integration to pin controller */
@@ -742,10 +773,6 @@
status = "okay"; status = "okay";
}; };
&spdif {
status = "okay";
};
&tsadc { &tsadc {
rockchip,grf = <&grf>; rockchip,grf = <&grf>;
rockchip,hw-tshut-mode = <0>; rockchip,hw-tshut-mode = <0>;

View File

@@ -202,7 +202,7 @@
* Required power sequence to properly enable the wireless/bluetooth * Required power sequence to properly enable the wireless/bluetooth
* module connected to sdio0 * module connected to sdio0
*/ */
sdio0_pwrseq: sdio0_pwrseq { sdio0_pwrseq: sdio0-pwrseq {
compatible = "mmc-pwrseq-simple"; compatible = "mmc-pwrseq-simple";
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&wifi_enable_h>; pinctrl-0 = <&wifi_enable_h>;
@@ -220,43 +220,26 @@
}; };
*/ */
/* hdmi-sound {
* Sound taken from tinkerboard device tree, adapted to q8. compatible = "audio-graph-card2";
*/ label = "HDMI";
soundcard-hdmi { links = <&i2s_port>;
compatible = "simple-audio-card";
simple-audio-card,format = "i2s";
simple-audio-card,name = "DW-I2S-HDMI";
simple-audio-card,mclk-fs = <512>;
simple-audio-card,codec {
sound-dai = <&hdmi>;
};
simple-audio-card,cpu {
sound-dai = <&i2s>;
};
}; };
soundcard-spdif { spdif-sound {
compatible = "simple-audio-card"; compatible = "audio-graph-card2";
simple-audio-card,name = "SPDIF"; label = "SPDIF";
simple-audio-card,dai-link@1 { links = <&spdif_port>;
cpu {
sound-dai = <&spdif>;
};
codec {
sound-dai = <&spdif_out>;
};
};
}; };
spdif_out: spdif-out { spdif_out: spdif-out {
compatible = "linux,spdif-dit"; compatible = "linux,spdif-dit";
#sound-dai-cells = <0>; #sound-dai-cells = <0>;
spdif_out_port: port {
spdif_out_ep: endpoint {
remote-endpoint = <&spdif_ep>;
};
};
}; };
}; };
@@ -300,6 +283,11 @@
&hdmi { &hdmi {
ddc-i2c-bus = <&i2c5>; ddc-i2c-bus = <&i2c5>;
status = "ok"; status = "ok";
hdmi_port: port {
hdmi_ep: endpoint {
remote-endpoint = <&i2s_ep>;
};
};
}; };
&gpu { &gpu {
@@ -758,7 +746,7 @@
sdio0 { sdio0 {
wifi_enable_h: wifienable-h { wifi_enable_h: wifienable-h {
rockchip,pins = <4 28 RK_FUNC_GPIO &pcfg_output_high>; rockchip,pins = <4 28 RK_FUNC_GPIO &pcfg_pull_down>;
}; };
}; };
@@ -868,9 +856,6 @@
vqmmc-supply = <&vcc_18>; // This must be the same as in io_domains, vqmmc-supply = <&vcc_18>; // This must be the same as in io_domains,
// otherwise the mmc1 device won't be detected properly // otherwise the mmc1 device won't be detected properly
// clock-frequency = <50000000>;
// max-frequency = <50000000>;
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>, <&sdio0_int>; pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>, <&sdio0_int>;
@@ -884,6 +869,8 @@
keep-power-in-suspend; keep-power-in-suspend;
disable-wp; disable-wp;
//sd-uhs-sdr50; // required to be enabled, otherwise the device gets
// detected, but there is no communication
status = "okay"; status = "okay";
@@ -896,9 +883,6 @@
status = "okay"; status = "okay";
}; };
//sd-uhs-sdr104; // required to be disabled, otherwise the device get
// detected, but there is no communication
}; };
&spi0 { &spi0 {
@@ -1053,11 +1037,26 @@
&i2s { &i2s {
#sound-dai-cells = <0>; #sound-dai-cells = <0>;
status = "okay"; status = "okay";
i2s_port: port {
i2s_ep: endpoint {
system-clock-direction-out;
frame-master;
bitclock-master;
mclk-fs = <512>;
dai-format = "i2s";
remote-endpoint = <&hdmi_ep>;
};
};
}; };
// spdif is present on q8 device, enable it // spdif is present on q8 device, enable it
&spdif { &spdif {
status = "okay"; status = "okay";
spdif_port: port {
spdif_ep: endpoint {
remote-endpoint = <&spdif_out_ep>;
};
};
}; };
/* /*

View File

@@ -26,29 +26,6 @@ index 831561fc1814..24e963b01d87 100644
serial0 = &uart0; serial0 = &uart0;
serial1 = &uart1; serial1 = &uart1;
serial2 = &uart2; serial2 = &uart2;
@@ -105,6 +106,22 @@ arm-pmu {
interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
};
+ hdmi_sound: hdmi-sound {
+ compatible = "simple-audio-card";
+ simple-audio-card,name = "hdmi-sound";
+ simple-audio-card,format = "i2s";
+ simple-audio-card,mclk-fs = <256>;
+ status = "disabled";
+
+ simple-audio-card,cpu {
+ sound-dai = <&i2s0>;
+ };
+
+ simple-audio-card,codec {
+ sound-dai = <&hdmi>;
+ };
+ };
+
psci {
compatible = "arm,psci-1.0", "arm,psci-0.2";
method = "smc";
@@ -132,6 +149,17 @@ display_subsystem: display-subsystem { @@ -132,6 +149,17 @@ display_subsystem: display-subsystem {
ports = <&vop_out>; ports = <&vop_out>;
}; };

View File

@@ -24,7 +24,7 @@
/delete-node/ opp-table-0; /delete-node/ opp-table-0;
/* /*
* Rebuild the thermal zones and cooling maps ourselved * Rebuild the thermal zones and cooling maps ourselves
*/ */
/delete-node/ thermal-zones; /delete-node/ thermal-zones;
@@ -37,20 +37,6 @@
mmc2 = &emmc; mmc2 = &emmc;
}; };
analog-sound {
compatible = "simple-audio-card";
simple-audio-card,format = "i2s";
simple-audio-card,mclk-fs = <256>;
simple-audio-card,name = "analog";
simple-audio-card,cpu {
sound-dai = <&i2s1>;
};
simple-audio-card,codec {
sound-dai = <&codec>;
};
};
chosen { chosen {
bootargs = "earlyprintk=uart8250,mmio32,0x11030000"; bootargs = "earlyprintk=uart8250,mmio32,0x11030000";
}; };
@@ -142,25 +128,6 @@
reset-gpios = <&gpio2 RK_PD2 GPIO_ACTIVE_LOW>; reset-gpios = <&gpio2 RK_PD2 GPIO_ACTIVE_LOW>;
}; };
spdif_out: spdif-out {
status = "okay";
compatible = "linux,spdif-dit";
#sound-dai-cells = <0>;
};
spdif-sound {
status = "okay";
compatible = "simple-audio-card";
simple-audio-card,name = "SPDIF";
simple-audio-card,cpu {
sound-dai = <&spdif>;
};
simple-audio-card,codec {
sound-dai = <&spdif_out>;
};
};
vcc_sys: vcc-sys-regulator { vcc_sys: vcc-sys-regulator {
compatible = "regulator-fixed"; compatible = "regulator-fixed";
regulator-name = "vcc_sys"; regulator-name = "vcc_sys";
@@ -318,11 +285,35 @@
}; };
}; };
}; hdmi-sound {
compatible = "audio-graph-card2";
label = "HDMI";
links = <&i2s0_port>;
};
analog-sound {
compatible = "audio-graph-card2";
label = "analog";
links = <&i2s1_port>;
};
spdif-sound {
compatible = "audio-graph-card2";
label = "SPDIF";
links = <&spdif_port>;
};
spdif_out: spdif-out {
status = "okay";
compatible = "linux,spdif-dit";
#sound-dai-cells = <0>;
spdif_out_port: port {
spdif_out_ep: endpoint {
remote-endpoint = <&spdif_ep>;
};
};
};
&codec {
#sound-dai-cells = <0>;
status = "okay";
}; };
&cpu0 { &cpu0 {
@@ -460,23 +451,63 @@
&hdmi { &hdmi {
status = "okay"; status = "okay";
}; hdmi_port: port {
hdmi_ep: endpoint {
&hdmi_sound { remote-endpoint = <&i2s0_ep>;
status = "okay"; };
};
}; };
&hdmi_phy { &hdmi_phy {
status = "okay"; status = "okay";
}; };
&codec {
#sound-dai-cells = <0>;
status = "okay";
codec_port: port {
codec_ep: endpoint {
remote-endpoint = <&i2s1_ep>;
};
};
};
&spdif {
status = "okay";
spdif_port: port {
spdif_ep: endpoint {
remote-endpoint = <&spdif_out_ep>;
};
};
};
&i2s0 { &i2s0 {
status = "okay"; status = "okay";
i2s0_port: port {
i2s0_ep: endpoint {
system-clock-direction-out;
frame-master;
bitclock-master;
mclk-fs = <256>;
dai-format = "i2s";
remote-endpoint = <&hdmi_ep>;
};
};
}; };
&i2s1 { &i2s1 {
#sound-dai-cells = <0>; #sound-dai-cells = <0>;
status = "okay"; status = "okay";
i2s1_port: port {
i2s1_ep: endpoint {
system-clock-direction-out;
frame-master;
bitclock-master;
mclk-fs = <256>;
dai-format = "i2s";
remote-endpoint = <&codec_ep>;
};
};
}; };
/** Integration to pin controller */ /** Integration to pin controller */
@@ -742,10 +773,6 @@
status = "okay"; status = "okay";
}; };
&spdif {
status = "okay";
};
&tsadc { &tsadc {
rockchip,grf = <&grf>; rockchip,grf = <&grf>;
rockchip,hw-tshut-mode = <0>; rockchip,hw-tshut-mode = <0>;

View File

@@ -202,7 +202,7 @@
* Required power sequence to properly enable the wireless/bluetooth * Required power sequence to properly enable the wireless/bluetooth
* module connected to sdio0 * module connected to sdio0
*/ */
sdio0_pwrseq: sdio0_pwrseq { sdio0_pwrseq: sdio0-pwrseq {
compatible = "mmc-pwrseq-simple"; compatible = "mmc-pwrseq-simple";
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&wifi_enable_h>; pinctrl-0 = <&wifi_enable_h>;
@@ -220,43 +220,26 @@
}; };
*/ */
/* hdmi-sound {
* Sound taken from tinkerboard device tree, adapted to q8. compatible = "audio-graph-card2";
*/ label = "HDMI";
soundcard-hdmi { links = <&i2s_port>;
compatible = "simple-audio-card";
simple-audio-card,format = "i2s";
simple-audio-card,name = "DW-I2S-HDMI";
simple-audio-card,mclk-fs = <512>;
simple-audio-card,codec {
sound-dai = <&hdmi>;
};
simple-audio-card,cpu {
sound-dai = <&i2s>;
};
}; };
soundcard-spdif { spdif-sound {
compatible = "simple-audio-card"; compatible = "audio-graph-card2";
simple-audio-card,name = "SPDIF"; label = "SPDIF";
simple-audio-card,dai-link@1 { links = <&spdif_port>;
cpu {
sound-dai = <&spdif>;
};
codec {
sound-dai = <&spdif_out>;
};
};
}; };
spdif_out: spdif-out { spdif_out: spdif-out {
compatible = "linux,spdif-dit"; compatible = "linux,spdif-dit";
#sound-dai-cells = <0>; #sound-dai-cells = <0>;
spdif_out_port: port {
spdif_out_ep: endpoint {
remote-endpoint = <&spdif_ep>;
};
};
}; };
}; };
@@ -300,6 +283,11 @@
&hdmi { &hdmi {
ddc-i2c-bus = <&i2c5>; ddc-i2c-bus = <&i2c5>;
status = "ok"; status = "ok";
hdmi_port: port {
hdmi_ep: endpoint {
remote-endpoint = <&i2s_ep>;
};
};
}; };
&gpu { &gpu {
@@ -758,7 +746,7 @@
sdio0 { sdio0 {
wifi_enable_h: wifienable-h { wifi_enable_h: wifienable-h {
rockchip,pins = <4 28 RK_FUNC_GPIO &pcfg_output_high>; rockchip,pins = <4 28 RK_FUNC_GPIO &pcfg_pull_down>;
}; };
}; };
@@ -868,9 +856,6 @@
vqmmc-supply = <&vcc_18>; // This must be the same as in io_domains, vqmmc-supply = <&vcc_18>; // This must be the same as in io_domains,
// otherwise the mmc1 device won't be detected properly // otherwise the mmc1 device won't be detected properly
// clock-frequency = <50000000>;
// max-frequency = <50000000>;
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>, <&sdio0_int>; pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>, <&sdio0_int>;
@@ -884,6 +869,8 @@
keep-power-in-suspend; keep-power-in-suspend;
disable-wp; disable-wp;
//sd-uhs-sdr50; // required to be enabled, otherwise the device gets
// detected, but there is no communication
status = "okay"; status = "okay";
@@ -896,9 +883,6 @@
status = "okay"; status = "okay";
}; };
//sd-uhs-sdr104; // required to be disabled, otherwise the device get
// detected, but there is no communication
}; };
&spi0 { &spi0 {
@@ -1053,11 +1037,26 @@
&i2s { &i2s {
#sound-dai-cells = <0>; #sound-dai-cells = <0>;
status = "okay"; status = "okay";
i2s_port: port {
i2s_ep: endpoint {
system-clock-direction-out;
frame-master;
bitclock-master;
mclk-fs = <512>;
dai-format = "i2s";
remote-endpoint = <&hdmi_ep>;
};
};
}; };
// spdif is present on q8 device, enable it // spdif is present on q8 device, enable it
&spdif { &spdif {
status = "okay"; status = "okay";
spdif_port: port {
spdif_ep: endpoint {
remote-endpoint = <&spdif_out_ep>;
};
};
}; };
/* /*

View File

@@ -32,7 +32,7 @@ index 75af99c76..c50b2ccd7 100644
+ hdmi_sound: hdmi-sound { + hdmi_sound: hdmi-sound {
+ compatible = "simple-audio-card"; + compatible = "simple-audio-card";
+ simple-audio-card,name = "hdmi-sound"; + simple-audio-card,name = "HDMI";
+ simple-audio-card,format = "i2s"; + simple-audio-card,format = "i2s";
+ simple-audio-card,mclk-fs = <256>; + simple-audio-card,mclk-fs = <256>;
+ status = "disabled"; + status = "disabled";