Eu tenho um MacBook Pro6,2 (meados de 2010 15 ', Intel IronLake + Nvidia GT216) no qual eu instalei o Ubuntu 16.04.3 e atualizei para o Linux 4.13.0-29-genérico. Decidi EFI Boot para melhorar a ACPI e ter todos os dispositivos acessíveis nativamente (Macs pré-2011 habilitam todo hardware para qualquer inicialização EFI, 2011 e mais tarde precisam ter o Apple-set-os corrigido para habilitar todo o hardware) e para inicialização mais rápida. Nesta máquina em particular, eu prefiro ter o Intel acionando o monitor interno, e o Nvidia o externo com o seguinte outb no grub2:
outb 0x728 1 --> Switch select
outb 0x710 2 --> Switch display
outb 0x740 2 --> Switch DDC (Display Data Controller?)
Eu não tenho outb 0x750, pois isso desativa o dGPU no nível PCI-e (ele desaparece do PCI-e inteiramente com outb 0x750 0), mas eu o faço para que o monitor LVDS 1680x1050 seja acionado apenas pela Intel. Ambos os dispositivos Nvidia (GPU e controlador de áudio HDMI / DP) aparecem e são carregados.
$ lspci -nnk | grep -A 3 10de
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GT216M [GeForce GT 330M] [10de:0a29] (rev a2)
Subsystem: Apple Inc. GT216M [GeForce GT 330M] [106b:00c7]
Kernel driver in use: nouveau
Kernel modules: nvidiafb, nouveau
01:00.1 Audio device [0403]: NVIDIA Corporation GT216 HDMI Audio Controller [10de:0be2] (rev a1)
Kernel driver in use: snd_hda_intel
Kernel modules: snd_hda_intel
A questão é que o áudio HDMI não funciona (funciona com todos os lançamentos macOS suportados, então é definitivamente o linux.) Eu verifiquei o ELD:
$ grep -R -e eld_valid /proc/asound/
/proc/asound/card1/eld#0.0:eld_valid 0
/proc/asound/card1/eld#1.0:eld_valid 0
/proc/asound/card1/eld#2.0:eld_valid 0
/proc/asound/card1/eld#3.0:eld_valid 0
/proc/asound/NVidia/eld#0.0:eld_valid 0
/proc/asound/NVidia/eld#1.0:eld_valid 0
/proc/asound/NVidia/eld#2.0:eld_valid 0
/proc/asound/NVidia/eld#3.0:eld_valid 0
$ grep -R -e monitor_present /proc/asound/
/proc/asound/card1/eld#0.0:monitor_present 0
/proc/asound/card1/eld#1.0:monitor_present 0
/proc/asound/card1/eld#2.0:monitor_present 0
/proc/asound/card1/eld#3.0:monitor_present 0
/proc/asound/NVidia/eld#0.0:monitor_present 0
/proc/asound/NVidia/eld#1.0:monitor_present 0
/proc/asound/NVidia/eld#2.0:monitor_present 0
/proc/asound/NVidia/eld#3.0:monitor_present 0
# Note: The /proc/asound/NVidia folder is just a symlink --> /proc/asound/card1
Eu também recebi o edid para meu monitor, ambos de get-edid
e ioreg -l | grep IODisplayEDID
e ambos eram idênticos, então o EDID estava sendo capturado corretamente. Note que o vídeo HDMI funciona perfeitamente, apenas o áudio não é funcional. Meu monitor é um Samsung SyncMaster TA550. Múltiplos outros monitores HDMI e TVs também não emitem áudio. Vou postar o EDID da Samsung aqui, se for útil.
$ diff edid_fromi2c.txt edid_fromioreg.txt
$ echo $?
0 # The files are identical
$ cat edid_fromi2c.txt | base64
AP///////wBMLbUHAAAAADAUAQOANR54CrpBoVlVnSgNUFS/74BxT4EAgUCBgJUAlQ+zAAEBAjqA
GHE4LUBYLEUAEyshAAAeZiFQsFEAGzBAcDYAEyshAAAeAAAA/QAYSxpRFwAKICAgICAgAAAA/ABT
TVQyNEE1NTAKICAgAVcCAyPxS5AfBBMFFAMSICEiIwkHB4MBAADiAA9nAwwAEAC4LQEdAHJR0B4g
bihVAKBaAAAAHgEdALxS0B4guChVQKBaAAAAHgEdgBhxHBYgWCwlAKBaAAAAngEdgNByHBYgECwl
gKBaAAAAngAAAAAAAAAAAAAAAAAAAAAAAAAADQ==
$ cat edid_fromi2c.txt | edid-decode
... <cut for clarity> ...
CEA extension block
Extension version: 3
31 bytes of CEA data
Video data block
... <cut for clarity> ...
Audio data block
Linear PCM, max channels 1
Supported sample rates (kHz): 48 44.1 32
Supported sample sizes (bits): 24 20 16
Lista de dispositivos ALSA:
$ aplay -L
default
Playback/recording through the PulseAudio sound server
null
Discard all samples (playback) or generate zero samples (capture)
pulse
PulseAudio Sound Server
sysdefault:CARD=MID
HDA Intel MID, CS4206 Analog
Default Audio Device
front:CARD=MID,DEV=0
HDA Intel MID, CS4206 Analog
Front speakers
surround21:CARD=MID,DEV=0
HDA Intel MID, CS4206 Analog
2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=MID,DEV=0
HDA Intel MID, CS4206 Analog
4.0 Surround output to Front and Rear speakers
surround41:CARD=MID,DEV=0
HDA Intel MID, CS4206 Analog
4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=MID,DEV=0
HDA Intel MID, CS4206 Analog
5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=MID,DEV=0
HDA Intel MID, CS4206 Analog
5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=MID,DEV=0
HDA Intel MID, CS4206 Analog
7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=MID,DEV=0
HDA Intel MID, CS4206 Digital
IEC958 (S/PDIF) Digital Audio Output
dmix:CARD=MID,DEV=0
HDA Intel MID, CS4206 Analog
Direct sample mixing device
dmix:CARD=MID,DEV=1
HDA Intel MID, CS4206 Digital
Direct sample mixing device
dsnoop:CARD=MID,DEV=0
HDA Intel MID, CS4206 Analog
Direct sample snooping device
dsnoop:CARD=MID,DEV=1
HDA Intel MID, CS4206 Digital
Direct sample snooping device
hw:CARD=MID,DEV=0
HDA Intel MID, CS4206 Analog
Direct hardware device without any conversions
hw:CARD=MID,DEV=1
HDA Intel MID, CS4206 Digital
Direct hardware device without any conversions
plughw:CARD=MID,DEV=0
HDA Intel MID, CS4206 Analog
Hardware device with all software conversions
plughw:CARD=MID,DEV=1
HDA Intel MID, CS4206 Digital
Hardware device with all software conversions
hdmi:CARD=NVidia,DEV=0
HDA NVidia, HDMI 0
HDMI Audio Output
hdmi:CARD=NVidia,DEV=1
HDA NVidia, HDMI 0
HDMI Audio Output
hdmi:CARD=NVidia,DEV=2
HDA NVidia, HDMI 0
HDMI Audio Output
hdmi:CARD=NVidia,DEV=3
HDA NVidia, HDMI 0
HDMI Audio Output
dmix:CARD=NVidia,DEV=3
HDA NVidia, HDMI 0
Direct sample mixing device
dmix:CARD=NVidia,DEV=7
HDA NVidia, HDMI 0
Direct sample mixing device
dmix:CARD=NVidia,DEV=8
HDA NVidia, HDMI 0
Direct sample mixing device
dmix:CARD=NVidia,DEV=9
HDA NVidia, HDMI 0
Direct sample mixing device
dsnoop:CARD=NVidia,DEV=3
HDA NVidia, HDMI 0
Direct sample snooping device
dsnoop:CARD=NVidia,DEV=7
HDA NVidia, HDMI 0
Direct sample snooping device
dsnoop:CARD=NVidia,DEV=8
HDA NVidia, HDMI 0
Direct sample snooping device
dsnoop:CARD=NVidia,DEV=9
HDA NVidia, HDMI 0
Direct sample snooping device
hw:CARD=NVidia,DEV=3
HDA NVidia, HDMI 0
Direct hardware device without any conversions
hw:CARD=NVidia,DEV=7
HDA NVidia, HDMI 0
Direct hardware device without any conversions
hw:CARD=NVidia,DEV=8
HDA NVidia, HDMI 0
Direct hardware device without any conversions
hw:CARD=NVidia,DEV=9
HDA NVidia, HDMI 0
Direct hardware device without any conversions
plughw:CARD=NVidia,DEV=3
HDA NVidia, HDMI 0
Hardware device with all software conversions
plughw:CARD=NVidia,DEV=7
HDA NVidia, HDMI 0
Hardware device with all software conversions
plughw:CARD=NVidia,DEV=8
HDA NVidia, HDMI 0
Hardware device with all software conversions
plughw:CARD=NVidia,DEV=9
HDA NVidia, HDMI 0
Hardware device with all software conversions
Nenhum dos dispositivos ALSA HDMI funciona. speaker-test
falha, assim como qualquer outro programa da ALSA. Eu tentei os drivers proprietários da Nvidia (eu não quero usá-los, mas apenas para ver) e eles tiveram o mesmo problema. O que está acontecendo?