History

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

Pull sound fixes from Takashi Iwai: "This batch became slightly large, just because I've been on vacation for the last two weeks. Nothing to scare much here, all device-specific fixes, mostly small patches. Majority of patches are for HD-audio, especially Dell machines. The rest are small ASoC fixes for various codecs, and a USB-audio quirk. One PCM fix is included to ease the faulty condition checks in the case of two periods PCM buffers" * tag 'sound-4.1-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: hda - Disable widget power-saving for ALC292 & co ALSA: hda - Reduce verbs by node power-saves ALSA: sound/atmel/ac97c.c: remove unused variable ALSA: usb-audio: Add quirk for MS LifeCam Studio ALSA: pcm: Modify double acknowledged interrupts check condition ALSA: hda/realtek - ALC292 dock fix for Thinkpad L450 ALSA: hda - Add Conexant codecs CX20721, CX20722, CX20723 and CX20724 ALSA: hda - Fix headset mic and mic-in for a Dell desktop ASoC: wm8994: correct BCLK DIV 348 to 384 ASoC: wm8960: fix "RINPUT3" audio route error ASoC: dapm: Modify widget stream name according to prefix ALSA: hda - Add headset mic quirk for Dell Inspiron 5548 ASoC: rt5645: Fix mask for setting RT5645_DMIC_2_DP_GPIO12 bit ASoC: rt5645: Add ACPI match ID ALSA: hda/realtek - Add ALC298 alias name for Dell ASoC: uda1380: Avoid accessing i2c bus when codec is disabled ALSA: hda/realtek - Fix typo for ALC286/ALC288 ASoC: mc13783: Fix wrong mask value used in mc13xxx_reg_rmw() calls ALSA: hda - Add headphone quirk for Lifebook E752 ASoC: davinci-mcasp: Correct pm status check in suspend callback

Linus Torvalds committed 11 years ago

Commit 0c68e5b2 parents 1865892 219f47e12 files · +93 −14Browse files

Unified · Split

12 files
  1. sound/atmel/ac97c.c +0 −1
  2. sound/core/pcm_lib.c +1 −1
  3. sound/pci/hda/hda_generic.c +8 −0
  4. sound/pci/hda/patch_conexant.c +12 −0
  5. sound/pci/hda/patch_realtek.c +57 −3
  6. sound/soc/codecs/mc13783.c +2 −2
  7. sound/soc/codecs/uda1380.c +1 −1
  8. sound/soc/codecs/wm8960.c +1 −1
  9. sound/soc/codecs/wm8994.c +1 −1
  10. sound/soc/davinci/davinci-mcasp.c +1 −1
  11. sound/soc/soc-dapm.c +8 −3
  12. sound/usb/quirks.c +1 −0
