diff options
author | Takashi Iwai <tiwai@suse.de> | 2009-04-19 05:39:46 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2009-04-19 05:39:46 -0400 |
commit | 7c4112a285b00e137db04844b8b9b478e5d4363e (patch) | |
tree | 6e708230baf2213b902a1e8f04a21c9bf64487a3 /sound | |
parent | 1e2ae4ddd373af6fa3ea2483d7fc4a08c7f54395 (diff) | |
parent | 93e82ae781e1ca4797cf2a226d3c303975bd99c7 (diff) |
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
Diffstat (limited to 'sound')
-rw-r--r-- | sound/pci/hda/hda_codec.c | 8 | ||||
-rw-r--r-- | sound/pci/hda/hda_intel.c | 2 | ||||
-rw-r--r-- | sound/pci/hda/patch_analog.c | 8 | ||||
-rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 10 |
4 files changed, 19 insertions, 9 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index fd6e6f337d10..8820faf6c9d8 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c | |||
@@ -642,19 +642,21 @@ static int get_codec_name(struct hda_codec *codec) | |||
642 | */ | 642 | */ |
643 | static void /*__devinit*/ setup_fg_nodes(struct hda_codec *codec) | 643 | static void /*__devinit*/ setup_fg_nodes(struct hda_codec *codec) |
644 | { | 644 | { |
645 | int i, total_nodes; | 645 | int i, total_nodes, function_id; |
646 | hda_nid_t nid; | 646 | hda_nid_t nid; |
647 | 647 | ||
648 | total_nodes = snd_hda_get_sub_nodes(codec, AC_NODE_ROOT, &nid); | 648 | total_nodes = snd_hda_get_sub_nodes(codec, AC_NODE_ROOT, &nid); |
649 | for (i = 0; i < total_nodes; i++, nid++) { | 649 | for (i = 0; i < total_nodes; i++, nid++) { |
650 | codec->function_id = snd_hda_param_read(codec, nid, | 650 | function_id = snd_hda_param_read(codec, nid, |
651 | AC_PAR_FUNCTION_TYPE) & 0xff; | 651 | AC_PAR_FUNCTION_TYPE) & 0xff; |
652 | switch (codec->function_id) { | 652 | switch (function_id) { |
653 | case AC_GRP_AUDIO_FUNCTION: | 653 | case AC_GRP_AUDIO_FUNCTION: |
654 | codec->afg = nid; | 654 | codec->afg = nid; |
655 | codec->function_id = function_id; | ||
655 | break; | 656 | break; |
656 | case AC_GRP_MODEM_FUNCTION: | 657 | case AC_GRP_MODEM_FUNCTION: |
657 | codec->mfg = nid; | 658 | codec->mfg = nid; |
659 | codec->function_id = function_id; | ||
658 | break; | 660 | break; |
659 | default: | 661 | default: |
660 | break; | 662 | break; |
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index bc882f8f163c..21e99cfa8c49 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -312,7 +312,6 @@ struct azx_dev { | |||
312 | unsigned int period_bytes; /* size of the period in bytes */ | 312 | unsigned int period_bytes; /* size of the period in bytes */ |
313 | unsigned int frags; /* number for period in the play buffer */ | 313 | unsigned int frags; /* number for period in the play buffer */ |
314 | unsigned int fifo_size; /* FIFO size */ | 314 | unsigned int fifo_size; /* FIFO size */ |
315 | unsigned int start_flag: 1; /* stream full start flag */ | ||
316 | unsigned long start_jiffies; /* start + minimum jiffies */ | 315 | unsigned long start_jiffies; /* start + minimum jiffies */ |
317 | unsigned long min_jiffies; /* minimum jiffies before position is valid */ | 316 | unsigned long min_jiffies; /* minimum jiffies before position is valid */ |
318 | 317 | ||
@@ -333,6 +332,7 @@ struct azx_dev { | |||
333 | unsigned int opened :1; | 332 | unsigned int opened :1; |
334 | unsigned int running :1; | 333 | unsigned int running :1; |
335 | unsigned int irq_pending :1; | 334 | unsigned int irq_pending :1; |
335 | unsigned int start_flag: 1; /* stream full start flag */ | ||
336 | /* | 336 | /* |
337 | * For VIA: | 337 | * For VIA: |
338 | * A flag to ensure DMA position is 0 | 338 | * A flag to ensure DMA position is 0 |
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index 38ad3f7b040f..9bcd8ab5a27f 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c | |||
@@ -3977,6 +3977,14 @@ static int patch_ad1884a(struct hda_codec *codec) | |||
3977 | spec->input_mux = &ad1884a_laptop_capture_source; | 3977 | spec->input_mux = &ad1884a_laptop_capture_source; |
3978 | codec->patch_ops.unsol_event = ad1884a_hp_unsol_event; | 3978 | codec->patch_ops.unsol_event = ad1884a_hp_unsol_event; |
3979 | codec->patch_ops.init = ad1884a_hp_init; | 3979 | codec->patch_ops.init = ad1884a_hp_init; |
3980 | /* set the upper-limit for mixer amp to 0dB for avoiding the | ||
3981 | * possible damage by overloading | ||
3982 | */ | ||
3983 | snd_hda_override_amp_caps(codec, 0x20, HDA_INPUT, | ||
3984 | (0x17 << AC_AMPCAP_OFFSET_SHIFT) | | ||
3985 | (0x17 << AC_AMPCAP_NUM_STEPS_SHIFT) | | ||
3986 | (0x05 << AC_AMPCAP_STEP_SIZE_SHIFT) | | ||
3987 | (1 << AC_AMPCAP_MUTE_SHIFT)); | ||
3980 | break; | 3988 | break; |
3981 | case AD1884A_MOBILE: | 3989 | case AD1884A_MOBILE: |
3982 | spec->mixers[0] = ad1884a_mobile_mixers; | 3990 | spec->mixers[0] = ad1884a_mobile_mixers; |
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index ce30b459aee6..917bc5d3ac2c 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
@@ -3076,6 +3076,11 @@ static int create_multi_out_ctls(struct hda_codec *codec, int num_outs, | |||
3076 | unsigned int wid_caps; | 3076 | unsigned int wid_caps; |
3077 | 3077 | ||
3078 | for (i = 0; i < num_outs && i < ARRAY_SIZE(chname); i++) { | 3078 | for (i = 0; i < num_outs && i < ARRAY_SIZE(chname); i++) { |
3079 | if (type == AUTO_PIN_HP_OUT && !spec->hp_detect) { | ||
3080 | wid_caps = get_wcaps(codec, pins[i]); | ||
3081 | if (wid_caps & AC_WCAP_UNSOL_CAP) | ||
3082 | spec->hp_detect = 1; | ||
3083 | } | ||
3079 | nid = dac_nids[i]; | 3084 | nid = dac_nids[i]; |
3080 | if (!nid) | 3085 | if (!nid) |
3081 | continue; | 3086 | continue; |
@@ -3119,11 +3124,6 @@ static int create_multi_out_ctls(struct hda_codec *codec, int num_outs, | |||
3119 | err = create_controls_idx(codec, name, idx, nid, 3); | 3124 | err = create_controls_idx(codec, name, idx, nid, 3); |
3120 | if (err < 0) | 3125 | if (err < 0) |
3121 | return err; | 3126 | return err; |
3122 | if (type == AUTO_PIN_HP_OUT && !spec->hp_detect) { | ||
3123 | wid_caps = get_wcaps(codec, pins[i]); | ||
3124 | if (wid_caps & AC_WCAP_UNSOL_CAP) | ||
3125 | spec->hp_detect = 1; | ||
3126 | } | ||
3127 | } | 3127 | } |
3128 | } | 3128 | } |
3129 | return 0; | 3129 | return 0; |