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 branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
ALSA: hda - add quirk for Ordissimo EVE using a realtek ALC662
ALSA: hrtimer: remove superfluous tasklet invocation
ALSA: hrtimer: handle delayed timer interrupts
ALSA: HDA: Add subwoofer quirk for Acer Aspire 8942G
ALSA: hda - Don't handle empty patch files
ALSA: hda - Fix missing CA initialization for HDMI/DP
ALSA: usbaudio - Enable the E-MU 0204 USB
ALSA: hda - switch lfe with side in mixer for 4930g
ASoC: Improve WM8994 digital power sequencing
ASoC: Create an AIF1ADCDAT signal widget to match AIF2
asoc: davinci: da830/omap-l137: correct cpu_dai_name
ASoC: fill in snd_soc_pcm_runtime.card before calling snd_soc_dai_link.init()

+82 -16
+4 -3
sound/core/hrtimer.c
··· 45 45 { 46 46 struct snd_hrtimer *stime = container_of(hrt, struct snd_hrtimer, hrt); 47 47 struct snd_timer *t = stime->timer; 48 + unsigned long oruns; 48 49 49 50 if (!atomic_read(&stime->running)) 50 51 return HRTIMER_NORESTART; 51 52 52 - hrtimer_forward_now(hrt, ns_to_ktime(t->sticks * resolution)); 53 - snd_timer_interrupt(stime->timer, t->sticks); 53 + oruns = hrtimer_forward_now(hrt, ns_to_ktime(t->sticks * resolution)); 54 + snd_timer_interrupt(stime->timer, t->sticks * oruns); 54 55 55 56 if (!atomic_read(&stime->running)) 56 57 return HRTIMER_NORESTART; ··· 105 104 } 106 105 107 106 static struct snd_timer_hardware hrtimer_hw = { 108 - .flags = SNDRV_TIMER_HW_AUTO, 107 + .flags = SNDRV_TIMER_HW_AUTO | SNDRV_TIMER_HW_TASKLET, 109 108 .open = snd_hrtimer_open, 110 109 .close = snd_hrtimer_close, 111 110 .start = snd_hrtimer_start,
+1 -1
sound/pci/hda/hda_intel.c
··· 2703 2703 if (err < 0) 2704 2704 goto out_free; 2705 2705 #ifdef CONFIG_SND_HDA_PATCH_LOADER 2706 - if (patch[dev]) { 2706 + if (patch[dev] && *patch[dev]) { 2707 2707 snd_printk(KERN_ERR SFX "Applying patch firmware '%s'\n", 2708 2708 patch[dev]); 2709 2709 err = snd_hda_load_patch(chip->bus, patch[dev]);
+2
sound/pci/hda/patch_hdmi.c
··· 642 642 hdmi_ai->ver = 0x01; 643 643 hdmi_ai->len = 0x0a; 644 644 hdmi_ai->CC02_CT47 = channels - 1; 645 + hdmi_ai->CA = ca; 645 646 hdmi_checksum_audio_infoframe(hdmi_ai); 646 647 } else if (spec->sink_eld[i].conn_type == 1) { /* DisplayPort */ 647 648 struct dp_audio_infoframe *dp_ai; ··· 652 651 dp_ai->len = 0x1b; 653 652 dp_ai->ver = 0x11 << 2; 654 653 dp_ai->CC02_CT47 = channels - 1; 654 + dp_ai->CA = ca; 655 655 } else { 656 656 snd_printd("HDMI: unknown connection type at pin %d\n", 657 657 pin_nid);
+26 -1
sound/pci/hda/patch_realtek.c
··· 2290 2290 { } /* end */ 2291 2291 }; 2292 2292 2293 + static struct snd_kcontrol_new alc888_acer_aspire_4930g_mixer[] = { 2294 + HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), 2295 + HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), 2296 + HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x0, HDA_OUTPUT), 2297 + HDA_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT), 2298 + HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0f, 2, 0x0, 2299 + HDA_OUTPUT), 2300 + HDA_BIND_MUTE_MONO("Center Playback Switch", 0x0f, 2, 2, HDA_INPUT), 2301 + HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0f, 1, 0x0, HDA_OUTPUT), 2302 + HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0f, 1, 2, HDA_INPUT), 2303 + HDA_CODEC_VOLUME("Side Playback Volume", 0x0e, 0x0, HDA_OUTPUT), 2304 + HDA_BIND_MUTE("Side Playback Switch", 0x0e, 2, HDA_INPUT), 2305 + HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), 2306 + HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), 2307 + HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 2308 + HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 2309 + HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 2310 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 2311 + HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 2312 + { } /* end */ 2313 + }; 2314 + 2315 + 2293 2316 static struct snd_kcontrol_new alc889_acer_aspire_8930g_mixer[] = { 2294 2317 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), 2295 2318 HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), ··· 10382 10359 .init_hook = alc_automute_amp, 10383 10360 }, 10384 10361 [ALC888_ACER_ASPIRE_4930G] = { 10385 - .mixers = { alc888_base_mixer, 10362 + .mixers = { alc888_acer_aspire_4930g_mixer, 10386 10363 alc883_chmode_mixer }, 10387 10364 .init_verbs = { alc883_init_verbs, alc880_gpio1_init_verbs, 10388 10365 alc888_acer_aspire_4930g_verbs }, ··· 18825 18802 ALC662_3ST_6ch_DIG), 18826 18803 SND_PCI_QUIRK_MASK(0x1854, 0xf000, 0x2000, "ASUS H13-200x", 18827 18804 ALC663_ASUS_H13), 18805 + SND_PCI_QUIRK(0x1991, 0x5628, "Ordissimo EVE", ALC662_LENOVO_101E), 18828 18806 {} 18829 18807 }; 18830 18808 ··· 19518 19494 }; 19519 19495 19520 19496 static struct snd_pci_quirk alc662_fixup_tbl[] = { 19497 + SND_PCI_QUIRK(0x1025, 0x0308, "Acer Aspire 8942G", ALC662_FIXUP_ASPIRE), 19521 19498 SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE), 19522 19499 SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD), 19523 19500 SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD),
+22 -4
sound/soc/codecs/wm8994.c
··· 1287 1287 SND_SOC_DAPM_SUPPLY("AIF1CLK", WM8994_AIF1_CLOCKING_1, 0, 0, NULL, 0), 1288 1288 SND_SOC_DAPM_SUPPLY("AIF2CLK", WM8994_AIF2_CLOCKING_1, 0, 0, NULL, 0), 1289 1289 1290 - SND_SOC_DAPM_AIF_OUT("AIF1ADC1L", "AIF1 Capture", 1290 + SND_SOC_DAPM_AIF_OUT("AIF1ADC1L", NULL, 1291 1291 0, WM8994_POWER_MANAGEMENT_4, 9, 0), 1292 - SND_SOC_DAPM_AIF_OUT("AIF1ADC1R", "AIF1 Capture", 1292 + SND_SOC_DAPM_AIF_OUT("AIF1ADC1R", NULL, 1293 1293 0, WM8994_POWER_MANAGEMENT_4, 8, 0), 1294 1294 SND_SOC_DAPM_AIF_IN_E("AIF1DAC1L", NULL, 0, 1295 1295 WM8994_POWER_MANAGEMENT_5, 9, 0, wm8958_aif_ev, ··· 1298 1298 WM8994_POWER_MANAGEMENT_5, 8, 0, wm8958_aif_ev, 1299 1299 SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), 1300 1300 1301 - SND_SOC_DAPM_AIF_OUT("AIF1ADC2L", "AIF1 Capture", 1301 + SND_SOC_DAPM_AIF_OUT("AIF1ADC2L", NULL, 1302 1302 0, WM8994_POWER_MANAGEMENT_4, 11, 0), 1303 - SND_SOC_DAPM_AIF_OUT("AIF1ADC2R", "AIF1 Capture", 1303 + SND_SOC_DAPM_AIF_OUT("AIF1ADC2R", NULL, 1304 1304 0, WM8994_POWER_MANAGEMENT_4, 10, 0), 1305 1305 SND_SOC_DAPM_AIF_IN_E("AIF1DAC2L", NULL, 0, 1306 1306 WM8994_POWER_MANAGEMENT_5, 11, 0, wm8958_aif_ev, ··· 1345 1345 1346 1346 SND_SOC_DAPM_AIF_IN("AIF1DACDAT", "AIF1 Playback", 0, SND_SOC_NOPM, 0, 0), 1347 1347 SND_SOC_DAPM_AIF_IN("AIF2DACDAT", "AIF2 Playback", 0, SND_SOC_NOPM, 0, 0), 1348 + SND_SOC_DAPM_AIF_OUT("AIF1ADCDAT", "AIF1 Capture", 0, SND_SOC_NOPM, 0, 0), 1348 1349 SND_SOC_DAPM_AIF_OUT("AIF2ADCDAT", "AIF2 Capture", 0, SND_SOC_NOPM, 0, 0), 1349 1350 1350 1351 SND_SOC_DAPM_MUX("AIF1DAC Mux", SND_SOC_NOPM, 0, 0, &aif1dac_mux), ··· 1547 1546 { "AIF2DAC2R Mixer", "Left Sidetone Switch", "Left Sidetone" }, 1548 1547 { "AIF2DAC2R Mixer", "Right Sidetone Switch", "Right Sidetone" }, 1549 1548 1549 + { "AIF1ADCDAT", NULL, "AIF1ADC1L" }, 1550 + { "AIF1ADCDAT", NULL, "AIF1ADC1R" }, 1551 + { "AIF1ADCDAT", NULL, "AIF1ADC2L" }, 1552 + { "AIF1ADCDAT", NULL, "AIF1ADC2R" }, 1553 + 1550 1554 { "AIF2ADCDAT", NULL, "AIF2ADC Mux" }, 1551 1555 1552 1556 /* AIF3 output */ ··· 1582 1576 1583 1577 { "Left Headphone Mux", "DAC", "DAC1L" }, 1584 1578 { "Right Headphone Mux", "DAC", "DAC1R" }, 1579 + }; 1580 + 1581 + static const struct snd_soc_dapm_route wm8994_revd_intercon[] = { 1582 + { "AIF1DACDAT", NULL, "AIF2DACDAT" }, 1583 + { "AIF2DACDAT", NULL, "AIF1DACDAT" }, 1584 + { "AIF1ADCDAT", NULL, "AIF2ADCDAT" }, 1585 + { "AIF2ADCDAT", NULL, "AIF1ADCDAT" }, 1585 1586 }; 1586 1587 1587 1588 static const struct snd_soc_dapm_route wm8994_intercon[] = { ··· 3142 3129 case WM8994: 3143 3130 snd_soc_dapm_add_routes(dapm, wm8994_intercon, 3144 3131 ARRAY_SIZE(wm8994_intercon)); 3132 + 3133 + if (wm8994->revision < 4) 3134 + snd_soc_dapm_add_routes(dapm, wm8994_revd_intercon, 3135 + ARRAY_SIZE(wm8994_revd_intercon)); 3136 + 3145 3137 break; 3146 3138 case WM8958: 3147 3139 snd_soc_dapm_add_routes(dapm, wm8958_intercon,
+15 -3
sound/soc/davinci/davinci-evm.c
··· 218 218 .ops = &evm_spdif_ops, 219 219 }, 220 220 }; 221 - static struct snd_soc_dai_link da8xx_evm_dai = { 221 + 222 + static struct snd_soc_dai_link da830_evm_dai = { 223 + .name = "TLV320AIC3X", 224 + .stream_name = "AIC3X", 225 + .cpu_dai_name = "davinci-mcasp.1", 226 + .codec_dai_name = "tlv320aic3x-hifi", 227 + .codec_name = "tlv320aic3x-codec.1-0018", 228 + .platform_name = "davinci-pcm-audio", 229 + .init = evm_aic3x_init, 230 + .ops = &evm_ops, 231 + }; 232 + 233 + static struct snd_soc_dai_link da850_evm_dai = { 222 234 .name = "TLV320AIC3X", 223 235 .stream_name = "AIC3X", 224 236 .cpu_dai_name= "davinci-mcasp.0", ··· 271 259 272 260 static struct snd_soc_card da830_snd_soc_card = { 273 261 .name = "DA830/OMAP-L137 EVM", 274 - .dai_link = &da8xx_evm_dai, 262 + .dai_link = &da830_evm_dai, 275 263 .num_links = 1, 276 264 }; 277 265 278 266 static struct snd_soc_card da850_snd_soc_card = { 279 267 .name = "DA850/OMAP-L138 EVM", 280 - .dai_link = &da8xx_evm_dai, 268 + .dai_link = &da850_evm_dai, 281 269 .num_links = 1, 282 270 }; 283 271
+1 -1
sound/soc/soc-core.c
··· 1449 1449 rtd = &card->rtd_aux[num]; 1450 1450 name = aux_dev->name; 1451 1451 } 1452 + rtd->card = card; 1452 1453 1453 1454 /* machine controls, routes and widgets are not prefixed */ 1454 1455 temp = codec->name_prefix; ··· 1472 1471 1473 1472 /* register the rtd device */ 1474 1473 rtd->codec = codec; 1475 - rtd->card = card; 1476 1474 rtd->dev.parent = card->dev; 1477 1475 rtd->dev.release = rtd_release; 1478 1476 rtd->dev.init_name = name;
+2 -2
sound/usb/mixer.c
··· 95 95 }; 96 96 97 97 98 - /*E-mu 0202(0404) eXtension Unit(XU) control*/ 98 + /*E-mu 0202/0404/0204 eXtension Unit(XU) control*/ 99 99 enum { 100 100 USB_XU_CLOCK_RATE = 0xe301, 101 101 USB_XU_CLOCK_SOURCE = 0xe302, ··· 1566 1566 cval->initialized = 1; 1567 1567 } else { 1568 1568 if (type == USB_XU_CLOCK_RATE) { 1569 - /* E-Mu USB 0404/0202/TrackerPre 1569 + /* E-Mu USB 0404/0202/TrackerPre/0204 1570 1570 * samplerate control quirk 1571 1571 */ 1572 1572 cval->min = 0;
+7
sound/usb/quirks-table.h
··· 79 79 .idProduct = 0x3f0a, 80 80 .bInterfaceClass = USB_CLASS_AUDIO, 81 81 }, 82 + { 83 + /* E-Mu 0204 USB */ 84 + .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 85 + .idVendor = 0x041e, 86 + .idProduct = 0x3f19, 87 + .bInterfaceClass = USB_CLASS_AUDIO, 88 + }, 82 89 83 90 /* 84 91 * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
+2 -1
sound/usb/quirks.c
··· 532 532 } 533 533 534 534 /* 535 - * For E-Mu 0404USB/0202USB/TrackerPre sample rate should be set for device, 535 + * For E-Mu 0404USB/0202USB/TrackerPre/0204 sample rate should be set for device, 536 536 * not for interface. 537 537 */ 538 538 ··· 589 589 case USB_ID(0x041e, 0x3f02): /* E-Mu 0202 USB */ 590 590 case USB_ID(0x041e, 0x3f04): /* E-Mu 0404 USB */ 591 591 case USB_ID(0x041e, 0x3f0a): /* E-Mu Tracker Pre */ 592 + case USB_ID(0x041e, 0x3f19): /* E-Mu 0204 USB */ 592 593 set_format_emu_quirk(subs, fmt); 593 594 break; 594 595 }