根据需求 要HDMI codec 不同同时输出。
1、
hdmi_analog_sound: hdmi-analog-sound {
status = "disabled";
2、rt5640 改成你实际对应的codec,如es8316,
sound: sound {
status = "okay";
compatible = "simple-audio-card";
simple-audio-card,format = "i2s";
simple-audio-card,name = "rockchip,rt5640-codec";
simple-audio-card,mclk-fs = <512>;
simple-audio-card,widgets =
"Microphone", "Microphone Jack",
"Headphone", "Headphone Jack";
simple-audio-card,routing =
"MIC1", "Microphone Jack",
"MIC2", "Microphone Jack",
"Microphone Jack", "micbias1",
"Headphone Jack", "HPOL",
"Headphone Jack", "HPOR";
simple-audio-card,dai-link@0 {
format = "i2s";
cpu {
sound-dai = <&i2s>;
};
codec {
sound-dai = <&rt5640>;
};
};
simple-audio-card,dai-link@1 {
format = "i2s";
cpu {
sound-dai = <&i2s>;
};
codec {
sound-dai = <&hdmi>;
};
};
};
3、 注册后 ls /dev/snd/ -al
rk3288:/ $ ls /dev/snd -al
pcmC0D1p 是HDMI 声卡。
ls /dev/snd -al
total 0
drwxr-xr-x 2 root root 140 2013-01-18 08:50 .
drwxr-xr-x 17 root root 1540 2013-01-18 08:50 ..
crw-rw---- 1 system audio 116, 2 2013-01-18 08:50 controlC0
crw-rw---- 1 system audio 116, 4 2013-01-18 08:50 pcmC0D0c
crw-rw---- 1 system audio 116, 3 2013-01-18 08:50 pcmC0D0p
crw-rw---- 1 system audio 116, 5 2013-01-18 08:50 pcmC0D1p
crw-rw---- 1 system audio 116, 33 2013-01-18 08:50 timer
rk3288:/ $
4打patch
/hardware/rockchip/audio/tinyalsa_hal$ git diff ./
diff --git a/tinyalsa_hal/audio_hw.c b/tinyalsa_hal/audio_hw.c
index d1e6e41..a924eba 100755
--- a/tinyalsa_hal/audio_hw.c
+++ b/tinyalsa_hal/audio_hw.c
@@ -645,6 +645,7 @@ static int start_output_stream(struct stream_out *out)
}
#endif
#endif
+ out->pcm_device = 1;
out->pcm[PCM_CARD_HDMI] = pcm_open(PCM_CARD_HDMI, out->pcm_device,
PCM_OUT | PCM_MONOTONIC, &out->config);
if (out->pcm[PCM_CARD_HDMI] &&
@@ -664,7 +665,20 @@ static int start_output_stream(struct stream_out *out)
AUDIO_DEVICE_OUT_WIRED_HEADSET |
AUDIO_DEVICE_OUT_WIRED_HEADPHONE |
AUDIO_DEVICE_OUT_ALL_SCO)) {
-
+ /* open & close hdmi card to mute hdmi audio */
+ out->pcm_device = 1;
+ out->pcm[PCM_CARD_HDMI] = pcm_open(PCM_CARD_HDMI, out->pcm_device,
+ PCM_OUT | PCM_MONOTONIC, &out->config);
+ if (out->pcm[PCM_CARD_HDMI] &&
+ !pcm_is_ready(out->pcm[PCM_CARD_HDMI])) {
+ ALOGE("pcm_open(PCM_CARD_HDMI) failed: %s",
+ pcm_get_error(out->pcm[PCM_CARD_HDMI]));
+ pcm_close(out->pcm[PCM_CARD_HDMI]);
+ return -ENOMEM;
+ }
+ if (out->pcm[PCM_CARD_HDMI])
+ pcm_close(out->pcm[PCM_CARD_HDMI]);
+ out->pcm_device = 0;
out->pcm[PCM_CARD] = pcm_open(PCM_CARD, out->pcm_device,
PCM_OUT | PCM_MONOTONIC, &out->config);
if (out->pcm[PCM_CARD] && !pcm_is_ready(out->pcm[PCM_CARD])) {
@@ -677,7 +691,8 @@ static int start_output_stream(struct stream_out *out)
}
if (out->device & AUDIO_DEVICE_OUT_SPDIF) {
- out->pcm[PCM_CARD_SPDIF] = pcm_open(PCM_CARD_SPDIF, out->pcm_device,
+ out->pcm_device = 0;
+ out->pcm[PCM_CARD_SPDIF] = pcm_open(PCM_CARD_SPDIF, out->pcm_device,
PCM_OUT | PCM_MONOTONIC, &out->config);
if (out->pcm[PCM_CARD_SPDIF] &&
5、
hardware/rockchip/audio/tinyalsa_hal$ 目录下面所有的PCM_CARD_HDMI 改为
PCM_CARD_HDMI = 0;
技术交流群