EN JA
SND_HDA(4)
SND_HDA(4) FreeBSD Kernel Interfaces Manual SND_HDA(4)

名称

snd_hdaIntel High Definition Audio ブリッジデバイスドライバ

書式

このドライバをカーネルにコンパイルするためには、次の行を利用者のカーネル設定ファイルに置きます:

device sound
device snd_hda

もう一つの方法として、ブート時にモジュールとしてドライバをロードするためには、次の行を loader.conf(5) に置きます:

snd_hda_load="YES"

解説

High Definition (HD) オーディオ仕様は、古い AC'97 仕様の論理的な後継者として Intel によって開発され、より多くのチャネル、より多くの詳細な形式、いくつかの論理的なオーディオデバイスのサポートと汎用 DMA チャネルを可能とするより高い帯域幅のような、いくつかの利点があります。

snd_hda ドライバは、一般的なオーディオドライバ sound(4) が、このハードウェアで使用できる、HDA バスコントローラドライバ (hdac)、 HDA コーデックドライバ (hdacc) と HDA コーデックオーディオ機能ブリッジドライバ (hdaa) を含んでいます。オーディオ機能のみ snd_hda によってサポートされます。モデムと他の可能な機能は、実装されていません。

snd_hda ドライバは、Intel High Definition Audio 仕様のリビジョン 1.0 に準拠するハードウェアをサポートし、オーディオデバイスを取り扱うための Microsoft Universal Audio Architecture (UAA) 草稿 (リビジョン 0.7b) とそっくりに振る舞おうとします。

HDA と UAA 仕様に従って、それらのシステムに存在する HDA バスとコーデックの数、それらのオーディオ能力と提供された BIOS の設定に依存して、 snd_hda ドライバは、しばしばいくつかの PCM オーディオデバイスを提供します。例えば、メインの後部 7.1 出力と入力のための 1 つのデバイス、前部 (フロント) の独立しているヘッドホンのコネクタのための 1 つのデバイス、と SPDIF または HDMI オーディオ入力/出力のための 1 つのデバイスです。オーディオ入力と出力の割り当ては、 device.hints(5) またはr sysctl(8) で調整されます。ドライバの冗長なブートメッセージは、ドライバの操作と現在のオーディオのセットアップに関する多くの情報を提供します。

デフォルトのオーディオデバイスは、 sound(4) で説明されるか、またはアプリケーションの設定で明白に指定されるように、 hw.snd.default_unit sysctl を設定することによって、調整されます。

ブート時設定

次の変数は、 device.hints(5) ファイルを通してブート時に利用可能です:
hint.hdac.%d.config
さまざまな利用可能なコントローラのオプション設定します。利用可能な値は、次の通りです: “ 64bit”, “ dmapos”, “ msi”。“ nomsi”のような“ no”を前に付けらけたオプションは、正反対を意味して、優先します。空白類とコンマでオプションを区切ることができます。
hint.hdac.%d.msi
MSI (Message Signaled Interrupts) のサポートを制御します。
hint.hdac.%d.cad%d.nid%d.config
hint.hdaa.%d.nid%d.config と同じです。
hint.hdaa.%d.config
さまざまな利用可能なオーディオ機能のオプションを設定します。利用可能な値は、次の通りです: “ eapdinv”, “ ivref”, “ ivref50”, “ ivref80”, “ ivref100”, “ fixedrate”, “ forcestereo”, “ ovref”, “ ovref50”, “ ovref80”, “ ovref100”, “ senseinv”, “ softpcmvol”, と“ vref”。“ nofixedrate”のような“ no”を前に付けらけたオプションは、正反対を意味して、優先します。空白類とコンマでオプションを区切ることができます。

eapdinv”オプションは、External Amplifier Power Down シグナルを逆にします。“ fixedrate”は、48KHz 以外のすべてのサンプリングレートを拒否します。“ forcestereo”は、モノラルの再生/録音を拒否します。“ senseinv”オプションは、ジャック検出ロジックを逆にします。“ ivrefX”と“ ovrefX”オプションは、外部マイクロホンに電源を供給するために使用される電圧を制御します。

hint.hdaa.%d.gpio_config
BIOS によって設定されたオーディオ機能 GPIO ピン配置を無効にします。 1 組の空白で分離された“ num= value”ペアとして指定されます、ここで num は、GPIO 回線番号で、 value は、次のもののうちの 1 つです: “ keep”, “ set”, “ clear”, “ disable”と“ input”。

