Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
c400c9e2
K
Kernel
项目概览
openeuler
/
Kernel
大约 1 年 前同步成功
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c400c9e2
编写于
1月 13, 2011
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'topic/hda' into for-linus
上级
e38302f7
80c67852
变更
7
展开全部
隐藏空白更改
内联
并排
Showing
7 changed file
with
549 addition
and
437 deletion
+549
-437
Documentation/sound/alsa/HD-Audio-Models.txt
Documentation/sound/alsa/HD-Audio-Models.txt
+0
-1
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_codec.c
+3
-0
sound/pci/hda/patch_analog.c
sound/pci/hda/patch_analog.c
+36
-36
sound/pci/hda/patch_conexant.c
sound/pci/hda/patch_conexant.c
+53
-55
sound/pci/hda/patch_hdmi.c
sound/pci/hda/patch_hdmi.c
+81
-11
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+363
-330
sound/pci/hda/patch_sigmatel.c
sound/pci/hda/patch_sigmatel.c
+13
-4
未找到文件。
Documentation/sound/alsa/HD-Audio-Models.txt
浏览文件 @
c400c9e2
...
...
@@ -149,7 +149,6 @@ ALC882/883/885/888/889
acer-aspire-7730g Acer Aspire 7730G
acer-aspire-8930g Acer Aspire 8930G
medion Medion Laptops
medion-md2 Medion MD2
targa-dig Targa/MSI
targa-2ch-dig Targa/MSI with 2-channel
targa-8ch-dig Targa/MSI with 8-channel (MSI GX620)
...
...
sound/pci/hda/hda_codec.c
浏览文件 @
c400c9e2
...
...
@@ -4571,6 +4571,9 @@ int snd_hda_parse_pin_def_config(struct hda_codec *codec,
}
memset
(
cfg
->
hp_pins
+
cfg
->
hp_outs
,
0
,
sizeof
(
hda_nid_t
)
*
(
AUTO_CFG_MAX_OUTS
-
cfg
->
hp_outs
));
if
(
!
cfg
->
hp_outs
)
cfg
->
line_out_type
=
AUTO_PIN_HP_OUT
;
}
/* sort by sequence */
...
...
sound/pci/hda/patch_analog.c
浏览文件 @
c400c9e2
...
...
@@ -666,7 +666,7 @@ static struct snd_kcontrol_new ad1986a_mixers[] = {
HDA_CODEC_MUTE
(
"Aux Playback Switch"
,
0x16
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Playback Volume"
,
0x13
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Mic Playback Switch"
,
0x13
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost"
,
0x0f
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost
Volume
"
,
0x0f
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mono Playback Volume"
,
0x1e
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Mono Playback Switch"
,
0x1e
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Capture Volume"
,
0x12
,
0x0
,
HDA_OUTPUT
),
...
...
@@ -729,7 +729,7 @@ static struct snd_kcontrol_new ad1986a_laptop_mixers[] = {
HDA_CODEC_MUTE
(
"Aux Playback Switch"
,
0x16
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Playback Volume"
,
0x13
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Mic Playback Switch"
,
0x13
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost"
,
0x0f
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost
Volume
"
,
0x0f
,
0x0
,
HDA_OUTPUT
),
/*
HDA_CODEC_VOLUME("Mono Playback Volume", 0x1e, 0x0, HDA_OUTPUT),
HDA_CODEC_MUTE("Mono Playback Switch", 0x1e, 0x0, HDA_OUTPUT), */
...
...
@@ -775,7 +775,7 @@ static struct snd_kcontrol_new ad1986a_laptop_eapd_mixers[] = {
HDA_CODEC_MUTE
(
"PCM Playback Switch"
,
0x03
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Playback Volume"
,
0x13
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Mic Playback Switch"
,
0x13
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost"
,
0x0f
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost
Volume
"
,
0x0f
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Capture Volume"
,
0x12
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Capture Switch"
,
0x12
,
0x0
,
HDA_OUTPUT
),
{
...
...
@@ -1358,7 +1358,7 @@ static struct snd_kcontrol_new ad1983_mixers[] = {
HDA_CODEC_MUTE
(
"Mic Playback Switch"
,
0x12
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Line Playback Volume"
,
0x13
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Line Playback Switch"
,
0x13
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost
Volume
"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Capture Volume"
,
0x15
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Capture Switch"
,
0x15
,
0x0
,
HDA_OUTPUT
),
{
...
...
@@ -1515,8 +1515,8 @@ static struct snd_kcontrol_new ad1981_mixers[] = {
HDA_CODEC_MUTE
(
"Mic Playback Switch"
,
0x1c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"CD Playback Volume"
,
0x1d
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"CD Playback Switch"
,
0x1d
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Front Mic Boost"
,
0x08
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost"
,
0x18
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Front Mic Boost
Volume
"
,
0x08
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost
Volume
"
,
0x18
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Capture Volume"
,
0x15
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Capture Switch"
,
0x15
,
0x0
,
HDA_OUTPUT
),
{
...
...
@@ -1726,8 +1726,8 @@ static struct snd_kcontrol_new ad1981_hp_mixers[] = {
HDA_CODEC_VOLUME("CD Playback Volume", 0x1d, 0x0, HDA_OUTPUT),
HDA_CODEC_MUTE("CD Playback Switch", 0x1d, 0x0, HDA_OUTPUT),
#endif
HDA_CODEC_VOLUME
(
"Mic Boost"
,
0x08
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Internal Mic Boost"
,
0x18
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost
Volume
"
,
0x08
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Internal Mic Boost
Volume
"
,
0x18
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Capture Volume"
,
0x15
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Capture Switch"
,
0x15
,
0x0
,
HDA_OUTPUT
),
{
...
...
@@ -1774,7 +1774,7 @@ static struct snd_kcontrol_new ad1981_thinkpad_mixers[] = {
HDA_CODEC_MUTE
(
"Mic Playback Switch"
,
0x12
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"CD Playback Volume"
,
0x1d
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"CD Playback Switch"
,
0x1d
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost"
,
0x08
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost
Volume
"
,
0x08
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Capture Volume"
,
0x15
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Capture Switch"
,
0x15
,
0x0
,
HDA_OUTPUT
),
{
...
...
@@ -2160,8 +2160,8 @@ static struct snd_kcontrol_new ad1988_6stack_mixers2[] = {
HDA_CODEC_VOLUME
(
"Analog Mix Playback Volume"
,
0x21
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Analog Mix Playback Switch"
,
0x21
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Front Mic Boost"
,
0x39
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost"
,
0x3c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Front Mic Boost
Volume
"
,
0x39
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost
Volume
"
,
0x3c
,
0x0
,
HDA_OUTPUT
),
{
}
/* end */
};
...
...
@@ -2203,8 +2203,8 @@ static struct snd_kcontrol_new ad1988_3stack_mixers2[] = {
HDA_CODEC_VOLUME
(
"Analog Mix Playback Volume"
,
0x21
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Analog Mix Playback Switch"
,
0x21
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Front Mic Boost"
,
0x39
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost"
,
0x3c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Front Mic Boost
Volume
"
,
0x39
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost
Volume
"
,
0x3c
,
0x0
,
HDA_OUTPUT
),
{
.
iface
=
SNDRV_CTL_ELEM_IFACE_MIXER
,
.
name
=
"Channel Mode"
,
...
...
@@ -2232,7 +2232,7 @@ static struct snd_kcontrol_new ad1988_laptop_mixers[] = {
HDA_CODEC_VOLUME
(
"Analog Mix Playback Volume"
,
0x21
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Analog Mix Playback Switch"
,
0x21
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost"
,
0x39
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost
Volume
"
,
0x39
,
0x0
,
HDA_OUTPUT
),
{
.
iface
=
SNDRV_CTL_ELEM_IFACE_MIXER
,
...
...
@@ -2902,7 +2902,7 @@ static int new_analog_input(struct ad198x_spec *spec, hda_nid_t pin,
idx
=
ad1988_pin_idx
(
pin
);
bnid
=
ad1988_boost_nids
[
idx
];
if
(
bnid
)
{
sprintf
(
name
,
"%s Boost"
,
ctlname
);
sprintf
(
name
,
"%s Boost
Volume
"
,
ctlname
);
return
add_control
(
spec
,
AD_CTL_WIDGET_VOL
,
name
,
HDA_COMPOSE_AMP_VAL
(
bnid
,
3
,
idx
,
HDA_OUTPUT
));
...
...
@@ -3300,8 +3300,8 @@ static struct snd_kcontrol_new ad1884_base_mixers[] = {
HDA_CODEC_MUTE
(
"Mic Playback Switch"
,
0x20
,
0x01
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"CD Playback Volume"
,
0x20
,
0x02
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"CD Playback Switch"
,
0x20
,
0x02
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost"
,
0x15
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Front Mic Boost"
,
0x14
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost
Volume
"
,
0x15
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Front Mic Boost
Volume
"
,
0x14
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Capture Volume"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Capture Switch"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME_IDX
(
"Capture Volume"
,
1
,
0x0d
,
0x0
,
HDA_OUTPUT
),
...
...
@@ -3499,9 +3499,9 @@ static struct snd_kcontrol_new ad1984_thinkpad_mixers[] = {
HDA_CODEC_MUTE
(
"Beep Playback Switch"
,
0x20
,
0x03
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Docking Mic Playback Volume"
,
0x20
,
0x04
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Docking Mic Playback Switch"
,
0x20
,
0x04
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost"
,
0x14
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Internal Mic Boost"
,
0x15
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Dock
ing Mic Boost
"
,
0x25
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost
Volume
"
,
0x14
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Internal Mic Boost
Volume
"
,
0x15
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Dock
Mic Boost Volume
"
,
0x25
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Capture Volume"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Capture Switch"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME_IDX
(
"Capture Volume"
,
1
,
0x0d
,
0x0
,
HDA_OUTPUT
),
...
...
@@ -3560,8 +3560,8 @@ static struct snd_kcontrol_new ad1984_dell_desktop_mixers[] = {
HDA_CODEC_MUTE
(
"Front Mic Playback Switch"
,
0x20
,
0x00
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Line-In Playback Volume"
,
0x20
,
0x01
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Line-In Playback Switch"
,
0x20
,
0x01
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Line-In Boost"
,
0x15
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Front Mic Boost"
,
0x14
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Line-In Boost
Volume
"
,
0x15
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Front Mic Boost
Volume
"
,
0x14
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Capture Volume"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Capture Switch"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME_IDX
(
"Capture Volume"
,
1
,
0x0d
,
0x0
,
HDA_OUTPUT
),
...
...
@@ -3745,9 +3745,9 @@ static struct snd_kcontrol_new ad1884a_base_mixers[] = {
HDA_CODEC_MUTE
(
"Mic Playback Switch"
,
0x20
,
0x04
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"CD Playback Volume"
,
0x20
,
0x02
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"CD Playback Switch"
,
0x20
,
0x02
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Front Mic Boost"
,
0x14
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Line Boost"
,
0x15
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost"
,
0x25
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Front Mic Boost
Volume
"
,
0x14
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Line Boost
Volume
"
,
0x15
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost
Volume
"
,
0x25
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Capture Volume"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Capture Switch"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME_IDX
(
"Capture Volume"
,
1
,
0x0d
,
0x0
,
HDA_OUTPUT
),
...
...
@@ -3888,9 +3888,9 @@ static struct snd_kcontrol_new ad1884a_laptop_mixers[] = {
HDA_CODEC_MUTE
(
"Internal Mic Playback Switch"
,
0x20
,
0x01
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Dock Mic Playback Volume"
,
0x20
,
0x04
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Dock Mic Playback Switch"
,
0x20
,
0x04
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost"
,
0x14
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Internal Mic Boost"
,
0x15
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Dock Mic Boost"
,
0x25
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost
Volume
"
,
0x14
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Internal Mic Boost
Volume
"
,
0x15
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Dock Mic Boost
Volume
"
,
0x25
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Capture Volume"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Capture Switch"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
{
}
/* end */
...
...
@@ -4126,8 +4126,8 @@ static struct snd_kcontrol_new ad1984a_thinkpad_mixers[] = {
HDA_CODEC_MUTE
(
"PCM Playback Switch"
,
0x20
,
0x5
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Playback Volume"
,
0x20
,
0x00
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Mic Playback Switch"
,
0x20
,
0x00
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost"
,
0x14
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Internal Mic Boost"
,
0x17
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost
Volume
"
,
0x14
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Internal Mic Boost
Volume
"
,
0x17
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Capture Volume"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Capture Switch"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
{
...
...
@@ -4255,8 +4255,8 @@ static struct snd_kcontrol_new ad1984a_touchsmart_mixers[] = {
HDA_CODEC_MUTE
(
"PCM Playback Switch"
,
0x20
,
0x5
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Capture Volume"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Capture Switch"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost"
,
0x25
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Internal Mic Boost"
,
0x17
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost
Volume
"
,
0x25
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Internal Mic Boost
Volume
"
,
0x17
,
0x0
,
HDA_INPUT
),
{
}
/* end */
};
...
...
@@ -4494,9 +4494,9 @@ static struct snd_kcontrol_new ad1882_base_mixers[] = {
HDA_CODEC_VOLUME_MONO
(
"Mono Playback Volume"
,
0x13
,
1
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE_MONO
(
"Mono Playback Switch"
,
0x13
,
1
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost"
,
0x3c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Front Mic Boost"
,
0x39
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Line-In Boost"
,
0x3a
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost
Volume
"
,
0x3c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Front Mic Boost
Volume
"
,
0x39
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Line-In Boost
Volume
"
,
0x3a
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Capture Volume"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Capture Switch"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME_IDX
(
"Capture Volume"
,
1
,
0x0d
,
0x0
,
HDA_OUTPUT
),
...
...
@@ -4547,7 +4547,7 @@ static struct snd_kcontrol_new ad1882a_loopback_mixers[] = {
HDA_CODEC_MUTE
(
"Line Playback Switch"
,
0x20
,
0x01
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"CD Playback Volume"
,
0x20
,
0x06
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"CD Playback Switch"
,
0x20
,
0x06
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Digital Mic Boost"
,
0x1f
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Digital Mic Boost
Volume
"
,
0x1f
,
0x0
,
HDA_INPUT
),
{
}
/* end */
};
...
...
sound/pci/hda/patch_conexant.c
浏览文件 @
c400c9e2
...
...
@@ -869,16 +869,16 @@ static void cxt5045_hp_unsol_event(struct hda_codec *codec,
}
static
struct
snd_kcontrol_new
cxt5045_mixers
[]
=
{
HDA_CODEC_VOLUME
(
"Int Mic Capture Volume"
,
0x1a
,
0x01
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Int Mic Capture Switch"
,
0x1a
,
0x01
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"
Ext
Mic Capture Volume"
,
0x1a
,
0x02
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"
Ext
Mic Capture Switch"
,
0x1a
,
0x02
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Int
ernal
Mic Capture Volume"
,
0x1a
,
0x01
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Int
ernal
Mic Capture Switch"
,
0x1a
,
0x01
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Capture Volume"
,
0x1a
,
0x02
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Mic Capture Switch"
,
0x1a
,
0x02
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"PCM Playback Volume"
,
0x17
,
0x0
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"PCM Playback Switch"
,
0x17
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Int Mic Playback Volume"
,
0x17
,
0x1
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Int Mic Playback Switch"
,
0x17
,
0x1
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"
Ext
Mic Playback Volume"
,
0x17
,
0x2
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"
Ext
Mic Playback Switch"
,
0x17
,
0x2
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Int
ernal
Mic Playback Volume"
,
0x17
,
0x1
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Int
ernal
Mic Playback Switch"
,
0x17
,
0x1
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Playback Volume"
,
0x17
,
0x2
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Mic Playback Switch"
,
0x17
,
0x2
,
HDA_INPUT
),
HDA_BIND_VOL
(
"Master Playback Volume"
,
&
cxt5045_hp_bind_master_vol
),
{
.
iface
=
SNDRV_CTL_ELEM_IFACE_MIXER
,
...
...
@@ -910,16 +910,16 @@ static struct snd_kcontrol_new cxt5045_benq_mixers[] = {
};
static
struct
snd_kcontrol_new
cxt5045_mixers_hp530
[]
=
{
HDA_CODEC_VOLUME
(
"Int Mic Capture Volume"
,
0x1a
,
0x02
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Int Mic Capture Switch"
,
0x1a
,
0x02
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"
Ext
Mic Capture Volume"
,
0x1a
,
0x01
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"
Ext
Mic Capture Switch"
,
0x1a
,
0x01
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Int
ernal
Mic Capture Volume"
,
0x1a
,
0x02
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Int
ernal
Mic Capture Switch"
,
0x1a
,
0x02
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Capture Volume"
,
0x1a
,
0x01
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Mic Capture Switch"
,
0x1a
,
0x01
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"PCM Playback Volume"
,
0x17
,
0x0
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"PCM Playback Switch"
,
0x17
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Int Mic Playback Volume"
,
0x17
,
0x2
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Int Mic Playback Switch"
,
0x17
,
0x2
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"
Ext
Mic Playback Volume"
,
0x17
,
0x1
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"
Ext
Mic Playback Switch"
,
0x17
,
0x1
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Int
ernal
Mic Playback Volume"
,
0x17
,
0x2
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Int
ernal
Mic Playback Switch"
,
0x17
,
0x2
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Playback Volume"
,
0x17
,
0x1
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Mic Playback Switch"
,
0x17
,
0x1
,
HDA_INPUT
),
HDA_BIND_VOL
(
"Master Playback Volume"
,
&
cxt5045_hp_bind_master_vol
),
{
.
iface
=
SNDRV_CTL_ELEM_IFACE_MIXER
,
...
...
@@ -947,7 +947,7 @@ static struct hda_verb cxt5045_init_verbs[] = {
{
0x17
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_IN_MUTE
(
2
)},
{
0x17
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_IN_MUTE
(
3
)},
{
0x17
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_IN_MUTE
(
4
)},
/* Record selector: Int mic */
/* Record selector: Int
ernal
mic */
{
0x1a
,
AC_VERB_SET_CONNECT_SEL
,
0x1
},
{
0x1a
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AC_AMP_SET_INPUT
|
AC_AMP_SET_RIGHT
|
AC_AMP_SET_LEFT
|
0x17
},
...
...
@@ -960,7 +960,7 @@ static struct hda_verb cxt5045_init_verbs[] = {
};
static
struct
hda_verb
cxt5045_benq_init_verbs
[]
=
{
/* Int Mic, Mic */
/* Int
ernal
Mic, Mic */
{
0x12
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_IN
|
AC_PINCTL_VREF_80
},
{
0x14
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_IN
|
AC_PINCTL_VREF_80
},
/* Line In,HP, Amp */
...
...
@@ -973,7 +973,7 @@ static struct hda_verb cxt5045_benq_init_verbs[] = {
{
0x17
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_IN_MUTE
(
2
)},
{
0x17
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_IN_MUTE
(
3
)},
{
0x17
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_IN_MUTE
(
4
)},
/* Record selector: Int mic */
/* Record selector: Int
ernal
mic */
{
0x1a
,
AC_VERB_SET_CONNECT_SEL
,
0x1
},
{
0x1a
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AC_AMP_SET_INPUT
|
AC_AMP_SET_RIGHT
|
AC_AMP_SET_LEFT
|
0x17
},
...
...
@@ -1376,7 +1376,7 @@ static void cxt5047_hp_unsol_event(struct hda_codec *codec,
static
struct
snd_kcontrol_new
cxt5047_base_mixers
[]
=
{
HDA_CODEC_VOLUME
(
"Mic Playback Volume"
,
0x19
,
0x02
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Mic Playback Switch"
,
0x19
,
0x02
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost"
,
0x1a
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Mic Boost
Volume
"
,
0x1a
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Capture Volume"
,
0x12
,
0x03
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Capture Switch"
,
0x12
,
0x03
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"PCM Volume"
,
0x10
,
0x00
,
HDA_OUTPUT
),
...
...
@@ -1796,8 +1796,8 @@ static struct snd_kcontrol_new cxt5051_playback_mixers[] = {
static
struct
snd_kcontrol_new
cxt5051_capture_mixers
[]
=
{
HDA_CODEC_VOLUME
(
"Internal Mic Volume"
,
0x14
,
0x00
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Internal Mic Switch"
,
0x14
,
0x00
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"
External
Mic Volume"
,
0x14
,
0x01
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"
External
Mic Switch"
,
0x14
,
0x01
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Volume"
,
0x14
,
0x01
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Mic Switch"
,
0x14
,
0x01
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Docking Mic Volume"
,
0x15
,
0x00
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Docking Mic Switch"
,
0x15
,
0x00
,
HDA_INPUT
),
{}
...
...
@@ -1806,8 +1806,8 @@ static struct snd_kcontrol_new cxt5051_capture_mixers[] = {
static
struct
snd_kcontrol_new
cxt5051_hp_mixers
[]
=
{
HDA_CODEC_VOLUME
(
"Internal Mic Volume"
,
0x14
,
0x00
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Internal Mic Switch"
,
0x14
,
0x00
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"
External
Mic Volume"
,
0x15
,
0x00
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"
External
Mic Switch"
,
0x15
,
0x00
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Volume"
,
0x15
,
0x00
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Mic Switch"
,
0x15
,
0x00
,
HDA_INPUT
),
{}
};
...
...
@@ -1826,8 +1826,8 @@ static struct snd_kcontrol_new cxt5051_f700_mixers[] = {
static
struct
snd_kcontrol_new
cxt5051_toshiba_mixers
[]
=
{
HDA_CODEC_VOLUME
(
"Internal Mic Volume"
,
0x14
,
0x00
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Internal Mic Switch"
,
0x14
,
0x00
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"
External
Mic Volume"
,
0x14
,
0x01
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"
External
Mic Switch"
,
0x14
,
0x01
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mic Volume"
,
0x14
,
0x01
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Mic Switch"
,
0x14
,
0x01
,
HDA_INPUT
),
{}
};
...
...
@@ -1847,7 +1847,7 @@ static struct hda_verb cxt5051_init_verbs[] = {
{
0x16
,
AC_VERB_SET_CONNECT_SEL
,
0x00
},
/* DAC1 */
{
0x10
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_OUT_UNMUTE
},
/* Record selector: Int mic */
/* Record selector: Int
ernal
mic */
{
0x14
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_IN_UNMUTE
(
0
)
|
0x44
},
{
0x14
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_IN_UNMUTE
(
1
)
|
0x44
},
{
0x15
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_IN_UNMUTE
(
0
)
|
0x44
},
...
...
@@ -1874,7 +1874,7 @@ static struct hda_verb cxt5051_hp_dv6736_init_verbs[] = {
{
0x16
,
AC_VERB_SET_CONNECT_SEL
,
0x00
},
/* DAC1 */
{
0x10
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_OUT_UNMUTE
},
/* Record selector: Int mic */
/* Record selector: Int
ernal
mic */
{
0x14
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_IN_UNMUTE
(
1
)
|
0x44
},
{
0x14
,
AC_VERB_SET_CONNECT_SEL
,
0x1
},
/* SPDIF route: PCM */
...
...
@@ -1904,7 +1904,7 @@ static struct hda_verb cxt5051_lenovo_x200_init_verbs[] = {
{
0x19
,
AC_VERB_SET_CONNECT_SEL
,
0x00
},
/* DAC1 */
{
0x10
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_OUT_UNMUTE
},
/* Record selector: Int mic */
/* Record selector: Int
ernal
mic */
{
0x14
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_IN_UNMUTE
(
0
)
|
0x44
},
{
0x14
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_IN_UNMUTE
(
1
)
|
0x44
},
{
0x15
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_IN_UNMUTE
(
0
)
|
0x44
},
...
...
@@ -1932,7 +1932,7 @@ static struct hda_verb cxt5051_f700_init_verbs[] = {
{
0x16
,
AC_VERB_SET_CONNECT_SEL
,
0x00
},
/* DAC1 */
{
0x10
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_OUT_UNMUTE
},
/* Record selector: Int mic */
/* Record selector: Int
ernal
mic */
{
0x14
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_IN_UNMUTE
(
1
)
|
0x44
},
{
0x14
,
AC_VERB_SET_CONNECT_SEL
,
0x1
},
/* SPDIF route: PCM */
...
...
@@ -2111,6 +2111,11 @@ static struct hda_channel_mode cxt5066_modes[1] = {
{
2
,
NULL
},
};
#define HP_PRESENT_PORT_A (1 << 0)
#define HP_PRESENT_PORT_D (1 << 1)
#define hp_port_a_present(spec) ((spec)->hp_present & HP_PRESENT_PORT_A)
#define hp_port_d_present(spec) ((spec)->hp_present & HP_PRESENT_PORT_D)
static
void
cxt5066_update_speaker
(
struct
hda_codec
*
codec
)
{
struct
conexant_spec
*
spec
=
codec
->
spec
;
...
...
@@ -2120,24 +2125,20 @@ static void cxt5066_update_speaker(struct hda_codec *codec)
spec
->
hp_present
,
spec
->
cur_eapd
);
/* Port A (HP) */
pinctl
=
(
(
spec
->
hp_present
&
1
)
&&
spec
->
cur_eapd
)
?
PIN_HP
:
0
;
pinctl
=
(
hp_port_a_present
(
spec
)
&&
spec
->
cur_eapd
)
?
PIN_HP
:
0
;
snd_hda_codec_write
(
codec
,
0x19
,
0
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
pinctl
);
/* Port D (HP/LO) */
if
(
spec
->
dell_automute
)
{
/* DELL AIO Port Rule: PortA> PortD> IntSpk */
pinctl
=
(
!
(
spec
->
hp_present
&
1
)
&&
spec
->
cur_eapd
)
?
PIN_OUT
:
0
;
}
else
if
(
spec
->
thinkpad
)
{
if
(
spec
->
cur_eapd
)
pinctl
=
spec
->
port_d_mode
;
/* Mute dock line-out if Port A (laptop HP) is present */
if
(
spec
->
hp_present
&
1
)
pinctl
=
spec
->
cur_eapd
?
spec
->
port_d_mode
:
0
;
if
(
spec
->
dell_automute
||
spec
->
thinkpad
)
{
/* Mute if Port A is connected */
if
(
hp_port_a_present
(
spec
))
pinctl
=
0
;
}
else
{
pinctl
=
((
spec
->
hp_present
&
2
)
&&
spec
->
cur_eapd
)
?
spec
->
port_d_mode
:
0
;
/* Thinkpad/Dell doesn't give pin-D status */
if
(
!
hp_port_d_present
(
spec
))
pinctl
=
0
;
}
snd_hda_codec_write
(
codec
,
0x1c
,
0
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
pinctl
);
...
...
@@ -2379,8 +2380,8 @@ static void cxt5066_hp_automute(struct hda_codec *codec)
/* Port D */
portD
=
snd_hda_jack_detect
(
codec
,
0x1c
);
spec
->
hp_present
=
!!
(
portA
)
;
spec
->
hp_present
|=
portD
?
2
:
0
;
spec
->
hp_present
=
portA
?
HP_PRESENT_PORT_A
:
0
;
spec
->
hp_present
|=
portD
?
HP_PRESENT_PORT_D
:
0
;
snd_printdd
(
"CXT5066: hp automute portA=%x portD=%x present=%d
\n
"
,
portA
,
portD
,
spec
->
hp_present
);
cxt5066_update_speaker
(
codec
);
...
...
@@ -2728,7 +2729,7 @@ static struct snd_kcontrol_new cxt5066_mixers[] = {
static
struct
snd_kcontrol_new
cxt5066_vostro_mixers
[]
=
{
{
.
iface
=
SNDRV_CTL_ELEM_IFACE_MIXER
,
.
name
=
"Int Mic Boost Capture Enum"
,
.
name
=
"Int
ernal
Mic Boost Capture Enum"
,
.
info
=
cxt5066_mic_boost_mux_enum_info
,
.
get
=
cxt5066_mic_boost_mux_enum_get
,
.
put
=
cxt5066_mic_boost_mux_enum_put
,
...
...
@@ -2954,7 +2955,7 @@ static struct hda_verb cxt5066_init_verbs_ideapad[] = {
{
0x22
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_OUT
},
/* internal microphone */
{
0x23
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_IN
},
/* enable int mic */
{
0x23
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_IN
},
/* enable int
ernal
mic */
/* EAPD */
{
0x1d
,
AC_VERB_SET_EAPD_BTLENABLE
,
0x2
},
/* default on */
...
...
@@ -3009,7 +3010,7 @@ static struct hda_verb cxt5066_init_verbs_thinkpad[] = {
{
0x22
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_OUT
},
/* internal microphone */
{
0x23
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_IN
},
/* enable int mic */
{
0x23
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_IN
},
/* enable int
ernal
mic */
/* EAPD */
{
0x1d
,
AC_VERB_SET_EAPD_BTLENABLE
,
0x2
},
/* default on */
...
...
@@ -3097,6 +3098,7 @@ static struct snd_pci_quirk cxt5066_cfg_tbl[] = {
SND_PCI_QUIRK_MASK
(
0x1025
,
0xff00
,
0x0400
,
"Acer"
,
CXT5066_IDEAPAD
),
SND_PCI_QUIRK
(
0x1028
,
0x02d8
,
"Dell Vostro"
,
CXT5066_DELL_VOSTRO
),
SND_PCI_QUIRK
(
0x1028
,
0x02f5
,
"Dell Vostro 320"
,
CXT5066_IDEAPAD
),
SND_PCI_QUIRK
(
0x1028
,
0x0401
,
"Dell Vostro 1014"
,
CXT5066_DELL_VOSTRO
),
SND_PCI_QUIRK
(
0x1028
,
0x0402
,
"Dell Vostro"
,
CXT5066_DELL_VOSTRO
),
SND_PCI_QUIRK
(
0x1028
,
0x0408
,
"Dell Inspiron One 19T"
,
CXT5066_IDEAPAD
),
SND_PCI_QUIRK
(
0x103c
,
0x360b
,
"HP G60"
,
CXT5066_HP_LAPTOP
),
...
...
@@ -3108,16 +3110,9 @@ static struct snd_pci_quirk cxt5066_cfg_tbl[] = {
CXT5066_LAPTOP
),
SND_PCI_QUIRK
(
0x152d
,
0x0833
,
"OLPC XO-1.5"
,
CXT5066_OLPC_XO_1_5
),
SND_PCI_QUIRK
(
0x17aa
,
0x20f2
,
"Lenovo T400s"
,
CXT5066_THINKPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x21b2
,
"Thinkpad X100e"
,
CXT5066_IDEAPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x21c5
,
"Thinkpad Edge 13"
,
CXT5066_THINKPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x21b3
,
"Thinkpad Edge 13 (197)"
,
CXT5066_IDEAPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x21b4
,
"Thinkpad Edge"
,
CXT5066_IDEAPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x21c8
,
"Thinkpad Edge 11"
,
CXT5066_IDEAPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x215e
,
"Lenovo Thinkpad"
,
CXT5066_THINKPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x38af
,
"Lenovo G series"
,
CXT5066_IDEAPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x390a
,
"Lenovo S10-3t"
,
CXT5066_IDEAPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x3938
,
"Lenovo G series (AMD)"
,
CXT5066_IDEAPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x3a0d
,
"ideapad"
,
CXT5066_IDEAPAD
),
SND_PCI_QUIRK_VENDOR
(
0x17aa
,
"Lenovo"
,
CXT5066_IDEAPAD
),
/* Fallback for Lenovos without dock mic */
{}
};
...
...
@@ -3422,6 +3417,9 @@ static void cx_auto_hp_automute(struct hda_codec *codec)
AC_VERB_SET_PIN_WIDGET_CONTROL
,
present
?
0
:
PIN_OUT
);
}
for
(
i
=
0
;
!
present
&&
i
<
cfg
->
line_outs
;
i
++
)
if
(
snd_hda_jack_detect
(
codec
,
cfg
->
line_out_pins
[
i
]))
present
=
1
;
for
(
i
=
0
;
i
<
cfg
->
speaker_outs
;
i
++
)
{
snd_hda_codec_write
(
codec
,
cfg
->
speaker_pins
[
i
],
0
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
...
...
sound/pci/hda/patch_hdmi.c
浏览文件 @
c400c9e2
...
...
@@ -31,10 +31,15 @@
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/slab.h>
#include <linux/moduleparam.h>
#include <sound/core.h>
#include "hda_codec.h"
#include "hda_local.h"
static
bool
static_hdmi_pcm
;
module_param
(
static_hdmi_pcm
,
bool
,
0644
);
MODULE_PARM_DESC
(
static_hdmi_pcm
,
"Don't restrict PCM parameters per ELD info"
);
/*
* The HDMI/DisplayPort configuration can be highly dynamic. A graphics device
* could support two independent pipes, each of them can be connected to one or
...
...
@@ -827,7 +832,7 @@ static int hdmi_pcm_open(struct hda_pcm_stream *hinfo,
*
codec_pars
=
*
hinfo
;
eld
=
&
spec
->
sink_eld
[
idx
];
if
(
eld
->
sad_count
>
0
)
{
if
(
!
static_hdmi_pcm
&&
eld
->
eld_valid
&&
eld
->
sad_count
>
0
)
{
hdmi_eld_update_pcm_info
(
eld
,
hinfo
,
codec_pars
);
if
(
hinfo
->
channels_min
>
hinfo
->
channels_max
||
!
hinfo
->
rates
||
!
hinfo
->
formats
)
...
...
@@ -904,23 +909,28 @@ static int hdmi_add_pin(struct hda_codec *codec, hda_nid_t pin_nid)
spec
->
pin
[
spec
->
num_pins
]
=
pin_nid
;
spec
->
num_pins
++
;
/*
* It is assumed that converter nodes come first in the node list and
* hence have been registered and usable now.
*/
return
hdmi_read_pin_conn
(
codec
,
pin_nid
);
}
static
int
hdmi_add_cvt
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
)
{
int
i
,
found_pin
=
0
;
struct
hdmi_spec
*
spec
=
codec
->
spec
;
if
(
spec
->
num_cvts
>=
MAX_HDMI_CVTS
)
{
snd_printk
(
KERN_WARNING
"HDMI: no space for converter %d
\n
"
,
nid
);
return
-
E2BIG
;
for
(
i
=
0
;
i
<
spec
->
num_pins
;
i
++
)
if
(
nid
==
spec
->
pin_cvt
[
i
])
{
found_pin
=
1
;
break
;
}
if
(
!
found_pin
)
{
snd_printdd
(
"HDMI: Skipping node %d (no connection)
\n
"
,
nid
);
return
-
EINVAL
;
}
if
(
snd_BUG_ON
(
spec
->
num_cvts
>=
MAX_HDMI_CVTS
))
return
-
E2BIG
;
spec
->
cvt
[
spec
->
num_cvts
]
=
nid
;
spec
->
num_cvts
++
;
...
...
@@ -931,6 +941,8 @@ static int hdmi_parse_codec(struct hda_codec *codec)
{
hda_nid_t
nid
;
int
i
,
nodes
;
int
num_tmp_cvts
=
0
;
hda_nid_t
tmp_cvt
[
MAX_HDMI_CVTS
];
nodes
=
snd_hda_get_sub_nodes
(
codec
,
codec
->
afg
,
&
nid
);
if
(
!
nid
||
nodes
<
0
)
{
...
...
@@ -941,6 +953,7 @@ static int hdmi_parse_codec(struct hda_codec *codec)
for
(
i
=
0
;
i
<
nodes
;
i
++
,
nid
++
)
{
unsigned
int
caps
;
unsigned
int
type
;
unsigned
int
config
;
caps
=
snd_hda_param_read
(
codec
,
nid
,
AC_PAR_AUDIO_WIDGET_CAP
);
type
=
get_wcaps_type
(
caps
);
...
...
@@ -950,17 +963,32 @@ static int hdmi_parse_codec(struct hda_codec *codec)
switch
(
type
)
{
case
AC_WID_AUD_OUT
:
hdmi_add_cvt
(
codec
,
nid
);
if
(
num_tmp_cvts
>=
MAX_HDMI_CVTS
)
{
snd_printk
(
KERN_WARNING
"HDMI: no space for converter %d
\n
"
,
nid
);
continue
;
}
tmp_cvt
[
num_tmp_cvts
]
=
nid
;
num_tmp_cvts
++
;
break
;
case
AC_WID_PIN
:
caps
=
snd_hda_param_read
(
codec
,
nid
,
AC_PAR_PIN_CAP
);
if
(
!
(
caps
&
(
AC_PINCAP_HDMI
|
AC_PINCAP_DP
)))
continue
;
config
=
snd_hda_codec_read
(
codec
,
nid
,
0
,
AC_VERB_GET_CONFIG_DEFAULT
,
0
);
if
(
get_defcfg_connect
(
config
)
==
AC_JACK_PORT_NONE
)
continue
;
hdmi_add_pin
(
codec
,
nid
);
break
;
}
}
for
(
i
=
0
;
i
<
num_tmp_cvts
;
i
++
)
hdmi_add_cvt
(
codec
,
tmp_cvt
[
i
]);
/*
* G45/IbexPeak don't support EPSS: the unsolicited pin hot plug event
* can be lost and presence sense verb will become inaccurate if the
...
...
@@ -1165,11 +1193,53 @@ static int nvhdmi_7x_init(struct hda_codec *codec)
return
0
;
}
static
unsigned
int
channels_2_6_8
[]
=
{
2
,
6
,
8
};
static
unsigned
int
channels_2_8
[]
=
{
2
,
8
};
static
struct
snd_pcm_hw_constraint_list
hw_constraints_2_6_8_channels
=
{
.
count
=
ARRAY_SIZE
(
channels_2_6_8
),
.
list
=
channels_2_6_8
,
.
mask
=
0
,
};
static
struct
snd_pcm_hw_constraint_list
hw_constraints_2_8_channels
=
{
.
count
=
ARRAY_SIZE
(
channels_2_8
),
.
list
=
channels_2_8
,
.
mask
=
0
,
};
static
int
simple_playback_pcm_open
(
struct
hda_pcm_stream
*
hinfo
,
struct
hda_codec
*
codec
,
struct
snd_pcm_substream
*
substream
)
{
struct
hdmi_spec
*
spec
=
codec
->
spec
;
struct
snd_pcm_hw_constraint_list
*
hw_constraints_channels
=
NULL
;
switch
(
codec
->
preset
->
id
)
{
case
0x10de0002
:
case
0x10de0003
:
case
0x10de0005
:
case
0x10de0006
:
hw_constraints_channels
=
&
hw_constraints_2_8_channels
;
break
;
case
0x10de0007
:
hw_constraints_channels
=
&
hw_constraints_2_6_8_channels
;
break
;
default:
break
;
}
if
(
hw_constraints_channels
!=
NULL
)
{
snd_pcm_hw_constraint_list
(
substream
->
runtime
,
0
,
SNDRV_PCM_HW_PARAM_CHANNELS
,
hw_constraints_channels
);
}
return
snd_hda_multi_out_dig_open
(
codec
,
&
spec
->
multiout
);
}
...
...
@@ -1532,7 +1602,7 @@ static struct hda_codec_preset snd_hda_preset_hdmi[] = {
{
.
id
=
0x1002793c
,
.
name
=
"RS600 HDMI"
,
.
patch
=
patch_atihdmi
},
{
.
id
=
0x10027919
,
.
name
=
"RS600 HDMI"
,
.
patch
=
patch_atihdmi
},
{
.
id
=
0x1002791a
,
.
name
=
"RS690/780 HDMI"
,
.
patch
=
patch_atihdmi
},
{
.
id
=
0x1002aa01
,
.
name
=
"R6xx HDMI"
,
.
patch
=
patch_
ati
hdmi
},
{
.
id
=
0x1002aa01
,
.
name
=
"R6xx HDMI"
,
.
patch
=
patch_
generic_
hdmi
},
{
.
id
=
0x10951390
,
.
name
=
"SiI1390 HDMI"
,
.
patch
=
patch_generic_hdmi
},
{
.
id
=
0x10951392
,
.
name
=
"SiI1392 HDMI"
,
.
patch
=
patch_generic_hdmi
},
{
.
id
=
0x17e80047
,
.
name
=
"Chrontel HDMI"
,
.
patch
=
patch_generic_hdmi
},
...
...
sound/pci/hda/patch_realtek.c
浏览文件 @
c400c9e2
此差异已折叠。
点击以展开。
sound/pci/hda/patch_sigmatel.c
浏览文件 @
c400c9e2
...
...
@@ -389,6 +389,9 @@ static hda_nid_t stac92hd83xxx_dmic_nids[STAC92HD83XXX_NUM_DMICS + 1] = {
0x11
,
0x20
,
0
};
#define STAC92HD88XXX_NUM_DMICS STAC92HD83XXX_NUM_DMICS
#define stac92hd88xxx_dmic_nids stac92hd83xxx_dmic_nids
#define STAC92HD87B_NUM_DMICS 1
static
hda_nid_t
stac92hd87b_dmic_nids
[
STAC92HD87B_NUM_DMICS
+
1
]
=
{
0x11
,
0
...
...
@@ -3591,7 +3594,7 @@ static int stac_check_auto_mic(struct hda_codec *codec)
if
(
check_mic_pin
(
codec
,
spec
->
dmic_nids
[
i
],
&
fixed
,
&
ext
,
&
dock
))
return
0
;
if
(
!
fixed
&&
!
ext
&&
!
dock
)
if
(
!
fixed
||
(
!
ext
&&
!
dock
)
)
return
0
;
/* no input to switch */
if
(
!
(
get_wcaps
(
codec
,
ext
)
&
AC_WCAP_UNSOL_CAP
))
return
0
;
/* no unsol support */
...
...
@@ -5422,7 +5425,7 @@ static int patch_stac92hd83xxx(struct hda_codec *codec)
snd_hda_codec_write_cache
(
codec
,
codec
->
afg
,
0
,
0x7ED
,
0
);
codec
->
no_trigger_sense
=
1
;
codec
->
spec
=
spec
;
spec
->
linear_tone_beep
=
1
;
spec
->
linear_tone_beep
=
0
;
codec
->
slave_dig_outs
=
stac92hd83xxx_slave_dig_outs
;
spec
->
digbeep_nid
=
0x21
;
spec
->
dmic_nids
=
stac92hd83xxx_dmic_nids
;
...
...
@@ -5462,15 +5465,21 @@ static int patch_stac92hd83xxx(struct hda_codec *codec)
spec
->
num_dmics
=
stac92xx_connected_ports
(
codec
,
stac92hd87b_dmic_nids
,
STAC92HD87B_NUM_DMICS
);
/* Fall through */
spec
->
num_pins
=
ARRAY_SIZE
(
stac92hd88xxx_pin_nids
);
spec
->
pin_nids
=
stac92hd88xxx_pin_nids
;
spec
->
mono_nid
=
0
;
spec
->
num_pwrs
=
0
;
break
;
case
0x111d7666
:
case
0x111d7667
:
case
0x111d7668
:
case
0x111d7669
:
spec
->
num_dmics
=
stac92xx_connected_ports
(
codec
,
stac92hd88xxx_dmic_nids
,
STAC92HD88XXX_NUM_DMICS
);
spec
->
num_pins
=
ARRAY_SIZE
(
stac92hd88xxx_pin_nids
);
spec
->
pin_nids
=
stac92hd88xxx_pin_nids
;
spec
->
mono_nid
=
0
;
spec
->
digbeep_nid
=
0
;
spec
->
num_pwrs
=
0
;
break
;
case
0x111d7604
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录