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
Kirill Smelkov
linux
Commits
5431427b
Commit
5431427b
authored
Sep 10, 2010
by
Takashi Iwai
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'fix/hda' into for-linus
parents
a7a13d06
122661b6
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
111 additions
and
1 deletion
+111
-1
Documentation/sound/alsa/HD-Audio-Models.txt
Documentation/sound/alsa/HD-Audio-Models.txt
+1
-0
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_codec.c
+1
-1
sound/pci/hda/patch_cirrus.c
sound/pci/hda/patch_cirrus.c
+50
-0
sound/pci/hda/patch_conexant.c
sound/pci/hda/patch_conexant.c
+58
-0
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+1
-0
No files found.
Documentation/sound/alsa/HD-Audio-Models.txt
View file @
5431427b
...
...
@@ -296,6 +296,7 @@ Conexant 5051
Conexant 5066
=============
laptop Basic Laptop config (default)
hp-laptop HP laptops, e g G60
dell-laptop Dell laptops
dell-vostro Dell Vostro
olpc-xo-1_5 OLPC XO 1.5
...
...
sound/pci/hda/hda_codec.c
View file @
5431427b
...
...
@@ -4536,7 +4536,7 @@ int snd_hda_parse_pin_def_config(struct hda_codec *codec,
cfg
->
hp_outs
--
;
memmove
(
cfg
->
hp_pins
+
i
,
cfg
->
hp_pins
+
i
+
1
,
sizeof
(
cfg
->
hp_pins
[
0
])
*
(
cfg
->
hp_outs
-
i
));
memmove
(
sequences_hp
+
i
-
1
,
sequences_hp
+
i
,
memmove
(
sequences_hp
+
i
,
sequences_hp
+
i
+
1
,
sizeof
(
sequences_hp
[
0
])
*
(
cfg
->
hp_outs
-
i
));
}
}
...
...
sound/pci/hda/patch_cirrus.c
View file @
5431427b
...
...
@@ -972,6 +972,53 @@ static struct hda_verb cs_coef_init_verbs[] = {
{}
/* terminator */
};
/* Errata: CS4207 rev C0/C1/C2 Silicon
*
* http://www.cirrus.com/en/pubs/errata/ER880C3.pdf
*
* 6. At high temperature (TA > +85°C), the digital supply current (IVD)
* may be excessive (up to an additional 200 μA), which is most easily
* observed while the part is being held in reset (RESET# active low).
*
* Root Cause: At initial powerup of the device, the logic that drives
* the clock and write enable to the S/PDIF SRC RAMs is not properly
* initialized.
* Certain random patterns will cause a steady leakage current in those
* RAM cells. The issue will resolve once the SRCs are used (turned on).
*
* Workaround: The following verb sequence briefly turns on the S/PDIF SRC
* blocks, which will alleviate the issue.
*/
static
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 */
{
0x11
,
AC_VERB_SET_COEF_INDEX
,
0x0008
},
{
0x11
,
AC_VERB_SET_PROC_COEF
,
0x9999
},
{
0x11
,
AC_VERB_SET_COEF_INDEX
,
0x0017
},
{
0x11
,
AC_VERB_SET_PROC_COEF
,
0xa412
},
{
0x11
,
AC_VERB_SET_COEF_INDEX
,
0x0001
},
{
0x11
,
AC_VERB_SET_PROC_COEF
,
0x0009
},
{
0x07
,
AC_VERB_SET_POWER_STATE
,
0x00
},
/* S/PDIF Rx: D0 */
{
0x08
,
AC_VERB_SET_POWER_STATE
,
0x00
},
/* S/PDIF Tx: D0 */
{
0x11
,
AC_VERB_SET_COEF_INDEX
,
0x0017
},
{
0x11
,
AC_VERB_SET_PROC_COEF
,
0x2412
},
{
0x11
,
AC_VERB_SET_COEF_INDEX
,
0x0008
},
{
0x11
,
AC_VERB_SET_PROC_COEF
,
0x0000
},
{
0x11
,
AC_VERB_SET_COEF_INDEX
,
0x0001
},
{
0x11
,
AC_VERB_SET_PROC_COEF
,
0x0008
},
{
0x11
,
AC_VERB_SET_PROC_STATE
,
0x00
},
{
0x07
,
AC_VERB_SET_POWER_STATE
,
0x03
},
/* S/PDIF Rx: D3 */
{
0x08
,
AC_VERB_SET_POWER_STATE
,
0x03
},
/* S/PDIF Tx: D3 */
/*{0x01, AC_VERB_SET_POWER_STATE, 0x03},*/
/* AFG: D3 This is already handled */
{}
/* terminator */
};
/* SPDIF setup */
static
void
init_digital
(
struct
hda_codec
*
codec
)
{
...
...
@@ -991,6 +1038,9 @@ static int cs_init(struct hda_codec *codec)
{
struct
cs_spec
*
spec
=
codec
->
spec
;
/* init_verb sequence for C0/C1/C2 errata*/
snd_hda_sequence_write
(
codec
,
cs_errata_init_verbs
);
snd_hda_sequence_write
(
codec
,
cs_coef_init_verbs
);
if
(
spec
->
gpio_mask
)
{
...
...
sound/pci/hda/patch_conexant.c
View file @
5431427b
...
...
@@ -116,6 +116,7 @@ struct conexant_spec {
unsigned
int
dell_vostro
:
1
;
unsigned
int
ideapad
:
1
;
unsigned
int
thinkpad
:
1
;
unsigned
int
hp_laptop
:
1
;
unsigned
int
ext_mic_present
;
unsigned
int
recording
;
...
...
@@ -2299,6 +2300,18 @@ static void cxt5066_ideapad_automic(struct hda_codec *codec)
}
}
/* toggle input of built-in digital mic and mic jack appropriately */
static
void
cxt5066_hp_laptop_automic
(
struct
hda_codec
*
codec
)
{
unsigned
int
present
;
present
=
snd_hda_jack_detect
(
codec
,
0x1b
);
snd_printdd
(
"CXT5066: external microphone present=%d
\n
"
,
present
);
snd_hda_codec_write
(
codec
,
0x17
,
0
,
AC_VERB_SET_CONNECT_SEL
,
present
?
1
:
3
);
}
/* toggle input of built-in digital mic and mic jack appropriately
order is: external mic -> dock mic -> interal mic */
static
void
cxt5066_thinkpad_automic
(
struct
hda_codec
*
codec
)
...
...
@@ -2407,6 +2420,20 @@ static void cxt5066_ideapad_event(struct hda_codec *codec, unsigned int res)
}
}
/* unsolicited event for jack sensing */
static
void
cxt5066_hp_laptop_event
(
struct
hda_codec
*
codec
,
unsigned
int
res
)
{
snd_printdd
(
"CXT5066_hp_laptop: unsol event %x (%x)
\n
"
,
res
,
res
>>
26
);
switch
(
res
>>
26
)
{
case
CONEXANT_HP_EVENT
:
cxt5066_hp_automute
(
codec
);
break
;
case
CONEXANT_MIC_EVENT
:
cxt5066_hp_laptop_automic
(
codec
);
break
;
}
}
/* unsolicited event for jack sensing */
static
void
cxt5066_thinkpad_event
(
struct
hda_codec
*
codec
,
unsigned
int
res
)
{
...
...
@@ -2989,6 +3016,14 @@ static struct hda_verb cxt5066_init_verbs_portd_lo[] = {
{
}
/* end */
};
static
struct
hda_verb
cxt5066_init_verbs_hp_laptop
[]
=
{
{
0x14
,
AC_VERB_SET_CONNECT_SEL
,
0x0
},
{
0x19
,
AC_VERB_SET_UNSOLICITED_ENABLE
,
AC_USRSP_EN
|
CONEXANT_HP_EVENT
},
{
0x1b
,
AC_VERB_SET_UNSOLICITED_ENABLE
,
AC_USRSP_EN
|
CONEXANT_MIC_EVENT
},
{
}
/* end */
};
/* initialize jack-sensing, too */
static
int
cxt5066_init
(
struct
hda_codec
*
codec
)
{
...
...
@@ -3004,6 +3039,8 @@ static int cxt5066_init(struct hda_codec *codec)
cxt5066_ideapad_automic
(
codec
);
else
if
(
spec
->
thinkpad
)
cxt5066_thinkpad_automic
(
codec
);
else
if
(
spec
->
hp_laptop
)
cxt5066_hp_laptop_automic
(
codec
);
}
cxt5066_set_mic_boost
(
codec
);
return
0
;
...
...
@@ -3031,6 +3068,7 @@ enum {
CXT5066_DELL_VOSTO
,
/* Dell Vostro 1015i */
CXT5066_IDEAPAD
,
/* Lenovo IdeaPad U150 */
CXT5066_THINKPAD
,
/* Lenovo ThinkPad T410s, others? */
CXT5066_HP_LAPTOP
,
/* HP Laptop */
CXT5066_MODELS
};
...
...
@@ -3041,6 +3079,7 @@ static const char *cxt5066_models[CXT5066_MODELS] = {
[
CXT5066_DELL_VOSTO
]
=
"dell-vostro"
,
[
CXT5066_IDEAPAD
]
=
"ideapad"
,
[
CXT5066_THINKPAD
]
=
"thinkpad"
,
[
CXT5066_HP_LAPTOP
]
=
"hp-laptop"
,
};
static
struct
snd_pci_quirk
cxt5066_cfg_tbl
[]
=
{
...
...
@@ -3052,8 +3091,10 @@ static struct snd_pci_quirk cxt5066_cfg_tbl[] = {
SND_PCI_QUIRK
(
0x1028
,
0x02d8
,
"Dell Vostro"
,
CXT5066_DELL_VOSTO
),
SND_PCI_QUIRK
(
0x1028
,
0x0402
,
"Dell Vostro"
,
CXT5066_DELL_VOSTO
),
SND_PCI_QUIRK
(
0x1028
,
0x0408
,
"Dell Inspiron One 19T"
,
CXT5066_IDEAPAD
),
SND_PCI_QUIRK
(
0x103c
,
0x360b
,
"HP G60"
,
CXT5066_HP_LAPTOP
),
SND_PCI_QUIRK
(
0x1179
,
0xff50
,
"Toshiba Satellite P500-PSPGSC-01800T"
,
CXT5066_OLPC_XO_1_5
),
SND_PCI_QUIRK
(
0x1179
,
0xffe0
,
"Toshiba Satellite Pro T130-15F"
,
CXT5066_OLPC_XO_1_5
),
SND_PCI_QUIRK
(
0x17aa
,
0x20f2
,
"Lenovo T400s"
,
CXT5066_THINKPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x21b2
,
"Thinkpad X100e"
,
CXT5066_IDEAPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x21b3
,
"Thinkpad Edge 13 (197)"
,
CXT5066_IDEAPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x21b4
,
"Thinkpad Edge"
,
CXT5066_IDEAPAD
),
...
...
@@ -3116,6 +3157,23 @@ static int patch_cxt5066(struct hda_codec *codec)
spec
->
num_init_verbs
++
;
spec
->
dell_automute
=
1
;
break
;
case
CXT5066_HP_LAPTOP
:
codec
->
patch_ops
.
init
=
cxt5066_init
;
codec
->
patch_ops
.
unsol_event
=
cxt5066_hp_laptop_event
;
spec
->
init_verbs
[
spec
->
num_init_verbs
]
=
cxt5066_init_verbs_hp_laptop
;
spec
->
num_init_verbs
++
;
spec
->
hp_laptop
=
1
;
spec
->
mixers
[
spec
->
num_mixers
++
]
=
cxt5066_mixer_master
;
spec
->
mixers
[
spec
->
num_mixers
++
]
=
cxt5066_mixers
;
/* no S/PDIF out */
spec
->
multiout
.
dig_out_nid
=
0
;
/* input source automatically selected */
spec
->
input_mux
=
NULL
;
spec
->
port_d_mode
=
0
;
spec
->
mic_boost
=
3
;
/* default 30dB gain */
break
;
case
CXT5066_OLPC_XO_1_5
:
codec
->
patch_ops
.
init
=
cxt5066_olpc_init
;
codec
->
patch_ops
.
unsol_event
=
cxt5066_olpc_unsol_event
;
...
...
sound/pci/hda/patch_realtek.c
View file @
5431427b
...
...
@@ -5334,6 +5334,7 @@ static void fillup_priv_adc_nids(struct hda_codec *codec, hda_nid_t *nids,
static
struct
snd_pci_quirk
beep_white_list
[]
=
{
SND_PCI_QUIRK
(
0x1043
,
0x829f
,
"ASUS"
,
1
),
SND_PCI_QUIRK
(
0x1043
,
0x83ce
,
"EeePC"
,
1
),
SND_PCI_QUIRK
(
0x8086
,
0xd613
,
"Intel"
,
1
),
{}
};
...
...
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