sound fixes for 4.5-rc2
Subsystems (3)
Linus,
please pull sound fixes for v4.5-rc2 from:
git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git tags/sound-4.5-rc2
The topmost commit is 6639484ddaf6707b41082c9fa9ca9af342df6402
----------------------------------------------------------------
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.
----------------------------------------------------------------
Aaron Plattner (1):
ALSA: hda - Add new GPU codec ID 0x10de0083 to snd-hda
Guillaume Fougnies (1):
ALSA: usb-audio: Fix TEAC UD-501/UD-503/NT-503 usb delay
Libin Yang (1):
ALSA: hda - disable dynamic clock gating on Broxton before reset
Lucas Tanure (1):
ALSA: bebob: Use a signed return type for get_formation_index
Randy Dunlap (1):
ALSA: timer: fix SND_PCM_TIMER Kconfig text
Takashi Iwai (5):
ALSA: seq: Fix incorrect sanity check at snd_seq_oss_synth_cleanup()
ALSA: seq: Degrade the error message for too many opens
ALSA: compress: Disable GET_CODEC_CAPS ioctl for some architectures
ALSA: Add missing dependency on CONFIG_SND_TIMER
ALSA: dummy: Disable switching timer backend via sysfs
--- sound/core/Kconfig | 6 +++--- sound/core/compress_offload.c | 11 +++++++++++ sound/core/seq/oss/seq_oss_init.c | 2 +- sound/core/seq/oss/seq_oss_synth.c | 2 +- sound/drivers/dummy.c | 2 +- sound/firewire/bebob/bebob_stream.c | 14 +++++++++----- sound/isa/Kconfig | 4 ++++ sound/pci/Kconfig | 3 +++ sound/pci/hda/hda_intel.c | 13 +++++++++++++ sound/pci/hda/patch_hdmi.c | 1 + sound/sparc/Kconfig | 1 + sound/usb/quirks.c | 14 +++++++++++++- 12 files changed, 61 insertions(+), 12 deletions(-)
sound/core/Kconfig +3 -3
@@ -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
sound/core/compress_offload.c +11 -0
@@ -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 ;
sound/core/seq/oss/seq_oss_init.c +1 -1
@@ -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; }
sound/core/seq/oss/seq_oss_synth.c +1 -1
@@ -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];
sound/drivers/dummy.c +1 -1
@@ -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
sound/firewire/bebob/bebob_stream.c +9 -5
@@ -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,
sound/isa/Kconfig +4 -0
@@ -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.
sound/pci/Kconfig +3 -0
@@ -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.
sound/pci/hda/hda_intel.c +13 -0
@@ -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);
sound/pci/hda/patch_hdmi.c +1 -0
@@ -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),
sound/sparc/Kconfig +1 -0
@@ -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.
sound/usb/quirks.c +13 -1
@@ -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 */