Commit 99897b1e authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'sound-fix-4.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

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
parents 1290290c 8a328ac1
...@@ -529,7 +529,7 @@ static int ac97_bus_remove(struct device *dev) ...@@ -529,7 +529,7 @@ static int ac97_bus_remove(struct device *dev)
int ret; int ret;
ret = pm_runtime_get_sync(dev); ret = pm_runtime_get_sync(dev);
if (ret) if (ret < 0)
return ret; return ret;
ret = adrv->remove(adev); ret = adrv->remove(adev);
...@@ -537,6 +537,8 @@ static int ac97_bus_remove(struct device *dev) ...@@ -537,6 +537,8 @@ static int ac97_bus_remove(struct device *dev)
if (ret == 0) if (ret == 0)
ac97_put_disable_clk(adev); ac97_put_disable_clk(adev);
pm_runtime_disable(dev);
return ret; return ret;
} }
......
...@@ -15,6 +15,11 @@ ...@@ -15,6 +15,11 @@
#include "ac97_core.h" #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) static void compat_ac97_reset(struct snd_ac97 *ac97)
{ {
struct ac97_codec_device *adev = to_ac97_device(ac97->private_data); struct ac97_codec_device *adev = to_ac97_device(ac97->private_data);
...@@ -65,21 +70,31 @@ static struct snd_ac97_bus compat_soc_ac97_bus = { ...@@ -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 *snd_ac97_compat_alloc(struct ac97_codec_device *adev)
{ {
struct snd_ac97 *ac97; struct snd_ac97 *ac97;
int ret;
ac97 = kzalloc(sizeof(struct snd_ac97), GFP_KERNEL); ac97 = kzalloc(sizeof(struct snd_ac97), GFP_KERNEL);
if (ac97 == NULL) if (ac97 == NULL)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
ac97->dev = adev->dev;
ac97->private_data = adev; ac97->private_data = adev;
ac97->bus = &compat_soc_ac97_bus; 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; return ac97;
} }
EXPORT_SYMBOL_GPL(snd_ac97_compat_alloc); EXPORT_SYMBOL_GPL(snd_ac97_compat_alloc);
void snd_ac97_compat_release(struct snd_ac97 *ac97) void snd_ac97_compat_release(struct snd_ac97 *ac97)
{ {
kfree(ac97); device_unregister(&ac97->dev);
} }
EXPORT_SYMBOL_GPL(snd_ac97_compat_release); EXPORT_SYMBOL_GPL(snd_ac97_compat_release);
......
...@@ -149,8 +149,9 @@ static void snd_vmidi_output_work(struct work_struct *work) ...@@ -149,8 +149,9 @@ static void snd_vmidi_output_work(struct work_struct *work)
/* discard the outputs in dispatch mode unless subscribed */ /* discard the outputs in dispatch mode unless subscribed */
if (vmidi->seq_mode == SNDRV_VIRMIDI_SEQ_DISPATCH && if (vmidi->seq_mode == SNDRV_VIRMIDI_SEQ_DISPATCH &&
!(vmidi->rdev->flags & SNDRV_VIRMIDI_SUBSCRIBE)) { !(vmidi->rdev->flags & SNDRV_VIRMIDI_SUBSCRIBE)) {
while (!snd_rawmidi_transmit_empty(substream)) char buf[32];
snd_rawmidi_transmit_ack(substream, 1); while (snd_rawmidi_transmit(substream, buf, sizeof(buf)) > 0)
; /* ignored */
return; return;
} }
......
...@@ -5494,6 +5494,7 @@ enum { ...@@ -5494,6 +5494,7 @@ enum {
ALC255_FIXUP_DUMMY_LINEOUT_VERB, ALC255_FIXUP_DUMMY_LINEOUT_VERB,
ALC255_FIXUP_DELL_HEADSET_MIC, ALC255_FIXUP_DELL_HEADSET_MIC,
ALC295_FIXUP_HP_X360, ALC295_FIXUP_HP_X360,
ALC221_FIXUP_HP_HEADSET_MIC,
}; };
static const struct hda_fixup alc269_fixups[] = { static const struct hda_fixup alc269_fixups[] = {
...@@ -6351,7 +6352,16 @@ 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, .v.func = alc295_fixup_hp_top_speakers,
.chained = true, .chained = true,
.chain_id = ALC269_FIXUP_HP_MUTE_LED_MIC3 .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[] = { static const struct snd_pci_quirk alc269_fixup_tbl[] = {
...@@ -6777,6 +6787,12 @@ static const struct hda_model_fixup alc269_fixup_models[] = { ...@@ -6777,6 +6787,12 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
{0x21, 0x03211020} {0x21, 0x03211020}
static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = { 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, SND_HDA_PIN_QUIRK(0x10ec0255, 0x1025, "Acer", ALC255_FIXUP_ACER_MIC_NO_PRESENCE,
{0x12, 0x90a601c0}, {0x12, 0x90a601c0},
{0x14, 0x90171120}, {0x14, 0x90171120},
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment