Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'sound-3.13-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
"Quite a few HD-Audio fixes, a WUSB audio fix and a fix for FireWire
audio. The HD-audio part contains a couple of fixes for the generic
parser, and these are the only intrusive fixes. The rest are mostly
device-specific fixes"

* tag 'sound-3.13-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ALSA: hda - Add LFE chmap to ASUS ET2700
ALSA: hda - Initialize missing bass speaker pin for ASUS AIO ET2700
ALSA: hda - limit mic boost on Asus UX31[A,E]
ALSA: hda - Check leaf nodes to find aamix amps
ALSA: hda - Fix hp-mic mode without VREF bits
ALSA: hda - Create Headhpone Mic Jack Mode when really needed
ALSA: usb: use multiple packets per urb for Wireless USB inbound audio
ALSA: hda - Enable mute/mic-mute LEDs for more Thinkpads with Conexant codec
ALSA: hda - Drop bus->avoid_link_reset flag
ALSA: hda/realtek - Set pcbeep amp for ALC668
ALSA: hda/realtek - Add support of ALC231 codec
ALSA: firewire-lib: fix wrong value for FDF field as an empty packet

+138 -40
+6 -9
sound/firewire/amdtp.c
··· 434 434 return; 435 435 index = s->packet_index; 436 436 437 + /* this module generate empty packet for 'no data' */ 437 438 syt = calculate_syt(s, cycle); 438 - if (!(s->flags & CIP_BLOCKING)) { 439 + if (!(s->flags & CIP_BLOCKING)) 439 440 data_blocks = calculate_data_blocks(s); 440 - } else { 441 - if (syt != 0xffff) { 442 - data_blocks = s->syt_interval; 443 - } else { 444 - data_blocks = 0; 445 - syt = 0xffffff; 446 - } 447 - } 441 + else if (syt != 0xffff) 442 + data_blocks = s->syt_interval; 443 + else 444 + data_blocks = 0; 448 445 449 446 buffer = s->buffer.packets[index].buffer; 450 447 buffer[0] = cpu_to_be32(ACCESS_ONCE(s->source_node_id_field) |
-1
sound/pci/hda/hda_codec.h
··· 698 698 unsigned int in_reset:1; /* during reset operation */ 699 699 unsigned int power_keep_link_on:1; /* don't power off HDA link */ 700 700 unsigned int no_response_fallback:1; /* don't fallback at RIRB error */ 701 - unsigned int avoid_link_reset:1; /* don't reset link at runtime PM */ 702 701 703 702 int primary_dig_out_type; /* primary digital out PCM type */ 704 703 };
+58 -21
sound/pci/hda/hda_generic.c
··· 2506 2506 2507 2507 for (i = 0; i < num_pins; i++) { 2508 2508 hda_nid_t pin = pins[i]; 2509 - if (pin == spec->hp_mic_pin) { 2510 - int ret = create_hp_mic_jack_mode(codec, pin); 2511 - if (ret < 0) 2512 - return ret; 2509 + if (pin == spec->hp_mic_pin) 2513 2510 continue; 2514 - } 2515 2511 if (get_out_jack_num_items(codec, pin) > 1) { 2516 2512 struct snd_kcontrol_new *knew; 2517 2513 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; ··· 2760 2764 val &= ~(AC_PINCTL_VREFEN | PIN_HP); 2761 2765 val |= get_vref_idx(vref_caps, idx) | PIN_IN; 2762 2766 } else 2763 - val = snd_hda_get_default_vref(codec, nid); 2767 + val = snd_hda_get_default_vref(codec, nid) | PIN_IN; 2764 2768 } 2765 2769 snd_hda_set_pin_ctl_cache(codec, nid, val); 2766 2770 call_hp_automute(codec, NULL); ··· 2780 2784 struct hda_gen_spec *spec = codec->spec; 2781 2785 struct snd_kcontrol_new *knew; 2782 2786 2783 - if (get_out_jack_num_items(codec, pin) <= 1 && 2784 - get_in_jack_num_items(codec, pin) <= 1) 2785 - return 0; /* no need */ 2786 2787 knew = snd_hda_gen_add_kctl(spec, "Headphone Mic Jack Mode", 2787 2788 &hp_mic_jack_mode_enum); 2788 2789 if (!knew) ··· 2808 2815 return 0; 2809 2816 } 2810 2817 2818 + /* return true if either a volume or a mute amp is found for the given 2819 + * aamix path; the amp has to be either in the mixer node or its direct leaf 2820 + */ 2821 + static bool look_for_mix_leaf_ctls(struct hda_codec *codec, hda_nid_t mix_nid, 2822 + hda_nid_t pin, unsigned int *mix_val, 2823 + unsigned int *mute_val) 2824 + { 2825 + int idx, num_conns; 2826 + const hda_nid_t *list; 2827 + hda_nid_t nid; 2828 + 2829 + idx = snd_hda_get_conn_index(codec, mix_nid, pin, true); 2830 + if (idx < 0) 2831 + return false; 2832 + 2833 + *mix_val = *mute_val = 0; 2834 + if (nid_has_volume(codec, mix_nid, HDA_INPUT)) 2835 + *mix_val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT); 2836 + if (nid_has_mute(codec, mix_nid, HDA_INPUT)) 2837 + *mute_val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT); 2838 + if (*mix_val && *mute_val) 2839 + return true; 2840 + 2841 + /* check leaf node */ 2842 + num_conns = snd_hda_get_conn_list(codec, mix_nid, &list); 2843 + if (num_conns < idx) 2844 + return false; 2845 + nid = list[idx]; 2846 + if (!*mix_val && nid_has_volume(codec, nid, HDA_OUTPUT)) 2847 + *mix_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); 2848 + if (!*mute_val && nid_has_mute(codec, nid, HDA_OUTPUT)) 2849 + *mute_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); 2850 + 2851 + return *mix_val || *mute_val; 2852 + } 2853 + 2811 2854 /* create input playback/capture controls for the given pin */ 2812 2855 static int new_analog_input(struct hda_codec *codec, int input_idx, 2813 2856 hda_nid_t pin, const char *ctlname, int ctlidx, ··· 2851 2822 { 2852 2823 struct hda_gen_spec *spec = codec->spec; 2853 2824 struct nid_path *path; 2854 - unsigned int val; 2825 + unsigned int mix_val, mute_val; 2855 2826 int err, idx; 2856 2827 2857 - if (!nid_has_volume(codec, mix_nid, HDA_INPUT) && 2858 - !nid_has_mute(codec, mix_nid, HDA_INPUT)) 2859 - return 0; /* no need for analog loopback */ 2828 + if (!look_for_mix_leaf_ctls(codec, mix_nid, pin, &mix_val, &mute_val)) 2829 + return 0; 2860 2830 2861 2831 path = snd_hda_add_new_path(codec, pin, mix_nid, 0); 2862 2832 if (!path) ··· 2864 2836 spec->loopback_paths[input_idx] = snd_hda_get_path_idx(codec, path); 2865 2837 2866 2838 idx = path->idx[path->depth - 1]; 2867 - if (nid_has_volume(codec, mix_nid, HDA_INPUT)) { 2868 - val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT); 2869 - err = __add_pb_vol_ctrl(spec, HDA_CTL_WIDGET_VOL, ctlname, ctlidx, val); 2839 + if (mix_val) { 2840 + err = __add_pb_vol_ctrl(spec, HDA_CTL_WIDGET_VOL, ctlname, ctlidx, mix_val); 2870 2841 if (err < 0) 2871 2842 return err; 2872 - path->ctls[NID_PATH_VOL_CTL] = val; 2843 + path->ctls[NID_PATH_VOL_CTL] = mix_val; 2873 2844 } 2874 2845 2875 - if (nid_has_mute(codec, mix_nid, HDA_INPUT)) { 2876 - val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT); 2877 - err = __add_pb_sw_ctrl(spec, HDA_CTL_WIDGET_MUTE, ctlname, ctlidx, val); 2846 + if (mute_val) { 2847 + err = __add_pb_sw_ctrl(spec, HDA_CTL_WIDGET_MUTE, ctlname, ctlidx, mute_val); 2878 2848 if (err < 0) 2879 2849 return err; 2880 - path->ctls[NID_PATH_MUTE_CTL] = val; 2850 + path->ctls[NID_PATH_MUTE_CTL] = mute_val; 2881 2851 } 2882 2852 2883 2853 path->active = true; ··· 4408 4382 err = parse_mic_boost(codec); 4409 4383 if (err < 0) 4410 4384 return err; 4385 + 4386 + /* create "Headphone Mic Jack Mode" if no input selection is 4387 + * available (or user specifies add_jack_modes hint) 4388 + */ 4389 + if (spec->hp_mic_pin && 4390 + (spec->auto_mic || spec->input_mux.num_items == 1 || 4391 + spec->add_jack_modes)) { 4392 + err = create_hp_mic_jack_mode(codec, spec->hp_mic_pin); 4393 + if (err < 0) 4394 + return err; 4395 + } 4411 4396 4412 4397 if (spec->add_jack_modes) { 4413 4398 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
+1 -2
sound/pci/hda/hda_intel.c
··· 2994 2994 STATESTS_INT_MASK); 2995 2995 2996 2996 azx_stop_chip(chip); 2997 - if (!chip->bus->avoid_link_reset) 2998 - azx_enter_link_reset(chip); 2997 + azx_enter_link_reset(chip); 2999 2998 azx_clear_irq_pending(chip); 3000 2999 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) 3001 3000 hda_display_power(false);
+23
sound/pci/hda/patch_conexant.c
··· 3244 3244 #if IS_ENABLED(CONFIG_THINKPAD_ACPI) 3245 3245 3246 3246 #include <linux/thinkpad_acpi.h> 3247 + #include <acpi/acpi.h> 3247 3248 3248 3249 static int (*led_set_func)(int, bool); 3250 + 3251 + static acpi_status acpi_check_cb(acpi_handle handle, u32 lvl, void *context, 3252 + void **rv) 3253 + { 3254 + bool *found = context; 3255 + *found = true; 3256 + return AE_OK; 3257 + } 3258 + 3259 + static bool is_thinkpad(struct hda_codec *codec) 3260 + { 3261 + bool found = false; 3262 + if (codec->subsystem_id >> 16 != 0x17aa) 3263 + return false; 3264 + if (ACPI_SUCCESS(acpi_get_devices("LEN0068", acpi_check_cb, &found, NULL)) && found) 3265 + return true; 3266 + found = false; 3267 + return ACPI_SUCCESS(acpi_get_devices("IBM0068", acpi_check_cb, &found, NULL)) && found; 3268 + } 3249 3269 3250 3270 static void update_tpacpi_mute_led(void *private_data, int enabled) 3251 3271 { ··· 3299 3279 bool removefunc = false; 3300 3280 3301 3281 if (action == HDA_FIXUP_ACT_PROBE) { 3282 + if (!is_thinkpad(codec)) 3283 + return; 3302 3284 if (!led_set_func) 3303 3285 led_set_func = symbol_request(tpacpi_led_set); 3304 3286 if (!led_set_func) { ··· 3516 3494 SND_PCI_QUIRK(0x17aa, 0x3975, "Lenovo U300s", CXT_FIXUP_STEREO_DMIC), 3517 3495 SND_PCI_QUIRK(0x17aa, 0x3977, "Lenovo IdeaPad U310", CXT_FIXUP_STEREO_DMIC), 3518 3496 SND_PCI_QUIRK(0x17aa, 0x397b, "Lenovo S205", CXT_FIXUP_STEREO_DMIC), 3497 + SND_PCI_QUIRK_VENDOR(0x17aa, "Thinkpad", CXT_FIXUP_THINKPAD_ACPI), 3519 3498 SND_PCI_QUIRK(0x1c06, 0x2011, "Lemote A1004", CXT_PINCFG_LEMOTE_A1004), 3520 3499 SND_PCI_QUIRK(0x1c06, 0x2012, "Lemote A1205", CXT_PINCFG_LEMOTE_A1205), 3521 3500 {}
+33 -5
sound/pci/hda/patch_realtek.c
··· 1782 1782 ALC889_FIXUP_IMAC91_VREF, 1783 1783 ALC882_FIXUP_INV_DMIC, 1784 1784 ALC882_FIXUP_NO_PRIMARY_HP, 1785 + ALC887_FIXUP_ASUS_BASS, 1786 + ALC887_FIXUP_BASS_CHMAP, 1785 1787 }; 1786 1788 1787 1789 static void alc889_fixup_coef(struct hda_codec *codec, ··· 1916 1914 spec->gen.no_multi_io = 1; 1917 1915 } 1918 1916 } 1917 + 1918 + static void alc_fixup_bass_chmap(struct hda_codec *codec, 1919 + const struct hda_fixup *fix, int action); 1919 1920 1920 1921 static const struct hda_fixup alc882_fixups[] = { 1921 1922 [ALC882_FIXUP_ABIT_AW9D_MAX] = { ··· 2110 2105 .type = HDA_FIXUP_FUNC, 2111 2106 .v.func = alc882_fixup_no_primary_hp, 2112 2107 }, 2108 + [ALC887_FIXUP_ASUS_BASS] = { 2109 + .type = HDA_FIXUP_PINS, 2110 + .v.pins = (const struct hda_pintbl[]) { 2111 + {0x16, 0x99130130}, /* bass speaker */ 2112 + {} 2113 + }, 2114 + .chained = true, 2115 + .chain_id = ALC887_FIXUP_BASS_CHMAP, 2116 + }, 2117 + [ALC887_FIXUP_BASS_CHMAP] = { 2118 + .type = HDA_FIXUP_FUNC, 2119 + .v.func = alc_fixup_bass_chmap, 2120 + }, 2113 2121 }; 2114 2122 2115 2123 static const struct snd_pci_quirk alc882_fixup_tbl[] = { ··· 2156 2138 SND_PCI_QUIRK(0x1043, 0x1873, "ASUS W90V", ALC882_FIXUP_ASUS_W90V), 2157 2139 SND_PCI_QUIRK(0x1043, 0x1971, "Asus W2JC", ALC882_FIXUP_ASUS_W2JC), 2158 2140 SND_PCI_QUIRK(0x1043, 0x835f, "Asus Eee 1601", ALC888_FIXUP_EEE1601), 2141 + SND_PCI_QUIRK(0x1043, 0x84bc, "ASUS ET2700", ALC887_FIXUP_ASUS_BASS), 2159 2142 SND_PCI_QUIRK(0x104d, 0x9047, "Sony Vaio TT", ALC889_FIXUP_VAIO_TT), 2160 2143 SND_PCI_QUIRK(0x104d, 0x905a, "Sony Vaio Z", ALC882_FIXUP_NO_PRIMARY_HP), 2161 2144 SND_PCI_QUIRK(0x104d, 0x9043, "Sony Vaio VGC-LN51JGB", ALC882_FIXUP_NO_PRIMARY_HP), ··· 3817 3798 ALC271_FIXUP_HP_GATE_MIC_JACK, 3818 3799 ALC269_FIXUP_ACER_AC700, 3819 3800 ALC269_FIXUP_LIMIT_INT_MIC_BOOST, 3801 + ALC269VB_FIXUP_ASUS_ZENBOOK, 3820 3802 ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED, 3821 3803 ALC269VB_FIXUP_ORDISSIMO_EVE2, 3822 3804 ALC283_FIXUP_CHROME_BOOK, ··· 4095 4075 .chained = true, 4096 4076 .chain_id = ALC269_FIXUP_THINKPAD_ACPI, 4097 4077 }, 4078 + [ALC269VB_FIXUP_ASUS_ZENBOOK] = { 4079 + .type = HDA_FIXUP_FUNC, 4080 + .v.func = alc269_fixup_limit_int_mic_boost, 4081 + .chained = true, 4082 + .chain_id = ALC269VB_FIXUP_DMIC, 4083 + }, 4098 4084 [ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED] = { 4099 4085 .type = HDA_FIXUP_FUNC, 4100 4086 .v.func = alc269_fixup_limit_int_mic_boost, ··· 4215 4189 SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300), 4216 4190 SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), 4217 4191 SND_PCI_QUIRK(0x1043, 0x115d, "Asus 1015E", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), 4218 - SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_DMIC), 4219 - SND_PCI_QUIRK(0x1043, 0x1517, "Asus Zenbook UX31A", ALC269VB_FIXUP_DMIC), 4192 + SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_ASUS_ZENBOOK), 4193 + SND_PCI_QUIRK(0x1043, 0x1517, "Asus Zenbook UX31A", ALC269VB_FIXUP_ASUS_ZENBOOK), 4220 4194 SND_PCI_QUIRK(0x1043, 0x16e3, "ASUS UX50", ALC269_FIXUP_STEREO_DMIC), 4221 4195 SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW), 4222 4196 SND_PCI_QUIRK(0x1043, 0x1b13, "Asus U41SV", ALC269_FIXUP_INV_DMIC), ··· 4741 4715 }; 4742 4716 4743 4717 /* override the 2.1 chmap */ 4744 - static void alc662_fixup_bass_chmap(struct hda_codec *codec, 4718 + static void alc_fixup_bass_chmap(struct hda_codec *codec, 4745 4719 const struct hda_fixup *fix, int action) 4746 4720 { 4747 4721 if (action == HDA_FIXUP_ACT_BUILD) { ··· 4949 4923 }, 4950 4924 [ALC662_FIXUP_BASS_CHMAP] = { 4951 4925 .type = HDA_FIXUP_FUNC, 4952 - .v.func = alc662_fixup_bass_chmap, 4926 + .v.func = alc_fixup_bass_chmap, 4953 4927 .chained = true, 4954 4928 .chain_id = ALC662_FIXUP_ASUS_MODE4 4955 4929 }, ··· 4962 4936 }, 4963 4937 [ALC662_FIXUP_BASS_1A_CHMAP] = { 4964 4938 .type = HDA_FIXUP_FUNC, 4965 - .v.func = alc662_fixup_bass_chmap, 4939 + .v.func = alc_fixup_bass_chmap, 4966 4940 .chained = true, 4967 4941 .chain_id = ALC662_FIXUP_BASS_1A, 4968 4942 }, ··· 5144 5118 case 0x10ec0272: 5145 5119 case 0x10ec0663: 5146 5120 case 0x10ec0665: 5121 + case 0x10ec0668: 5147 5122 set_beep_amp(spec, 0x0b, 0x04, HDA_INPUT); 5148 5123 break; 5149 5124 case 0x10ec0273: ··· 5202 5175 */ 5203 5176 static const struct hda_codec_preset snd_hda_preset_realtek[] = { 5204 5177 { .id = 0x10ec0221, .name = "ALC221", .patch = patch_alc269 }, 5178 + { .id = 0x10ec0231, .name = "ALC231", .patch = patch_alc269 }, 5205 5179 { .id = 0x10ec0233, .name = "ALC233", .patch = patch_alc269 }, 5206 5180 { .id = 0x10ec0255, .name = "ALC255", .patch = patch_alc269 }, 5207 5181 { .id = 0x10ec0260, .name = "ALC260", .patch = patch_alc260 },
+2 -1
sound/pci/hda/patch_sigmatel.c
··· 2094 2094 2095 2095 if (action == HDA_FIXUP_ACT_PRE_PROBE) { 2096 2096 spec->mic_mute_led_gpio = 0x08; /* GPIO3 */ 2097 - codec->bus->avoid_link_reset = 1; 2097 + /* resetting controller clears GPIO, so we need to keep on */ 2098 + codec->bus->power_keep_link_on = 1; 2098 2099 } 2099 2100 } 2100 2101
+15 -1
sound/usb/endpoint.c
··· 636 636 if (usb_pipein(ep->pipe) || 637 637 snd_usb_endpoint_implicit_feedback_sink(ep)) { 638 638 639 + urb_packs = packs_per_ms; 640 + /* 641 + * Wireless devices can poll at a max rate of once per 4ms. 642 + * For dataintervals less than 5, increase the packet count to 643 + * allow the host controller to use bursting to fill in the 644 + * gaps. 645 + */ 646 + if (snd_usb_get_speed(ep->chip->dev) == USB_SPEED_WIRELESS) { 647 + int interval = ep->datainterval; 648 + while (interval < 5) { 649 + urb_packs <<= 1; 650 + ++interval; 651 + } 652 + } 639 653 /* make capture URBs <= 1 ms and smaller than a period */ 640 - urb_packs = min(max_packs_per_urb, packs_per_ms); 654 + urb_packs = min(max_packs_per_urb, urb_packs); 641 655 while (urb_packs > 1 && urb_packs * maxsize >= period_bytes) 642 656 urb_packs >>= 1; 643 657 ep->nurbs = MAX_URBS;