Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
475c3d21
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看板
提交
475c3d21
编写于
11月 30, 2012
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ALSA: hda - Pass errors properly in alc_auto_check_switches()
Signed-off-by:
N
Takashi Iwai
<
tiwai@suse.de
>
上级
668d1e96
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
37 addition
and
22 deletion
+37
-22
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+37
-22
未找到文件。
sound/pci/hda/patch_realtek.c
浏览文件 @
475c3d21
...
...
@@ -930,12 +930,12 @@ static int alc_add_automute_mode_enum(struct hda_codec *codec)
* Check the availability of HP/line-out auto-mute;
* Set up appropriately if really supported
*/
static
void
alc_init_automute
(
struct
hda_codec
*
codec
)
static
int
alc_init_automute
(
struct
hda_codec
*
codec
)
{
struct
alc_spec
*
spec
=
codec
->
spec
;
struct
auto_pin_cfg
*
cfg
=
&
spec
->
autocfg
;
int
present
=
0
;
int
i
;
int
i
,
err
;
if
(
cfg
->
hp_pins
[
0
])
present
++
;
...
...
@@ -944,7 +944,7 @@ static void alc_init_automute(struct hda_codec *codec)
if
(
cfg
->
speaker_pins
[
0
])
present
++
;
if
(
present
<
2
)
/* need two different output types */
return
;
return
0
;
if
(
!
cfg
->
speaker_pins
[
0
]
&&
cfg
->
line_out_type
==
AUTO_PIN_SPEAKER_OUT
)
{
...
...
@@ -994,9 +994,13 @@ static void alc_init_automute(struct hda_codec *codec)
spec
->
automute_lo
=
spec
->
automute_lo_possible
;
spec
->
automute_speaker
=
spec
->
automute_speaker_possible
;
if
(
spec
->
automute_speaker_possible
||
spec
->
automute_lo_possible
)
if
(
spec
->
automute_speaker_possible
||
spec
->
automute_lo_possible
)
{
/* create a control for automute mode */
alc_add_automute_mode_enum
(
codec
);
err
=
alc_add_automute_mode_enum
(
codec
);
if
(
err
<
0
)
return
err
;
}
return
0
;
}
/* return the position of NID in the list, or -1 if not found */
...
...
@@ -1096,7 +1100,7 @@ static bool alc_auto_mic_check_imux(struct hda_codec *codec)
* Check the availability of auto-mic switch;
* Set up if really supported
*/
static
void
alc_init_auto_mic
(
struct
hda_codec
*
codec
)
static
int
alc_init_auto_mic
(
struct
hda_codec
*
codec
)
{
struct
alc_spec
*
spec
=
codec
->
spec
;
struct
auto_pin_cfg
*
cfg
=
&
spec
->
autocfg
;
...
...
@@ -1104,7 +1108,7 @@ static void alc_init_auto_mic(struct hda_codec *codec)
int
i
;
if
(
spec
->
shared_mic_hp
)
return
;
/* no auto-mic for the shared I/O */
return
0
;
/* no auto-mic for the shared I/O */
spec
->
ext_mic_idx
=
spec
->
int_mic_idx
=
spec
->
dock_mic_idx
=
-
1
;
...
...
@@ -1116,25 +1120,25 @@ static void alc_init_auto_mic(struct hda_codec *codec)
switch
(
snd_hda_get_input_pin_attr
(
defcfg
))
{
case
INPUT_PIN_ATTR_INT
:
if
(
fixed
)
return
;
/* already occupied */
return
0
;
/* already occupied */
if
(
cfg
->
inputs
[
i
].
type
!=
AUTO_PIN_MIC
)
return
;
/* invalid type */
return
0
;
/* invalid type */
fixed
=
nid
;
break
;
case
INPUT_PIN_ATTR_UNUSED
:
return
;
/* invalid entry */
return
0
;
/* invalid entry */
case
INPUT_PIN_ATTR_DOCK
:
if
(
dock
)
return
;
/* already occupied */
return
0
;
/* already occupied */
if
(
cfg
->
inputs
[
i
].
type
>
AUTO_PIN_LINE_IN
)
return
;
/* invalid type */
return
0
;
/* invalid type */
dock
=
nid
;
break
;
default:
if
(
ext
)
return
;
/* already occupied */
return
0
;
/* already occupied */
if
(
cfg
->
inputs
[
i
].
type
!=
AUTO_PIN_MIC
)
return
;
/* invalid type */
return
0
;
/* invalid type */
ext
=
nid
;
break
;
}
...
...
@@ -1144,11 +1148,11 @@ static void alc_init_auto_mic(struct hda_codec *codec)
dock
=
0
;
}
if
(
!
ext
||
!
fixed
)
return
;
return
0
;
if
(
!
is_jack_detectable
(
codec
,
ext
))
return
;
/* no unsol support */
return
0
;
/* no unsol support */
if
(
dock
&&
!
is_jack_detectable
(
codec
,
dock
))
return
;
/* no unsol support */
return
0
;
/* no unsol support */
/* check imux indices */
spec
->
ext_mic_pin
=
ext
;
...
...
@@ -1157,17 +1161,26 @@ static void alc_init_auto_mic(struct hda_codec *codec)
spec
->
auto_mic
=
1
;
if
(
!
alc_auto_mic_check_imux
(
codec
))
return
;
return
0
;
snd_printdd
(
"realtek: Enable auto-mic switch on NID 0x%x/0x%x/0x%x
\n
"
,
ext
,
fixed
,
dock
);
return
0
;
}
/* check the availabilities of auto-mute and auto-mic switches */
static
void
alc_auto_check_switches
(
struct
hda_codec
*
codec
)
static
int
alc_auto_check_switches
(
struct
hda_codec
*
codec
)
{
alc_init_automute
(
codec
);
alc_init_auto_mic
(
codec
);
int
err
;
err
=
alc_init_automute
(
codec
);
if
(
err
<
0
)
return
err
;
err
=
alc_init_auto_mic
(
codec
);
if
(
err
<
0
)
return
err
;
return
0
;
}
/*
...
...
@@ -4338,7 +4351,9 @@ static int alc_parse_auto_config(struct hda_codec *codec,
alc_ssid_check
(
codec
,
ssid_nids
);
if
(
!
spec
->
no_analog
)
{
alc_auto_check_switches
(
codec
);
err
=
alc_auto_check_switches
(
codec
);
if
(
err
<
0
)
return
err
;
err
=
alc_auto_add_mic_boost
(
codec
);
if
(
err
<
0
)
return
err
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录