CS4207의 SPDIF 입력에서 오디오를 캡처하려면 ALSA를 활성화하세요.

CS4207의 SPDIF 입력에서 오디오를 캡처하려면 ALSA를 활성화하세요.

Congatec을 활용하는 맞춤형 플랫폼SA5 모듈그리고 추가CS4207 HDA 코덱코덱 디지털 SPDIF 입출력을 사용하려고 합니다. Congatec의 HDA 디자인을 복사했습니다.콩가-세발평가판.

SPDIF 출력(앰프에 연결됨)은 기본적으로 작동합니다. 여기서는 문제가 없습니다.
그러나 신호를 녹음하는 데 필요한 SPDIF 입력은 약간의 두통을 줍니다.

테스트 중에 Xubuntu 20.04를 사용하고 있었습니다.

Linux Test-01 5.4.0-48-generic #52-Ubuntu SMP Thu Sep 10 10:58:49 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

나중에 buildroot에서 이러한 기능을 구현할 것입니다.

내가 지금까지 무엇을 했는지

사용하여hda_analyser.pySPDIF 입력 위젯이 기본적으로 비활성화되어 있는 것을 볼 수 있습니다. 수동으로 활성화해도 결과에는 영향이 없습니다.

# Node 0x07 SPDIF Reciver Input Converter - Enable
hda-verb /dev/snd/hwC0D0 0x07 0x70d 0x01
# Node 0x0f SPDIF Reciver Input Pin - Enable
hda-verb /dev/snd/hwC0D0 0x0f 0x707 0x20

SPDIF 입력에 신호를 제공하면 hda_analyticr는 신호의 유효한 플래그와 제어 단어 내용을 표시합니다. 그래서 소스가 좋은 것 같아요. hda_analyticr에 신호가 없고 유효한 신호가 있습니다.

CS4207의 "SPDIF RX to TX1 루프스루" 기능을 수동으로 활성화하면:

# Enable Rx to Tx1 Loopthru
hda-verb /dev/snd/hwC0D0 0x11 0x0500 0x01 && hda-verb /dev/snd/hwC0D0 0x11 0x0400 0x402a

SPDIF 출력에 연결된 스피커에서 SPDIF 입력으로 들어오는 신호도 들을 수 있습니다.

-> 그래서 내 결론은 하드웨어 부분은 괜찮을 것이라는 것이다.

ALSA 측에서는 IEC958 디지털 캡처 장치가 목록에 없기 때문에 구성 문제가 있다고 생각합니다. 하지만 이건 이해할 수 없는 부분이다. 구성 경로( )가 너무 많고 /usr/share/pulseaudio/alsa-mixer/ /etc/alsa/conf.d/ /usr/share/alsa/다른 항목으로 채워져 있는 것처럼 보이는 자리 표시자가 있는 구성 템플릿도 더 많습니다. 하지만 어떤 구성을 효과적으로 사용해야 할지 알 수 있는 방법을 찾지 못했습니다.
ALSA 문서에서도 힌트를 찾을 수 없습니다.

산출aplay -l

**** List of PLAYBACK 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: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 10: HDMI 4 [HDMI 4]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

출력 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

출력 pacmd list-cards:

