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

Pull sound fixes from Takashi Iwai:
"This contains small fixes since the previous pull request:

- A few regression fixes and small updates of HD-audio

- Yet another fix for Haswell HDMI audio

- A copule of trivial fixes in ASoC McASP, DPAM and WM8994"

* tag 'sound-3.10' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
Revert "ALSA: hda - Don't set up active streams twice"
ALSA: Add comment for control TLV API
ALSA: hda - Apply pin-enablement workaround to all Haswell HDMI codecs
ALSA: HDA: Fix Oops caused by dereference NULL pointer
ALSA: mips/sgio2audio: Remove redundant platform_set_drvdata()
ALSA: mips/hal2: Remove redundant platform_set_drvdata()
ALSA: hda - Fix 3.9 regression of EAPD init on Conexant codecs
sound: Fix make allmodconfig on MIPS
ALSA: hda - Fix system panic when DMA > 40 bits for Nvidia audio controllers
ALSA: atmel: Remove redundant platform_set_drvdata()
ASoC: McASP: Fix receive clock polarity in DAIFMT_NB_NF mode.
ASoC: wm8994: missing break in wm8994_aif3_hw_params()
ASoC: McASP: Add pins output direction for rx clocks when configured in CBS_CFS format
ASoC: dapm: use clk_prepare_enable and clk_disable_unprepare