GPIO”は、システムインテグレータ (積分器) が、外部の muter、アンプなどを制御するために時々使用するコーデックの汎用の I/O ピンです。利用者に音がないか、または音量が適切でないなら、利用者のシステムに最適な設定を見つけるために GPIO 設定で少し実験しなければならないかもしれません。

hint.hdaa.%d.nid%d.config
BIOS によって設定されたオーディオ機能のピン配置を無効にします。先導する“0x”がある 32 ビットの 16 進数値として、または、空白で区切られた“ option= value”ペアとして、指定されます。
hint.pcm.%d.rec.autosrc
自動録音源の機能を次のように制御します:
0
無効にされた
1
いったんアタッチ
2
有効にされた
有効にされたとき、ドライバは、ミキサの録音源をジャック存在検知状態を使用して接続された入力に自動的に設定します。

ピン配置は、コーデックの使用法に関する UAA ドライバの主な情報源です。この情報は、通常、コーデックメーカによって提供され、特有のシステム要件のためにシステムインテグレータによって調整されます。 snd_hda ドライバによって、ユーザは、インテグレータの誤りを修正するため、または代替の方法で、(例えば、ステレオ出力と単一の 5.1 の出力の代わりに 2 入力を得るため、) 利用可能なコーデックを使用するためにそれを上書きすることができます。

次のオプションがサポートされます:

as
アソシエーション番号。アソシエーションは、複雑なマルチピンデバイスを形成するために個別のピンを分類するために使用されます。例えば、7.1 入力/出力のための 4 つのコネクタを分類するか、または同じ入力デバイスのためのソースとしていくつかの入力コネクタを扱うため。 0 から 15 までの数値としてアソシエーション番号を指定できます。 0 の値は、無効にされたピンを意味します。 15 の値は、1 組の独立したアソシエーションされないピンです。各アソシエーションは、同じ指示 (in/out) のピンだけを含み、不可分に (すべてのピンまたはなし) 検出されます。個々の PCM オーディオデバイスは、入力と出力アソシエーションのペアごとに作成されます。
seq
シーケンス番号。アソシエーションの内側のピンを順序付けするために使用されるアソシエーション番号ごとにユニークです。 0 から 15 までの数値としてシーケンス番号を指定できます。

シーケンス番号 15 には、出力アソシエーションのための特別な意味があります。この番号の出力ピンとデバイスタイプ“ Headphones” (ヘッドホン) は、そのアソシエーションの最初のピンを (ジャック検出がサポートされているなら、自動的に音を消 (mute) して) 複製します。

シーケンス番号 14 と 15 には、入力のアソシエーションのための特別の意味があります。アソシエーション中のそれらの存在は、それぞれ多重化されるか、または混合されるように、それを定義します。それらが存在しなくて、アソシエーション中に 2 つ以上あるなら、アソシエーションは、多重チャネルの入力を提供します。

多重チャネルの入力/出力のアソシエーションのために、シーケンス番号は、次のチャネルペア位置をエンコードします: 0 - Front, 1 - Center/LFE, 2 - Back, 3 - Front Wide Center, 4 - Side. 標準の組み合わせは、次の通りです: (0) - Stereo; (0, 2), (0, 4) - Quadro; (0, 1, 2), (0, 1, 4) - 5.1; (0, 1, 2, 4) - 7.1.

device
デバイスタイプ。 0 から 15 までの数値として、または次の名前として指定できます: “ Line-out”, “ Speaker”, “ Headphones,”“ CD”, “ SPDIF-out”, “ Digital-out”, “ Modem-line”, “ Modem-handset”, “ Line-in”, “ AUX”, “ Mic”, “ Telephony”, “ SPDIF-in”, “ Digital-in”, “ Res.E”または“ Other”。また、デバイスタイプは、ピン方向 (in/out) について説明します。例えば、“ CD”は、常に入力ピンを意味しますが、“ Headphones” (ヘッドホン) は、常に出力を意味します。
conn
接続タイプ。 0 から 3 までの数値として指定できます: また、特別な名前“ Jack”, “ None”, “ Fixed”または“ Both”の 1 つとして接続タイプを指定できます。“ None”の接続タイプのピンは、無効にされます。
ctype
接続の物理的なタイプ。 0 から 15 までの数値として指定できます。これは、参照だけの値です。それは、 snd_hda ドライバによって無視されます。
color
接続色。 0 から 15 までの数値として、または名前“ Unknown”, “ Black”, “ Grey”, “ Blue”, “ Green”, “ Red”, “ Orange”, “ Yellow”, “ Purple”, “ Pink”, “ Res.A”, “ Res.B”, “ Res.C”, “ Res.D”, “ White”または“ Other”の 1 つを指定できます。これは、参照だけの値です。それは、 snd_hda ドライバによって無視されます。
loc
コネクタの物理的な位置。 0 から 63 までの数値として指定できます。これは、参照だけの値です。それは、 snd_hda ドライバによって無視されます。
misc
その他のビット。 0 から 15 までの数値として指定できます。ビット 0 には、特別の意味があります。設定されると、ジャック検出がハードウェアで実装されないことを意味します。

