Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
a24ba44c
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
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看板
提交
a24ba44c
编写于
16年前
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'topic/hda' into for-linus
上级
9229f43f
6acaed38
无相关合并请求
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
52 addition
and
30 deletion
+52
-30
sound/pci/hda/hda_beep.c
sound/pci/hda/hda_beep.c
+0
-1
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_codec.c
+30
-18
sound/pci/hda/hda_codec.h
sound/pci/hda/hda_codec.h
+2
-0
sound/pci/hda/hda_intel.c
sound/pci/hda/hda_intel.c
+3
-3
sound/pci/hda/patch_analog.c
sound/pci/hda/patch_analog.c
+3
-2
sound/pci/hda/patch_nvhdmi.c
sound/pci/hda/patch_nvhdmi.c
+2
-0
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+12
-6
未找到文件。
sound/pci/hda/hda_beep.c
浏览文件 @
a24ba44c
...
...
@@ -135,7 +135,6 @@ void snd_hda_detach_beep_device(struct hda_codec *codec)
struct
hda_beep
*
beep
=
codec
->
beep
;
if
(
beep
)
{
cancel_work_sync
(
&
beep
->
beep_work
);
flush_scheduled_work
();
input_unregister_device
(
beep
->
dev
);
kfree
(
beep
);
...
...
This diff is collapsed.
Click to expand it.
sound/pci/hda/hda_codec.c
浏览文件 @
a24ba44c
...
...
@@ -373,7 +373,7 @@ int snd_hda_queue_unsol_event(struct hda_bus *bus, u32 res, u32 res_ex)
unsol
->
queue
[
wp
]
=
res
;
unsol
->
queue
[
wp
+
1
]
=
res_ex
;
schedule_work
(
&
unsol
->
work
);
queue_work
(
bus
->
workq
,
&
unsol
->
work
);
return
0
;
}
...
...
@@ -437,15 +437,17 @@ static int snd_hda_bus_free(struct hda_bus *bus)
if
(
!
bus
)
return
0
;
if
(
bus
->
unsol
)
{
flush_scheduled_work
();
if
(
bus
->
workq
)
flush_workqueue
(
bus
->
workq
);
if
(
bus
->
unsol
)
kfree
(
bus
->
unsol
);
}
list_for_each_entry_safe
(
codec
,
n
,
&
bus
->
codec_list
,
list
)
{
snd_hda_codec_free
(
codec
);
}
if
(
bus
->
ops
.
private_free
)
bus
->
ops
.
private_free
(
bus
);
if
(
bus
->
workq
)
destroy_workqueue
(
bus
->
workq
);
kfree
(
bus
);
return
0
;
}
...
...
@@ -485,6 +487,7 @@ int /*__devinit*/ snd_hda_bus_new(struct snd_card *card,
{
struct
hda_bus
*
bus
;
int
err
;
char
qname
[
8
];
static
struct
snd_device_ops
dev_ops
=
{
.
dev_register
=
snd_hda_bus_dev_register
,
.
dev_free
=
snd_hda_bus_dev_free
,
...
...
@@ -514,6 +517,14 @@ int /*__devinit*/ snd_hda_bus_new(struct snd_card *card,
mutex_init
(
&
bus
->
cmd_mutex
);
INIT_LIST_HEAD
(
&
bus
->
codec_list
);
snprintf
(
qname
,
sizeof
(
qname
),
"hda%d"
,
card
->
number
);
bus
->
workq
=
create_workqueue
(
qname
);
if
(
!
bus
->
workq
)
{
snd_printk
(
KERN_ERR
"cannot create workqueue %s
\n
"
,
qname
);
kfree
(
bus
);
return
-
ENOMEM
;
}
err
=
snd_device_new
(
card
,
SNDRV_DEV_BUS
,
bus
,
&
dev_ops
);
if
(
err
<
0
)
{
snd_hda_bus_free
(
bus
);
...
...
@@ -684,7 +695,7 @@ static void snd_hda_codec_free(struct hda_codec *codec)
return
;
#ifdef CONFIG_SND_HDA_POWER_SAVE
cancel_delayed_work
(
&
codec
->
power_work
);
flush_
scheduled_work
(
);
flush_
workqueue
(
codec
->
bus
->
workq
);
#endif
list_del
(
&
codec
->
list
);
snd_array_free
(
&
codec
->
mixers
);
...
...
@@ -735,6 +746,7 @@ int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr
codec
->
bus
=
bus
;
codec
->
addr
=
codec_addr
;
mutex_init
(
&
codec
->
spdif_mutex
);
mutex_init
(
&
codec
->
control_mutex
);
init_hda_cache
(
&
codec
->
amp_cache
,
sizeof
(
struct
hda_amp_info
));
init_hda_cache
(
&
codec
->
cmd_cache
,
sizeof
(
struct
hda_cache_head
));
snd_array_init
(
&
codec
->
mixers
,
sizeof
(
struct
snd_kcontrol
*
),
32
);
...
...
@@ -1272,7 +1284,7 @@ void snd_hda_codec_reset(struct hda_codec *codec)
#ifdef CONFIG_SND_HDA_POWER_SAVE
cancel_delayed_work
(
&
codec
->
power_work
);
flush_
scheduled_work
(
);
flush_
workqueue
(
codec
->
bus
->
workq
);
#endif
snd_hda_ctls_clear
(
codec
);
/* relase PCMs */
...
...
@@ -1418,12 +1430,12 @@ int snd_hda_mixer_bind_switch_get(struct snd_kcontrol *kcontrol,
unsigned
long
pval
;
int
err
;
mutex_lock
(
&
codec
->
spdif_mutex
);
/* reuse spdif_mutex */
mutex_lock
(
&
codec
->
control_mutex
);
pval
=
kcontrol
->
private_value
;
kcontrol
->
private_value
=
pval
&
~
AMP_VAL_IDX_MASK
;
/* index 0 */
err
=
snd_hda_mixer_amp_switch_get
(
kcontrol
,
ucontrol
);
kcontrol
->
private_value
=
pval
;
mutex_unlock
(
&
codec
->
spdif
_mutex
);
mutex_unlock
(
&
codec
->
control
_mutex
);
return
err
;
}
EXPORT_SYMBOL_HDA
(
snd_hda_mixer_bind_switch_get
);
...
...
@@ -1435,7 +1447,7 @@ int snd_hda_mixer_bind_switch_put(struct snd_kcontrol *kcontrol,
unsigned
long
pval
;
int
i
,
indices
,
err
=
0
,
change
=
0
;
mutex_lock
(
&
codec
->
spdif_mutex
);
/* reuse spdif_mutex */
mutex_lock
(
&
codec
->
control_mutex
);
pval
=
kcontrol
->
private_value
;
indices
=
(
pval
&
AMP_VAL_IDX_MASK
)
>>
AMP_VAL_IDX_SHIFT
;
for
(
i
=
0
;
i
<
indices
;
i
++
)
{
...
...
@@ -1447,7 +1459,7 @@ int snd_hda_mixer_bind_switch_put(struct snd_kcontrol *kcontrol,
change
|=
err
;
}
kcontrol
->
private_value
=
pval
;
mutex_unlock
(
&
codec
->
spdif
_mutex
);
mutex_unlock
(
&
codec
->
control
_mutex
);
return
err
<
0
?
err
:
change
;
}
EXPORT_SYMBOL_HDA
(
snd_hda_mixer_bind_switch_put
);
...
...
@@ -1462,12 +1474,12 @@ int snd_hda_mixer_bind_ctls_info(struct snd_kcontrol *kcontrol,
struct
hda_bind_ctls
*
c
;
int
err
;
mutex_lock
(
&
codec
->
spdif_mutex
);
/* reuse spdif_mutex */
mutex_lock
(
&
codec
->
control_mutex
);
c
=
(
struct
hda_bind_ctls
*
)
kcontrol
->
private_value
;
kcontrol
->
private_value
=
*
c
->
values
;
err
=
c
->
ops
->
info
(
kcontrol
,
uinfo
);
kcontrol
->
private_value
=
(
long
)
c
;
mutex_unlock
(
&
codec
->
spdif
_mutex
);
mutex_unlock
(
&
codec
->
control
_mutex
);
return
err
;
}
EXPORT_SYMBOL_HDA
(
snd_hda_mixer_bind_ctls_info
);
...
...
@@ -1479,12 +1491,12 @@ int snd_hda_mixer_bind_ctls_get(struct snd_kcontrol *kcontrol,
struct
hda_bind_ctls
*
c
;
int
err
;
mutex_lock
(
&
codec
->
spdif_mutex
);
/* reuse spdif_mutex */
mutex_lock
(
&
codec
->
control_mutex
);
c
=
(
struct
hda_bind_ctls
*
)
kcontrol
->
private_value
;
kcontrol
->
private_value
=
*
c
->
values
;
err
=
c
->
ops
->
get
(
kcontrol
,
ucontrol
);
kcontrol
->
private_value
=
(
long
)
c
;
mutex_unlock
(
&
codec
->
spdif
_mutex
);
mutex_unlock
(
&
codec
->
control
_mutex
);
return
err
;
}
EXPORT_SYMBOL_HDA
(
snd_hda_mixer_bind_ctls_get
);
...
...
@@ -1497,7 +1509,7 @@ int snd_hda_mixer_bind_ctls_put(struct snd_kcontrol *kcontrol,
unsigned
long
*
vals
;
int
err
=
0
,
change
=
0
;
mutex_lock
(
&
codec
->
spdif_mutex
);
/* reuse spdif_mutex */
mutex_lock
(
&
codec
->
control_mutex
);
c
=
(
struct
hda_bind_ctls
*
)
kcontrol
->
private_value
;
for
(
vals
=
c
->
values
;
*
vals
;
vals
++
)
{
kcontrol
->
private_value
=
*
vals
;
...
...
@@ -1507,7 +1519,7 @@ int snd_hda_mixer_bind_ctls_put(struct snd_kcontrol *kcontrol,
change
|=
err
;
}
kcontrol
->
private_value
=
(
long
)
c
;
mutex_unlock
(
&
codec
->
spdif
_mutex
);
mutex_unlock
(
&
codec
->
control
_mutex
);
return
err
<
0
?
err
:
change
;
}
EXPORT_SYMBOL_HDA
(
snd_hda_mixer_bind_ctls_put
);
...
...
@@ -1519,12 +1531,12 @@ int snd_hda_mixer_bind_tlv(struct snd_kcontrol *kcontrol, int op_flag,
struct
hda_bind_ctls
*
c
;
int
err
;
mutex_lock
(
&
codec
->
spdif_mutex
);
/* reuse spdif_mutex */
mutex_lock
(
&
codec
->
control_mutex
);
c
=
(
struct
hda_bind_ctls
*
)
kcontrol
->
private_value
;
kcontrol
->
private_value
=
*
c
->
values
;
err
=
c
->
ops
->
tlv
(
kcontrol
,
op_flag
,
size
,
tlv
);
kcontrol
->
private_value
=
(
long
)
c
;
mutex_unlock
(
&
codec
->
spdif
_mutex
);
mutex_unlock
(
&
codec
->
control
_mutex
);
return
err
;
}
EXPORT_SYMBOL_HDA
(
snd_hda_mixer_bind_tlv
);
...
...
This diff is collapsed.
Click to expand it.
sound/pci/hda/hda_codec.h
浏览文件 @
a24ba44c
...
...
@@ -614,6 +614,7 @@ struct hda_bus {
/* unsolicited event queue */
struct
hda_bus_unsolicited
*
unsol
;
struct
workqueue_struct
*
workq
;
/* common workqueue for codecs */
/* assigned PCMs */
DECLARE_BITMAP
(
pcm_dev_bits
,
SNDRV_PCM_DEVICES
);
...
...
@@ -771,6 +772,7 @@ struct hda_codec {
struct
hda_cache_rec
cmd_cache
;
/* cache for other commands */
struct
mutex
spdif_mutex
;
struct
mutex
control_mutex
;
unsigned
int
spdif_status
;
/* IEC958 status bits */
unsigned
short
spdif_ctls
;
/* SPDIF control bits */
unsigned
int
spdif_in_enable
;
/* SPDIF input enable? */
...
...
This diff is collapsed.
Click to expand it.
sound/pci/hda/hda_intel.c
浏览文件 @
a24ba44c
...
...
@@ -996,10 +996,11 @@ static irqreturn_t azx_interrupt(int irq, void *dev_id)
spin_unlock
(
&
chip
->
reg_lock
);
snd_pcm_period_elapsed
(
azx_dev
->
substream
);
spin_lock
(
&
chip
->
reg_lock
);
}
else
{
}
else
if
(
chip
->
bus
&&
chip
->
bus
->
workq
)
{
/* bogus IRQ, process it later */
azx_dev
->
irq_pending
=
1
;
schedule_work
(
&
chip
->
irq_pending_work
);
queue_work
(
chip
->
bus
->
workq
,
&
chip
->
irq_pending_work
);
}
}
}
...
...
@@ -1741,7 +1742,6 @@ static void azx_clear_irq_pending(struct azx *chip)
for
(
i
=
0
;
i
<
chip
->
num_streams
;
i
++
)
chip
->
azx_dev
[
i
].
irq_pending
=
0
;
spin_unlock_irq
(
&
chip
->
reg_lock
);
flush_scheduled_work
();
}
static
struct
snd_pcm_ops
azx_pcm_ops
=
{
...
...
This diff is collapsed.
Click to expand it.
sound/pci/hda/patch_analog.c
浏览文件 @
a24ba44c
...
...
@@ -3900,6 +3900,7 @@ static const char *ad1884a_models[AD1884A_MODELS] = {
static
struct
snd_pci_quirk
ad1884a_cfg_tbl
[]
=
{
SND_PCI_QUIRK
(
0x103c
,
0x3030
,
"HP"
,
AD1884A_MOBILE
),
SND_PCI_QUIRK
(
0x103c
,
0x3037
,
"HP 2230s"
,
AD1884A_LAPTOP
),
SND_PCI_QUIRK
(
0x103c
,
0x3056
,
"HP"
,
AD1884A_MOBILE
),
SND_PCI_QUIRK
(
0x103c
,
0x30e6
,
"HP 6730b"
,
AD1884A_LAPTOP
),
SND_PCI_QUIRK
(
0x103c
,
0x30e7
,
"HP EliteBook 8530p"
,
AD1884A_LAPTOP
),
...
...
@@ -4262,13 +4263,13 @@ static int patch_ad1882(struct hda_codec *codec)
spec
->
num_adc_nids
=
ARRAY_SIZE
(
ad1882_adc_nids
);
spec
->
adc_nids
=
ad1882_adc_nids
;
spec
->
capsrc_nids
=
ad1882_capsrc_nids
;
if
(
codec
->
vendor_id
==
0x11d1882
)
if
(
codec
->
vendor_id
==
0x11d
4
1882
)
spec
->
input_mux
=
&
ad1882_capture_source
;
else
spec
->
input_mux
=
&
ad1882a_capture_source
;
spec
->
num_mixers
=
2
;
spec
->
mixers
[
0
]
=
ad1882_base_mixers
;
if
(
codec
->
vendor_id
==
0x11d1882
)
if
(
codec
->
vendor_id
==
0x11d
4
1882
)
spec
->
mixers
[
1
]
=
ad1882_loopback_mixers
;
else
spec
->
mixers
[
1
]
=
ad1882a_loopback_mixers
;
...
...
This diff is collapsed.
Click to expand it.
sound/pci/hda/patch_nvhdmi.c
浏览文件 @
a24ba44c
...
...
@@ -162,12 +162,14 @@ static struct hda_codec_preset snd_hda_preset_nvhdmi[] = {
{
.
id
=
0x10de0002
,
.
name
=
"MCP78 HDMI"
,
.
patch
=
patch_nvhdmi
},
{
.
id
=
0x10de0007
,
.
name
=
"MCP7A HDMI"
,
.
patch
=
patch_nvhdmi
},
{
.
id
=
0x10de0067
,
.
name
=
"MCP67 HDMI"
,
.
patch
=
patch_nvhdmi
},
{
.
id
=
0x10de8001
,
.
name
=
"MCP73 HDMI"
,
.
patch
=
patch_nvhdmi
},
{}
/* terminator */
};
MODULE_ALIAS
(
"snd-hda-codec-id:10de0002"
);
MODULE_ALIAS
(
"snd-hda-codec-id:10de0007"
);
MODULE_ALIAS
(
"snd-hda-codec-id:10de0067"
);
MODULE_ALIAS
(
"snd-hda-codec-id:10de8001"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"Nvidia HDMI HD-audio codec"
);
...
...
This diff is collapsed.
Click to expand it.
sound/pci/hda/patch_realtek.c
浏览文件 @
a24ba44c
...
...
@@ -1502,11 +1502,11 @@ static int alc_cap_vol_info(struct snd_kcontrol *kcontrol,
struct alc_spec *spec = codec->spec;
int err;
mutex_lock(&codec->
spdif_mutex); /* reuse spdif_mutex */
mutex_lock(&codec->
control_mutex);
kcontrol->private_value = HDA_COMPOSE_AMP_VAL(spec->adc_nids[0], 3, 0,
HDA_INPUT);
err = snd_hda_mixer_amp_volume_info(kcontrol, uinfo);
mutex_unlock(&codec->
spdif_mutex); /* reuse spdif_mutex */
mutex_unlock(&codec->
control_mutex);
return err;
}
...
...
@@ -1517,11 +1517,11 @@ static int alc_cap_vol_tlv(struct snd_kcontrol *kcontrol, int op_flag,
struct alc_spec *spec = codec->spec;
int err;
mutex_lock(&codec->
spdif_mutex); /* reuse spdif_mutex */
mutex_lock(&codec->
control_mutex);
kcontrol->private_value = HDA_COMPOSE_AMP_VAL(spec->adc_nids[0], 3, 0,
HDA_INPUT);
err = snd_hda_mixer_amp_tlv(kcontrol, op_flag, size, tlv);
mutex_unlock(&codec->
spdif_mutex); /* reuse spdif_mutex */
mutex_unlock(&codec->
control_mutex);
return err;
}
...
...
@@ -1537,11 +1537,11 @@ static int alc_cap_getput_caller(struct snd_kcontrol *kcontrol,
unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
int err;
mutex_lock(&codec->
spdif_mutex); /* reuse spdif_mutex */
mutex_lock(&codec->
control_mutex);
kcontrol->private_value = HDA_COMPOSE_AMP_VAL(spec->adc_nids[adc_idx],
3, 0, HDA_INPUT);
err = func(kcontrol, ucontrol);
mutex_unlock(&codec->
spdif_mutex); /* reuse spdif_mutex */
mutex_unlock(&codec->
control_mutex);
return err;
}
...
...
@@ -8461,6 +8461,10 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = {
SND_PCI_QUIRK(0x1025, 0x0121, "Acer Aspire 5920G", ALC883_ACER_ASPIRE),
SND_PCI_QUIRK(0x1025, 0x013e, "Acer Aspire 4930G",
ALC888_ACER_ASPIRE_4930G),
SND_PCI_QUIRK(0x1025, 0x013f, "Acer Aspire 5930G",
ALC888_ACER_ASPIRE_4930G),
SND_PCI_QUIRK(0x1025, 0x015e, "Acer Aspire 6930G",
ALC888_ACER_ASPIRE_4930G),
SND_PCI_QUIRK(0x1025, 0, "Acer laptop", ALC883_ACER), /* default Acer */
SND_PCI_QUIRK(0x1028, 0x020d, "Dell Inspiron 530", ALC888_6ST_DELL),
SND_PCI_QUIRK(0x103c, 0x2a3d, "HP Pavillion", ALC883_6ST_DIG),
...
...
@@ -8522,6 +8526,7 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = {
SND_PCI_QUIRK(0x1991, 0x5625, "Haier W66", ALC883_HAIER_W66),
SND_PCI_QUIRK(0x8086, 0x0001, "DG33BUC", ALC883_3ST_6ch_INTEL),
SND_PCI_QUIRK(0x8086, 0x0002, "DG33FBC", ALC883_3ST_6ch_INTEL),
SND_PCI_QUIRK(0x8086, 0x0022, "DX58SO", ALC883_3ST_6ch_INTEL),
SND_PCI_QUIRK(0x8086, 0xd601, "D102GGC", ALC883_3ST_6ch),
{}
};
...
...
@@ -11689,6 +11694,7 @@ static struct snd_pci_quirk alc268_cfg_tbl[] = {
SND_PCI_QUIRK(0x1025, 0x015b, "Acer Aspire One",
ALC268_ACER_ASPIRE_ONE),
SND_PCI_QUIRK(0x1028, 0x0253, "Dell OEM", ALC268_DELL),
SND_PCI_QUIRK(0x1028, 0x02b0, "Dell Inspiron Mini9", ALC268_DELL),
SND_PCI_QUIRK(0x103c, 0x30cc, "TOSHIBA", ALC268_TOSHIBA),
SND_PCI_QUIRK(0x1043, 0x1205, "ASUS W7J", ALC268_3ST),
SND_PCI_QUIRK(0x1179, 0xff10, "TOSHIBA A205", ALC268_TOSHIBA),
...
...
This diff is collapsed.
Click to expand it.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录
反馈
建议
客服
返回
顶部