sound fixes for 4.19-rc1
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. -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAlt+hRUOHHRpd2FpQHN1 c2UuZGUACgkQLtJE4w1nLE9ukQ/+Ou8QjdFM8hghYiLWUiNdzFhut6k3CyzJpSyr BD3oUEuCUp+rsI3HuTIaerdTezT4xdIwFozbXZ51f3OWxqGkP0lSBASfpxBOELRi i2fAfExgWnvTY34EFuW8Zf/H2grl14wixC4IQN2IqlRWwnQbcrOI+wEizaXcLrrb KcItJVmjsNzwJrtg51MA8eLPWeyZ2dCeDXcSawLe8qHkpUyAX4kpt2oOyYcTeGJe +kM2x6MWoDN5cdWzkJxkayO+wiffCZXQv3NUq+EFY0p1yAO9Bsz3zq42RsxEl0E8 l8WL/FXvroc4VGO38ksicyZp4iy6YSMPv6PHijHHDqVAh5hmdAwMhdzi5LWExV12 b6GBbd8WajqQ0nShRtnx/uFHG0PrmS59k17JdP9kK8z6YSekD5vmS8NkF8ibXr5T NySqyrK4BGxolB/cXyImzCvdkxvPbTKe2sy5VD8kevRKZcloQ7N8lghP1JMMNa/i qqjuDIG9wUhf6Ksw63eksG6u27v6kki+TbmteyBLl0y6iTdbZ+xmLsragcm/LD35 +nebpqQBDNOGtMY8llZ+Y8QAuhnWy5YFlnYg16T8K0lnE84YtwyQzG5uV34fJ8Qw iVkS89pAZHnf6OkyOi3yWTyykzlTpq6DL7zulXXs0/KCcZCl9qj9yreHq+0lYYVe WrFv6PE= =381l -----END PGP SIGNATURE----- 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
This commit is contained in:
commit
99897b1e99
4 changed files with 40 additions and 6 deletions
|
@ -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)
|
||||||
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 @@
|
||||||
|
|
||||||
#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 = {
|
||||||
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)
|
||||||
/* 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 {
|
||||||
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[] = {
|
||||||
.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[] = {
|
||||||
{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},
|
||||||
|
|
Loading…
Reference in a new issue