diff options
| -rw-r--r-- | sound/core/hrtimer.c | 7 | ||||
| -rw-r--r-- | sound/pci/hda/hda_intel.c | 2 | ||||
| -rw-r--r-- | sound/pci/hda/patch_hdmi.c | 2 | ||||
| -rw-r--r-- | sound/pci/hda/patch_realtek.c | 27 | ||||
| -rw-r--r-- | sound/soc/codecs/wm8994.c | 26 | ||||
| -rw-r--r-- | sound/soc/davinci/davinci-evm.c | 18 | ||||
| -rw-r--r-- | sound/soc/soc-core.c | 2 | ||||
| -rw-r--r-- | sound/usb/mixer.c | 4 | ||||
| -rw-r--r-- | sound/usb/quirks-table.h | 7 | ||||
| -rw-r--r-- | sound/usb/quirks.c | 3 |
10 files changed, 82 insertions, 16 deletions
diff --git a/sound/core/hrtimer.c b/sound/core/hrtimer.c index 7730575bfad..b8b31c433d6 100644 --- a/sound/core/hrtimer.c +++ b/sound/core/hrtimer.c | |||
| @@ -45,12 +45,13 @@ static enum hrtimer_restart snd_hrtimer_callback(struct hrtimer *hrt) | |||
| 45 | { | 45 | { |
| 46 | struct snd_hrtimer *stime = container_of(hrt, struct snd_hrtimer, hrt); | 46 | struct snd_hrtimer *stime = container_of(hrt, struct snd_hrtimer, hrt); |
| 47 | struct snd_timer *t = stime->timer; | 47 | struct snd_timer *t = stime->timer; |
| 48 | unsigned long oruns; | ||
| 48 | 49 | ||
| 49 | if (!atomic_read(&stime->running)) | 50 | if (!atomic_read(&stime->running)) |
| 50 | return HRTIMER_NORESTART; | 51 | return HRTIMER_NORESTART; |
| 51 | 52 | ||
| 52 | hrtimer_forward_now(hrt, ns_to_ktime(t->sticks * resolution)); | 53 | oruns = hrtimer_forward_now(hrt, ns_to_ktime(t->sticks * resolution)); |
| 53 | snd_timer_interrupt(stime->timer, t->sticks); | 54 | snd_timer_interrupt(stime->timer, t->sticks * oruns); |
| 54 | 55 | ||
| 55 | if (!atomic_read(&stime->running)) | 56 | if (!atomic_read(&stime->running)) |
| 56 | return HRTIMER_NORESTART; | 57 | return HRTIMER_NORESTART; |
| @@ -104,7 +105,7 @@ static int snd_hrtimer_stop(struct snd_timer *t) | |||
| 104 | } | 105 | } |
| 105 | 106 | ||
| 106 | static struct snd_timer_hardware hrtimer_hw = { | 107 | static struct snd_timer_hardware hrtimer_hw = { |
| 107 | .flags = SNDRV_TIMER_HW_AUTO, | 108 | .flags = SNDRV_TIMER_HW_AUTO | SNDRV_TIMER_HW_TASKLET, |
| 108 | .open = snd_hrtimer_open, | 109 | .open = snd_hrtimer_open, |
| 109 | .close = snd_hrtimer_close, | 110 | .close = snd_hrtimer_close, |
| 110 | .start = snd_hrtimer_start, | 111 | .start = snd_hrtimer_start, |
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 2e91a991eb1..0baffcdee8f 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
| @@ -2703,7 +2703,7 @@ static int __devinit azx_probe(struct pci_dev *pci, | |||
| 2703 | if (err < 0) | 2703 | if (err < 0) |
| 2704 | goto out_free; | 2704 | goto out_free; |
| 2705 | #ifdef CONFIG_SND_HDA_PATCH_LOADER | 2705 | #ifdef CONFIG_SND_HDA_PATCH_LOADER |
| 2706 | if (patch[dev]) { | 2706 | if (patch[dev] && *patch[dev]) { |
| 2707 | snd_printk(KERN_ERR SFX "Applying patch firmware '%s'\n", | 2707 | snd_printk(KERN_ERR SFX "Applying patch firmware '%s'\n", |
| 2708 | patch[dev]); | 2708 | patch[dev]); |
| 2709 | err = snd_hda_load_patch(chip->bus, patch[dev]); | 2709 | err = snd_hda_load_patch(chip->bus, patch[dev]); |
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c index 2d5b83fa8d2..a5876773672 100644 --- a/sound/pci/hda/patch_hdmi.c +++ b/sound/pci/hda/patch_hdmi.c | |||
| @@ -642,6 +642,7 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, hda_nid_t nid, | |||
| 642 | hdmi_ai->ver = 0x01; | 642 | hdmi_ai->ver = 0x01; |
| 643 | hdmi_ai->len = 0x0a; | 643 | hdmi_ai->len = 0x0a; |
| 644 | hdmi_ai->CC02_CT47 = channels - 1; | 644 | hdmi_ai->CC02_CT47 = channels - 1; |
| 645 | hdmi_ai->CA = ca; | ||
| 645 | hdmi_checksum_audio_infoframe(hdmi_ai); | 646 | hdmi_checksum_audio_infoframe(hdmi_ai); |
| 646 | } else if (spec->sink_eld[i].conn_type == 1) { /* DisplayPort */ | 647 | } else if (spec->sink_eld[i].conn_type == 1) { /* DisplayPort */ |
| 647 | struct dp_audio_infoframe *dp_ai; | 648 | struct dp_audio_infoframe *dp_ai; |
| @@ -651,6 +652,7 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, hda_nid_t nid, | |||
| 651 | dp_ai->len = 0x1b; | 652 | dp_ai->len = 0x1b; |
| 652 | dp_ai->ver = 0x11 << 2; | 653 | dp_ai->ver = 0x11 << 2; |
| 653 | dp_ai->CC02_CT47 = channels - 1; | 654 | dp_ai->CC02_CT47 = channels - 1; |
| 655 | dp_ai->CA = ca; | ||
| 654 | } else { | 656 | } else { |
| 655 | snd_printd("HDMI: unknown connection type at pin %d\n", | 657 | snd_printd("HDMI: unknown connection type at pin %d\n", |
| 656 | pin_nid); | 658 | pin_nid); |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 2fa9ed99c32..3328a259a24 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
| @@ -2290,6 +2290,29 @@ static struct snd_kcontrol_new alc888_base_mixer[] = { | |||
| 2290 | { } /* end */ | 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 | static struct snd_kcontrol_new alc889_acer_aspire_8930g_mixer[] = { | 2316 | static struct snd_kcontrol_new alc889_acer_aspire_8930g_mixer[] = { |
| 2294 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | 2317 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), |
| 2295 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | 2318 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), |
| @@ -10359,7 +10382,7 @@ static struct alc_config_preset alc882_presets[] = { | |||
| 10359 | .init_hook = alc_automute_amp, | 10382 | .init_hook = alc_automute_amp, |
| 10360 | }, | 10383 | }, |
| 10361 | [ALC888_ACER_ASPIRE_4930G] = { | 10384 | [ALC888_ACER_ASPIRE_4930G] = { |
| 10362 | .mixers = { alc888_base_mixer, | 10385 | .mixers = { alc888_acer_aspire_4930g_mixer, |
| 10363 | alc883_chmode_mixer }, | 10386 | alc883_chmode_mixer }, |
| 10364 | .init_verbs = { alc883_init_verbs, alc880_gpio1_init_verbs, | 10387 | .init_verbs = { alc883_init_verbs, alc880_gpio1_init_verbs, |
| 10365 | alc888_acer_aspire_4930g_verbs }, | 10388 | alc888_acer_aspire_4930g_verbs }, |
| @@ -18802,6 +18825,7 @@ static struct snd_pci_quirk alc662_cfg_tbl[] = { | |||
| 18802 | ALC662_3ST_6ch_DIG), | 18825 | ALC662_3ST_6ch_DIG), |
| 18803 | SND_PCI_QUIRK_MASK(0x1854, 0xf000, 0x2000, "ASUS H13-200x", | 18826 | SND_PCI_QUIRK_MASK(0x1854, 0xf000, 0x2000, "ASUS H13-200x", |
| 18804 | ALC663_ASUS_H13), | 18827 | ALC663_ASUS_H13), |
| 18828 | SND_PCI_QUIRK(0x1991, 0x5628, "Ordissimo EVE", ALC662_LENOVO_101E), | ||
| 18805 | {} | 18829 | {} |
| 18806 | }; | 18830 | }; |
| 18807 | 18831 | ||
| @@ -19494,6 +19518,7 @@ static const struct alc_fixup alc662_fixups[] = { | |||
| 19494 | }; | 19518 | }; |
| 19495 | 19519 | ||
| 19496 | static struct snd_pci_quirk alc662_fixup_tbl[] = { | 19520 | static struct snd_pci_quirk alc662_fixup_tbl[] = { |
| 19521 | SND_PCI_QUIRK(0x1025, 0x0308, "Acer Aspire 8942G", ALC662_FIXUP_ASPIRE), | ||
| 19497 | SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE), | 19522 | SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE), |
| 19498 | SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD), | 19523 | SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD), |
| 19499 | SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD), | 19524 | SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD), |
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index 3351f77607b..37b8aa8a680 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c | |||
| @@ -1287,9 +1287,9 @@ SND_SOC_DAPM_SUPPLY("DSPINTCLK", WM8994_CLOCKING_1, 1, 0, NULL, 0), | |||
| 1287 | SND_SOC_DAPM_SUPPLY("AIF1CLK", WM8994_AIF1_CLOCKING_1, 0, 0, NULL, 0), | 1287 | SND_SOC_DAPM_SUPPLY("AIF1CLK", WM8994_AIF1_CLOCKING_1, 0, 0, NULL, 0), |
| 1288 | SND_SOC_DAPM_SUPPLY("AIF2CLK", WM8994_AIF2_CLOCKING_1, 0, 0, NULL, 0), | 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 | 0, WM8994_POWER_MANAGEMENT_4, 9, 0), | 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 | 0, WM8994_POWER_MANAGEMENT_4, 8, 0), | 1293 | 0, WM8994_POWER_MANAGEMENT_4, 8, 0), |
| 1294 | SND_SOC_DAPM_AIF_IN_E("AIF1DAC1L", NULL, 0, | 1294 | SND_SOC_DAPM_AIF_IN_E("AIF1DAC1L", NULL, 0, |
| 1295 | WM8994_POWER_MANAGEMENT_5, 9, 0, wm8958_aif_ev, | 1295 | WM8994_POWER_MANAGEMENT_5, 9, 0, wm8958_aif_ev, |
| @@ -1298,9 +1298,9 @@ SND_SOC_DAPM_AIF_IN_E("AIF1DAC1R", NULL, 0, | |||
| 1298 | WM8994_POWER_MANAGEMENT_5, 8, 0, wm8958_aif_ev, | 1298 | WM8994_POWER_MANAGEMENT_5, 8, 0, wm8958_aif_ev, |
| 1299 | SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), | 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 | 0, WM8994_POWER_MANAGEMENT_4, 11, 0), | 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 | 0, WM8994_POWER_MANAGEMENT_4, 10, 0), | 1304 | 0, WM8994_POWER_MANAGEMENT_4, 10, 0), |
| 1305 | SND_SOC_DAPM_AIF_IN_E("AIF1DAC2L", NULL, 0, | 1305 | SND_SOC_DAPM_AIF_IN_E("AIF1DAC2L", NULL, 0, |
| 1306 | WM8994_POWER_MANAGEMENT_5, 11, 0, wm8958_aif_ev, | 1306 | WM8994_POWER_MANAGEMENT_5, 11, 0, wm8958_aif_ev, |
| @@ -1345,6 +1345,7 @@ SND_SOC_DAPM_AIF_IN_E("AIF2DACR", NULL, 0, | |||
| 1345 | 1345 | ||
| 1346 | SND_SOC_DAPM_AIF_IN("AIF1DACDAT", "AIF1 Playback", 0, SND_SOC_NOPM, 0, 0), | 1346 | SND_SOC_DAPM_AIF_IN("AIF1DACDAT", "AIF1 Playback", 0, SND_SOC_NOPM, 0, 0), |
| 1347 | SND_SOC_DAPM_AIF_IN("AIF2DACDAT", "AIF2 Playback", 0, SND_SOC_NOPM, 0, 0), | 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 | SND_SOC_DAPM_AIF_OUT("AIF2ADCDAT", "AIF2 Capture", 0, SND_SOC_NOPM, 0, 0), | 1349 | SND_SOC_DAPM_AIF_OUT("AIF2ADCDAT", "AIF2 Capture", 0, SND_SOC_NOPM, 0, 0), |
| 1349 | 1350 | ||
| 1350 | SND_SOC_DAPM_MUX("AIF1DAC Mux", SND_SOC_NOPM, 0, 0, &aif1dac_mux), | 1351 | SND_SOC_DAPM_MUX("AIF1DAC Mux", SND_SOC_NOPM, 0, 0, &aif1dac_mux), |
| @@ -1546,6 +1547,11 @@ static const struct snd_soc_dapm_route intercon[] = { | |||
| 1546 | { "AIF2DAC2R Mixer", "Left Sidetone Switch", "Left Sidetone" }, | 1547 | { "AIF2DAC2R Mixer", "Left Sidetone Switch", "Left Sidetone" }, |
| 1547 | { "AIF2DAC2R Mixer", "Right Sidetone Switch", "Right Sidetone" }, | 1548 | { "AIF2DAC2R Mixer", "Right Sidetone Switch", "Right Sidetone" }, |
| 1548 | 1549 | ||
| 1550 | { "AIF1ADCDAT", NULL, "AIF1ADC1L" }, | ||
| 1551 | { "AIF1ADCDAT", NULL, "AIF1ADC1R" }, | ||
| 1552 | { "AIF1ADCDAT", NULL, "AIF1ADC2L" }, | ||
| 1553 | { "AIF1ADCDAT", NULL, "AIF1ADC2R" }, | ||
| 1554 | |||
| 1549 | { "AIF2ADCDAT", NULL, "AIF2ADC Mux" }, | 1555 | { "AIF2ADCDAT", NULL, "AIF2ADC Mux" }, |
| 1550 | 1556 | ||
| 1551 | /* AIF3 output */ | 1557 | /* AIF3 output */ |
| @@ -1578,6 +1584,13 @@ static const struct snd_soc_dapm_route intercon[] = { | |||
| 1578 | { "Right Headphone Mux", "DAC", "DAC1R" }, | 1584 | { "Right Headphone Mux", "DAC", "DAC1R" }, |
| 1579 | }; | 1585 | }; |
| 1580 | 1586 | ||
| 1587 | static const struct snd_soc_dapm_route wm8994_revd_intercon[] = { | ||
| 1588 | { "AIF1DACDAT", NULL, "AIF2DACDAT" }, | ||
| 1589 | { "AIF2DACDAT", NULL, "AIF1DACDAT" }, | ||
| 1590 | { "AIF1ADCDAT", NULL, "AIF2ADCDAT" }, | ||
| 1591 | { "AIF2ADCDAT", NULL, "AIF1ADCDAT" }, | ||
| 1592 | }; | ||
| 1593 | |||
| 1581 | static const struct snd_soc_dapm_route wm8994_intercon[] = { | 1594 | static const struct snd_soc_dapm_route wm8994_intercon[] = { |
| 1582 | { "AIF2DACL", NULL, "AIF2DAC Mux" }, | 1595 | { "AIF2DACL", NULL, "AIF2DAC Mux" }, |
| 1583 | { "AIF2DACR", NULL, "AIF2DAC Mux" }, | 1596 | { "AIF2DACR", NULL, "AIF2DAC Mux" }, |
| @@ -3129,6 +3142,11 @@ static int wm8994_codec_probe(struct snd_soc_codec *codec) | |||
| 3129 | case WM8994: | 3142 | case WM8994: |
| 3130 | snd_soc_dapm_add_routes(dapm, wm8994_intercon, | 3143 | snd_soc_dapm_add_routes(dapm, wm8994_intercon, |
| 3131 | ARRAY_SIZE(wm8994_intercon)); | 3144 | ARRAY_SIZE(wm8994_intercon)); |
| 3145 | |||
| 3146 | if (wm8994->revision < 4) | ||
| 3147 | snd_soc_dapm_add_routes(dapm, wm8994_revd_intercon, | ||
| 3148 | ARRAY_SIZE(wm8994_revd_intercon)); | ||
| 3149 | |||
| 3132 | break; | 3150 | break; |
| 3133 | case WM8958: | 3151 | case WM8958: |
| 3134 | snd_soc_dapm_add_routes(dapm, wm8958_intercon, | 3152 | snd_soc_dapm_add_routes(dapm, wm8958_intercon, |
diff --git a/sound/soc/davinci/davinci-evm.c b/sound/soc/davinci/davinci-evm.c index b36f0b39b09..fe7984221eb 100644 --- a/sound/soc/davinci/davinci-evm.c +++ b/sound/soc/davinci/davinci-evm.c | |||
| @@ -218,7 +218,19 @@ static struct snd_soc_dai_link dm6467_evm_dai[] = { | |||
| 218 | .ops = &evm_spdif_ops, | 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 | .name = "TLV320AIC3X", | 234 | .name = "TLV320AIC3X", |
| 223 | .stream_name = "AIC3X", | 235 | .stream_name = "AIC3X", |
| 224 | .cpu_dai_name= "davinci-mcasp.0", | 236 | .cpu_dai_name= "davinci-mcasp.0", |
| @@ -259,13 +271,13 @@ static struct snd_soc_card dm6467_snd_soc_card_evm = { | |||
| 259 | 271 | ||
| 260 | static struct snd_soc_card da830_snd_soc_card = { | 272 | static struct snd_soc_card da830_snd_soc_card = { |
| 261 | .name = "DA830/OMAP-L137 EVM", | 273 | .name = "DA830/OMAP-L137 EVM", |
| 262 | .dai_link = &da8xx_evm_dai, | 274 | .dai_link = &da830_evm_dai, |
| 263 | .num_links = 1, | 275 | .num_links = 1, |
| 264 | }; | 276 | }; |
| 265 | 277 | ||
| 266 | static struct snd_soc_card da850_snd_soc_card = { | 278 | static struct snd_soc_card da850_snd_soc_card = { |
| 267 | .name = "DA850/OMAP-L138 EVM", | 279 | .name = "DA850/OMAP-L138 EVM", |
| 268 | .dai_link = &da8xx_evm_dai, | 280 | .dai_link = &da850_evm_dai, |
| 269 | .num_links = 1, | 281 | .num_links = 1, |
| 270 | }; | 282 | }; |
| 271 | 283 | ||
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index c4b60610beb..c3f6f1e7279 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c | |||
| @@ -1449,6 +1449,7 @@ static int soc_post_component_init(struct snd_soc_card *card, | |||
| 1449 | rtd = &card->rtd_aux[num]; | 1449 | rtd = &card->rtd_aux[num]; |
| 1450 | name = aux_dev->name; | 1450 | name = aux_dev->name; |
| 1451 | } | 1451 | } |
| 1452 | rtd->card = card; | ||
| 1452 | 1453 | ||
| 1453 | /* machine controls, routes and widgets are not prefixed */ | 1454 | /* machine controls, routes and widgets are not prefixed */ |
| 1454 | temp = codec->name_prefix; | 1455 | temp = codec->name_prefix; |
| @@ -1471,7 +1472,6 @@ static int soc_post_component_init(struct snd_soc_card *card, | |||
| 1471 | 1472 | ||
| 1472 | /* register the rtd device */ | 1473 | /* register the rtd device */ |
| 1473 | rtd->codec = codec; | 1474 | rtd->codec = codec; |
| 1474 | rtd->card = card; | ||
| 1475 | rtd->dev.parent = card->dev; | 1475 | rtd->dev.parent = card->dev; |
| 1476 | rtd->dev.release = rtd_release; | 1476 | rtd->dev.release = rtd_release; |
| 1477 | rtd->dev.init_name = name; | 1477 | rtd->dev.init_name = name; |
diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c index 7df89b3d7de..85af6051b52 100644 --- a/sound/usb/mixer.c +++ b/sound/usb/mixer.c | |||
| @@ -95,7 +95,7 @@ enum { | |||
| 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 | enum { | 99 | enum { |
| 100 | USB_XU_CLOCK_RATE = 0xe301, | 100 | USB_XU_CLOCK_RATE = 0xe301, |
| 101 | USB_XU_CLOCK_SOURCE = 0xe302, | 101 | USB_XU_CLOCK_SOURCE = 0xe302, |
| @@ -1566,7 +1566,7 @@ static int build_audio_procunit(struct mixer_build *state, int unitid, void *raw | |||
| 1566 | cval->initialized = 1; | 1566 | cval->initialized = 1; |
| 1567 | } else { | 1567 | } else { |
| 1568 | if (type == USB_XU_CLOCK_RATE) { | 1568 | if (type == USB_XU_CLOCK_RATE) { |
| 1569 | /* E-Mu USB 0404/0202/TrackerPre | 1569 | /* E-Mu USB 0404/0202/TrackerPre/0204 |
| 1570 | * samplerate control quirk | 1570 | * samplerate control quirk |
| 1571 | */ | 1571 | */ |
| 1572 | cval->min = 0; | 1572 | cval->min = 0; |
diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h index 35999874d30..921a86fd988 100644 --- a/sound/usb/quirks-table.h +++ b/sound/usb/quirks-table.h | |||
| @@ -79,6 +79,13 @@ | |||
| 79 | .idProduct = 0x3f0a, | 79 | .idProduct = 0x3f0a, |
| 80 | .bInterfaceClass = USB_CLASS_AUDIO, | 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 | * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface | 91 | * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface |
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c index cf8bf088394..e314cdb8500 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c | |||
| @@ -532,7 +532,7 @@ int snd_usb_is_big_endian_format(struct snd_usb_audio *chip, struct audioformat | |||
| 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 | * not for interface. | 536 | * not for interface. |
| 537 | */ | 537 | */ |
| 538 | 538 | ||
| @@ -589,6 +589,7 @@ void snd_usb_set_format_quirk(struct snd_usb_substream *subs, | |||
| 589 | case USB_ID(0x041e, 0x3f02): /* E-Mu 0202 USB */ | 589 | case USB_ID(0x041e, 0x3f02): /* E-Mu 0202 USB */ |
| 590 | case USB_ID(0x041e, 0x3f04): /* E-Mu 0404 USB */ | 590 | case USB_ID(0x041e, 0x3f04): /* E-Mu 0404 USB */ |
| 591 | case USB_ID(0x041e, 0x3f0a): /* E-Mu Tracker Pre */ | 591 | case USB_ID(0x041e, 0x3f0a): /* E-Mu Tracker Pre */ |
| 592 | case USB_ID(0x041e, 0x3f19): /* E-Mu 0204 USB */ | ||
| 592 | set_format_emu_quirk(subs, fmt); | 593 | set_format_emu_quirk(subs, fmt); |
| 593 | break; | 594 | break; |
| 594 | } | 595 | } |
