Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
f686c74c
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看板
提交
f686c74c
编写于
5月 22, 2011
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'topic/hda' into for-linus
上级
7ec298df
50e3bbf9
变更
15
展开全部
隐藏空白更改
内联
并排
Showing
15 changed file
with
4127 addition
and
3296 deletion
+4127
-3296
Documentation/sound/alsa/HD-Audio-Models.txt
Documentation/sound/alsa/HD-Audio-Models.txt
+1
-1
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_codec.c
+84
-13
sound/pci/hda/hda_codec.h
sound/pci/hda/hda_codec.h
+3
-1
sound/pci/hda/hda_intel.c
sound/pci/hda/hda_intel.c
+36
-2
sound/pci/hda/hda_local.h
sound/pci/hda/hda_local.h
+11
-5
sound/pci/hda/patch_analog.c
sound/pci/hda/patch_analog.c
+173
-172
sound/pci/hda/patch_ca0110.c
sound/pci/hda/patch_ca0110.c
+8
-8
sound/pci/hda/patch_cirrus.c
sound/pci/hda/patch_cirrus.c
+25
-27
sound/pci/hda/patch_cmedia.c
sound/pci/hda/patch_cmedia.c
+20
-20
sound/pci/hda/patch_conexant.c
sound/pci/hda/patch_conexant.c
+808
-277
sound/pci/hda/patch_hdmi.c
sound/pci/hda/patch_hdmi.c
+26
-13
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+1848
-1873
sound/pci/hda/patch_si3054.c
sound/pci/hda/patch_si3054.c
+6
-5
sound/pci/hda/patch_sigmatel.c
sound/pci/hda/patch_sigmatel.c
+214
-217
sound/pci/hda/patch_via.c
sound/pci/hda/patch_via.c
+864
-662
未找到文件。
Documentation/sound/alsa/HD-Audio-Models.txt
浏览文件 @
f686c74c
...
...
@@ -94,7 +94,7 @@ ALC662/663/272
3stack-dig 3-stack (2-channel) with SPDIF
3stack-6ch 3-stack (6-channel)
3stack-6ch-dig 3-stack (6-channel) with SPDIF
6stack-dig 6
-stack with SPDIF
5stack-dig 5
-stack with SPDIF
lenovo-101e Lenovo laptop
eeepc-p701 ASUS Eeepc P701
eeepc-ep20 ASUS Eeepc EP20
...
...
sound/pci/hda/hda_codec.c
浏览文件 @
f686c74c
...
...
@@ -307,6 +307,12 @@ int snd_hda_get_sub_nodes(struct hda_codec *codec, hda_nid_t nid,
}
EXPORT_SYMBOL_HDA
(
snd_hda_get_sub_nodes
);
static
int
_hda_get_connections
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
,
hda_nid_t
*
conn_list
,
int
max_conns
);
static
bool
add_conn_list
(
struct
snd_array
*
array
,
hda_nid_t
nid
);
static
int
copy_conn_list
(
hda_nid_t
nid
,
hda_nid_t
*
dst
,
int
max_dst
,
hda_nid_t
*
src
,
int
len
);
/**
* snd_hda_get_connections - get connection list
* @codec: the HDA codec
...
...
@@ -320,7 +326,44 @@ EXPORT_SYMBOL_HDA(snd_hda_get_sub_nodes);
* Returns the number of connections, or a negative error code.
*/
int
snd_hda_get_connections
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
,
hda_nid_t
*
conn_list
,
int
max_conns
)
hda_nid_t
*
conn_list
,
int
max_conns
)
{
struct
snd_array
*
array
=
&
codec
->
conn_lists
;
int
i
,
len
,
old_used
;
hda_nid_t
list
[
HDA_MAX_CONNECTIONS
];
/* look up the cached results */
for
(
i
=
0
;
i
<
array
->
used
;
)
{
hda_nid_t
*
p
=
snd_array_elem
(
array
,
i
);
len
=
p
[
1
];
if
(
nid
==
*
p
)
return
copy_conn_list
(
nid
,
conn_list
,
max_conns
,
p
+
2
,
len
);
i
+=
len
+
2
;
}
len
=
_hda_get_connections
(
codec
,
nid
,
list
,
HDA_MAX_CONNECTIONS
);
if
(
len
<
0
)
return
len
;
/* add to the cache */
old_used
=
array
->
used
;
if
(
!
add_conn_list
(
array
,
nid
)
||
!
add_conn_list
(
array
,
len
))
goto
error_add
;
for
(
i
=
0
;
i
<
len
;
i
++
)
if
(
!
add_conn_list
(
array
,
list
[
i
]))
goto
error_add
;
return
copy_conn_list
(
nid
,
conn_list
,
max_conns
,
list
,
len
);
error_add:
array
->
used
=
old_used
;
return
-
ENOMEM
;
}
EXPORT_SYMBOL_HDA
(
snd_hda_get_connections
);
static
int
_hda_get_connections
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
,
hda_nid_t
*
conn_list
,
int
max_conns
)
{
unsigned
int
parm
;
int
i
,
conn_len
,
conns
;
...
...
@@ -417,8 +460,28 @@ int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,
}
return
conns
;
}
EXPORT_SYMBOL_HDA
(
snd_hda_get_connections
);
static
bool
add_conn_list
(
struct
snd_array
*
array
,
hda_nid_t
nid
)
{
hda_nid_t
*
p
=
snd_array_new
(
array
);
if
(
!
p
)
return
false
;
*
p
=
nid
;
return
true
;
}
static
int
copy_conn_list
(
hda_nid_t
nid
,
hda_nid_t
*
dst
,
int
max_dst
,
hda_nid_t
*
src
,
int
len
)
{
if
(
len
>
max_dst
)
{
snd_printk
(
KERN_ERR
"hda_codec: "
"Too many connections %d for NID 0x%x
\n
"
,
len
,
nid
);
return
-
EINVAL
;
}
memcpy
(
dst
,
src
,
len
*
sizeof
(
hda_nid_t
));
return
len
;
}
/**
* snd_hda_queue_unsol_event - add an unsolicited event to queue
...
...
@@ -1019,6 +1082,7 @@ static void snd_hda_codec_free(struct hda_codec *codec)
list_del
(
&
codec
->
list
);
snd_array_free
(
&
codec
->
mixers
);
snd_array_free
(
&
codec
->
nids
);
snd_array_free
(
&
codec
->
conn_lists
);
codec
->
bus
->
caddr_tbl
[
codec
->
addr
]
=
NULL
;
if
(
codec
->
patch_ops
.
free
)
codec
->
patch_ops
.
free
(
codec
);
...
...
@@ -1079,6 +1143,7 @@ int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus,
snd_array_init
(
&
codec
->
init_pins
,
sizeof
(
struct
hda_pincfg
),
16
);
snd_array_init
(
&
codec
->
driver_pins
,
sizeof
(
struct
hda_pincfg
),
16
);
snd_array_init
(
&
codec
->
cvt_setups
,
sizeof
(
struct
hda_cvt_setup
),
8
);
snd_array_init
(
&
codec
->
conn_lists
,
sizeof
(
hda_nid_t
),
64
);
if
(
codec
->
bus
->
modelname
)
{
codec
->
modelname
=
kstrdup
(
codec
->
bus
->
modelname
,
GFP_KERNEL
);
if
(
!
codec
->
modelname
)
{
...
...
@@ -2556,7 +2621,7 @@ static unsigned int convert_to_spdif_status(unsigned short val)
static
void
set_dig_out
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
,
int
verb
,
int
val
)
{
hda_nid_t
*
d
;
const
hda_nid_t
*
d
;
snd_hda_codec_write_cache
(
codec
,
nid
,
0
,
verb
,
val
);
d
=
codec
->
slave_dig_outs
;
...
...
@@ -3807,7 +3872,8 @@ EXPORT_SYMBOL_HDA(snd_hda_check_board_codec_sid_config);
*
* Returns 0 if successful, or a negative error code.
*/
int
snd_hda_add_new_ctls
(
struct
hda_codec
*
codec
,
struct
snd_kcontrol_new
*
knew
)
int
snd_hda_add_new_ctls
(
struct
hda_codec
*
codec
,
const
struct
snd_kcontrol_new
*
knew
)
{
int
err
;
...
...
@@ -3950,7 +4016,7 @@ int snd_hda_check_amp_list_power(struct hda_codec *codec,
struct
hda_loopback_check
*
check
,
hda_nid_t
nid
)
{
struct
hda_amp_list
*
p
;
const
struct
hda_amp_list
*
p
;
int
ch
,
v
;
if
(
!
check
->
amplist
)
...
...
@@ -4118,7 +4184,7 @@ static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
-
1
);
snd_hda_codec_setup_stream
(
codec
,
nid
,
stream_tag
,
0
,
format
);
if
(
codec
->
slave_dig_outs
)
{
hda_nid_t
*
d
;
const
hda_nid_t
*
d
;
for
(
d
=
codec
->
slave_dig_outs
;
*
d
;
d
++
)
snd_hda_codec_setup_stream
(
codec
,
*
d
,
stream_tag
,
0
,
format
);
...
...
@@ -4133,7 +4199,7 @@ static void cleanup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid)
{
snd_hda_codec_cleanup_stream
(
codec
,
nid
);
if
(
codec
->
slave_dig_outs
)
{
hda_nid_t
*
d
;
const
hda_nid_t
*
d
;
for
(
d
=
codec
->
slave_dig_outs
;
*
d
;
d
++
)
snd_hda_codec_cleanup_stream
(
codec
,
*
d
);
}
...
...
@@ -4280,7 +4346,7 @@ int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
unsigned
int
format
,
struct
snd_pcm_substream
*
substream
)
{
hda_nid_t
*
nids
=
mout
->
dac_nids
;
const
hda_nid_t
*
nids
=
mout
->
dac_nids
;
int
chs
=
substream
->
runtime
->
channels
;
int
i
;
...
...
@@ -4335,7 +4401,7 @@ EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_prepare);
int
snd_hda_multi_out_analog_cleanup
(
struct
hda_codec
*
codec
,
struct
hda_multi_out
*
mout
)
{
hda_nid_t
*
nids
=
mout
->
dac_nids
;
const
hda_nid_t
*
nids
=
mout
->
dac_nids
;
int
i
;
for
(
i
=
0
;
i
<
mout
->
num_dacs
;
i
++
)
...
...
@@ -4360,7 +4426,7 @@ EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_cleanup);
* Helper for automatic pin configuration
*/
static
int
is_in_nid_list
(
hda_nid_t
nid
,
hda_nid_t
*
list
)
static
int
is_in_nid_list
(
hda_nid_t
nid
,
const
hda_nid_t
*
list
)
{
for
(;
*
list
;
list
++
)
if
(
*
list
==
nid
)
...
...
@@ -4441,7 +4507,7 @@ static void sort_autocfg_input_pins(struct auto_pin_cfg *cfg)
*/
int
snd_hda_parse_pin_def_config
(
struct
hda_codec
*
codec
,
struct
auto_pin_cfg
*
cfg
,
hda_nid_t
*
ignore_nids
)
const
hda_nid_t
*
ignore_nids
)
{
hda_nid_t
nid
,
end_nid
;
short
seq
,
assoc_line_out
,
assoc_speaker
;
...
...
@@ -4632,10 +4698,13 @@ int snd_hda_parse_pin_def_config(struct hda_codec *codec,
/*
* debug prints of the parsed results
*/
snd_printd
(
"autoconfig: line_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)
\n
"
,
snd_printd
(
"autoconfig: line_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)
type:%s
\n
"
,
cfg
->
line_outs
,
cfg
->
line_out_pins
[
0
],
cfg
->
line_out_pins
[
1
],
cfg
->
line_out_pins
[
2
],
cfg
->
line_out_pins
[
3
],
cfg
->
line_out_pins
[
4
]);
cfg
->
line_out_pins
[
4
],
cfg
->
line_out_type
==
AUTO_PIN_HP_OUT
?
"hp"
:
(
cfg
->
line_out_type
==
AUTO_PIN_SPEAKER_OUT
?
"speaker"
:
"line"
));
snd_printd
(
" speaker_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)
\n
"
,
cfg
->
speaker_outs
,
cfg
->
speaker_pins
[
0
],
cfg
->
speaker_pins
[
1
],
cfg
->
speaker_pins
[
2
],
...
...
@@ -4986,6 +5055,8 @@ static const char *get_jack_default_name(struct hda_codec *codec, hda_nid_t nid,
return
"Line-out"
;
case
SND_JACK_HEADSET
:
return
"Headset"
;
case
SND_JACK_VIDEOOUT
:
return
"HDMI/DP"
;
default:
return
"Misc"
;
}
...
...
sound/pci/hda/hda_codec.h
浏览文件 @
f686c74c
...
...
@@ -825,12 +825,14 @@ struct hda_codec {
struct
hda_cache_rec
amp_cache
;
/* cache for amp access */
struct
hda_cache_rec
cmd_cache
;
/* cache for other commands */
struct
snd_array
conn_lists
;
/* connection-list array */
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? */
hda_nid_t
*
slave_dig_outs
;
/* optional digital out slave widgets */
const
hda_nid_t
*
slave_dig_outs
;
/* optional digital out slave widgets */
struct
snd_array
init_pins
;
/* initial (BIOS) pin configurations */
struct
snd_array
driver_pins
;
/* pin configs set by codec parser */
struct
snd_array
cvt_setups
;
/* audio convert setups */
...
...
sound/pci/hda/hda_intel.c
浏览文件 @
f686c74c
...
...
@@ -126,6 +126,7 @@ MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},"
"{Intel, ICH10},"
"{Intel, PCH},"
"{Intel, CPT},"
"{Intel, PPT},"
"{Intel, PBG},"
"{Intel, SCH},"
"{ATI, SB450},"
...
...
@@ -1091,7 +1092,13 @@ static void azx_init_pci(struct azx *chip)
?
"Failed"
:
"OK"
);
}
break
;
default:
/* AMD Hudson needs the similar snoop, as it seems... */
if
(
chip
->
pci
->
vendor
==
PCI_VENDOR_ID_AMD
)
update_pci_byte
(
chip
->
pci
,
ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR
,
0x07
,
ATI_SB450_HDAUDIO_ENABLE_SNOOP
);
break
;
}
}
...
...
@@ -1446,6 +1453,17 @@ static int __devinit azx_codec_create(struct azx *chip, const char *model)
}
}
/* AMD chipsets often cause the communication stalls upon certain
* sequence like the pin-detection. It seems that forcing the synced
* access works around the stall. Grrr...
*/
if
(
chip
->
pci
->
vendor
==
PCI_VENDOR_ID_AMD
||
chip
->
pci
->
vendor
==
PCI_VENDOR_ID_ATI
)
{
snd_printk
(
KERN_INFO
SFX
"Enable sync_write for AMD chipset
\n
"
);
chip
->
bus
->
sync_write
=
1
;
chip
->
bus
->
allow_bus_reset
=
1
;
}
/* Then create codec instances */
for
(
c
=
0
;
c
<
max_slots
;
c
++
)
{
if
((
chip
->
codec_mask
&
(
1
<<
c
))
&
chip
->
codec_probe_mask
)
{
...
...
@@ -2349,9 +2367,16 @@ static int __devinit check_position_fix(struct azx *chip, int fix)
/* Check VIA/ATI HD Audio Controller exist */
switch
(
chip
->
driver_type
)
{
case
AZX_DRIVER_VIA
:
case
AZX_DRIVER_ATI
:
/* Use link position directly, avoid any transfer problem. */
return
POS_FIX_VIACOMBO
;
case
AZX_DRIVER_ATI
:
/* ATI chipsets don't work well with position-buffer */
return
POS_FIX_LPIB
;
case
AZX_DRIVER_GENERIC
:
/* AMD chipsets also don't work with position-buffer */
if
(
chip
->
pci
->
vendor
==
PCI_VENDOR_ID_AMD
)
return
POS_FIX_LPIB
;
break
;
}
return
POS_FIX_AUTO
;
...
...
@@ -2549,6 +2574,13 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci,
gcap
&=
~
ICH6_GCAP_64OK
;
pci_dev_put
(
p_smbus
);
}
}
else
{
/* FIXME: not sure whether this is really needed, but
* Hudson isn't stable enough for allowing everything...
* let's check later again.
*/
if
(
chip
->
pci
->
vendor
==
PCI_VENDOR_ID_AMD
)
gcap
&=
~
ICH6_GCAP_64OK
;
}
/* disable 64bit DMA address for Teradici */
...
...
@@ -2759,6 +2791,8 @@ static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
{
PCI_DEVICE
(
0x8086
,
0x1c20
),
.
driver_data
=
AZX_DRIVER_PCH
},
/* PBG */
{
PCI_DEVICE
(
0x8086
,
0x1d20
),
.
driver_data
=
AZX_DRIVER_PCH
},
/* Panther Point */
{
PCI_DEVICE
(
0x8086
,
0x1e20
),
.
driver_data
=
AZX_DRIVER_PCH
},
/* SCH */
{
PCI_DEVICE
(
0x8086
,
0x811b
),
.
driver_data
=
AZX_DRIVER_SCH
},
/* Generic Intel */
...
...
sound/pci/hda/hda_local.h
浏览文件 @
f686c74c
...
...
@@ -267,11 +267,11 @@ enum { HDA_DIG_NONE, HDA_DIG_EXCLUSIVE, HDA_DIG_ANALOG_DUP }; /* dig_out_used */
struct
hda_multi_out
{
int
num_dacs
;
/* # of DACs, must be more than 1 */
hda_nid_t
*
dac_nids
;
/* DAC list */
const
hda_nid_t
*
dac_nids
;
/* DAC list */
hda_nid_t
hp_nid
;
/* optional DAC for HP, 0 when not exists */
hda_nid_t
extra_out_nid
[
3
];
/* optional DACs, 0 when not exists */
hda_nid_t
dig_out_nid
;
/* digital out audio widget */
hda_nid_t
*
slave_dig_outs
;
const
hda_nid_t
*
slave_dig_outs
;
int
max_channels
;
/* currently supported analog channels */
int
dig_out_used
;
/* current usage of digital out (HDA_DIG_XXX) */
int
no_share_stream
;
/* don't share a stream with multiple pins */
...
...
@@ -347,7 +347,7 @@ int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
int
num_configs
,
const
char
*
const
*
models
,
const
struct
snd_pci_quirk
*
tbl
);
int
snd_hda_add_new_ctls
(
struct
hda_codec
*
codec
,
struct
snd_kcontrol_new
*
knew
);
const
struct
snd_kcontrol_new
*
knew
);
/*
* unsolicited event handler
...
...
@@ -443,7 +443,7 @@ struct auto_pin_cfg {
int
snd_hda_parse_pin_def_config
(
struct
hda_codec
*
codec
,
struct
auto_pin_cfg
*
cfg
,
hda_nid_t
*
ignore_nids
);
const
hda_nid_t
*
ignore_nids
);
/* amp values */
#define AMP_IN_MUTE(idx) (0x7080 | ((idx)<<8))
...
...
@@ -493,6 +493,12 @@ u32 snd_hda_query_pin_caps(struct hda_codec *codec, hda_nid_t nid);
u32
snd_hda_pin_sense
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
);
int
snd_hda_jack_detect
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
);
static
inline
bool
is_jack_detectable
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
)
{
return
(
snd_hda_query_pin_caps
(
codec
,
nid
)
&
AC_PINCAP_PRES_DETECT
)
&&
(
get_wcaps
(
codec
,
nid
)
&
AC_WCAP_UNSOL_CAP
);
}
/* flags for hda_nid_item */
#define HDA_NID_ITEM_AMP (1<<0)
...
...
@@ -567,7 +573,7 @@ struct hda_amp_list {
};
struct
hda_loopback_check
{
struct
hda_amp_list
*
amplist
;
const
struct
hda_amp_list
*
amplist
;
int
power_on
;
};
...
...
sound/pci/hda/patch_analog.c
浏览文件 @
f686c74c
此差异已折叠。
点击以展开。
sound/pci/hda/patch_ca0110.c
浏览文件 @
f686c74c
...
...
@@ -134,7 +134,7 @@ static int ca0110_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
/*
*/
static
c
har
*
dirstr
[
2
]
=
{
"Playback"
,
"Capture"
};
static
c
onst
char
*
const
dirstr
[
2
]
=
{
"Playback"
,
"Capture"
};
static
int
_add_switch
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
,
const
char
*
pfx
,
int
chan
,
int
dir
)
...
...
@@ -171,7 +171,7 @@ static int ca0110_build_controls(struct hda_codec *codec)
{
struct
ca0110_spec
*
spec
=
codec
->
spec
;
struct
auto_pin_cfg
*
cfg
=
&
spec
->
autocfg
;
static
c
har
*
prefix
[
AUTO_CFG_MAX_OUTS
]
=
{
static
c
onst
char
*
const
prefix
[
AUTO_CFG_MAX_OUTS
]
=
{
"Front"
,
"Surround"
,
NULL
,
"Side"
,
"Multi"
};
hda_nid_t
mutenid
;
...
...
@@ -259,7 +259,7 @@ static int ca0110_build_controls(struct hda_codec *codec)
/*
*/
static
struct
hda_pcm_stream
ca0110_pcm_analog_playback
=
{
static
const
struct
hda_pcm_stream
ca0110_pcm_analog_playback
=
{
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_max
=
8
,
...
...
@@ -270,7 +270,7 @@ static struct hda_pcm_stream ca0110_pcm_analog_playback = {
},
};
static
struct
hda_pcm_stream
ca0110_pcm_analog_capture
=
{
static
const
struct
hda_pcm_stream
ca0110_pcm_analog_capture
=
{
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_max
=
2
,
...
...
@@ -280,7 +280,7 @@ static struct hda_pcm_stream ca0110_pcm_analog_capture = {
},
};
static
struct
hda_pcm_stream
ca0110_pcm_digital_playback
=
{
static
const
struct
hda_pcm_stream
ca0110_pcm_digital_playback
=
{
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_max
=
2
,
...
...
@@ -291,7 +291,7 @@ static struct hda_pcm_stream ca0110_pcm_digital_playback = {
},
};
static
struct
hda_pcm_stream
ca0110_pcm_digital_capture
=
{
static
const
struct
hda_pcm_stream
ca0110_pcm_digital_capture
=
{
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_max
=
2
,
...
...
@@ -389,7 +389,7 @@ static void ca0110_free(struct hda_codec *codec)
kfree
(
codec
->
spec
);
}
static
struct
hda_codec_ops
ca0110_patch_ops
=
{
static
const
struct
hda_codec_ops
ca0110_patch_ops
=
{
.
build_controls
=
ca0110_build_controls
,
.
build_pcms
=
ca0110_build_pcms
,
.
init
=
ca0110_init
,
...
...
@@ -539,7 +539,7 @@ static int patch_ca0110(struct hda_codec *codec)
/*
* patch entries
*/
static
struct
hda_codec_preset
snd_hda_preset_ca0110
[]
=
{
static
const
struct
hda_codec_preset
snd_hda_preset_ca0110
[]
=
{
{
.
id
=
0x1102000a
,
.
name
=
"CA0110-IBG"
,
.
patch
=
patch_ca0110
},
{
.
id
=
0x1102000b
,
.
name
=
"CA0110-IBG"
,
.
patch
=
patch_ca0110
},
{
.
id
=
0x1102000d
,
.
name
=
"SB0880 X-Fi"
,
.
patch
=
patch_ca0110
},
...
...
sound/pci/hda/patch_cirrus.c
浏览文件 @
f686c74c
...
...
@@ -51,7 +51,7 @@ struct cs_spec {
unsigned
int
cur_adc_format
;
hda_nid_t
dig_in
;
struct
hda_bind_ctls
*
capture_bind
[
2
];
const
struct
hda_bind_ctls
*
capture_bind
[
2
];
unsigned
int
gpio_mask
;
unsigned
int
gpio_dir
;
...
...
@@ -231,7 +231,7 @@ static int cs_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
/*
*/
static
struct
hda_pcm_stream
cs_pcm_analog_playback
=
{
static
const
struct
hda_pcm_stream
cs_pcm_analog_playback
=
{
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_max
=
2
,
...
...
@@ -242,7 +242,7 @@ static struct hda_pcm_stream cs_pcm_analog_playback = {
},
};
static
struct
hda_pcm_stream
cs_pcm_analog_capture
=
{
static
const
struct
hda_pcm_stream
cs_pcm_analog_capture
=
{
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_max
=
2
,
...
...
@@ -252,7 +252,7 @@ static struct hda_pcm_stream cs_pcm_analog_capture = {
},
};
static
struct
hda_pcm_stream
cs_pcm_digital_playback
=
{
static
const
struct
hda_pcm_stream
cs_pcm_digital_playback
=
{
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_max
=
2
,
...
...
@@ -264,7 +264,7 @@ static struct hda_pcm_stream cs_pcm_digital_playback = {
},
};
static
struct
hda_pcm_stream
cs_pcm_digital_capture
=
{
static
const
struct
hda_pcm_stream
cs_pcm_digital_capture
=
{
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_max
=
2
,
...
...
@@ -331,8 +331,8 @@ static int is_ext_mic(struct hda_codec *codec, unsigned int idx)
struct
cs_spec
*
spec
=
codec
->
spec
;
struct
auto_pin_cfg
*
cfg
=
&
spec
->
autocfg
;
hda_nid_t
pin
=
cfg
->
inputs
[
idx
].
pin
;
unsigned
int
val
=
snd_hda_query_pin_caps
(
codec
,
pin
)
;
if
(
!
(
val
&
AC_PINCAP_PRES_DETECT
))
unsigned
int
val
;
if
(
!
is_jack_detectable
(
codec
,
pin
))
return
0
;
val
=
snd_hda_codec_get_pincfg
(
codec
,
pin
);
return
(
snd_hda_get_input_pin_attr
(
val
)
!=
INPUT_PIN_ATTR_INT
);
...
...
@@ -349,8 +349,7 @@ static hda_nid_t get_adc(struct hda_codec *codec, hda_nid_t pin,
hda_nid_t
pins
[
2
];
unsigned
int
type
;
int
j
,
nums
;
type
=
(
get_wcaps
(
codec
,
nid
)
&
AC_WCAP_TYPE
)
>>
AC_WCAP_TYPE_SHIFT
;
type
=
get_wcaps_type
(
get_wcaps
(
codec
,
nid
));
if
(
type
!=
AC_WID_AUD_IN
)
continue
;
nums
=
snd_hda_get_connections
(
codec
,
nid
,
pins
,
...
...
@@ -559,10 +558,10 @@ static int add_output(struct hda_codec *codec, hda_nid_t dac, int idx,
const
char
*
name
;
int
err
,
index
;
struct
snd_kcontrol
*
kctl
;
static
c
har
*
speakers
[]
=
{
static
c
onst
char
*
const
speakers
[]
=
{
"Front Speaker"
,
"Surround Speaker"
,
"Bass Speaker"
};
static
c
har
*
line_outs
[]
=
{
static
c
onst
char
*
const
line_outs
[]
=
{
"Front Line-Out"
,
"Surround Line-Out"
,
"Bass Line-Out"
};
...
...
@@ -642,7 +641,7 @@ static int build_output(struct hda_codec *codec)
/*
*/
static
struct
snd_kcontrol_new
cs_capture_ctls
[]
=
{
static
const
struct
snd_kcontrol_new
cs_capture_ctls
[]
=
{
HDA_BIND_SW
(
"Capture Switch"
,
0
),
HDA_BIND_VOL
(
"Capture Volume"
,
0
),
};
...
...
@@ -710,7 +709,7 @@ static int cs_capture_source_put(struct snd_kcontrol *kcontrol,
return
change_cur_input
(
codec
,
idx
,
0
);
}
static
struct
snd_kcontrol_new
cs_capture_source
=
{
static
const
struct
snd_kcontrol_new
cs_capture_source
=
{
.
iface
=
SNDRV_CTL_ELEM_IFACE_MIXER
,
.
name
=
"Capture Source"
,
.
access
=
SNDRV_CTL_ELEM_ACCESS_READWRITE
,
...
...
@@ -719,7 +718,7 @@ static struct snd_kcontrol_new cs_capture_source = {
.
put
=
cs_capture_source_put
,
};
static
struct
hda_bind_ctls
*
make_bind_capture
(
struct
hda_codec
*
codec
,
static
const
struct
hda_bind_ctls
*
make_bind_capture
(
struct
hda_codec
*
codec
,
struct
hda_ctl_ops
*
ops
)
{
struct
cs_spec
*
spec
=
codec
->
spec
;
...
...
@@ -847,15 +846,14 @@ static void cs_automute(struct hda_codec *codec)
{
struct
cs_spec
*
spec
=
codec
->
spec
;
struct
auto_pin_cfg
*
cfg
=
&
spec
->
autocfg
;
unsigned
int
caps
,
hp_present
;
unsigned
int
hp_present
;
hda_nid_t
nid
;
int
i
;
hp_present
=
0
;
for
(
i
=
0
;
i
<
cfg
->
hp_outs
;
i
++
)
{
nid
=
cfg
->
hp_pins
[
i
];
caps
=
snd_hda_query_pin_caps
(
codec
,
nid
);
if
(
!
(
caps
&
AC_PINCAP_PRES_DETECT
))
if
(
!
is_jack_detectable
(
codec
,
nid
))
continue
;
hp_present
=
snd_hda_jack_detect
(
codec
,
nid
);
if
(
hp_present
)
...
...
@@ -924,7 +922,7 @@ static void init_output(struct hda_codec *codec)
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_HP
);
if
(
!
cfg
->
speaker_outs
)
continue
;
if
(
get_wcaps
(
codec
,
nid
)
&
AC_WCAP_UNSOL_CAP
)
{
if
(
is_jack_detectable
(
codec
,
nid
)
)
{
snd_hda_codec_write
(
codec
,
nid
,
0
,
AC_VERB_SET_UNSOLICITED_ENABLE
,
AC_USRSP_EN
|
HP_EVENT
);
...
...
@@ -983,7 +981,7 @@ static void init_input(struct hda_codec *codec)
cs_vendor_coef_set
(
codec
,
IDX_ADC_CFG
,
coef
);
}
static
struct
hda_verb
cs_coef_init_verbs
[]
=
{
static
const
struct
hda_verb
cs_coef_init_verbs
[]
=
{
{
0x11
,
AC_VERB_SET_PROC_STATE
,
1
},
{
0x11
,
AC_VERB_SET_COEF_INDEX
,
IDX_DAC_CFG
},
{
0x11
,
AC_VERB_SET_PROC_COEF
,
...
...
@@ -1017,7 +1015,7 @@ static struct hda_verb cs_coef_init_verbs[] = {
* blocks, which will alleviate the issue.
*/
static
struct
hda_verb
cs_errata_init_verbs
[]
=
{
static
const
struct
hda_verb
cs_errata_init_verbs
[]
=
{
{
0x01
,
AC_VERB_SET_POWER_STATE
,
0x00
},
/* AFG: D0 */
{
0x11
,
AC_VERB_SET_PROC_STATE
,
0x01
},
/* VPW: processing on */
...
...
@@ -1126,7 +1124,7 @@ static void cs_unsol_event(struct hda_codec *codec, unsigned int res)
}
}
static
struct
hda_codec_ops
cs_patch_ops
=
{
static
const
struct
hda_codec_ops
cs_patch_ops
=
{
.
build_controls
=
cs_build_controls
,
.
build_pcms
=
cs_build_pcms
,
.
init
=
cs_init
,
...
...
@@ -1166,7 +1164,7 @@ static const char * const cs420x_models[CS420X_MODELS] = {
};
static
struct
snd_pci_quirk
cs420x_cfg_tbl
[]
=
{
static
const
struct
snd_pci_quirk
cs420x_cfg_tbl
[]
=
{
SND_PCI_QUIRK
(
0x10de
,
0x0ac0
,
"MacBookPro 5,3"
,
CS420X_MBP53
),
SND_PCI_QUIRK
(
0x10de
,
0x0d94
,
"MacBookAir 3,1(2)"
,
CS420X_MBP55
),
SND_PCI_QUIRK
(
0x10de
,
0xcb79
,
"MacBookPro 5,5"
,
CS420X_MBP55
),
...
...
@@ -1180,7 +1178,7 @@ struct cs_pincfg {
u32
val
;
};
static
struct
cs_pincfg
mbp53_pincfgs
[]
=
{
static
const
struct
cs_pincfg
mbp53_pincfgs
[]
=
{
{
0x09
,
0x012b4050
},
{
0x0a
,
0x90100141
},
{
0x0b
,
0x90100140
},
...
...
@@ -1194,7 +1192,7 @@ static struct cs_pincfg mbp53_pincfgs[] = {
{}
/* terminator */
};
static
struct
cs_pincfg
mbp55_pincfgs
[]
=
{
static
const
struct
cs_pincfg
mbp55_pincfgs
[]
=
{
{
0x09
,
0x012b4030
},
{
0x0a
,
0x90100121
},
{
0x0b
,
0x90100120
},
...
...
@@ -1208,7 +1206,7 @@ static struct cs_pincfg mbp55_pincfgs[] = {
{}
/* terminator */
};
static
struct
cs_pincfg
imac27_pincfgs
[]
=
{
static
const
struct
cs_pincfg
imac27_pincfgs
[]
=
{
{
0x09
,
0x012b4050
},
{
0x0a
,
0x90100140
},
{
0x0b
,
0x90100142
},
...
...
@@ -1222,7 +1220,7 @@ static struct cs_pincfg imac27_pincfgs[] = {
{}
/* terminator */
};
static
struct
cs_pincfg
*
cs_pincfgs
[
CS420X_MODELS
]
=
{
static
const
struct
cs_pincfg
*
cs_pincfgs
[
CS420X_MODELS
]
=
{
[
CS420X_MBP53
]
=
mbp53_pincfgs
,
[
CS420X_MBP55
]
=
mbp55_pincfgs
,
[
CS420X_IMAC27
]
=
imac27_pincfgs
,
...
...
@@ -1283,7 +1281,7 @@ static int patch_cs420x(struct hda_codec *codec)
/*
* patch entries
*/
static
struct
hda_codec_preset
snd_hda_preset_cirrus
[]
=
{
static
const
struct
hda_codec_preset
snd_hda_preset_cirrus
[]
=
{
{
.
id
=
0x10134206
,
.
name
=
"CS4206"
,
.
patch
=
patch_cs420x
},
{
.
id
=
0x10134207
,
.
name
=
"CS4207"
,
.
patch
=
patch_cs420x
},
{}
/* terminator */
...
...
sound/pci/hda/patch_cmedia.c
浏览文件 @
f686c74c
...
...
@@ -53,7 +53,7 @@ struct cmi_spec {
int
num_dacs
;
/* capture */
hda_nid_t
*
adc_nids
;
const
hda_nid_t
*
adc_nids
;
hda_nid_t
dig_in_nid
;
/* capture source */
...
...
@@ -110,7 +110,7 @@ static int cmi_mux_enum_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_v
*/
/* 3-stack / 2 channel */
static
struct
hda_verb
cmi9880_ch2_init
[]
=
{
static
const
struct
hda_verb
cmi9880_ch2_init
[]
=
{
/* set line-in PIN for input */
{
0x0c
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_IN
},
/* set mic PIN for input, also enable vref */
...
...
@@ -121,7 +121,7 @@ static struct hda_verb cmi9880_ch2_init[] = {
};
/* 3-stack / 6 channel */
static
struct
hda_verb
cmi9880_ch6_init
[]
=
{
static
const
struct
hda_verb
cmi9880_ch6_init
[]
=
{
/* set line-in PIN for output */
{
0x0c
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_OUT
},
/* set mic PIN for output */
...
...
@@ -132,7 +132,7 @@ static struct hda_verb cmi9880_ch6_init[] = {
};
/* 3-stack+front / 8 channel */
static
struct
hda_verb
cmi9880_ch8_init
[]
=
{
static
const
struct
hda_verb
cmi9880_ch8_init
[]
=
{
/* set line-in PIN for output */
{
0x0c
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_OUT
},
/* set mic PIN for output */
...
...
@@ -142,7 +142,7 @@ static struct hda_verb cmi9880_ch8_init[] = {
{}
};
static
struct
hda_channel_mode
cmi9880_channel_modes
[
3
]
=
{
static
const
struct
hda_channel_mode
cmi9880_channel_modes
[
3
]
=
{
{
2
,
cmi9880_ch2_init
},
{
6
,
cmi9880_ch6_init
},
{
8
,
cmi9880_ch8_init
},
...
...
@@ -174,7 +174,7 @@ static int cmi_ch_mode_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_va
/*
*/
static
struct
snd_kcontrol_new
cmi9880_basic_mixer
[]
=
{
static
const
struct
snd_kcontrol_new
cmi9880_basic_mixer
[]
=
{
/* CMI9880 has no playback volumes! */
HDA_CODEC_MUTE
(
"PCM Playback Switch"
,
0x03
,
0x0
,
HDA_OUTPUT
),
/* front */
HDA_CODEC_MUTE
(
"Surround Playback Switch"
,
0x04
,
0x0
,
HDA_OUTPUT
),
...
...
@@ -205,7 +205,7 @@ static struct snd_kcontrol_new cmi9880_basic_mixer[] = {
/*
* shared I/O pins
*/
static
struct
snd_kcontrol_new
cmi9880_ch_mode_mixer
[]
=
{
static
const
struct
snd_kcontrol_new
cmi9880_ch_mode_mixer
[]
=
{
{
.
iface
=
SNDRV_CTL_ELEM_IFACE_MIXER
,
.
name
=
"Channel Mode"
,
...
...
@@ -219,7 +219,7 @@ static struct snd_kcontrol_new cmi9880_ch_mode_mixer[] = {
/* AUD-in selections:
* 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x1f 0x20
*/
static
struct
hda_input_mux
cmi9880_basic_mux
=
{
static
const
struct
hda_input_mux
cmi9880_basic_mux
=
{
.
num_items
=
4
,
.
items
=
{
{
"Front Mic"
,
0x5
},
...
...
@@ -229,7 +229,7 @@ static struct hda_input_mux cmi9880_basic_mux = {
}
};
static
struct
hda_input_mux
cmi9880_no_line_mux
=
{
static
const
struct
hda_input_mux
cmi9880_no_line_mux
=
{
.
num_items
=
3
,
.
items
=
{
{
"Front Mic"
,
0x5
},
...
...
@@ -239,11 +239,11 @@ static struct hda_input_mux cmi9880_no_line_mux = {
};
/* front, rear, clfe, rear_surr */
static
hda_nid_t
cmi9880_dac_nids
[
4
]
=
{
static
const
hda_nid_t
cmi9880_dac_nids
[
4
]
=
{
0x03
,
0x04
,
0x05
,
0x06
};
/* ADC0, ADC1 */
static
hda_nid_t
cmi9880_adc_nids
[
2
]
=
{
static
const
hda_nid_t
cmi9880_adc_nids
[
2
]
=
{
0x08
,
0x09
};
...
...
@@ -252,7 +252,7 @@ static hda_nid_t cmi9880_adc_nids[2] = {
/*
*/
static
struct
hda_verb
cmi9880_basic_init
[]
=
{
static
const
struct
hda_verb
cmi9880_basic_init
[]
=
{
/* port-D for line out (rear panel) */
{
0x0b
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_HP
},
/* port-E for HP out (front panel) */
...
...
@@ -281,7 +281,7 @@ static struct hda_verb cmi9880_basic_init[] = {
{}
/* terminator */
};
static
struct
hda_verb
cmi9880_allout_init
[]
=
{
static
const
struct
hda_verb
cmi9880_allout_init
[]
=
{
/* port-D for line out (rear panel) */
{
0x0b
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_HP
},
/* port-E for HP out (front panel) */
...
...
@@ -528,7 +528,7 @@ static int cmi9880_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
/*
*/
static
struct
hda_pcm_stream
cmi9880_pcm_analog_playback
=
{
static
const
struct
hda_pcm_stream
cmi9880_pcm_analog_playback
=
{
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_max
=
8
,
...
...
@@ -540,7 +540,7 @@ static struct hda_pcm_stream cmi9880_pcm_analog_playback = {
},
};
static
struct
hda_pcm_stream
cmi9880_pcm_analog_capture
=
{
static
const
struct
hda_pcm_stream
cmi9880_pcm_analog_capture
=
{
.
substreams
=
2
,
.
channels_min
=
2
,
.
channels_max
=
2
,
...
...
@@ -551,7 +551,7 @@ static struct hda_pcm_stream cmi9880_pcm_analog_capture = {
},
};
static
struct
hda_pcm_stream
cmi9880_pcm_digital_playback
=
{
static
const
struct
hda_pcm_stream
cmi9880_pcm_digital_playback
=
{
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_max
=
2
,
...
...
@@ -563,7 +563,7 @@ static struct hda_pcm_stream cmi9880_pcm_digital_playback = {
},
};
static
struct
hda_pcm_stream
cmi9880_pcm_digital_capture
=
{
static
const
struct
hda_pcm_stream
cmi9880_pcm_digital_capture
=
{
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_max
=
2
,
...
...
@@ -617,14 +617,14 @@ static const char * const cmi9880_models[CMI_MODELS] = {
[
CMI_AUTO
]
=
"auto"
,
};
static
struct
snd_pci_quirk
cmi9880_cfg_tbl
[]
=
{
static
const
struct
snd_pci_quirk
cmi9880_cfg_tbl
[]
=
{
SND_PCI_QUIRK
(
0x1043
,
0x813d
,
"ASUS P5AD2"
,
CMI_FULL_DIG
),
SND_PCI_QUIRK
(
0x1854
,
0x002b
,
"LG LS75"
,
CMI_MINIMAL
),
SND_PCI_QUIRK
(
0x1854
,
0x0032
,
"LG"
,
CMI_FULL_DIG
),
{}
/* terminator */
};
static
struct
hda_codec_ops
cmi9880_patch_ops
=
{
static
const
struct
hda_codec_ops
cmi9880_patch_ops
=
{
.
build_controls
=
cmi9880_build_controls
,
.
build_pcms
=
cmi9880_build_pcms
,
.
init
=
cmi9880_init
,
...
...
@@ -745,7 +745,7 @@ static int patch_cmi9880(struct hda_codec *codec)
/*
* patch entries
*/
static
struct
hda_codec_preset
snd_hda_preset_cmedia
[]
=
{
static
const
struct
hda_codec_preset
snd_hda_preset_cmedia
[]
=
{
{
.
id
=
0x13f69880
,
.
name
=
"CMI9880"
,
.
patch
=
patch_cmi9880
},
{
.
id
=
0x434d4980
,
.
name
=
"CMI9880"
,
.
patch
=
patch_cmi9880
},
{}
/* terminator */
...
...
sound/pci/hda/patch_conexant.c
浏览文件 @
f686c74c
此差异已折叠。
点击以展开。
sound/pci/hda/patch_hdmi.c
浏览文件 @
f686c74c
...
...
@@ -33,6 +33,7 @@
#include <linux/slab.h>
#include <linux/moduleparam.h>
#include <sound/core.h>
#include <sound/jack.h>
#include "hda_codec.h"
#include "hda_local.h"
...
...
@@ -76,7 +77,7 @@ struct hdmi_spec {
* ati/nvhdmi specific
*/
struct
hda_multi_out
multiout
;
struct
hda_pcm_stream
*
pcm_playback
;
const
struct
hda_pcm_stream
*
pcm_playback
;
/* misc flags */
/* PD bit indicates only the update, not the current state */
...
...
@@ -720,6 +721,8 @@ static void hdmi_intrinsic_event(struct hda_codec *codec, unsigned int res)
&
spec
->
sink_eld
[
index
]);
/* TODO: do real things about ELD */
}
snd_hda_input_jack_report
(
codec
,
tag
);
}
static
void
hdmi_non_intrinsic_event
(
struct
hda_codec
*
codec
,
unsigned
int
res
)
...
...
@@ -912,6 +915,7 @@ static void hdmi_present_sense(struct hda_codec *codec, hda_nid_t pin_nid,
static
int
hdmi_add_pin
(
struct
hda_codec
*
codec
,
hda_nid_t
pin_nid
)
{
struct
hdmi_spec
*
spec
=
codec
->
spec
;
int
err
;
if
(
spec
->
num_pins
>=
MAX_HDMI_PINS
)
{
snd_printk
(
KERN_WARNING
...
...
@@ -919,6 +923,12 @@ static int hdmi_add_pin(struct hda_codec *codec, hda_nid_t pin_nid)
return
-
E2BIG
;
}
err
=
snd_hda_input_jack_add
(
codec
,
pin_nid
,
SND_JACK_VIDEOOUT
,
NULL
);
if
(
err
<
0
)
return
err
;
snd_hda_input_jack_report
(
codec
,
pin_nid
);
hdmi_present_sense
(
codec
,
pin_nid
,
&
spec
->
sink_eld
[
spec
->
num_pins
]);
spec
->
pin
[
spec
->
num_pins
]
=
pin_nid
;
...
...
@@ -1044,7 +1054,7 @@ static int generic_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
return
hdmi_setup_stream
(
codec
,
hinfo
->
nid
,
stream_tag
,
format
);
}
static
struct
hda_pcm_stream
generic_hdmi_pcm_playback
=
{
static
const
struct
hda_pcm_stream
generic_hdmi_pcm_playback
=
{
.
substreams
=
1
,
.
channels_min
=
2
,
.
ops
=
{
...
...
@@ -1120,11 +1130,12 @@ static void generic_hdmi_free(struct hda_codec *codec)
for
(
i
=
0
;
i
<
spec
->
num_pins
;
i
++
)
snd_hda_eld_proc_free
(
codec
,
&
spec
->
sink_eld
[
i
]);
snd_hda_input_jack_free
(
codec
);
kfree
(
spec
);
}
static
struct
hda_codec_ops
generic_hdmi_patch_ops
=
{
static
const
struct
hda_codec_ops
generic_hdmi_patch_ops
=
{
.
init
=
generic_hdmi_init
,
.
free
=
generic_hdmi_free
,
.
build_pcms
=
generic_hdmi_build_pcms
,
...
...
@@ -1169,12 +1180,12 @@ static int patch_generic_hdmi(struct hda_codec *codec)
#define nvhdmi_master_con_nid_7x 0x04
#define nvhdmi_master_pin_nid_7x 0x05
static
hda_nid_t
nvhdmi_con_nids_7x
[
4
]
=
{
static
const
hda_nid_t
nvhdmi_con_nids_7x
[
4
]
=
{
/*front, rear, clfe, rear_surr */
0x6
,
0x8
,
0xa
,
0xc
,
};
static
struct
hda_verb
nvhdmi_basic_init_7x
[]
=
{
static
const
struct
hda_verb
nvhdmi_basic_init_7x
[]
=
{
/* set audio protect on */
{
0x1
,
Nv_VERB_SET_Audio_Protection_On
,
0x1
},
/* enable digital output on pin widget */
...
...
@@ -1435,7 +1446,7 @@ static int nvhdmi_8ch_7x_pcm_prepare(struct hda_pcm_stream *hinfo,
return
0
;
}
static
struct
hda_pcm_stream
nvhdmi_pcm_playback_8ch_7x
=
{
static
const
struct
hda_pcm_stream
nvhdmi_pcm_playback_8ch_7x
=
{
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_max
=
8
,
...
...
@@ -1450,7 +1461,7 @@ static struct hda_pcm_stream nvhdmi_pcm_playback_8ch_7x = {
},
};
static
struct
hda_pcm_stream
nvhdmi_pcm_playback_2ch
=
{
static
const
struct
hda_pcm_stream
nvhdmi_pcm_playback_2ch
=
{
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_max
=
2
,
...
...
@@ -1465,14 +1476,14 @@ static struct hda_pcm_stream nvhdmi_pcm_playback_2ch = {
},
};
static
struct
hda_codec_ops
nvhdmi_patch_ops_8ch_7x
=
{
static
const
struct
hda_codec_ops
nvhdmi_patch_ops_8ch_7x
=
{
.
build_controls
=
generic_hdmi_build_controls
,
.
build_pcms
=
generic_hdmi_build_pcms
,
.
init
=
nvhdmi_7x_init
,
.
free
=
generic_hdmi_free
,
};
static
struct
hda_codec_ops
nvhdmi_patch_ops_2ch
=
{
static
const
struct
hda_codec_ops
nvhdmi_patch_ops_2ch
=
{
.
build_controls
=
generic_hdmi_build_controls
,
.
build_pcms
=
generic_hdmi_build_pcms
,
.
init
=
nvhdmi_7x_init
,
...
...
@@ -1568,7 +1579,7 @@ static int atihdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
return
0
;
}
static
struct
hda_pcm_stream
atihdmi_pcm_digital_playback
=
{
static
const
struct
hda_pcm_stream
atihdmi_pcm_digital_playback
=
{
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_max
=
2
,
...
...
@@ -1580,7 +1591,7 @@ static struct hda_pcm_stream atihdmi_pcm_digital_playback = {
},
};
static
struct
hda_verb
atihdmi_basic_init
[]
=
{
static
const
struct
hda_verb
atihdmi_basic_init
[]
=
{
/* enable digital output on pin widget */
{
0x03
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_OUT
},
{}
/* terminator */
...
...
@@ -1599,7 +1610,7 @@ static int atihdmi_init(struct hda_codec *codec)
return
0
;
}
static
struct
hda_codec_ops
atihdmi_patch_ops
=
{
static
const
struct
hda_codec_ops
atihdmi_patch_ops
=
{
.
build_controls
=
generic_hdmi_build_controls
,
.
build_pcms
=
generic_hdmi_build_pcms
,
.
init
=
atihdmi_init
,
...
...
@@ -1634,7 +1645,7 @@ static int patch_atihdmi(struct hda_codec *codec)
/*
* patch entries
*/
static
struct
hda_codec_preset
snd_hda_preset_hdmi
[]
=
{
static
const
struct
hda_codec_preset
snd_hda_preset_hdmi
[]
=
{
{
.
id
=
0x1002793c
,
.
name
=
"RS600 HDMI"
,
.
patch
=
patch_atihdmi
},
{
.
id
=
0x10027919
,
.
name
=
"RS600 HDMI"
,
.
patch
=
patch_atihdmi
},
{
.
id
=
0x1002791a
,
.
name
=
"RS690/780 HDMI"
,
.
patch
=
patch_atihdmi
},
...
...
@@ -1677,6 +1688,7 @@ static struct hda_codec_preset snd_hda_preset_hdmi[] = {
{
.
id
=
0x80862803
,
.
name
=
"Eaglelake HDMI"
,
.
patch
=
patch_generic_hdmi
},
{
.
id
=
0x80862804
,
.
name
=
"IbexPeak HDMI"
,
.
patch
=
patch_generic_hdmi
},
{
.
id
=
0x80862805
,
.
name
=
"CougarPoint HDMI"
,
.
patch
=
patch_generic_hdmi
},
{
.
id
=
0x80862806
,
.
name
=
"PantherPoint HDMI"
,
.
patch
=
patch_generic_hdmi
},
{
.
id
=
0x808629fb
,
.
name
=
"Crestline HDMI"
,
.
patch
=
patch_generic_hdmi
},
{}
/* terminator */
};
...
...
@@ -1722,6 +1734,7 @@ MODULE_ALIAS("snd-hda-codec-id:80862802");
MODULE_ALIAS
(
"snd-hda-codec-id:80862803"
);
MODULE_ALIAS
(
"snd-hda-codec-id:80862804"
);
MODULE_ALIAS
(
"snd-hda-codec-id:80862805"
);
MODULE_ALIAS
(
"snd-hda-codec-id:80862806"
);
MODULE_ALIAS
(
"snd-hda-codec-id:808629fb"
);
MODULE_LICENSE
(
"GPL"
);
...
...
sound/pci/hda/patch_realtek.c
浏览文件 @
f686c74c
此差异已折叠。
点击以展开。
sound/pci/hda/patch_si3054.c
浏览文件 @
f686c74c
...
...
@@ -130,7 +130,7 @@ static int si3054_switch_put(struct snd_kcontrol *kcontrol,
}
static
struct
snd_kcontrol_new
si3054_modem_mixer
[]
=
{
static
const
struct
snd_kcontrol_new
si3054_modem_mixer
[]
=
{
SI3054_KCONTROL
(
"Off-hook Switch"
,
SI3054_GPIO_CONTROL
,
SI3054_GPIO_OH
),
SI3054_KCONTROL
(
"Caller ID Switch"
,
SI3054_GPIO_CONTROL
,
SI3054_GPIO_CID
),
{}
...
...
@@ -181,7 +181,7 @@ static int si3054_pcm_open(struct hda_pcm_stream *hinfo,
}
static
struct
hda_pcm_stream
si3054_pcm
=
{
static
const
struct
hda_pcm_stream
si3054_pcm
=
{
.
substreams
=
1
,
.
channels_min
=
1
,
.
channels_max
=
1
,
...
...
@@ -200,12 +200,13 @@ static int si3054_build_pcms(struct hda_codec *codec)
{
struct
si3054_spec
*
spec
=
codec
->
spec
;
struct
hda_pcm
*
info
=
&
spec
->
pcm
;
si3054_pcm
.
nid
=
codec
->
mfg
;
codec
->
num_pcms
=
1
;
codec
->
pcm_info
=
info
;
info
->
name
=
"Si3054 Modem"
;
info
->
stream
[
SNDRV_PCM_STREAM_PLAYBACK
]
=
si3054_pcm
;
info
->
stream
[
SNDRV_PCM_STREAM_CAPTURE
]
=
si3054_pcm
;
info
->
stream
[
SNDRV_PCM_STREAM_PLAYBACK
].
nid
=
codec
->
mfg
;
info
->
stream
[
SNDRV_PCM_STREAM_CAPTURE
].
nid
=
codec
->
mfg
;
info
->
pcm_type
=
HDA_PCM_TYPE_MODEM
;
return
0
;
}
...
...
@@ -263,7 +264,7 @@ static void si3054_free(struct hda_codec *codec)
/*
*/
static
struct
hda_codec_ops
si3054_patch_ops
=
{
static
const
struct
hda_codec_ops
si3054_patch_ops
=
{
.
build_controls
=
si3054_build_controls
,
.
build_pcms
=
si3054_build_pcms
,
.
init
=
si3054_init
,
...
...
@@ -283,7 +284,7 @@ static int patch_si3054(struct hda_codec *codec)
/*
* patch entries
*/
static
struct
hda_codec_preset
snd_hda_preset_si3054
[]
=
{
static
const
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
浏览文件 @
f686c74c
此差异已折叠。
点击以展开。
sound/pci/hda/patch_via.c
浏览文件 @
f686c74c
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录