実行時設定

次の sysctl(8) 変数は、すべての sound(4) デバイスで利用可能な変数に加えて利用可能です:
dev.hdac.%d.pindump
これを 0 以外の値に設定することは、現在のピン配置、主なケーパビリティとコントローラのすべてのオーディオ機能のジャックセンス状態をコンソールと syslog にダンプします。
dev.hdac.%d.polling
ポーリングモードを有効にします。このモードで、ドライバは、割り込みの代わりに callout(9) を使用してタイマの刻みごとにデバイス状態について問い合わせることによって、動作します。ポーリングは、デフォルトで無効にされています。利用者が奇妙な割り込み問題に遭遇しないか、またはデバイスが全く割り込みを生成することができないなら、それを有効にしないでください。
dev.hdaa.%d.config
hint.hdaa.%d.config 調整変数と同等なランタイム。
dev.hdaa.%d.gpi_state
GPI ラインの現在の状態。
dev.hdaa.%d.gpio_state
GPIO ラインの現在の状態。
dev.hdaa.%d.gpio_config
hint.hdaa.%d.gpio.config 調整変数と同等なランタイム。
dev.hdaa.%d.gpo_state
GPO ラインの現在の状態。
dev.hdaa.%d.nid%d_config
hint.hdaa.%d.nid%d.config 調整変数と同等なランタイム。
dev.hdaa.%d.nid%d_original
BIOS によって書き込まれたオリジナルのピン配置。
dev.hdaa.%d.reconfig
これを 0 以外の値に設定することは、ドライバに既存の pcm デバイスと破壊させ、 dev.hdaa.%d.nid%d_config を通して設定された新しいピン配置を処理させます。
dev.pcm.%d.play.32bit, dev.pcm.%d.rec.32bit
HDA コントローラは、16 ビット以上のすべてのサンプルに対して 32 ビット表現を使用します。これらの変数は、CODEC によって 32 ビットのうちのどのくらいのビットが使用されるすべきかを指定することができます。コーデックの能力によって、指定できる値は、20、24 と 32 ビットです。デフォルト値は、24 です。
dev.pcm.%d.rec.autosrc
hint.pcm.%d.rec.autosrc 調整変数に同等な実行時変数。

使用例

例えば、Realtek ALC888 HDA コーデックがある HP Compaq DX2300 を取り上げます。このシステムには、前側に 2 つのオーディオコネクタ、後側に 3 つのオーディオコネクタ、と 1 つの内部スピーカがあります。冗長なドライバ出力とコーデックデータシートに従って、このコーデックには、5 つのステレオ DAC と 2 つの ADC があり、それらすべては、どんなコーデックピン (外部のコネクタ) にも結線可能です。すべてのコーデックピンは、リバーシブル (反転可能) (入力または出力としていずれにも設定できます) です。

とても高いコーデックの一様性と柔軟性によって、ドライバは、ピン配置で説明された要求されるピンの使用法によって、多くの異なった方法でそれを設定できます。ドライバは、冗長なメッセージが有効にされるとき、そのようなデフォルトのピン配置を次のように、報告します:

