- 主控:RK3566
- 环境:LCD/HDMI 独显;声卡:喇叭-es8156 、 HDMI-rockchip_hdmi
- 需求:喇叭和HDMI声音输出随显示切换同步,支持不同音频同时播放
alsa-lib 库将 /usr/share/alsa/alsa.conf
配置文件作为主要的入口点。其他文件在哪是否需要都由这个文件决定。 alsa.conf中自动加载系统全局自定义设置文件 /etc/asound.conf
和用户自定义配置文件 ~/.asoundrc
。.asoundrc
是一个隐藏文件,是针对个人用户的配置文件,一般存在于用户主目录下。asound.conf
则是全局的配置文件。
板载声卡不支持混音,我们需要用dmix来实现软件混音;
同时每次插拔HDMI 切换显示时需要更新.asoundrc
指定声卡
1.创建.asoundrc文件,并写入如下内容:
defaults.ctl.card 0
defaults.pcm.card 0
2.修改.asoundrc,
echo -e "defaults.ctl.card 1\ndefaults.pcm.card 1" > /etc/.asoundrc
3.生成asound.conf
# asound.conf如下
pcm.!default {
type plug
slave.pcm "es8156"
}
pcm.es8156 {
@args [ CARD DEV ]
@args.CARD {
type string
default {
@func getenv
vars [
ALSA_PCM_CARD
ALSA_CARD
]
default {
@func refer
name defaults.pcm.card
}
}
}
@args.DEV {
type integer
default {
@func igetenv
vars [
ALSA_PCM_DEVICE
]
default {
@func refer
name defaults.pcm.device
}
}
}
type plug
slave.pcm {
type softvol
control {
name "softvol"
card $CARD
}
min_dB -40.0
max_dB -6.0
resolution 100
slave.pcm {
type dmix
# must be unique for all dmix plugins!!!!
ipc_key 5978293
ipc_key_add_uid yes
slave {
pcm {
type hw
card $CARD
device $DEV
}
channels 2
period_size 1024
buffer_size 4096
}
bindings {
0 0
1 1
}
}
}
}
DTS配置:
hdmi_sound: hdmi-sound {
status = "okay";
compatible = "rockchip,hdmi";
rockchip,mclk-fs = <128>;
rockchip,card-name = "rockchip,hdmi";
rockchip,cpu = <&i2s0_8ch>;
rockchip,codec = <&hdmi>;
};
es8156_sound: es8156-sound {
status = "okay";
compatible = "simple-audio-card";
simple-audio-card,format = "i2s";
simple-audio-card,name = "rockchip,es8156-codec";
simple-audio-card,mclk-fs = <256>;
simple-audio-card,cpu {
sound-dai = <&i2s1_8ch>;
};
simple-audio-card,codec {
sound-dai = <&es8156>;
};
};
es8156: es8156@08 {
#sound-dai-cells = <0>;
compatible = "everest,es8156";
status = "okay";
reg = <0x08>;
clocks = <&cru I2S1_MCLKOUT>;
clock-names = "mclk";
assigned-clocks = <&cru I2S1_MCLKOUT>, <&cru I2S1_MCLK_TX_IOE>;
assigned-clock-rates = <12288000>;
assigned-clock-parents = <&cru I2S1_MCLKOUT_TX>, <&cru I2S1_MCLKOUT_TX>;
pinctrl-names = "default";
pinctrl-0 = <&i2s1m0_mclk>;
spk-con-gpio = <&gpio1 RK_PB2 GPIO_ACTIVE_LOW>;
hp-det-gpio = <&gpio0 RK_PC7 GPIO_ACTIVE_LOW>;
hp-ctl-gpio = <&gpio0 RK_PC6 GPIO_ACTIVE_HIGH>;
};