Включить ALSA для захвата звука с входа SPDIF CS4207

Попробуйте этот тест:

sed 's/^    "peer-port": [0-9]*,/    "peer-port": '"${newport}"',/' settings.json

...изучите вывод и, если он выглядит хорошо, добавьте -i, чтобы фактически изменить файл следующим образом:

sed -i 's/^    "peer-port": [0-9]*,/    "peer-port": '"${newport}"',/' settings.json

Примечания :sстроки замены могут нуждаться в небольшой настройке,(т.е. замена " " на " \t" ), в зависимости от того, это пробелы или вкладки.

Более компактный и эффективный, (но, возможно, менее портативный ), метод:

sed `/^    "peer-port": /{s/ [0-9]*,/ '"${newport}",'/;q}' settings.json
2
28.10.2020, 18:25
1 ответ

Сделать SPDIF -доступным

Основная проблема заключается в том, что платформа snd _hda в настоящее время поддерживает только один цифровой вход , а у CS4207 их 3.
Во время разбора вывода кодека -все три из них проходят цикл, и последний выигрывает и передается ALSA. Хитрость заключается в том, что контакты без какого-либо настроенного соединения пропускаются в цикле .

Обычно конфигурация контактов задается BIOS. Поскольку мы не контролируем BIOS в этой настройке, это не вариант.

Другой альтернативой является установка конфигураций выводов с помощью файла исправления (, как описано здесь в разделе Раннее исправление).

Для этого мне нужны выводы Идентификаторы узлов в данном случае 0x0Eи 0x12и чтение их текущей конфигурации выводов:

# hda-verb /dev/snd/hwC0D0 0x0e GET_CONFIG_DEFAULT 0x00
nid = 0xe, verb = 0xf1c, param = 0x0
value = 0xb7d6003e
# hda-verb /dev/snd/hwC0D0 0x12 GET_CONFIG_DEFAULT 0x00
nid = 0x12, verb = 0xf1c, param = 0x0
value = 0xb7d6005e

альтернатива

# cat /sys/class/sound/hwC0D0/init_pin_configs
0x09 0x022140f0
0x0a 0x010140f0
0x0b 0x901700f0
0x0c 0x01813051
0x0d 0x01a19031
0x0e 0xb7d6003e
0x0f 0x02c4e0f0
0x10 0x014460f0
0x12 0xb7d6005e
0x15 0x014510f0

Затем измените первые 2 бита в конфигурации на «нет соединения»(01). Значение битов конфигурации описано в спецификации HDA -7.3.3.31 Конфигурация по умолчанию .
Итак,0x0e 0xb7d6003e-> 0x0e 0x77d6003eи0x12 0xb7d6005e-> 0x12 0xb7d6005e.

Используя эти значения, можно создать файл исправления, например /lib/firmware/patch_cs4207со следующим содержимым:

[codec]
0x10134207 0x10134207 0

[pincfg]
0x0e 0x77d6003e
0x12 0x77d6005e

В разделе [кодек] необходимо указать идентификатор поставщика _, идентификатор подсистемы _и адрес.

После этого файл патча необходимо загрузить с помощью snd _hda _intel.Для этого необходимо добавить следующую строку в/etc/modprobe.d/alsa-base.conf:

options snd-hda-intel patch=patch_cs4207

После перезагрузки дальнейшая настройка ALSA не требуется, и SPDIF -In распознается:

# arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: CS4207 Analog [CS4207 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: CS4207 Digital [CS4207 Digital]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
0
18.03.2021, 23:00

Теги

Похожие вопросы