+56 -49
+5 -1
include/sound/tlv.h
··· 74 74 #define DECLARE_TLV_DB_LINEAR(name, min_dB, max_dB) \ 75 75 unsigned int name[] = { TLV_DB_LINEAR_ITEM(min_dB, max_dB) } 76 76 77 - /* dB range container */ 77 + /* dB range container: 78 + * Items in dB range container must be ordered by their values and by their 79 + * dB values. This implies that larger values must correspond with larger 80 + * dB values (which is also required for all other mixer controls). 81 + */ 78 82 /* Each item is: <min> <max> <TLV> */ 79 83 #define TLV_DB_RANGE_ITEM(...) \ 80 84 TLV_ITEM(SNDRV_CTL_TLVT_DB_RANGE, __VA_ARGS__)
-2
sound/atmel/abdac.c
··· 583 583 free_irq(dac->irq, dac); 584 584 snd_card_free(card); 585 585 586 - platform_set_drvdata(pdev, NULL); 587 - 588 586 return 0; 589 587 } 590 588
-2
sound/atmel/ac97c.c
··· 1199 1199 snd_card_set_dev(card, NULL); 1200 1200 snd_card_free(card); 1201 1201 1202 - platform_set_drvdata(pdev, NULL); 1203 - 1204 1202 return 0; 1205 1203 } 1206 1204
-1
sound/mips/hal2.c
··· 922 922 struct snd_card *card = platform_get_drvdata(pdev); 923 923 924 924 snd_card_free(card); 925 - platform_set_drvdata(pdev, NULL); 926 925 return 0; 927 926 } 928 927
-1
sound/mips/sgio2audio.c
··· 963 963 struct snd_card *card = platform_get_drvdata(pdev); 964 964 965 965 snd_card_free(card); 966 - platform_set_drvdata(pdev, NULL); 967 966 return 0; 968 967 } 969 968
+1
sound/oss/Kconfig
··· 250 250 menuconfig SOUND_OSS 251 251 tristate "OSS sound modules" 252 252 depends on ISA_DMA_API && VIRT_TO_BUS 253 + depends on !ISA_DMA_SUPPORT_BROKEN 253 254 help 254 255 OSS is the Open Sound System suite of sound card drivers. They make 255 256 sound programming easier since they provide a common API. Say Y or
+5 -2
sound/pci/hda/hda_codec.c
··· 681 681 struct hda_bus_unsolicited *unsol; 682 682 unsigned int wp; 683 683 684 + if (!bus || !bus->workq) 685 + return 0; 686 + 684 687 trace_hda_unsol_event(bus, res, res_ex); 685 688 unsol = bus->unsol; 686 689 if (!unsol) ··· 1583 1580 "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n", 1584 1581 nid, stream_tag, channel_id, format); 1585 1582 p = get_hda_cvt_setup(codec, nid); 1586 - if (!p || p->active) 1583 + if (!p) 1587 1584 return; 1588 1585 1589 1586 if (codec->pcm_format_first) ··· 1630 1627 1631 1628 snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid); 1632 1629 p = get_hda_cvt_setup(codec, nid); 1633 - if (p && p->active) { 1630 + if (p) { 1634 1631 /* here we just clear the active flag when do_now isn't set; 1635 1632 * actual clean-ups will be done later in 1636 1633 * purify_inactive_streams() called from snd_hda_codec_prpapre()
+1 -1
sound/pci/hda/hda_intel.c
··· 615 615 /* quirks for Nvidia */ 616 616 #define AZX_DCAPS_PRESET_NVIDIA \ 617 617 (AZX_DCAPS_NVIDIA_SNOOP | AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI |\ 618 - AZX_DCAPS_ALIGN_BUFSIZE) 618 + AZX_DCAPS_ALIGN_BUFSIZE | AZX_DCAPS_NO_64BIT) 619 619 620 620 #define AZX_DCAPS_PRESET_CTHDA \ 621 621 (AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB | AZX_DCAPS_4K_BDLE_BOUNDARY)
+14 -3
sound/pci/hda/patch_conexant.c
··· 64 64 /* extra EAPD pins */ 65 65 unsigned int num_eapds; 66 66 hda_nid_t eapds[4]; 67 + bool dynamic_eapd; 67 68 68 69 #ifdef ENABLE_CXT_STATIC_QUIRKS 69 70 const struct snd_kcontrol_new *mixers[5]; ··· 3156 3155 * thus it might control over all pins. 3157 3156 */ 3158 3157 if (spec->num_eapds > 2) 3159 - spec->gen.own_eapd_ctl = 1; 3158 + spec->dynamic_eapd = 1; 3160 3159 } 3161 3160 3162 3161 static void cx_auto_turn_eapd(struct hda_codec *codec, int num_pins, ··· 3195 3194 return 0; 3196 3195 } 3197 3196 3197 + static int cx_auto_init(struct hda_codec *codec) 3198 + { 3199 + struct conexant_spec *spec = codec->spec; 3200 + snd_hda_gen_init(codec); 3201 + if (!spec->dynamic_eapd) 3202 + cx_auto_turn_eapd(codec, spec->num_eapds, spec->eapds, true); 3203 + return 0; 3204 + } 3205 + 3198 3206 static const struct hda_codec_ops cx_auto_patch_ops = { 3199 3207 .build_controls = cx_auto_build_controls, 3200 3208 .build_pcms = snd_hda_gen_build_pcms, 3201 - .init = snd_hda_gen_init, 3209 + .init = cx_auto_init, 3202 3210 .free = snd_hda_gen_free, 3203 3211 .unsol_event = snd_hda_jack_unsol_event, 3204 3212 #ifdef CONFIG_PM ··· 3358 3348 3359 3349 cx_auto_parse_beep(codec); 3360 3350 cx_auto_parse_eapd(codec); 3361 - if (spec->gen.own_eapd_ctl) 3351 + spec->gen.own_eapd_ctl = 1; 3352 + if (spec->dynamic_eapd) 3362 3353 spec->gen.vmaster_mute.hook = cx_auto_vmaster_hook; 3363 3354 3364 3355 switch (codec->vendor_id) {
+22 -32
sound/pci/hda/patch_hdmi.c
··· 1832 1832 #define INTEL_EN_ALL_PIN_CVTS 0x01 /* enable 2nd & 3rd pins and convertors */ 1833 1833 1834 1834 static void intel_haswell_enable_all_pins(struct hda_codec *codec, 1835 - const struct hda_fixup *fix, int action) 1835 + bool update_tree) 1836 1836 { 1837 1837 unsigned int vendor_param; 1838 1838 1839 - if (action != HDA_FIXUP_ACT_PRE_PROBE) 1840 - return; 1841 1839 vendor_param = snd_hda_codec_read(codec, INTEL_VENDOR_NID, 0, 1842 1840 INTEL_GET_VENDOR_VERB, 0); 1843 1841 if (vendor_param == -1 || vendor_param & INTEL_EN_ALL_PIN_CVTS) ··· 1847 1849 if (vendor_param == -1) 1848 1850 return; 1849 1851 1850 - snd_hda_codec_update_widgets(codec); 1851 - return; 1852 + if (update_tree) 1853 + snd_hda_codec_update_widgets(codec); 1852 1854 } 1853 1855 1854 1856 static void intel_haswell_fixup_enable_dp12(struct hda_codec *codec) ··· 1866 1868 INTEL_SET_VENDOR_VERB, vendor_param); 1867 1869 } 1868 1870 1871 + /* Haswell needs to re-issue the vendor-specific verbs before turning to D0. 1872 + * Otherwise you may get severe h/w communication errors. 1873 + */ 1874 + static void haswell_set_power_state(struct hda_codec *codec, hda_nid_t fg, 1875 + unsigned int power_state) 1876 + { 1877 + if (power_state == AC_PWRST_D0) { 1878 + intel_haswell_enable_all_pins(codec, false); 1879 + intel_haswell_fixup_enable_dp12(codec); 1880 + } 1869 1881 1870 - 1871 - /* available models for fixup */ 1872 - enum { 1873 - INTEL_HASWELL, 1874 - }; 1875 - 1876 - static const struct hda_model_fixup hdmi_models[] = { 1877 - {.id = INTEL_HASWELL, .name = "Haswell"}, 1878 - {} 1879 - }; 1880 - 1881 - static const struct snd_pci_quirk hdmi_fixup_tbl[] = { 1882 - SND_PCI_QUIRK(0x8086, 0x2010, "Haswell", INTEL_HASWELL), 1883 - {} /* terminator */ 1884 - }; 1885 - 1886 - static const struct hda_fixup hdmi_fixups[] = { 1887 - [INTEL_HASWELL] = { 1888 - .type = HDA_FIXUP_FUNC, 1889 - .v.func = intel_haswell_enable_all_pins, 1890 - }, 1891 - }; 1892 - 1882 + snd_hda_codec_read(codec, fg, 0, AC_VERB_SET_POWER_STATE, power_state); 1883 + snd_hda_codec_set_power_to_all(codec, fg, power_state); 1884 + } 1893 1885 1894 1886 static int patch_generic_hdmi(struct hda_codec *codec) 1895 1887 { ··· 1892 1904 codec->spec = spec; 1893 1905 hdmi_array_init(spec, 4); 1894 1906 1895 - snd_hda_pick_fixup(codec, hdmi_models, hdmi_fixup_tbl, hdmi_fixups); 1896 - snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); 1897 - 1898 - if (codec->vendor_id == 0x80862807) 1907 + if (codec->vendor_id == 0x80862807) { 1908 + intel_haswell_enable_all_pins(codec, true); 1899 1909 intel_haswell_fixup_enable_dp12(codec); 1910 + } 1900 1911 1901 1912 if (hdmi_parse_codec(codec) < 0) { 1902 1913 codec->spec = NULL; ··· 1903 1916 return -EINVAL; 1904 1917 } 1905 1918 codec->patch_ops = generic_hdmi_patch_ops; 1919 + if (codec->vendor_id == 0x80862807) 1920 + codec->patch_ops.set_power_state = haswell_set_power_state; 1921 + 1906 1922 generic_hdmi_init_per_pins(codec); 1907 1923 1908 1924 init_channel_allocations();
+1
sound/soc/codecs/wm8994.c
··· 2882 2882 default: 2883 2883 return 0; 2884 2884 } 2885 + break; 2885 2886 default: 2886 2887 return 0; 2887 2888 }
+5 -2
sound/soc/davinci/davinci-mcasp.c
··· 505 505 mcasp_set_bits(base + DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE); 506 506 mcasp_set_bits(base + DAVINCI_MCASP_RXFMCTL_REG, AFSRE); 507 507 508 - mcasp_set_bits(base + DAVINCI_MCASP_PDIR_REG, ACLKX | AFSX); 508 + mcasp_set_bits(base + DAVINCI_MCASP_PDIR_REG, 509 + ACLKX | ACLKR); 510 + mcasp_set_bits(base + DAVINCI_MCASP_PDIR_REG, 511 + AFSX | AFSR); 509 512 break; 510 513 case SND_SOC_DAIFMT_CBM_CFS: 511 514 /* codec is clock master and frame slave */ ··· 568 565 mcasp_set_bits(base + DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL); 569 566 mcasp_clr_bits(base + DAVINCI_MCASP_TXFMCTL_REG, FSXPOL); 570 567 571 - mcasp_clr_bits(base + DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL); 568 + mcasp_set_bits(base + DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL); 572 569 mcasp_clr_bits(base + DAVINCI_MCASP_RXFMCTL_REG, FSRPOL); 573 570 break; 574 571
+2 -2
sound/soc/soc-dapm.c
··· 1095 1095 1096 1096 #ifdef CONFIG_HAVE_CLK 1097 1097 if (SND_SOC_DAPM_EVENT_ON(event)) { 1098 - return clk_enable(w->clk); 1098 + return clk_prepare_enable(w->clk); 1099 1099 } else { 1100 - clk_disable(w->clk); 1100 + clk_disable_unprepare(w->clk); 1101 1101 return 0; 1102 1102 } 1103 1103 #endif