]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge tag 'sound-fix-4.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai...
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 1 Mar 2017 17:59:21 +0000 (09:59 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 1 Mar 2017 17:59:21 +0000 (09:59 -0800)
Pull sound fixes from Takashi Iwai:
 "A few last-minute fixes for rc1:

   - ALSA core timer and sequencer fixes for bugs spotted by syzkaller

   - a couple of trivial HD-audio fixups

   - additional PCI / codec IDs for Intel Geminilake

   - fixes for CT-XFi DMA mask bugs"

* tag 'sound-fix-4.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ALSA: seq: Fix link corruption by event error handling
  ALSA: hda - Add subwoofer support for Dell Inspiron 17 7000 Gaming
  ALSA: ctxfi: Fallback DMA mask to 32bit
  ALSA: timer: Reject user params with too small ticks
  ALSA: hda: Add Geminilake HDMI codec ID
  ALSA: hda - Fix micmute hotkey problem for a lenovo AIO machine
  ALSA: hda - Add Geminilake PCI ID

sound/core/seq/seq_fifo.c
sound/core/timer.c
sound/pci/ctxfi/cthw20k1.c
sound/pci/ctxfi/cthw20k2.c
sound/pci/hda/hda_intel.c
sound/pci/hda/patch_hdmi.c
sound/pci/hda/patch_realtek.c

index 1d5acbe0c08bdf14db4253f95391fa5e99059610..86240d02b530770f01d718eef34e2b4afeb2ff99 100644 (file)
@@ -135,6 +135,7 @@ int snd_seq_fifo_event_in(struct snd_seq_fifo *f,
        f->tail = cell;
        if (f->head == NULL)
                f->head = cell;
+       cell->next = NULL;
        f->cells++;
        spin_unlock_irqrestore(&f->lock, flags);
 
@@ -214,6 +215,8 @@ void snd_seq_fifo_cell_putback(struct snd_seq_fifo *f,
                spin_lock_irqsave(&f->lock, flags);
                cell->next = f->head;
                f->head = cell;
+               if (!f->tail)
+                       f->tail = cell;
                f->cells++;
                spin_unlock_irqrestore(&f->lock, flags);
        }
index fc144f43faa67c177dba17a40c246a2af3edef7c..ad153149b231679ddee55b16ecb72900d821f743 100644 (file)
@@ -1702,9 +1702,21 @@ static int snd_timer_user_params(struct file *file,
                return -EBADFD;
        if (copy_from_user(&params, _params, sizeof(params)))
                return -EFAULT;
-       if (!(t->hw.flags & SNDRV_TIMER_HW_SLAVE) && params.ticks < 1) {
-               err = -EINVAL;
-               goto _end;
+       if (!(t->hw.flags & SNDRV_TIMER_HW_SLAVE)) {
+               u64 resolution;
+
+               if (params.ticks < 1) {
+                       err = -EINVAL;
+                       goto _end;
+               }
+
+               /* Don't allow resolution less than 1ms */
+               resolution = snd_timer_resolution(tu->timeri);
+               resolution *= params.ticks;
+               if (resolution < 1000000) {
+                       err = -EINVAL;
+                       goto _end;
+               }
        }
        if (params.queue_size > 0 &&
            (params.queue_size < 32 || params.queue_size > 1024)) {
index 9667cbfb0ca2b38eae7e76f45f742195631b271e..ab4cdab5cfa57abf3db2a8da806d0bf7031fed67 100644 (file)
 #include "cthw20k1.h"
 #include "ct20k1reg.h"
 
-#if BITS_PER_LONG == 32
-#define CT_XFI_DMA_MASK                DMA_BIT_MASK(32) /* 32 bit PTE */
-#else
-#define CT_XFI_DMA_MASK                DMA_BIT_MASK(64) /* 64 bit PTE */
-#endif
-
 struct hw20k1 {
        struct hw hw;
        spinlock_t reg_20k1_lock;
@@ -1904,19 +1898,18 @@ static int hw_card_start(struct hw *hw)
 {
        int err;
        struct pci_dev *pci = hw->pci;
+       const unsigned int dma_bits = BITS_PER_LONG;
 
        err = pci_enable_device(pci);
        if (err < 0)
                return err;
 
        /* Set DMA transfer mask */
-       if (dma_set_mask(&pci->dev, CT_XFI_DMA_MASK) < 0 ||
-           dma_set_coherent_mask(&pci->dev, CT_XFI_DMA_MASK) < 0) {
-               dev_err(hw->card->dev,
-                       "architecture does not support PCI busmaster DMA with mask 0x%llx\n",
-                       CT_XFI_DMA_MASK);
-               err = -ENXIO;
-               goto error1;
+       if (dma_set_mask(&pci->dev, DMA_BIT_MASK(dma_bits))) {
+               dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(dma_bits));
+       } else {
+               dma_set_mask(&pci->dev, DMA_BIT_MASK(32));
+               dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(32));
        }
 
        if (!hw->io_base) {
index 6414ecf93efaa293683fd065886070a91584b699..18ee7768b7c4021b3d1f9b5a8f748a68521ee938 100644 (file)
 #include "cthw20k2.h"
 #include "ct20k2reg.h"
 
-#if BITS_PER_LONG == 32
-#define CT_XFI_DMA_MASK                DMA_BIT_MASK(32) /* 32 bit PTE */
-#else
-#define CT_XFI_DMA_MASK                DMA_BIT_MASK(64) /* 64 bit PTE */
-#endif
-
 struct hw20k2 {
        struct hw hw;
        /* for i2c */
@@ -2029,19 +2023,18 @@ static int hw_card_start(struct hw *hw)
        int err = 0;
        struct pci_dev *pci = hw->pci;
        unsigned int gctl;
+       const unsigned int dma_bits = BITS_PER_LONG;
 
        err = pci_enable_device(pci);
        if (err < 0)
                return err;
 
        /* Set DMA transfer mask */
-       if (dma_set_mask(&pci->dev, CT_XFI_DMA_MASK) < 0 ||
-           dma_set_coherent_mask(&pci->dev, CT_XFI_DMA_MASK) < 0) {
-               dev_err(hw->card->dev,
-                       "architecture does not support PCI busmaster DMA with mask 0x%llx\n",
-                       CT_XFI_DMA_MASK);
-               err = -ENXIO;
-               goto error1;
+       if (!dma_set_mask(&pci->dev, DMA_BIT_MASK(dma_bits))) {
+               dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(dma_bits));
+       } else {
+               dma_set_mask(&pci->dev, DMA_BIT_MASK(32));
+               dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(32));
        }
 
        if (!hw->io_base) {
index 16108f0eb68848bf189f47f0101273c14443565b..c8256a89375a90149f790390588b232a53e9e67b 100644 (file)
@@ -2255,6 +2255,9 @@ static const struct pci_device_id azx_ids[] = {
        /* Broxton-T */
        { PCI_DEVICE(0x8086, 0x1a98),
          .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BROXTON },
+       /* Gemini-Lake */
+       { PCI_DEVICE(0x8086, 0x3198),
+         .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BROXTON },
        /* Haswell */
        { PCI_DEVICE(0x8086, 0x0a0c),
          .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },
index fd5efa72a68bd3044b51572cdf9988bce20eb3ff..1461ef8eb7495d1d0f46ff0d6b5a15ece3c1a1da 100644 (file)
@@ -3800,6 +3800,7 @@ HDA_CODEC_ENTRY(0x80862808, "Broadwell HDMI",     patch_i915_hsw_hdmi),
 HDA_CODEC_ENTRY(0x80862809, "Skylake HDMI",    patch_i915_hsw_hdmi),
 HDA_CODEC_ENTRY(0x8086280a, "Broxton HDMI",    patch_i915_hsw_hdmi),
 HDA_CODEC_ENTRY(0x8086280b, "Kabylake HDMI",   patch_i915_hsw_hdmi),
+HDA_CODEC_ENTRY(0x8086280d, "Geminilake HDMI", patch_i915_hsw_hdmi),
 HDA_CODEC_ENTRY(0x80862880, "CedarTrail HDMI", patch_generic_hdmi),
 HDA_CODEC_ENTRY(0x80862882, "Valleyview2 HDMI",        patch_i915_byt_hdmi),
 HDA_CODEC_ENTRY(0x80862883, "Braswell HDMI",   patch_i915_byt_hdmi),
index 73a00460b5c113a86af31dfb3f2c94d04f41b562..4e112221d825462ef7e1ae38c092e40e58667f38 100644 (file)
@@ -5606,6 +5606,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
        SND_PCI_QUIRK(0x1028, 0x0725, "Dell Inspiron 3162", ALC255_FIXUP_DELL_SPK_NOISE),
        SND_PCI_QUIRK(0x1028, 0x075b, "Dell XPS 13 9360", ALC256_FIXUP_DELL_XPS_13_HEADPHONE_NOISE),
        SND_PCI_QUIRK(0x1028, 0x075d, "Dell AIO", ALC298_FIXUP_SPK_VOLUME),
+       SND_PCI_QUIRK(0x1028, 0x0798, "Dell Inspiron 17 7000 Gaming", ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER),
        SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
        SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
        SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
@@ -5724,6 +5725,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
        SND_PCI_QUIRK(0x17aa, 0x2233, "Thinkpad", ALC292_FIXUP_TPT460),
        SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
        SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
+       SND_PCI_QUIRK(0x17aa, 0x3112, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
        SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
        SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
        SND_PCI_QUIRK(0x17aa, 0x3978, "IdeaPad Y410P", ALC269_FIXUP_NO_SHUTUP),