linuxシステムwm 9713サウンドカード構成記録
最近wm 9713の外音放送とイヤホンの検査をしていて、何日も期待に背かないで、やっとできました.以下に記録する、開発ボードはreal 210 v 6である.2リリース:
外音を出力させる場合は、wm 9713の0 x 1 cレジスタの値が0 x 1200、イヤホン出力が0 x 00 a 0であることを確認し、もちろん両者も同時に出力することができ、値は0 x 12 a 0である.
さらにAC 97_を設定するEXTENDED_MSTATUSレジスタ(すなわち0 x 3 eレジスタ)は、設定された値が0 xb 900(ラッパ出力イネーブルオン、7、8ビット制御ラッパ9、10ビット制御イヤホン、0オン)である.
もちろん音量の設定も必須AC 97_MASTER(0 x 02)外音音量設定、AC 97_HEADPHONE(0 x 04)イヤホンの音量を設定します.ここでの値は0 x 0000と0 x 0606で、0 x 0000は最大音です.
イヤホンを検出するには、2つのレジスタ(他の開発ボードはCPUがイヤホン挿入の有無を検出する可能性があります.ここではwm 9713が自分で検出し、CPUは介入しません)AC 97_を設定します.INT_PAGINGとAC 97_ADDITIONAL_FUNC 1(すなわち0 x 24および0 x 5 a)は、それぞれ0 x 10および0 x 40の値を有する.
これらの設定の関数全体を以下に貼り、必要に応じて直接使用すればよい(codecsディレクトリのwm 9713.cファイル):
外音を出力させる場合は、wm 9713の0 x 1 cレジスタの値が0 x 1200、イヤホン出力が0 x 00 a 0であることを確認し、もちろん両者も同時に出力することができ、値は0 x 12 a 0である.
さらにAC 97_を設定するEXTENDED_MSTATUSレジスタ(すなわち0 x 3 eレジスタ)は、設定された値が0 xb 900(ラッパ出力イネーブルオン、7、8ビット制御ラッパ9、10ビット制御イヤホン、0オン)である.
もちろん音量の設定も必須AC 97_MASTER(0 x 02)外音音量設定、AC 97_HEADPHONE(0 x 04)イヤホンの音量を設定します.ここでの値は0 x 0000と0 x 0606で、0 x 0000は最大音です.
イヤホンを検出するには、2つのレジスタ(他の開発ボードはCPUがイヤホン挿入の有無を検出する可能性があります.ここではwm 9713が自分で検出し、CPUは介入しません)AC 97_を設定します.INT_PAGINGとAC 97_ADDITIONAL_FUNC 1(すなわち0 x 24および0 x 5 a)は、それぞれ0 x 10および0 x 40の値を有する.
これらの設定の関数全体を以下に貼り、必要に応じて直接使用すればよい(codecsディレクトリのwm 9713.cファイル):
#define AC97_ADDITIONAL_FUNC1 0x5a
static int wm9713_hifi_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params,
struct snd_soc_dai *dai)
{
struct snd_soc_codec *codec = dai->codec;
ac97_write(codec, AC97_POWERDOWN, 0x0000);
ac97_write(codec, AC97_PHONE, 0x0808);
ac97_write(codec, AC97_EXTENDED_MID, 0xf803);
ac97_write(codec, AC97_EXTENDED_MSTATUS, 0xb900);// , 7、8 9、10 , 0
ac97_write(codec, AC97_MASTER, 0x0000);
ac97_write(codec, AC97_HEADPHONE, 0x0606);
ac97_write(codec, AC97_REC_GAIN, 0x12a0);//0x00a0 0x1200
ac97_write(codec, AC97_INT_PAGING, 0x10);//
ac97_write(codec, AC97_ADDITIONAL_FUNC1, 0x40);// IO
#ifdef CONFIG_SOUND_WM9713_INPUT_STREAM_MIC
ac97_write(codec, 0x5c, 0x0002);
ac97_write(codec, AC97_LINE, 0x0068);
ac97_write(codec, AC97_VIDEO, 0xfe00);
#else
ac97_write(codec, AC97_VIDEO, 0xd612);
#endif
return 0;
}
static struct snd_soc_dai_ops wm9713_dai_ops_hifi = {
.hw_params = wm9713_hifi_hw_params,
.prepare = ac97_hifi_prepare,
.set_clkdiv = wm9713_set_dai_clkdiv,
.set_pll = wm9713_set_dai_pll,
};