我正在将 AOSP 移植到 iMX8 板上。
我有一个工作的 sgtl5000 驱动程序和编解码器。
即当我运行时:
smarc_mx8mq:/sdcard/Alarms # tinyplay file_example_WAV_1MG.wav
Playing sample: 2 ch, 8000 hz, 16 bit 1072948 bytes
播放音乐。
Android 通常根本不会发出任何声音。
表格连续出现错误:
01-05 14:31:47.809 3383 4814 I audio_hw_primary: start_output_stream_primary... 0xedafe000, device 2, address , mode 0
01-05 14:31:47.809 3383 4814 I audio_hw_primary: select_output_device(), headphone 0 ,headset 0 ,speaker 2, earpiece 0,
01-05 14:31:47.809 3383 4814 W audio_hw_primary: card -1, port 0 device 0x2
01-05 14:31:47.809 3383 4814 W audio_hw_primary: rate 48000, channel 2 period_size 0xc0
01-05 14:31:47.809 3383 4814 E audio_hw_primary: cannot open pcm_out driver 0: cannot open device '/dev/snd/pcmC4294967295D0p': No such file or directory
如果应用一个非常丑陋的 hack:
smarc_mx8mq:/dev/snd # ln -s pcmC0D0p pcmC4294967295D0p
声音现在可以在 Android 中使用,直到下次重新启动。
我找到了一个名为的文件imx/alsa/config_sgtl5000.h
,其中有一个部分:
static struct audio_card sgtl5000_card = {
.name = "sgtl5000-audio",
.driver_name = "sgtl5000-audio",
.bus_name = "I2S1",
.supported_out_devices =
(AUDIO_DEVICE_OUT_EARPIECE | AUDIO_DEVICE_OUT_SPEAKER |
AUDIO_DEVICE_OUT_WIRED_HEADSET | AUDIO_DEVICE_OUT_WIRED_HEADPHONE |
AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET | AUDIO_DEVICE_OUT_ALL_SCO |
AUDIO_DEVICE_OUT_DEFAULT),
.supported_in_devices =
(AUDIO_DEVICE_IN_COMMUNICATION | AUDIO_DEVICE_IN_AMBIENT |
AUDIO_DEVICE_IN_BUILTIN_MIC | AUDIO_DEVICE_IN_WIRED_HEADSET |
AUDIO_DEVICE_IN_BACK_MIC | AUDIO_DEVICE_IN_ALL_SCO |
AUDIO_DEVICE_IN_DEFAULT | AUDIO_DEVICE_IN_BUS),
.defaults = NULL,
.bt_output = NULL,
.speaker_output = speaker_output_sgtl5000,
.hs_output = NULL,
.earpiece_output = NULL,
.vx_hs_mic_input = NULL,
.mm_main_mic_input = mm_main_mic_input_sgtl5000,
.vx_main_mic_input = NULL,
.mm_hs_mic_input = NULL,
.vx_bt_mic_input = NULL,
.mm_bt_mic_input = NULL,
.card = 0,
.out_rate = 0,
.out_channels = 0,
.out_format = 0,
.in_rate = 0,
.in_channels = 0,
.in_format = 0,
};
我目前推断Android要求可以做X的声卡并且返回值为-1(4294967295作为uint32_t)。
缺少错误检查会导致尝试在 /dev/snd/pcmC4294967295D0p 打开声卡 -1。
如何让 sgtl5000 成为 Android 的默认声卡?