diff options
| author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-05-01 07:46:46 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-05-01 07:46:46 -0700 | 
| commit | 494b9aea6d451e1eaab5d52b65951d7dc6e81cb8 (patch) | |
| tree | ea70b0d3934a3a7f468d285833029798be24d5e1 /sound | |
| parent | e0a515bc6a2188f02916e976f419a8640312e32a (diff) | |
| parent | a769577b3716c757e354a681aab3524ac6b651be (diff) | |
| download | linux-494b9aea6d451e1eaab5d52b65951d7dc6e81cb8.tar.bz2 | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/perex/alsa
* git://git.kernel.org/pub/scm/linux/kernel/git/perex/alsa: (22 commits)
  [ALSA] via82xx - Use DXS_SRC as default for VIA8235/8237/8251 chips
  [ALSA] hda-codec - Add model entry for ASUS Z62F
  [ALSA] PCMCIA sound devices shouldn't depend on ISA
  [ALSA] hda-codec - Fix capture from line-in on VAIO SZ/FE laptops
  [ALSA] Fix Oops at rmmod with CONFIG_SND_VERBOSE_PROCFS=n
  [ALSA] PCM core - introduce CONFIG_SND_PCM_XRUN_DEBUG
  [ALSA] adding __devinitdata to pci_device_id
  [ALSA] add __devinitdata to all pci_device_id
  [ALSA] hda-codec - Add codec id for AD1988B codec chip
  [ALSA] hda-codec - Add model entry for ASUS M9 laptop
  [ALSA] pcxhr - Fix a compiler warning on 64bit architectures
  [ALSA] via82xx: tweak VT8251 workaround
  [ALSA] intel8x0 - Disable ALI5455 SPDIF-input
  [ALSA] via82xx: add support for VIA VT8251 (AC'97)
  [ALSA] Fix typos and add information about Jack support to Audiophile-Usb.txt
  [ALSA] Fix double free in error path of miro driver
  [ALSA] hda-codec - Add entry for Epox EP-5LDA+ GLi
  [ALSA] sound/pci/: remove duplicate #include's
  [ALSA] hda-codec - Use model 'hp' for all HP laptops with AD1981HD
  [ALSA] continue on IS_ERR from platform device registration
  ...
Diffstat (limited to 'sound')
60 files changed, 132 insertions, 129 deletions
| diff --git a/sound/core/Kconfig b/sound/core/Kconfig index 8efc1b12f3a8..4262a1c87731 100644 --- a/sound/core/Kconfig +++ b/sound/core/Kconfig @@ -142,7 +142,7 @@ config SND_SUPPORT_OLD_API  config SND_VERBOSE_PROCFS  	bool "Verbose procfs contents" -	depends on SND +	depends on SND && PROC_FS  	default y  	help  	  Say Y here to include code for verbose procfs contents (provides @@ -171,3 +171,13 @@ config SND_DEBUG_DETECT  	help  	  Say Y here to enable extra-verbose log messages printed when  	  detecting devices. + +config SND_PCM_XRUN_DEBUG +	bool "Enable PCM ring buffer overrun/underrun debugging" +	default n +	depends on SND_DEBUG && SND_VERBOSE_PROCFS +	help +	  Say Y to enable the PCM ring buffer overrun/underrun debugging. +	  It is usually not required, but if you have trouble with +	  sound clicking when system is loaded, it may help to determine +	  the process or driver which causes the scheduling gaps. diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c index c5978d6c6080..ac990bf0b48f 100644 --- a/sound/core/oss/pcm_oss.c +++ b/sound/core/oss/pcm_oss.c @@ -1242,6 +1242,8 @@ static int snd_pcm_oss_set_format(struct snd_pcm_oss_file *pcm_oss_file, int for  	if (format != AFMT_QUERY) {  		formats = snd_pcm_oss_get_formats(pcm_oss_file); +		if (formats < 0) +			return formats;  		if (!(formats & format))  			format = AFMT_U8;  		for (idx = 1; idx >= 0; --idx) { @@ -2212,7 +2214,7 @@ static int snd_pcm_oss_mmap(struct file *file, struct vm_area_struct *area)  	return 0;  } -#ifdef CONFIG_PROC_FS +#ifdef CONFIG_SND_VERBOSE_PROCFS  /*   *  /proc interface   */ @@ -2366,10 +2368,10 @@ static void snd_pcm_oss_proc_done(struct snd_pcm *pcm)  		}  	}  } -#else /* !CONFIG_PROC_FS */ +#else /* !CONFIG_SND_VERBOSE_PROCFS */  #define snd_pcm_oss_proc_init(pcm)  #define snd_pcm_oss_proc_done(pcm) -#endif /* CONFIG_PROC_FS */ +#endif /* CONFIG_SND_VERBOSE_PROCFS */  /*   *  ENTRY functions diff --git a/sound/core/pcm.c b/sound/core/pcm.c index 122e10a61ab9..84b00038236d 100644 --- a/sound/core/pcm.c +++ b/sound/core/pcm.c @@ -142,7 +142,7 @@ static int snd_pcm_control_ioctl(struct snd_card *card,  	return -ENOIOCTLCMD;  } -#if defined(CONFIG_PROC_FS) && defined(CONFIG_SND_VERBOSE_PROCFS) +#ifdef CONFIG_SND_VERBOSE_PROCFS  #define STATE(v) [SNDRV_PCM_STATE_##v] = #v  #define STREAM(v) [SNDRV_PCM_STREAM_##v] = #v @@ -436,7 +436,7 @@ static void snd_pcm_substream_proc_status_read(struct snd_info_entry *entry,  	snd_iprintf(buffer, "appl_ptr    : %ld\n", runtime->control->appl_ptr);  } -#ifdef CONFIG_SND_DEBUG +#ifdef CONFIG_SND_PCM_XRUN_DEBUG  static void snd_pcm_xrun_debug_read(struct snd_info_entry *entry,  				    struct snd_info_buffer *buffer)  { @@ -480,7 +480,7 @@ static int snd_pcm_stream_proc_init(struct snd_pcm_str *pstr)  	}  	pstr->proc_info_entry = entry; -#ifdef CONFIG_SND_DEBUG +#ifdef CONFIG_SND_PCM_XRUN_DEBUG  	if ((entry = snd_info_create_card_entry(pcm->card, "xrun_debug",  						pstr->proc_root)) != NULL) {  		entry->c.text.read_size = 64; @@ -501,7 +501,7 @@ static int snd_pcm_stream_proc_init(struct snd_pcm_str *pstr)  static int snd_pcm_stream_proc_done(struct snd_pcm_str *pstr)  { -#ifdef CONFIG_SND_DEBUG +#ifdef CONFIG_SND_PCM_XRUN_DEBUG  	if (pstr->proc_xrun_debug_entry) {  		snd_info_unregister(pstr->proc_xrun_debug_entry);  		pstr->proc_xrun_debug_entry = NULL; @@ -599,12 +599,12 @@ static int snd_pcm_substream_proc_done(struct snd_pcm_substream *substream)  	}  	return 0;  } -#else /* !CONFIG_PROC_FS */ +#else /* !CONFIG_SND_VERBOSE_PROCFS */  static inline int snd_pcm_stream_proc_init(struct snd_pcm_str *pstr) { return 0; }  static inline int snd_pcm_stream_proc_done(struct snd_pcm_str *pstr) { return 0; }  static inline int snd_pcm_substream_proc_init(struct snd_pcm_substream *substream) { return 0; }  static inline int snd_pcm_substream_proc_done(struct snd_pcm_substream *substream) { return 0; } -#endif /* CONFIG_PROC_FS */ +#endif /* CONFIG_SND_VERBOSE_PROCFS */  /**   * snd_pcm_new_stream - create a new PCM stream diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c index 230a940d00bd..eedc6cb038bb 100644 --- a/sound/core/pcm_lib.c +++ b/sound/core/pcm_lib.c @@ -130,7 +130,7 @@ void snd_pcm_playback_silence(struct snd_pcm_substream *substream, snd_pcm_ufram  static void xrun(struct snd_pcm_substream *substream)  {  	snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN); -#ifdef CONFIG_SND_DEBUG +#ifdef CONFIG_SND_PCM_XRUN_DEBUG  	if (substream->pstr->xrun_debug) {  		snd_printd(KERN_DEBUG "XRUN: pcmC%dD%d%c\n",  			   substream->pcm->card->number, @@ -204,7 +204,7 @@ static inline int snd_pcm_update_hw_ptr_interrupt(struct snd_pcm_substream *subs  	delta = hw_ptr_interrupt - new_hw_ptr;  	if (delta > 0) {  		if ((snd_pcm_uframes_t)delta < runtime->buffer_size / 2) { -#ifdef CONFIG_SND_DEBUG +#ifdef CONFIG_SND_PCM_XRUN_DEBUG  			if (runtime->periods > 1 && substream->pstr->xrun_debug) {  				snd_printd(KERN_ERR "Unexpected hw_pointer value [1] (stream = %i, delta: -%ld, max jitter = %ld): wrong interrupt acknowledge?\n", substream->stream, (long) delta, runtime->buffer_size / 2);  				if (substream->pstr->xrun_debug > 1) @@ -249,7 +249,7 @@ int snd_pcm_update_hw_ptr(struct snd_pcm_substream *substream)  	delta = old_hw_ptr - new_hw_ptr;  	if (delta > 0) {  		if ((snd_pcm_uframes_t)delta < runtime->buffer_size / 2) { -#ifdef CONFIG_SND_DEBUG +#ifdef CONFIG_SND_PCM_XRUN_DEBUG  			if (runtime->periods > 2 && substream->pstr->xrun_debug) {  				snd_printd(KERN_ERR "Unexpected hw_pointer value [2] (stream = %i, delta: -%ld, max jitter = %ld): wrong interrupt acknowledge?\n", substream->stream, (long) delta, runtime->buffer_size / 2);  				if (substream->pstr->xrun_debug > 1) diff --git a/sound/core/pcm_memory.c b/sound/core/pcm_memory.c index a0119ae67dcd..428f8c169ee1 100644 --- a/sound/core/pcm_memory.c +++ b/sound/core/pcm_memory.c @@ -100,8 +100,10 @@ static void snd_pcm_lib_preallocate_dma_free(struct snd_pcm_substream *substream  int snd_pcm_lib_preallocate_free(struct snd_pcm_substream *substream)  {  	snd_pcm_lib_preallocate_dma_free(substream); +#ifdef CONFIG_SND_VERBOSE_PROCFS  	snd_info_unregister(substream->proc_prealloc_entry);  	substream->proc_prealloc_entry = NULL; +#endif  	return 0;  } @@ -124,7 +126,7 @@ int snd_pcm_lib_preallocate_free_for_all(struct snd_pcm *pcm)  	return 0;  } -#ifdef CONFIG_PROC_FS +#ifdef CONFIG_SND_VERBOSE_PROCFS  /*   * read callback for prealloc proc file   * @@ -203,9 +205,9 @@ static inline void preallocate_info_init(struct snd_pcm_substream *substream)  	substream->proc_prealloc_entry = entry;  } -#else /* !CONFIG_PROC_FS */ +#else /* !CONFIG_SND_VERBOSE_PROCFS */  #define preallocate_info_init(s) -#endif +#endif /* CONFIG_SND_VERBOSE_PROCFS */  /*   * pre-allocate the buffer and create a proc file for the substream diff --git a/sound/drivers/dummy.c b/sound/drivers/dummy.c index e35fd5779a9d..ae0df549fac7 100644 --- a/sound/drivers/dummy.c +++ b/sound/drivers/dummy.c @@ -675,10 +675,8 @@ static int __init alsa_card_dummy_init(void)  			continue;  		device = platform_device_register_simple(SND_DUMMY_DRIVER,  							 i, NULL, 0); -		if (IS_ERR(device)) { -			err = PTR_ERR(device); -			goto errout; -		} +		if (IS_ERR(device)) +			continue;  		devices[i] = device;  		cards++;  	} @@ -686,14 +684,10 @@ static int __init alsa_card_dummy_init(void)  #ifdef MODULE  		printk(KERN_ERR "Dummy soundcard not found or device busy\n");  #endif -		err = -ENODEV; -		goto errout; +		snd_dummy_unregister_all(); +		return -ENODEV;  	}  	return 0; - - errout: -	snd_dummy_unregister_all(); -	return err;  }  static void __exit alsa_card_dummy_exit(void) diff --git a/sound/drivers/mpu401/mpu401.c b/sound/drivers/mpu401/mpu401.c index 9ea3059a7064..da7ef26995c3 100644 --- a/sound/drivers/mpu401/mpu401.c +++ b/sound/drivers/mpu401/mpu401.c @@ -251,10 +251,8 @@ static int __init alsa_card_mpu401_init(void)  #endif  		device = platform_device_register_simple(SND_MPU401_DRIVER,  							 i, NULL, 0); -		if (IS_ERR(device)) { -			err = PTR_ERR(device); -			goto errout; -		} +		if (IS_ERR(device)) +			continue;  		platform_devices[i] = device;  		snd_mpu401_devices++;  	} @@ -266,14 +264,10 @@ static int __init alsa_card_mpu401_init(void)  #ifdef MODULE  		printk(KERN_ERR "MPU-401 device not found or device busy\n");  #endif -		err = -ENODEV; -		goto errout; +		snd_mpu401_unregister_all(); +		return -ENODEV;  	}  	return 0; - - errout: -	snd_mpu401_unregister_all(); -	return err;  }  static void __exit alsa_card_mpu401_exit(void) diff --git a/sound/drivers/serial-u16550.c b/sound/drivers/serial-u16550.c index 1a7fbefe4740..c01b4c5118b9 100644 --- a/sound/drivers/serial-u16550.c +++ b/sound/drivers/serial-u16550.c @@ -996,10 +996,8 @@ static int __init alsa_card_serial_init(void)  			continue;  		device = platform_device_register_simple(SND_SERIAL_DRIVER,  							 i, NULL, 0); -		if (IS_ERR(device)) { -			err = PTR_ERR(device); -			goto errout; -		} +		if (IS_ERR(device)) +			continue;  		devices[i] = device;  		cards++;  	} @@ -1007,14 +1005,10 @@ static int __init alsa_card_serial_init(void)  #ifdef MODULE  		printk(KERN_ERR "serial midi soundcard not found or device busy\n");  #endif -		err = -ENODEV; -		goto errout; +		snd_serial_unregister_all(); +		return -ENODEV;  	}  	return 0; - - errout: -	snd_serial_unregister_all(); -	return err;  }  static void __exit alsa_card_serial_exit(void) diff --git a/sound/drivers/virmidi.c b/sound/drivers/virmidi.c index a3ee306239c9..26eb2499d442 100644 --- a/sound/drivers/virmidi.c +++ b/sound/drivers/virmidi.c @@ -169,10 +169,8 @@ static int __init alsa_card_virmidi_init(void)  			continue;  		device = platform_device_register_simple(SND_VIRMIDI_DRIVER,  							 i, NULL, 0); -		if (IS_ERR(device)) { -			err = PTR_ERR(device); -			goto errout; -		} +		if (IS_ERR(device)) +			continue;  		devices[i] = device;  		cards++;  	} @@ -180,14 +178,10 @@ static int __init alsa_card_virmidi_init(void)  #ifdef MODULE  		printk(KERN_ERR "Card-VirMIDI soundcard not found or device busy\n");  #endif -		err = -ENODEV; -		goto errout; +		snd_virmidi_unregister_all(); +		return -ENODEV;  	}  	return 0; - - errout: -	snd_virmidi_unregister_all(); -	return err;  }  static void __exit alsa_card_virmidi_exit(void) diff --git a/sound/isa/opti9xx/miro.c b/sound/isa/opti9xx/miro.c index 83d64bc07ff0..e6bfcf74c1c1 100644 --- a/sound/isa/opti9xx/miro.c +++ b/sound/isa/opti9xx/miro.c @@ -1179,20 +1179,17 @@ static int __init snd_card_miro_aci_detect(struct snd_card *card, struct snd_mir          /* force ACI into a known state */  	for (i = 0; i < 3; i++)  		if (aci_cmd(miro, ACI_ERROR_OP, -1, -1) < 0) { -			snd_card_free(card);  			snd_printk(KERN_ERR "can't force aci into known state.\n");  			return -ENXIO;  		}  	if ((miro->aci_vendor=aci_cmd(miro, ACI_READ_IDCODE, -1, -1)) < 0 ||  	    (miro->aci_product=aci_cmd(miro, ACI_READ_IDCODE, -1, -1)) < 0) { -		snd_card_free(card);  		snd_printk(KERN_ERR "can't read aci id on 0x%lx.\n", miro->aci_port);  		return -ENXIO;  	}  	if ((miro->aci_version=aci_cmd(miro, ACI_READ_VERSION, -1, -1)) < 0) { -		snd_card_free(card);  		snd_printk(KERN_ERR "can't read aci version on 0x%lx.\n",   			   miro->aci_port);  		return -ENXIO; diff --git a/sound/pci/ad1889.c b/sound/pci/ad1889.c index c6c8333acc62..eece1c7e55a0 100644 --- a/sound/pci/ad1889.c +++ b/sound/pci/ad1889.c @@ -39,7 +39,6 @@  #include <linux/interrupt.h>  #include <linux/compiler.h>  #include <linux/delay.h> -#include <linux/dma-mapping.h>  #include <sound/driver.h>  #include <sound/core.h> @@ -1052,7 +1051,7 @@ snd_ad1889_remove(struct pci_dev *pci)  	pci_set_drvdata(pci, NULL);  } -static struct pci_device_id snd_ad1889_ids[] = { +static struct pci_device_id snd_ad1889_ids[] __devinitdata = {  	{ PCI_DEVICE(PCI_VENDOR_ID_ANALOG_DEVICES, PCI_DEVICE_ID_AD1889JS) },  	{ 0, },  }; diff --git a/sound/pci/ali5451/ali5451.c b/sound/pci/ali5451/ali5451.c index fc92b6896c24..e2dbc2118902 100644 --- a/sound/pci/ali5451/ali5451.c +++ b/sound/pci/ali5451/ali5451.c @@ -279,7 +279,7 @@ struct snd_ali {  #endif  }; -static struct pci_device_id snd_ali_ids[] = { +static struct pci_device_id snd_ali_ids[] __devinitdata = {  	{PCI_DEVICE(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M5451), 0, 0, 0},  	{0, }  }; diff --git a/sound/pci/als300.c b/sound/pci/als300.c index 91899f87f037..901b08ae9174 100644 --- a/sound/pci/als300.c +++ b/sound/pci/als300.c @@ -146,7 +146,7 @@ struct snd_als300_substream_data {  	int block_counter_register;  }; -static struct pci_device_id snd_als300_ids[] = { +static struct pci_device_id snd_als300_ids[] __devinitdata = {  	{ 0x4005, 0x0300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_ALS300 },  	{ 0x4005, 0x0308, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_ALS300_PLUS },  	{ 0, } diff --git a/sound/pci/als4000.c b/sound/pci/als4000.c index 100d8127a411..60423b1c678b 100644 --- a/sound/pci/als4000.c +++ b/sound/pci/als4000.c @@ -116,7 +116,7 @@ struct snd_card_als4000 {  #endif  }; -static struct pci_device_id snd_als4000_ids[] = { +static struct pci_device_id snd_als4000_ids[] __devinitdata = {  	{ 0x4005, 0x4000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },   /* ALS4000 */  	{ 0, }  }; diff --git a/sound/pci/atiixp.c b/sound/pci/atiixp.c index 12e618851262..d0f759d86d3d 100644 --- a/sound/pci/atiixp.c +++ b/sound/pci/atiixp.c @@ -284,7 +284,7 @@ struct atiixp {  /*   */ -static struct pci_device_id snd_atiixp_ids[] = { +static struct pci_device_id snd_atiixp_ids[] __devinitdata = {  	{ 0x1002, 0x4341, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB200 */  	{ 0x1002, 0x4361, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB300 */  	{ 0x1002, 0x4370, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB400 */ diff --git a/sound/pci/atiixp_modem.c b/sound/pci/atiixp_modem.c index 1d3766044643..12a34c39caa7 100644 --- a/sound/pci/atiixp_modem.c +++ b/sound/pci/atiixp_modem.c @@ -262,7 +262,7 @@ struct atiixp_modem {  /*   */ -static struct pci_device_id snd_atiixp_ids[] = { +static struct pci_device_id snd_atiixp_ids[] __devinitdata = {  	{ 0x1002, 0x434d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB200 */  	{ 0x1002, 0x4378, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB400 */  	{ 0, } diff --git a/sound/pci/au88x0/au8810.c b/sound/pci/au88x0/au8810.c index fce22c7af0ea..bd3352998ad0 100644 --- a/sound/pci/au88x0/au8810.c +++ b/sound/pci/au88x0/au8810.c @@ -1,6 +1,6 @@  #include "au8810.h"  #include "au88x0.h" -static struct pci_device_id snd_vortex_ids[] = { +static struct pci_device_id snd_vortex_ids[] __devinitdata = {  	{PCI_VENDOR_ID_AUREAL, PCI_DEVICE_ID_AUREAL_ADVANTAGE,  	 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1,},  	{0,} diff --git a/sound/pci/au88x0/au8820.c b/sound/pci/au88x0/au8820.c index d1fbcce07257..7e3fd8372d8d 100644 --- a/sound/pci/au88x0/au8820.c +++ b/sound/pci/au88x0/au8820.c @@ -1,6 +1,6 @@  #include "au8820.h"  #include "au88x0.h" -static struct pci_device_id snd_vortex_ids[] = { +static struct pci_device_id snd_vortex_ids[] __devinitdata = {  	{PCI_VENDOR_ID_AUREAL, PCI_DEVICE_ID_AUREAL_VORTEX_1,  	 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0,},  	{0,} diff --git a/sound/pci/au88x0/au8830.c b/sound/pci/au88x0/au8830.c index d4f2717c14fb..b840f6608a61 100644 --- a/sound/pci/au88x0/au8830.c +++ b/sound/pci/au88x0/au8830.c @@ -1,6 +1,6 @@  #include "au8830.h"  #include "au88x0.h" -static struct pci_device_id snd_vortex_ids[] = { +static struct pci_device_id snd_vortex_ids[] __devinitdata = {  	{PCI_VENDOR_ID_AUREAL, PCI_DEVICE_ID_AUREAL_VORTEX_2,  	 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0,},  	{0,} diff --git a/sound/pci/azt3328.c b/sound/pci/azt3328.c index 680077e1e057..52a364524262 100644 --- a/sound/pci/azt3328.c +++ b/sound/pci/azt3328.c @@ -216,7 +216,7 @@ struct snd_azf3328 {  	int irq;  }; -static const struct pci_device_id snd_azf3328_ids[] = { +static const struct pci_device_id snd_azf3328_ids[] __devinitdata = {  	{ 0x122D, 0x50DC, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },   /* PCI168/3328 */  	{ 0x122D, 0x80DA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },   /* 3328 */  	{ 0, } diff --git a/sound/pci/bt87x.c b/sound/pci/bt87x.c index 7b44a8db033d..9ee07d4aac1e 100644 --- a/sound/pci/bt87x.c +++ b/sound/pci/bt87x.c @@ -774,7 +774,7 @@ static int __devinit snd_bt87x_create(struct snd_card *card,  	  .driver_data = rate }  /* driver_data is the default digital_rate value for that device */ -static struct pci_device_id snd_bt87x_ids[] = { +static struct pci_device_id snd_bt87x_ids[] __devinitdata = {  	/* Hauppauge WinTV series */  	BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_878, 0x0070, 0x13eb, 32000),  	/* Hauppauge WinTV series */ @@ -911,7 +911,7 @@ static void __devexit snd_bt87x_remove(struct pci_dev *pci)  /* default entries for all Bt87x cards - it's not exported */  /* driver_data is set to 0 to call detection */ -static struct pci_device_id snd_bt87x_default_ids[] = { +static struct pci_device_id snd_bt87x_default_ids[] __devinitdata = {  	BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_878, PCI_ANY_ID, PCI_ANY_ID, 0),  	BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_879, PCI_ANY_ID, PCI_ANY_ID, 0),  	{ } diff --git a/sound/pci/ca0106/ca0106_main.c b/sound/pci/ca0106/ca0106_main.c index 9477838a9c88..fd8bfebfbd54 100644 --- a/sound/pci/ca0106/ca0106_main.c +++ b/sound/pci/ca0106/ca0106_main.c @@ -1561,7 +1561,7 @@ static void __devexit snd_ca0106_remove(struct pci_dev *pci)  }  // PCI IDs -static struct pci_device_id snd_ca0106_ids[] = { +static struct pci_device_id snd_ca0106_ids[] __devinitdata = {  	{ 0x1102, 0x0007, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* Audigy LS or Live 24bit */  	{ 0, }  }; diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c index 2ecbddbbdcf0..e5ce2dabd081 100644 --- a/sound/pci/cmipci.c +++ b/sound/pci/cmipci.c @@ -2609,7 +2609,7 @@ static inline void snd_cmipci_proc_init(struct cmipci *cm) {}  #endif -static struct pci_device_id snd_cmipci_ids[] = { +static struct pci_device_id snd_cmipci_ids[] __devinitdata = {  	{PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8338A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},  	{PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8338B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},  	{PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8738, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, diff --git a/sound/pci/cs4281.c b/sound/pci/cs4281.c index ac4e73f69c1d..b3c94d83450a 100644 --- a/sound/pci/cs4281.c +++ b/sound/pci/cs4281.c @@ -494,7 +494,7 @@ struct cs4281 {  static irqreturn_t snd_cs4281_interrupt(int irq, void *dev_id, struct pt_regs *regs); -static struct pci_device_id snd_cs4281_ids[] = { +static struct pci_device_id snd_cs4281_ids[] __devinitdata = {  	{ 0x1013, 0x6005, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },	/* CS4281 */  	{ 0, }  }; diff --git a/sound/pci/cs46xx/cs46xx.c b/sound/pci/cs46xx/cs46xx.c index c590602e20cd..848d772ae3c6 100644 --- a/sound/pci/cs46xx/cs46xx.c +++ b/sound/pci/cs46xx/cs46xx.c @@ -65,7 +65,7 @@ MODULE_PARM_DESC(thinkpad, "Force to enable Thinkpad's CLKRUN control.");  module_param_array(mmap_valid, bool, NULL, 0444);  MODULE_PARM_DESC(mmap_valid, "Support OSS mmap."); -static struct pci_device_id snd_cs46xx_ids[] = { +static struct pci_device_id snd_cs46xx_ids[] __devinitdata = {          { 0x1013, 0x6001, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },   /* CS4280 */          { 0x1013, 0x6003, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },   /* CS4612 */          { 0x1013, 0x6004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },   /* CS4615 */ diff --git a/sound/pci/cs5535audio/cs5535audio.c b/sound/pci/cs5535audio/cs5535audio.c index 9fc7f3827461..2c1213a35dcc 100644 --- a/sound/pci/cs5535audio/cs5535audio.c +++ b/sound/pci/cs5535audio/cs5535audio.c @@ -45,7 +45,7 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;  static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;  static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; -static struct pci_device_id snd_cs5535audio_ids[] = { +static struct pci_device_id snd_cs5535audio_ids[] __devinitdata = {  	{ PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_CS5535_AUDIO,  	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },  	{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_AUDIO, diff --git a/sound/pci/emu10k1/emu10k1.c b/sound/pci/emu10k1/emu10k1.c index 2dfa932f7825..42b11ba1d210 100644 --- a/sound/pci/emu10k1/emu10k1.c +++ b/sound/pci/emu10k1/emu10k1.c @@ -77,7 +77,7 @@ MODULE_PARM_DESC(subsystem, "Force card subsystem model.");  /*   * Class 0401: 1102:0008 (rev 00) Subsystem: 1102:1001 -> Audigy2 Value  Model:SB0400   */ -static struct pci_device_id snd_emu10k1_ids[] = { +static struct pci_device_id snd_emu10k1_ids[] __devinitdata = {  	{ 0x1102, 0x0002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* EMU10K1 */  	{ 0x1102, 0x0004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },	/* Audigy */  	{ 0x1102, 0x0008, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },	/* Audigy 2 Value SB0400 */ diff --git a/sound/pci/emu10k1/emu10k1x.c b/sound/pci/emu10k1/emu10k1x.c index 3e332f398162..d51290c18167 100644 --- a/sound/pci/emu10k1/emu10k1x.c +++ b/sound/pci/emu10k1/emu10k1x.c @@ -36,7 +36,6 @@  #include <linux/dma-mapping.h>  #include <linux/slab.h>  #include <linux/moduleparam.h> -#include <linux/dma-mapping.h>  #include <sound/core.h>  #include <sound/initval.h>  #include <sound/pcm.h> @@ -1596,7 +1595,7 @@ static void __devexit snd_emu10k1x_remove(struct pci_dev *pci)  }  // PCI IDs -static struct pci_device_id snd_emu10k1x_ids[] = { +static struct pci_device_id snd_emu10k1x_ids[] __devinitdata = {  	{ 0x1102, 0x0006, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* Dell OEM version (EMU10K1) */  	{ 0, }  }; diff --git a/sound/pci/ens1370.c b/sound/pci/ens1370.c index a5533c86b0b6..ca9e34e88f62 100644 --- a/sound/pci/ens1370.c +++ b/sound/pci/ens1370.c @@ -446,7 +446,7 @@ struct ensoniq {  static irqreturn_t snd_audiopci_interrupt(int irq, void *dev_id, struct pt_regs *regs); -static struct pci_device_id snd_audiopci_ids[] = { +static struct pci_device_id snd_audiopci_ids[] __devinitdata = {  #ifdef CHIP1370  	{ 0x1274, 0x5000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },	/* ES1370 */  #endif diff --git a/sound/pci/es1938.c b/sound/pci/es1938.c index 4d62fe439177..6f9094ca4fb4 100644 --- a/sound/pci/es1938.c +++ b/sound/pci/es1938.c @@ -242,7 +242,7 @@ struct es1938 {  static irqreturn_t snd_es1938_interrupt(int irq, void *dev_id, struct pt_regs *regs); -static struct pci_device_id snd_es1938_ids[] = { +static struct pci_device_id snd_es1938_ids[] __devinitdata = {          { 0x125d, 0x1969, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },   /* Solo-1 */  	{ 0, }  }; diff --git a/sound/pci/es1968.c b/sound/pci/es1968.c index e3ad17f53c29..5ff4175c7b6d 100644 --- a/sound/pci/es1968.c +++ b/sound/pci/es1968.c @@ -104,7 +104,6 @@  #include <linux/slab.h>  #include <linux/gameport.h>  #include <linux/moduleparam.h> -#include <linux/dma-mapping.h>  #include <linux/mutex.h>  #include <sound/core.h> @@ -593,7 +592,7 @@ struct es1968 {  static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id, struct pt_regs *regs); -static struct pci_device_id snd_es1968_ids[] = { +static struct pci_device_id snd_es1968_ids[] __devinitdata = {  	/* Maestro 1 */          { 0x1285, 0x0100, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, TYPE_MAESTRO },  	/* Maestro 2 */ diff --git a/sound/pci/fm801.c b/sound/pci/fm801.c index 6ab4aefbccf8..d72fc28c580e 100644 --- a/sound/pci/fm801.c +++ b/sound/pci/fm801.c @@ -199,7 +199,7 @@ struct fm801 {  #endif  }; -static struct pci_device_id snd_fm801_ids[] = { +static struct pci_device_id snd_fm801_ids[] __devinitdata = {  	{ 0x1319, 0x0801, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, 0, },   /* FM801 */  	{ 0x5213, 0x0510, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, 0, },   /* Gallant Odyssey Sound 4 */  	{ 0, } diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 0ad60ae29011..e821d65afa11 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -1614,7 +1614,7 @@ static void __devexit azx_remove(struct pci_dev *pci)  }  /* PCI IDs */ -static struct pci_device_id azx_ids[] = { +static struct pci_device_id azx_ids[] __devinitdata = {  	{ 0x8086, 0x2668, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH6 */  	{ 0x8086, 0x27d8, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH7 */  	{ 0x8086, 0x269a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ESB2 */ diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index bcfca159c6a2..40f000ba1362 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c @@ -799,10 +799,14 @@ static struct hda_board_config ad1986a_cfg_tbl[] = {  	{ .modelname = "laptop-eapd",	.config = AD1986A_LAPTOP_EAPD },  	{ .pci_subvendor = 0x144d, .pci_subdevice = 0xc024,  	  .config = AD1986A_LAPTOP_EAPD }, /* Samsung R65-T2300 Charis */ +	{ .pci_subvendor = 0x1043, .pci_subdevice = 0x1153, +	  .config = AD1986A_LAPTOP_EAPD }, /* ASUS M9 */  	{ .pci_subvendor = 0x1043, .pci_subdevice = 0x1213,  	  .config = AD1986A_LAPTOP_EAPD }, /* ASUS A6J */  	{ .pci_subvendor = 0x1043, .pci_subdevice = 0x11f7,  	  .config = AD1986A_LAPTOP_EAPD }, /* ASUS U5A */ +	{ .pci_subvendor = 0x1043, .pci_subdevice = 0x1297, +	  .config = AD1986A_LAPTOP_EAPD }, /* ASUS Z62F */  	{ .pci_subvendor = 0x103c, .pci_subdevice = 0x30af,  	  .config = AD1986A_LAPTOP_EAPD }, /* HP Compaq Presario B2800 */  	{} @@ -1330,12 +1334,8 @@ enum { AD1981_BASIC, AD1981_HP };  static struct hda_board_config ad1981_cfg_tbl[] = {  	{ .modelname = "hp", .config = AD1981_HP }, -	{ .pci_subvendor = 0x103c, .pci_subdevice = 0x30aa, -	  .config = AD1981_HP }, /* HP nx6320 */ -	{ .pci_subvendor = 0x103c, .pci_subdevice = 0x309f, -	  .config = AD1981_HP }, /* HP nx9420 AngelFire */ -	{ .pci_subvendor = 0x103c, .pci_subdevice = 0x30a2, -	  .config = AD1981_HP }, /* HP nx9420 AngelFire */ +	/* All HP models */ +	{ .pci_subvendor = 0x103c, .config = AD1981_HP },  	{ .modelname = "basic", .config = AD1981_BASIC },  	{}  }; @@ -2623,5 +2623,6 @@ struct hda_codec_preset snd_hda_preset_analog[] = {  	{ .id = 0x11d41983, .name = "AD1983", .patch = patch_ad1983 },  	{ .id = 0x11d41986, .name = "AD1986A", .patch = patch_ad1986a },  	{ .id = 0x11d41988, .name = "AD1988", .patch = patch_ad1988 }, +	{ .id = 0x11d4198b, .name = "AD1988B", .patch = patch_ad1988 },  	{} /* terminator */  }; diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 66bbdb60f50b..f0e9a9c90780 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -2148,6 +2148,7 @@ static struct hda_board_config alc880_cfg_tbl[] = {  	{ .pci_subvendor = 0x1025, .pci_subdevice = 0x0087, .config = ALC880_6ST_DIG },  	{ .pci_subvendor = 0x1297, .pci_subdevice = 0xc790, .config = ALC880_6ST_DIG }, /* Shuttle ST20G5 */  	{ .pci_subvendor = 0x1509, .pci_subdevice = 0x925d, .config = ALC880_6ST_DIG }, /* FIC P4M-915GD1 */ +	{ .pci_subvendor = 0x1695, .pci_subdevice = 0x4012, .config = ALC880_5ST_DIG }, /* Epox EP-5LDA+ GLi */  	{ .modelname = "asus", .config = ALC880_ASUS },  	{ .pci_subvendor = 0x1043, .pci_subdevice = 0x1964, .config = ALC880_ASUS_DIG }, diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index 715260787953..8c440fb98603 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c @@ -1212,8 +1212,8 @@ static hda_nid_t vaio_mux_nids[] = { 0x15 };  static struct hda_input_mux vaio_mux = {  	.num_items = 2,  	.items = { -		/* { "HP", 0x0 }, -		   { "Unknown", 0x1 }, */ +		/* { "HP", 0x0 }, */ +		{ "Line", 0x1 },  		{ "Mic", 0x2 },  		{ "PCM", 0x3 },  	} diff --git a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c index 32f8415558a5..c56793b381e2 100644 --- a/sound/pci/ice1712/ice1712.c +++ b/sound/pci/ice1712/ice1712.c @@ -56,7 +56,6 @@  #include <linux/dma-mapping.h>  #include <linux/slab.h>  #include <linux/moduleparam.h> -#include <linux/dma-mapping.h>  #include <linux/mutex.h>  #include <sound/core.h> @@ -108,7 +107,7 @@ module_param_array(dxr_enable, int, NULL, 0444);  MODULE_PARM_DESC(dxr_enable, "Enable DXR support for Terratec DMX6FIRE."); -static struct pci_device_id snd_ice1712_ids[] = { +static struct pci_device_id snd_ice1712_ids[] __devinitdata = {  	{ PCI_VENDOR_ID_ICE, PCI_DEVICE_ID_ICE_1712, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },   /* ICE1712 */  	{ 0, }  }; diff --git a/sound/pci/ice1712/ice1724.c b/sound/pci/ice1712/ice1724.c index fce616c2761f..b1c007e022d2 100644 --- a/sound/pci/ice1712/ice1724.c +++ b/sound/pci/ice1712/ice1724.c @@ -86,7 +86,7 @@ MODULE_PARM_DESC(model, "Use the given board model.");  /* Both VT1720 and VT1724 have the same PCI IDs */ -static struct pci_device_id snd_vt1724_ids[] = { +static struct pci_device_id snd_vt1724_ids[] __devinitdata = {  	{ PCI_VENDOR_ID_ICE, PCI_DEVICE_ID_VT1724, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },  	{ 0, }  }; diff --git a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c index ebbf2cf4ca0f..0df7602568e2 100644 --- a/sound/pci/intel8x0.c +++ b/sound/pci/intel8x0.c @@ -413,7 +413,7 @@ struct intel8x0 {  	u32 int_sta_mask;		/* interrupt status mask */  }; -static struct pci_device_id snd_intel8x0_ids[] = { +static struct pci_device_id snd_intel8x0_ids[] __devinitdata = {  	{ 0x8086, 0x2415, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL },	/* 82801AA */  	{ 0x8086, 0x2425, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL },	/* 82901AB */  	{ 0x8086, 0x2445, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL },	/* 82801BA */ @@ -1293,6 +1293,7 @@ static int snd_intel8x0_ali_ac97spdifout_close(struct snd_pcm_substream *substre  	return 0;  } +#if 0 // NYI  static int snd_intel8x0_ali_spdifin_open(struct snd_pcm_substream *substream)  {  	struct intel8x0 *chip = snd_pcm_substream_chip(substream); @@ -1308,7 +1309,6 @@ static int snd_intel8x0_ali_spdifin_close(struct snd_pcm_substream *substream)  	return 0;  } -#if 0 // NYI  static int snd_intel8x0_ali_spdifout_open(struct snd_pcm_substream *substream)  {  	struct intel8x0 *chip = snd_pcm_substream_chip(substream); @@ -1435,6 +1435,7 @@ static struct snd_pcm_ops snd_intel8x0_ali_ac97spdifout_ops = {  	.pointer =	snd_intel8x0_pcm_pointer,  }; +#if 0 // NYI  static struct snd_pcm_ops snd_intel8x0_ali_spdifin_ops = {  	.open =		snd_intel8x0_ali_spdifin_open,  	.close =	snd_intel8x0_ali_spdifin_close, @@ -1446,7 +1447,6 @@ static struct snd_pcm_ops snd_intel8x0_ali_spdifin_ops = {  	.pointer =	snd_intel8x0_pcm_pointer,  }; -#if 0 // NYI  static struct snd_pcm_ops snd_intel8x0_ali_spdifout_ops = {  	.open =		snd_intel8x0_ali_spdifout_open,  	.close =	snd_intel8x0_ali_spdifout_close, @@ -1582,7 +1582,7 @@ static struct ich_pcm_table ali_pcms[] __devinitdata = {  	{  		.suffix = "IEC958",  		.playback_ops = &snd_intel8x0_ali_ac97spdifout_ops, -		.capture_ops = &snd_intel8x0_ali_spdifin_ops, +		/* .capture_ops = &snd_intel8x0_ali_spdifin_ops, */  		.prealloc_size = 64 * 1024,  		.prealloc_max_size = 128 * 1024,  		.ac97_idx = ALID_AC97SPDIFOUT, diff --git a/sound/pci/intel8x0m.c b/sound/pci/intel8x0m.c index 47e26aaa9ad7..720635f0cb81 100644 --- a/sound/pci/intel8x0m.c +++ b/sound/pci/intel8x0m.c @@ -224,7 +224,7 @@ struct intel8x0m {  	unsigned int pcm_pos_shift;  }; -static struct pci_device_id snd_intel8x0m_ids[] = { +static struct pci_device_id snd_intel8x0m_ids[] __devinitdata = {  	{ 0x8086, 0x2416, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL },	/* 82801AA */  	{ 0x8086, 0x2426, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL },	/* 82901AB */  	{ 0x8086, 0x2446, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL },	/* 82801BA */ diff --git a/sound/pci/korg1212/korg1212.c b/sound/pci/korg1212/korg1212.c index 4721c096335e..e39fad1a4200 100644 --- a/sound/pci/korg1212/korg1212.c +++ b/sound/pci/korg1212/korg1212.c @@ -424,7 +424,7 @@ module_param_array(enable, bool, NULL, 0444);  MODULE_PARM_DESC(enable, "Enable Korg 1212 soundcard.");  MODULE_AUTHOR("Haroldo Gamal <gamal@alternex.com.br>"); -static struct pci_device_id snd_korg1212_ids[] = { +static struct pci_device_id snd_korg1212_ids[] __devinitdata = {  	{  		.vendor	   = 0x10b5,  		.device	   = 0x906d, diff --git a/sound/pci/maestro3.c b/sound/pci/maestro3.c index 9c90d901e6b9..1928e06b6d82 100644 --- a/sound/pci/maestro3.c +++ b/sound/pci/maestro3.c @@ -41,7 +41,6 @@  #include <linux/slab.h>  #include <linux/vmalloc.h>  #include <linux/moduleparam.h> -#include <linux/dma-mapping.h>  #include <sound/core.h>  #include <sound/info.h>  #include <sound/control.h> @@ -870,7 +869,7 @@ struct snd_m3 {  /*   * pci ids   */ -static struct pci_device_id snd_m3_ids[] = { +static struct pci_device_id snd_m3_ids[] __devinitdata = {  	{PCI_VENDOR_ID_ESS, PCI_DEVICE_ID_ESS_ALLEGRO_1, PCI_ANY_ID, PCI_ANY_ID,  	 PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, 0},  	{PCI_VENDOR_ID_ESS, PCI_DEVICE_ID_ESS_ALLEGRO, PCI_ANY_ID, PCI_ANY_ID, diff --git a/sound/pci/mixart/mixart.c b/sound/pci/mixart/mixart.c index b5a095052d4c..09cc0786495a 100644 --- a/sound/pci/mixart/mixart.c +++ b/sound/pci/mixart/mixart.c @@ -28,7 +28,6 @@  #include <linux/dma-mapping.h>  #include <linux/moduleparam.h>  #include <linux/mutex.h> -#include <linux/dma-mapping.h>  #include <sound/core.h>  #include <sound/initval.h> @@ -62,7 +61,7 @@ MODULE_PARM_DESC(enable, "Enable Digigram " CARD_NAME " soundcard.");  /*   */ -static struct pci_device_id snd_mixart_ids[] = { +static struct pci_device_id snd_mixart_ids[] __devinitdata = {  	{ 0x1057, 0x0003, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* MC8240 */  	{ 0, }  }; diff --git a/sound/pci/nm256/nm256.c b/sound/pci/nm256/nm256.c index cc297abc9d11..b92d6600deb9 100644 --- a/sound/pci/nm256/nm256.c +++ b/sound/pci/nm256/nm256.c @@ -263,7 +263,7 @@ struct nm256 {  /*   * PCI ids   */ -static struct pci_device_id snd_nm256_ids[] = { +static struct pci_device_id snd_nm256_ids[] __devinitdata = {  	{PCI_VENDOR_ID_NEOMAGIC, PCI_DEVICE_ID_NEOMAGIC_NM256AV_AUDIO, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},  	{PCI_VENDOR_ID_NEOMAGIC, PCI_DEVICE_ID_NEOMAGIC_NM256ZX_AUDIO, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},  	{PCI_VENDOR_ID_NEOMAGIC, PCI_DEVICE_ID_NEOMAGIC_NM256XL_PLUS_AUDIO, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, diff --git a/sound/pci/pcxhr/pcxhr.c b/sound/pci/pcxhr/pcxhr.c index 35875c8aa299..dafa2235abaa 100644 --- a/sound/pci/pcxhr/pcxhr.c +++ b/sound/pci/pcxhr/pcxhr.c @@ -30,7 +30,6 @@  #include <linux/delay.h>  #include <linux/moduleparam.h>  #include <linux/mutex.h> -#include <linux/dma-mapping.h>  #include <sound/core.h>  #include <sound/initval.h> @@ -74,7 +73,7 @@ enum {  	PCI_ID_LAST  }; -static struct pci_device_id pcxhr_ids[] = { +static struct pci_device_id pcxhr_ids[] __devinitdata = {  	{ 0x10b5, 0x9656, 0x1369, 0xb001, 0, 0, PCI_ID_VX882HR, },   /* VX882HR */  	{ 0x10b5, 0x9656, 0x1369, 0xb101, 0, 0, PCI_ID_PCX882HR, },  /* PCX882HR */  	{ 0x10b5, 0x9656, 0x1369, 0xb201, 0, 0, PCI_ID_VX881HR, },   /* VX881HR */ diff --git a/sound/pci/pcxhr/pcxhr_hwdep.c b/sound/pci/pcxhr/pcxhr_hwdep.c index 03517c10e99c..369c19fea985 100644 --- a/sound/pci/pcxhr/pcxhr_hwdep.c +++ b/sound/pci/pcxhr/pcxhr_hwdep.c @@ -385,8 +385,8 @@ static int pcxhr_hwdep_dsp_load(struct snd_hwdep *hw,  	fw.size = dsp->length;  	fw.data = vmalloc(fw.size);  	if (! fw.data) { -		snd_printk(KERN_ERR "pcxhr: cannot allocate dsp image (%d bytes)\n", -			   fw.size); +		snd_printk(KERN_ERR "pcxhr: cannot allocate dsp image (%lu bytes)\n", +			   (unsigned long)fw.size);  		return -ENOMEM;  	}  	if (copy_from_user(fw.data, dsp->image, dsp->length)) { diff --git a/sound/pci/riptide/riptide.c b/sound/pci/riptide/riptide.c index f148ee434a6b..d8cc985d7241 100644 --- a/sound/pci/riptide/riptide.c +++ b/sound/pci/riptide/riptide.c @@ -506,7 +506,7 @@ static int riptide_reset(struct cmdif *cif, struct snd_riptide *chip);  /*   */ -static struct pci_device_id snd_riptide_ids[] = { +static struct pci_device_id snd_riptide_ids[] __devinitdata = {  	{  	 .vendor = 0x127a,.device = 0x4310,  	 .subvendor = PCI_ANY_ID,.subdevice = PCI_ANY_ID, @@ -527,7 +527,7 @@ static struct pci_device_id snd_riptide_ids[] = {  };  #ifdef SUPPORT_JOYSTICK -static struct pci_device_id snd_riptide_joystick_ids[] = { +static struct pci_device_id snd_riptide_joystick_ids[] __devinitdata = {  	{  	 .vendor = 0x127a,.device = 0x4312,  	 .subvendor = PCI_ANY_ID,.subdevice = PCI_ANY_ID, diff --git a/sound/pci/rme32.c b/sound/pci/rme32.c index ab78544bf042..55b1d4838d97 100644 --- a/sound/pci/rme32.c +++ b/sound/pci/rme32.c @@ -227,7 +227,7 @@ struct rme32 {  	struct snd_kcontrol *spdif_ctl;  }; -static struct pci_device_id snd_rme32_ids[] = { +static struct pci_device_id snd_rme32_ids[] __devinitdata = {  	{PCI_VENDOR_ID_XILINX_RME, PCI_DEVICE_ID_RME_DIGI32,  	 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0,},  	{PCI_VENDOR_ID_XILINX_RME, PCI_DEVICE_ID_RME_DIGI32_8, diff --git a/sound/pci/rme96.c b/sound/pci/rme96.c index 6c2a9f4a7659..3c1bc533d511 100644 --- a/sound/pci/rme96.c +++ b/sound/pci/rme96.c @@ -232,7 +232,7 @@ struct rme96 {  	struct snd_kcontrol   *spdif_ctl;  }; -static struct pci_device_id snd_rme96_ids[] = { +static struct pci_device_id snd_rme96_ids[] __devinitdata = {  	{ PCI_VENDOR_ID_XILINX, PCI_DEVICE_ID_RME_DIGI96,  	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },  	{ PCI_VENDOR_ID_XILINX, PCI_DEVICE_ID_RME_DIGI96_8, diff --git a/sound/pci/rme9652/hdsp.c b/sound/pci/rme9652/hdsp.c index ebf7a2b86c23..61f82f0d5cc6 100644 --- a/sound/pci/rme9652/hdsp.c +++ b/sound/pci/rme9652/hdsp.c @@ -568,7 +568,7 @@ static void snd_hammerfall_free_buffer(struct snd_dma_buffer *dmab, struct pci_d  } -static struct pci_device_id snd_hdsp_ids[] = { +static struct pci_device_id snd_hdsp_ids[] __devinitdata = {  	{  		.vendor = PCI_VENDOR_ID_XILINX,  		.device = PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP,  diff --git a/sound/pci/rme9652/hdspm.c b/sound/pci/rme9652/hdspm.c index b5538efd146b..722b9e6ce54a 100644 --- a/sound/pci/rme9652/hdspm.c +++ b/sound/pci/rme9652/hdspm.c @@ -426,7 +426,7 @@ static char channel_map_madi_qs[HDSPM_MAX_CHANNELS] = {  }; -static struct pci_device_id snd_hdspm_ids[] = { +static struct pci_device_id snd_hdspm_ids[] __devinitdata = {  	{  	 .vendor = PCI_VENDOR_ID_XILINX,  	 .device = PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP_MADI, diff --git a/sound/pci/rme9652/rme9652.c b/sound/pci/rme9652/rme9652.c index a687eb63236f..75d6406303d3 100644 --- a/sound/pci/rme9652/rme9652.c +++ b/sound/pci/rme9652/rme9652.c @@ -315,7 +315,7 @@ static void snd_hammerfall_free_buffer(struct snd_dma_buffer *dmab, struct pci_d  } -static struct pci_device_id snd_rme9652_ids[] = { +static struct pci_device_id snd_rme9652_ids[] __devinitdata = {  	{  		.vendor	   = 0x10ee,  		.device	   = 0x3fc4, diff --git a/sound/pci/sonicvibes.c b/sound/pci/sonicvibes.c index 2d66a09fe5ee..91f8bf3ae9fa 100644 --- a/sound/pci/sonicvibes.c +++ b/sound/pci/sonicvibes.c @@ -243,7 +243,7 @@ struct sonicvibes {  #endif  }; -static struct pci_device_id snd_sonic_ids[] = { +static struct pci_device_id snd_sonic_ids[] __devinitdata = {  	{ 0x5333, 0xca00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },          { 0, }  }; diff --git a/sound/pci/trident/trident.c b/sound/pci/trident/trident.c index b4538045049f..9624a5f2b875 100644 --- a/sound/pci/trident/trident.c +++ b/sound/pci/trident/trident.c @@ -63,7 +63,7 @@ MODULE_PARM_DESC(pcm_channels, "Number of hardware channels assigned for PCM.");  module_param_array(wavetable_size, int, NULL, 0444);  MODULE_PARM_DESC(wavetable_size, "Maximum memory size in kB for wavetable synth."); -static struct pci_device_id snd_trident_ids[] = { +static struct pci_device_id snd_trident_ids[] __devinitdata = {  	{PCI_DEVICE(PCI_VENDOR_ID_TRIDENT, PCI_DEVICE_ID_TRIDENT_4DWAVE_DX),   		PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, 0},  	{PCI_DEVICE(PCI_VENDOR_ID_TRIDENT, PCI_DEVICE_ID_TRIDENT_4DWAVE_NX),  diff --git a/sound/pci/via82xx.c b/sound/pci/via82xx.c index 0f171dd1377b..39daf62d2bad 100644 --- a/sound/pci/via82xx.c +++ b/sound/pci/via82xx.c @@ -123,6 +123,7 @@ module_param(enable, bool, 0444);  #define VIA_REV_8233A		0x40	/* 1 rec, 1 multi-pb, spdf */  #define VIA_REV_8235		0x50	/* 2 rec, 4 pb, 1 multi-pb, spdif */  #define VIA_REV_8237		0x60 +#define VIA_REV_8251		0x70  /*   *  Direct registers @@ -395,7 +396,7 @@ struct via82xx {  #endif  }; -static struct pci_device_id snd_via82xx_ids[] = { +static struct pci_device_id snd_via82xx_ids[] __devinitdata = {  	/* 0x1106, 0x3058 */  	{ PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, TYPE_CARD_VIA686, },	/* 686A */  	/* 0x1106, 0x3059 */ @@ -862,6 +863,11 @@ static snd_pcm_uframes_t snd_via8233_pcm_pointer(struct snd_pcm_substream *subst  	if (!status)  		status = inb(VIADEV_REG(viadev, OFFSET_STATUS)); +	/* An apparent bug in the 8251 is worked around by sending a  +	 * REG_CTRL_START. */ +	if (chip->revision == VIA_REV_8251 && (status & VIA_REG_STAT_EOL)) +		snd_via82xx_pcm_trigger(substream, SNDRV_PCM_TRIGGER_START); +  	if (!(status & VIA_REG_STAT_ACTIVE)) {  		res = 0;  		goto unlock; @@ -2313,6 +2319,7 @@ static struct via823x_info via823x_cards[] __devinitdata = {  	{ VIA_REV_8233A, "VIA 8233A", TYPE_VIA8233A },  	{ VIA_REV_8235, "VIA 8235", TYPE_VIA8233 },  	{ VIA_REV_8237, "VIA 8237", TYPE_VIA8233 }, +	{ VIA_REV_8251, "VIA 8251", TYPE_VIA8233 },  };  /* @@ -2325,7 +2332,7 @@ struct dxs_whitelist {  	short action;	/* new dxs_support value */  }; -static int __devinit check_dxs_list(struct pci_dev *pci) +static int __devinit check_dxs_list(struct pci_dev *pci, int revision)  {  	static struct dxs_whitelist whitelist[] = {  		{ .subvendor = 0x1005, .subdevice = 0x4710, .action = VIA_DXS_ENABLE }, /* Avance Logic Mobo */ @@ -2342,6 +2349,7 @@ static int __devinit check_dxs_list(struct pci_dev *pci)  		{ .subvendor = 0x1043, .subdevice = 0x810d, .action = VIA_DXS_SRC }, /* ASUS */  		{ .subvendor = 0x1043, .subdevice = 0x812a, .action = VIA_DXS_SRC    }, /* ASUS A8V Deluxe */   		{ .subvendor = 0x1043, .subdevice = 0x8174, .action = VIA_DXS_SRC    }, /* ASUS */ +		{ .subvendor = 0x1043, .subdevice = 0x81b9, .action = VIA_DXS_SRC    }, /* ASUS A8V-MX */  		{ .subvendor = 0x1071, .subdevice = 0x8375, .action = VIA_DXS_NO_VRA }, /* Vobis/Yakumo/Mitac notebook */  		{ .subvendor = 0x1071, .subdevice = 0x8399, .action = VIA_DXS_NO_VRA }, /* Umax AB 595T (VIA K8N800A - VT8237) */  		{ .subvendor = 0x10cf, .subdevice = 0x118e, .action = VIA_DXS_ENABLE }, /* FSC laptop */ @@ -2405,6 +2413,10 @@ static int __devinit check_dxs_list(struct pci_dev *pci)  		}  	} +	/* for newer revision, default to DXS_SRC */ +	if (revision >= VIA_REV_8235) +		return VIA_DXS_SRC; +  	/*  	 * not detected, try 48k rate only to be sure.  	 */ @@ -2449,7 +2461,7 @@ static int __devinit snd_via82xx_probe(struct pci_dev *pci,  		}  		if (chip_type != TYPE_VIA8233A) {  			if (dxs_support == VIA_DXS_AUTO) -				dxs_support = check_dxs_list(pci); +				dxs_support = check_dxs_list(pci, revision);  			/* force to use VIA8233 or 8233A model according to  			 * dxs_support module option  			 */ diff --git a/sound/pci/via82xx_modem.c b/sound/pci/via82xx_modem.c index 22ce4d309929..ef97e50cd6c2 100644 --- a/sound/pci/via82xx_modem.c +++ b/sound/pci/via82xx_modem.c @@ -261,7 +261,7 @@ struct via82xx_modem {  	struct snd_info_entry *proc_entry;  }; -static struct pci_device_id snd_via82xx_modem_ids[] = { +static struct pci_device_id snd_via82xx_modem_ids[] __devinitdata = {  	{ 0x1106, 0x3068, PCI_ANY_ID, PCI_ANY_ID, 0, 0, TYPE_CARD_VIA82XX_MODEM, },  	{ 0, }  }; diff --git a/sound/pci/vx222/vx222.c b/sound/pci/vx222/vx222.c index c816ddf1b215..0f1ebb010a5e 100644 --- a/sound/pci/vx222/vx222.c +++ b/sound/pci/vx222/vx222.c @@ -60,7 +60,7 @@ enum {  	VX_PCI_VX222_NEW  }; -static struct pci_device_id snd_vx222_ids[] = { +static struct pci_device_id snd_vx222_ids[] __devinitdata = {  	{ 0x10b5, 0x9050, 0x1369, PCI_ANY_ID, 0, 0, VX_PCI_VX222_OLD, },   /* PLX */  	{ 0x10b5, 0x9030, 0x1369, PCI_ANY_ID, 0, 0, VX_PCI_VX222_NEW, },   /* PLX */  	{ 0, } diff --git a/sound/pci/ymfpci/ymfpci.c b/sound/pci/ymfpci/ymfpci.c index db57ce939fa8..65ebf5f1933a 100644 --- a/sound/pci/ymfpci/ymfpci.c +++ b/sound/pci/ymfpci/ymfpci.c @@ -70,7 +70,7 @@ MODULE_PARM_DESC(rear_switch, "Enable shared rear/line-in switch");  module_param_array(rear_swap, bool, NULL, 0444);  MODULE_PARM_DESC(rear_swap, "Swap rear channels (must be enabled for correct IEC958 (S/PDIF)) output"); -static struct pci_device_id snd_ymfpci_ids[] = { +static struct pci_device_id snd_ymfpci_ids[] __devinitdata = {          { 0x1073, 0x0004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },   /* YMF724 */          { 0x1073, 0x000d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },   /* YMF724F */          { 0x1073, 0x000a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },   /* YMF740 */ diff --git a/sound/pcmcia/Kconfig b/sound/pcmcia/Kconfig index 5d1b0b762efa..c9fa1a2bc58b 100644 --- a/sound/pcmcia/Kconfig +++ b/sound/pcmcia/Kconfig @@ -5,7 +5,7 @@ menu "PCMCIA devices"  config SND_VXPOCKET  	tristate "Digigram VXpocket" -	depends on SND && PCMCIA && ISA +	depends on SND && PCMCIA  	select SND_VX_LIB  	help  	  Say Y here to include support for Digigram VXpocket and @@ -16,7 +16,7 @@ config SND_VXPOCKET  config SND_PDAUDIOCF  	tristate "Sound Core PDAudioCF" -	depends on SND && PCMCIA && ISA +	depends on SND && PCMCIA  	select SND_PCM  	help  	  Say Y here to include support for Sound Core PDAudioCF diff --git a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h index 0992a0923f1a..9351846d7a9d 100644 --- a/sound/usb/usbquirks.h +++ b/sound/usb/usbquirks.h @@ -1531,6 +1531,15 @@ YAMAHA_DEVICE(0x7010, "UB99"),  	}  },  { +	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014), +	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { +		.vendor_name = "TerraTec", +		.product_name = "PHASE 26", +		.ifnum = 3, +		.type = QUIRK_MIDI_STANDARD_INTERFACE +	} +}, +{  	USB_DEVICE(0x0ccd, 0x0035),  	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {  		.vendor_name = "Miditech", |