Merge branch 'fix/hda' into for-linus
* fix/hda: ALSA: hda - Set function_id only on FG nodes ALSA: hda - Add upper-limit of mixer amp for AD1884A-laptop model, too ALSA: hda - Fix headphone-detection on some machines with STAC/IDT codecs ALSA: hda_intel.c - Consolidate bitfields
This commit is contained in:
commit
7c4112a285
|
@ -642,19 +642,21 @@ static int get_codec_name(struct hda_codec *codec)
|
|||
*/
|
||||
static void /*__devinit*/ setup_fg_nodes(struct hda_codec *codec)
|
||||
{
|
||||
int i, total_nodes;
|
||||
int i, total_nodes, function_id;
|
||||
hda_nid_t nid;
|
||||
|
||||
total_nodes = snd_hda_get_sub_nodes(codec, AC_NODE_ROOT, &nid);
|
||||
for (i = 0; i < total_nodes; i++, nid++) {
|
||||
codec->function_id = snd_hda_param_read(codec, nid,
|
||||
function_id = snd_hda_param_read(codec, nid,
|
||||
AC_PAR_FUNCTION_TYPE) & 0xff;
|
||||
switch (codec->function_id) {
|
||||
switch (function_id) {
|
||||
case AC_GRP_AUDIO_FUNCTION:
|
||||
codec->afg = nid;
|
||||
codec->function_id = function_id;
|
||||
break;
|
||||
case AC_GRP_MODEM_FUNCTION:
|
||||
codec->mfg = nid;
|
||||
codec->function_id = function_id;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -312,7 +312,6 @@ struct azx_dev {
|
|||
unsigned int period_bytes; /* size of the period in bytes */
|
||||
unsigned int frags; /* number for period in the play buffer */
|
||||
unsigned int fifo_size; /* FIFO size */
|
||||
unsigned int start_flag: 1; /* stream full start flag */
|
||||
unsigned long start_jiffies; /* start + minimum jiffies */
|
||||
unsigned long min_jiffies; /* minimum jiffies before position is valid */
|
||||
|
||||
|
@ -333,6 +332,7 @@ struct azx_dev {
|
|||
unsigned int opened :1;
|
||||
unsigned int running :1;
|
||||
unsigned int irq_pending :1;
|
||||
unsigned int start_flag: 1; /* stream full start flag */
|
||||
/*
|
||||
* For VIA:
|
||||
* A flag to ensure DMA position is 0
|
||||
|
|
|
@ -3977,6 +3977,14 @@ static int patch_ad1884a(struct hda_codec *codec)
|
|||
spec->input_mux = &ad1884a_laptop_capture_source;
|
||||
codec->patch_ops.unsol_event = ad1884a_hp_unsol_event;
|
||||
codec->patch_ops.init = ad1884a_hp_init;
|
||||
/* set the upper-limit for mixer amp to 0dB for avoiding the
|
||||
* possible damage by overloading
|
||||
*/
|
||||
snd_hda_override_amp_caps(codec, 0x20, HDA_INPUT,
|
||||
(0x17 << AC_AMPCAP_OFFSET_SHIFT) |
|
||||
(0x17 << AC_AMPCAP_NUM_STEPS_SHIFT) |
|
||||
(0x05 << AC_AMPCAP_STEP_SIZE_SHIFT) |
|
||||
(1 << AC_AMPCAP_MUTE_SHIFT));
|
||||
break;
|
||||
case AD1884A_MOBILE:
|
||||
spec->mixers[0] = ad1884a_mobile_mixers;
|
||||
|
|
|
@ -3076,6 +3076,11 @@ static int create_multi_out_ctls(struct hda_codec *codec, int num_outs,
|
|||
unsigned int wid_caps;
|
||||
|
||||
for (i = 0; i < num_outs && i < ARRAY_SIZE(chname); i++) {
|
||||
if (type == AUTO_PIN_HP_OUT && !spec->hp_detect) {
|
||||
wid_caps = get_wcaps(codec, pins[i]);
|
||||
if (wid_caps & AC_WCAP_UNSOL_CAP)
|
||||
spec->hp_detect = 1;
|
||||
}
|
||||
nid = dac_nids[i];
|
||||
if (!nid)
|
||||
continue;
|
||||
|
@ -3119,11 +3124,6 @@ static int create_multi_out_ctls(struct hda_codec *codec, int num_outs,
|
|||
err = create_controls_idx(codec, name, idx, nid, 3);
|
||||
if (err < 0)
|
||||
return err;
|
||||
if (type == AUTO_PIN_HP_OUT && !spec->hp_detect) {
|
||||
wid_caps = get_wcaps(codec, pins[i]);
|
||||
if (wid_caps & AC_WCAP_UNSOL_CAP)
|
||||
spec->hp_detect = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue