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
c400c9e2
Commit
c400c9e2
authored
Jan 13, 2011
by
Takashi Iwai
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'topic/hda' into for-linus
parents
e38302f7
80c67852
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
549 additions
and
437 deletions
+549
-437
Documentation/sound/alsa/HD-Audio-Models.txt
Documentation/sound/alsa/HD-Audio-Models.txt
+0
-1
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_codec.c
+3
-0
sound/pci/hda/patch_analog.c
sound/pci/hda/patch_analog.c
+36
-36
sound/pci/hda/patch_conexant.c
sound/pci/hda/patch_conexant.c
+53
-55
sound/pci/hda/patch_hdmi.c
sound/pci/hda/patch_hdmi.c
+81
-11
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+363
-330
sound/pci/hda/patch_sigmatel.c
sound/pci/hda/patch_sigmatel.c
+13
-4
No files found.
Documentation/sound/alsa/HD-Audio-Models.txt
View file @
c400c9e2
...
...
@@ -149,7 +149,6 @@ ALC882/883/885/888/889
acer-aspire-7730g Acer Aspire 7730G
acer-aspire-8930g Acer Aspire 8930G
medion Medion Laptops
medion-md2 Medion MD2
targa-dig Targa/MSI
targa-2ch-dig Targa/MSI with 2-channel
targa-8ch-dig Targa/MSI with 8-channel (MSI GX620)
...
...
sound/pci/hda/hda_codec.c
View file @
c400c9e2
...
...
@@ -4571,6 +4571,9 @@ int snd_hda_parse_pin_def_config(struct hda_codec *codec,
}
memset
(
cfg
->
hp_pins
+
cfg
->
hp_outs
,
0
,
sizeof
(
hda_nid_t
)
*
(
AUTO_CFG_MAX_OUTS
-
cfg
->
hp_outs
));
if
(
!
cfg
->
hp_outs
)
cfg
->
line_out_type
=
AUTO_PIN_HP_OUT
;
}
/* sort by sequence */
...
...
sound/pci/hda/patch_analog.c
View file @
c400c9e2
This diff is collapsed.
Click to expand it.
sound/pci/hda/patch_conexant.c
View file @
c400c9e2
This diff is collapsed.
Click to expand it.
sound/pci/hda/patch_hdmi.c
View file @
c400c9e2
...
...
@@ -31,10 +31,15 @@
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/slab.h>
#include <linux/moduleparam.h>
#include <sound/core.h>
#include "hda_codec.h"
#include "hda_local.h"
static
bool
static_hdmi_pcm
;
module_param
(
static_hdmi_pcm
,
bool
,
0644
);
MODULE_PARM_DESC
(
static_hdmi_pcm
,
"Don't restrict PCM parameters per ELD info"
);
/*
* The HDMI/DisplayPort configuration can be highly dynamic. A graphics device
* could support two independent pipes, each of them can be connected to one or
...
...
@@ -827,7 +832,7 @@ static int hdmi_pcm_open(struct hda_pcm_stream *hinfo,
*
codec_pars
=
*
hinfo
;
eld
=
&
spec
->
sink_eld
[
idx
];
if
(
eld
->
sad_count
>
0
)
{
if
(
!
static_hdmi_pcm
&&
eld
->
eld_valid
&&
eld
->
sad_count
>
0
)
{
hdmi_eld_update_pcm_info
(
eld
,
hinfo
,
codec_pars
);
if
(
hinfo
->
channels_min
>
hinfo
->
channels_max
||
!
hinfo
->
rates
||
!
hinfo
->
formats
)
...
...
@@ -904,23 +909,28 @@ static int hdmi_add_pin(struct hda_codec *codec, hda_nid_t pin_nid)
spec
->
pin
[
spec
->
num_pins
]
=
pin_nid
;
spec
->
num_pins
++
;
/*
* It is assumed that converter nodes come first in the node list and
* hence have been registered and usable now.
*/
return
hdmi_read_pin_conn
(
codec
,
pin_nid
);
}
static
int
hdmi_add_cvt
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
)
{
int
i
,
found_pin
=
0
;
struct
hdmi_spec
*
spec
=
codec
->
spec
;
if
(
spec
->
num_cvts
>=
MAX_HDMI_CVTS
)
{
snd_printk
(
KERN_WARNING
"HDMI: no space for converter %d
\n
"
,
nid
);
return
-
E2BIG
;
for
(
i
=
0
;
i
<
spec
->
num_pins
;
i
++
)
if
(
nid
==
spec
->
pin_cvt
[
i
])
{
found_pin
=
1
;
break
;
}
if
(
!
found_pin
)
{
snd_printdd
(
"HDMI: Skipping node %d (no connection)
\n
"
,
nid
);
return
-
EINVAL
;
}
if
(
snd_BUG_ON
(
spec
->
num_cvts
>=
MAX_HDMI_CVTS
))
return
-
E2BIG
;
spec
->
cvt
[
spec
->
num_cvts
]
=
nid
;
spec
->
num_cvts
++
;
...
...
@@ -931,6 +941,8 @@ static int hdmi_parse_codec(struct hda_codec *codec)
{
hda_nid_t
nid
;
int
i
,
nodes
;
int
num_tmp_cvts
=
0
;
hda_nid_t
tmp_cvt
[
MAX_HDMI_CVTS
];
nodes
=
snd_hda_get_sub_nodes
(
codec
,
codec
->
afg
,
&
nid
);
if
(
!
nid
||
nodes
<
0
)
{
...
...
@@ -941,6 +953,7 @@ static int hdmi_parse_codec(struct hda_codec *codec)
for
(
i
=
0
;
i
<
nodes
;
i
++
,
nid
++
)
{
unsigned
int
caps
;
unsigned
int
type
;
unsigned
int
config
;
caps
=
snd_hda_param_read
(
codec
,
nid
,
AC_PAR_AUDIO_WIDGET_CAP
);
type
=
get_wcaps_type
(
caps
);
...
...
@@ -950,17 +963,32 @@ static int hdmi_parse_codec(struct hda_codec *codec)
switch
(
type
)
{
case
AC_WID_AUD_OUT
:
hdmi_add_cvt
(
codec
,
nid
);
if
(
num_tmp_cvts
>=
MAX_HDMI_CVTS
)
{
snd_printk
(
KERN_WARNING
"HDMI: no space for converter %d
\n
"
,
nid
);
continue
;
}
tmp_cvt
[
num_tmp_cvts
]
=
nid
;
num_tmp_cvts
++
;
break
;
case
AC_WID_PIN
:
caps
=
snd_hda_param_read
(
codec
,
nid
,
AC_PAR_PIN_CAP
);
if
(
!
(
caps
&
(
AC_PINCAP_HDMI
|
AC_PINCAP_DP
)))
continue
;
config
=
snd_hda_codec_read
(
codec
,
nid
,
0
,
AC_VERB_GET_CONFIG_DEFAULT
,
0
);
if
(
get_defcfg_connect
(
config
)
==
AC_JACK_PORT_NONE
)
continue
;
hdmi_add_pin
(
codec
,
nid
);
break
;
}
}
for
(
i
=
0
;
i
<
num_tmp_cvts
;
i
++
)
hdmi_add_cvt
(
codec
,
tmp_cvt
[
i
]);
/*
* G45/IbexPeak don't support EPSS: the unsolicited pin hot plug event
* can be lost and presence sense verb will become inaccurate if the
...
...
@@ -1165,11 +1193,53 @@ static int nvhdmi_7x_init(struct hda_codec *codec)
return
0
;
}
static
unsigned
int
channels_2_6_8
[]
=
{
2
,
6
,
8
};
static
unsigned
int
channels_2_8
[]
=
{
2
,
8
};
static
struct
snd_pcm_hw_constraint_list
hw_constraints_2_6_8_channels
=
{
.
count
=
ARRAY_SIZE
(
channels_2_6_8
),
.
list
=
channels_2_6_8
,
.
mask
=
0
,
};
static
struct
snd_pcm_hw_constraint_list
hw_constraints_2_8_channels
=
{
.
count
=
ARRAY_SIZE
(
channels_2_8
),
.
list
=
channels_2_8
,
.
mask
=
0
,
};
static
int
simple_playback_pcm_open
(
struct
hda_pcm_stream
*
hinfo
,
struct
hda_codec
*
codec
,
struct
snd_pcm_substream
*
substream
)
{
struct
hdmi_spec
*
spec
=
codec
->
spec
;
struct
snd_pcm_hw_constraint_list
*
hw_constraints_channels
=
NULL
;
switch
(
codec
->
preset
->
id
)
{
case
0x10de0002
:
case
0x10de0003
:
case
0x10de0005
:
case
0x10de0006
:
hw_constraints_channels
=
&
hw_constraints_2_8_channels
;
break
;
case
0x10de0007
:
hw_constraints_channels
=
&
hw_constraints_2_6_8_channels
;
break
;
default:
break
;
}
if
(
hw_constraints_channels
!=
NULL
)
{
snd_pcm_hw_constraint_list
(
substream
->
runtime
,
0
,
SNDRV_PCM_HW_PARAM_CHANNELS
,
hw_constraints_channels
);
}
return
snd_hda_multi_out_dig_open
(
codec
,
&
spec
->
multiout
);
}
...
...
@@ -1532,7 +1602,7 @@ static 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
},
{
.
id
=
0x1002aa01
,
.
name
=
"R6xx HDMI"
,
.
patch
=
patch_
ati
hdmi
},
{
.
id
=
0x1002aa01
,
.
name
=
"R6xx HDMI"
,
.
patch
=
patch_
generic_
hdmi
},
{
.
id
=
0x10951390
,
.
name
=
"SiI1390 HDMI"
,
.
patch
=
patch_generic_hdmi
},
{
.
id
=
0x10951392
,
.
name
=
"SiI1392 HDMI"
,
.
patch
=
patch_generic_hdmi
},
{
.
id
=
0x17e80047
,
.
name
=
"Chrontel HDMI"
,
.
patch
=
patch_generic_hdmi
},
...
...
sound/pci/hda/patch_realtek.c
View file @
c400c9e2
This diff is collapsed.
Click to expand it.
sound/pci/hda/patch_sigmatel.c
View file @
c400c9e2
...
...
@@ -389,6 +389,9 @@ static hda_nid_t stac92hd83xxx_dmic_nids[STAC92HD83XXX_NUM_DMICS + 1] = {
0x11
,
0x20
,
0
};
#define STAC92HD88XXX_NUM_DMICS STAC92HD83XXX_NUM_DMICS
#define stac92hd88xxx_dmic_nids stac92hd83xxx_dmic_nids
#define STAC92HD87B_NUM_DMICS 1
static
hda_nid_t
stac92hd87b_dmic_nids
[
STAC92HD87B_NUM_DMICS
+
1
]
=
{
0x11
,
0
...
...
@@ -3591,7 +3594,7 @@ static int stac_check_auto_mic(struct hda_codec *codec)
if
(
check_mic_pin
(
codec
,
spec
->
dmic_nids
[
i
],
&
fixed
,
&
ext
,
&
dock
))
return
0
;
if
(
!
fixed
&&
!
ext
&&
!
dock
)
if
(
!
fixed
||
(
!
ext
&&
!
dock
)
)
return
0
;
/* no input to switch */
if
(
!
(
get_wcaps
(
codec
,
ext
)
&
AC_WCAP_UNSOL_CAP
))
return
0
;
/* no unsol support */
...
...
@@ -5422,7 +5425,7 @@ static int patch_stac92hd83xxx(struct hda_codec *codec)
snd_hda_codec_write_cache
(
codec
,
codec
->
afg
,
0
,
0x7ED
,
0
);
codec
->
no_trigger_sense
=
1
;
codec
->
spec
=
spec
;
spec
->
linear_tone_beep
=
1
;
spec
->
linear_tone_beep
=
0
;
codec
->
slave_dig_outs
=
stac92hd83xxx_slave_dig_outs
;
spec
->
digbeep_nid
=
0x21
;
spec
->
dmic_nids
=
stac92hd83xxx_dmic_nids
;
...
...
@@ -5462,15 +5465,21 @@ static int patch_stac92hd83xxx(struct hda_codec *codec)
spec
->
num_dmics
=
stac92xx_connected_ports
(
codec
,
stac92hd87b_dmic_nids
,
STAC92HD87B_NUM_DMICS
);
/* Fall through */
spec
->
num_pins
=
ARRAY_SIZE
(
stac92hd88xxx_pin_nids
);
spec
->
pin_nids
=
stac92hd88xxx_pin_nids
;
spec
->
mono_nid
=
0
;
spec
->
num_pwrs
=
0
;
break
;
case
0x111d7666
:
case
0x111d7667
:
case
0x111d7668
:
case
0x111d7669
:
spec
->
num_dmics
=
stac92xx_connected_ports
(
codec
,
stac92hd88xxx_dmic_nids
,
STAC92HD88XXX_NUM_DMICS
);
spec
->
num_pins
=
ARRAY_SIZE
(
stac92hd88xxx_pin_nids
);
spec
->
pin_nids
=
stac92hd88xxx_pin_nids
;
spec
->
mono_nid
=
0
;
spec
->
digbeep_nid
=
0
;
spec
->
num_pwrs
=
0
;
break
;
case
0x111d7604
:
...
...
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