Про audio кодеки Realtek/Conexant

Материал из ALT Linux Wiki

По умолчанию обслуживаются драйвером snd_hda_intel, иногда совместно с sof драйвером, особенно если требуется поддержка цифрового микрофона.

Распространенные проблемы - не работает звук (динамики/наушники), не работает запись (микрофон встроенный/внешний гарнитуры). Связано это зачастую с аппаратными различиями - реализованные в коде драйверов профили и конфигурации устройств могут не соответствовать конкретной реализации аппаратной части на конкретном устройстве. Например, производители материнских плат могут использовать один и тот же аудиокодек, но реализовывать различные схемы подключения разъемов, динамиков и микрофонов. В результате, драйвер может неправильно определять, какой разъем используется для вывода или ввода звука.

В таком случае удобно использовать утилиту hdajackretask, в сети есть хорошая документация от red-soft.

Рассмотрим на реальном примере. Ноутбук Chuwi CoreBook XPro, проблемы:

- не работает звук из встроенных динамиков
- не определяется микрофон гарнитуры

Смотрим alsa-info (alsa-info.sh --no-upload --output alsa-info.txt):

!!HDA-Intel Codec information!!

Codec: Realtek ALC269VB
Vendor Id: 0x10ec0269
Subsystem Id: 0x27820232

Ищем исправление (если есть) в последней версии ядра для этой подсистемы (Subsystem Id: 0x27820232) в файле sound/pci/hda/patch_realtek.c  (для Realtek) или sound/pci/hda/patch_conexant.c (для Conexant), по ключам ID (2782 , 0232):

SND_PCI_QUIRK(0x2782, 0x0232, "CHUWI CoreBook XPro", ALC269VB_FIXUP_CHUWI_COREBOOK_XPRO),

На момент решения проблемы, этих исправлений не было, с помощью hdajackretask был подобран подходящий конфиг.

hdajackretask делает "под капотом" примерно следующее: 1) создает файл "прошивки" новой кофигурации

su -
cat > /lib/firmware/chuwi-corebook-xpro.fw <<EOF
[codec]
0x10ec0269 0x27820232 0

[pincfg]
0x12 0x90a60160
0x18 0x03a19020
0x1b 0x90170150
0x21 0x0321403f
EOF

2) сообщает звуковому драйверу путь к файлу:

su -
echo "options snd-hda-intel patch=chuwi-corebook-xpro.fw" > /etc/modprobe.d/chuwi-corebook-xpro.conf

После перезагрузки, dmesg:

[    4.844915] snd_hda_intel 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if info 0x040380
[    4.845010] snd_hda_intel 0000:00:1f.3: enabling device (0000 -> 0002)
[    4.845232] snd_hda_intel 0000:00:1f.3: Applying patch firmware 'chuwi-corebook-xpro.fw'
[    4.846595] snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
[    4.924927] snd_hda_codec_realtek hdaudioC0D0: autoconfig for ALC269VB: line_outs=2 (0x14/0x1b/0x0/0x0/0x0) type:speaker
[    4.924933] snd_hda_codec_realtek hdaudioC0D0:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[    4.924935] snd_hda_codec_realtek hdaudioC0D0:    hp_outs=1 (0x21/0x0/0x0/0x0/0x0)
[    4.924936] snd_hda_codec_realtek hdaudioC0D0:    mono: mono_out=0x0
[    4.924937] snd_hda_codec_realtek hdaudioC0D0:    inputs:
[    4.924938] snd_hda_codec_realtek hdaudioC0D0:      Mic=0x18
[    4.924940] snd_hda_codec_realtek hdaudioC0D0:      Internal Mic=0x12

Выделяем из списка достаточный набор реконфигурации пинов (динамиков и микрофона гарнитуры) и , посмотрев, как пишутся подобные изменения в ядре, отправляем патч с комментариями.

Еще, как вариант, можно подобрать модель  с похожей проблемой и проверить, например, inv-dmic если проблемы со встроенным микрофоном:

su -
echo 'options snd_hda_intel model=inv-dmic' > /etc/modprobe.d/snd-hda-intel.conf
reboot

В остальных случаях возможно придется вносить изменения в драйверы кодеков, например, Conexant: 1) Клонируем исходный код ядра и ставим пакет kernel-headers-modules 2) Переходим в директорию драйвера (sound/pci/hda) 3) Вносим изменения в файл patch_conexant.c 4) Оставляем в Makefile интересующие цели:

Makefile:

snd-hda-codec-conexant-y :=  patch_conexant.o
obj-$(CONFIG_SND_HDA_CODEC_CONEXANT) += snd-hda-codec-conexant.o

5) Собираем

make -C /lib/modules/$(uname -r)/build M=$PWD

6) Устанавливаем

sudo make -C /lib/modules/$(uname -r)/build M=$PWD modules_install

7) Выгружаем модули звука, соблюдая зависимости (либо перезагружаем систему), проверяем.