sound fixes for 4.5-rc2
There are a few fixes in ALSA core for bugs that have been spotted by fuzzer. Also a temporary workaround for PowerPC (and possibly other) builds with incompatible ioctls was applied to compress API. Other than that, a few trivial fixes and quirks for FireWire BeBoB, USB-audio and HD-audio are found, too. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABCAAGBQJWq2iUAAoJEGwxgFQ9KSmkpxkQAK+EQJjwvpArlFJIfKlH/sxY dndCK1/h0IkF/8wMRL0EMNYEn0YZS93YVgqWCIn+8aKY7N43P5lEFoIWyit36HWs PgI5c8xGwTL4Fm9kFxRN06rGCJQMroFH+FfVawLP10vo+zxbtylWv0tqyZ3NUCWR gm3P4jpeSH/C+uLmNEjaw01kPG9WZgwcpMAFH/JieSOmXg9O0fwKt9dxU9OyhH4N kPyTaWhGeLtA/GE0xsjgr+5eXY4K0xiwZNyS7DHgiEx5fxCXKh8MxyPPf8cmc2sf hxbjNxfWa9FQzyvcCBQJ7T6w2Kjzkviy0dRhk43vp+yanxMMr8i7KQVvhSahafz3 nGldFdFsXjKHKoc/hmQ4D/qVC44+O2Zp0GD5vatbr0ogAqNo+IAWMA47ZYaAzjBL QrTtlkV2GE0i+dCCuAmtYT4kYp6F7NZ7xNlvsb+i0/NmQZdoFNDFo+Uu+A+h6SbZ YRS2XOUXi9COTnFrNg2mnY7oYaN1ovd5635el7p3VPgvRNGnkn51cYUYKsXpgEVE 6Qi46xRPQbtqNtKq4bFmPJw4azFUIk9mRjfX2Ir3ZRvJzoSW4R0tsvam8hNaTB7I StL94ORrJ5PfbN4KrUpSE8wqgdQ5bcOC/yEo5i9CfwTmJG6Sp3Q2TsGXkN4U8u2n bNk3OaVScARxOdKCrNil =8T5I -----END PGP SIGNATURE----- Merge tag 'sound-4.5-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "There are a few fixes in ALSA core for bugs that have been spotted by fuzzer. Also a temporary workaround for PowerPC (and possibly other) builds with incompatible ioctls was applied to compress API. Other than that, a few trivial fixes and quirks for FireWire BeBoB, USB-audio and HD-audio are found, too" * tag 'sound-4.5-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: hda - disable dynamic clock gating on Broxton before reset ALSA: hda - Add new GPU codec ID 0x10de0083 to snd-hda ALSA: dummy: Disable switching timer backend via sysfs ALSA: timer: fix SND_PCM_TIMER Kconfig text ALSA: Add missing dependency on CONFIG_SND_TIMER ALSA: bebob: Use a signed return type for get_formation_index ALSA: usb-audio: Fix TEAC UD-501/UD-503/NT-503 usb delay ALSA: compress: Disable GET_CODEC_CAPS ioctl for some architectures ALSA: seq: Degrade the error message for too many opens ALSA: seq: Fix incorrect sanity check at snd_seq_oss_synth_cleanup()
This commit is contained in:
commit
b54544322e
|
@ -97,11 +97,11 @@ config SND_PCM_TIMER
|
|||
bool "PCM timer interface" if EXPERT
|
||||
default y
|
||||
help
|
||||
If you disable this option, pcm timer will be inavailable, so
|
||||
those stubs used pcm timer (e.g. dmix, dsnoop & co) may work
|
||||
If you disable this option, pcm timer will be unavailable, so
|
||||
those stubs that use pcm timer (e.g. dmix, dsnoop & co) may work
|
||||
incorrectlly.
|
||||
|
||||
For some embedded device, we may disable it to reduce memory
|
||||
For some embedded devices, we may disable it to reduce memory
|
||||
footprint, about 20KB on x86_64 platform.
|
||||
|
||||
config SND_SEQUENCER_OSS
|
||||
|
|
|
@ -46,6 +46,13 @@
|
|||
#include <sound/compress_offload.h>
|
||||
#include <sound/compress_driver.h>
|
||||
|
||||
/* struct snd_compr_codec_caps overflows the ioctl bit size for some
|
||||
* architectures, so we need to disable the relevant ioctls.
|
||||
*/
|
||||
#if _IOC_SIZEBITS < 14
|
||||
#define COMPR_CODEC_CAPS_OVERFLOW
|
||||
#endif
|
||||
|
||||
/* TODO:
|
||||
* - add substream support for multiple devices in case of
|
||||
* SND_DYNAMIC_MINORS is not used
|
||||
|
@ -440,6 +447,7 @@ out:
|
|||
return retval;
|
||||
}
|
||||
|
||||
#ifndef COMPR_CODEC_CAPS_OVERFLOW
|
||||
static int
|
||||
snd_compr_get_codec_caps(struct snd_compr_stream *stream, unsigned long arg)
|
||||
{
|
||||
|
@ -463,6 +471,7 @@ out:
|
|||
kfree(caps);
|
||||
return retval;
|
||||
}
|
||||
#endif /* !COMPR_CODEC_CAPS_OVERFLOW */
|
||||
|
||||
/* revisit this with snd_pcm_preallocate_xxx */
|
||||
static int snd_compr_allocate_buffer(struct snd_compr_stream *stream,
|
||||
|
@ -801,9 +810,11 @@ static long snd_compr_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
|
|||
case _IOC_NR(SNDRV_COMPRESS_GET_CAPS):
|
||||
retval = snd_compr_get_caps(stream, arg);
|
||||
break;
|
||||
#ifndef COMPR_CODEC_CAPS_OVERFLOW
|
||||
case _IOC_NR(SNDRV_COMPRESS_GET_CODEC_CAPS):
|
||||
retval = snd_compr_get_codec_caps(stream, arg);
|
||||
break;
|
||||
#endif
|
||||
case _IOC_NR(SNDRV_COMPRESS_SET_PARAMS):
|
||||
retval = snd_compr_set_params(stream, arg);
|
||||
break;
|
||||
|
|
|
@ -202,7 +202,7 @@ snd_seq_oss_open(struct file *file, int level)
|
|||
|
||||
dp->index = i;
|
||||
if (i >= SNDRV_SEQ_OSS_MAX_CLIENTS) {
|
||||
pr_err("ALSA: seq_oss: too many applications\n");
|
||||
pr_debug("ALSA: seq_oss: too many applications\n");
|
||||
rc = -ENOMEM;
|
||||
goto _error;
|
||||
}
|
||||
|
|
|
@ -308,7 +308,7 @@ snd_seq_oss_synth_cleanup(struct seq_oss_devinfo *dp)
|
|||
struct seq_oss_synth *rec;
|
||||
struct seq_oss_synthinfo *info;
|
||||
|
||||
if (snd_BUG_ON(dp->max_synthdev >= SNDRV_SEQ_OSS_MAX_SYNTH_DEVS))
|
||||
if (snd_BUG_ON(dp->max_synthdev > SNDRV_SEQ_OSS_MAX_SYNTH_DEVS))
|
||||
return;
|
||||
for (i = 0; i < dp->max_synthdev; i++) {
|
||||
info = &dp->synths[i];
|
||||
|
|
|
@ -87,7 +87,7 @@ MODULE_PARM_DESC(pcm_substreams, "PCM substreams # (1-128) for dummy driver.");
|
|||
module_param(fake_buffer, bool, 0444);
|
||||
MODULE_PARM_DESC(fake_buffer, "Fake buffer allocations.");
|
||||
#ifdef CONFIG_HIGH_RES_TIMERS
|
||||
module_param(hrtimer, bool, 0644);
|
||||
module_param(hrtimer, bool, 0444);
|
||||
MODULE_PARM_DESC(hrtimer, "Use hrtimer as the timer source.");
|
||||
#endif
|
||||
|
||||
|
|
|
@ -47,14 +47,16 @@ static const unsigned int bridgeco_freq_table[] = {
|
|||
[6] = 0x07,
|
||||
};
|
||||
|
||||
static unsigned int
|
||||
get_formation_index(unsigned int rate)
|
||||
static int
|
||||
get_formation_index(unsigned int rate, unsigned int *index)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(snd_bebob_rate_table); i++) {
|
||||
if (snd_bebob_rate_table[i] == rate)
|
||||
return i;
|
||||
if (snd_bebob_rate_table[i] == rate) {
|
||||
*index = i;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -425,7 +427,9 @@ make_both_connections(struct snd_bebob *bebob, unsigned int rate)
|
|||
goto end;
|
||||
|
||||
/* confirm params for both streams */
|
||||
index = get_formation_index(rate);
|
||||
err = get_formation_index(rate, &index);
|
||||
if (err < 0)
|
||||
goto end;
|
||||
pcm_channels = bebob->tx_stream_formations[index].pcm;
|
||||
midi_channels = bebob->tx_stream_formations[index].midi;
|
||||
err = amdtp_am824_set_parameters(&bebob->tx_stream, rate,
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
config SND_WSS_LIB
|
||||
tristate
|
||||
select SND_PCM
|
||||
select SND_TIMER
|
||||
|
||||
config SND_SB_COMMON
|
||||
tristate
|
||||
|
@ -42,6 +43,7 @@ config SND_AD1816A
|
|||
select SND_OPL3_LIB
|
||||
select SND_MPU401_UART
|
||||
select SND_PCM
|
||||
select SND_TIMER
|
||||
help
|
||||
Say Y here to include support for Analog Devices SoundPort
|
||||
AD1816A or compatible sound chips.
|
||||
|
@ -209,6 +211,7 @@ config SND_GUSCLASSIC
|
|||
tristate "Gravis UltraSound Classic"
|
||||
select SND_RAWMIDI
|
||||
select SND_PCM
|
||||
select SND_TIMER
|
||||
help
|
||||
Say Y here to include support for Gravis UltraSound Classic
|
||||
soundcards.
|
||||
|
@ -221,6 +224,7 @@ config SND_GUSEXTREME
|
|||
select SND_OPL3_LIB
|
||||
select SND_MPU401_UART
|
||||
select SND_PCM
|
||||
select SND_TIMER
|
||||
help
|
||||
Say Y here to include support for Gravis UltraSound Extreme
|
||||
soundcards.
|
||||
|
|
|
@ -155,6 +155,7 @@ config SND_AZT3328
|
|||
select SND_PCM
|
||||
select SND_RAWMIDI
|
||||
select SND_AC97_CODEC
|
||||
select SND_TIMER
|
||||
depends on ZONE_DMA
|
||||
help
|
||||
Say Y here to include support for Aztech AZF3328 (PCI168)
|
||||
|
@ -463,6 +464,7 @@ config SND_EMU10K1
|
|||
select SND_HWDEP
|
||||
select SND_RAWMIDI
|
||||
select SND_AC97_CODEC
|
||||
select SND_TIMER
|
||||
depends on ZONE_DMA
|
||||
help
|
||||
Say Y to include support for Sound Blaster PCI 512, Live!,
|
||||
|
@ -889,6 +891,7 @@ config SND_YMFPCI
|
|||
select SND_OPL3_LIB
|
||||
select SND_MPU401_UART
|
||||
select SND_AC97_CODEC
|
||||
select SND_TIMER
|
||||
help
|
||||
Say Y here to include support for Yamaha PCI audio chips -
|
||||
YMF724, YMF724F, YMF740, YMF740C, YMF744, YMF754.
|
||||
|
|
|
@ -90,6 +90,8 @@ enum {
|
|||
#define NVIDIA_HDA_ENABLE_COHBIT 0x01
|
||||
|
||||
/* Defines for Intel SCH HDA snoop control */
|
||||
#define INTEL_HDA_CGCTL 0x48
|
||||
#define INTEL_HDA_CGCTL_MISCBDCGE (0x1 << 6)
|
||||
#define INTEL_SCH_HDA_DEVC 0x78
|
||||
#define INTEL_SCH_HDA_DEVC_NOSNOOP (0x1<<11)
|
||||
|
||||
|
@ -534,10 +536,21 @@ static void hda_intel_init_chip(struct azx *chip, bool full_reset)
|
|||
{
|
||||
struct hdac_bus *bus = azx_bus(chip);
|
||||
struct pci_dev *pci = chip->pci;
|
||||
u32 val;
|
||||
|
||||
if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
|
||||
snd_hdac_set_codec_wakeup(bus, true);
|
||||
if (IS_BROXTON(pci)) {
|
||||
pci_read_config_dword(pci, INTEL_HDA_CGCTL, &val);
|
||||
val = val & ~INTEL_HDA_CGCTL_MISCBDCGE;
|
||||
pci_write_config_dword(pci, INTEL_HDA_CGCTL, val);
|
||||
}
|
||||
azx_init_chip(chip, full_reset);
|
||||
if (IS_BROXTON(pci)) {
|
||||
pci_read_config_dword(pci, INTEL_HDA_CGCTL, &val);
|
||||
val = val | INTEL_HDA_CGCTL_MISCBDCGE;
|
||||
pci_write_config_dword(pci, INTEL_HDA_CGCTL, val);
|
||||
}
|
||||
if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
|
||||
snd_hdac_set_codec_wakeup(bus, false);
|
||||
|
||||
|
|
|
@ -3653,6 +3653,7 @@ HDA_CODEC_ENTRY(0x10de0070, "GPU 70 HDMI/DP", patch_nvhdmi),
|
|||
HDA_CODEC_ENTRY(0x10de0071, "GPU 71 HDMI/DP", patch_nvhdmi),
|
||||
HDA_CODEC_ENTRY(0x10de0072, "GPU 72 HDMI/DP", patch_nvhdmi),
|
||||
HDA_CODEC_ENTRY(0x10de007d, "GPU 7d HDMI/DP", patch_nvhdmi),
|
||||
HDA_CODEC_ENTRY(0x10de0083, "GPU 83 HDMI/DP", patch_nvhdmi),
|
||||
HDA_CODEC_ENTRY(0x10de8001, "MCP73 HDMI", patch_nvhdmi_2ch),
|
||||
HDA_CODEC_ENTRY(0x11069f80, "VX900 HDMI/DP", patch_via_hdmi),
|
||||
HDA_CODEC_ENTRY(0x11069f81, "VX900 HDMI/DP", patch_via_hdmi),
|
||||
|
|
|
@ -22,6 +22,7 @@ config SND_SUN_AMD7930
|
|||
config SND_SUN_CS4231
|
||||
tristate "Sun CS4231"
|
||||
select SND_PCM
|
||||
select SND_TIMER
|
||||
help
|
||||
Say Y here to include support for CS4231 sound device on Sun.
|
||||
|
||||
|
|
|
@ -1205,8 +1205,12 @@ void snd_usb_set_interface_quirk(struct usb_device *dev)
|
|||
* "Playback Design" products need a 50ms delay after setting the
|
||||
* USB interface.
|
||||
*/
|
||||
if (le16_to_cpu(dev->descriptor.idVendor) == 0x23ba)
|
||||
switch (le16_to_cpu(dev->descriptor.idVendor)) {
|
||||
case 0x23ba: /* Playback Design */
|
||||
case 0x0644: /* TEAC Corp. */
|
||||
mdelay(50);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
|
||||
|
@ -1221,6 +1225,14 @@ void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
|
|||
(requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
|
||||
mdelay(20);
|
||||
|
||||
/*
|
||||
* "TEAC Corp." products need a 20ms delay after each
|
||||
* class compliant request
|
||||
*/
|
||||
if ((le16_to_cpu(dev->descriptor.idVendor) == 0x0644) &&
|
||||
(requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
|
||||
mdelay(20);
|
||||
|
||||
/* Marantz/Denon devices with USB DAC functionality need a delay
|
||||
* after each class compliant request
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue