Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
f686c74c
Commit
f686c74c
authored
May 22, 2011
by
Takashi Iwai
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'topic/hda' into for-linus
parents
7ec298df
50e3bbf9
Changes
15
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
4127 additions
and
3296 deletions
+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
No files found.
Documentation/sound/alsa/HD-Audio-Models.txt
View file @
f686c74c
...
@@ -94,7 +94,7 @@ ALC662/663/272
...
@@ -94,7 +94,7 @@ ALC662/663/272
3stack-dig 3-stack (2-channel) with SPDIF
3stack-dig 3-stack (2-channel) with SPDIF
3stack-6ch 3-stack (6-channel)
3stack-6ch 3-stack (6-channel)
3stack-6ch-dig 3-stack (6-channel) with SPDIF
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
lenovo-101e Lenovo laptop
eeepc-p701 ASUS Eeepc P701
eeepc-p701 ASUS Eeepc P701
eeepc-ep20 ASUS Eeepc EP20
eeepc-ep20 ASUS Eeepc EP20
...
...
sound/pci/hda/hda_codec.c
View file @
f686c74c
...
@@ -307,6 +307,12 @@ int snd_hda_get_sub_nodes(struct hda_codec *codec, hda_nid_t nid,
...
@@ -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
);
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
* snd_hda_get_connections - get connection list
* @codec: the HDA codec
* @codec: the HDA codec
...
@@ -321,6 +327,43 @@ EXPORT_SYMBOL_HDA(snd_hda_get_sub_nodes);
...
@@ -321,6 +327,43 @@ EXPORT_SYMBOL_HDA(snd_hda_get_sub_nodes);
*/
*/
int
snd_hda_get_connections
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
,
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
;
unsigned
int
parm
;
int
i
,
conn_len
,
conns
;
int
i
,
conn_len
,
conns
;
...
@@ -417,8 +460,28 @@ int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,
...
@@ -417,8 +460,28 @@ int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,
}
}
return
conns
;
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
* 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)
...
@@ -1019,6 +1082,7 @@ static void snd_hda_codec_free(struct hda_codec *codec)
list_del
(
&
codec
->
list
);
list_del
(
&
codec
->
list
);
snd_array_free
(
&
codec
->
mixers
);
snd_array_free
(
&
codec
->
mixers
);
snd_array_free
(
&
codec
->
nids
);
snd_array_free
(
&
codec
->
nids
);
snd_array_free
(
&
codec
->
conn_lists
);
codec
->
bus
->
caddr_tbl
[
codec
->
addr
]
=
NULL
;
codec
->
bus
->
caddr_tbl
[
codec
->
addr
]
=
NULL
;
if
(
codec
->
patch_ops
.
free
)
if
(
codec
->
patch_ops
.
free
)
codec
->
patch_ops
.
free
(
codec
);
codec
->
patch_ops
.
free
(
codec
);
...
@@ -1079,6 +1143,7 @@ int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus,
...
@@ -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
->
init_pins
,
sizeof
(
struct
hda_pincfg
),
16
);
snd_array_init
(
&
codec
->
driver_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
->
cvt_setups
,
sizeof
(
struct
hda_cvt_setup
),
8
);
snd_array_init
(
&
codec
->
conn_lists
,
sizeof
(
hda_nid_t
),
64
);
if
(
codec
->
bus
->
modelname
)
{
if
(
codec
->
bus
->
modelname
)
{
codec
->
modelname
=
kstrdup
(
codec
->
bus
->
modelname
,
GFP_KERNEL
);
codec
->
modelname
=
kstrdup
(
codec
->
bus
->
modelname
,
GFP_KERNEL
);
if
(
!
codec
->
modelname
)
{
if
(
!
codec
->
modelname
)
{
...
@@ -2556,7 +2621,7 @@ static unsigned int convert_to_spdif_status(unsigned short val)
...
@@ -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
,
static
void
set_dig_out
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
,
int
verb
,
int
val
)
int
verb
,
int
val
)
{
{
hda_nid_t
*
d
;
const
hda_nid_t
*
d
;
snd_hda_codec_write_cache
(
codec
,
nid
,
0
,
verb
,
val
);
snd_hda_codec_write_cache
(
codec
,
nid
,
0
,
verb
,
val
);
d
=
codec
->
slave_dig_outs
;
d
=
codec
->
slave_dig_outs
;
...
@@ -3807,7 +3872,8 @@ EXPORT_SYMBOL_HDA(snd_hda_check_board_codec_sid_config);
...
@@ -3807,7 +3872,8 @@ EXPORT_SYMBOL_HDA(snd_hda_check_board_codec_sid_config);
*
*
* Returns 0 if successful, or a negative error code.
* 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
;
int
err
;
...
@@ -3950,7 +4016,7 @@ int snd_hda_check_amp_list_power(struct hda_codec *codec,
...
@@ -3950,7 +4016,7 @@ int snd_hda_check_amp_list_power(struct hda_codec *codec,
struct
hda_loopback_check
*
check
,
struct
hda_loopback_check
*
check
,
hda_nid_t
nid
)
hda_nid_t
nid
)
{
{
struct
hda_amp_list
*
p
;
const
struct
hda_amp_list
*
p
;
int
ch
,
v
;
int
ch
,
v
;
if
(
!
check
->
amplist
)
if
(
!
check
->
amplist
)
...
@@ -4118,7 +4184,7 @@ static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
...
@@ -4118,7 +4184,7 @@ static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
-
1
);
-
1
);
snd_hda_codec_setup_stream
(
codec
,
nid
,
stream_tag
,
0
,
format
);
snd_hda_codec_setup_stream
(
codec
,
nid
,
stream_tag
,
0
,
format
);
if
(
codec
->
slave_dig_outs
)
{
if
(
codec
->
slave_dig_outs
)
{
hda_nid_t
*
d
;
const
hda_nid_t
*
d
;
for
(
d
=
codec
->
slave_dig_outs
;
*
d
;
d
++
)
for
(
d
=
codec
->
slave_dig_outs
;
*
d
;
d
++
)
snd_hda_codec_setup_stream
(
codec
,
*
d
,
stream_tag
,
0
,
snd_hda_codec_setup_stream
(
codec
,
*
d
,
stream_tag
,
0
,
format
);
format
);
...
@@ -4133,7 +4199,7 @@ static void cleanup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid)
...
@@ -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
);
snd_hda_codec_cleanup_stream
(
codec
,
nid
);
if
(
codec
->
slave_dig_outs
)
{
if
(
codec
->
slave_dig_outs
)
{
hda_nid_t
*
d
;
const
hda_nid_t
*
d
;
for
(
d
=
codec
->
slave_dig_outs
;
*
d
;
d
++
)
for
(
d
=
codec
->
slave_dig_outs
;
*
d
;
d
++
)
snd_hda_codec_cleanup_stream
(
codec
,
*
d
);
snd_hda_codec_cleanup_stream
(
codec
,
*
d
);
}
}
...
@@ -4280,7 +4346,7 @@ int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
...
@@ -4280,7 +4346,7 @@ int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
unsigned
int
format
,
unsigned
int
format
,
struct
snd_pcm_substream
*
substream
)
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
chs
=
substream
->
runtime
->
channels
;
int
i
;
int
i
;
...
@@ -4335,7 +4401,7 @@ EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_prepare);
...
@@ -4335,7 +4401,7 @@ EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_prepare);
int
snd_hda_multi_out_analog_cleanup
(
struct
hda_codec
*
codec
,
int
snd_hda_multi_out_analog_cleanup
(
struct
hda_codec
*
codec
,
struct
hda_multi_out
*
mout
)
struct
hda_multi_out
*
mout
)
{
{
hda_nid_t
*
nids
=
mout
->
dac_nids
;
const
hda_nid_t
*
nids
=
mout
->
dac_nids
;
int
i
;
int
i
;
for
(
i
=
0
;
i
<
mout
->
num_dacs
;
i
++
)
for
(
i
=
0
;
i
<
mout
->
num_dacs
;
i
++
)
...
@@ -4360,7 +4426,7 @@ EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_cleanup);
...
@@ -4360,7 +4426,7 @@ EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_cleanup);
* Helper for automatic pin configuration
* 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
++
)
for
(;
*
list
;
list
++
)
if
(
*
list
==
nid
)
if
(
*
list
==
nid
)
...
@@ -4441,7 +4507,7 @@ static void sort_autocfg_input_pins(struct auto_pin_cfg *cfg)
...
@@ -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
,
int
snd_hda_parse_pin_def_config
(
struct
hda_codec
*
codec
,
struct
auto_pin_cfg
*
cfg
,
struct
auto_pin_cfg
*
cfg
,
hda_nid_t
*
ignore_nids
)
const
hda_nid_t
*
ignore_nids
)
{
{
hda_nid_t
nid
,
end_nid
;
hda_nid_t
nid
,
end_nid
;
short
seq
,
assoc_line_out
,
assoc_speaker
;
short
seq
,
assoc_line_out
,
assoc_speaker
;
...
@@ -4632,10 +4698,13 @@ int snd_hda_parse_pin_def_config(struct hda_codec *codec,
...
@@ -4632,10 +4698,13 @@ int snd_hda_parse_pin_def_config(struct hda_codec *codec,
/*
/*
* debug prints of the parsed results
* 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_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
[
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
"
,
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_outs
,
cfg
->
speaker_pins
[
0
],
cfg
->
speaker_pins
[
1
],
cfg
->
speaker_pins
[
2
],
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,
...
@@ -4986,6 +5055,8 @@ static const char *get_jack_default_name(struct hda_codec *codec, hda_nid_t nid,
return
"Line-out"
;
return
"Line-out"
;
case
SND_JACK_HEADSET
:
case
SND_JACK_HEADSET
:
return
"Headset"
;
return
"Headset"
;
case
SND_JACK_VIDEOOUT
:
return
"HDMI/DP"
;
default:
default:
return
"Misc"
;
return
"Misc"
;
}
}
...
...
sound/pci/hda/hda_codec.h
View file @
f686c74c
...
@@ -825,12 +825,14 @@ struct hda_codec {
...
@@ -825,12 +825,14 @@ struct hda_codec {
struct
hda_cache_rec
amp_cache
;
/* cache for amp access */
struct
hda_cache_rec
amp_cache
;
/* cache for amp access */
struct
hda_cache_rec
cmd_cache
;
/* cache for other commands */
struct
hda_cache_rec
cmd_cache
;
/* cache for other commands */
struct
snd_array
conn_lists
;
/* connection-list array */
struct
mutex
spdif_mutex
;
struct
mutex
spdif_mutex
;
struct
mutex
control_mutex
;
struct
mutex
control_mutex
;
unsigned
int
spdif_status
;
/* IEC958 status bits */
unsigned
int
spdif_status
;
/* IEC958 status bits */
unsigned
short
spdif_ctls
;
/* SPDIF control bits */
unsigned
short
spdif_ctls
;
/* SPDIF control bits */
unsigned
int
spdif_in_enable
;
/* SPDIF input enable? */
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
init_pins
;
/* initial (BIOS) pin configurations */
struct
snd_array
driver_pins
;
/* pin configs set by codec parser */
struct
snd_array
driver_pins
;
/* pin configs set by codec parser */
struct
snd_array
cvt_setups
;
/* audio convert setups */
struct
snd_array
cvt_setups
;
/* audio convert setups */
...
...
sound/pci/hda/hda_intel.c
View file @
f686c74c
...
@@ -126,6 +126,7 @@ MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},"
...
@@ -126,6 +126,7 @@ MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},"
"{Intel, ICH10},"
"{Intel, ICH10},"
"{Intel, PCH},"
"{Intel, PCH},"
"{Intel, CPT},"
"{Intel, CPT},"
"{Intel, PPT},"
"{Intel, PBG},"
"{Intel, PBG},"
"{Intel, SCH},"
"{Intel, SCH},"
"{ATI, SB450},"
"{ATI, SB450},"
...
@@ -1091,7 +1092,13 @@ static void azx_init_pci(struct azx *chip)
...
@@ -1091,7 +1092,13 @@ static void azx_init_pci(struct azx *chip)
?
"Failed"
:
"OK"
);
?
"Failed"
:
"OK"
);
}
}
break
;
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)
...
@@ -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 */
/* Then create codec instances */
for
(
c
=
0
;
c
<
max_slots
;
c
++
)
{
for
(
c
=
0
;
c
<
max_slots
;
c
++
)
{
if
((
chip
->
codec_mask
&
(
1
<<
c
))
&
chip
->
codec_probe_mask
)
{
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)
...
@@ -2349,9 +2367,16 @@ static int __devinit check_position_fix(struct azx *chip, int fix)
/* Check VIA/ATI HD Audio Controller exist */
/* Check VIA/ATI HD Audio Controller exist */
switch
(
chip
->
driver_type
)
{
switch
(
chip
->
driver_type
)
{
case
AZX_DRIVER_VIA
:
case
AZX_DRIVER_VIA
:
case
AZX_DRIVER_ATI
:
/* Use link position directly, avoid any transfer problem. */
/* Use link position directly, avoid any transfer problem. */
return
POS_FIX_VIACOMBO
;
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
;
return
POS_FIX_AUTO
;
...
@@ -2549,6 +2574,13 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci,
...
@@ -2549,6 +2574,13 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci,
gcap
&=
~
ICH6_GCAP_64OK
;
gcap
&=
~
ICH6_GCAP_64OK
;
pci_dev_put
(
p_smbus
);
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 */
/* disable 64bit DMA address for Teradici */
...
@@ -2759,6 +2791,8 @@ static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
...
@@ -2759,6 +2791,8 @@ static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
{
PCI_DEVICE
(
0x8086
,
0x1c20
),
.
driver_data
=
AZX_DRIVER_PCH
},
{
PCI_DEVICE
(
0x8086
,
0x1c20
),
.
driver_data
=
AZX_DRIVER_PCH
},
/* PBG */
/* PBG */
{
PCI_DEVICE
(
0x8086
,
0x1d20
),
.
driver_data
=
AZX_DRIVER_PCH
},
{
PCI_DEVICE
(
0x8086
,
0x1d20
),
.
driver_data
=
AZX_DRIVER_PCH
},
/* Panther Point */
{
PCI_DEVICE
(
0x8086
,
0x1e20
),
.
driver_data
=
AZX_DRIVER_PCH
},
/* SCH */
/* SCH */
{
PCI_DEVICE
(
0x8086
,
0x811b
),
.
driver_data
=
AZX_DRIVER_SCH
},
{
PCI_DEVICE
(
0x8086
,
0x811b
),
.
driver_data
=
AZX_DRIVER_SCH
},
/* Generic Intel */
/* Generic Intel */
...
...
sound/pci/hda/hda_local.h
View file @
f686c74c
...
@@ -267,11 +267,11 @@ enum { HDA_DIG_NONE, HDA_DIG_EXCLUSIVE, HDA_DIG_ANALOG_DUP }; /* dig_out_used */
...
@@ -267,11 +267,11 @@ enum { HDA_DIG_NONE, HDA_DIG_EXCLUSIVE, HDA_DIG_ANALOG_DUP }; /* dig_out_used */
struct
hda_multi_out
{
struct
hda_multi_out
{
int
num_dacs
;
/* # of DACs, must be more than 1 */
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
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
extra_out_nid
[
3
];
/* optional DACs, 0 when not exists */
hda_nid_t
dig_out_nid
;
/* digital out audio widget */
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
max_channels
;
/* currently supported analog channels */
int
dig_out_used
;
/* current usage of digital out (HDA_DIG_XXX) */
int
dig_out_used
;
/* current usage of digital out (HDA_DIG_XXX) */
int
no_share_stream
;
/* don't share a stream with multiple pins */
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,
...
@@ -347,7 +347,7 @@ int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
int
num_configs
,
const
char
*
const
*
models
,
int
num_configs
,
const
char
*
const
*
models
,
const
struct
snd_pci_quirk
*
tbl
);
const
struct
snd_pci_quirk
*
tbl
);
int
snd_hda_add_new_ctls
(
struct
hda_codec
*
codec
,
int
snd_hda_add_new_ctls
(
struct
hda_codec
*
codec
,
struct
snd_kcontrol_new
*
knew
);
const
struct
snd_kcontrol_new
*
knew
);
/*
/*
* unsolicited event handler
* unsolicited event handler
...
@@ -443,7 +443,7 @@ struct auto_pin_cfg {
...
@@ -443,7 +443,7 @@ struct auto_pin_cfg {
int
snd_hda_parse_pin_def_config
(
struct
hda_codec
*
codec
,
int
snd_hda_parse_pin_def_config
(
struct
hda_codec
*
codec
,
struct
auto_pin_cfg
*
cfg
,
struct
auto_pin_cfg
*
cfg
,
hda_nid_t
*
ignore_nids
);
const
hda_nid_t
*
ignore_nids
);
/* amp values */
/* amp values */
#define AMP_IN_MUTE(idx) (0x7080 | ((idx)<<8))
#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);
...
@@ -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
);
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
);
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 */
/* flags for hda_nid_item */
#define HDA_NID_ITEM_AMP (1<<0)
#define HDA_NID_ITEM_AMP (1<<0)
...
@@ -567,7 +573,7 @@ struct hda_amp_list {
...
@@ -567,7 +573,7 @@ struct hda_amp_list {
};
};
struct
hda_loopback_check
{
struct
hda_loopback_check
{
struct
hda_amp_list
*
amplist
;
const
struct
hda_amp_list
*
amplist
;
int
power_on
;
int
power_on
;
};
};
...
...
sound/pci/hda/patch_analog.c
View file @
f686c74c
This diff is collapsed.
Click to expand it.
sound/pci/hda/patch_ca0110.c
View file @
f686c74c
...
@@ -134,7 +134,7 @@ static int ca0110_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
...
@@ -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
,
static
int
_add_switch
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
,
const
char
*
pfx
,
int
chan
,
int
dir
)
int
chan
,
int
dir
)
...
@@ -171,7 +171,7 @@ static int ca0110_build_controls(struct hda_codec *codec)
...
@@ -171,7 +171,7 @@ static int ca0110_build_controls(struct hda_codec *codec)
{
{
struct
ca0110_spec
*
spec
=
codec
->
spec
;
struct
ca0110_spec
*
spec
=
codec
->
spec
;
struct
auto_pin_cfg
*
cfg
=
&
spec
->
autocfg
;
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"
"Front"
,
"Surround"
,
NULL
,
"Side"
,
"Multi"
};
};
hda_nid_t
mutenid
;
hda_nid_t
mutenid
;
...
@@ -259,7 +259,7 @@ static int ca0110_build_controls(struct hda_codec *codec)
...
@@ -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
,
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_min
=
2
,
.
channels_max
=
8
,
.
channels_max
=
8
,
...
@@ -270,7 +270,7 @@ static struct hda_pcm_stream ca0110_pcm_analog_playback = {
...
@@ -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
,
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_min
=
2
,
.
channels_max
=
2
,
.
channels_max
=
2
,
...
@@ -280,7 +280,7 @@ static struct hda_pcm_stream ca0110_pcm_analog_capture = {
...
@@ -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
,
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_min
=
2
,
.
channels_max
=
2
,
.
channels_max
=
2
,
...
@@ -291,7 +291,7 @@ static struct hda_pcm_stream ca0110_pcm_digital_playback = {
...
@@ -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
,
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_min
=
2
,
.
channels_max
=
2
,
.
channels_max
=
2
,
...
@@ -389,7 +389,7 @@ static void ca0110_free(struct hda_codec *codec)
...
@@ -389,7 +389,7 @@ static void ca0110_free(struct hda_codec *codec)
kfree
(
codec
->
spec
);
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_controls
=
ca0110_build_controls
,
.
build_pcms
=
ca0110_build_pcms
,
.
build_pcms
=
ca0110_build_pcms
,
.
init
=
ca0110_init
,
.
init
=
ca0110_init
,
...
@@ -539,7 +539,7 @@ static int patch_ca0110(struct hda_codec *codec)
...
@@ -539,7 +539,7 @@ static int patch_ca0110(struct hda_codec *codec)
/*
/*
* patch entries
* 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
=
0x1102000a
,
.
name
=
"CA0110-IBG"
,
.
patch
=
patch_ca0110
},
{
.
id
=
0x1102000b
,
.
name
=
"CA0110-IBG"
,
.
patch
=
patch_ca0110
},
{
.
id
=
0x1102000b
,
.
name
=
"CA0110-IBG"
,
.
patch
=
patch_ca0110
},
{
.
id
=
0x1102000d
,
.
name
=
"SB0880 X-Fi"
,
.
patch
=
patch_ca0110
},
{
.
id
=
0x1102000d
,
.
name
=
"SB0880 X-Fi"
,
.
patch
=
patch_ca0110
},
...
...
sound/pci/hda/patch_cirrus.c
View file @
f686c74c
...
@@ -51,7 +51,7 @@ struct cs_spec {
...
@@ -51,7 +51,7 @@ struct cs_spec {
unsigned
int
cur_adc_format
;
unsigned
int
cur_adc_format
;
hda_nid_t
dig_in
;
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_mask
;
unsigned
int
gpio_dir
;
unsigned
int
gpio_dir
;
...
@@ -231,7 +231,7 @@ static int cs_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
...
@@ -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
,
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_min
=
2
,
.
channels_max
=
2
,
.
channels_max
=
2
,
...
@@ -242,7 +242,7 @@ static struct hda_pcm_stream cs_pcm_analog_playback = {
...
@@ -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
,
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_min
=
2
,
.
channels_max
=
2
,
.
channels_max
=
2
,
...
@@ -252,7 +252,7 @@ static struct hda_pcm_stream cs_pcm_analog_capture = {
...
@@ -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
,
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_min
=
2
,
.
channels_max
=
2
,
.
channels_max
=
2
,
...
@@ -264,7 +264,7 @@ static struct hda_pcm_stream cs_pcm_digital_playback = {
...
@@ -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
,
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_min
=
2
,
.
channels_max
=
2
,
.
channels_max
=
2
,
...
@@ -331,8 +331,8 @@ static int is_ext_mic(struct hda_codec *codec, unsigned int idx)
...
@@ -331,8 +331,8 @@ static int is_ext_mic(struct hda_codec *codec, unsigned int idx)
struct
cs_spec
*
spec
=
codec
->
spec
;
struct
cs_spec
*
spec
=
codec
->
spec
;
struct
auto_pin_cfg
*
cfg
=
&
spec
->
autocfg
;
struct
auto_pin_cfg
*
cfg
=
&
spec
->
autocfg
;
hda_nid_t
pin
=
cfg
->
inputs
[
idx
].
pin
;
hda_nid_t
pin
=
cfg
->
inputs
[
idx
].
pin
;
unsigned
int
val
=
snd_hda_query_pin_caps
(
codec
,
pin
)
;
unsigned
int
val
;
if
(
!
(
val
&
AC_PINCAP_PRES_DETECT
))
if
(
!
is_jack_detectable
(
codec
,
pin
))
return
0
;
return
0
;
val
=
snd_hda_codec_get_pincfg
(
codec
,
pin
);
val
=
snd_hda_codec_get_pincfg
(
codec
,
pin
);
return
(
snd_hda_get_input_pin_attr
(
val
)
!=
INPUT_PIN_ATTR_INT
);
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,
...
@@ -349,8 +349,7 @@ static hda_nid_t get_adc(struct hda_codec *codec, hda_nid_t pin,
hda_nid_t
pins
[
2
];
hda_nid_t
pins
[
2
];
unsigned
int
type
;
unsigned
int
type
;
int
j
,
nums
;
int
j
,
nums
;
type
=
(
get_wcaps
(
codec
,
nid
)
&
AC_WCAP_TYPE
)
type
=
get_wcaps_type
(
get_wcaps
(
codec
,
nid
));
>>
AC_WCAP_TYPE_SHIFT
;
if
(
type
!=
AC_WID_AUD_IN
)
if
(
type
!=
AC_WID_AUD_IN
)
continue
;
continue
;
nums
=
snd_hda_get_connections
(
codec
,
nid
,
pins
,
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,
...
@@ -559,10 +558,10 @@ static int add_output(struct hda_codec *codec, hda_nid_t dac, int idx,
const
char
*
name
;
const
char
*
name
;
int
err
,
index
;
int
err
,
index
;
struct
snd_kcontrol
*
kctl
;
struct
snd_kcontrol
*
kctl
;
static
c
har
*
speakers
[]
=
{
static
c
onst
char
*
const
speakers
[]
=
{
"Front Speaker"
,
"Surround Speaker"
,
"Bass Speaker"
"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"
"Front Line-Out"
,
"Surround Line-Out"
,
"Bass Line-Out"
};
};
...
@@ -642,7 +641,7 @@ static int build_output(struct hda_codec *codec)
...
@@ -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_SW
(
"Capture Switch"
,
0
),
HDA_BIND_VOL
(
"Capture Volume"
,
0
),
HDA_BIND_VOL
(
"Capture Volume"
,
0
),
};
};
...
@@ -710,7 +709,7 @@ static int cs_capture_source_put(struct snd_kcontrol *kcontrol,
...
@@ -710,7 +709,7 @@ static int cs_capture_source_put(struct snd_kcontrol *kcontrol,
return
change_cur_input
(
codec
,
idx
,
0
);
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
,
.
iface
=
SNDRV_CTL_ELEM_IFACE_MIXER
,
.
name
=
"Capture Source"
,
.
name
=
"Capture Source"
,
.
access
=
SNDRV_CTL_ELEM_ACCESS_READWRITE
,
.
access
=
SNDRV_CTL_ELEM_ACCESS_READWRITE
,
...
@@ -719,7 +718,7 @@ static struct snd_kcontrol_new cs_capture_source = {
...
@@ -719,7 +718,7 @@ static struct snd_kcontrol_new cs_capture_source = {
.
put
=
cs_capture_source_put
,
.
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
hda_ctl_ops
*
ops
)
{
{
struct
cs_spec
*
spec
=
codec
->
spec
;
struct
cs_spec
*
spec
=
codec
->
spec
;
...
@@ -847,15 +846,14 @@ static void cs_automute(struct hda_codec *codec)
...
@@ -847,15 +846,14 @@ static void cs_automute(struct hda_codec *codec)
{
{
struct
cs_spec
*
spec
=
codec
->
spec
;
struct
cs_spec
*
spec
=
codec
->
spec
;
struct
auto_pin_cfg
*
cfg
=
&
spec
->
autocfg
;
struct
auto_pin_cfg
*
cfg
=
&
spec
->
autocfg
;
unsigned
int
caps
,
hp_present
;
unsigned
int
hp_present
;
hda_nid_t
nid
;
hda_nid_t
nid
;
int
i
;
int
i
;
hp_present
=
0
;
hp_present
=
0
;
for
(
i
=
0
;
i
<
cfg
->
hp_outs
;
i
++
)
{
for
(
i
=
0
;
i
<
cfg
->
hp_outs
;
i
++
)
{
nid
=
cfg
->
hp_pins
[
i
];
nid
=
cfg
->
hp_pins
[
i
];
caps
=
snd_hda_query_pin_caps
(
codec
,
nid
);
if
(
!
is_jack_detectable
(
codec
,
nid
))
if
(
!
(
caps
&
AC_PINCAP_PRES_DETECT
))
continue
;
continue
;
hp_present
=
snd_hda_jack_detect
(
codec
,
nid
);
hp_present
=
snd_hda_jack_detect
(
codec
,
nid
);
if
(
hp_present
)
if
(
hp_present
)
...
@@ -924,7 +922,7 @@ static void init_output(struct hda_codec *codec)
...
@@ -924,7 +922,7 @@ static void init_output(struct hda_codec *codec)
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_HP
);
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_HP
);
if
(
!
cfg
->
speaker_outs
)
if
(
!
cfg
->
speaker_outs
)
continue
;
continue
;
if
(
get_wcaps
(
codec
,
nid
)
&
AC_WCAP_UNSOL_CAP
)
{
if
(
is_jack_detectable
(
codec
,
nid
)
)
{
snd_hda_codec_write
(
codec
,
nid
,
0
,
snd_hda_codec_write
(
codec
,
nid
,
0
,
AC_VERB_SET_UNSOLICITED_ENABLE
,
AC_VERB_SET_UNSOLICITED_ENABLE
,
AC_USRSP_EN
|
HP_EVENT
);
AC_USRSP_EN
|
HP_EVENT
);
...
@@ -983,7 +981,7 @@ static void init_input(struct hda_codec *codec)
...
@@ -983,7 +981,7 @@ static void init_input(struct hda_codec *codec)
cs_vendor_coef_set
(
codec
,
IDX_ADC_CFG
,
coef
);
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_PROC_STATE
,
1
},
{
0x11
,
AC_VERB_SET_COEF_INDEX
,
IDX_DAC_CFG
},
{
0x11
,
AC_VERB_SET_COEF_INDEX
,
IDX_DAC_CFG
},
{
0x11
,
AC_VERB_SET_PROC_COEF
,
{
0x11
,
AC_VERB_SET_PROC_COEF
,
...
@@ -1017,7 +1015,7 @@ static struct hda_verb cs_coef_init_verbs[] = {
...
@@ -1017,7 +1015,7 @@ static struct hda_verb cs_coef_init_verbs[] = {
* blocks, which will alleviate the issue.
* 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 */
{
0x01
,
AC_VERB_SET_POWER_STATE
,
0x00
},
/* AFG: D0 */
{
0x11
,
AC_VERB_SET_PROC_STATE
,
0x01
},
/* VPW: processing on */
{
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)
...
@@ -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_controls
=
cs_build_controls
,
.
build_pcms
=
cs_build_pcms
,
.
build_pcms
=
cs_build_pcms
,
.
init
=
cs_init
,
.
init
=
cs_init
,
...
@@ -1166,7 +1164,7 @@ static const char * const cs420x_models[CS420X_MODELS] = {
...
@@ -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
,
0x0ac0
,
"MacBookPro 5,3"
,
CS420X_MBP53
),
SND_PCI_QUIRK
(
0x10de
,
0x0d94
,
"MacBookAir 3,1(2)"
,
CS420X_MBP55
),
SND_PCI_QUIRK
(
0x10de
,
0x0d94
,
"MacBookAir 3,1(2)"
,
CS420X_MBP55
),
SND_PCI_QUIRK
(
0x10de
,
0xcb79
,
"MacBookPro 5,5"
,
CS420X_MBP55
),
SND_PCI_QUIRK
(
0x10de
,
0xcb79
,
"MacBookPro 5,5"
,
CS420X_MBP55
),
...
@@ -1180,7 +1178,7 @@ struct cs_pincfg {
...
@@ -1180,7 +1178,7 @@ struct cs_pincfg {
u32
val
;
u32
val
;
};
};
static
struct
cs_pincfg
mbp53_pincfgs
[]
=
{
static
const
struct
cs_pincfg
mbp53_pincfgs
[]
=
{
{
0x09
,
0x012b4050
},
{
0x09
,
0x012b4050
},
{
0x0a
,
0x90100141
},
{
0x0a
,
0x90100141
},
{
0x0b
,
0x90100140
},
{
0x0b
,
0x90100140
},
...
@@ -1194,7 +1192,7 @@ static struct cs_pincfg mbp53_pincfgs[] = {
...
@@ -1194,7 +1192,7 @@ static struct cs_pincfg mbp53_pincfgs[] = {
{}
/* terminator */
{}
/* terminator */
};
};
static
struct
cs_pincfg
mbp55_pincfgs
[]
=
{
static
const
struct
cs_pincfg
mbp55_pincfgs
[]
=
{
{
0x09
,
0x012b4030
},
{
0x09
,
0x012b4030
},
{
0x0a
,
0x90100121
},
{
0x0a
,
0x90100121
},
{
0x0b
,
0x90100120
},
{
0x0b
,
0x90100120
},
...
@@ -1208,7 +1206,7 @@ static struct cs_pincfg mbp55_pincfgs[] = {
...
@@ -1208,7 +1206,7 @@ static struct cs_pincfg mbp55_pincfgs[] = {
{}
/* terminator */
{}
/* terminator */
};
};
static
struct
cs_pincfg
imac27_pincfgs
[]
=
{
static
const
struct
cs_pincfg
imac27_pincfgs
[]
=
{
{
0x09
,
0x012b4050
},
{
0x09
,
0x012b4050
},
{
0x0a
,
0x90100140
},
{
0x0a
,
0x90100140
},
{
0x0b
,
0x90100142
},
{
0x0b
,
0x90100142
},
...
@@ -1222,7 +1220,7 @@ static struct cs_pincfg imac27_pincfgs[] = {
...
@@ -1222,7 +1220,7 @@ static struct cs_pincfg imac27_pincfgs[] = {
{}
/* terminator */
{}
/* terminator */
};
};
static
struct
cs_pincfg
*
cs_pincfgs
[
CS420X_MODELS
]
=
{
static
const
struct
cs_pincfg
*
cs_pincfgs
[
CS420X_MODELS
]
=
{
[
CS420X_MBP53
]
=
mbp53_pincfgs
,
[
CS420X_MBP53
]
=
mbp53_pincfgs
,
[
CS420X_MBP55
]
=
mbp55_pincfgs
,
[
CS420X_MBP55
]
=
mbp55_pincfgs
,
[
CS420X_IMAC27
]
=
imac27_pincfgs
,
[
CS420X_IMAC27
]
=
imac27_pincfgs
,
...
@@ -1283,7 +1281,7 @@ static int patch_cs420x(struct hda_codec *codec)
...
@@ -1283,7 +1281,7 @@ static int patch_cs420x(struct hda_codec *codec)
/*
/*
* patch entries
* 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
=
0x10134206
,
.
name
=
"CS4206"
,
.
patch
=
patch_cs420x
},
{
.
id
=
0x10134207
,
.
name
=
"CS4207"
,
.
patch
=
patch_cs420x
},
{
.
id
=
0x10134207
,
.
name
=
"CS4207"
,
.
patch
=
patch_cs420x
},
{}
/* terminator */
{}
/* terminator */
...
...
sound/pci/hda/patch_cmedia.c
View file @
f686c74c
...
@@ -53,7 +53,7 @@ struct cmi_spec {
...
@@ -53,7 +53,7 @@ struct cmi_spec {
int
num_dacs
;
int
num_dacs
;
/* capture */
/* capture */
hda_nid_t
*
adc_nids
;
const
hda_nid_t
*
adc_nids
;
hda_nid_t
dig_in_nid
;
hda_nid_t
dig_in_nid
;
/* capture source */
/* capture source */
...
@@ -110,7 +110,7 @@ static int cmi_mux_enum_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_v
...
@@ -110,7 +110,7 @@ static int cmi_mux_enum_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_v
*/
*/
/* 3-stack / 2 channel */
/* 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 */
/* set line-in PIN for input */
{
0x0c
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_IN
},
{
0x0c
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_IN
},
/* set mic PIN for input, also enable vref */
/* set mic PIN for input, also enable vref */
...
@@ -121,7 +121,7 @@ static struct hda_verb cmi9880_ch2_init[] = {
...
@@ -121,7 +121,7 @@ static struct hda_verb cmi9880_ch2_init[] = {
};
};
/* 3-stack / 6 channel */
/* 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 */
/* set line-in PIN for output */
{
0x0c
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_OUT
},
{
0x0c
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_OUT
},
/* set mic PIN for output */
/* set mic PIN for output */
...
@@ -132,7 +132,7 @@ static struct hda_verb cmi9880_ch6_init[] = {
...
@@ -132,7 +132,7 @@ static struct hda_verb cmi9880_ch6_init[] = {
};
};
/* 3-stack+front / 8 channel */
/* 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 */
/* set line-in PIN for output */
{
0x0c
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_OUT
},
{
0x0c
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_OUT
},
/* set mic PIN for output */
/* set mic PIN for output */
...
@@ -142,7 +142,7 @@ static struct hda_verb cmi9880_ch8_init[] = {
...
@@ -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
},
{
2
,
cmi9880_ch2_init
},
{
6
,
cmi9880_ch6_init
},
{
6
,
cmi9880_ch6_init
},
{
8
,
cmi9880_ch8_init
},
{
8
,
cmi9880_ch8_init
},
...
@@ -174,7 +174,7 @@ static int cmi_ch_mode_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_va
...
@@ -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! */
/* CMI9880 has no playback volumes! */
HDA_CODEC_MUTE
(
"PCM Playback Switch"
,
0x03
,
0x0
,
HDA_OUTPUT
),
/* front */
HDA_CODEC_MUTE
(
"PCM Playback Switch"
,
0x03
,
0x0
,
HDA_OUTPUT
),
/* front */
HDA_CODEC_MUTE
(
"Surround Playback Switch"
,
0x04
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Surround Playback Switch"
,
0x04
,
0x0
,
HDA_OUTPUT
),
...
@@ -205,7 +205,7 @@ static struct snd_kcontrol_new cmi9880_basic_mixer[] = {
...
@@ -205,7 +205,7 @@ static struct snd_kcontrol_new cmi9880_basic_mixer[] = {
/*
/*
* shared I/O pins
* 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
,
.
iface
=
SNDRV_CTL_ELEM_IFACE_MIXER
,
.
name
=
"Channel Mode"
,
.
name
=
"Channel Mode"
,
...
@@ -219,7 +219,7 @@ static struct snd_kcontrol_new cmi9880_ch_mode_mixer[] = {
...
@@ -219,7 +219,7 @@ static struct snd_kcontrol_new cmi9880_ch_mode_mixer[] = {
/* AUD-in selections:
/* AUD-in selections:
* 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x1f 0x20
* 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
,
.
num_items
=
4
,
.
items
=
{
.
items
=
{
{
"Front Mic"
,
0x5
},
{
"Front Mic"
,
0x5
},
...
@@ -229,7 +229,7 @@ static struct hda_input_mux cmi9880_basic_mux = {
...
@@ -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
,
.
num_items
=
3
,
.
items
=
{
.
items
=
{
{
"Front Mic"
,
0x5
},
{
"Front Mic"
,
0x5
},
...
@@ -239,11 +239,11 @@ static struct hda_input_mux cmi9880_no_line_mux = {
...
@@ -239,11 +239,11 @@ static struct hda_input_mux cmi9880_no_line_mux = {
};
};
/* front, rear, clfe, rear_surr */
/* 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
0x03
,
0x04
,
0x05
,
0x06
};
};
/* ADC0, ADC1 */
/* ADC0, ADC1 */
static
hda_nid_t
cmi9880_adc_nids
[
2
]
=
{
static
const
hda_nid_t
cmi9880_adc_nids
[
2
]
=
{
0x08
,
0x09
0x08
,
0x09
};
};
...
@@ -252,7 +252,7 @@ static hda_nid_t cmi9880_adc_nids[2] = {
...
@@ -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) */
/* port-D for line out (rear panel) */
{
0x0b
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_HP
},
{
0x0b
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_HP
},
/* port-E for HP out (front panel) */
/* port-E for HP out (front panel) */
...
@@ -281,7 +281,7 @@ static struct hda_verb cmi9880_basic_init[] = {
...
@@ -281,7 +281,7 @@ static struct hda_verb cmi9880_basic_init[] = {
{}
/* terminator */
{}
/* terminator */
};
};
static
struct
hda_verb
cmi9880_allout_init
[]
=
{
static
const
struct
hda_verb
cmi9880_allout_init
[]
=
{
/* port-D for line out (rear panel) */
/* port-D for line out (rear panel) */
{
0x0b
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_HP
},
{
0x0b
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_HP
},
/* port-E for HP out (front panel) */
/* port-E for HP out (front panel) */
...
@@ -528,7 +528,7 @@ static int cmi9880_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
...
@@ -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
,
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_min
=
2
,
.
channels_max
=
8
,
.
channels_max
=
8
,
...
@@ -540,7 +540,7 @@ static struct hda_pcm_stream cmi9880_pcm_analog_playback = {
...
@@ -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
,
.
substreams
=
2
,
.
channels_min
=
2
,
.
channels_min
=
2
,
.
channels_max
=
2
,
.
channels_max
=
2
,
...
@@ -551,7 +551,7 @@ static struct hda_pcm_stream cmi9880_pcm_analog_capture = {
...
@@ -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
,
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_min
=
2
,
.
channels_max
=
2
,
.
channels_max
=
2
,
...
@@ -563,7 +563,7 @@ static struct hda_pcm_stream cmi9880_pcm_digital_playback = {
...
@@ -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
,
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_min
=
2
,
.
channels_max
=
2
,
.
channels_max
=
2
,
...
@@ -617,14 +617,14 @@ static const char * const cmi9880_models[CMI_MODELS] = {
...
@@ -617,14 +617,14 @@ static const char * const cmi9880_models[CMI_MODELS] = {
[
CMI_AUTO
]
=
"auto"
,
[
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
(
0x1043
,
0x813d
,
"ASUS P5AD2"
,
CMI_FULL_DIG
),
SND_PCI_QUIRK
(
0x1854
,
0x002b
,
"LG LS75"
,
CMI_MINIMAL
),
SND_PCI_QUIRK
(
0x1854
,
0x002b
,
"LG LS75"
,
CMI_MINIMAL
),
SND_PCI_QUIRK
(
0x1854
,
0x0032
,
"LG"
,
CMI_FULL_DIG
),
SND_PCI_QUIRK
(
0x1854
,
0x0032
,
"LG"
,
CMI_FULL_DIG
),
{}
/* terminator */
{}
/* terminator */
};
};
static
struct
hda_codec_ops
cmi9880_patch_ops
=
{
static
const
struct
hda_codec_ops
cmi9880_patch_ops
=
{
.
build_controls
=
cmi9880_build_controls
,
.
build_controls
=
cmi9880_build_controls
,
.
build_pcms
=
cmi9880_build_pcms
,
.
build_pcms
=
cmi9880_build_pcms
,
.
init
=
cmi9880_init
,
.
init
=
cmi9880_init
,
...
@@ -745,7 +745,7 @@ static int patch_cmi9880(struct hda_codec *codec)
...
@@ -745,7 +745,7 @@ static int patch_cmi9880(struct hda_codec *codec)
/*
/*
* patch entries
* 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
=
0x13f69880
,
.
name
=
"CMI9880"
,
.
patch
=
patch_cmi9880
},
{
.
id
=
0x434d4980
,
.
name
=
"CMI9880"
,
.
patch
=
patch_cmi9880
},
{
.
id
=
0x434d4980
,
.
name
=
"CMI9880"
,
.
patch
=
patch_cmi9880
},
{}
/* terminator */
{}
/* terminator */
...
...
sound/pci/hda/patch_conexant.c
View file @
f686c74c
This diff is collapsed.
Click to expand it.
sound/pci/hda/patch_hdmi.c
View file @
f686c74c
...
@@ -33,6 +33,7 @@
...
@@ -33,6 +33,7 @@
#include <linux/slab.h>
#include <linux/slab.h>
#include <linux/moduleparam.h>
#include <linux/moduleparam.h>
#include <sound/core.h>
#include <sound/core.h>
#include <sound/jack.h>
#include "hda_codec.h"
#include "hda_codec.h"
#include "hda_local.h"
#include "hda_local.h"
...
@@ -76,7 +77,7 @@ struct hdmi_spec {
...
@@ -76,7 +77,7 @@ struct hdmi_spec {
* ati/nvhdmi specific
* ati/nvhdmi specific
*/
*/
struct
hda_multi_out
multiout
;
struct
hda_multi_out
multiout
;
struct
hda_pcm_stream
*
pcm_playback
;
const
struct
hda_pcm_stream
*
pcm_playback
;
/* misc flags */
/* misc flags */
/* PD bit indicates only the update, not the current state */
/* 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)
...
@@ -720,6 +721,8 @@ static void hdmi_intrinsic_event(struct hda_codec *codec, unsigned int res)
&
spec
->
sink_eld
[
index
]);
&
spec
->
sink_eld
[
index
]);
/* TODO: do real things about ELD */
/* 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
)
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,
...
@@ -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
)
static
int
hdmi_add_pin
(
struct
hda_codec
*
codec
,
hda_nid_t
pin_nid
)
{
{
struct
hdmi_spec
*
spec
=
codec
->
spec
;
struct
hdmi_spec
*
spec
=
codec
->
spec
;
int
err
;
if
(
spec
->
num_pins
>=
MAX_HDMI_PINS
)
{
if
(
spec
->
num_pins
>=
MAX_HDMI_PINS
)
{
snd_printk
(
KERN_WARNING
snd_printk
(
KERN_WARNING
...
@@ -919,6 +923,12 @@ static int hdmi_add_pin(struct hda_codec *codec, hda_nid_t pin_nid)
...
@@ -919,6 +923,12 @@ static int hdmi_add_pin(struct hda_codec *codec, hda_nid_t pin_nid)
return
-
E2BIG
;
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
]);
hdmi_present_sense
(
codec
,
pin_nid
,
&
spec
->
sink_eld
[
spec
->
num_pins
]);
spec
->
pin
[
spec
->
num_pins
]
=
pin_nid
;
spec
->
pin
[
spec
->
num_pins
]
=
pin_nid
;
...
@@ -1044,7 +1054,7 @@ static int generic_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
...
@@ -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
);
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
,
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_min
=
2
,
.
ops
=
{
.
ops
=
{
...
@@ -1120,11 +1130,12 @@ static void generic_hdmi_free(struct hda_codec *codec)
...
@@ -1120,11 +1130,12 @@ static void generic_hdmi_free(struct hda_codec *codec)
for
(
i
=
0
;
i
<
spec
->
num_pins
;
i
++
)
for
(
i
=
0
;
i
<
spec
->
num_pins
;
i
++
)
snd_hda_eld_proc_free
(
codec
,
&
spec
->
sink_eld
[
i
]);
snd_hda_eld_proc_free
(
codec
,
&
spec
->
sink_eld
[
i
]);
snd_hda_input_jack_free
(
codec
);
kfree
(
spec
);
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
,
.
init
=
generic_hdmi_init
,
.
free
=
generic_hdmi_free
,
.
free
=
generic_hdmi_free
,
.
build_pcms
=
generic_hdmi_build_pcms
,
.
build_pcms
=
generic_hdmi_build_pcms
,
...
@@ -1169,12 +1180,12 @@ static int patch_generic_hdmi(struct hda_codec *codec)
...
@@ -1169,12 +1180,12 @@ static int patch_generic_hdmi(struct hda_codec *codec)
#define nvhdmi_master_con_nid_7x 0x04
#define nvhdmi_master_con_nid_7x 0x04
#define nvhdmi_master_pin_nid_7x 0x05
#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 */
/*front, rear, clfe, rear_surr */
0x6
,
0x8
,
0xa
,
0xc
,
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 */
/* set audio protect on */
{
0x1
,
Nv_VERB_SET_Audio_Protection_On
,
0x1
},
{
0x1
,
Nv_VERB_SET_Audio_Protection_On
,
0x1
},
/* enable digital output on pin widget */
/* enable digital output on pin widget */
...
@@ -1435,7 +1446,7 @@ static int nvhdmi_8ch_7x_pcm_prepare(struct hda_pcm_stream *hinfo,
...
@@ -1435,7 +1446,7 @@ static int nvhdmi_8ch_7x_pcm_prepare(struct hda_pcm_stream *hinfo,
return
0
;
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
,
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_min
=
2
,
.
channels_max
=
8
,
.
channels_max
=
8
,
...
@@ -1450,7 +1461,7 @@ static struct hda_pcm_stream nvhdmi_pcm_playback_8ch_7x = {
...
@@ -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
,
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_min
=
2
,
.
channels_max
=
2
,
.
channels_max
=
2
,
...
@@ -1465,14 +1476,14 @@ static struct hda_pcm_stream nvhdmi_pcm_playback_2ch = {
...
@@ -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_controls
=
generic_hdmi_build_controls
,
.
build_pcms
=
generic_hdmi_build_pcms
,
.
build_pcms
=
generic_hdmi_build_pcms
,
.
init
=
nvhdmi_7x_init
,
.
init
=
nvhdmi_7x_init
,
.
free
=
generic_hdmi_free
,
.
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_controls
=
generic_hdmi_build_controls
,
.
build_pcms
=
generic_hdmi_build_pcms
,
.
build_pcms
=
generic_hdmi_build_pcms
,
.
init
=
nvhdmi_7x_init
,
.
init
=
nvhdmi_7x_init
,
...
@@ -1568,7 +1579,7 @@ static int atihdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
...
@@ -1568,7 +1579,7 @@ static int atihdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
return
0
;
return
0
;
}
}
static
struct
hda_pcm_stream
atihdmi_pcm_digital_playback
=
{
static
const
struct
hda_pcm_stream
atihdmi_pcm_digital_playback
=
{
.
substreams
=
1
,
.
substreams
=
1
,
.
channels_min
=
2
,
.
channels_min
=
2
,
.
channels_max
=
2
,
.
channels_max
=
2
,
...
@@ -1580,7 +1591,7 @@ static struct hda_pcm_stream atihdmi_pcm_digital_playback = {
...
@@ -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 */
/* enable digital output on pin widget */
{
0x03
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_OUT
},
{
0x03
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_OUT
},
{}
/* terminator */
{}
/* terminator */
...
@@ -1599,7 +1610,7 @@ static int atihdmi_init(struct hda_codec *codec)
...
@@ -1599,7 +1610,7 @@ static int atihdmi_init(struct hda_codec *codec)
return
0
;
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_controls
=
generic_hdmi_build_controls
,
.
build_pcms
=
generic_hdmi_build_pcms
,
.
build_pcms
=
generic_hdmi_build_pcms
,
.
init
=
atihdmi_init
,
.
init
=
atihdmi_init
,
...
@@ -1634,7 +1645,7 @@ static int patch_atihdmi(struct hda_codec *codec)
...
@@ -1634,7 +1645,7 @@ static int patch_atihdmi(struct hda_codec *codec)
/*
/*
* patch entries
* 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
=
0x1002793c
,
.
name
=
"RS600 HDMI"
,
.
patch
=
patch_atihdmi
},
{
.
id
=
0x10027919
,
.
name
=
"RS600 HDMI"
,
.
patch
=
patch_atihdmi
},
{
.
id
=
0x10027919
,
.
name
=
"RS600 HDMI"
,
.
patch
=
patch_atihdmi
},
{
.
id
=
0x1002791a
,
.
name
=
"RS690/780 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[] = {
...
@@ -1677,6 +1688,7 @@ static struct hda_codec_preset snd_hda_preset_hdmi[] = {
{
.
id
=
0x80862803
,
.
name
=
"Eaglelake HDMI"
,
.
patch
=
patch_generic_hdmi
},
{
.
id
=
0x80862803
,
.
name
=
"Eaglelake HDMI"
,
.
patch
=
patch_generic_hdmi
},
{
.
id
=
0x80862804
,
.
name
=
"IbexPeak HDMI"
,
.
patch
=
patch_generic_hdmi
},
{
.
id
=
0x80862804
,
.
name
=
"IbexPeak HDMI"
,
.
patch
=
patch_generic_hdmi
},
{
.
id
=
0x80862805
,
.
name
=
"CougarPoint 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
},
{
.
id
=
0x808629fb
,
.
name
=
"Crestline HDMI"
,
.
patch
=
patch_generic_hdmi
},
{}
/* terminator */
{}
/* terminator */
};
};
...
@@ -1722,6 +1734,7 @@ MODULE_ALIAS("snd-hda-codec-id:80862802");
...
@@ -1722,6 +1734,7 @@ MODULE_ALIAS("snd-hda-codec-id:80862802");
MODULE_ALIAS
(
"snd-hda-codec-id:80862803"
);
MODULE_ALIAS
(
"snd-hda-codec-id:80862803"
);
MODULE_ALIAS
(
"snd-hda-codec-id:80862804"
);
MODULE_ALIAS
(
"snd-hda-codec-id:80862804"
);
MODULE_ALIAS
(
"snd-hda-codec-id:80862805"
);
MODULE_ALIAS
(
"snd-hda-codec-id:80862805"
);
MODULE_ALIAS
(
"snd-hda-codec-id:80862806"
);
MODULE_ALIAS
(
"snd-hda-codec-id:808629fb"
);
MODULE_ALIAS
(
"snd-hda-codec-id:808629fb"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
...
...
sound/pci/hda/patch_realtek.c
View file @
f686c74c
This diff is collapsed.
Click to expand it.
sound/pci/hda/patch_si3054.c
View file @
f686c74c
...
@@ -130,7 +130,7 @@ static int si3054_switch_put(struct snd_kcontrol *kcontrol,
...
@@ -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
(
"Off-hook Switch"
,
SI3054_GPIO_CONTROL
,
SI3054_GPIO_OH
),
SI3054_KCONTROL
(
"Caller ID Switch"
,
SI3054_GPIO_CONTROL
,
SI3054_GPIO_CID
),
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,
...
@@ -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
,
.
substreams
=
1
,
.
channels_min
=
1
,
.
channels_min
=
1
,
.
channels_max
=
1
,
.
channels_max
=
1
,
...
@@ -200,12 +200,13 @@ static int si3054_build_pcms(struct hda_codec *codec)
...
@@ -200,12 +200,13 @@ static int si3054_build_pcms(struct hda_codec *codec)
{
{
struct
si3054_spec
*
spec
=
codec
->
spec
;
struct
si3054_spec
*
spec
=
codec
->
spec
;
struct
hda_pcm
*
info
=
&
spec
->
pcm
;
struct
hda_pcm
*
info
=
&
spec
->
pcm
;
si3054_pcm
.
nid
=
codec
->
mfg
;
codec
->
num_pcms
=
1
;
codec
->
num_pcms
=
1
;
codec
->
pcm_info
=
info
;
codec
->
pcm_info
=
info
;
info
->
name
=
"Si3054 Modem"
;
info
->
name
=
"Si3054 Modem"
;
info
->
stream
[
SNDRV_PCM_STREAM_PLAYBACK
]
=
si3054_pcm
;
info
->
stream
[
SNDRV_PCM_STREAM_PLAYBACK
]
=
si3054_pcm
;
info
->
stream
[
SNDRV_PCM_STREAM_CAPTURE
]
=
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
;
info
->
pcm_type
=
HDA_PCM_TYPE_MODEM
;
return
0
;
return
0
;
}
}
...
@@ -263,7 +264,7 @@ static void si3054_free(struct hda_codec *codec)
...
@@ -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_controls
=
si3054_build_controls
,
.
build_pcms
=
si3054_build_pcms
,
.
build_pcms
=
si3054_build_pcms
,
.
init
=
si3054_init
,
.
init
=
si3054_init
,
...
@@ -283,7 +284,7 @@ static int patch_si3054(struct hda_codec *codec)
...
@@ -283,7 +284,7 @@ static int patch_si3054(struct hda_codec *codec)
/*
/*
* patch entries
* 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
=
0x163c3055
,
.
name
=
"Si3054"
,
.
patch
=
patch_si3054
},
{
.
id
=
0x163c3155
,
.
name
=
"Si3054"
,
.
patch
=
patch_si3054
},
{
.
id
=
0x163c3155
,
.
name
=
"Si3054"
,
.
patch
=
patch_si3054
},
{
.
id
=
0x11c13026
,
.
name
=
"Si3054"
,
.
patch
=
patch_si3054
},
{
.
id
=
0x11c13026
,
.
name
=
"Si3054"
,
.
patch
=
patch_si3054
},
...
...
sound/pci/hda/patch_sigmatel.c
View file @
f686c74c
This diff is collapsed.
Click to expand it.
sound/pci/hda/patch_via.c
View file @
f686c74c
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment