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
76934575
Commit
76934575
authored
Dec 23, 2010
by
Takashi Iwai
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'fix/hda' into for-linus
parents
5058cbf2
7039c74c
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
71 additions
and
48 deletions
+71
-48
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_codec.c
+34
-23
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+35
-22
sound/pci/hda/patch_sigmatel.c
sound/pci/hda/patch_sigmatel.c
+2
-3
No files found.
sound/pci/hda/hda_codec.c
View file @
76934575
...
...
@@ -1919,6 +1919,16 @@ struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
}
EXPORT_SYMBOL_HDA
(
snd_hda_find_mixer_ctl
);
static
int
find_empty_mixer_ctl_idx
(
struct
hda_codec
*
codec
,
const
char
*
name
)
{
int
idx
;
for
(
idx
=
0
;
idx
<
16
;
idx
++
)
{
/* 16 ctlrs should be large enough */
if
(
!
_snd_hda_find_mixer_ctl
(
codec
,
name
,
idx
))
return
idx
;
}
return
-
EBUSY
;
}
/**
* snd_hda_ctl_add - Add a control element and assign to the codec
* @codec: HD-audio codec
...
...
@@ -2654,8 +2664,6 @@ static struct snd_kcontrol_new dig_mixes[] = {
{
}
/* end */
};
#define SPDIF_MAX_IDX 4
/* 4 instances should be enough to probe */
/**
* snd_hda_create_spdif_out_ctls - create Output SPDIF-related controls
* @codec: the HDA codec
...
...
@@ -2673,12 +2681,8 @@ int snd_hda_create_spdif_out_ctls(struct hda_codec *codec, hda_nid_t nid)
struct
snd_kcontrol_new
*
dig_mix
;
int
idx
;
for
(
idx
=
0
;
idx
<
SPDIF_MAX_IDX
;
idx
++
)
{
if
(
!
_snd_hda_find_mixer_ctl
(
codec
,
"IEC958 Playback Switch"
,
idx
))
break
;
}
if
(
idx
>=
SPDIF_MAX_IDX
)
{
idx
=
find_empty_mixer_ctl_idx
(
codec
,
"IEC958 Playback Switch"
);
if
(
idx
<
0
)
{
printk
(
KERN_ERR
"hda_codec: too many IEC958 outputs
\n
"
);
return
-
EBUSY
;
}
...
...
@@ -2829,12 +2833,8 @@ int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid)
struct
snd_kcontrol_new
*
dig_mix
;
int
idx
;
for
(
idx
=
0
;
idx
<
SPDIF_MAX_IDX
;
idx
++
)
{
if
(
!
_snd_hda_find_mixer_ctl
(
codec
,
"IEC958 Capture Switch"
,
idx
))
break
;
}
if
(
idx
>=
SPDIF_MAX_IDX
)
{
idx
=
find_empty_mixer_ctl_idx
(
codec
,
"IEC958 Capture Switch"
);
if
(
idx
<
0
)
{
printk
(
KERN_ERR
"hda_codec: too many IEC958 inputs
\n
"
);
return
-
EBUSY
;
}
...
...
@@ -3808,21 +3808,32 @@ int snd_hda_add_new_ctls(struct hda_codec *codec, struct snd_kcontrol_new *knew)
for
(;
knew
->
name
;
knew
++
)
{
struct
snd_kcontrol
*
kctl
;
int
addr
=
0
,
idx
=
0
;
if
(
knew
->
iface
==
-
1
)
/* skip this codec private value */
continue
;
kctl
=
snd_ctl_new1
(
knew
,
codec
);
if
(
!
kctl
)
return
-
ENOMEM
;
err
=
snd_hda_ctl_add
(
codec
,
0
,
kctl
);
if
(
err
<
0
)
{
if
(
!
codec
->
addr
)
return
err
;
for
(;;)
{
kctl
=
snd_ctl_new1
(
knew
,
codec
);
if
(
!
kctl
)
return
-
ENOMEM
;
kctl
->
id
.
device
=
codec
->
addr
;
if
(
addr
>
0
)
kctl
->
id
.
device
=
addr
;
if
(
idx
>
0
)
kctl
->
id
.
index
=
idx
;
err
=
snd_hda_ctl_add
(
codec
,
0
,
kctl
);
if
(
err
<
0
)
if
(
!
err
)
break
;
/* try first with another device index corresponding to
* the codec addr; if it still fails (or it's the
* primary codec), then try another control index
*/
if
(
!
addr
&&
codec
->
addr
)
addr
=
codec
->
addr
;
else
if
(
!
idx
&&
!
knew
->
index
)
{
idx
=
find_empty_mixer_ctl_idx
(
codec
,
knew
->
name
);
if
(
idx
<=
0
)
return
err
;
}
else
return
err
;
}
}
...
...
sound/pci/hda/patch_realtek.c
View file @
76934575
...
...
@@ -14806,6 +14806,7 @@ static int alc269_resume(struct hda_codec *codec)
enum
{
ALC269_FIXUP_SONY_VAIO
,
ALC275_FIX_SONY_VAIO_GPIO2
,
ALC269_FIXUP_DELL_M101Z
,
ALC269_FIXUP_SKU_IGNORE
,
ALC269_FIXUP_ASUS_G73JW
,
...
...
@@ -14818,6 +14819,14 @@ static const struct alc_fixup alc269_fixups[] = {
{}
}
},
[
ALC275_FIX_SONY_VAIO_GPIO2
]
=
{
.
verbs
=
(
const
struct
hda_verb
[])
{
{
0x01
,
AC_VERB_SET_GPIO_MASK
,
0x04
},
{
0x01
,
AC_VERB_SET_GPIO_DIRECTION
,
0x04
},
{
0x01
,
AC_VERB_SET_GPIO_DATA
,
0x00
},
{
}
}
},
[
ALC269_FIXUP_DELL_M101Z
]
=
{
.
verbs
=
(
const
struct
hda_verb
[])
{
/* Enables internal speaker */
...
...
@@ -14838,6 +14847,9 @@ static const struct alc_fixup alc269_fixups[] = {
};
static
struct
snd_pci_quirk
alc269_fixup_tbl
[]
=
{
SND_PCI_QUIRK
(
0x104d
,
0x9073
,
"Sony VAIO"
,
ALC275_FIX_SONY_VAIO_GPIO2
),
SND_PCI_QUIRK
(
0x104d
,
0x907b
,
"Sony VAIO"
,
ALC275_FIX_SONY_VAIO_GPIO2
),
SND_PCI_QUIRK
(
0x104d
,
0x9084
,
"Sony VAIO"
,
ALC275_FIX_SONY_VAIO_GPIO2
),
SND_PCI_QUIRK_VENDOR
(
0x104d
,
"Sony VAIO"
,
ALC269_FIXUP_SONY_VAIO
),
SND_PCI_QUIRK
(
0x1028
,
0x0470
,
"Dell M101z"
,
ALC269_FIXUP_DELL_M101Z
),
SND_PCI_QUIRK
(
0x17aa
,
0x21b8
,
"Thinkpad Edge 14"
,
ALC269_FIXUP_SKU_IGNORE
),
...
...
@@ -15092,28 +15104,29 @@ static int patch_alc269(struct hda_codec *codec)
alc_auto_parse_customize_define
(
codec
);
coef
=
alc_read_coef_idx
(
codec
,
0
);
if
((
coef
&
0x00f0
)
==
0x0010
)
{
if
(
codec
->
bus
->
pci
->
subsystem_vendor
==
0x1025
&&
spec
->
cdefine
.
platform_type
==
1
)
{
alc_codec_rename
(
codec
,
"ALC271X"
);
spec
->
codec_variant
=
ALC269_TYPE_ALC271X
;
}
else
if
((
coef
&
0xf000
)
==
0x1000
)
{
spec
->
codec_variant
=
ALC269_TYPE_ALC270
;
}
else
if
((
coef
&
0xf000
)
==
0x2000
)
{
alc_codec_rename
(
codec
,
"ALC259"
);
spec
->
codec_variant
=
ALC269_TYPE_ALC259
;
}
else
if
((
coef
&
0xf000
)
==
0x3000
)
{
alc_codec_rename
(
codec
,
"ALC258"
);
spec
->
codec_variant
=
ALC269_TYPE_ALC258
;
}
else
{
alc_codec_rename
(
codec
,
"ALC269VB"
);
spec
->
codec_variant
=
ALC269_TYPE_ALC269VB
;
}
}
else
alc_fix_pll_init
(
codec
,
0x20
,
0x04
,
15
);
alc269_fill_coef
(
codec
);
if
(
codec
->
vendor_id
==
0x10ec0269
)
{
coef
=
alc_read_coef_idx
(
codec
,
0
);
if
((
coef
&
0x00f0
)
==
0x0010
)
{
if
(
codec
->
bus
->
pci
->
subsystem_vendor
==
0x1025
&&
spec
->
cdefine
.
platform_type
==
1
)
{
alc_codec_rename
(
codec
,
"ALC271X"
);
spec
->
codec_variant
=
ALC269_TYPE_ALC271X
;
}
else
if
((
coef
&
0xf000
)
==
0x1000
)
{
spec
->
codec_variant
=
ALC269_TYPE_ALC270
;
}
else
if
((
coef
&
0xf000
)
==
0x2000
)
{
alc_codec_rename
(
codec
,
"ALC259"
);
spec
->
codec_variant
=
ALC269_TYPE_ALC259
;
}
else
if
((
coef
&
0xf000
)
==
0x3000
)
{
alc_codec_rename
(
codec
,
"ALC258"
);
spec
->
codec_variant
=
ALC269_TYPE_ALC258
;
}
else
{
alc_codec_rename
(
codec
,
"ALC269VB"
);
spec
->
codec_variant
=
ALC269_TYPE_ALC269VB
;
}
}
else
alc_fix_pll_init
(
codec
,
0x20
,
0x04
,
15
);
alc269_fill_coef
(
codec
);
}
board_config
=
snd_hda_check_board_config
(
codec
,
ALC269_MODEL_LAST
,
alc269_models
,
...
...
sound/pci/hda/patch_sigmatel.c
View file @
76934575
...
...
@@ -3481,6 +3481,8 @@ static int stac92xx_auto_create_dmic_input_ctls(struct hda_codec *codec,
label
=
hda_get_input_pin_label
(
codec
,
nid
,
1
);
snd_hda_add_imux_item
(
dimux
,
label
,
index
,
&
type_idx
);
if
(
snd_hda_get_bool_hint
(
codec
,
"separate_dmux"
)
!=
1
)
snd_hda_add_imux_item
(
imux
,
label
,
index
,
&
type_idx
);
err
=
create_elem_capture_vol
(
codec
,
nid
,
label
,
type_idx
,
HDA_INPUT
);
...
...
@@ -3492,9 +3494,6 @@ static int stac92xx_auto_create_dmic_input_ctls(struct hda_codec *codec,
if
(
err
<
0
)
return
err
;
}
if
(
snd_hda_get_bool_hint
(
codec
,
"separate_dmux"
)
!=
1
)
snd_hda_add_imux_item
(
imux
,
label
,
index
,
NULL
);
}
return
0
;
...
...
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