Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
d56757ab
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d56757ab
编写于
11月 18, 2009
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ALSA: hda - Replace the rest of jack-detections with snd_hda_jack_detect()
Signed-off-by:
N
Takashi Iwai
<
tiwai@suse.de
>
上级
83d605fd
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
45 addition
and
95 deletion
+45
-95
sound/pci/hda/patch_analog.c
sound/pci/hda/patch_analog.c
+16
-31
sound/pci/hda/patch_conexant.c
sound/pci/hda/patch_conexant.c
+11
-26
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+1
-2
sound/pci/hda/patch_sigmatel.c
sound/pci/hda/patch_sigmatel.c
+2
-5
sound/pci/hda/patch_via.c
sound/pci/hda/patch_via.c
+15
-31
未找到文件。
sound/pci/hda/patch_analog.c
浏览文件 @
d56757ab
...
@@ -720,10 +720,10 @@ static struct snd_kcontrol_new ad1986a_laptop_intmic_mixers[] = {
...
@@ -720,10 +720,10 @@ static struct snd_kcontrol_new ad1986a_laptop_intmic_mixers[] = {
static
void
ad1986a_automic
(
struct
hda_codec
*
codec
)
static
void
ad1986a_automic
(
struct
hda_codec
*
codec
)
{
{
unsigned
int
present
;
unsigned
int
present
;
present
=
snd_hda_
codec_read
(
codec
,
0x1f
,
0
,
AC_VERB_GET_PIN_SENSE
,
0
);
present
=
snd_hda_
jack_detect
(
codec
,
0x1f
);
/* 0 = 0x1f, 2 = 0x1d, 4 = mixed */
/* 0 = 0x1f, 2 = 0x1d, 4 = mixed */
snd_hda_codec_write
(
codec
,
0x0f
,
0
,
AC_VERB_SET_CONNECT_SEL
,
snd_hda_codec_write
(
codec
,
0x0f
,
0
,
AC_VERB_SET_CONNECT_SEL
,
(
present
&
AC_PINSENSE_PRESENCE
)
?
0
:
2
);
present
?
0
:
2
);
}
}
#define AD1986A_MIC_EVENT 0x36
#define AD1986A_MIC_EVENT 0x36
...
@@ -762,10 +762,8 @@ static void ad1986a_update_hp(struct hda_codec *codec)
...
@@ -762,10 +762,8 @@ static void ad1986a_update_hp(struct hda_codec *codec)
static
void
ad1986a_hp_automute
(
struct
hda_codec
*
codec
)
static
void
ad1986a_hp_automute
(
struct
hda_codec
*
codec
)
{
{
struct
ad198x_spec
*
spec
=
codec
->
spec
;
struct
ad198x_spec
*
spec
=
codec
->
spec
;
unsigned
int
present
;
present
=
snd_hda_codec_read
(
codec
,
0x1a
,
0
,
AC_VERB_GET_PIN_SENSE
,
0
);
spec
->
jack_present
=
snd_hda_jack_detect
(
codec
,
0x1a
);
spec
->
jack_present
=
!!
(
present
&
0x80000000
);
if
(
spec
->
inv_jack_detect
)
if
(
spec
->
inv_jack_detect
)
spec
->
jack_present
=
!
spec
->
jack_present
;
spec
->
jack_present
=
!
spec
->
jack_present
;
ad1986a_update_hp
(
codec
);
ad1986a_update_hp
(
codec
);
...
@@ -1555,8 +1553,7 @@ static void ad1981_hp_automute(struct hda_codec *codec)
...
@@ -1555,8 +1553,7 @@ static void ad1981_hp_automute(struct hda_codec *codec)
{
{
unsigned
int
present
;
unsigned
int
present
;
present
=
snd_hda_codec_read
(
codec
,
0x06
,
0
,
present
=
snd_hda_jack_detect
(
codec
,
0x06
);
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
snd_hda_codec_amp_stereo
(
codec
,
0x05
,
HDA_OUTPUT
,
0
,
snd_hda_codec_amp_stereo
(
codec
,
0x05
,
HDA_OUTPUT
,
0
,
HDA_AMP_MUTE
,
present
?
HDA_AMP_MUTE
:
0
);
HDA_AMP_MUTE
,
present
?
HDA_AMP_MUTE
:
0
);
}
}
...
@@ -1576,8 +1573,7 @@ static void ad1981_hp_automic(struct hda_codec *codec)
...
@@ -1576,8 +1573,7 @@ static void ad1981_hp_automic(struct hda_codec *codec)
};
};
unsigned
int
present
;
unsigned
int
present
;
present
=
snd_hda_codec_read
(
codec
,
0x08
,
0
,
present
=
snd_hda_jack_detect
(
codec
,
0x08
);
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
if
(
present
)
if
(
present
)
snd_hda_sequence_write
(
codec
,
mic_jack_on
);
snd_hda_sequence_write
(
codec
,
mic_jack_on
);
else
else
...
@@ -2532,7 +2528,7 @@ static void ad1988_laptop_unsol_event(struct hda_codec *codec, unsigned int res)
...
@@ -2532,7 +2528,7 @@ static void ad1988_laptop_unsol_event(struct hda_codec *codec, unsigned int res)
{
{
if
((
res
>>
26
)
!=
AD1988_HP_EVENT
)
if
((
res
>>
26
)
!=
AD1988_HP_EVENT
)
return
;
return
;
if
(
snd_hda_
codec_read
(
codec
,
0x11
,
0
,
AC_VERB_GET_PIN_SENSE
,
0
)
&
(
1
<<
3
1
))
if
(
snd_hda_
jack_detect
(
codec
,
0x1
1
))
snd_hda_sequence_write
(
codec
,
ad1988_laptop_hp_on
);
snd_hda_sequence_write
(
codec
,
ad1988_laptop_hp_on
);
else
else
snd_hda_sequence_write
(
codec
,
ad1988_laptop_hp_off
);
snd_hda_sequence_write
(
codec
,
ad1988_laptop_hp_off
);
...
@@ -3778,8 +3774,7 @@ static void ad1884a_hp_automute(struct hda_codec *codec)
...
@@ -3778,8 +3774,7 @@ static void ad1884a_hp_automute(struct hda_codec *codec)
{
{
unsigned
int
present
;
unsigned
int
present
;
present
=
snd_hda_codec_read
(
codec
,
0x11
,
0
,
present
=
snd_hda_jack_detect
(
codec
,
0x11
);
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
snd_hda_codec_amp_stereo
(
codec
,
0x16
,
HDA_OUTPUT
,
0
,
snd_hda_codec_amp_stereo
(
codec
,
0x16
,
HDA_OUTPUT
,
0
,
HDA_AMP_MUTE
,
present
?
HDA_AMP_MUTE
:
0
);
HDA_AMP_MUTE
,
present
?
HDA_AMP_MUTE
:
0
);
snd_hda_codec_write
(
codec
,
0x16
,
0
,
AC_VERB_SET_EAPD_BTLENABLE
,
snd_hda_codec_write
(
codec
,
0x16
,
0
,
AC_VERB_SET_EAPD_BTLENABLE
,
...
@@ -3791,8 +3786,7 @@ static void ad1884a_hp_automic(struct hda_codec *codec)
...
@@ -3791,8 +3786,7 @@ static void ad1884a_hp_automic(struct hda_codec *codec)
{
{
unsigned
int
present
;
unsigned
int
present
;
present
=
snd_hda_codec_read
(
codec
,
0x14
,
0
,
present
=
snd_hda_jack_detect
(
codec
,
0x14
);
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
snd_hda_codec_write
(
codec
,
0x0c
,
0
,
AC_VERB_SET_CONNECT_SEL
,
snd_hda_codec_write
(
codec
,
0x0c
,
0
,
AC_VERB_SET_CONNECT_SEL
,
present
?
0
:
1
);
present
?
0
:
1
);
}
}
...
@@ -3827,13 +3821,9 @@ static void ad1884a_laptop_automute(struct hda_codec *codec)
...
@@ -3827,13 +3821,9 @@ static void ad1884a_laptop_automute(struct hda_codec *codec)
{
{
unsigned
int
present
;
unsigned
int
present
;
present
=
snd_hda_codec_read
(
codec
,
0x11
,
0
,
AC_VERB_GET_PIN_SENSE
,
0
);
present
=
snd_hda_jack_detect
(
codec
,
0x11
);
present
&=
AC_PINSENSE_PRESENCE
;
if
(
!
present
)
if
(
!
present
)
{
present
=
snd_hda_jack_detect
(
codec
,
0x12
);
present
=
snd_hda_codec_read
(
codec
,
0x12
,
0
,
AC_VERB_GET_PIN_SENSE
,
0
);
present
&=
AC_PINSENSE_PRESENCE
;
}
snd_hda_codec_amp_stereo
(
codec
,
0x16
,
HDA_OUTPUT
,
0
,
snd_hda_codec_amp_stereo
(
codec
,
0x16
,
HDA_OUTPUT
,
0
,
HDA_AMP_MUTE
,
present
?
HDA_AMP_MUTE
:
0
);
HDA_AMP_MUTE
,
present
?
HDA_AMP_MUTE
:
0
);
snd_hda_codec_write
(
codec
,
0x16
,
0
,
AC_VERB_SET_EAPD_BTLENABLE
,
snd_hda_codec_write
(
codec
,
0x16
,
0
,
AC_VERB_SET_EAPD_BTLENABLE
,
...
@@ -3845,11 +3835,9 @@ static void ad1884a_laptop_automic(struct hda_codec *codec)
...
@@ -3845,11 +3835,9 @@ static void ad1884a_laptop_automic(struct hda_codec *codec)
{
{
unsigned
int
idx
;
unsigned
int
idx
;
if
(
snd_hda_codec_read
(
codec
,
0x14
,
0
,
AC_VERB_GET_PIN_SENSE
,
0
)
&
if
(
snd_hda_jack_detect
(
codec
,
0x14
))
AC_PINSENSE_PRESENCE
)
idx
=
0
;
idx
=
0
;
else
if
(
snd_hda_codec_read
(
codec
,
0x1c
,
0
,
AC_VERB_GET_PIN_SENSE
,
0
)
&
else
if
(
snd_hda_jack_detect
(
codec
,
0x1c
))
AC_PINSENSE_PRESENCE
)
idx
=
4
;
idx
=
4
;
else
else
idx
=
1
;
idx
=
1
;
...
@@ -4018,8 +4006,7 @@ static void ad1984a_thinkpad_automute(struct hda_codec *codec)
...
@@ -4018,8 +4006,7 @@ static void ad1984a_thinkpad_automute(struct hda_codec *codec)
{
{
unsigned
int
present
;
unsigned
int
present
;
present
=
snd_hda_codec_read
(
codec
,
0x11
,
0
,
AC_VERB_GET_PIN_SENSE
,
0
)
present
=
snd_hda_jack_detect
(
codec
,
0x11
);
&
AC_PINSENSE_PRESENCE
;
snd_hda_codec_amp_stereo
(
codec
,
0x12
,
HDA_OUTPUT
,
0
,
snd_hda_codec_amp_stereo
(
codec
,
0x12
,
HDA_OUTPUT
,
0
,
HDA_AMP_MUTE
,
present
?
HDA_AMP_MUTE
:
0
);
HDA_AMP_MUTE
,
present
?
HDA_AMP_MUTE
:
0
);
}
}
...
@@ -4127,14 +4114,12 @@ static struct snd_kcontrol_new ad1984a_touchsmart_mixers[] = {
...
@@ -4127,14 +4114,12 @@ static struct snd_kcontrol_new ad1984a_touchsmart_mixers[] = {
/* switch to external mic if plugged */
/* switch to external mic if plugged */
static
void
ad1984a_touchsmart_automic
(
struct
hda_codec
*
codec
)
static
void
ad1984a_touchsmart_automic
(
struct
hda_codec
*
codec
)
{
{
if
(
snd_hda_codec_read
(
codec
,
0x1c
,
0
,
if
(
snd_hda_jack_detect
(
codec
,
0x1c
))
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
)
{
snd_hda_codec_write
(
codec
,
0x0c
,
0
,
snd_hda_codec_write
(
codec
,
0x0c
,
0
,
AC_VERB_SET_CONNECT_SEL
,
0x4
);
AC_VERB_SET_CONNECT_SEL
,
0x4
);
}
else
{
else
snd_hda_codec_write
(
codec
,
0x0c
,
0
,
snd_hda_codec_write
(
codec
,
0x0c
,
0
,
AC_VERB_SET_CONNECT_SEL
,
0x5
);
AC_VERB_SET_CONNECT_SEL
,
0x5
);
}
}
}
...
...
sound/pci/hda/patch_conexant.c
浏览文件 @
d56757ab
...
@@ -397,9 +397,7 @@ static void conexant_report_jack(struct hda_codec *codec, hda_nid_t nid)
...
@@ -397,9 +397,7 @@ static void conexant_report_jack(struct hda_codec *codec, hda_nid_t nid)
for
(
i
=
0
;
i
<
spec
->
jacks
.
used
;
i
++
)
{
for
(
i
=
0
;
i
<
spec
->
jacks
.
used
;
i
++
)
{
if
(
jacks
->
nid
==
nid
)
{
if
(
jacks
->
nid
==
nid
)
{
unsigned
int
present
;
unsigned
int
present
;
present
=
snd_hda_codec_read
(
codec
,
nid
,
0
,
present
=
snd_hda_jack_detect
(
codec
,
nid
);
AC_VERB_GET_PIN_SENSE
,
0
)
&
AC_PINSENSE_PRESENCE
;
present
=
(
present
)
?
jacks
->
type
:
0
;
present
=
(
present
)
?
jacks
->
type
:
0
;
...
@@ -750,8 +748,7 @@ static void cxt5045_hp_automic(struct hda_codec *codec)
...
@@ -750,8 +748,7 @@ static void cxt5045_hp_automic(struct hda_codec *codec)
};
};
unsigned
int
present
;
unsigned
int
present
;
present
=
snd_hda_codec_read
(
codec
,
0x12
,
0
,
present
=
snd_hda_jack_detect
(
codec
,
0x12
);
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
if
(
present
)
if
(
present
)
snd_hda_sequence_write
(
codec
,
mic_jack_on
);
snd_hda_sequence_write
(
codec
,
mic_jack_on
);
else
else
...
@@ -765,8 +762,7 @@ static void cxt5045_hp_automute(struct hda_codec *codec)
...
@@ -765,8 +762,7 @@ static void cxt5045_hp_automute(struct hda_codec *codec)
struct
conexant_spec
*
spec
=
codec
->
spec
;
struct
conexant_spec
*
spec
=
codec
->
spec
;
unsigned
int
bits
;
unsigned
int
bits
;
spec
->
hp_present
=
snd_hda_codec_read
(
codec
,
0x11
,
0
,
spec
->
hp_present
=
snd_hda_jack_detect
(
codec
,
0x11
);
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
bits
=
(
spec
->
hp_present
||
!
spec
->
cur_eapd
)
?
HDA_AMP_MUTE
:
0
;
bits
=
(
spec
->
hp_present
||
!
spec
->
cur_eapd
)
?
HDA_AMP_MUTE
:
0
;
snd_hda_codec_amp_stereo
(
codec
,
0x10
,
HDA_OUTPUT
,
0
,
snd_hda_codec_amp_stereo
(
codec
,
0x10
,
HDA_OUTPUT
,
0
,
...
@@ -1243,8 +1239,7 @@ static void cxt5047_hp_automute(struct hda_codec *codec)
...
@@ -1243,8 +1239,7 @@ static void cxt5047_hp_automute(struct hda_codec *codec)
struct
conexant_spec
*
spec
=
codec
->
spec
;
struct
conexant_spec
*
spec
=
codec
->
spec
;
unsigned
int
bits
;
unsigned
int
bits
;
spec
->
hp_present
=
snd_hda_codec_read
(
codec
,
0x13
,
0
,
spec
->
hp_present
=
snd_hda_jack_detect
(
codec
,
0x13
);
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
bits
=
(
spec
->
hp_present
||
!
spec
->
cur_eapd
)
?
HDA_AMP_MUTE
:
0
;
bits
=
(
spec
->
hp_present
||
!
spec
->
cur_eapd
)
?
HDA_AMP_MUTE
:
0
;
/* See the note in cxt5047_hp_master_sw_put */
/* See the note in cxt5047_hp_master_sw_put */
...
@@ -1267,8 +1262,7 @@ static void cxt5047_hp_automic(struct hda_codec *codec)
...
@@ -1267,8 +1262,7 @@ static void cxt5047_hp_automic(struct hda_codec *codec)
};
};
unsigned
int
present
;
unsigned
int
present
;
present
=
snd_hda_codec_read
(
codec
,
0x15
,
0
,
present
=
snd_hda_jack_detect
(
codec
,
0x15
);
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
if
(
present
)
if
(
present
)
snd_hda_sequence_write
(
codec
,
mic_jack_on
);
snd_hda_sequence_write
(
codec
,
mic_jack_on
);
else
else
...
@@ -1621,9 +1615,7 @@ static void cxt5051_portb_automic(struct hda_codec *codec)
...
@@ -1621,9 +1615,7 @@ static void cxt5051_portb_automic(struct hda_codec *codec)
if
(
spec
->
no_auto_mic
)
if
(
spec
->
no_auto_mic
)
return
;
return
;
present
=
snd_hda_codec_read
(
codec
,
0x17
,
0
,
present
=
snd_hda_jack_detect
(
codec
,
0x17
);
AC_VERB_GET_PIN_SENSE
,
0
)
&
AC_PINSENSE_PRESENCE
;
snd_hda_codec_write
(
codec
,
0x14
,
0
,
snd_hda_codec_write
(
codec
,
0x14
,
0
,
AC_VERB_SET_CONNECT_SEL
,
AC_VERB_SET_CONNECT_SEL
,
present
?
0x01
:
0x00
);
present
?
0x01
:
0x00
);
...
@@ -1638,9 +1630,7 @@ static void cxt5051_portc_automic(struct hda_codec *codec)
...
@@ -1638,9 +1630,7 @@ static void cxt5051_portc_automic(struct hda_codec *codec)
if
(
spec
->
no_auto_mic
)
if
(
spec
->
no_auto_mic
)
return
;
return
;
present
=
snd_hda_codec_read
(
codec
,
0x18
,
0
,
present
=
snd_hda_jack_detect
(
codec
,
0x18
);
AC_VERB_GET_PIN_SENSE
,
0
)
&
AC_PINSENSE_PRESENCE
;
if
(
present
)
if
(
present
)
spec
->
cur_adc_idx
=
1
;
spec
->
cur_adc_idx
=
1
;
else
else
...
@@ -1661,9 +1651,7 @@ static void cxt5051_hp_automute(struct hda_codec *codec)
...
@@ -1661,9 +1651,7 @@ static void cxt5051_hp_automute(struct hda_codec *codec)
{
{
struct
conexant_spec
*
spec
=
codec
->
spec
;
struct
conexant_spec
*
spec
=
codec
->
spec
;
spec
->
hp_present
=
snd_hda_codec_read
(
codec
,
0x16
,
0
,
spec
->
hp_present
=
snd_hda_jack_detect
(
codec
,
0x16
);
AC_VERB_GET_PIN_SENSE
,
0
)
&
AC_PINSENSE_PRESENCE
;
cxt5051_update_speaker
(
codec
);
cxt5051_update_speaker
(
codec
);
}
}
...
@@ -2011,8 +1999,7 @@ static void cxt5066_automic(struct hda_codec *codec)
...
@@ -2011,8 +1999,7 @@ static void cxt5066_automic(struct hda_codec *codec)
};
};
unsigned
int
present
;
unsigned
int
present
;
present
=
snd_hda_codec_read
(
codec
,
0x1a
,
0
,
present
=
snd_hda_jack_detect
(
codec
,
0x1a
);
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
if
(
present
)
{
if
(
present
)
{
snd_printdd
(
"CXT5066: external microphone detected
\n
"
);
snd_printdd
(
"CXT5066: external microphone detected
\n
"
);
snd_hda_sequence_write
(
codec
,
ext_mic_present
);
snd_hda_sequence_write
(
codec
,
ext_mic_present
);
...
@@ -2029,12 +2016,10 @@ static void cxt5066_hp_automute(struct hda_codec *codec)
...
@@ -2029,12 +2016,10 @@ static void cxt5066_hp_automute(struct hda_codec *codec)
unsigned
int
portA
,
portD
;
unsigned
int
portA
,
portD
;
/* Port A */
/* Port A */
portA
=
snd_hda_codec_read
(
codec
,
0x19
,
0
,
AC_VERB_GET_PIN_SENSE
,
0
)
portA
=
snd_hda_jack_detect
(
codec
,
0x19
);
&
AC_PINSENSE_PRESENCE
;
/* Port D */
/* Port D */
portD
=
(
snd_hda_codec_read
(
codec
,
0x1c
,
0
,
AC_VERB_GET_PIN_SENSE
,
0
)
portD
=
snd_hda_jack_detect
(
codec
,
0x1c
);
&
AC_PINSENSE_PRESENCE
)
<<
1
;
spec
->
hp_present
=
!!
(
portA
|
portD
);
spec
->
hp_present
=
!!
(
portA
|
portD
);
snd_printdd
(
"CXT5066: hp automute portA=%x portD=%x present=%d
\n
"
,
snd_printdd
(
"CXT5066: hp automute portA=%x portD=%x present=%d
\n
"
,
...
...
sound/pci/hda/patch_realtek.c
浏览文件 @
d56757ab
...
@@ -8446,8 +8446,7 @@ static void alc883_clevo_m720_mic_automute(struct hda_codec *codec)
...
@@ -8446,8 +8446,7 @@ static void alc883_clevo_m720_mic_automute(struct hda_codec *codec)
{
{
unsigned int present;
unsigned int present;
present = snd_hda_codec_read(codec, 0x18, 0,
present = snd_hda_jack_detect(codec, 0x18);
AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
snd_hda_codec_amp_stereo(codec, 0x0b, HDA_INPUT, 1,
snd_hda_codec_amp_stereo(codec, 0x0b, HDA_INPUT, 1,
HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
}
}
...
...
sound/pci/hda/patch_sigmatel.c
浏览文件 @
d56757ab
...
@@ -4413,14 +4413,11 @@ static void stac92xx_reset_pinctl(struct hda_codec *codec, hda_nid_t nid,
...
@@ -4413,14 +4413,11 @@ static void stac92xx_reset_pinctl(struct hda_codec *codec, hda_nid_t nid,
pin_ctl
&
~
flag
);
pin_ctl
&
~
flag
);
}
}
static
int
get_pin_presence
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
)
static
in
line
in
t
get_pin_presence
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
)
{
{
if
(
!
nid
)
if
(
!
nid
)
return
0
;
return
0
;
if
(
snd_hda_codec_read
(
codec
,
nid
,
0
,
AC_VERB_GET_PIN_SENSE
,
0x00
)
return
snd_hda_jack_detect
(
codec
,
nid
);
&
(
1
<<
31
))
return
1
;
return
0
;
}
}
static
void
stac92xx_line_out_detect
(
struct
hda_codec
*
codec
,
static
void
stac92xx_line_out_detect
(
struct
hda_codec
*
codec
,
...
...
sound/pci/hda/patch_via.c
浏览文件 @
d56757ab
...
@@ -547,8 +547,7 @@ static void set_pin_power_state(struct hda_codec *codec, hda_nid_t nid,
...
@@ -547,8 +547,7 @@ static void set_pin_power_state(struct hda_codec *codec, hda_nid_t nid,
unsigned
no_presence
=
(
def_conf
&
AC_DEFCFG_MISC
)
unsigned
no_presence
=
(
def_conf
&
AC_DEFCFG_MISC
)
>>
AC_DEFCFG_MISC_SHIFT
>>
AC_DEFCFG_MISC_SHIFT
&
AC_DEFCFG_MISC_NO_PRESENCE
;
/* do not support pin sense */
&
AC_DEFCFG_MISC_NO_PRESENCE
;
/* do not support pin sense */
unsigned
present
=
snd_hda_codec_read
(
codec
,
nid
,
0
,
unsigned
present
=
snd_hda_jack_detect
(
codec
,
nid
);
AC_VERB_GET_PIN_SENSE
,
0
)
>>
31
;
struct
via_spec
*
spec
=
codec
->
spec
;
struct
via_spec
*
spec
=
codec
->
spec
;
if
((
spec
->
smart51_enabled
&&
is_smart51_pins
(
spec
,
nid
))
if
((
spec
->
smart51_enabled
&&
is_smart51_pins
(
spec
,
nid
))
||
((
no_presence
||
present
)
||
((
no_presence
||
present
)
...
@@ -786,14 +785,11 @@ static void set_jack_power_state(struct hda_codec *codec)
...
@@ -786,14 +785,11 @@ static void set_jack_power_state(struct hda_codec *codec)
/* Mono out */
/* Mono out */
/* SW4(28h)->MW1(29h)-> PW12 (2ah)*/
/* SW4(28h)->MW1(29h)-> PW12 (2ah)*/
present
=
snd_hda_codec_read
(
present
=
snd_hda_jack_detect
(
codec
,
0x1c
);
codec
,
0x1c
,
0
,
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
if
(
present
)
if
(
present
)
mono_out
=
0
;
mono_out
=
0
;
else
{
else
{
present
=
snd_hda_codec_read
(
present
=
snd_hda_jack_detect
(
codec
,
0x1d
);
codec
,
0x1d
,
0
,
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
if
(
!
spec
->
hp_independent_mode
&&
present
)
if
(
!
spec
->
hp_independent_mode
&&
present
)
mono_out
=
0
;
mono_out
=
0
;
else
else
...
@@ -872,8 +868,7 @@ static void set_jack_power_state(struct hda_codec *codec)
...
@@ -872,8 +868,7 @@ static void set_jack_power_state(struct hda_codec *codec)
/* Class-D */
/* Class-D */
/* PW0 (24h), MW0(18h), MUX0(34h) */
/* PW0 (24h), MW0(18h), MUX0(34h) */
present
=
snd_hda_codec_read
(
present
=
snd_hda_jack_detect
(
codec
,
0x25
);
codec
,
0x25
,
0
,
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
parm
=
AC_PWRST_D3
;
parm
=
AC_PWRST_D3
;
set_pin_power_state
(
codec
,
0x24
,
&
parm
);
set_pin_power_state
(
codec
,
0x24
,
&
parm
);
if
(
present
)
{
if
(
present
)
{
...
@@ -894,8 +889,7 @@ static void set_jack_power_state(struct hda_codec *codec)
...
@@ -894,8 +889,7 @@ static void set_jack_power_state(struct hda_codec *codec)
/* Mono Out */
/* Mono Out */
/* PW15 (31h), MW8(17h), MUX8(3bh) */
/* PW15 (31h), MW8(17h), MUX8(3bh) */
present
=
snd_hda_codec_read
(
present
=
snd_hda_jack_detect
(
codec
,
0x26
);
codec
,
0x26
,
0
,
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
parm
=
AC_PWRST_D3
;
parm
=
AC_PWRST_D3
;
set_pin_power_state
(
codec
,
0x31
,
&
parm
);
set_pin_power_state
(
codec
,
0x31
,
&
parm
);
if
(
present
)
{
if
(
present
)
{
...
@@ -973,8 +967,7 @@ static void set_jack_power_state(struct hda_codec *codec)
...
@@ -973,8 +967,7 @@ static void set_jack_power_state(struct hda_codec *codec)
/* Internal Speaker */
/* Internal Speaker */
/* PW0 (24h), MW0(14h), MUX0(34h) */
/* PW0 (24h), MW0(14h), MUX0(34h) */
present
=
snd_hda_codec_read
(
present
=
snd_hda_jack_detect
(
codec
,
0x25
);
codec
,
0x25
,
0
,
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
parm
=
AC_PWRST_D3
;
parm
=
AC_PWRST_D3
;
set_pin_power_state
(
codec
,
0x24
,
&
parm
);
set_pin_power_state
(
codec
,
0x24
,
&
parm
);
if
(
present
)
{
if
(
present
)
{
...
@@ -994,8 +987,7 @@ static void set_jack_power_state(struct hda_codec *codec)
...
@@ -994,8 +987,7 @@ static void set_jack_power_state(struct hda_codec *codec)
}
}
/* Mono Out */
/* Mono Out */
/* PW13 (31h), MW13(1ch), MUX13(3ch), MW14(3eh) */
/* PW13 (31h), MW13(1ch), MUX13(3ch), MW14(3eh) */
present
=
snd_hda_codec_read
(
present
=
snd_hda_jack_detect
(
codec
,
0x28
);
codec
,
0x28
,
0
,
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
parm
=
AC_PWRST_D3
;
parm
=
AC_PWRST_D3
;
set_pin_power_state
(
codec
,
0x31
,
&
parm
);
set_pin_power_state
(
codec
,
0x31
,
&
parm
);
if
(
present
)
{
if
(
present
)
{
...
@@ -1920,8 +1912,7 @@ static void via_hp_automute(struct hda_codec *codec)
...
@@ -1920,8 +1912,7 @@ static void via_hp_automute(struct hda_codec *codec)
unsigned
int
present
=
0
;
unsigned
int
present
=
0
;
struct
via_spec
*
spec
=
codec
->
spec
;
struct
via_spec
*
spec
=
codec
->
spec
;
present
=
snd_hda_codec_read
(
codec
,
spec
->
autocfg
.
hp_pins
[
0
],
0
,
present
=
snd_hda_jack_detect
(
codec
,
spec
->
autocfg
.
hp_pins
[
0
]);
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
if
(
!
spec
->
hp_independent_mode
)
{
if
(
!
spec
->
hp_independent_mode
)
{
struct
snd_ctl_elem_id
id
;
struct
snd_ctl_elem_id
id
;
...
@@ -1947,9 +1938,8 @@ static void via_mono_automute(struct hda_codec *codec)
...
@@ -1947,9 +1938,8 @@ static void via_mono_automute(struct hda_codec *codec)
if
(
spec
->
codec_type
!=
VT1716S
)
if
(
spec
->
codec_type
!=
VT1716S
)
return
;
return
;
lineout_present
=
snd_hda_codec_read
(
lineout_present
=
snd_hda_jack_detect
(
codec
,
codec
,
spec
->
autocfg
.
line_out_pins
[
0
],
0
,
spec
->
autocfg
.
line_out_pins
[
0
]);
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
/* Mute Mono Out if Line Out is plugged */
/* Mute Mono Out if Line Out is plugged */
if
(
lineout_present
)
{
if
(
lineout_present
)
{
...
@@ -1958,9 +1948,7 @@ static void via_mono_automute(struct hda_codec *codec)
...
@@ -1958,9 +1948,7 @@ static void via_mono_automute(struct hda_codec *codec)
return
;
return
;
}
}
hp_present
=
snd_hda_codec_read
(
hp_present
=
snd_hda_jack_detect
(
codec
,
spec
->
autocfg
.
hp_pins
[
0
]);
codec
,
spec
->
autocfg
.
hp_pins
[
0
],
0
,
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
if
(
!
spec
->
hp_independent_mode
)
if
(
!
spec
->
hp_independent_mode
)
snd_hda_codec_amp_stereo
(
snd_hda_codec_amp_stereo
(
...
@@ -2025,8 +2013,7 @@ static void via_speaker_automute(struct hda_codec *codec)
...
@@ -2025,8 +2013,7 @@ static void via_speaker_automute(struct hda_codec *codec)
if
(
spec
->
codec_type
!=
VT2002P
&&
spec
->
codec_type
!=
VT1812
)
if
(
spec
->
codec_type
!=
VT2002P
&&
spec
->
codec_type
!=
VT1812
)
return
;
return
;
hp_present
=
snd_hda_codec_read
(
codec
,
spec
->
autocfg
.
hp_pins
[
0
],
0
,
hp_present
=
snd_hda_jack_detect
(
codec
,
spec
->
autocfg
.
hp_pins
[
0
]);
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
if
(
!
spec
->
hp_independent_mode
)
{
if
(
!
spec
->
hp_independent_mode
)
{
struct
snd_ctl_elem_id
id
;
struct
snd_ctl_elem_id
id
;
...
@@ -2055,11 +2042,9 @@ static void via_hp_bind_automute(struct hda_codec *codec)
...
@@ -2055,11 +2042,9 @@ static void via_hp_bind_automute(struct hda_codec *codec)
if
(
!
spec
->
autocfg
.
hp_pins
[
0
]
||
!
spec
->
autocfg
.
line_out_pins
[
0
])
if
(
!
spec
->
autocfg
.
hp_pins
[
0
]
||
!
spec
->
autocfg
.
line_out_pins
[
0
])
return
;
return
;
hp_present
=
snd_hda_codec_read
(
codec
,
spec
->
autocfg
.
hp_pins
[
0
],
0
,
hp_present
=
snd_hda_jack_detect
(
codec
,
spec
->
autocfg
.
hp_pins
[
0
]);
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
present
=
snd_hda_codec_read
(
codec
,
spec
->
autocfg
.
line_out_pins
[
0
],
0
,
present
=
snd_hda_jack_detect
(
codec
,
spec
->
autocfg
.
line_out_pins
[
0
]);
AC_VERB_GET_PIN_SENSE
,
0
)
&
0x80000000
;
if
(
!
spec
->
hp_independent_mode
)
{
if
(
!
spec
->
hp_independent_mode
)
{
/* Mute Line-Outs */
/* Mute Line-Outs */
...
@@ -2529,8 +2514,7 @@ static void vt1708_update_hp_jack_state(struct work_struct *work)
...
@@ -2529,8 +2514,7 @@ static void vt1708_update_hp_jack_state(struct work_struct *work)
return
;
return
;
/* if jack state toggled */
/* if jack state toggled */
if
(
spec
->
vt1708_hp_present
if
(
spec
->
vt1708_hp_present
!=
(
snd_hda_codec_read
(
spec
->
codec
,
spec
->
autocfg
.
hp_pins
[
0
],
0
,
!=
snd_hda_jack_detect
(
spec
->
codec
,
spec
->
autocfg
.
hp_pins
[
0
]))
{
AC_VERB_GET_PIN_SENSE
,
0
)
>>
31
))
{
spec
->
vt1708_hp_present
^=
1
;
spec
->
vt1708_hp_present
^=
1
;
via_hp_automute
(
spec
->
codec
);
via_hp_automute
(
spec
->
codec
);
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录