]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Merge tag 'sound-fix-4.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 23 Aug 2018 22:37:24 +0000 (15:37 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 23 Aug 2018 22:37:24 +0000 (15:37 -0700)
Pull sound fixes from Takashi Iwai:
 "No surprises here: a regression fix for virmidi code refactoring,
  three fixes for the new AC97 bus compat and runtime PM, and a usual
  HD-audio quirk"

* tag 'sound-fix-4.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ALSA: hda/realtek - Fix HP Headset Mic can't record
  ALSA: ac97: fix unbalanced pm_runtime_enable
  ALSA: ac97: fix check of pm_runtime_get_sync failure
  ALSA: ac97: fix device initialization in the compat layer
  ALSA: seq: virmidi: Fix discarding the unsubscribed output

sound/ac97/bus.c
sound/ac97/snd_ac97_compat.c
sound/core/seq/seq_virmidi.c
sound/pci/hda/patch_realtek.c

index 7a0dfca03a57d5b4cd7cbb00d73da095aa076679..9f0c480489ef04384445b35f8786c020dfc9d7fa 100644 (file)
@@ -529,7 +529,7 @@ static int ac97_bus_remove(struct device *dev)
        int ret;
 
        ret = pm_runtime_get_sync(dev);
-       if (ret)
+       if (ret < 0)
                return ret;
 
        ret = adrv->remove(adev);
@@ -537,6 +537,8 @@ static int ac97_bus_remove(struct device *dev)
        if (ret == 0)
                ac97_put_disable_clk(adev);
 
+       pm_runtime_disable(dev);
+
        return ret;
 }
 
index 61544e0d8de472f99754ba29d4a6dacdb746c0d1..8bab44f74bb8573fb45610b07a9aa081db9091a6 100644 (file)
 
 #include "ac97_core.h"
 
+static void compat_ac97_release(struct device *dev)
+{
+       kfree(to_ac97_t(dev));
+}
+
 static void compat_ac97_reset(struct snd_ac97 *ac97)
 {
        struct ac97_codec_device *adev = to_ac97_device(ac97->private_data);
@@ -65,21 +70,31 @@ static struct snd_ac97_bus compat_soc_ac97_bus = {
 struct snd_ac97 *snd_ac97_compat_alloc(struct ac97_codec_device *adev)
 {
        struct snd_ac97 *ac97;
+       int ret;
 
        ac97 = kzalloc(sizeof(struct snd_ac97), GFP_KERNEL);
        if (ac97 == NULL)
                return ERR_PTR(-ENOMEM);
 
-       ac97->dev = adev->dev;
        ac97->private_data = adev;
        ac97->bus = &compat_soc_ac97_bus;
+
+       ac97->dev.parent = &adev->dev;
+       ac97->dev.release = compat_ac97_release;
+       dev_set_name(&ac97->dev, "%s-compat", dev_name(&adev->dev));
+       ret = device_register(&ac97->dev);
+       if (ret) {
+               put_device(&ac97->dev);
+               return ERR_PTR(ret);
+       }
+
        return ac97;
 }
 EXPORT_SYMBOL_GPL(snd_ac97_compat_alloc);
 
 void snd_ac97_compat_release(struct snd_ac97 *ac97)
 {
-       kfree(ac97);
+       device_unregister(&ac97->dev);
 }
 EXPORT_SYMBOL_GPL(snd_ac97_compat_release);
 
index a2f1c6b586930d740cc8b674b0ea9dce4f06bf17..cb988efd1ed0d666494f76f23797fbde6a7e833e 100644 (file)
@@ -149,8 +149,9 @@ static void snd_vmidi_output_work(struct work_struct *work)
        /* discard the outputs in dispatch mode unless subscribed */
        if (vmidi->seq_mode == SNDRV_VIRMIDI_SEQ_DISPATCH &&
            !(vmidi->rdev->flags & SNDRV_VIRMIDI_SUBSCRIBE)) {
-               while (!snd_rawmidi_transmit_empty(substream))
-                       snd_rawmidi_transmit_ack(substream, 1);
+               char buf[32];
+               while (snd_rawmidi_transmit(substream, buf, sizeof(buf)) > 0)
+                       ; /* ignored */
                return;
        }
 
index b20974ef1e13a72036f3ebdd94b639c81861ca1d..1d117f00d04d5620e767500a00f478fa9fc2b94a 100644 (file)
@@ -5494,6 +5494,7 @@ enum {
        ALC255_FIXUP_DUMMY_LINEOUT_VERB,
        ALC255_FIXUP_DELL_HEADSET_MIC,
        ALC295_FIXUP_HP_X360,
+       ALC221_FIXUP_HP_HEADSET_MIC,
 };
 
 static const struct hda_fixup alc269_fixups[] = {
@@ -6351,7 +6352,16 @@ static const struct hda_fixup alc269_fixups[] = {
                .v.func = alc295_fixup_hp_top_speakers,
                .chained = true,
                .chain_id = ALC269_FIXUP_HP_MUTE_LED_MIC3
-       }
+       },
+       [ALC221_FIXUP_HP_HEADSET_MIC] = {
+               .type = HDA_FIXUP_PINS,
+               .v.pins = (const struct hda_pintbl[]) {
+                       { 0x19, 0x0181313f},
+                       { }
+               },
+               .chained = true,
+               .chain_id = ALC269_FIXUP_HEADSET_MIC
+       },
 };
 
 static const struct snd_pci_quirk alc269_fixup_tbl[] = {
@@ -6777,6 +6787,12 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
        {0x21, 0x03211020}
 
 static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
+       SND_HDA_PIN_QUIRK(0x10ec0221, 0x103c, "HP Workstation", ALC221_FIXUP_HP_HEADSET_MIC,
+               {0x14, 0x01014020},
+               {0x17, 0x90170110},
+               {0x18, 0x02a11030},
+               {0x19, 0x0181303F},
+               {0x21, 0x0221102f}),
        SND_HDA_PIN_QUIRK(0x10ec0255, 0x1025, "Acer", ALC255_FIXUP_ACER_MIC_NO_PRESENCE,
                {0x12, 0x90a601c0},
                {0x14, 0x90171120},