Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
b4103333
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 3 年多
通知
13
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
b4103333
编写于
2月 01, 2006
作者:
L
Linus Torvalds
浏览文件
操作
浏览文件
下载
差异文件
Merge
git://git.kernel.org/pub/scm/linux/kernel/git/perex/alsa
上级
59ed2f59
1494a92f
变更
34
隐藏空白更改
内联
并排
Showing
34 changed file
with
364 addition
and
111 deletion
+364
-111
Documentation/sound/alsa/ALSA-Configuration.txt
Documentation/sound/alsa/ALSA-Configuration.txt
+9
-1
Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
+2
-2
drivers/pnp/card.c
drivers/pnp/card.c
+7
-2
sound/core/info.c
sound/core/info.c
+11
-22
sound/drivers/serial-u16550.c
sound/drivers/serial-u16550.c
+1
-1
sound/isa/cmi8330.c
sound/isa/cmi8330.c
+6
-0
sound/isa/cs423x/cs4236.c
sound/isa/cs423x/cs4236.c
+11
-2
sound/isa/es18xx.c
sound/isa/es18xx.c
+5
-1
sound/isa/gus/gusclassic.c
sound/isa/gus/gusclassic.c
+1
-1
sound/isa/opl3sa2.c
sound/isa/opl3sa2.c
+9
-3
sound/isa/opti9xx/opti92x-ad1848.c
sound/isa/opti9xx/opti92x-ad1848.c
+1
-1
sound/isa/sb/sb16.c
sound/isa/sb/sb16.c
+2
-2
sound/isa/sscape.c
sound/isa/sscape.c
+5
-1
sound/isa/wavefront/wavefront.c
sound/isa/wavefront/wavefront.c
+5
-2
sound/isa/wavefront/wavefront_synth.c
sound/isa/wavefront/wavefront_synth.c
+1
-1
sound/pci/ac97/ac97_patch.c
sound/pci/ac97/ac97_patch.c
+39
-14
sound/pci/ali5451/ali5451.c
sound/pci/ali5451/ali5451.c
+1
-1
sound/pci/au88x0/au88x0_eq.c
sound/pci/au88x0/au88x0_eq.c
+1
-1
sound/pci/bt87x.c
sound/pci/bt87x.c
+3
-1
sound/pci/ca0106/ca0106_main.c
sound/pci/ca0106/ca0106_main.c
+11
-1
sound/pci/cs46xx/dsp_spos_scb_lib.c
sound/pci/cs46xx/dsp_spos_scb_lib.c
+1
-1
sound/pci/cs5535audio/cs5535audio.c
sound/pci/cs5535audio/cs5535audio.c
+4
-2
sound/pci/emu10k1/emumixer.c
sound/pci/emu10k1/emumixer.c
+6
-4
sound/pci/hda/hda_intel.c
sound/pci/hda/hda_intel.c
+2
-0
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+7
-4
sound/pci/hda/patch_si3054.c
sound/pci/hda/patch_si3054.c
+1
-0
sound/pci/hda/patch_sigmatel.c
sound/pci/hda/patch_sigmatel.c
+160
-16
sound/pci/intel8x0.c
sound/pci/intel8x0.c
+8
-7
sound/pci/pcxhr/pcxhr.c
sound/pci/pcxhr/pcxhr.c
+5
-4
sound/pci/rme9652/hdspm.c
sound/pci/rme9652/hdspm.c
+3
-3
sound/pci/trident/trident.c
sound/pci/trident/trident.c
+5
-3
sound/pci/via82xx.c
sound/pci/via82xx.c
+5
-0
sound/pci/ymfpci/ymfpci_main.c
sound/pci/ymfpci/ymfpci_main.c
+2
-0
sound/usb/usbaudio.c
sound/usb/usbaudio.c
+24
-7
未找到文件。
Documentation/sound/alsa/ALSA-Configuration.txt
浏览文件 @
b4103333
...
...
@@ -837,8 +837,10 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
Module for AC'97 motherboards from Intel and compatibles.
* Intel i810/810E, i815, i820, i830, i84x, MX440
ICH5, ICH6, ICH7, ESB2
* SiS 7012 (SiS 735)
* NVidia NForce, NForce2
* NVidia NForce, NForce2, NForce3, MCP04, CK804
CK8, CK8S, MCP501
* AMD AMD768, AMD8111
* ALi m5455
...
...
@@ -868,6 +870,12 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
--------------------
Module for Intel ICH (i8x0) chipset MC97 modems.
* Intel i810/810E, i815, i820, i830, i84x, MX440
ICH5, ICH6, ICH7
* SiS 7013 (SiS 735)
* NVidia NForce, NForce2, NForce2s, NForce3
* AMD AMD8111
* ALi m5455
ac97_clock - AC'97 codec clock base (0 = auto-detect)
...
...
Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
浏览文件 @
b4103333
...
...
@@ -5206,14 +5206,14 @@ struct _snd_pcm_runtime {
You need to pass the
<function>
snd_dma_pci_data(pci)
</function>
,
where pci is the struct
<structname>
pci_dev
</structname>
pointer
of the chip as well.
The
<type>
s
nd_sg_buf_t
</type>
instance is created as
The
<type>
s
truct snd_sg_buf
</type>
instance is created as
substream-
>
dma_private. You can cast
the pointer like:
<informalexample>
<programlisting>
<![CDATA[
struct snd_sg_buf *sgbuf = (struct snd_sg_buf
_t
*)substream->
dma_private;
struct snd_sg_buf *sgbuf = (struct snd_sg_buf
*)substream->
dma_private;
]]>
</programlisting>
</informalexample>
...
...
drivers/pnp/card.c
浏览文件 @
b4103333
...
...
@@ -363,7 +363,7 @@ static int card_resume(struct pnp_dev *dev)
int
pnp_register_card_driver
(
struct
pnp_card_driver
*
drv
)
{
int
count
=
0
;
int
count
;
struct
list_head
*
pos
,
*
temp
;
drv
->
link
.
name
=
drv
->
name
;
...
...
@@ -374,10 +374,15 @@ int pnp_register_card_driver(struct pnp_card_driver * drv)
drv
->
link
.
suspend
=
drv
->
suspend
?
card_suspend
:
NULL
;
drv
->
link
.
resume
=
drv
->
resume
?
card_resume
:
NULL
;
count
=
pnp_register_driver
(
&
drv
->
link
);
if
(
count
<
0
)
return
count
;
spin_lock
(
&
pnp_lock
);
list_add_tail
(
&
drv
->
global_list
,
&
pnp_card_drivers
);
spin_unlock
(
&
pnp_lock
);
pnp_register_driver
(
&
drv
->
link
);
count
=
0
;
list_for_each_safe
(
pos
,
temp
,
&
pnp_cards
){
struct
pnp_card
*
card
=
list_entry
(
pos
,
struct
pnp_card
,
global_list
);
...
...
sound/core/info.c
浏览文件 @
b4103333
...
...
@@ -444,8 +444,8 @@ static unsigned int snd_info_entry_poll(struct file *file, poll_table * wait)
return
mask
;
}
static
inline
int
_snd_info_entry_ioctl
(
struct
inode
*
inode
,
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
long
snd_info_entry_ioctl
(
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
struct
snd_info_private_data
*
data
;
struct
snd_info_entry
*
entry
;
...
...
@@ -465,17 +465,6 @@ static inline int _snd_info_entry_ioctl(struct inode *inode, struct file *file,
return
-
ENOTTY
;
}
/* FIXME: need to unlock BKL to allow preemption */
static
int
snd_info_entry_ioctl
(
struct
inode
*
inode
,
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
int
err
;
unlock_kernel
();
err
=
_snd_info_entry_ioctl
(
inode
,
file
,
cmd
,
arg
);
lock_kernel
();
return
err
;
}
static
int
snd_info_entry_mmap
(
struct
file
*
file
,
struct
vm_area_struct
*
vma
)
{
struct
inode
*
inode
=
file
->
f_dentry
->
d_inode
;
...
...
@@ -499,15 +488,15 @@ static int snd_info_entry_mmap(struct file *file, struct vm_area_struct *vma)
static
struct
file_operations
snd_info_entry_operations
=
{
.
owner
=
THIS_MODULE
,
.
llseek
=
snd_info_entry_llseek
,
.
read
=
snd_info_entry_read
,
.
write
=
snd_info_entry_write
,
.
poll
=
snd_info_entry_poll
,
.
ioctl
=
snd_info_entry_ioctl
,
.
mmap
=
snd_info_entry_mmap
,
.
open
=
snd_info_entry_open
,
.
release
=
snd_info_entry_release
,
.
owner
=
THIS_MODULE
,
.
llseek
=
snd_info_entry_llseek
,
.
read
=
snd_info_entry_read
,
.
write
=
snd_info_entry_write
,
.
poll
=
snd_info_entry_poll
,
.
unlocked_
ioctl
=
snd_info_entry_ioctl
,
.
mmap
=
snd_info_entry_mmap
,
.
open
=
snd_info_entry_open
,
.
release
=
snd_info_entry_release
,
};
/**
...
...
sound/drivers/serial-u16550.c
浏览文件 @
b4103333
...
...
@@ -789,7 +789,7 @@ static int __init snd_uart16550_create(struct snd_card *card,
if
((
err
=
snd_uart16550_detect
(
uart
))
<=
0
)
{
printk
(
KERN_ERR
"no UART detected at 0x%lx
\n
"
,
iobase
);
return
err
;
return
-
ENODEV
;
}
if
(
irq
>=
0
&&
irq
!=
SNDRV_AUTO_IRQ
)
{
...
...
sound/isa/cmi8330.c
浏览文件 @
b4103333
...
...
@@ -109,7 +109,9 @@ module_param_array(wssdma, int, NULL, 0444);
MODULE_PARM_DESC
(
wssdma
,
"DMA for CMI8330 WSS driver."
);
static
struct
platform_device
*
platform_devices
[
SNDRV_CARDS
];
#ifdef CONFIG_PNP
static
int
pnp_registered
;
#endif
#define CMI8330_RMUX3D 16
#define CMI8330_MUTEMUX 17
...
...
@@ -672,8 +674,10 @@ static void __init_or_module snd_cmi8330_unregister_all(void)
{
int
i
;
#ifdef CONFIG_PNP
if
(
pnp_registered
)
pnp_unregister_card_driver
(
&
cmi8330_pnpc_driver
);
#endif
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
platform_devices
);
++
i
)
platform_device_unregister
(
platform_devices
[
i
]);
platform_driver_unregister
(
&
snd_cmi8330_driver
);
...
...
@@ -700,11 +704,13 @@ static int __init alsa_card_cmi8330_init(void)
cards
++
;
}
#ifdef CONFIG_PNP
err
=
pnp_register_card_driver
(
&
cmi8330_pnpc_driver
);
if
(
err
>=
0
)
{
pnp_registered
=
1
;
cards
+=
err
;
}
#endif
if
(
!
cards
)
{
#ifdef MODULE
...
...
sound/isa/cs423x/cs4236.c
浏览文件 @
b4103333
...
...
@@ -75,8 +75,10 @@ MODULE_SUPPORTED_DEVICE("{{Crystal Semiconductors,CS4235},"
#ifdef CS4232
#define IDENT "CS4232"
#define CS423X_DRIVER "snd_cs4232"
#else
#define IDENT "CS4236+"
#define CS423X_DRIVER "snd_cs4236"
#endif
static
int
index
[
SNDRV_CARDS
]
=
SNDRV_DEFAULT_IDX
;
/* Index 0-MAX */
...
...
@@ -125,10 +127,12 @@ module_param_array(dma2, int, NULL, 0444);
MODULE_PARM_DESC
(
dma2
,
"DMA2 # for "
IDENT
" driver."
);
static
struct
platform_device
*
platform_devices
[
SNDRV_CARDS
];
#ifdef CONFIG_PNP
static
int
pnpc_registered
;
#ifdef CS4232
static
int
pnp_registered
;
#endif
#endif
/* CONFIG_PNP */
struct
snd_card_cs4236
{
struct
snd_cs4231
*
chip
;
...
...
@@ -158,7 +162,6 @@ MODULE_DEVICE_TABLE(pnp, snd_cs4232_pnpbiosids);
#endif
/* CS4232 */
#ifdef CS4232
#define CS423X_DRIVER "snd_cs4232"
#define CS423X_ISAPNP_DRIVER "cs4232_isapnp"
static
struct
pnp_card_device_id
snd_cs423x_pnpids
[]
=
{
/* Philips PCA70PS */
...
...
@@ -175,11 +178,12 @@ static struct pnp_card_device_id snd_cs423x_pnpids[] = {
{
.
id
=
"CSC7632"
,
.
devs
=
{
{
"CSC0000"
},
{
"CSC0010"
},
{
"PNPb006"
}
}
},
/* SIC CrystalWave 32 (CS4232) */
{
.
id
=
"CSCf032"
,
.
devs
=
{
{
"CSC0000"
},
{
"CSC0010"
},
{
"CSC0003"
}
}
},
/* Netfinity 3000 on-board soundcard */
{
.
id
=
"CSCe825"
,
.
devs
=
{
{
"CSC0100"
},
{
"CSC0110"
},
{
"CSC010f"
}
}
},
/* --- */
{
.
id
=
""
}
/* end */
};
#else
/* CS4236 */
#define CS423X_DRIVER "snd_cs4236"
#define CS423X_ISAPNP_DRIVER "cs4236_isapnp"
static
struct
pnp_card_device_id
snd_cs423x_pnpids
[]
=
{
/* Intel Marlin Spike Motherboard - CS4235 */
...
...
@@ -747,12 +751,14 @@ static void __init_or_module snd_cs423x_unregister_all(void)
{
int
i
;
#ifdef CONFIG_PNP
if
(
pnpc_registered
)
pnp_unregister_card_driver
(
&
cs423x_pnpc_driver
);
#ifdef CS4232
if
(
pnp_registered
)
pnp_unregister_driver
(
&
cs4232_pnp_driver
);
#endif
#endif
/* CONFIG_PNP */
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
platform_devices
);
++
i
)
platform_device_unregister
(
platform_devices
[
i
]);
platform_driver_unregister
(
&
cs423x_nonpnp_driver
);
...
...
@@ -778,6 +784,7 @@ static int __init alsa_card_cs423x_init(void)
platform_devices
[
i
]
=
device
;
cards
++
;
}
#ifdef CONFIG_PNP
#ifdef CS4232
i
=
pnp_register_driver
(
&
cs4232_pnp_driver
);
if
(
i
>=
0
)
{
...
...
@@ -790,6 +797,8 @@ static int __init alsa_card_cs423x_init(void)
pnpc_registered
=
1
;
cards
+=
i
;
}
#endif
/* CONFIG_PNP */
if
(
!
cards
)
{
#ifdef MODULE
printk
(
KERN_ERR
IDENT
" soundcard not found or device busy
\n
"
);
...
...
sound/isa/es18xx.c
浏览文件 @
b4103333
...
...
@@ -1878,9 +1878,9 @@ module_param_array(dma2, int, NULL, 0444);
MODULE_PARM_DESC
(
dma2
,
"DMA 2 # for ES18xx driver."
);
static
struct
platform_device
*
platform_devices
[
SNDRV_CARDS
];
static
int
pnp_registered
;
#ifdef CONFIG_PNP
static
int
pnp_registered
;
static
struct
pnp_card_device_id
snd_audiodrive_pnpids
[]
=
{
/* ESS 1868 (integrated on Compaq dual P-Pro motherboard and Genius 18PnP 3D) */
...
...
@@ -2209,8 +2209,10 @@ static void __init_or_module snd_es18xx_unregister_all(void)
{
int
i
;
#ifdef CONFIG_PNP
if
(
pnp_registered
)
pnp_unregister_card_driver
(
&
es18xx_pnpc_driver
);
#endif
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
platform_devices
);
++
i
)
platform_device_unregister
(
platform_devices
[
i
]);
platform_driver_unregister
(
&
snd_es18xx_nonpnp_driver
);
...
...
@@ -2237,11 +2239,13 @@ static int __init alsa_card_es18xx_init(void)
cards
++
;
}
#ifdef CONFIG_PNP
i
=
pnp_register_card_driver
(
&
es18xx_pnpc_driver
);
if
(
i
>=
0
)
{
pnp_registered
=
1
;
cards
+=
i
;
}
#endif
if
(
!
cards
)
{
#ifdef MODULE
...
...
sound/isa/gus/gusclassic.c
浏览文件 @
b4103333
...
...
@@ -195,7 +195,7 @@ static int __init snd_gusclassic_probe(struct platform_device *pdev)
goto
_err
;
}
sprintf
(
card
->
longname
+
strlen
(
card
->
longname
),
" at 0x%lx, irq %d, dma %d"
,
gus
->
gf1
.
port
,
xirq
,
xdma1
);
if
(
dma2
>=
0
)
if
(
x
dma2
>=
0
)
sprintf
(
card
->
longname
+
strlen
(
card
->
longname
),
"&%d"
,
xdma2
);
snd_card_set_dev
(
card
,
&
pdev
->
dev
);
...
...
sound/isa/opl3sa2.c
浏览文件 @
b4103333
...
...
@@ -91,8 +91,10 @@ module_param_array(opl3sa3_ymode, int, NULL, 0444);
MODULE_PARM_DESC
(
opl3sa3_ymode
,
"Speaker size selection for 3D Enhancement mode: Desktop/Large Notebook/Small Notebook/HiFi."
);
static
struct
platform_device
*
platform_devices
[
SNDRV_CARDS
];
#ifdef CONFIG_PNP
static
int
pnp_registered
;
static
int
pnpc_registered
;
#endif
/* control ports */
#define OPL3SA2_PM_CTRL 0x01
...
...
@@ -721,7 +723,7 @@ static int __devinit snd_opl3sa2_probe(struct snd_card *card, int dev)
}
sprintf
(
card
->
longname
,
"%s at 0x%lx, irq %d, dma %d"
,
card
->
shortname
,
chip
->
port
,
xirq
,
xdma1
);
if
(
dma2
>=
0
)
if
(
x
dma2
>=
0
)
sprintf
(
card
->
longname
+
strlen
(
card
->
longname
),
"&%d"
,
xdma2
);
return
snd_card_register
(
card
);
...
...
@@ -779,7 +781,7 @@ static int snd_opl3sa2_pnp_resume(struct pnp_dev *pdev)
#endif
static
struct
pnp_driver
opl3sa2_pnp_driver
=
{
.
name
=
"opl3sa2-pnpbios"
,
.
name
=
"
snd-
opl3sa2-pnpbios"
,
.
id_table
=
snd_opl3sa2_pnpbiosids
,
.
probe
=
snd_opl3sa2_pnp_detect
,
.
remove
=
__devexit_p
(
snd_opl3sa2_pnp_remove
),
...
...
@@ -846,7 +848,7 @@ static int snd_opl3sa2_pnp_cresume(struct pnp_card_link *pcard)
static
struct
pnp_card_driver
opl3sa2_pnpc_driver
=
{
.
flags
=
PNP_DRIVER_RES_DISABLE
,
.
name
=
"
opl3sa2
"
,
.
name
=
"
snd-opl3sa2-cpnp
"
,
.
id_table
=
snd_opl3sa2_pnpids
,
.
probe
=
snd_opl3sa2_pnp_cdetect
,
.
remove
=
__devexit_p
(
snd_opl3sa2_pnp_cremove
),
...
...
@@ -929,10 +931,12 @@ static void __init_or_module snd_opl3sa2_unregister_all(void)
{
int
i
;
#ifdef CONFIG_PNP
if
(
pnpc_registered
)
pnp_unregister_card_driver
(
&
opl3sa2_pnpc_driver
);
if
(
pnp_registered
)
pnp_unregister_driver
(
&
opl3sa2_pnp_driver
);
#endif
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
platform_devices
);
++
i
)
platform_device_unregister
(
platform_devices
[
i
]);
platform_driver_unregister
(
&
snd_opl3sa2_nonpnp_driver
);
...
...
@@ -961,6 +965,7 @@ static int __init alsa_card_opl3sa2_init(void)
cards
++
;
}
#ifdef CONFIG_PNP
err
=
pnp_register_driver
(
&
opl3sa2_pnp_driver
);
if
(
err
>=
0
)
{
pnp_registered
=
1
;
...
...
@@ -971,6 +976,7 @@ static int __init alsa_card_opl3sa2_init(void)
pnpc_registered
=
1
;
cards
+=
err
;
}
#endif
if
(
!
cards
)
{
#ifdef MODULE
...
...
sound/isa/opti9xx/opti92x-ad1848.c
浏览文件 @
b4103333
...
...
@@ -1349,7 +1349,7 @@ static int snd_opti93x_pcm(struct snd_opti93x *codec, int device, struct snd_pcm
int
error
;
struct
snd_pcm
*
pcm
;
if
((
error
=
snd_pcm_new
(
codec
->
card
,
"OPTi 82C93X"
,
device
,
1
,
1
,
&
pcm
)))
if
((
error
=
snd_pcm_new
(
codec
->
card
,
"OPTi 82C93X"
,
device
,
1
,
1
,
&
pcm
))
<
0
)
return
error
;
snd_pcm_set_ops
(
pcm
,
SNDRV_PCM_STREAM_PLAYBACK
,
&
snd_opti93x_playback_ops
);
...
...
sound/isa/sb/sb16.c
浏览文件 @
b4103333
...
...
@@ -179,6 +179,8 @@ static struct pnp_card_device_id snd_sb16_pnpids[] = {
{
.
id
=
"CTL0086"
,
.
devs
=
{
{
"CTL0041"
}
}
},
/* Sound Blaster Vibra16X */
{
.
id
=
"CTL00f0"
,
.
devs
=
{
{
"CTL0043"
}
}
},
/* Sound Blaster 16 (Virtual PC 2004) */
{
.
id
=
"tBA03b0"
,
.
devs
=
{
{.
id
=
"PNPb003"
}
}
},
#else
/* SNDRV_SBAWE defined */
/* Sound Blaster AWE 32 PnP */
{
.
id
=
"CTL0035"
,
.
devs
=
{
{
"CTL0031"
},
{
"CTL0021"
}
}
},
...
...
@@ -235,8 +237,6 @@ static struct pnp_card_device_id snd_sb16_pnpids[] = {
{
.
id
=
"CTLXXXX"
,
.
devs
=
{
{
"CTL0044"
},
{
"CTL0023"
}
}
},
{
.
id
=
"CTLXXXX"
,
.
devs
=
{
{
"CTL0045"
},
{
"CTL0022"
}
}
},
#endif
/* SNDRV_SBAWE */
/* Sound Blaster 16 PnP (Virtual PC 2004)*/
{
.
id
=
"tBA03b0"
,
.
devs
=
{
{
"PNPb003"
}
}
},
{
.
id
=
""
,
}
};
...
...
sound/isa/sscape.c
浏览文件 @
b4103333
...
...
@@ -69,9 +69,9 @@ module_param_array(dma, int, NULL, 0444);
MODULE_PARM_DESC
(
dma
,
"DMA # for SoundScape driver."
);
static
struct
platform_device
*
platform_devices
[
SNDRV_CARDS
];
static
int
pnp_registered
;
#ifdef CONFIG_PNP
static
int
pnp_registered
;
static
struct
pnp_card_device_id
sscape_pnpids
[]
=
{
{
.
id
=
"ENS3081"
,
.
devs
=
{
{
"ENS0000"
}
}
},
{
.
id
=
""
}
/* end */
...
...
@@ -1391,8 +1391,10 @@ static void __init_or_module sscape_unregister_all(void)
{
int
i
;
#ifdef CONFIG_PNP
if
(
pnp_registered
)
pnp_unregister_card_driver
(
&
sscape_pnpc_driver
);
#endif
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
platform_devices
);
++
i
)
platform_device_unregister
(
platform_devices
[
i
]);
platform_driver_unregister
(
&
snd_sscape_driver
);
...
...
@@ -1466,8 +1468,10 @@ static int __init sscape_init(void)
ret
=
sscape_manual_probe
();
if
(
ret
<
0
)
return
ret
;
#ifdef CONFIG_PNP
if
(
pnp_register_card_driver
(
&
sscape_pnpc_driver
)
>=
0
)
pnp_registered
=
1
;
#endif
return
0
;
}
...
...
sound/isa/wavefront/wavefront.c
浏览文件 @
b4103333
...
...
@@ -84,10 +84,9 @@ module_param_array(use_cs4232_midi, bool, NULL, 0444);
MODULE_PARM_DESC
(
use_cs4232_midi
,
"Use CS4232 MPU-401 interface (inaccessibly located inside your computer)"
);
static
struct
platform_device
*
platform_devices
[
SNDRV_CARDS
];
static
int
pnp_registered
;
#ifdef CONFIG_PNP
static
int
pnp_registered
;
static
struct
pnp_card_device_id
snd_wavefront_pnpids
[]
=
{
/* Tropez */
...
...
@@ -695,8 +694,10 @@ static void __init_or_module snd_wavefront_unregister_all(void)
{
int
i
;
#ifdef CONFIG_PNP
if
(
pnp_registered
)
pnp_unregister_card_driver
(
&
wavefront_pnpc_driver
);
#endif
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
platform_devices
);
++
i
)
platform_device_unregister
(
platform_devices
[
i
]);
platform_driver_unregister
(
&
snd_wavefront_driver
);
...
...
@@ -725,11 +726,13 @@ static int __init alsa_card_wavefront_init(void)
cards
++
;
}
#ifdef CONFIG_PNP
i
=
pnp_register_card_driver
(
&
wavefront_pnpc_driver
);
if
(
i
>=
0
)
{
pnp_registered
=
1
;
cards
+=
i
;
}
#endif
if
(
!
cards
)
{
#ifdef MODULE
...
...
sound/isa/wavefront/wavefront_synth.c
浏览文件 @
b4103333
...
...
@@ -866,7 +866,7 @@ wavefront_send_sample (snd_wavefront_t *dev,
divided by 2.
*/
u16
sample_short
;
u16
sample_short
=
0
;
u32
length
;
u16
__user
*
data_end
=
NULL
;
unsigned
int
i
;
...
...
sound/pci/ac97/ac97_patch.c
浏览文件 @
b4103333
...
...
@@ -1621,8 +1621,27 @@ static const struct snd_kcontrol_new snd_ac97_ad1981x_jack_sense[] = {
AC97_SINGLE
(
"Line Jack Sense"
,
AC97_AD_JACK_SPDIF
,
12
,
1
,
0
),
};
/* black list to avoid HP/Line jack-sense controls
* (SS vendor << 16 | device)
*/
static
unsigned
int
ad1981_jacks_blacklist
[]
=
{
0x10140554
,
/* Thinkpad T42p/R50p */
0
/* end */
};
static
int
check_list
(
struct
snd_ac97
*
ac97
,
const
unsigned
int
*
list
)
{
u32
subid
=
((
u32
)
ac97
->
subsystem_vendor
<<
16
)
|
ac97
->
subsystem_device
;
for
(;
*
list
;
list
++
)
if
(
*
list
==
subid
)
return
1
;
return
0
;
}
static
int
patch_ad1981a_specific
(
struct
snd_ac97
*
ac97
)
{
if
(
check_list
(
ac97
,
ad1981_jacks_blacklist
))
return
0
;
return
patch_build_controls
(
ac97
,
snd_ac97_ad1981x_jack_sense
,
ARRAY_SIZE
(
snd_ac97_ad1981x_jack_sense
));
}
...
...
@@ -1635,22 +1654,26 @@ static struct snd_ac97_build_ops patch_ad1981a_build_ops = {
#endif
};
/* white list to enable HP jack-sense bits
* (SS vendor << 16 | device)
*/
static
unsigned
int
ad1981_jacks_whitelist
[]
=
{
0x0e11005a
,
/* HP nc4000/4010 */
0x103c0890
,
/* HP nc6000 */
0x103c0938
,
/* HP nc4220 */
0x103c099c
,
/* HP nx6110 */
0x103c0944
,
/* HP nc6220 */
0x103c0934
,
/* HP nc8220 */
0x103c006d
,
/* HP nx9105 */
0x17340088
,
/* FSC Scenic-W */
0
/* end */
};
static
void
check_ad1981_hp_jack_sense
(
struct
snd_ac97
*
ac97
)
{
u32
subid
=
((
u32
)
ac97
->
subsystem_vendor
<<
16
)
|
ac97
->
subsystem_device
;
switch
(
subid
)
{
case
0x0e11005a
:
/* HP nc4000/4010 */
case
0x103c0890
:
/* HP nc6000 */
case
0x103c0938
:
/* HP nc4220 */
case
0x103c099c
:
/* HP nx6110 */
case
0x103c0944
:
/* HP nc6220 */
case
0x103c0934
:
/* HP nc8220 */
case
0x103c006d
:
/* HP nx9105 */
case
0x17340088
:
/* FSC Scenic-W */
if
(
check_list
(
ac97
,
ad1981_jacks_whitelist
))
/* enable headphone jack sense */
snd_ac97_update_bits
(
ac97
,
AC97_AD_JACK_SPDIF
,
1
<<
11
,
1
<<
11
);
break
;
}
}
int
patch_ad1981a
(
struct
snd_ac97
*
ac97
)
...
...
@@ -1672,6 +1695,8 @@ static int patch_ad1981b_specific(struct snd_ac97 *ac97)
if
((
err
=
patch_build_controls
(
ac97
,
&
snd_ac97_ad198x_2cmic
,
1
))
<
0
)
return
err
;
if
(
check_list
(
ac97
,
ad1981_jacks_blacklist
))
return
0
;
return
patch_build_controls
(
ac97
,
snd_ac97_ad1981x_jack_sense
,
ARRAY_SIZE
(
snd_ac97_ad1981x_jack_sense
));
}
...
...
@@ -2210,9 +2235,9 @@ static void alc850_update_jacks(struct snd_ac97 *ac97)
/* Vref disable (bit12), 1kOhm (bit13) */
snd_ac97_update_bits
(
ac97
,
AC97_ALC850_MISC1
,
(
1
<<
12
)
|
(
1
<<
13
),
shared
?
(
1
<<
12
)
:
(
1
<<
13
));
/* MIC-IN = 1, CENTER-LFE =
2
*/
/* MIC-IN = 1, CENTER-LFE =
5
*/
snd_ac97_update_bits
(
ac97
,
AC97_ALC850_JACK_SELECT
,
7
<<
4
,
shared
?
(
2
<<
4
)
:
(
1
<<
4
));
shared
?
(
5
<<
4
)
:
(
1
<<
4
));
}
static
const
struct
snd_kcontrol_new
snd_ac97_controls_alc850
[]
=
{
...
...
sound/pci/ali5451/ali5451.c
浏览文件 @
b4103333
...
...
@@ -279,7 +279,7 @@ struct snd_ali {
};
static
struct
pci_device_id
snd_ali_ids
[]
=
{
{
0x10b9
,
0x5451
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
0
,
},
{
PCI_DEVICE
(
PCI_VENDOR_ID_AL
,
PCI_DEVICE_ID_AL_M5451
),
0
,
0
,
0
},
{
0
,
}
};
MODULE_DEVICE_TABLE
(
pci
,
snd_ali_ids
);
...
...
sound/pci/au88x0/au88x0_eq.c
浏览文件 @
b4103333
...
...
@@ -849,7 +849,7 @@ static int
snd_vortex_peaks_get
(
struct
snd_kcontrol
*
kcontrol
,
struct
snd_ctl_elem_value
*
ucontrol
)
{
vortex_t
*
vortex
=
snd_kcontrol_chip
(
kcontrol
);
int
i
,
count
;
int
i
,
count
=
0
;
u16
peaks
[
20
];
vortex_Eqlzr_GetAllPeaks
(
vortex
,
peaks
,
&
count
);
...
...
sound/pci/bt87x.c
浏览文件 @
b4103333
...
...
@@ -781,6 +781,8 @@ static struct pci_device_id snd_bt87x_ids[] = {
BT_DEVICE
(
PCI_DEVICE_ID_BROOKTREE_879
,
0x0070
,
0x13eb
,
32000
),
/* Viewcast Osprey 200 */
BT_DEVICE
(
PCI_DEVICE_ID_BROOKTREE_878
,
0x0070
,
0xff01
,
44100
),
/* AVerMedia Studio No. 103, 203, ...? */
BT_DEVICE
(
PCI_DEVICE_ID_BROOKTREE_878
,
0x1461
,
0x0003
,
48000
),
{
}
};
MODULE_DEVICE_TABLE
(
pci
,
snd_bt87x_ids
);
...
...
@@ -808,7 +810,7 @@ static int __devinit snd_bt87x_detect_card(struct pci_dev *pci)
const
struct
pci_device_id
*
supported
;
supported
=
pci_match_device
(
&
driver
,
pci
);
if
(
supported
)
if
(
supported
&&
supported
->
driver_data
>
0
)
return
supported
->
driver_data
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
blacklist
);
++
i
)
...
...
sound/pci/ca0106/ca0106_main.c
浏览文件 @
b4103333
...
...
@@ -199,7 +199,8 @@ static struct snd_ca0106_details ca0106_chip_details[] = {
.
name
=
"MSI K8N Diamond MB [SB0438]"
,
.
gpio_type
=
1
,
.
i2c_adc
=
1
}
,
/* Shuttle XPC SD31P which has an onboard Creative Labs Sound Blaster Live! 24-bit EAX
/* Shuttle XPC SD31P which has an onboard Creative Labs
* Sound Blaster Live! 24-bit EAX
* high-definition 7.1 audio processor".
* Added using info from andrewvegan in alsa bug #1298
*/
...
...
@@ -207,6 +208,15 @@ static struct snd_ca0106_details ca0106_chip_details[] = {
.
name
=
"Shuttle XPC SD31P [SD31P]"
,
.
gpio_type
=
1
,
.
i2c_adc
=
1
}
,
/* Shuttle XPC SD11G5 which has an onboard Creative Labs
* Sound Blaster Live! 24-bit EAX
* high-definition 7.1 audio processor".
* Fixes ALSA bug#1600
*/
{
.
serial
=
0x30411297
,
.
name
=
"Shuttle XPC SD11G5 [SD11G5]"
,
.
gpio_type
=
1
,
.
i2c_adc
=
1
}
,
{
.
serial
=
0
,
.
name
=
"AudigyLS [Unknown]"
}
};
...
...
sound/pci/cs46xx/dsp_spos_scb_lib.c
浏览文件 @
b4103333
...
...
@@ -675,7 +675,7 @@ cs46xx_dsp_create_src_task_scb(struct snd_cs46xx * chip, char * scb_name,
if
(
pass_through
)
{
/* wont work with any other rate than
the native DSP rate */
snd_assert
(
rate
=
48000
);
snd_assert
(
rate
=
=
48000
);
scb
=
cs46xx_dsp_create_generic_scb
(
chip
,
scb_name
,(
u32
*
)
&
src_task_scb
,
dest
,
"DMAREADER"
,
parent_scb
,
...
...
sound/pci/cs5535audio/cs5535audio.c
浏览文件 @
b4103333
...
...
@@ -46,8 +46,10 @@ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
static
int
enable
[
SNDRV_CARDS
]
=
SNDRV_DEFAULT_ENABLE_PNP
;
static
struct
pci_device_id
snd_cs5535audio_ids
[]
=
{
{
PCI_VENDOR_ID_NS
,
PCI_DEVICE_ID_NS_CS5535_AUDIO
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
0
,
},
{
PCI_VENDOR_ID_NS
,
PCI_DEVICE_ID_NS_CS5535_AUDIO
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
0
,
},
{
PCI_VENDOR_ID_AMD
,
PCI_DEVICE_ID_AMD_CS5536_AUDIO
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
0
,
},
{}
};
...
...
sound/pci/emu10k1/emumixer.c
浏览文件 @
b4103333
...
...
@@ -759,6 +759,8 @@ int __devinit snd_emu10k1_mixer(struct snd_emu10k1 *emu,
"Master Mono Playback Volume"
,
"PCM Out Path & Mute"
,
"Mono Output Select"
,
"Front Playback Switch"
,
"Front Playback Volume"
,
"Surround Playback Switch"
,
"Surround Playback Volume"
,
"Center Playback Switch"
,
...
...
@@ -829,9 +831,9 @@ int __devinit snd_emu10k1_mixer(struct snd_emu10k1 *emu,
}
if
(
emu
->
audigy
)
{
/* set master volume to 0 dB */
snd_ac97_write
(
emu
->
ac97
,
AC97_MASTER
,
0x0000
);
snd_ac97_write
_cache
(
emu
->
ac97
,
AC97_MASTER
,
0x0000
);
/* set capture source to mic */
snd_ac97_write
(
emu
->
ac97
,
AC97_REC_SEL
,
0x0000
);
snd_ac97_write
_cache
(
emu
->
ac97
,
AC97_REC_SEL
,
0x0000
);
c
=
audigy_remove_ctls
;
}
else
{
/*
...
...
@@ -844,8 +846,8 @@ int __devinit snd_emu10k1_mixer(struct snd_emu10k1 *emu,
snd_emu10k1_ptr_write
(
emu
,
AC97SLOT
,
0
,
AC97SLOT_CNTR
|
AC97SLOT_LFE
|
AC97SLOT_REAR_LEFT
|
AC97SLOT_REAR_RIGHT
);
}
/* remove unused AC97 controls */
snd_ac97_write
(
emu
->
ac97
,
AC97_SURROUND_MASTER
,
0x0202
);
snd_ac97_write
(
emu
->
ac97
,
AC97_CENTER_LFE_MASTER
,
0x0202
);
snd_ac97_write
_cache
(
emu
->
ac97
,
AC97_SURROUND_MASTER
,
0x0202
);
snd_ac97_write
_cache
(
emu
->
ac97
,
AC97_CENTER_LFE_MASTER
,
0x0202
);
c
=
emu10k1_remove_ctls
;
}
for
(;
*
c
;
c
++
)
...
...
sound/pci/hda/hda_intel.c
浏览文件 @
b4103333
...
...
@@ -75,6 +75,7 @@ MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},"
"{Intel, ICH6M},"
"{Intel, ICH7},"
"{Intel, ESB2},"
"{Intel, ICH8},"
"{ATI, SB450},"
"{VIA, VT8251},"
"{VIA, VT8237A},"
...
...
@@ -1586,6 +1587,7 @@ static struct pci_device_id azx_ids[] = {
{
0x8086
,
0x2668
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
AZX_DRIVER_ICH
},
/* ICH6 */
{
0x8086
,
0x27d8
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
AZX_DRIVER_ICH
},
/* ICH7 */
{
0x8086
,
0x269a
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
AZX_DRIVER_ICH
},
/* ESB2 */
{
0x8086
,
0x284b
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
AZX_DRIVER_ICH
},
/* ICH8 */
{
0x1002
,
0x437b
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
AZX_DRIVER_ATI
},
/* ATI SB450 */
{
0x1106
,
0x3288
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
AZX_DRIVER_VIA
},
/* VIA VT8251/VT8237A */
{
0x1039
,
0x7502
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
AZX_DRIVER_SIS
},
/* SIS966 */
...
...
sound/pci/hda/patch_realtek.c
浏览文件 @
b4103333
...
...
@@ -1668,6 +1668,7 @@ static struct hda_board_config alc880_cfg_tbl[] = {
{
.
pci_subvendor
=
0x1043
,
.
pci_subdevice
=
0x8196
,
.
config
=
ALC880_6ST
},
/* ASUS P5GD1-HVM */
{
.
pci_subvendor
=
0x1043
,
.
pci_subdevice
=
0x81b4
,
.
config
=
ALC880_6ST
},
{
.
pci_subvendor
=
0x1019
,
.
pci_subdevice
=
0xa884
,
.
config
=
ALC880_6ST
},
/* Acer APFV */
{
.
pci_subvendor
=
0x1458
,
.
pci_subdevice
=
0xa102
,
.
config
=
ALC880_6ST
},
/* Gigabyte K8N51 */
{
.
modelname
=
"6stack-digout"
,
.
config
=
ALC880_6ST_DIG
},
{
.
pci_subvendor
=
0x2668
,
.
pci_subdevice
=
0x8086
,
.
config
=
ALC880_6ST_DIG
},
...
...
@@ -2475,7 +2476,7 @@ static struct hda_verb alc260_init_verbs[] = {
/* LINE-2 is used for line-out in rear */
{
0x15
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_OUT
},
/* select line-out */
{
0x
15
,
AC_VERB_SET_CONNECT_SEL
,
0x00
},
{
0x
0e
,
AC_VERB_SET_CONNECT_SEL
,
0x00
},
/* LINE-OUT pin */
{
0x0f
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_OUT
},
/* enable HP */
...
...
@@ -2945,6 +2946,8 @@ static int alc260_auto_init(struct hda_codec *codec)
*/
static
struct
hda_board_config
alc260_cfg_tbl
[]
=
{
{
.
modelname
=
"basic"
,
.
config
=
ALC260_BASIC
},
{
.
pci_subvendor
=
0x104d
,
.
pci_subdevice
=
0x81bb
,
.
config
=
ALC260_BASIC
},
/* Sony VAIO */
{
.
modelname
=
"hp"
,
.
config
=
ALC260_HP
},
{
.
pci_subvendor
=
0x103c
,
.
pci_subdevice
=
0x3010
,
.
config
=
ALC260_HP
},
{
.
pci_subvendor
=
0x103c
,
.
pci_subdevice
=
0x3011
,
.
config
=
ALC260_HP
},
...
...
@@ -3414,12 +3417,12 @@ static struct snd_kcontrol_new alc882_capture_mixer[] = {
* configuration and preset
*/
static
struct
hda_board_config
alc882_cfg_tbl
[]
=
{
{
.
modelname
=
"3stack-dig"
,
.
config
=
ALC8
61
_3ST_DIG
},
{
.
modelname
=
"6stack-dig"
,
.
config
=
ALC8
61
_6ST_DIG
},
{
.
modelname
=
"3stack-dig"
,
.
config
=
ALC8
82
_3ST_DIG
},
{
.
modelname
=
"6stack-dig"
,
.
config
=
ALC8
82
_6ST_DIG
},
{
.
pci_subvendor
=
0x1462
,
.
pci_subdevice
=
0x6668
,
.
config
=
ALC882_6ST_DIG
},
/* MSI */
{
.
pci_subvendor
=
0x105b
,
.
pci_subdevice
=
0x6668
,
.
config
=
ALC882_6ST_DIG
},
/* Foxconn */
{
.
pci_subvendor
=
0x1019
,
.
pci_subdevice
=
0x6668
,
.
config
=
ALC882_6ST_DIG
},
/* ECS */
{
.
modelname
=
"auto"
,
.
config
=
ALC8
61
_AUTO
},
{
.
modelname
=
"auto"
,
.
config
=
ALC8
82
_AUTO
},
{}
};
...
...
sound/pci/hda/patch_si3054.c
浏览文件 @
b4103333
...
...
@@ -297,6 +297,7 @@ static int patch_si3054(struct hda_codec *codec)
struct
hda_codec_preset
snd_hda_preset_si3054
[]
=
{
{
.
id
=
0x163c3055
,
.
name
=
"Si3054"
,
.
patch
=
patch_si3054
},
{
.
id
=
0x163c3155
,
.
name
=
"Si3054"
,
.
patch
=
patch_si3054
},
{
.
id
=
0x11c13026
,
.
name
=
"Si3054"
,
.
patch
=
patch_si3054
},
{}
};
sound/pci/hda/patch_sigmatel.c
浏览文件 @
b4103333
...
...
@@ -50,10 +50,11 @@ struct sigmatel_spec {
unsigned
int
surr_switch
:
1
;
unsigned
int
line_switch
:
1
;
unsigned
int
mic_switch
:
1
;
unsigned
int
alt_switch
:
1
;
/* playback */
struct
hda_multi_out
multiout
;
hda_nid_t
dac_nids
[
4
];
hda_nid_t
dac_nids
[
5
];
/* capture */
hda_nid_t
*
adc_nids
;
...
...
@@ -73,7 +74,7 @@ struct sigmatel_spec {
/* capture source */
struct
hda_input_mux
*
input_mux
;
unsigned
int
cur_mux
[
2
];
unsigned
int
cur_mux
[
3
];
/* i/o switches */
unsigned
int
io_switch
[
2
];
...
...
@@ -107,6 +108,14 @@ static hda_nid_t stac922x_mux_nids[2] = {
0x12
,
0x13
,
};
static
hda_nid_t
stac927x_adc_nids
[
3
]
=
{
0x07
,
0x08
,
0x09
};
static
hda_nid_t
stac927x_mux_nids
[
3
]
=
{
0x15
,
0x16
,
0x17
};
static
hda_nid_t
stac9200_pin_nids
[
8
]
=
{
0x08
,
0x09
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
};
...
...
@@ -116,6 +125,12 @@ static hda_nid_t stac922x_pin_nids[10] = {
0x0f
,
0x10
,
0x11
,
0x15
,
0x1b
,
};
static
hda_nid_t
stac927x_pin_nids
[
14
]
=
{
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x21
,
0x22
,
0x23
,
};
static
int
stac92xx_mux_enum_info
(
struct
snd_kcontrol
*
kcontrol
,
struct
snd_ctl_elem_info
*
uinfo
)
{
struct
hda_codec
*
codec
=
snd_kcontrol_chip
(
kcontrol
);
...
...
@@ -155,6 +170,12 @@ static struct hda_verb stac922x_core_init[] = {
{}
};
static
struct
hda_verb
stac927x_core_init
[]
=
{
/* set master volume and direct control */
{
0x24
,
AC_VERB_SET_VOLUME_KNOB_CONTROL
,
0xff
},
{}
};
static
struct
snd_kcontrol_new
stac9200_mixer
[]
=
{
HDA_CODEC_VOLUME
(
"Master Playback Volume"
,
0xb
,
0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Master Playback Switch"
,
0xb
,
0
,
HDA_OUTPUT
),
...
...
@@ -183,10 +204,26 @@ static struct snd_kcontrol_new stac922x_mixer[] = {
.
put
=
stac92xx_mux_enum_put
,
},
HDA_CODEC_VOLUME
(
"Capture Volume"
,
0x17
,
0x0
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Capture Switch"
,
0x17
,
0x0
,
HDA_INPUT
),
HDA_CODEC_VOLUME
(
"Mux Capture Volume"
,
0x12
,
0x0
,
HDA_OUTPUT
),
{
}
/* end */
};
static
snd_kcontrol_new_t
stac927x_mixer
[]
=
{
{
.
iface
=
SNDRV_CTL_ELEM_IFACE_MIXER
,
.
name
=
"Input Source"
,
.
count
=
1
,
.
info
=
stac92xx_mux_enum_info
,
.
get
=
stac92xx_mux_enum_get
,
.
put
=
stac92xx_mux_enum_put
,
},
HDA_CODEC_VOLUME
(
"InMux Capture Volume"
,
0x15
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"InVol Capture Volume"
,
0x18
,
0x0
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"ADCMux Capture Switch"
,
0x1b
,
0x0
,
HDA_OUTPUT
),
{
}
/* end */
};
static
int
stac92xx_build_controls
(
struct
hda_codec
*
codec
)
{
struct
sigmatel_spec
*
spec
=
codec
->
spec
;
...
...
@@ -240,14 +277,14 @@ static unsigned int ref922x_pin_configs[10] = {
};
static
unsigned
int
d945gtp3_pin_configs
[
10
]
=
{
0x0221401f
,
0x01a19022
,
0x01813021
,
0x01
1
14010
,
0x0221401f
,
0x01a19022
,
0x01813021
,
0x01
0
14010
,
0x40000100
,
0x40000100
,
0x40000100
,
0x40000100
,
0x02a19120
,
0x40000100
,
};
static
unsigned
int
d945gtp5_pin_configs
[
10
]
=
{
0x0221401f
,
0x01
111012
,
0x01813024
,
0x011
14010
,
0x01a19021
,
0x01
1
16011
,
0x01452130
,
0x40000100
,
0x0221401f
,
0x01
011012
,
0x01813024
,
0x010
14010
,
0x01a19021
,
0x01
0
16011
,
0x01452130
,
0x40000100
,
0x02a19320
,
0x40000100
,
};
...
...
@@ -274,6 +311,28 @@ static struct hda_board_config stac922x_cfg_tbl[] = {
{
.
pci_subvendor
=
PCI_VENDOR_ID_INTEL
,
.
pci_subdevice
=
0x0013
,
.
config
=
STAC_D945GTP5
},
/* Intel D955XBK - 5 Stack */
{
.
pci_subvendor
=
PCI_VENDOR_ID_INTEL
,
.
pci_subdevice
=
0x0417
,
.
config
=
STAC_D945GTP5
},
/* Intel D975XBK - 5 Stack */
{}
/* terminator */
};
static
unsigned
int
ref927x_pin_configs
[
14
]
=
{
0x01813122
,
0x01a19021
,
0x01014010
,
0x01016011
,
0x01012012
,
0x01011014
,
0x40000100
,
0x40000100
,
0x40000100
,
0x40000100
,
0x40000100
,
0x01441030
,
0x01c41030
,
0x40000100
,
};
static
unsigned
int
*
stac927x_brd_tbl
[]
=
{
ref927x_pin_configs
,
};
static
struct
hda_board_config
stac927x_cfg_tbl
[]
=
{
{
.
modelname
=
"ref"
,
.
pci_subvendor
=
PCI_VENDOR_ID_INTEL
,
.
pci_subdevice
=
0x2668
,
/* DFI LanParty */
.
config
=
STAC_REF
},
/* SigmaTel reference board */
{}
/* terminator */
};
...
...
@@ -408,11 +467,23 @@ static struct hda_pcm_stream stac92xx_pcm_analog_playback = {
},
};
static
struct
hda_pcm_stream
stac92xx_pcm_analog_alt_playback
=
{
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_max
=
2
,
.
nid
=
0x06
,
/* NID to query formats and rates */
.
ops
=
{
.
open
=
stac92xx_playback_pcm_open
,
.
prepare
=
stac92xx_playback_pcm_prepare
,
.
cleanup
=
stac92xx_playback_pcm_cleanup
},
};
static
struct
hda_pcm_stream
stac92xx_pcm_analog_capture
=
{
.
substreams
=
2
,
.
channels_min
=
2
,
.
channels_max
=
2
,
.
nid
=
0x06
,
/* NID to query formats and rate
s */
/* NID is set in stac92xx_build_pcm
s */
.
ops
=
{
.
prepare
=
stac92xx_capture_pcm_prepare
,
.
cleanup
=
stac92xx_capture_pcm_cleanup
...
...
@@ -430,6 +501,14 @@ static int stac92xx_build_pcms(struct hda_codec *codec)
info
->
name
=
"STAC92xx Analog"
;
info
->
stream
[
SNDRV_PCM_STREAM_PLAYBACK
]
=
stac92xx_pcm_analog_playback
;
info
->
stream
[
SNDRV_PCM_STREAM_CAPTURE
]
=
stac92xx_pcm_analog_capture
;
info
->
stream
[
SNDRV_PCM_STREAM_CAPTURE
].
nid
=
spec
->
adc_nids
[
0
];
if
(
spec
->
alt_switch
)
{
codec
->
num_pcms
++
;
info
++
;
info
->
name
=
"STAC92xx Analog Alt"
;
info
->
stream
[
SNDRV_PCM_STREAM_PLAYBACK
]
=
stac92xx_pcm_analog_alt_playback
;
}
if
(
spec
->
multiout
.
dig_out_nid
||
spec
->
dig_in_nid
)
{
codec
->
num_pcms
++
;
...
...
@@ -588,6 +667,16 @@ static int stac92xx_add_dyn_out_pins(struct hda_codec *codec, struct auto_pin_cf
return
0
;
}
/*
* XXX The line_out pin widget connection list may not be set to the
* desired DAC nid. This is the case on 927x where ports A and B can
* be routed to several DACs.
*
* This requires an analysis of the line-out/hp pin configuration
* to provide a best fit for pin/DAC configurations that are routable.
* For now, 927x DAC4 is not supported and 927x DAC1 output to ports
* A and B is not supported.
*/
/* fill in the dac_nids table from the parsed pin configuration */
static
int
stac92xx_auto_fill_dac_nids
(
struct
hda_codec
*
codec
,
const
struct
auto_pin_cfg
*
cfg
)
{
...
...
@@ -602,7 +691,13 @@ static int stac92xx_auto_fill_dac_nids(struct hda_codec *codec, const struct aut
AC_VERB_GET_CONNECT_LIST
,
0
)
&
0xff
;
}
spec
->
multiout
.
num_dacs
=
cfg
->
line_outs
;
if
(
cfg
->
line_outs
)
spec
->
multiout
.
num_dacs
=
cfg
->
line_outs
;
else
if
(
cfg
->
hp_pin
)
{
spec
->
multiout
.
dac_nids
[
0
]
=
snd_hda_codec_read
(
codec
,
cfg
->
hp_pin
,
0
,
AC_VERB_GET_CONNECT_LIST
,
0
)
&
0xff
;
spec
->
multiout
.
num_dacs
=
1
;
}
return
0
;
}
...
...
@@ -753,19 +848,21 @@ static void stac92xx_auto_init_hp_out(struct hda_codec *codec)
stac92xx_auto_set_pinctl
(
codec
,
pin
,
AC_PINCTL_OUT_EN
|
AC_PINCTL_HP_EN
);
}
static
int
stac92
2x_parse_auto_config
(
struct
hda_codec
*
codec
)
static
int
stac92
xx_parse_auto_config
(
struct
hda_codec
*
codec
,
hda_nid_t
dig_out
,
hda_nid_t
dig_in
)
{
struct
sigmatel_spec
*
spec
=
codec
->
spec
;
int
err
;
if
((
err
=
snd_hda_parse_pin_def_config
(
codec
,
&
spec
->
autocfg
,
NULL
))
<
0
)
return
err
;
if
(
!
spec
->
autocfg
.
line_outs
&&
!
spec
->
autocfg
.
hp_pin
)
return
0
;
/* can't find valid pin config */
stac92xx_auto_init_multi_out
(
codec
);
stac92xx_auto_init_hp_out
(
codec
);
if
((
err
=
stac92xx_add_dyn_out_pins
(
codec
,
&
spec
->
autocfg
))
<
0
)
return
err
;
if
((
err
=
stac92xx_auto_fill_dac_nids
(
codec
,
&
spec
->
autocfg
))
<
0
)
return
err
;
if
(
!
spec
->
autocfg
.
line_outs
&&
!
spec
->
autocfg
.
hp_pin
)
return
0
;
/* can't find valid pin config */
if
((
err
=
stac92xx_auto_create_multi_out_ctls
(
spec
,
&
spec
->
autocfg
))
<
0
||
(
err
=
stac92xx_auto_create_hp_ctls
(
codec
,
&
spec
->
autocfg
))
<
0
||
...
...
@@ -777,11 +874,11 @@ static int stac922x_parse_auto_config(struct hda_codec *codec)
spec
->
surr_switch
=
1
;
if
(
spec
->
autocfg
.
dig_out_pin
)
{
spec
->
multiout
.
dig_out_nid
=
0x08
;
spec
->
multiout
.
dig_out_nid
=
dig_out
;
stac92xx_auto_set_pinctl
(
codec
,
spec
->
autocfg
.
dig_out_pin
,
AC_PINCTL_OUT_EN
);
}
if
(
spec
->
autocfg
.
dig_in_pin
)
{
spec
->
dig_in_nid
=
0x09
;
spec
->
dig_in_nid
=
dig_in
;
stac92xx_auto_set_pinctl
(
codec
,
spec
->
autocfg
.
dig_in_pin
,
AC_PINCTL_IN_EN
);
}
...
...
@@ -827,9 +924,6 @@ static int stac92xx_init(struct hda_codec *codec)
snd_hda_sequence_write
(
codec
,
spec
->
init
);
stac92xx_auto_init_multi_out
(
codec
);
stac92xx_auto_init_hp_out
(
codec
);
return
0
;
}
...
...
@@ -996,7 +1090,47 @@ static int patch_stac922x(struct hda_codec *codec)
spec
->
multiout
.
dac_nids
=
spec
->
dac_nids
;
err
=
stac922x_parse_auto_config
(
codec
);
err
=
stac92xx_parse_auto_config
(
codec
,
0x08
,
0x09
);
if
(
err
<
0
)
{
stac92xx_free
(
codec
);
return
err
;
}
codec
->
patch_ops
=
stac92xx_patch_ops
;
return
0
;
}
static
int
patch_stac927x
(
struct
hda_codec
*
codec
)
{
struct
sigmatel_spec
*
spec
;
int
err
;
spec
=
kzalloc
(
sizeof
(
*
spec
),
GFP_KERNEL
);
if
(
spec
==
NULL
)
return
-
ENOMEM
;
codec
->
spec
=
spec
;
spec
->
board_config
=
snd_hda_check_board_config
(
codec
,
stac927x_cfg_tbl
);
if
(
spec
->
board_config
<
0
)
snd_printdd
(
KERN_INFO
"hda_codec: Unknown model for STAC927x, using BIOS defaults
\n
"
);
else
{
spec
->
num_pins
=
14
;
spec
->
pin_nids
=
stac927x_pin_nids
;
spec
->
pin_configs
=
stac927x_brd_tbl
[
spec
->
board_config
];
stac92xx_set_config_regs
(
codec
);
}
spec
->
adc_nids
=
stac927x_adc_nids
;
spec
->
mux_nids
=
stac927x_mux_nids
;
spec
->
num_muxes
=
3
;
spec
->
init
=
stac927x_core_init
;
spec
->
mixer
=
stac927x_mixer
;
spec
->
multiout
.
dac_nids
=
spec
->
dac_nids
;
err
=
stac92xx_parse_auto_config
(
codec
,
0x1e
,
0x20
);
if
(
err
<
0
)
{
stac92xx_free
(
codec
);
return
err
;
...
...
@@ -1018,5 +1152,15 @@ struct hda_codec_preset snd_hda_preset_sigmatel[] = {
{
.
id
=
0x83847681
,
.
name
=
"STAC9220D/9223D A2"
,
.
patch
=
patch_stac922x
},
{
.
id
=
0x83847682
,
.
name
=
"STAC9221 A2"
,
.
patch
=
patch_stac922x
},
{
.
id
=
0x83847683
,
.
name
=
"STAC9221D A2"
,
.
patch
=
patch_stac922x
},
{
.
id
=
0x83847620
,
.
name
=
"STAC9274"
,
.
patch
=
patch_stac927x
},
{
.
id
=
0x83847621
,
.
name
=
"STAC9274D"
,
.
patch
=
patch_stac927x
},
{
.
id
=
0x83847622
,
.
name
=
"STAC9273X"
,
.
patch
=
patch_stac927x
},
{
.
id
=
0x83847623
,
.
name
=
"STAC9273D"
,
.
patch
=
patch_stac927x
},
{
.
id
=
0x83847624
,
.
name
=
"STAC9272X"
,
.
patch
=
patch_stac927x
},
{
.
id
=
0x83847625
,
.
name
=
"STAC9272D"
,
.
patch
=
patch_stac927x
},
{
.
id
=
0x83847626
,
.
name
=
"STAC9271X"
,
.
patch
=
patch_stac927x
},
{
.
id
=
0x83847627
,
.
name
=
"STAC9271D"
,
.
patch
=
patch_stac927x
},
{
.
id
=
0x83847628
,
.
name
=
"STAC9274X5NH"
,
.
patch
=
patch_stac927x
},
{
.
id
=
0x83847629
,
.
name
=
"STAC9274D5NH"
,
.
patch
=
patch_stac927x
},
{}
/* terminator */
};
sound/pci/intel8x0.c
浏览文件 @
b4103333
...
...
@@ -427,6 +427,7 @@ static struct pci_device_id snd_intel8x0_ids[] = {
{
0x10de
,
0x008a
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
DEVICE_NFORCE
},
/* CK8 */
{
0x10de
,
0x00da
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
DEVICE_NFORCE
},
/* NFORCE3 */
{
0x10de
,
0x00ea
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
DEVICE_NFORCE
},
/* CK8S */
{
0x10de
,
0x026b
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
DEVICE_NFORCE
},
/* MCP51 */
{
0x1022
,
0x746d
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
DEVICE_INTEL
},
/* AMD8111 */
{
0x1022
,
0x7445
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
DEVICE_INTEL
},
/* AMD768 */
{
0x10b9
,
0x5455
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
DEVICE_ALI
},
/* Ali5455 */
...
...
@@ -1803,6 +1804,12 @@ static struct ac97_quirk ac97_quirks[] __devinitdata = {
.
name
=
"Dell"
,
/* which model? AD1981B*/
.
type
=
AC97_TUNE_HP_ONLY
},
{
.
subvendor
=
0x1028
,
.
subdevice
=
0x0151
,
.
name
=
"Dell Optiplex GX270"
,
/* AD1981B */
.
type
=
AC97_TUNE_HP_ONLY
},
{
.
subvendor
=
0x1028
,
.
subdevice
=
0x0163
,
...
...
@@ -1845,12 +1852,6 @@ static struct ac97_quirk ac97_quirks[] __devinitdata = {
.
name
=
"HP nx8220"
,
.
type
=
AC97_TUNE_MUTE_LED
},
{
.
subvendor
=
0x103c
,
.
subdevice
=
0x099c
,
.
name
=
"HP nx6110"
,
/* AD1981B */
.
type
=
AC97_TUNE_HP_ONLY
},
{
.
subvendor
=
0x103c
,
.
subdevice
=
0x129d
,
...
...
@@ -1866,7 +1867,7 @@ static struct ac97_quirk ac97_quirks[] __devinitdata = {
{
.
subvendor
=
0x103c
,
.
subdevice
=
0x099c
,
.
name
=
"HP nc6120"
,
.
name
=
"HP n
x6110/n
c6120"
,
.
type
=
AC97_TUNE_HP_MUTE_LED
},
{
...
...
sound/pci/pcxhr/pcxhr.c
浏览文件 @
b4103333
...
...
@@ -454,7 +454,7 @@ static int pcxhr_update_r_buffer(struct pcxhr_stream *stream)
is_capture
=
(
subs
->
stream
==
SNDRV_PCM_STREAM_CAPTURE
);
stream_num
=
is_capture
?
0
:
subs
->
number
;
snd_printdd
(
"pcxhr_update_r_buffer(pcm%c%d) : addr(%p) bytes(%x) subs(%d)
\n
"
,
snd_printdd
(
"pcxhr_update_r_buffer(pcm%c%d) : addr(%p) bytes(%
z
x) subs(%d)
\n
"
,
is_capture
?
'c'
:
'p'
,
chip
->
chip_idx
,
(
void
*
)
subs
->
runtime
->
dma_addr
,
subs
->
runtime
->
dma_bytes
,
subs
->
number
);
...
...
@@ -744,13 +744,14 @@ static int pcxhr_prepare(struct snd_pcm_substream *subs)
/* only the first stream can choose the sample rate */
/* the further opened streams will be limited to its frequency (see open) */
/* set the clock only once (first stream) */
if
(
mgr
->
sample_rate
==
0
)
{
if
(
mgr
->
sample_rate
!=
subs
->
runtime
->
rate
)
{
err
=
pcxhr_set_clock
(
mgr
,
subs
->
runtime
->
rate
);
if
(
err
)
break
;
if
(
mgr
->
sample_rate
==
0
)
/* start the DSP-timer */
err
=
pcxhr_hardware_timer
(
mgr
,
1
);
mgr
->
sample_rate
=
subs
->
runtime
->
rate
;
err
=
pcxhr_hardware_timer
(
mgr
,
1
);
/* start the DSP-timer */
}
}
while
(
0
);
/* do only once (so we can use break instead of goto) */
...
...
sound/pci/rme9652/hdspm.c
浏览文件 @
b4103333
...
...
@@ -3324,11 +3324,11 @@ static int __devinit snd_hdspm_preallocate_memory(struct hdspm * hdspm)
snd_dma_pci_data
(
hdspm
->
pci
),
wanted
,
wanted
))
<
0
)
{
snd_printdd
(
"Could not preallocate %
d
Bytes
\n
"
,
wanted
);
snd_printdd
(
"Could not preallocate %
zd
Bytes
\n
"
,
wanted
);
return
err
;
}
else
snd_printdd
(
" Preallocated %
d
Bytes
\n
"
,
wanted
);
snd_printdd
(
" Preallocated %
zd
Bytes
\n
"
,
wanted
);
return
0
;
}
...
...
@@ -3510,7 +3510,7 @@ static int __devinit snd_hdspm_create(struct snd_card *card, struct hdspm * hdsp
hdspm
->
monitor_outs
=
enable_monitor
;
snd_printdd
(
"kmalloc Mixer memory of %d Bytes
\n
"
,
snd_printdd
(
"kmalloc Mixer memory of %
z
d Bytes
\n
"
,
sizeof
(
struct
hdspm_mixer
));
if
((
hdspm
->
mixer
=
kmalloc
(
sizeof
(
struct
hdspm_mixer
),
GFP_KERNEL
))
==
NULL
)
{
...
...
sound/pci/trident/trident.c
浏览文件 @
b4103333
...
...
@@ -64,9 +64,11 @@ module_param_array(wavetable_size, int, NULL, 0444);
MODULE_PARM_DESC
(
wavetable_size
,
"Maximum memory size in kB for wavetable synth."
);
static
struct
pci_device_id
snd_trident_ids
[]
=
{
{
0x1023
,
0x2000
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
0
,
},
/* Trident 4DWave DX PCI Audio */
{
0x1023
,
0x2001
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
0
,
},
/* Trident 4DWave NX PCI Audio */
{
0x1039
,
0x7018
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
0
,
},
/* SiS SI7018 PCI Audio */
{
PCI_DEVICE
(
PCI_VENDOR_ID_TRIDENT
,
PCI_DEVICE_ID_TRIDENT_4DWAVE_DX
),
PCI_CLASS_MULTIMEDIA_AUDIO
<<
8
,
0xffff00
,
0
},
{
PCI_DEVICE
(
PCI_VENDOR_ID_TRIDENT
,
PCI_DEVICE_ID_TRIDENT_4DWAVE_NX
),
0
,
0
,
0
},
{
PCI_DEVICE
(
PCI_VENDOR_ID_SI
,
PCI_DEVICE_ID_SI_7018
),
0
,
0
,
0
},
{
0
,
}
};
...
...
sound/pci/via82xx.c
浏览文件 @
b4103333
...
...
@@ -2340,6 +2340,7 @@ static int __devinit check_dxs_list(struct pci_dev *pci)
{
.
subvendor
=
0x1043
,
.
subdevice
=
0x80b0
,
.
action
=
VIA_DXS_NO_VRA
},
/* ASUS A7V600 & K8V*/
{
.
subvendor
=
0x1043
,
.
subdevice
=
0x810d
,
.
action
=
VIA_DXS_SRC
},
/* ASUS */
{
.
subvendor
=
0x1043
,
.
subdevice
=
0x812a
,
.
action
=
VIA_DXS_SRC
},
/* ASUS A8V Deluxe */
{
.
subvendor
=
0x1043
,
.
subdevice
=
0x8174
,
.
action
=
VIA_DXS_SRC
},
/* ASUS */
{
.
subvendor
=
0x1071
,
.
subdevice
=
0x8375
,
.
action
=
VIA_DXS_NO_VRA
},
/* Vobis/Yakumo/Mitac notebook */
{
.
subvendor
=
0x1071
,
.
subdevice
=
0x8399
,
.
action
=
VIA_DXS_NO_VRA
},
/* Umax AB 595T (VIA K8N800A - VT8237) */
{
.
subvendor
=
0x10cf
,
.
subdevice
=
0x118e
,
.
action
=
VIA_DXS_ENABLE
},
/* FSC laptop */
...
...
@@ -2358,6 +2359,7 @@ static int __devinit check_dxs_list(struct pci_dev *pci)
{
.
subvendor
=
0x1462
,
.
subdevice
=
0x7023
,
.
action
=
VIA_DXS_NO_VRA
},
/* MSI K8T Neo2-FI */
{
.
subvendor
=
0x1462
,
.
subdevice
=
0x7120
,
.
action
=
VIA_DXS_ENABLE
},
/* MSI KT4V */
{
.
subvendor
=
0x1462
,
.
subdevice
=
0x7142
,
.
action
=
VIA_DXS_ENABLE
},
/* MSI K8MM-V */
{
.
subvendor
=
0x1462
,
.
subdevice
=
0xb012
,
.
action
=
VIA_DXS_SRC
},
/* P4M800/VIA8237R */
{
.
subvendor
=
0x147b
,
.
subdevice
=
0x1401
,
.
action
=
VIA_DXS_ENABLE
},
/* ABIT KD7(-RAID) */
{
.
subvendor
=
0x147b
,
.
subdevice
=
0x1411
,
.
action
=
VIA_DXS_ENABLE
},
/* ABIT VA-20 */
{
.
subvendor
=
0x147b
,
.
subdevice
=
0x1413
,
.
action
=
VIA_DXS_ENABLE
},
/* ABIT KV8 Pro */
...
...
@@ -2371,6 +2373,9 @@ static int __devinit check_dxs_list(struct pci_dev *pci)
{
.
subvendor
=
0x161f
,
.
subdevice
=
0x2032
,
.
action
=
VIA_DXS_48K
},
/* m680x machines */
{
.
subvendor
=
0x1631
,
.
subdevice
=
0xe004
,
.
action
=
VIA_DXS_ENABLE
},
/* Easy Note 3174, Packard Bell */
{
.
subvendor
=
0x1695
,
.
subdevice
=
0x3005
,
.
action
=
VIA_DXS_ENABLE
},
/* EPoX EP-8K9A */
{
.
subvendor
=
0x1695
,
.
subdevice
=
0x300e
,
.
action
=
VIA_DXS_SRC
},
/* EPoX 9HEAI */
{
.
subvendor
=
0x16f3
,
.
subdevice
=
0x6405
,
.
action
=
VIA_DXS_SRC
},
/* Jetway K8M8MS */
{
.
subvendor
=
0x1734
,
.
subdevice
=
0x1093
,
.
action
=
VIA_DXS_SRC
},
/* FSC */
{
.
subvendor
=
0x1849
,
.
subdevice
=
0x3059
,
.
action
=
VIA_DXS_NO_VRA
},
/* ASRock K7VM2 */
{
.
subvendor
=
0x1849
,
.
subdevice
=
0x9761
,
.
action
=
VIA_DXS_SRC
},
/* ASRock mobo(?) */
{
.
subvendor
=
0x1919
,
.
subdevice
=
0x200a
,
.
action
=
VIA_DXS_NO_VRA
},
/* Soltek SL-K8Tpro-939 */
...
...
sound/pci/ymfpci/ymfpci_main.c
浏览文件 @
b4103333
...
...
@@ -1229,6 +1229,7 @@ static int snd_ymfpci_spdif_default_get(struct snd_kcontrol *kcontrol,
spin_lock_irq
(
&
chip
->
reg_lock
);
ucontrol
->
value
.
iec958
.
status
[
0
]
=
(
chip
->
spdif_bits
>>
0
)
&
0xff
;
ucontrol
->
value
.
iec958
.
status
[
1
]
=
(
chip
->
spdif_bits
>>
8
)
&
0xff
;
ucontrol
->
value
.
iec958
.
status
[
3
]
=
IEC958_AES3_CON_FS_48000
;
spin_unlock_irq
(
&
chip
->
reg_lock
);
return
0
;
}
...
...
@@ -1303,6 +1304,7 @@ static int snd_ymfpci_spdif_stream_get(struct snd_kcontrol *kcontrol,
spin_lock_irq
(
&
chip
->
reg_lock
);
ucontrol
->
value
.
iec958
.
status
[
0
]
=
(
chip
->
spdif_pcm_bits
>>
0
)
&
0xff
;
ucontrol
->
value
.
iec958
.
status
[
1
]
=
(
chip
->
spdif_pcm_bits
>>
8
)
&
0xff
;
ucontrol
->
value
.
iec958
.
status
[
3
]
=
IEC958_AES3_CON_FS_48000
;
spin_unlock_irq
(
&
chip
->
reg_lock
);
return
0
;
}
...
...
sound/usb/usbaudio.c
浏览文件 @
b4103333
...
...
@@ -478,22 +478,38 @@ static int retire_playback_sync_urb_hs(struct snd_usb_substream *subs,
/*
* Prepare urb for streaming before playback starts.
*
* We don't
care about (or have) any data, so we just send a transfer delimiter
.
* We don't
yet have data, so we send a frame of silence
.
*/
static
int
prepare_startup_playback_urb
(
struct
snd_usb_substream
*
subs
,
struct
snd_pcm_runtime
*
runtime
,
struct
urb
*
urb
)
{
unsigned
int
i
;
unsigned
int
i
,
offs
,
counts
;
struct
snd_urb_ctx
*
ctx
=
urb
->
context
;
int
stride
=
runtime
->
frame_bits
>>
3
;
offs
=
0
;
urb
->
dev
=
ctx
->
subs
->
dev
;
urb
->
number_of_packets
=
subs
->
packs_per_ms
;
for
(
i
=
0
;
i
<
subs
->
packs_per_ms
;
++
i
)
{
urb
->
iso_frame_desc
[
i
].
offset
=
0
;
urb
->
iso_frame_desc
[
i
].
length
=
0
;
/* calculate the size of a packet */
if
(
subs
->
fill_max
)
counts
=
subs
->
maxframesize
;
/* fixed */
else
{
subs
->
phase
=
(
subs
->
phase
&
0xffff
)
+
(
subs
->
freqm
<<
subs
->
datainterval
);
counts
=
subs
->
phase
>>
16
;
if
(
counts
>
subs
->
maxframesize
)
counts
=
subs
->
maxframesize
;
}
urb
->
iso_frame_desc
[
i
].
offset
=
offs
*
stride
;
urb
->
iso_frame_desc
[
i
].
length
=
counts
*
stride
;
offs
+=
counts
;
}
urb
->
transfer_buffer_length
=
0
;
urb
->
transfer_buffer_length
=
offs
*
stride
;
memset
(
urb
->
transfer_buffer
,
subs
->
cur_audiofmt
->
format
==
SNDRV_PCM_FORMAT_U8
?
0x80
:
0
,
offs
*
stride
);
return
0
;
}
...
...
@@ -2477,12 +2493,13 @@ static int parse_audio_format(struct snd_usb_audio *chip, struct audioformat *fp
if
(
err
<
0
)
return
err
;
#if 1
/* FIXME: temporary hack for extigy/audigy 2 nx */
/* FIXME: temporary hack for extigy/audigy 2 nx
/zs
*/
/* extigy apparently supports sample rates other than 48k
* but not in ordinary way. so we enable only 48k atm.
*/
if
(
chip
->
usb_id
==
USB_ID
(
0x041e
,
0x3000
)
||
chip
->
usb_id
==
USB_ID
(
0x041e
,
0x3020
))
{
chip
->
usb_id
==
USB_ID
(
0x041e
,
0x3020
)
||
chip
->
usb_id
==
USB_ID
(
0x041e
,
0x3061
))
{
if
(
fmt
[
3
]
==
USB_FORMAT_TYPE_I
&&
fp
->
rates
!=
SNDRV_PCM_RATE_48000
&&
fp
->
rates
!=
SNDRV_PCM_RATE_96000
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录