Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6: ALSA: riptide - proper handling of pci_register_driver for joystick sound: usb-audio: add workaround for Blue Microphones devices ALSA: hda_intel: more strict alc880_parse_auto_config dig_nid checking ASoC: Fix NULL pointer dereference in __pxa2xx_pcm_hw_free
This commit is contained in:
Коммит
8e3b3bb5e5
|
@ -75,7 +75,7 @@ int __pxa2xx_pcm_hw_free(struct snd_pcm_substream *substream)
|
|||
{
|
||||
struct pxa2xx_runtime_data *rtd = substream->runtime->private_data;
|
||||
|
||||
if (rtd && rtd->params)
|
||||
if (rtd && rtd->params && rtd->params->drcmr)
|
||||
*rtd->params->drcmr = 0;
|
||||
|
||||
snd_pcm_set_runtime_buffer(substream, NULL);
|
||||
|
|
|
@ -4505,6 +4505,12 @@ static int alc880_parse_auto_config(struct hda_codec *codec)
|
|||
&dig_nid, 1);
|
||||
if (err < 0)
|
||||
continue;
|
||||
if (dig_nid > 0x7f) {
|
||||
printk(KERN_ERR "alc880_auto: invalid dig_nid "
|
||||
"connection 0x%x for NID 0x%x\n", dig_nid,
|
||||
spec->autocfg.dig_out_pins[i]);
|
||||
continue;
|
||||
}
|
||||
if (!i)
|
||||
spec->multiout.dig_out_nid = dig_nid;
|
||||
else {
|
||||
|
|
|
@ -2197,9 +2197,12 @@ static int __init alsa_card_riptide_init(void)
|
|||
if (err < 0)
|
||||
return err;
|
||||
#if defined(SUPPORT_JOYSTICK)
|
||||
pci_register_driver(&joystick_driver);
|
||||
err = pci_register_driver(&joystick_driver);
|
||||
/* On failure unregister formerly registered audio driver */
|
||||
if (err < 0)
|
||||
pci_unregister_driver(&driver);
|
||||
#endif
|
||||
return 0;
|
||||
return err;
|
||||
}
|
||||
|
||||
static void __exit alsa_card_riptide_exit(void)
|
||||
|
|
|
@ -2661,7 +2661,7 @@ static int parse_audio_endpoints(struct snd_usb_audio *chip, int iface_no)
|
|||
struct usb_interface_descriptor *altsd;
|
||||
int i, altno, err, stream;
|
||||
int format;
|
||||
struct audioformat *fp;
|
||||
struct audioformat *fp = NULL;
|
||||
unsigned char *fmt, *csep;
|
||||
int num;
|
||||
|
||||
|
@ -2734,6 +2734,18 @@ static int parse_audio_endpoints(struct snd_usb_audio *chip, int iface_no)
|
|||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Blue Microphones workaround: The last altsetting is identical
|
||||
* with the previous one, except for a larger packet size, but
|
||||
* is actually a mislabeled two-channel setting; ignore it.
|
||||
*/
|
||||
if (fmt[4] == 1 && fmt[5] == 2 && altno == 2 && num == 3 &&
|
||||
fp && fp->altsetting == 1 && fp->channels == 1 &&
|
||||
fp->format == SNDRV_PCM_FORMAT_S16_LE &&
|
||||
le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize) ==
|
||||
fp->maxpacksize * 2)
|
||||
continue;
|
||||
|
||||
csep = snd_usb_find_desc(alts->endpoint[0].extra, alts->endpoint[0].extralen, NULL, USB_DT_CS_ENDPOINT);
|
||||
/* Creamware Noah has this descriptor after the 2nd endpoint */
|
||||
if (!csep && altsd->bNumEndpoints >= 2)
|
||||
|
|
Загрузка…
Ссылка в новой задаче