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()
This commit is contained in:
commit
d8ed516f82
10 changed files with 82 additions and 16 deletions
|
@ -45,12 +45,13 @@ static enum hrtimer_restart snd_hrtimer_callback(struct hrtimer *hrt)
|
|||
{
|
||||
struct snd_hrtimer *stime = container_of(hrt, struct snd_hrtimer, hrt);
|
||||
struct snd_timer *t = stime->timer;
|
||||
unsigned long oruns;
|
||||
|
||||
if (!atomic_read(&stime->running))
|
||||
return HRTIMER_NORESTART;
|
||||
|
||||
hrtimer_forward_now(hrt, ns_to_ktime(t->sticks * resolution));
|
||||
snd_timer_interrupt(stime->timer, t->sticks);
|
||||
oruns = hrtimer_forward_now(hrt, ns_to_ktime(t->sticks * resolution));
|
||||
snd_timer_interrupt(stime->timer, t->sticks * oruns);
|
||||
|
||||
if (!atomic_read(&stime->running))
|
||||
return HRTIMER_NORESTART;
|
||||
|
@ -104,7 +105,7 @@ static int snd_hrtimer_stop(struct snd_timer *t)
|
|||
}
|
||||
|
||||
static struct snd_timer_hardware hrtimer_hw = {
|
||||
.flags = SNDRV_TIMER_HW_AUTO,
|
||||
.flags = SNDRV_TIMER_HW_AUTO | SNDRV_TIMER_HW_TASKLET,
|
||||
.open = snd_hrtimer_open,
|
||||
.close = snd_hrtimer_close,
|
||||
.start = snd_hrtimer_start,
|
||||
|
|
|
@ -2703,7 +2703,7 @@ static int __devinit azx_probe(struct pci_dev *pci,
|
|||
if (err < 0)
|
||||
goto out_free;
|
||||
#ifdef CONFIG_SND_HDA_PATCH_LOADER
|
||||
if (patch[dev]) {
|
||||
if (patch[dev] && *patch[dev]) {
|
||||
snd_printk(KERN_ERR SFX "Applying patch firmware '%s'\n",
|
||||
patch[dev]);
|
||||
err = snd_hda_load_patch(chip->bus, patch[dev]);
|
||||
|
|
|
@ -642,6 +642,7 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, hda_nid_t nid,
|
|||
hdmi_ai->ver = 0x01;
|
||||
hdmi_ai->len = 0x0a;
|
||||
hdmi_ai->CC02_CT47 = channels - 1;
|
||||
hdmi_ai->CA = ca;
|
||||
hdmi_checksum_audio_infoframe(hdmi_ai);
|
||||
} else if (spec->sink_eld[i].conn_type == 1) { /* DisplayPort */
|
||||
struct dp_audio_infoframe *dp_ai;
|
||||
|
@ -651,6 +652,7 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, hda_nid_t nid,
|
|||
dp_ai->len = 0x1b;
|
||||
dp_ai->ver = 0x11 << 2;
|
||||
dp_ai->CC02_CT47 = channels - 1;
|
||||
dp_ai->CA = ca;
|
||||
} else {
|
||||
snd_printd("HDMI: unknown connection type at pin %d\n",
|
||||
pin_nid);
|
||||
|
|
|
@ -2290,6 +2290,29 @@ static struct snd_kcontrol_new alc888_base_mixer[] = {
|
|||
{ } /* end */
|
||||
};
|
||||
|
||||
static struct snd_kcontrol_new alc888_acer_aspire_4930g_mixer[] = {
|
||||
HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
|
||||
HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x0, HDA_OUTPUT),
|
||||
HDA_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0f, 2, 0x0,
|
||||
HDA_OUTPUT),
|
||||
HDA_BIND_MUTE_MONO("Center Playback Switch", 0x0f, 2, 2, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0f, 1, 0x0, HDA_OUTPUT),
|
||||
HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0f, 1, 2, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("Side Playback Volume", 0x0e, 0x0, HDA_OUTPUT),
|
||||
HDA_BIND_MUTE("Side Playback Switch", 0x0e, 2, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT),
|
||||
HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT),
|
||||
HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT),
|
||||
HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
|
||||
{ } /* end */
|
||||
};
|
||||
|
||||
|
||||
static struct snd_kcontrol_new alc889_acer_aspire_8930g_mixer[] = {
|
||||
HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
|
||||
HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
|
||||
|
@ -10359,7 +10382,7 @@ static struct alc_config_preset alc882_presets[] = {
|
|||
.init_hook = alc_automute_amp,
|
||||
},
|
||||
[ALC888_ACER_ASPIRE_4930G] = {
|
||||
.mixers = { alc888_base_mixer,
|
||||
.mixers = { alc888_acer_aspire_4930g_mixer,
|
||||
alc883_chmode_mixer },
|
||||
.init_verbs = { alc883_init_verbs, alc880_gpio1_init_verbs,
|
||||
alc888_acer_aspire_4930g_verbs },
|
||||
|
@ -18802,6 +18825,7 @@ static struct snd_pci_quirk alc662_cfg_tbl[] = {
|
|||
ALC662_3ST_6ch_DIG),
|
||||
SND_PCI_QUIRK_MASK(0x1854, 0xf000, 0x2000, "ASUS H13-200x",
|
||||
ALC663_ASUS_H13),
|
||||
SND_PCI_QUIRK(0x1991, 0x5628, "Ordissimo EVE", ALC662_LENOVO_101E),
|
||||
{}
|
||||
};
|
||||
|
||||
|
@ -19494,6 +19518,7 @@ static const struct alc_fixup alc662_fixups[] = {
|
|||
};
|
||||
|
||||
static struct snd_pci_quirk alc662_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1025, 0x0308, "Acer Aspire 8942G", ALC662_FIXUP_ASPIRE),
|
||||
SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE),
|
||||
SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
|
||||
SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD),
|
||||
|
|
|
@ -1287,9 +1287,9 @@ SND_SOC_DAPM_SUPPLY("DSPINTCLK", WM8994_CLOCKING_1, 1, 0, NULL, 0),
|
|||
SND_SOC_DAPM_SUPPLY("AIF1CLK", WM8994_AIF1_CLOCKING_1, 0, 0, NULL, 0),
|
||||
SND_SOC_DAPM_SUPPLY("AIF2CLK", WM8994_AIF2_CLOCKING_1, 0, 0, NULL, 0),
|
||||
|
||||
SND_SOC_DAPM_AIF_OUT("AIF1ADC1L", "AIF1 Capture",
|
||||
SND_SOC_DAPM_AIF_OUT("AIF1ADC1L", NULL,
|
||||
0, WM8994_POWER_MANAGEMENT_4, 9, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("AIF1ADC1R", "AIF1 Capture",
|
||||
SND_SOC_DAPM_AIF_OUT("AIF1ADC1R", NULL,
|
||||
0, WM8994_POWER_MANAGEMENT_4, 8, 0),
|
||||
SND_SOC_DAPM_AIF_IN_E("AIF1DAC1L", NULL, 0,
|
||||
WM8994_POWER_MANAGEMENT_5, 9, 0, wm8958_aif_ev,
|
||||
|
@ -1298,9 +1298,9 @@ SND_SOC_DAPM_AIF_IN_E("AIF1DAC1R", NULL, 0,
|
|||
WM8994_POWER_MANAGEMENT_5, 8, 0, wm8958_aif_ev,
|
||||
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
|
||||
|
||||
SND_SOC_DAPM_AIF_OUT("AIF1ADC2L", "AIF1 Capture",
|
||||
SND_SOC_DAPM_AIF_OUT("AIF1ADC2L", NULL,
|
||||
0, WM8994_POWER_MANAGEMENT_4, 11, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("AIF1ADC2R", "AIF1 Capture",
|
||||
SND_SOC_DAPM_AIF_OUT("AIF1ADC2R", NULL,
|
||||
0, WM8994_POWER_MANAGEMENT_4, 10, 0),
|
||||
SND_SOC_DAPM_AIF_IN_E("AIF1DAC2L", NULL, 0,
|
||||
WM8994_POWER_MANAGEMENT_5, 11, 0, wm8958_aif_ev,
|
||||
|
@ -1345,6 +1345,7 @@ SND_SOC_DAPM_AIF_IN_E("AIF2DACR", NULL, 0,
|
|||
|
||||
SND_SOC_DAPM_AIF_IN("AIF1DACDAT", "AIF1 Playback", 0, SND_SOC_NOPM, 0, 0),
|
||||
SND_SOC_DAPM_AIF_IN("AIF2DACDAT", "AIF2 Playback", 0, SND_SOC_NOPM, 0, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("AIF1ADCDAT", "AIF1 Capture", 0, SND_SOC_NOPM, 0, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("AIF2ADCDAT", "AIF2 Capture", 0, SND_SOC_NOPM, 0, 0),
|
||||
|
||||
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[] = {
|
|||
{ "AIF2DAC2R Mixer", "Left Sidetone Switch", "Left Sidetone" },
|
||||
{ "AIF2DAC2R Mixer", "Right Sidetone Switch", "Right Sidetone" },
|
||||
|
||||
{ "AIF1ADCDAT", NULL, "AIF1ADC1L" },
|
||||
{ "AIF1ADCDAT", NULL, "AIF1ADC1R" },
|
||||
{ "AIF1ADCDAT", NULL, "AIF1ADC2L" },
|
||||
{ "AIF1ADCDAT", NULL, "AIF1ADC2R" },
|
||||
|
||||
{ "AIF2ADCDAT", NULL, "AIF2ADC Mux" },
|
||||
|
||||
/* AIF3 output */
|
||||
|
@ -1578,6 +1584,13 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|||
{ "Right Headphone Mux", "DAC", "DAC1R" },
|
||||
};
|
||||
|
||||
static const struct snd_soc_dapm_route wm8994_revd_intercon[] = {
|
||||
{ "AIF1DACDAT", NULL, "AIF2DACDAT" },
|
||||
{ "AIF2DACDAT", NULL, "AIF1DACDAT" },
|
||||
{ "AIF1ADCDAT", NULL, "AIF2ADCDAT" },
|
||||
{ "AIF2ADCDAT", NULL, "AIF1ADCDAT" },
|
||||
};
|
||||
|
||||
static const struct snd_soc_dapm_route wm8994_intercon[] = {
|
||||
{ "AIF2DACL", NULL, "AIF2DAC Mux" },
|
||||
{ "AIF2DACR", NULL, "AIF2DAC Mux" },
|
||||
|
@ -3129,6 +3142,11 @@ static int wm8994_codec_probe(struct snd_soc_codec *codec)
|
|||
case WM8994:
|
||||
snd_soc_dapm_add_routes(dapm, wm8994_intercon,
|
||||
ARRAY_SIZE(wm8994_intercon));
|
||||
|
||||
if (wm8994->revision < 4)
|
||||
snd_soc_dapm_add_routes(dapm, wm8994_revd_intercon,
|
||||
ARRAY_SIZE(wm8994_revd_intercon));
|
||||
|
||||
break;
|
||||
case WM8958:
|
||||
snd_soc_dapm_add_routes(dapm, wm8958_intercon,
|
||||
|
|
|
@ -218,7 +218,19 @@ static struct snd_soc_dai_link dm6467_evm_dai[] = {
|
|||
.ops = &evm_spdif_ops,
|
||||
},
|
||||
};
|
||||
static struct snd_soc_dai_link da8xx_evm_dai = {
|
||||
|
||||
static struct snd_soc_dai_link da830_evm_dai = {
|
||||
.name = "TLV320AIC3X",
|
||||
.stream_name = "AIC3X",
|
||||
.cpu_dai_name = "davinci-mcasp.1",
|
||||
.codec_dai_name = "tlv320aic3x-hifi",
|
||||
.codec_name = "tlv320aic3x-codec.1-0018",
|
||||
.platform_name = "davinci-pcm-audio",
|
||||
.init = evm_aic3x_init,
|
||||
.ops = &evm_ops,
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_link da850_evm_dai = {
|
||||
.name = "TLV320AIC3X",
|
||||
.stream_name = "AIC3X",
|
||||
.cpu_dai_name= "davinci-mcasp.0",
|
||||
|
@ -259,13 +271,13 @@ static struct snd_soc_card dm6467_snd_soc_card_evm = {
|
|||
|
||||
static struct snd_soc_card da830_snd_soc_card = {
|
||||
.name = "DA830/OMAP-L137 EVM",
|
||||
.dai_link = &da8xx_evm_dai,
|
||||
.dai_link = &da830_evm_dai,
|
||||
.num_links = 1,
|
||||
};
|
||||
|
||||
static struct snd_soc_card da850_snd_soc_card = {
|
||||
.name = "DA850/OMAP-L138 EVM",
|
||||
.dai_link = &da8xx_evm_dai,
|
||||
.dai_link = &da850_evm_dai,
|
||||
.num_links = 1,
|
||||
};
|
||||
|
||||
|
|
|
@ -1449,6 +1449,7 @@ static int soc_post_component_init(struct snd_soc_card *card,
|
|||
rtd = &card->rtd_aux[num];
|
||||
name = aux_dev->name;
|
||||
}
|
||||
rtd->card = card;
|
||||
|
||||
/* machine controls, routes and widgets are not prefixed */
|
||||
temp = codec->name_prefix;
|
||||
|
@ -1471,7 +1472,6 @@ static int soc_post_component_init(struct snd_soc_card *card,
|
|||
|
||||
/* register the rtd device */
|
||||
rtd->codec = codec;
|
||||
rtd->card = card;
|
||||
rtd->dev.parent = card->dev;
|
||||
rtd->dev.release = rtd_release;
|
||||
rtd->dev.init_name = name;
|
||||
|
|
|
@ -95,7 +95,7 @@ enum {
|
|||
};
|
||||
|
||||
|
||||
/*E-mu 0202(0404) eXtension Unit(XU) control*/
|
||||
/*E-mu 0202/0404/0204 eXtension Unit(XU) control*/
|
||||
enum {
|
||||
USB_XU_CLOCK_RATE = 0xe301,
|
||||
USB_XU_CLOCK_SOURCE = 0xe302,
|
||||
|
@ -1566,7 +1566,7 @@ static int build_audio_procunit(struct mixer_build *state, int unitid, void *raw
|
|||
cval->initialized = 1;
|
||||
} else {
|
||||
if (type == USB_XU_CLOCK_RATE) {
|
||||
/* E-Mu USB 0404/0202/TrackerPre
|
||||
/* E-Mu USB 0404/0202/TrackerPre/0204
|
||||
* samplerate control quirk
|
||||
*/
|
||||
cval->min = 0;
|
||||
|
|
|
@ -79,6 +79,13 @@
|
|||
.idProduct = 0x3f0a,
|
||||
.bInterfaceClass = USB_CLASS_AUDIO,
|
||||
},
|
||||
{
|
||||
/* E-Mu 0204 USB */
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
|
||||
.idVendor = 0x041e,
|
||||
.idProduct = 0x3f19,
|
||||
.bInterfaceClass = USB_CLASS_AUDIO,
|
||||
},
|
||||
|
||||
/*
|
||||
* Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
|
||||
|
|
|
@ -532,7 +532,7 @@ int snd_usb_is_big_endian_format(struct snd_usb_audio *chip, struct audioformat
|
|||
}
|
||||
|
||||
/*
|
||||
* For E-Mu 0404USB/0202USB/TrackerPre sample rate should be set for device,
|
||||
* For E-Mu 0404USB/0202USB/TrackerPre/0204 sample rate should be set for device,
|
||||
* not for interface.
|
||||
*/
|
||||
|
||||
|
@ -589,6 +589,7 @@ void snd_usb_set_format_quirk(struct snd_usb_substream *subs,
|
|||
case USB_ID(0x041e, 0x3f02): /* E-Mu 0202 USB */
|
||||
case USB_ID(0x041e, 0x3f04): /* E-Mu 0404 USB */
|
||||
case USB_ID(0x041e, 0x3f0a): /* E-Mu Tracker Pre */
|
||||
case USB_ID(0x041e, 0x3f19): /* E-Mu 0204 USB */
|
||||
set_format_emu_quirk(subs, fmt);
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue