Попробуйте этот тест:
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
Сделать 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