Hier gibt es was auf die Ohren - Eine Reise in die Untiefen der Soundkartenkonfiguration unter LinuxDieser Artikel beschreibt eine Möglichkeit, den Kopfhörerausgang auf der Vorderseite des Apple MacPro 1.1 vom August 2006 in Betrieb zu nehmen. Der Text beschreibt meinen Weg zum Schalter, der den Kopfhörerausgang aktiviert. Kaum hatte ich mein Ergebnis dem Kernelmaintainer gemeldet, wurde im Februar 2014 die Änderung in das kommende stabile Kernel-Release 3.14 integriert. Wenn man einen aktuellen Kernel verwenden, ist es wahrscheinlich dass der Kopfhörerausgang des MacPros funktioniert. SpecsDer eingesetzte Apple Mac Pro ist nun bald 7 Jahre alt (Spezifikationen). Als Betriebssystem läuft seit den ersten Tagen Gentoo Linux, das inzwischen beim Kernel 3.10.17 angekommen ist und damit ALSA k3.10.17 resp. 1.0.27.1 für Bibliotheken und Dienstprogramme beherbergt. Ich habe versucht die Beschreibung so allgemein wie möglich zu halten, um Benutzern in anderen Umgebungen keine Rätsel aufzugeben. Worauf bei der Kernelkonfiguration zu achten istDer Soundtreiber ist als Modul eingebunden und heisst snd-hda-intel. Folgende Optionen sollten bei der Konfiguration des Kernel-Moduls bedacht werden: Zur besseren Diagnostik empfiehlt sich CONFIG_SND_DEBUG=y, wenn sich der Treiber gesprächiger zeigen soll hilft CONFIG_SND_DEBUG_VERBOSE=y. Der richtige Codec sollte eingebunden werden - ist man sich unsicher kann man alle CONFIG_SND_HDA_CODEC_* in /usr/src/linux/.config aktivieren. Den aktuell verwendeten Codec liefert: cat /proc/asound/card0/codec#* | grep Codec Codec: Realtek ALC889A Die folgende Zeile ermittelt das verbaute Gerät und gibt den Soundtreiber aus: lspci -k |grep -A2 Audio
00:1b.0 Audio device: Intel Corporation 631xESB/632xESB High Definition Audio Controller (rev 09)
Kernel driver in use: snd_hda_intel
Kernel modules: snd_hda_intel
Nicht nur für die Fehlersuche, sondern allgemein empfohlen ist CONFIG_SND_HDA_HWDEP=y. Die neue und darum noch als experimentell gekennzeichnete Option CONFIG_SND_HDA_RECONFIG ermöglicht die Konfiguration der Soundchips im laufenden Betrieb. Für die CO2 Bilanz und speziell für Laptops hilft CONFIG_SND_HDA_POWER_SAVE=y Strom zu sparen. Um den Treiber zu patchen, bevor der Codec geladen wird, muss CONFIG_SND_HDA_PATCH_LOADER=y gesetzt sein. MixereinstellungenIntels HD-Audio ist die Ablösung des alten AC97 Standards. Der Standard an sich beschreibt nur Mindestanforderungen und manchmal läßt sich die verbaute Hardware trotz vorhandenem Treiber ohne zusätzliche Parameter auf Anhieb nicht vollständig nutzen, da die eingebauten Automatismen auf häufig defekte BIOS Angaben vertrauen. Wenn der Sound nicht funktioniert bzw. aus den Ausgängen nichts raus kommt, sollte man zunächst prüfen, ob alle Mixerkanäle angeschaltet und laut gestellt sind. In der Grundeinstellung ist der Masterkanal und andere gerne stummgeschaltet. Das Initskript /etc/init.d/alsasound und die Datei /etc/conf.d/alsasound beeinflussen die Mixereinstellungen zwischen Neustarts. Auf der Konsole lassen sich die Mixereinstellungen mit Hilfe von alsamixer -c0 leicht überprüfen und ändern. Stummgeschaltete Kanäle erkennt man an der Kanalkennung MM. Die Pfeiltasten ermöglichen die Navigation und Lautstärkeregelung, die Taste M schaltet zwischen stumm und aktiv um. Esc beendet den Mixer. ModulhandlingUm Treiberoptionen zu testen, lädt man den Treiber auf der Kommandozeile, nachdem man den aktiven zunächst beendet: rmmod snd-hda-intel modprobe snd-hda-intel enable_msi=1 Bricht der erste Befehl mit der Fehlermeldung Module snd_hda_intel is in use ab, ist das Modul noch in Benutzung. Alle Prozesse, die aktuell auf die Soundkarte zugreifen, listet lsof /dev/snd/* Sie müssen beendet werden (z.B. kill -9 vlc), bevor man das Soundmodul entladen kann. Falls die Module korrekt geladen wurden, listet lsmod |grep snd_hda die geladenen Soundtreiber mit ihren Abhängigkeiten. Konfiguration des TreibersDie ALSA Installation enthält das Skript alsa-info. /usr/bin/alsa-info Einmal aufgerufen erzeugt es auf Wunsch einen ausführlichen Bericht über die verbaute Hardware und Software. Im abschließenden Bericht unter Loaded sound module options finden sich die aktiven Soundmoduloptionen. Eine kurze Beschreibung dazu bietet auch modinfo snd-hda-intel. Alternativ eröffnet das Verzeichnis /sys/class/sound/hwC0D0 die Möglichkeit, Parameter der laufenden Konfiguration einzusehen und zu ändern ohne den Treiber neu laden zu müssen. (siehe HWDEP) Welche Stellschrauben der Treiber für beliebte Probleme bietet, erläutert u.a. HD-Audio.txt zu finden in den Kernelquellen unter ls /usr/src/linux/Documentation/sound/alsa/HD-Audio* Ein paar Hinweise aus dem Text der ALSA-Version des Kernels 3.10.17. Treten Wiederholungen bei der Soundwiedergabe auf, lohne die Variation des Parameters position_fix, position_fix=0 ist der Defaultwert, mögliche Varianten sind 1,2,3. Stößt man auf die Fehlermeldung "hda_intel: azx_get_response timeout, switching to single_cmd mode: last cmd=0x12345678" sollte man an dem Parameter probe_mask drehen, der die Erkennung des Codecs steuert. Die Abschaltung von MSI könne u.a. bei NVIDIA Controllern helfen sowas wie stotternden Sound zu beseitigen. enable_msi=0 schaltet MSI aus. Der model=(...) Parameter könne helfen, wenn das BIOS die interne PIN Konfiguration falsch setzt. Welche Modelloptionen möglich sind, hängt vom Codec Chip ab. (siehe oben) Die Kernel Dokumentation führt alle verfügbaren Modelle für die jeweiligen Codecs in der Datei HD-Audio-Models.txt auf. Für den einen oder anderen soll es sich gelohnt haben, hier andere Modelle auszuprobieren. Für alle Codecs gelten die Optionen nofixup und generic, die die automatische Erkennung ausschalten bzw. einschränken. Die Stromsparoption über das power_save Modul schaltet die Soundkarte aus, wenn sie für einige Zeit nicht benutzt wird. Dies kann zu lautem Knacken führen, was mitunter schwer zu beseitigen sei. Im Verzeichnis /sys/module/snd_hda_intel/parameters finden sich die zu beeinflussenden Zuweisungen. Sollte der interne Lautsprecher (speaker) und/oder der Kopfhörerausgang nicht funktionieren muss man an die rohen Codeceinstellungen ran. (Voraussetzungen siehe unter) Für den einfacheren Zugriff gibt es den HDA-Analyzer. Direkter Zugriff auf die PINs der Soundkarte mit HDA-AnalyzerDas Programm HDA-Analyzer bietet direkten Zugriff auf Soundkartenparameter über eine einfach zu bedienende grafische Benutzeroberfläche. Ohne den Treiber neu laden zu müssen, können hiermit Einstellungen spontan getestet werden. Im Fall meines MacPro1,1 funktioniert der an der Vorderseite verbaute Kopfhörerausgang nicht. Zwar verstummt der Line Out, sobald ich den Kopfhörer einstecke, doch zu hören ist nichts. Die Stummschaltung der Line Outs deutet darauf hin, dass der Kopfhörereingang erkannt wird und der Auto-Mute Mode greift. Er läßt sich bequem in den Mixereinstellungen von z.B. alsamixer einstellen. HDA-Analyzer soll weiterhelfen. Wurde das Pythonskript heruntergeladen, startet python run.py das Programm auf der Kommandozeile. Dieses Startskript holt sich aus dem Netz die aktuellen Programmbestandteile, kopiert sie in ein Verzeichnis unter /tmp und startet dann die Ansicht aus Abbildung 1. Im Programmfenster des HDA-Analyzers ist Node 0x18 ausgewählt. Der Abschnitt Config Default zeigt eine passende Beschreibung, sogar der Ort der Buchse ist angegeben. Ein paar Klicks später — sehr viele Schalter gibt es nicht — ist der Parameter gefunden und der Kopfhörerausgang funktioniert wie gedacht: Es ist die VREF Einstellung. Von HIZ auf 50 geändert und schon geht's. Natürlich stellt sich die Frage, was man da genau einstellt. In der High Definition Audio Specification Rev. 1.0a von Intel auf Seite 162 bekommt man eine Erklärung: VREF steht für Referenz Signalpegel, HIZ für Hi-Z (hohe Impedanz). Salopp ausgedrückt sei HIZ die Grundeinstellung, um angeschlossene Geräte nicht zu gefährden. Die eingestellte 50 stellt einen Prozentwert dar, 80 und 100 funktionieren genauso. Einen Pegelunterschied kann ich nicht feststellen. Die "Diff" Anzeige hilft dabei die Werte zu ermitteln, mit denen die Soundkarte während des Systemstarts konfiguriert werden soll. Abbildung 2 zeigt die Diff-Ausgabe vom HDA-Analyzer. Die mit einem Plus-Zeichen markierten Zeilen zeigen die geänderten Einstellungen. Im vorliegenden Beispiel 0xc1 für den Node 0x18 des Verbs PIN_Widget_Control. HDA-VerbAuf der Kommandozeile und im Konfigurationsskript hilft hda-verb. Bei Gentoo Linux findet es sich im Paket media-sound/alsa-tools. Folgende Zeile in ein lokales Startskript unter /etc/local.d/ geschrieben, schaltet den Kopfhörerausgang beim Hochfahren des Rechners frei. /usr/bin/hda-verb /dev/snd/hwC0D0 0x18 SET_PIN_WIDGET_CONTROL 0xc1 &>/dev/null Die andere Möglichkeit müsste die Übergabe von Initialisierungsparametern an den Treiber über die Option patch des modprobe Aufrufs sein. Hier wird dem Treiber eine Textdatei mitgegeben, die die Definitionen enthält. Näheres zum Format findet sich in HD-Audio.txt unter der Überschrift Early Patching. (siehe auch SND_HDA_PATCH_LOADER Danksagung und QuellenUbuntu User-Forum: und hier: HDA-Analyzer Homepage: UPDATE vom 21.2.2014:Seit dem 14. Februar findet sich der Patch im stabilen 3.10er Kernel und allen neueren unter dem Titel ALSA: hda - Fix missing VREF setup for Mac Pro 1,1 |
SuchelanguageThemen |
Danke für diesen Beitrag. Ich hatte das Problem mit einem Netbook der nur via Headphone sound von sich gab.
Das in diesem Beitrag erwähnte Program HDA-Analyzer ergab bei mir nur Fehlermeldung (kein output).
Ich habe dann das also-tools Software packet geladen (inklusive GUI). Dann das Programm HDAJackRetask benutzt und mit der Pin Zuordnung gespielt bis ich Sound von Speaker hatte.
Danke
Walter