1 card(s) available.
    index: 0
        name: <alsa_card.pci-0000_00_0e.0>
        driver: <module-alsa-card.c>
        owner module: 7
        properties:
                alsa.card = "0"
                alsa.card_name = "HDA Intel PCH"
                alsa.long_card_name = "HDA Intel PCH at 0x91410000 irq 143"
                alsa.driver_name = "snd_hda_intel"
                device.bus_path = "pci-0000:00:0e.0"
                sysfs.path = "/devices/pci0000:00/0000:00:0e.0/sound/card0"
                device.bus = "pci"
                device.vendor.id = "8086"
                device.vendor.name = "Intel Corporation"
                device.product.id = "5a98"
                device.product.name = "Celeron N3350/Pentium N4200/Atom E3900 Series Audio Cluster"
                device.form_factor = "internal"
                device.string = "0"
                device.description = "Built-in Audio"
                module-udev-detect.discovered = "1"
                device.icon_name = "audio-card-pci"
        profiles:
                input:analog-stereo: Analog Stereo Input (priority 65, available: unknown)
                output:analog-stereo: Analog Stereo Output (priority 6500, available: unknown)
                output:analog-stereo+input:analog-stereo: Analog Stereo Duplex (priority 6565, available: unknown)
                output:iec958-stereo: Digital Stereo (IEC958) Output (priority 5500, available: unknown)
                output:iec958-stereo+input:analog-stereo: Digital Stereo (IEC958) Output + Analog Stereo Input (priority 5565, available: unknown)
                output:hdmi-stereo: Digital Stereo (HDMI) Output (priority 5900, available: no)
                output:hdmi-stereo+input:analog-stereo: Digital Stereo (HDMI) Output + Analog Stereo Input (priority 5965, available: no)
                output:hdmi-surround: Digital Surround 5.1 (HDMI) Output (priority 800, available: no)
                output:hdmi-surround+input:analog-stereo: Digital Surround 5.1 (HDMI) Output + Analog Stereo Input (priority 865, available: no)
                output:hdmi-surround71: Digital Surround 7.1 (HDMI) Output (priority 800, available: no)
                output:hdmi-surround71+input:analog-stereo: Digital Surround 7.1 (HDMI) Output + Analog Stereo Input (priority 865, available: no)
                output:hdmi-stereo-extra1: Digital Stereo (HDMI 2) Output (priority 5700, available: no)
                output:hdmi-stereo-extra1+input:analog-stereo: Digital Stereo (HDMI 2) Output + Analog Stereo Input (priority 5765, available: no)
                output:hdmi-surround-extra1: Digital Surround 5.1 (HDMI 2) Output (priority 600, available: no)
                output:hdmi-surround-extra1+input:analog-stereo: Digital Surround 5.1 (HDMI 2) Output + Analog Stereo Input (priority 665, available: no)
                output:hdmi-surround71-extra1: Digital Surround 7.1 (HDMI 2) Output (priority 600, available: no)
                output:hdmi-surround71-extra1+input:analog-stereo: Digital Surround 7.1 (HDMI 2) Output + Analog Stereo Input (priority 665, available: no)
                output:hdmi-stereo-extra2: Digital Stereo (HDMI 3) Output (priority 5700, available: no)
                output:hdmi-stereo-extra2+input:analog-stereo: Digital Stereo (HDMI 3) Output + Analog Stereo Input (priority 5765, available: no)
                output:hdmi-surround-extra2: Digital Surround 5.1 (HDMI 3) Output (priority 600, available: no)
                output:hdmi-surround-extra2+input:analog-stereo: Digital Surround 5.1 (HDMI 3) Output + Analog Stereo Input (priority 665, available: no)
                output:hdmi-surround71-extra2: Digital Surround 7.1 (HDMI 3) Output (priority 600, available: no)
                output:hdmi-surround71-extra2+input:analog-stereo: Digital Surround 7.1 (HDMI 3) Output + Analog Stereo Input (priority 665, available: no)
                output:hdmi-stereo-extra3: Digital Stereo (HDMI 4) Output (priority 5700, available: no)
                output:hdmi-stereo-extra3+input:analog-stereo: Digital Stereo (HDMI 4) Output + Analog Stereo Input (priority 5765, available: no)
                output:hdmi-surround-extra3: Digital Surround 5.1 (HDMI 4) Output (priority 600, available: no)
                output:hdmi-surround-extra3+input:analog-stereo: Digital Surround 5.1 (HDMI 4) Output + Analog Stereo Input (priority 665, available: no)
                output:hdmi-surround71-extra3: Digital Surround 7.1 (HDMI 4) Output (priority 600, available: no)
                output:hdmi-surround71-extra3+input:analog-stereo: Digital Surround 7.1 (HDMI 4) Output + Analog Stereo Input (priority 665, available: no)
                output:hdmi-stereo-extra4: Digital Stereo (HDMI 5) Output (priority 5700, available: no)
                output:hdmi-stereo-extra4+input:analog-stereo: Digital Stereo (HDMI 5) Output + Analog Stereo Input (priority 5765, available: no)
                output:hdmi-surround-extra4: Digital Surround 5.1 (HDMI 5) Output (priority 600, available: no)
                output:hdmi-surround-extra4+input:analog-stereo: Digital Surround 5.1 (HDMI 5) Output + Analog Stereo Input (priority 665, available: no)
                output:hdmi-surround71-extra4: Digital Surround 7.1 (HDMI 5) Output (priority 600, available: no)
                output:hdmi-surround71-extra4+input:analog-stereo: Digital Surround 7.1 (HDMI 5) Output + Analog Stereo Input (priority 665, available: no)
                off: Off (priority 0, available: unknown)
        active profile: <output:analog-stereo+input:analog-stereo>
        sinks:
                alsa_output.pci-0000_00_0e.0.analog-stereo/#0: Built-in Audio Analog Stereo
        sources:
                alsa_output.pci-0000_00_0e.0.analog-stereo.monitor/#0: Monitor of Built-in Audio Analog Stereo
                alsa_input.pci-0000_00_0e.0.analog-stereo/#1: Built-in Audio Analog Stereo
        ports:
                analog-input-mic: Microphone (priority 8700, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "audio-input-microphone"
                analog-input-linein: Line In (priority 8100, latency offset 0 usec, available: yes)
                        properties:

                analog-output-lineout: Line Out (priority 9000, latency offset 0 usec, available: no)
                        properties:

                analog-output-speaker: Speakers (priority 10000, latency offset 0 usec, available: unknown)
                        properties:
                                device.icon_name = "audio-speakers"
                analog-output-headphones: Headphones (priority 9900, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "audio-headphones"
                iec958-stereo-output: Digital Output (S/PDIF) (priority 0, latency offset 0 usec, available: unknown)
                        properties:

                hdmi-output-0: HDMI / DisplayPort (priority 5900, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "video-display"
                hdmi-output-1: HDMI / DisplayPort 2 (priority 5800, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "video-display"
                hdmi-output-2: HDMI / DisplayPort 3 (priority 5700, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "video-display"
                hdmi-output-3: HDMI / DisplayPort 4 (priority 5600, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "video-display"
                hdmi-output-4: HDMI / DisplayPort 5 (priority 5500, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "video-display"

또 눈길을 끈 것은 댓글이었다./usr/share/pulseaudio/alsa-mixer/paths/analog-input.conf.common

;  We explicitly don't want to wrap the following sources:
;
;       CD
[...]
;       Digital/SPDIF

우리는 지금 무엇을해야합니까

그렇다면 IEC958 캡처 장치를 간단히 활성화할 수 있는 쉬운 방법이 있습니까?
수정을 위해 현재 유효한 alsa 구성을 어디서 또는 어떻게 얻을 수 있습니까?
--> 참조이 답변

편집하다

CS4207 코덱의 SPDIF-In 기능은 커널 3.5와 3.8 사이에서 손실되었습니다. 그 기간 동안 상당한 리팩토링이 이루어졌습니다.patch_cirrus.c발생하다.

따라서 IEC958 입력에 대한 ALSA 제어(커널 3.5의 기본 구성에서 복사됨)를 현재 커널 구성에 추가하더라도:

    control.67 {
        iface MIXER
        name 'IEC958 Capture Switch'
        value false
        comment {
            access 'read write'
            type BOOLEAN
            count 1
        }
    }
    control.68 {
        iface MIXER
        name 'IEC958 Capture Default'
        value '0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
        comment {
            access read
            type IEC958
            count 1
        }
    }

그 대가로 내가 얻는 것:

Found hardware: "HDA-Intel" "Cirrus Logic CS4207" "HDA:10134207,10134207,00100302 HDA:8086280a,80860101,00100000" "0x8086" "0x7270"
Hardware is initialized using a generic method
alsactl: set_control:1325: failed to obtain info for control #67 (No such file or directory)
alsactl: set_control:1325: failed to obtain info for control #68 (No such file or directory)

따라서 hda 드라이버는 시스템에 SPDIF 입력을 제공하지 않는 것 같습니다. 따라서 문제는 더 이상 ALSA 구성과 관련이 없고 hda 드라이버와 관련이 있습니다.

답변1

기타(ALSA와 관련 없는) 질문은 원본 게시물의 편집 내용을 참조하세요.

ALSA 구성에 대한 원래 질문에 대한 답변:

alsa-info역시 여기가 제일 좋은 것 같습니다 .
이 스크립트에 따르면 다음을 통해 현재 유효한 ALSA 구성을 저장할 수 있습니다.

alsactl -f /tmp/alsa-config.txt store

그런 다음 파일에서 구성을 변경할 수 있으며(이 경우 /tmp/alsa-config.txt) 다음을 통해 구성을 복원할 수 있습니다.

alsactl -f /tmp/alsa-config.txt restore

현재 유효한 ALSA 구성은 기본적으로 다음 위치에 저장됩니다.

/var/lib/alsa/asound.state

답변2

SPDIF-In을 사용할 수 있도록 설정

주요 문제는 snd_hda 프레임워크가 현재 snd_hda 프레임워크만 지원한다는 것입니다.디지털 입력 핀 1개CS4207에는 3개가 있습니다.
코덱 핀을 분석하는 동안 세 개 모두 루프를 통과하고 마지막 핀이 승리하여 ALSA에 제공됩니다. 비결은 연결된 핀을 구성하지 않는 것입니다.루프에서 건너뛰었습니다..

일반적으로 핀 구성은 BIOS에 의해 설정됩니다. 이 설정에서는 BIOS를 제어하지 않으므로 이는 옵션이 아닙니다.

또 다른 대안은 패치 파일을 사용하여 핀 구성을 설정하는 것입니다.여기이 섹션의초기 패치).

그러기 위해서는 핀이 필요해요노드 ID이 경우 현재 핀 구성을 읽습니다 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

[코덱] 아래에 공급업체 ID, 하위 시스템 ID 및 주소가 나열되어야 합니다.

이후 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

관련 정보