hdaa0: nid   0x    as seq device       conn  jack    loc        color   misc 
hdaa0: 20 01014020 2  0  Line-out      Jack  1/8     Rear       Green   0 
hdaa0: 21 99130110 1  0  Speaker       Fixed ATAPI   Onboard    Unknown 1 
hdaa0: 22 411111f0 15 0  Speaker       None  1/8     Rear       Black   1 DISA 
hdaa0: 23 411111f0 15 0  Speaker       None  1/8     Rear       Black   1 DISA 
hdaa0: 24 01a19830 3  0  Mic           Jack  1/8     Rear       Pink    8 
hdaa0: 25 02a1983f 3  15 Mic           Jack  1/8     Front      Pink    8 
hdaa0: 26 01813031 3  1  Line-in       Jack  1/8     Rear       Blue    0 
hdaa0: 27 0221401f 1  15 Headphones    Jack  1/8     Front      Green   0 
hdaa0: 28 411111f0 15 0  Speaker       None  1/8     Rear       Black   1 DISA 
hdaa0: 30 411111f0 15 0  Speaker       None  1/8     Rear       Black   1 DISA 
hdaa0: 31 411111f0 15 0  Speaker       None  1/8     Rear       Black   1 DISA

ここで、ID (nid) 25 と 27 があるノードは、前部 (フロント) パネルコネクタ (Jack, Front) で、nids 20, 24 と 26 は、後部 (リア) パネルコネクタ (Jack, Rear) で、そして、nid21 は、内蔵のスピーカ (Fixed, Onboard) であることが分かります。 nids 22, 23, 28, 30 and 31 があるピンは、"None"接続性のためにドライバによって無効にされます。それで、ピンカウントと記述は、存在するコネクタにマッチします。

アソシエーション (as) とシーケンス (seq) フィールド値を使用して、ピンは、3 つのアソシエーションに分類されます:

hdaa0: Association 0 (1) out: 
hdaa0:   Pin nid=21 seq=0 
hdaa0:   Pin nid=27 seq=15 
hdaa0: Association 1 (2) out: 
hdaa0:   Pin nid=20 seq=0 
hdaa0: Association 2 (3) in: 
hdaa0:   Pin nid=24 seq=0 
hdaa0:   Pin nid=26 seq=1 
hdaa0:   Pin nid=25 seq=15

pcm(4) デバイスは、2 つのアソシエーションを使用します: 1 つは、再生と 1 つは、録音のためです。処理され、増加する番号順で pcm(4) デバイスに割り当てられたアソシエーション。この場合、アソシエーション #0 (1) は、内部のスピーカとヘッドホンジャック接続でのスピーカの自動ミュート (mute) がある Headphones (ヘッドホン) ジャックを使用した pcm0 デバイス再生となります。アソシエーション #1 (2) は、 Line-out ジャックを使用した pcm1 再生となります。アソシエーション #3 (3) は、外部のマイクロホンと Line-in ジャックを使用した pcm0 録音になります。

snd_hda ドライバは、操作論理を診断して、現在のコーデック設定について説明する大規模な冗長なメッセージを提供します。

device.hints(5) を使用して、広範囲の異なったオーディオセットアップを許可して、既存のピンの設定を変更するのは可能です。ここに、この特定のハードウェアのための可能ないくつかのセットアップに関するいくつかの例があります:

例 1

次の device.hints(5) オプションの設定

hint.hdac.0.cad0.nid20.config="as=1" 
hint.hdac.0.cad0.nid21.config="as=2"

は、ライン出力端子とスピーカ機能を交換します。それで、 pcm0 デバイスは、ライン出力端子とヘッドホン端子で演奏します。ライン出力端子は、ヘッドホンジャック接続のとき音が消されます。 pcm0 で録音することは、2 つの外部のマイクロホンとライン入力端子ジャックから行われます。 pcm1 再生は、内部のスピーカから行われます。

例 2

次の device.hints(5) オプションの設定

hint.hdac.0.cad0.nid20.config="as=1 seq=15 device=Headphones" 
hint.hdac.0.cad0.nid27.config="as=2 seq=0" 
hint.hdac.0.cad0.nid25.config="as=4 seq=0"

は、ヘッドホンとマイクロホンの 1 つを個別のデバイスに分けます。 pcm0 デバイスは、ライン出力端子接続のスピーカを自動ミュート (mute) して、内部のスピーカとライン出力端子で演奏します。 pcm0 で録音することは、1 つの外部のマイクロホンとライン入力端子ジャックからの入力を使用します。 pcm1 デバイスは、前部 (フロント) コネクタに接続されたヘッドホン (ヘッドホンとマイク) に完全に専用となります。

例 3

