Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
696620a6
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
696620a6
编写于
11月 28, 2013
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'for-linus' into for-next
上级
12edb893
2cede303
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
105 addition
and
24 deletion
+105
-24
sound/pci/hda/hda_generic.c
sound/pci/hda/hda_generic.c
+58
-21
sound/pci/hda/patch_conexant.c
sound/pci/hda/patch_conexant.c
+23
-0
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+9
-2
sound/usb/endpoint.c
sound/usb/endpoint.c
+15
-1
未找到文件。
sound/pci/hda/hda_generic.c
浏览文件 @
696620a6
...
...
@@ -2507,12 +2507,8 @@ static int create_out_jack_modes(struct hda_codec *codec, int num_pins,
for
(
i
=
0
;
i
<
num_pins
;
i
++
)
{
hda_nid_t
pin
=
pins
[
i
];
if
(
pin
==
spec
->
hp_mic_pin
)
{
int
ret
=
create_hp_mic_jack_mode
(
codec
,
pin
);
if
(
ret
<
0
)
return
ret
;
if
(
pin
==
spec
->
hp_mic_pin
)
continue
;
}
if
(
get_out_jack_num_items
(
codec
,
pin
)
>
1
)
{
struct
snd_kcontrol_new
*
knew
;
char
name
[
SNDRV_CTL_ELEM_ID_NAME_MAXLEN
];
...
...
@@ -2765,7 +2761,7 @@ static int hp_mic_jack_mode_put(struct snd_kcontrol *kcontrol,
val
&=
~
(
AC_PINCTL_VREFEN
|
PIN_HP
);
val
|=
get_vref_idx
(
vref_caps
,
idx
)
|
PIN_IN
;
}
else
val
=
snd_hda_get_default_vref
(
codec
,
nid
);
val
=
snd_hda_get_default_vref
(
codec
,
nid
)
|
PIN_IN
;
}
snd_hda_set_pin_ctl_cache
(
codec
,
nid
,
val
);
call_hp_automute
(
codec
,
NULL
);
...
...
@@ -2785,9 +2781,6 @@ static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin)
struct
hda_gen_spec
*
spec
=
codec
->
spec
;
struct
snd_kcontrol_new
*
knew
;
if
(
get_out_jack_num_items
(
codec
,
pin
)
<=
1
&&
get_in_jack_num_items
(
codec
,
pin
)
<=
1
)
return
0
;
/* no need */
knew
=
snd_hda_gen_add_kctl
(
spec
,
"Headphone Mic Jack Mode"
,
&
hp_mic_jack_mode_enum
);
if
(
!
knew
)
...
...
@@ -2816,6 +2809,42 @@ static int add_loopback_list(struct hda_gen_spec *spec, hda_nid_t mix, int idx)
return
0
;
}
/* return true if either a volume or a mute amp is found for the given
* aamix path; the amp has to be either in the mixer node or its direct leaf
*/
static
bool
look_for_mix_leaf_ctls
(
struct
hda_codec
*
codec
,
hda_nid_t
mix_nid
,
hda_nid_t
pin
,
unsigned
int
*
mix_val
,
unsigned
int
*
mute_val
)
{
int
idx
,
num_conns
;
const
hda_nid_t
*
list
;
hda_nid_t
nid
;
idx
=
snd_hda_get_conn_index
(
codec
,
mix_nid
,
pin
,
true
);
if
(
idx
<
0
)
return
false
;
*
mix_val
=
*
mute_val
=
0
;
if
(
nid_has_volume
(
codec
,
mix_nid
,
HDA_INPUT
))
*
mix_val
=
HDA_COMPOSE_AMP_VAL
(
mix_nid
,
3
,
idx
,
HDA_INPUT
);
if
(
nid_has_mute
(
codec
,
mix_nid
,
HDA_INPUT
))
*
mute_val
=
HDA_COMPOSE_AMP_VAL
(
mix_nid
,
3
,
idx
,
HDA_INPUT
);
if
(
*
mix_val
&&
*
mute_val
)
return
true
;
/* check leaf node */
num_conns
=
snd_hda_get_conn_list
(
codec
,
mix_nid
,
&
list
);
if
(
num_conns
<
idx
)
return
false
;
nid
=
list
[
idx
];
if
(
!*
mix_val
&&
nid_has_volume
(
codec
,
nid
,
HDA_OUTPUT
))
*
mix_val
=
HDA_COMPOSE_AMP_VAL
(
nid
,
3
,
0
,
HDA_OUTPUT
);
if
(
!*
mute_val
&&
nid_has_mute
(
codec
,
nid
,
HDA_OUTPUT
))
*
mute_val
=
HDA_COMPOSE_AMP_VAL
(
nid
,
3
,
0
,
HDA_OUTPUT
);
return
*
mix_val
||
*
mute_val
;
}
/* create input playback/capture controls for the given pin */
static
int
new_analog_input
(
struct
hda_codec
*
codec
,
int
input_idx
,
hda_nid_t
pin
,
const
char
*
ctlname
,
int
ctlidx
,
...
...
@@ -2823,12 +2852,11 @@ static int new_analog_input(struct hda_codec *codec, int input_idx,
{
struct
hda_gen_spec
*
spec
=
codec
->
spec
;
struct
nid_path
*
path
;
unsigned
int
val
;
unsigned
int
mix_val
,
mute_
val
;
int
err
,
idx
;
if
(
!
nid_has_volume
(
codec
,
mix_nid
,
HDA_INPUT
)
&&
!
nid_has_mute
(
codec
,
mix_nid
,
HDA_INPUT
))
return
0
;
/* no need for analog loopback */
if
(
!
look_for_mix_leaf_ctls
(
codec
,
mix_nid
,
pin
,
&
mix_val
,
&
mute_val
))
return
0
;
path
=
snd_hda_add_new_path
(
codec
,
pin
,
mix_nid
,
0
);
if
(
!
path
)
...
...
@@ -2837,20 +2865,18 @@ static int new_analog_input(struct hda_codec *codec, int input_idx,
spec
->
loopback_paths
[
input_idx
]
=
snd_hda_get_path_idx
(
codec
,
path
);
idx
=
path
->
idx
[
path
->
depth
-
1
];
if
(
nid_has_volume
(
codec
,
mix_nid
,
HDA_INPUT
))
{
val
=
HDA_COMPOSE_AMP_VAL
(
mix_nid
,
3
,
idx
,
HDA_INPUT
);
err
=
__add_pb_vol_ctrl
(
spec
,
HDA_CTL_WIDGET_VOL
,
ctlname
,
ctlidx
,
val
);
if
(
mix_val
)
{
err
=
__add_pb_vol_ctrl
(
spec
,
HDA_CTL_WIDGET_VOL
,
ctlname
,
ctlidx
,
mix_val
);
if
(
err
<
0
)
return
err
;
path
->
ctls
[
NID_PATH_VOL_CTL
]
=
val
;
path
->
ctls
[
NID_PATH_VOL_CTL
]
=
mix_
val
;
}
if
(
nid_has_mute
(
codec
,
mix_nid
,
HDA_INPUT
))
{
val
=
HDA_COMPOSE_AMP_VAL
(
mix_nid
,
3
,
idx
,
HDA_INPUT
);
err
=
__add_pb_sw_ctrl
(
spec
,
HDA_CTL_WIDGET_MUTE
,
ctlname
,
ctlidx
,
val
);
if
(
mute_val
)
{
err
=
__add_pb_sw_ctrl
(
spec
,
HDA_CTL_WIDGET_MUTE
,
ctlname
,
ctlidx
,
mute_val
);
if
(
err
<
0
)
return
err
;
path
->
ctls
[
NID_PATH_MUTE_CTL
]
=
val
;
path
->
ctls
[
NID_PATH_MUTE_CTL
]
=
mute_
val
;
}
path
->
active
=
true
;
...
...
@@ -4384,6 +4410,17 @@ int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
if
(
err
<
0
)
return
err
;
/* create "Headphone Mic Jack Mode" if no input selection is
* available (or user specifies add_jack_modes hint)
*/
if
(
spec
->
hp_mic_pin
&&
(
spec
->
auto_mic
||
spec
->
input_mux
.
num_items
==
1
||
spec
->
add_jack_modes
))
{
err
=
create_hp_mic_jack_mode
(
codec
,
spec
->
hp_mic_pin
);
if
(
err
<
0
)
return
err
;
}
if
(
spec
->
add_jack_modes
)
{
if
(
cfg
->
line_out_type
!=
AUTO_PIN_SPEAKER_OUT
)
{
err
=
create_out_jack_modes
(
codec
,
cfg
->
line_outs
,
...
...
sound/pci/hda/patch_conexant.c
浏览文件 @
696620a6
...
...
@@ -3244,9 +3244,29 @@ enum {
#if IS_ENABLED(CONFIG_THINKPAD_ACPI)
#include <linux/thinkpad_acpi.h>
#include <acpi/acpi.h>
static
int
(
*
led_set_func
)(
int
,
bool
);
static
acpi_status
acpi_check_cb
(
acpi_handle
handle
,
u32
lvl
,
void
*
context
,
void
**
rv
)
{
bool
*
found
=
context
;
*
found
=
true
;
return
AE_OK
;
}
static
bool
is_thinkpad
(
struct
hda_codec
*
codec
)
{
bool
found
=
false
;
if
(
codec
->
subsystem_id
>>
16
!=
0x17aa
)
return
false
;
if
(
ACPI_SUCCESS
(
acpi_get_devices
(
"LEN0068"
,
acpi_check_cb
,
&
found
,
NULL
))
&&
found
)
return
true
;
found
=
false
;
return
ACPI_SUCCESS
(
acpi_get_devices
(
"IBM0068"
,
acpi_check_cb
,
&
found
,
NULL
))
&&
found
;
}
static
void
update_tpacpi_mute_led
(
void
*
private_data
,
int
enabled
)
{
struct
hda_codec
*
codec
=
private_data
;
...
...
@@ -3279,6 +3299,8 @@ static void cxt_fixup_thinkpad_acpi(struct hda_codec *codec,
bool
removefunc
=
false
;
if
(
action
==
HDA_FIXUP_ACT_PROBE
)
{
if
(
!
is_thinkpad
(
codec
))
return
;
if
(
!
led_set_func
)
led_set_func
=
symbol_request
(
tpacpi_led_set
);
if
(
!
led_set_func
)
{
...
...
@@ -3494,6 +3516,7 @@ static const struct snd_pci_quirk cxt5066_fixups[] = {
SND_PCI_QUIRK
(
0x17aa
,
0x3975
,
"Lenovo U300s"
,
CXT_FIXUP_STEREO_DMIC
),
SND_PCI_QUIRK
(
0x17aa
,
0x3977
,
"Lenovo IdeaPad U310"
,
CXT_FIXUP_STEREO_DMIC
),
SND_PCI_QUIRK
(
0x17aa
,
0x397b
,
"Lenovo S205"
,
CXT_FIXUP_STEREO_DMIC
),
SND_PCI_QUIRK_VENDOR
(
0x17aa
,
"Thinkpad"
,
CXT_FIXUP_THINKPAD_ACPI
),
SND_PCI_QUIRK
(
0x1c06
,
0x2011
,
"Lemote A1004"
,
CXT_PINCFG_LEMOTE_A1004
),
SND_PCI_QUIRK
(
0x1c06
,
0x2012
,
"Lemote A1205"
,
CXT_PINCFG_LEMOTE_A1205
),
{}
...
...
sound/pci/hda/patch_realtek.c
浏览文件 @
696620a6
...
...
@@ -3798,6 +3798,7 @@ enum {
ALC271_FIXUP_HP_GATE_MIC_JACK
,
ALC269_FIXUP_ACER_AC700
,
ALC269_FIXUP_LIMIT_INT_MIC_BOOST
,
ALC269VB_FIXUP_ASUS_ZENBOOK
,
ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED
,
ALC269VB_FIXUP_ORDISSIMO_EVE2
,
ALC283_FIXUP_CHROME_BOOK
,
...
...
@@ -4075,6 +4076,12 @@ static const struct hda_fixup alc269_fixups[] = {
.
chained
=
true
,
.
chain_id
=
ALC269_FIXUP_THINKPAD_ACPI
,
},
[
ALC269VB_FIXUP_ASUS_ZENBOOK
]
=
{
.
type
=
HDA_FIXUP_FUNC
,
.
v
.
func
=
alc269_fixup_limit_int_mic_boost
,
.
chained
=
true
,
.
chain_id
=
ALC269VB_FIXUP_DMIC
,
},
[
ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED
]
=
{
.
type
=
HDA_FIXUP_FUNC
,
.
v
.
func
=
alc269_fixup_limit_int_mic_boost
,
...
...
@@ -4189,8 +4196,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK
(
0x1043
,
0x103f
,
"ASUS TX300"
,
ALC282_FIXUP_ASUS_TX300
),
SND_PCI_QUIRK
(
0x1043
,
0x106d
,
"Asus K53BE"
,
ALC269_FIXUP_LIMIT_INT_MIC_BOOST
),
SND_PCI_QUIRK
(
0x1043
,
0x115d
,
"Asus 1015E"
,
ALC269_FIXUP_LIMIT_INT_MIC_BOOST
),
SND_PCI_QUIRK
(
0x1043
,
0x1427
,
"Asus Zenbook UX31E"
,
ALC269VB_FIXUP_
DMIC
),
SND_PCI_QUIRK
(
0x1043
,
0x1517
,
"Asus Zenbook UX31A"
,
ALC269VB_FIXUP_
DMIC
),
SND_PCI_QUIRK
(
0x1043
,
0x1427
,
"Asus Zenbook UX31E"
,
ALC269VB_FIXUP_
ASUS_ZENBOOK
),
SND_PCI_QUIRK
(
0x1043
,
0x1517
,
"Asus Zenbook UX31A"
,
ALC269VB_FIXUP_
ASUS_ZENBOOK
),
SND_PCI_QUIRK
(
0x1043
,
0x16e3
,
"ASUS UX50"
,
ALC269_FIXUP_STEREO_DMIC
),
SND_PCI_QUIRK
(
0x1043
,
0x1a13
,
"Asus G73Jw"
,
ALC269_FIXUP_ASUS_G73JW
),
SND_PCI_QUIRK
(
0x1043
,
0x1b13
,
"Asus U41SV"
,
ALC269_FIXUP_INV_DMIC
),
...
...
sound/usb/endpoint.c
浏览文件 @
696620a6
...
...
@@ -636,8 +636,22 @@ static int data_ep_set_params(struct snd_usb_endpoint *ep,
if
(
usb_pipein
(
ep
->
pipe
)
||
snd_usb_endpoint_implicit_feedback_sink
(
ep
))
{
urb_packs
=
packs_per_ms
;
/*
* Wireless devices can poll at a max rate of once per 4ms.
* For dataintervals less than 5, increase the packet count to
* allow the host controller to use bursting to fill in the
* gaps.
*/
if
(
snd_usb_get_speed
(
ep
->
chip
->
dev
)
==
USB_SPEED_WIRELESS
)
{
int
interval
=
ep
->
datainterval
;
while
(
interval
<
5
)
{
urb_packs
<<=
1
;
++
interval
;
}
}
/* make capture URBs <= 1 ms and smaller than a period */
urb_packs
=
min
(
max_packs_per_urb
,
packs_per_m
s
);
urb_packs
=
min
(
max_packs_per_urb
,
urb_pack
s
);
while
(
urb_packs
>
1
&&
urb_packs
*
maxsize
>=
period_bytes
)
urb_packs
>>=
1
;
ep
->
nurbs
=
MAX_URBS
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录