sound/atmel/ac97c.c+0−1
@@ -916,7 +916,6 @@ static struct ac97c_platform_data *atmel_ac97c_probe_dt(struct device *dev) · 915 unmodified lines
916916 {
917917 struct ac97c_platform_data *pdata;
918918 struct device_node *node = dev->of_node;
919− const struct of_device_id *match;
920919
921920 if (!node) {
922921 dev_err(dev, "Device does not have associated DT data\n");
sound/core/pcm_lib.c+1−1
@@ -339,7 +339,7 @@ static int snd_pcm_update_hw_ptr0(struct snd_pcm_substream *substream, · 338 unmodified lines
339339 if (delta > new_hw_ptr) {
340340 /* check for double acknowledged interrupts */
341341 hdelta = curr_jiffies - runtime->hw_ptr_jiffies;
342− if (hdelta > runtime->hw_ptr_buffer_jiffies/2) {
342+ if (hdelta > runtime->hw_ptr_buffer_jiffies/2 + 1) {
343343 hw_base += runtime->buffer_size;
344344 if (hw_base >= runtime->boundary) {
345345 hw_base = 0;
sound/pci/hda/hda_generic.c+8−0
@@ -844,8 +844,16 @@ static hda_nid_t path_power_update(struct hda_codec *codec, · 843 unmodified lines
844844 snd_hda_codec_write(codec, nid, 0,
845845 AC_VERB_SET_POWER_STATE, state);
846846 changed = nid;
847+ /* all known codecs seem to be capable to handl
848+ * widgets state even in D3, so far.
849+ * if any new codecs need to restore the widget
850+ * states after D0 transition, call the function
851+ * below.
852+ */
853+#if 0 /* disabled */
847854 if (state == AC_PWRST_D0)
848855 snd_hdac_regmap_sync_node(&codec->core, nid);
856+#endif
849857 }
850858 }
851859 return changed;
sound/pci/hda/patch_conexant.c+12−0
@@ -968,6 +968,14 @@ static const struct hda_codec_preset snd_hda_preset_conexant[] = { · 967 unmodified lines
968968 .patch = patch_conexant_auto },
969969 { .id = 0x14f150b9, .name = "CX20665",
970970 .patch = patch_conexant_auto },
971+ { .id = 0x14f150f1, .name = "CX20721",
972+ .patch = patch_conexant_auto },
973+ { .id = 0x14f150f2, .name = "CX20722",
974+ .patch = patch_conexant_auto },
975+ { .id = 0x14f150f3, .name = "CX20723",
976+ .patch = patch_conexant_auto },
977+ { .id = 0x14f150f4, .name = "CX20724",
978+ .patch = patch_conexant_auto },
971979 { .id = 0x14f1510f, .name = "CX20751/2",
972980 .patch = patch_conexant_auto },
973981 { .id = 0x14f15110, .name = "CX20751/2",
@@ -1002,6 +1010,10 @@ MODULE_ALIAS("snd-hda-codec-id:14f150ab"); · 28 unmodified lines
10021010 MODULE_ALIAS("snd-hda-codec-id:14f150ac");
10031011 MODULE_ALIAS("snd-hda-codec-id:14f150b8");
10041012 MODULE_ALIAS("snd-hda-codec-id:14f150b9");
1013+MODULE_ALIAS("snd-hda-codec-id:14f150f1");
1014+MODULE_ALIAS("snd-hda-codec-id:14f150f2");
1015+MODULE_ALIAS("snd-hda-codec-id:14f150f3");
1016+MODULE_ALIAS("snd-hda-codec-id:14f150f4");
10051017 MODULE_ALIAS("snd-hda-codec-id:14f1510f");
10061018 MODULE_ALIAS("snd-hda-codec-id:14f15110");
10071019 MODULE_ALIAS("snd-hda-codec-id:14f15111");
sound/pci/hda/patch_realtek.c+57−3
@@ -883,6 +883,7 @@ static struct alc_codec_rename_pci_table rename_pci_tbl[] = { · 882 unmodified lines
883883 { 0x10ec0668, 0x1028, 0, "ALC3661" },
884884 { 0x10ec0275, 0x1028, 0, "ALC3260" },
885885 { 0x10ec0899, 0x1028, 0, "ALC3861" },
886+ { 0x10ec0298, 0x1028, 0, "ALC3266" },
886887 { 0x10ec0670, 0x1025, 0, "ALC669X" },
887888 { 0x10ec0676, 0x1025, 0, "ALC679X" },
888889 { 0x10ec0282, 0x1043, 0, "ALC3229" },
@@ -3673,6 +3674,10 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin, · 2784 unmodified lines
36733674 alc_process_coef_fw(codec, coef0293);
36743675 snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
36753676 break;
3677+ case 0x10ec0662:
3678+ snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
3679+ snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
3680+ break;
36763681 case 0x10ec0668:
36773682 alc_write_coef_idx(codec, 0x11, 0x0001);
36783683 snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
@@ -3738,7 +3743,6 @@ static void alc_headset_mode_default(struct hda_codec *codec) · 59 unmodified lines
37383743 case 0x10ec0288:
37393744 alc_process_coef_fw(codec, coef0288);
37403745 break;
3741− break;
37423746 case 0x10ec0292:
37433747 alc_process_coef_fw(codec, coef0292);
37443748 break;
@@ -4012,7 +4016,7 @@ static void alc_update_headset_mode(struct hda_codec *codec) · 267 unmodified lines
40124016 if (new_headset_mode != ALC_HEADSET_MODE_MIC) {
40134017 snd_hda_set_pin_ctl_cache(codec, hp_pin,
40144018 AC_PINCTL_OUT_EN | AC_PINCTL_HP_EN);
4015− if (spec->headphone_mic_pin)
4019+ if (spec->headphone_mic_pin && spec->headphone_mic_pin != hp_pin)
40164020 snd_hda_set_pin_ctl_cache(codec, spec->headphone_mic_pin,
40174021 PIN_VREFHIZ);
40184022 }
@@ -4215,6 +4219,18 @@ static void alc_fixup_dell_xps13(struct hda_codec *codec, · 196 unmodified lines
42154219 }
42164220 }
42174221
4222+static void alc_fixup_headset_mode_alc662(struct hda_codec *codec,
4223+ const struct hda_fixup *fix, int action)
4224+{
4225+ struct alc_spec *spec = codec->spec;
4226+
4227+ if (action == HDA_FIXUP_ACT_PRE_PROBE) {
4228+ spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
4229+ spec->gen.hp_mic = 1; /* Mic-in is same pin as headphone */
4230+ } else
4231+ alc_fixup_headset_mode(codec, fix, action);
4232+}
4233+
42184234 static void alc_fixup_headset_mode_alc668(struct hda_codec *codec,
42194235 const struct hda_fixup *fix, int action)
42204236 {
@@ -5119,6 +5135,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { · 898 unmodified lines
51195135 SND_PCI_QUIRK(0x104d, 0x9099, "Sony VAIO S13", ALC275_FIXUP_SONY_DISABLE_AAMIX),
51205136 SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook", ALC269_FIXUP_LIFEBOOK),
51215137 SND_PCI_QUIRK(0x10cf, 0x15dc, "Lifebook T731", ALC269_FIXUP_LIFEBOOK_HP_PIN),
5138+ SND_PCI_QUIRK(0x10cf, 0x1757, "Lifebook E752", ALC269_FIXUP_LIFEBOOK_HP_PIN),
51225139 SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC),
51235140 SND_PCI_QUIRK(0x144d, 0xc109, "Samsung Ativ book 9 (NP900X3G)", ALC269_FIXUP_INV_DMIC),
51245141 SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_BXBT2807_MIC),
@@ -5148,6 +5165,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { · 23 unmodified lines
51485165 SND_PCI_QUIRK(0x17aa, 0x5026, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
51495166 SND_PCI_QUIRK(0x17aa, 0x5034, "Thinkpad T450", ALC292_FIXUP_TPT440_DOCK),
51505167 SND_PCI_QUIRK(0x17aa, 0x5036, "Thinkpad T450s", ALC292_FIXUP_TPT440_DOCK),
5168+ SND_PCI_QUIRK(0x17aa, 0x503c, "Thinkpad L450", ALC292_FIXUP_TPT440_DOCK),
51515169 SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
51525170 SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K),
51535171 SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD),
@@ -5345,6 +5363,13 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = { · 191 unmodified lines
53455363 {0x17, 0x40000000},
53465364 {0x1d, 0x40700001},
53475365 {0x21, 0x02211050}),
5366+ SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell Inspiron 5548", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
5367+ ALC255_STANDARD_PINS,
5368+ {0x12, 0x90a60180},
5369+ {0x14, 0x90170130},
5370+ {0x17, 0x40000000},
5371+ {0x1d, 0x40700001},
5372+ {0x21, 0x02211040}),
53485373 SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
53495374 ALC256_STANDARD_PINS,
53505375 {0x13, 0x40000000}),
@@ -5598,7 +5623,8 @@ static int patch_alc269(struct hda_codec *codec) · 247 unmodified lines
55985623
55995624 spec = codec->spec;
56005625 spec->gen.shared_mic_vref_pin = 0x18;
5601− codec->power_save_node = 1;
5626+ if (codec->core.vendor_id != 0x10ec0292)
5627+ codec->power_save_node = 1;
56025628
56035629 snd_hda_pick_fixup(codec, alc269_fixup_models,
56045630 alc269_fixup_tbl, alc269_fixups);
@@ -6079,7 +6105,9 @@ enum { · 474 unmodified lines
60796105 ALC662_FIXUP_NO_JACK_DETECT,
60806106 ALC662_FIXUP_ZOTAC_Z68,
60816107 ALC662_FIXUP_INV_DMIC,
6108+ ALC662_FIXUP_DELL_MIC_NO_PRESENCE,
60826109 ALC668_FIXUP_DELL_MIC_NO_PRESENCE,
6110+ ALC662_FIXUP_HEADSET_MODE,
60836111 ALC668_FIXUP_HEADSET_MODE,
60846112 ALC662_FIXUP_BASS_MODE4_CHMAP,
60856113 ALC662_FIXUP_BASS_16,
@@ -6272,6 +6300,20 @@ static const struct hda_fixup alc662_fixups[] = { · 186 unmodified lines
62726300 .chained = true,
62736301 .chain_id = ALC668_FIXUP_DELL_MIC_NO_PRESENCE
62746302 },
6303+ [ALC662_FIXUP_DELL_MIC_NO_PRESENCE] = {
6304+ .type = HDA_FIXUP_PINS,
6305+ .v.pins = (const struct hda_pintbl[]) {
6306+ { 0x19, 0x03a1113c }, /* use as headset mic, without its own jack detect */
6307+ /* headphone mic by setting pin control of 0x1b (headphone out) to in + vref_50 */
6308+ { }
6309+ },
6310+ .chained = true,
6311+ .chain_id = ALC662_FIXUP_HEADSET_MODE
6312+ },
6313+ [ALC662_FIXUP_HEADSET_MODE] = {
6314+ .type = HDA_FIXUP_FUNC,
6315+ .v.func = alc_fixup_headset_mode_alc662,
6316+ },
62756317 [ALC668_FIXUP_DELL_MIC_NO_PRESENCE] = {
62766318 .type = HDA_FIXUP_PINS,
62776319 .v.pins = (const struct hda_pintbl[]) {
@@ -6423,6 +6465,18 @@ static const struct hda_model_fixup alc662_fixup_models[] = { · 145 unmodified lines
64236465 };
64246466
64256467 static const struct snd_hda_pin_quirk alc662_pin_fixup_tbl[] = {
6468+ SND_HDA_PIN_QUIRK(0x10ec0662, 0x1028, "Dell", ALC662_FIXUP_DELL_MIC_NO_PRESENCE,
6469+ {0x12, 0x4004c000},
6470+ {0x14, 0x01014010},
6471+ {0x15, 0x411111f0},
6472+ {0x16, 0x411111f0},
6473+ {0x18, 0x01a19020},
6474+ {0x19, 0x411111f0},
6475+ {0x1a, 0x0181302f},
6476+ {0x1b, 0x0221401f},
6477+ {0x1c, 0x411111f0},
6478+ {0x1d, 0x4054c601},
6479+ {0x1e, 0x411111f0}),
64266480 SND_HDA_PIN_QUIRK(0x10ec0668, 0x1028, "Dell", ALC668_FIXUP_AUTO_MUTE,
64276481 {0x12, 0x99a30130},
64286482 {0x14, 0x90170110},
sound/soc/codecs/mc13783.c+2−2
@@ -623,14 +623,14 @@ static int mc13783_probe(struct snd_soc_codec *codec) · 622 unmodified lines
623623 AUDIO_SSI_SEL, 0);
624624 else
625625 mc13xxx_reg_rmw(priv->mc13xxx, MC13783_AUDIO_CODEC,
626− 0, AUDIO_SSI_SEL);
626+ AUDIO_SSI_SEL, AUDIO_SSI_SEL);
627627
628628 if (priv->dac_ssi_port == MC13783_SSI1_PORT)
629629 mc13xxx_reg_rmw(priv->mc13xxx, MC13783_AUDIO_DAC,
630630 AUDIO_SSI_SEL, 0);
631631 else
632632 mc13xxx_reg_rmw(priv->mc13xxx, MC13783_AUDIO_DAC,
633− 0, AUDIO_SSI_SEL);
633+ AUDIO_SSI_SEL, AUDIO_SSI_SEL);
634634
635635 return 0;
636636 }
sound/soc/codecs/uda1380.c+1−1
@@ -437,7 +437,7 @@ static int uda1380_set_dai_fmt_both(struct snd_soc_dai *codec_dai, · 436 unmodified lines
437437 if ((fmt & SND_SOC_DAIFMT_MASTER_MASK) != SND_SOC_DAIFMT_CBS_CFS)
438438 return -EINVAL;
439439
440− uda1380_write(codec, UDA1380_IFACE, iface);
440+ uda1380_write_reg_cache(codec, UDA1380_IFACE, iface);
441441
442442 return 0;
443443 }
sound/soc/codecs/wm8960.c+1−1
@@ -395,7 +395,7 @@ static const struct snd_soc_dapm_route audio_paths[] = { · 394 unmodified lines
395395 { "Right Input Mixer", "Boost Switch", "Right Boost Mixer", },
396396 { "Right Input Mixer", NULL, "RINPUT1", }, /* Really Boost Switch */
397397 { "Right Input Mixer", NULL, "RINPUT2" },
398− { "Right Input Mixer", NULL, "LINPUT3" },
398+ { "Right Input Mixer", NULL, "RINPUT3" },
399399
400400 { "Left ADC", NULL, "Left Input Mixer" },
401401 { "Right ADC", NULL, "Right Input Mixer" },
sound/soc/codecs/wm8994.c+1−1
@@ -2754,7 +2754,7 @@ static struct { · 2753 unmodified lines
27542754 };
27552755
27562756 static int fs_ratios[] = {
2757− 64, 128, 192, 256, 348, 512, 768, 1024, 1408, 1536
2757+ 64, 128, 192, 256, 384, 512, 768, 1024, 1408, 1536
27582758 };
27592759
27602760 static int bclk_divs[] = {
sound/soc/davinci/davinci-mcasp.c+1−1
@@ -1247,7 +1247,7 @@ static int davinci_mcasp_suspend(struct snd_soc_dai *dai) · 1246 unmodified lines
12471247 u32 reg;
12481248 int i;
12491249
1250− context->pm_state = pm_runtime_enabled(mcasp->dev);
1250+ context->pm_state = pm_runtime_active(mcasp->dev);
12511251 if (!context->pm_state)
12521252 pm_runtime_get_sync(mcasp->dev);
12531253
sound/soc/soc-dapm.c+8−3
@@ -3100,11 +3100,16 @@ snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm, · 3099 unmodified lines
31003100 }
31013101
31023102 prefix = soc_dapm_prefix(dapm);
3103− if (prefix)
3103+ if (prefix) {
31043104 w->name = kasprintf(GFP_KERNEL, "%s %s", prefix, widget->name);
3105− else
3105+ if (widget->sname)
3106+ w->sname = kasprintf(GFP_KERNEL, "%s %s", prefix,
3107+ widget->sname);
3108+ } else {
31063109 w->name = kasprintf(GFP_KERNEL, "%s", widget->name);
3107−
3110+ if (widget->sname)
3111+ w->sname = kasprintf(GFP_KERNEL, "%s", widget->sname);
3112+ }
31083113 if (w->name == NULL) {
31093114 kfree(w);
31103115 return NULL;
sound/usb/quirks.c+1−0
@@ -1117,6 +1117,7 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip) · 1116 unmodified lines
11171117 switch (chip->usb_id) {
11181118 case USB_ID(0x045E, 0x075D): /* MS Lifecam Cinema */
11191119 case USB_ID(0x045E, 0x076D): /* MS Lifecam HD-5000 */
1120+ case USB_ID(0x045E, 0x0772): /* MS Lifecam Studio */
11201121 case USB_ID(0x04D8, 0xFEEA): /* Benchmark DAC1 Pre */
11211122 return true;
11221123 }