mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-30 14:19:16 +00:00
sound fixes for 6.4-rc7
Just a few small fixes. The only change to the core code is for a minor race in ALSA OSS sequencer, and the rest are all device-specific fixes (regression fixes and a usual quirk). -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAmSMFLQOHHRpd2FpQHN1 c2UuZGUACgkQLtJE4w1nLE8i8A//UyhDO5/doI/z1lnpcITu4cT4WhEskCi56mR9 peSnL2u0UFG3QCvj3OoAowFbTh823ZKDISrRttNRi0ywH9mQ26L6dz3hamY11vgA kl8iHyf32kHg8W5MjE/Ul6MvXOjCgVFmfO4iSNnUl0Qx2VI3JfkGu6nDZQkJ2/+E EwrI4FYbT0AQ0srJrscHsUy20Gfr6sbol3CpZD1/IVL5AXaQJto1xvEM+CF2+ehB PBMwEYGFs6alq+UN7tsG8mFBDkUam9zOLwYgC1Tj3OLHH1XSUHmu21aGQqHV76kQ 1Z7PuJCNNqL4oJR20KISojFVacQzD/wo1CMmyF/kS+xLkFUIKrJdc/ovi4JQf5ZH z5mH7zMbW/dIeRsFTn9XnVvN+7Of8N+ZsZ/9FF7OUVAbXp8veP4rz/W6Fye7ov6I jki/6bOhTrBI42RhMXym4RAb5kqJcr003UYIvGZMFVnQ50siYxPY10aSgCMjTwWn FvkIbxzo6GEPpulEnzOqfzxVX8GsUty4bMNcPXELrkpk3Qalgt+NdToxbWDq07F/ iZXcYv6pclrFNnkkTV9B4LlKRfgLG2I/Ex8bRPMr815QBAguyl44YJ59MSvTOWc7 AWh7VL07Sxm44YXoVVPzHLcUhYH3xibTB5R8FSKy40VZO5lbwbSc5EZBTGvRIrdx kaGfcgM= =e2QB -----END PGP SIGNATURE----- Merge tag 'sound-6.4-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "Just a few small fixes. The only change to the core code is for a minor race in ALSA OSS sequencer, and the rest are all device-specific fixes (regression fixes and a usual quirk)" * tag 'sound-6.4-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: usb-audio: Add quirk flag for HEM devices to enable native DSD playback ALSA: usb-audio: Fix broken resume due to UAC3 power state ALSA: seq: oss: Fix racy open/close of MIDI devices ASoC: tegra: Fix Master Volume Control ALSA: hda/realtek: Add a quirk for Compaq N14JP6 firmware: cs_dsp: Log correct region name in bin error messages
This commit is contained in:
commit
b4af682124
6 changed files with 35 additions and 15 deletions
|
@ -2124,6 +2124,7 @@ static int cs_dsp_load_coeff(struct cs_dsp *dsp, const struct firmware *firmware
|
||||||
file, blocks, le32_to_cpu(blk->len),
|
file, blocks, le32_to_cpu(blk->len),
|
||||||
type, le32_to_cpu(blk->id));
|
type, le32_to_cpu(blk->id));
|
||||||
|
|
||||||
|
region_name = cs_dsp_mem_region_name(type);
|
||||||
mem = cs_dsp_find_region(dsp, type);
|
mem = cs_dsp_find_region(dsp, type);
|
||||||
if (!mem) {
|
if (!mem) {
|
||||||
cs_dsp_err(dsp, "No base for region %x\n", type);
|
cs_dsp_err(dsp, "No base for region %x\n", type);
|
||||||
|
@ -2147,8 +2148,8 @@ static int cs_dsp_load_coeff(struct cs_dsp *dsp, const struct firmware *firmware
|
||||||
reg = dsp->ops->region_to_reg(mem, reg);
|
reg = dsp->ops->region_to_reg(mem, reg);
|
||||||
reg += offset;
|
reg += offset;
|
||||||
} else {
|
} else {
|
||||||
cs_dsp_err(dsp, "No %x for algorithm %x\n",
|
cs_dsp_err(dsp, "No %s for algorithm %x\n",
|
||||||
type, le32_to_cpu(blk->id));
|
region_name, le32_to_cpu(blk->id));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ struct seq_oss_midi {
|
||||||
struct snd_midi_event *coder; /* MIDI event coder */
|
struct snd_midi_event *coder; /* MIDI event coder */
|
||||||
struct seq_oss_devinfo *devinfo; /* assigned OSSseq device */
|
struct seq_oss_devinfo *devinfo; /* assigned OSSseq device */
|
||||||
snd_use_lock_t use_lock;
|
snd_use_lock_t use_lock;
|
||||||
|
struct mutex open_mutex;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -172,6 +173,7 @@ snd_seq_oss_midi_check_new_port(struct snd_seq_port_info *pinfo)
|
||||||
mdev->flags = pinfo->capability;
|
mdev->flags = pinfo->capability;
|
||||||
mdev->opened = 0;
|
mdev->opened = 0;
|
||||||
snd_use_lock_init(&mdev->use_lock);
|
snd_use_lock_init(&mdev->use_lock);
|
||||||
|
mutex_init(&mdev->open_mutex);
|
||||||
|
|
||||||
/* copy and truncate the name of synth device */
|
/* copy and truncate the name of synth device */
|
||||||
strscpy(mdev->name, pinfo->name, sizeof(mdev->name));
|
strscpy(mdev->name, pinfo->name, sizeof(mdev->name));
|
||||||
|
@ -322,15 +324,17 @@ snd_seq_oss_midi_open(struct seq_oss_devinfo *dp, int dev, int fmode)
|
||||||
int perm;
|
int perm;
|
||||||
struct seq_oss_midi *mdev;
|
struct seq_oss_midi *mdev;
|
||||||
struct snd_seq_port_subscribe subs;
|
struct snd_seq_port_subscribe subs;
|
||||||
|
int err;
|
||||||
|
|
||||||
mdev = get_mididev(dp, dev);
|
mdev = get_mididev(dp, dev);
|
||||||
if (!mdev)
|
if (!mdev)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
mutex_lock(&mdev->open_mutex);
|
||||||
/* already used? */
|
/* already used? */
|
||||||
if (mdev->opened && mdev->devinfo != dp) {
|
if (mdev->opened && mdev->devinfo != dp) {
|
||||||
snd_use_lock_free(&mdev->use_lock);
|
err = -EBUSY;
|
||||||
return -EBUSY;
|
goto unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
perm = 0;
|
perm = 0;
|
||||||
|
@ -340,14 +344,14 @@ snd_seq_oss_midi_open(struct seq_oss_devinfo *dp, int dev, int fmode)
|
||||||
perm |= PERM_READ;
|
perm |= PERM_READ;
|
||||||
perm &= mdev->flags;
|
perm &= mdev->flags;
|
||||||
if (perm == 0) {
|
if (perm == 0) {
|
||||||
snd_use_lock_free(&mdev->use_lock);
|
err = -ENXIO;
|
||||||
return -ENXIO;
|
goto unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* already opened? */
|
/* already opened? */
|
||||||
if ((mdev->opened & perm) == perm) {
|
if ((mdev->opened & perm) == perm) {
|
||||||
snd_use_lock_free(&mdev->use_lock);
|
err = 0;
|
||||||
return 0;
|
goto unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
perm &= ~mdev->opened;
|
perm &= ~mdev->opened;
|
||||||
|
@ -372,13 +376,17 @@ snd_seq_oss_midi_open(struct seq_oss_devinfo *dp, int dev, int fmode)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! mdev->opened) {
|
if (! mdev->opened) {
|
||||||
snd_use_lock_free(&mdev->use_lock);
|
err = -ENXIO;
|
||||||
return -ENXIO;
|
goto unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
mdev->devinfo = dp;
|
mdev->devinfo = dp;
|
||||||
|
err = 0;
|
||||||
|
|
||||||
|
unlock:
|
||||||
|
mutex_unlock(&mdev->open_mutex);
|
||||||
snd_use_lock_free(&mdev->use_lock);
|
snd_use_lock_free(&mdev->use_lock);
|
||||||
return 0;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -393,10 +401,9 @@ snd_seq_oss_midi_close(struct seq_oss_devinfo *dp, int dev)
|
||||||
mdev = get_mididev(dp, dev);
|
mdev = get_mididev(dp, dev);
|
||||||
if (!mdev)
|
if (!mdev)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
if (! mdev->opened || mdev->devinfo != dp) {
|
mutex_lock(&mdev->open_mutex);
|
||||||
snd_use_lock_free(&mdev->use_lock);
|
if (!mdev->opened || mdev->devinfo != dp)
|
||||||
return 0;
|
goto unlock;
|
||||||
}
|
|
||||||
|
|
||||||
memset(&subs, 0, sizeof(subs));
|
memset(&subs, 0, sizeof(subs));
|
||||||
if (mdev->opened & PERM_WRITE) {
|
if (mdev->opened & PERM_WRITE) {
|
||||||
|
@ -415,6 +422,8 @@ snd_seq_oss_midi_close(struct seq_oss_devinfo *dp, int dev)
|
||||||
mdev->opened = 0;
|
mdev->opened = 0;
|
||||||
mdev->devinfo = NULL;
|
mdev->devinfo = NULL;
|
||||||
|
|
||||||
|
unlock:
|
||||||
|
mutex_unlock(&mdev->open_mutex);
|
||||||
snd_use_lock_free(&mdev->use_lock);
|
snd_use_lock_free(&mdev->use_lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11740,6 +11740,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
|
||||||
SND_PCI_QUIRK(0x1b0a, 0x01b8, "ACER Veriton", ALC662_FIXUP_ACER_VERITON),
|
SND_PCI_QUIRK(0x1b0a, 0x01b8, "ACER Veriton", ALC662_FIXUP_ACER_VERITON),
|
||||||
SND_PCI_QUIRK(0x1b35, 0x1234, "CZC ET26", ALC662_FIXUP_CZC_ET26),
|
SND_PCI_QUIRK(0x1b35, 0x1234, "CZC ET26", ALC662_FIXUP_CZC_ET26),
|
||||||
SND_PCI_QUIRK(0x1b35, 0x2206, "CZC P10T", ALC662_FIXUP_CZC_P10T),
|
SND_PCI_QUIRK(0x1b35, 0x2206, "CZC P10T", ALC662_FIXUP_CZC_P10T),
|
||||||
|
SND_PCI_QUIRK(0x1c6c, 0x1239, "Compaq N14JP6-V2", ALC897_FIXUP_HP_HSMIC_VERB),
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* Below is a quirk table taken from the old code.
|
/* Below is a quirk table taken from the old code.
|
||||||
|
|
|
@ -117,6 +117,9 @@ int tegra_pcm_open(struct snd_soc_component *component,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set wait time to 500ms by default */
|
||||||
|
substream->wait_time = 500;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(tegra_pcm_open);
|
EXPORT_SYMBOL_GPL(tegra_pcm_open);
|
||||||
|
|
|
@ -650,6 +650,10 @@ static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream)
|
||||||
goto unlock;
|
goto unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = snd_usb_pcm_change_state(subs, UAC3_PD_STATE_D0);
|
||||||
|
if (ret < 0)
|
||||||
|
goto unlock;
|
||||||
|
|
||||||
again:
|
again:
|
||||||
if (subs->sync_endpoint) {
|
if (subs->sync_endpoint) {
|
||||||
ret = snd_usb_endpoint_prepare(chip, subs->sync_endpoint);
|
ret = snd_usb_endpoint_prepare(chip, subs->sync_endpoint);
|
||||||
|
|
|
@ -2191,6 +2191,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
|
||||||
QUIRK_FLAG_DSD_RAW),
|
QUIRK_FLAG_DSD_RAW),
|
||||||
VENDOR_FLG(0x2ab6, /* T+A devices */
|
VENDOR_FLG(0x2ab6, /* T+A devices */
|
||||||
QUIRK_FLAG_DSD_RAW),
|
QUIRK_FLAG_DSD_RAW),
|
||||||
|
VENDOR_FLG(0x3336, /* HEM devices */
|
||||||
|
QUIRK_FLAG_DSD_RAW),
|
||||||
VENDOR_FLG(0x3353, /* Khadas devices */
|
VENDOR_FLG(0x3353, /* Khadas devices */
|
||||||
QUIRK_FLAG_DSD_RAW),
|
QUIRK_FLAG_DSD_RAW),
|
||||||
VENDOR_FLG(0x3842, /* EVGA */
|
VENDOR_FLG(0x3842, /* EVGA */
|
||||||
|
|
Loading…
Reference in a new issue