次の device.hints(5) オプションの設定

hint.hdac.0.cad0.nid20.config="as=1 seq=0" 
hint.hdac.0.cad0.nid26.config="as=2 seq=0" 
hint.hdac.0.cad0.nid27.config="as=3 seq=0" 
hint.hdac.0.cad0.nid25.config="as=4 seq=0" 
hint.hdac.0.cad0.nid24.config="as=5 seq=0 device=Line-out" 
hint.hdac.0.cad0.nid21.config="as=6 seq=0"

は、次の 4 つの独立しているデバイスが与えられます: pcm0 (ライン出力端子とライン入力端子), pcm1 (ヘッドホンとマイク), pcm2 (retask された後部のマイクジャックを通して追加のライン出力端子) と pcm3 (内部スピーカ)。

例 4

次の device.hints(5) オプションの設定

hint.hdac.0.cad0.nid20.config="as=1 seq=0" 
hint.hdac.0.cad0.nid24.config="as=1 seq=1 device=Line-out" 
hint.hdac.0.cad0.nid26.config="as=1 seq=2 device=Line-out" 
hint.hdac.0.cad0.nid21.config="as=2 seq=0"

は、2 つのデバイスが与えられます: 3 つの後部コネクタ (ライン出力端子と retask されたマイクとライン入力端子) を通した 5.1 再生、と前部コネクタのヘッドホン (ヘッドホンとマイク) のための pcm0。内部スピーカの再生のための pcm1。ヘッドホン接続のときに、後部コネクタは、音を消されます。

ミキサ制御

コーデックの設定によって、これらの制御と信号ソースを sound(4) に報告できました:
vol
全体的な出力レベル (ボリューム)
rec
全体的な録音レベル
igain
入力から出力へのモニタリングのループバックレベル
ogain
外部のアンプの制御
pcm
PCM 再生
mix
入力ミックス
mic
最初の外部、または 2 番目の内部のマイクロホン入力
monitor
最初の内部、または 2 番目の外部のマイクロホン入力
line, line1, line2, line3
アナログの (ライン) 入力
dig1, dig2, dig3
デジタル (S/PDIF、HDMI または DisplayPort) の入力
cd
CD 入力
speaker
PC スピーカ入力
phin, phout, radio. video
他のランダム入力

制御には、異なった精度があります。何かが単にオン/オフのトリガであるかもしれません。制御の大部分は、対数スケールを使用します。

ハードウェア

snd_hda ドライバは、Intel HDA 仕様と互換性がある、PCI クラス 4 (マルチメディア) とサブクラス (HDA) があるコントローラをサポートします。

snd_hda ドライバは、200 以上の異なるコントローラと CODEC をサポートします。ほとんどの場合、特定の CODEC 設定と配線が CODEC 自体のタイプより重要なように、ここでそれらをすべてリストする意味はありません、

歴史

snd_hda デバイスドライバは、 FreeBSD 6.3 ではじめて登場しました。

作者

snd_hda ドライバは、 Stephane E. Potvin <sepotvin@videotron.ca>, Ariff Abdullah <ariff@FreeBSD.org>と Alexander Motin <mav@FreeBSD.org>によって書かれました。このマニュアルページは、 Joel Dahl <joel@FreeBSD.org>, Alexander Motin <mav@FreeBSD.org>と Giorgos Keramidas <keramida@FreeBSD.org>によって書かれました。

バグ

いくらかのハードウェア/OEM ベンダは、BIOS 設定を失敗するか、またはドライバの問題を引き起こす異常な CODEC 配線を習慣的に使用する傾向があります。これは、pcm デバイスを失うか、または snd_hda ドライバが、アタッチして動作するように思えますが、なにも音がない状態の結果となります。 loader.conf 変数を調整することによって、いくつかの場合を解決することができます。そのように問題を修正しようとする前に、実際に問題があり、使用中の PCM オーディオデバイスが実際に期待しているオーディオコネクタに対応していることを確かめてください。

一部のベンダは、外部のアンプを制御するためにコーデックの標準化されていない汎用の I/O (GPIO) ピンを使用します。ある場合に、GPIO ビットの適切な組み合わせを設定することは、特定デバイスでサウンドを動作させるために必要であるかもしれません。

また、HDMI と DisplayPort オーディオは、ビデオドライバからサポートを要求するかもしれません。

January 25, 2012 FreeBSD