Merge master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa-current
This commit is contained in:
		
						commit
						63f3d1df1a
					
				| @ -75,7 +75,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | ||||
|     adsp_map	- PCM device number maps assigned to the 2st OSS device. | ||||
| 		- Default: 1 | ||||
|     nonblock_open | ||||
| 		- Don't block opening busy PCM devices. | ||||
| 		- Don't block opening busy PCM devices.  Default: 1 | ||||
| 
 | ||||
|     For example, when dsp_map=2, /dev/dsp will be mapped to PCM #2 of | ||||
|     the card #0.  Similarly, when adsp_map=0, /dev/adsp will be mapped | ||||
| @ -148,6 +148,16 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | ||||
|     Module supports up to 8 cards. This module does not support autoprobe | ||||
|     thus main port must be specified!!! Other ports are optional. | ||||
|      | ||||
|   Module snd-ad1889 | ||||
|   ----------------- | ||||
| 
 | ||||
|     Module for Analog Devices AD1889 chips. | ||||
| 
 | ||||
|     ac97_quirk  - AC'97 workaround for strange hardware | ||||
|                   See the description of intel8x0 module for details. | ||||
| 
 | ||||
|     This module supports up to 8 cards. | ||||
| 
 | ||||
|   Module snd-ali5451 | ||||
|   ------------------ | ||||
| 
 | ||||
| @ -189,15 +199,20 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | ||||
|   Module snd-atiixp | ||||
|   ----------------- | ||||
| 
 | ||||
|     Module for ATI IXP 150/200/250 AC97 controllers. | ||||
|     Module for ATI IXP 150/200/250/400 AC97 controllers. | ||||
| 
 | ||||
|     ac97_clock		- AC'97 clock (defalut = 48000) | ||||
|     ac97_clock		- AC'97 clock (default = 48000) | ||||
|     ac97_quirk		- AC'97 workaround for strange hardware | ||||
| 			  See the description of intel8x0 module for details. | ||||
| 			  See "AC97 Quirk Option" section below. | ||||
|     spdif_aclink	- S/PDIF transfer over AC-link (default = 1) | ||||
| 
 | ||||
|     This module supports up to 8 cards and autoprobe. | ||||
| 
 | ||||
|     ATI IXP has two different methods to control SPDIF output.  One is | ||||
|     over AC-link and another is over the "direct" SPDIF output.  The | ||||
|     implementation depends on the motherboard, and you'll need to | ||||
|     choose the correct one via spdif_aclink module option. | ||||
| 
 | ||||
|   Module snd-atiixp-modem | ||||
|   ----------------------- | ||||
| 
 | ||||
| @ -230,7 +245,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | ||||
|     The hardware EQ hardware and SPDIF is only present in the Vortex2 and  | ||||
|     Advantage. | ||||
| 
 | ||||
|     Note: Some ALSA mixer applicactions don't handle the SPDIF samplerate  | ||||
|     Note: Some ALSA mixer applications don't handle the SPDIF sample rate  | ||||
|            control correctly. If you have problems regarding this, try | ||||
|            another ALSA compliant mixer (alsamixer works). | ||||
| 
 | ||||
| @ -302,7 +317,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | ||||
| 
 | ||||
|     mpu_port	- 0x300,0x310,0x320,0x330, 0 = disable (default) | ||||
|     fm_port     - 0x388 (default), 0 = disable (default) | ||||
|     soft_ac3    - Sofware-conversion of raw SPDIF packets (model 033 only) | ||||
|     soft_ac3    - Software-conversion of raw SPDIF packets (model 033 only) | ||||
|                   (default = 1) | ||||
|     joystick_port - Joystick port address (0 = disable, 1 = auto-detect) | ||||
| 
 | ||||
| @ -384,7 +399,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | ||||
|     Module for PCI sound cards based on CS4610/CS4612/CS4614/CS4615/CS4622/ | ||||
| 				       CS4624/CS4630/CS4280 PCI chips. | ||||
| 
 | ||||
|     external_amp     - Force to enable external amplifer. | ||||
|     external_amp     - Force to enable external amplifier. | ||||
|     thinkpad         - Force to enable Thinkpad's CLKRUN control. | ||||
|     mmap_valid       - Support OSS mmap mode (default = 0). | ||||
| 
 | ||||
| @ -620,7 +635,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | ||||
| 	       VIA VT8251/VT8237A | ||||
| 
 | ||||
|     model	- force the model name | ||||
|     position_fix - Fix DMA pointer (0 = FIFO size, 1 = none, 2 = POSBUF) | ||||
|     position_fix - Fix DMA pointer (0 = auto, 1 = none, 2 = POSBUF, 3 = FIFO size) | ||||
| 
 | ||||
|     Module supports up to 8 cards. | ||||
| 
 | ||||
| @ -656,6 +671,11 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | ||||
| 	  allout	5-jack in back, 2-jack in front, SPDIF out | ||||
| 	  auto		auto-config reading BIOS (default) | ||||
| 
 | ||||
|     If the default configuration doesn't work and one of the above | ||||
|     matches with your device, report it together with the PCI | ||||
|     subsystem ID (output of "lspci -nv") to ALSA BTS or alsa-devel | ||||
|     ML (see the section "Links and Addresses"). | ||||
| 
 | ||||
|     Note 2: If you get click noises on output, try the module option | ||||
| 	    position_fix=1 or 2.  position_fix=1 will use the SD_LPIB | ||||
| 	    register value without FIFO size correction as the current | ||||
| @ -783,20 +803,13 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | ||||
| 
 | ||||
|     ac97_clock	  - AC'97 codec clock base (0 = auto-detect) | ||||
|     ac97_quirk    - AC'97 workaround for strange hardware | ||||
|                     The following strings are accepted: | ||||
|                       default = don't override the default setting | ||||
|                       disable = disable the quirk | ||||
|                       hp_only = use headphone control as master | ||||
|                       swap_hp = swap headphone and master controls | ||||
|                       swap_surround = swap master and surround controls | ||||
|                       ad_sharing = for AD1985, turn on OMS bit and use headphone | ||||
|                       alc_jack = for ALC65x, turn on the jack sense mode | ||||
|                       inv_eapd = inverted EAPD implementation | ||||
|                       mute_led = bind EAPD bit for turning on/off mute LED | ||||
|                     For backward compatibility, the corresponding integer | ||||
|                     value -1, 0, ... are accepted, too. | ||||
| 		    See "AC97 Quirk Option" section below. | ||||
|     buggy_irq     - Enable workaround for buggy interrupts on some | ||||
|                     motherboards (default off) | ||||
|                     motherboards (default yes on nForce chips, | ||||
| 		    otherwise off) | ||||
|     buggy_semaphore - Enable workaround for hardwares with buggy | ||||
| 		    semaphores (e.g. on some ASUS laptops) | ||||
| 		    (default off) | ||||
| 
 | ||||
|     Module supports autoprobe and multiple bus-master chips (max 8). | ||||
| 
 | ||||
| @ -808,13 +821,6 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | ||||
|     motherboard has these devices, use the ns558 or snd-mpu401 | ||||
|     modules, respectively. | ||||
| 
 | ||||
|     The ac97_quirk option is used to enable/override the workaround | ||||
|     for specific devices.  Some hardware have swapped output pins | ||||
|     between Master and Headphone, or Surround.  The driver provides | ||||
|     the auto-detection of known problematic devices, but some might | ||||
|     be unknown or wrongly detected.  In such a case, pass the proper | ||||
|     value with this option. | ||||
| 
 | ||||
|     The power-management is supported. | ||||
|      | ||||
|   Module snd-intel8x0m | ||||
| @ -966,7 +972,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | ||||
|     with machines with other (most likely CS423x or OPL3SAx) chips, | ||||
|     even though the device is detected in lspci.  In such a case, try | ||||
|     other drivers, e.g. snd-cs4232 or snd-opl3sa2.  Some has ISA-PnP | ||||
|     but some doesn't have ISA PnP.  You'll need to speicfy isapnp=0 | ||||
|     but some doesn't have ISA PnP.  You'll need to specify isapnp=0 | ||||
|     and proper hardware parameters in the case without ISA PnP. | ||||
| 
 | ||||
|     Note: some laptops need a workaround for AC97 RESET.  For the | ||||
| @ -1302,7 +1308,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | ||||
| 		  channels | ||||
| 		  [VIA8233/C, 8235, 8237 only] | ||||
|     ac97_quirk  - AC'97 workaround for strange hardware | ||||
|                   See the description of intel8x0 module for details. | ||||
| 		  See "AC97 Quirk Option" section below. | ||||
| 
 | ||||
|     Module supports autoprobe and multiple bus-master chips (max 8). | ||||
| 
 | ||||
| @ -1327,16 +1333,17 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | ||||
| 	  "lspci -nv"). | ||||
| 	  If dxs_support=5 does not work, try dxs_support=4; if it | ||||
| 	  doesn't work too, try dxs_support=1.  (dxs_support=1 is | ||||
| 	  usually for old motherboards.  The correct implementated | ||||
| 	  usually for old motherboards.  The correct implemented | ||||
| 	  board should work with 4 or 5.)  If it still doesn't | ||||
| 	  work and the default setting is ok, dxs_support=3 is the | ||||
| 	  right choice.  If the default setting doesn't work at all, | ||||
| 	  try dxs_support=2 to disable the DXS channels. | ||||
| 	  In any cases, please let us know the result and the | ||||
| 	  subsystem vendor/device ids. | ||||
| 	  subsystem vendor/device ids.  See "Links and Addresses" | ||||
| 	  below. | ||||
| 
 | ||||
|     Note: for the MPU401 on VIA823x, use snd-mpu401 driver | ||||
| 	  additonally.  The mpu_port option is for VIA686 chips only. | ||||
| 	  additionally.  The mpu_port option is for VIA686 chips only. | ||||
| 
 | ||||
|   Module snd-via82xx-modem | ||||
|   ------------------------ | ||||
| @ -1398,8 +1405,10 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | ||||
|     Module supports up to 8 cards.  The module is compiled only when | ||||
|     PCMCIA is supported on kernel. | ||||
| 
 | ||||
|     To activate the driver via the card manager, you'll need to set | ||||
|     up /etc/pcmcia/vxpocket.conf.  See the sound/pcmcia/vx/vxpocket.c. | ||||
|     With the older 2.6.x kernel, to activate the driver via the card | ||||
|     manager, you'll need to set up /etc/pcmcia/vxpocket.conf.  See the | ||||
|     sound/pcmcia/vx/vxpocket.c.  2.6.13 or later kernel requires no | ||||
|     longer require a config file. | ||||
| 
 | ||||
|     When the driver is compiled as a module and the hotplug firmware | ||||
|     is supported, the firmware data is loaded via hotplug automatically. | ||||
| @ -1411,6 +1420,9 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | ||||
| 
 | ||||
|     Note: the driver is build only when CONFIG_ISA is set. | ||||
|      | ||||
|     Note2: snd-vxp440 driver is merged to snd-vxpocket driver since | ||||
|            ALSA 1.0.10. | ||||
| 
 | ||||
|   Module snd-ymfpci | ||||
|   ----------------- | ||||
| 
 | ||||
| @ -1436,6 +1448,37 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | ||||
|     Note: the driver is build only when CONFIG_ISA is set. | ||||
| 
 | ||||
| 
 | ||||
| AC97 Quirk Option | ||||
| ================= | ||||
| 
 | ||||
| The ac97_quirk option is used to enable/override the workaround for | ||||
| specific devices on drivers for on-board AC'97 controllers like | ||||
| snd-intel8x0.  Some hardware have swapped output pins between Master | ||||
| and Headphone, or Surround (thanks to confusion of AC'97 | ||||
| specifications from version to version :-) | ||||
| 
 | ||||
| The driver provides the auto-detection of known problematic devices, | ||||
| but some might be unknown or wrongly detected.  In such a case, pass | ||||
| the proper value with this option. | ||||
| 
 | ||||
| The following strings are accepted: | ||||
|     - default	Don't override the default setting | ||||
|     - disable	Disable the quirk | ||||
|     - hp_only	Bind Master and Headphone controls as a single control | ||||
|     - swap_hp	Swap headphone and master controls | ||||
|     - swap_surround  Swap master and surround controls | ||||
|     - ad_sharing  For AD1985, turn on OMS bit and use headphone | ||||
|     - alc_jack	For ALC65x, turn on the jack sense mode | ||||
|     - inv_eapd	Inverted EAPD implementation | ||||
|     - mute_led	Bind EAPD bit for turning on/off mute LED | ||||
| 
 | ||||
| For backward compatibility, the corresponding integer value -1, 0, | ||||
| ... are  accepted, too. | ||||
| 
 | ||||
| For example, if "Master" volume control has no effect on your device | ||||
| but only "Headphone" does, pass ac97_quirk=hp_only module option. | ||||
| 
 | ||||
| 
 | ||||
| Configuring Non-ISAPNP Cards | ||||
| ============================ | ||||
| 
 | ||||
| @ -1553,6 +1596,8 @@ Proc interfaces (/proc/asound) | ||||
| 	  - whole-frag  write only whole fragments (optimization affecting | ||||
| 			playback only) | ||||
| 	  - no-silence  do not fill silence ahead to avoid clicks | ||||
| 	  - buggy-ptr	Returns the whitespace blocks in GETOPTR ioctl | ||||
| 			instead of filled blocks | ||||
| 
 | ||||
|   Example: echo "x11amp 128 16384" > /proc/asound/card0/pcm0p/oss | ||||
|            echo "squake 0 0 disable" > /proc/asound/card0/pcm0c/oss | ||||
| @ -1589,9 +1634,14 @@ commands to the snd-page-alloc driver: | ||||
|     use. | ||||
| 
 | ||||
| 
 | ||||
| Links | ||||
| ===== | ||||
| Links and Addresses | ||||
| =================== | ||||
| 
 | ||||
|   ALSA project homepage | ||||
|        http://www.alsa-project.org | ||||
| 
 | ||||
|   ALSA Bug Tracking System | ||||
|        https://bugtrack.alsa-project.org/bugs/ | ||||
| 
 | ||||
|   ALSA Developers ML | ||||
|        mailto:alsa-devel@lists.sourceforge.net | ||||
|  | ||||
| @ -447,7 +447,7 @@ | ||||
|           .... | ||||
| 
 | ||||
|           /* allocate a chip-specific data with zero filled */ | ||||
|           chip = kcalloc(1, sizeof(*chip), GFP_KERNEL); | ||||
|           chip = kzalloc(sizeof(*chip), GFP_KERNEL); | ||||
|           if (chip == NULL) | ||||
|                   return -ENOMEM; | ||||
| 
 | ||||
| @ -949,7 +949,7 @@ | ||||
|           After allocating a card instance via | ||||
|           <function>snd_card_new()</function> (with | ||||
|           <constant>NULL</constant> on the 4th arg), call | ||||
|           <function>kcalloc()</function>.  | ||||
|           <function>kzalloc()</function>.  | ||||
| 
 | ||||
|           <informalexample> | ||||
|             <programlisting> | ||||
| @ -958,7 +958,7 @@ | ||||
|   mychip_t *chip; | ||||
|   card = snd_card_new(index[dev], id[dev], THIS_MODULE, NULL); | ||||
|   ..... | ||||
|   chip = kcalloc(1, sizeof(*chip), GFP_KERNEL); | ||||
|   chip = kzalloc(sizeof(*chip), GFP_KERNEL); | ||||
| ]]> | ||||
|             </programlisting> | ||||
|           </informalexample> | ||||
| @ -1136,7 +1136,7 @@ | ||||
|                   return -ENXIO; | ||||
|           } | ||||
| 
 | ||||
|           chip = kcalloc(1, sizeof(*chip), GFP_KERNEL); | ||||
|           chip = kzalloc(sizeof(*chip), GFP_KERNEL); | ||||
|           if (chip == NULL) { | ||||
|                   pci_disable_device(pci); | ||||
|                   return -ENOMEM; | ||||
| @ -1292,7 +1292,7 @@ | ||||
|       need to initialize this number as -1 before actual allocation, | ||||
|       since irq 0 is valid. The port address and its resource pointer | ||||
|       can be initialized as null by | ||||
|       <function>kcalloc()</function> automatically, so you | ||||
|       <function>kzalloc()</function> automatically, so you | ||||
|       don't have to take care of resetting them.  | ||||
|       </para> | ||||
| 
 | ||||
|  | ||||
| @ -447,6 +447,10 @@ | ||||
| #define PCI_DEVICE_ID_CIRRUS_7542	0x1200 | ||||
| #define PCI_DEVICE_ID_CIRRUS_7543	0x1202 | ||||
| #define PCI_DEVICE_ID_CIRRUS_7541	0x1204 | ||||
| #define PCI_DEVICE_ID_CIRRUS_4610	0x6001 | ||||
| #define PCI_DEVICE_ID_CIRRUS_4612	0x6003 | ||||
| #define PCI_DEVICE_ID_CIRRUS_4615	0x6004 | ||||
| #define PCI_DEVICE_ID_CIRRUS_4281	0x6005 | ||||
| 
 | ||||
| #define PCI_VENDOR_ID_IBM		0x1014 | ||||
| #define PCI_DEVICE_ID_IBM_FIRE_CORAL	0x000a | ||||
| @ -682,7 +686,9 @@ | ||||
| #define PCI_DEVICE_ID_SI_6326		0x6326 | ||||
| #define PCI_DEVICE_ID_SI_7001		0x7001 | ||||
| #define PCI_DEVICE_ID_SI_7012		0x7012 | ||||
| #define PCI_DEVICE_ID_SI_7013		0x7013 | ||||
| #define PCI_DEVICE_ID_SI_7016		0x7016 | ||||
| #define PCI_DEVICE_ID_SI_7018		0x7018 | ||||
| 
 | ||||
| #define PCI_VENDOR_ID_HP		0x103c | ||||
| #define PCI_DEVICE_ID_HP_VISUALIZE_EG	0x1005 | ||||
| @ -993,6 +999,7 @@ | ||||
| #define PCI_DEVICE_ID_BROOKTREE_849A	0x0351 | ||||
| #define PCI_DEVICE_ID_BROOKTREE_878_1	0x036e | ||||
| #define PCI_DEVICE_ID_BROOKTREE_878	0x0878 | ||||
| #define PCI_DEVICE_ID_BROOKTREE_879	0x0879 | ||||
| #define PCI_DEVICE_ID_BROOKTREE_8474	0x8474 | ||||
| 
 | ||||
| #define PCI_VENDOR_ID_SIERRA		0x10a8 | ||||
| @ -1111,6 +1118,9 @@ | ||||
| #define PCI_DEVICE_ID_NEOMAGIC_MAGICGRAPH_NM2160 0x0004 | ||||
| #define PCI_DEVICE_ID_NEOMAGIC_MAGICMEDIA_256AV       0x0005 | ||||
| #define PCI_DEVICE_ID_NEOMAGIC_MAGICGRAPH_128ZVPLUS   0x0083 | ||||
| #define PCI_DEVICE_ID_NEOMAGIC_NM256AV_AUDIO 0x8005 | ||||
| #define PCI_DEVICE_ID_NEOMAGIC_NM256ZX_AUDIO 0x8006 | ||||
| #define PCI_DEVICE_ID_NEOMAGIC_NM256XL_PLUS_AUDIO 0x8016 | ||||
| 
 | ||||
| #define PCI_VENDOR_ID_ASP		0x10cd | ||||
| #define PCI_DEVICE_ID_ASP_ABP940	0x1200 | ||||
| @ -1157,10 +1167,13 @@ | ||||
| #define PCI_DEVICE_ID_NVIDIA_NFORCE2_SMBUS	0x0064 | ||||
| #define PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE	0x0065 | ||||
| #define PCI_DEVICE_ID_NVIDIA_NVENET_2		0x0066 | ||||
| #define PCI_DEVICE_ID_NVIDIA_MCP2_MODEM		0x0069 | ||||
| #define PCI_DEVICE_ID_NVIDIA_MCP2_AUDIO		0x006a | ||||
| #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SMBUS	0x0084 | ||||
| #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE	0x0085 | ||||
| #define PCI_DEVICE_ID_NVIDIA_NVENET_4		0x0086 | ||||
| #define PCI_DEVICE_ID_NVIDIA_MCP2S_MODEM	0x0089 | ||||
| #define PCI_DEVICE_ID_NVIDIA_CK8_AUDIO		0x008a | ||||
| #define PCI_DEVICE_ID_NVIDIA_NVENET_5		0x008c | ||||
| #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA	0x008e | ||||
| #define PCI_DEVICE_ID_NVIDIA_ITNT2		0x00A0 | ||||
| @ -1175,6 +1188,7 @@ | ||||
| #define PCI_DEVICE_ID_NVIDIA_NFORCE3_SMBUS	0x00d4 | ||||
| #define PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE	0x00d5 | ||||
| #define PCI_DEVICE_ID_NVIDIA_NVENET_3		0x00d6 | ||||
| #define PCI_DEVICE_ID_NVIDIA_MCP3_MODEM		0x00d9 | ||||
| #define PCI_DEVICE_ID_NVIDIA_MCP3_AUDIO		0x00da | ||||
| #define PCI_DEVICE_ID_NVIDIA_NVENET_7		0x00df | ||||
| #define PCI_DEVICE_ID_NVIDIA_NFORCE3S		0x00e1 | ||||
| @ -1182,6 +1196,7 @@ | ||||
| #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SMBUS	0x00e4 | ||||
| #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE	0x00e5 | ||||
| #define PCI_DEVICE_ID_NVIDIA_NVENET_6		0x00e6 | ||||
| #define PCI_DEVICE_ID_NVIDIA_CK8S_AUDIO		0x00ea | ||||
| #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2	0x00ee | ||||
| #define PCI_DEVICE_ID_NVIDIA_GEFORCE_SDR	0x0100 | ||||
| #define PCI_DEVICE_ID_NVIDIA_GEFORCE_DDR	0x0101 | ||||
| @ -1232,6 +1247,7 @@ | ||||
| #define PCI_DEVICE_ID_NVIDIA_MCP1_AUDIO		0x01b1 | ||||
| #define PCI_DEVICE_ID_NVIDIA_NFORCE_SMBUS	0x01b4 | ||||
| #define PCI_DEVICE_ID_NVIDIA_NFORCE_IDE		0x01bc | ||||
| #define PCI_DEVICE_ID_NVIDIA_MCP1_MODEM		0x01c1 | ||||
| #define PCI_DEVICE_ID_NVIDIA_NVENET_1		0x01c3 | ||||
| #define PCI_DEVICE_ID_NVIDIA_NFORCE2		0x01e0 | ||||
| #define PCI_DEVICE_ID_NVIDIA_GEFORCE3		0x0200 | ||||
| @ -1336,6 +1352,13 @@ | ||||
| #define PCI_DEVICE_ID_REALTEK_8169	0x8169 | ||||
| 
 | ||||
| #define PCI_VENDOR_ID_XILINX		0x10ee | ||||
| #define PCI_DEVICE_ID_RME_DIGI96	0x3fc0 | ||||
| #define PCI_DEVICE_ID_RME_DIGI96_8	0x3fc1 | ||||
| #define PCI_DEVICE_ID_RME_DIGI96_8_PRO	0x3fc2 | ||||
| #define PCI_DEVICE_IDRME__DIGI96_8_PAD_OR_PST 0x3fc3 | ||||
| #define PCI_DEVICE_ID_XILINX_HAMMERFALL	0x3fc4 | ||||
| #define PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP 0x3fc5 | ||||
| #define PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP_MADI 0x3fc6 | ||||
| #define PCI_DEVICE_ID_TURBOPAM		0x4020 | ||||
| 
 | ||||
| #define PCI_VENDOR_ID_TRUEVISION	0x10fa | ||||
| @ -1811,6 +1834,14 @@ | ||||
| #define PCI_DEVICE_ID_ESS_ESS1968	0x1968 | ||||
| #define PCI_DEVICE_ID_ESS_AUDIOPCI	0x1969 | ||||
| #define PCI_DEVICE_ID_ESS_ESS1978	0x1978 | ||||
| #define PCI_DEVICE_ID_ESS_ALLEGRO_1	0x1988 | ||||
| #define PCI_DEVICE_ID_ESS_ALLEGRO	0x1989 | ||||
| #define PCI_DEVICE_ID_ESS_CANYON3D_2LE	0x1990 | ||||
| #define PCI_DEVICE_ID_ESS_CANYON3D_2	0x1992 | ||||
| #define PCI_DEVICE_ID_ESS_MAESTRO3	0x1998 | ||||
| #define PCI_DEVICE_ID_ESS_MAESTRO3_1	0x1999 | ||||
| #define PCI_DEVICE_ID_ESS_MAESTRO3_HW	0x199a | ||||
| #define PCI_DEVICE_ID_ESS_MAESTRO3_2	0x199b | ||||
| 
 | ||||
| #define PCI_VENDOR_ID_SATSAGEM		0x1267 | ||||
| #define PCI_DEVICE_ID_SATSAGEM_NICCY	0x1016 | ||||
| @ -1970,6 +2001,9 @@ | ||||
| #define PCI_DEVICE_ID_LMC_SSI		0x0005 | ||||
| #define PCI_DEVICE_ID_LMC_T1		0x0006 | ||||
| 
 | ||||
| #define PCI_VENDOR_ID_MARIAN		0x1382 | ||||
| #define PCI_DEVICE_ID_MARIAN_PRODIF_PLUS 0x2048 | ||||
| 
 | ||||
| #define PCI_VENDOR_ID_NETGEAR		0x1385 | ||||
| #define PCI_DEVICE_ID_NETGEAR_GA620	0x620a | ||||
| #define PCI_DEVICE_ID_NETGEAR_GA622	0x622a | ||||
| @ -2058,6 +2092,10 @@ | ||||
| #define PCI_VENDOR_ID_TIMEDIA		0x1409 | ||||
| #define PCI_DEVICE_ID_TIMEDIA_1889	0x7168 | ||||
| 
 | ||||
| #define PCI_VENDOR_ID_ICE		0x1412 | ||||
| #define PCI_DEVICE_ID_ICE_1712		0x1712 | ||||
| #define PCI_DEVICE_ID_VT1724		0x1724 | ||||
| 
 | ||||
| #define PCI_VENDOR_ID_OXSEMI		0x1415 | ||||
| #define PCI_DEVICE_ID_OXSEMI_12PCI840	0x8403 | ||||
| #define PCI_DEVICE_ID_OXSEMI_16PCI954	0x9501 | ||||
| @ -2538,6 +2576,7 @@ | ||||
| #define PCI_DEVICE_ID_INTEL_82443BX_1	0x7191 | ||||
| #define PCI_DEVICE_ID_INTEL_82443BX_2	0x7192 | ||||
| #define PCI_DEVICE_ID_INTEL_440MX	0x7195 | ||||
| #define PCI_DEVICE_ID_INTEL_440MX_6	0x7196 | ||||
| #define PCI_DEVICE_ID_INTEL_82443MX_0	0x7198 | ||||
| #define PCI_DEVICE_ID_INTEL_82443MX_1	0x7199 | ||||
| #define PCI_DEVICE_ID_INTEL_82443MX_2	0x719a | ||||
| @ -2644,6 +2683,11 @@ | ||||
| #define PCI_VENDOR_ID_TTTECH		0x0357 | ||||
| #define PCI_DEVICE_ID_TTTECH_MC322	0x000A | ||||
| 
 | ||||
| #define PCI_VENDOR_ID_XILINX_RME	0xea60 | ||||
| #define PCI_DEVICE_ID_RME_DIGI32	0x9896 | ||||
| #define PCI_DEVICE_ID_RME_DIGI32_PRO	0x9897 | ||||
| #define PCI_DEVICE_ID_RME_DIGI32_8	0x9898 | ||||
| 
 | ||||
| #define PCI_VENDOR_ID_ARK		0xedd8 | ||||
| #define PCI_DEVICE_ID_ARK_STING		0xa091 | ||||
| #define PCI_DEVICE_ID_ARK_STINGARK	0xa099 | ||||
|  | ||||
| @ -168,6 +168,9 @@ struct _snd_card { | ||||
| 	wait_queue_head_t shutdown_sleep; | ||||
| 	struct work_struct free_workq;	/* for free in workqueue */ | ||||
| 	struct device *dev; | ||||
| #ifdef CONFIG_SND_GENERIC_DRIVER | ||||
| 	struct snd_generic_device *generic_dev; | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_PM | ||||
| 	int (*pm_suspend)(snd_card_t *card, pm_message_t state); | ||||
| @ -176,9 +179,6 @@ struct _snd_card { | ||||
| 	unsigned int power_state;	/* power state */ | ||||
| 	struct semaphore power_lock;	/* power lock */ | ||||
| 	wait_queue_head_t power_sleep; | ||||
| #ifdef CONFIG_SND_GENERIC_PM | ||||
| 	struct snd_generic_device *pm_dev;	/* for ISA */ | ||||
| #endif | ||||
| #endif | ||||
| 
 | ||||
| #if defined(CONFIG_SND_MIXER_OSS) || defined(CONFIG_SND_MIXER_OSS_MODULE) | ||||
| @ -348,6 +348,8 @@ int snd_card_file_remove(snd_card_t *card, struct file *file); | ||||
| #ifndef snd_card_set_dev | ||||
| #define snd_card_set_dev(card,devptr) ((card)->dev = (devptr)) | ||||
| #endif | ||||
| /* register a generic device (for ISA, etc) */ | ||||
| int snd_card_set_generic_dev(snd_card_t *card); | ||||
| 
 | ||||
| /* device.c */ | ||||
| 
 | ||||
|  | ||||
| @ -29,19 +29,6 @@ | ||||
| #include "ac97_codec.h" | ||||
| #include "cs46xx_dsp_spos.h" | ||||
| 
 | ||||
| #ifndef PCI_VENDOR_ID_CIRRUS | ||||
| #define PCI_VENDOR_ID_CIRRUS            0x1013 | ||||
| #endif | ||||
| #ifndef PCI_DEVICE_ID_CIRRUS_4610 | ||||
| #define PCI_DEVICE_ID_CIRRUS_4610       0x6001 | ||||
| #endif | ||||
| #ifndef PCI_DEVICE_ID_CIRRUS_4612 | ||||
| #define PCI_DEVICE_ID_CIRRUS_4612       0x6003 | ||||
| #endif | ||||
| #ifndef PCI_DEVICE_ID_CIRRUS_4615 | ||||
| #define PCI_DEVICE_ID_CIRRUS_4615       0x6004 | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  *  Direct registers | ||||
|  */ | ||||
| @ -1715,7 +1702,6 @@ struct _snd_cs46xx { | ||||
| 	void (*active_ctrl)(cs46xx_t *, int); | ||||
|   	void (*mixer_init)(cs46xx_t *); | ||||
| 
 | ||||
| 	struct pci_dev *acpi_dev; | ||||
| 	int acpi_port; | ||||
| 	snd_kcontrol_t *eapd_switch; /* for amplifier hack */ | ||||
| 	int accept_valid;	/* accept mmap valid (for OSS) */ | ||||
|  | ||||
| @ -35,13 +35,6 @@ | ||||
| #include <linux/interrupt.h> | ||||
| #include <asm/io.h> | ||||
| 
 | ||||
| #ifndef PCI_VENDOR_ID_CREATIVE | ||||
| #define PCI_VENDOR_ID_CREATIVE		0x1102 | ||||
| #endif | ||||
| #ifndef PCI_DEVICE_ID_CREATIVE_EMU10K1 | ||||
| #define PCI_DEVICE_ID_CREATIVE_EMU10K1	0x0002 | ||||
| #endif | ||||
| 
 | ||||
| /* ------------------- DEFINES -------------------- */ | ||||
| 
 | ||||
| #define EMUPAGESIZE     4096 | ||||
|  | ||||
| @ -903,13 +903,16 @@ int snd_pcm_format_unsigned(snd_pcm_format_t format); | ||||
| int snd_pcm_format_linear(snd_pcm_format_t format); | ||||
| int snd_pcm_format_little_endian(snd_pcm_format_t format); | ||||
| int snd_pcm_format_big_endian(snd_pcm_format_t format); | ||||
| /*
 | ||||
| #if 0 /* just for DocBook */
 | ||||
| /**
 | ||||
|  * snd_pcm_format_cpu_endian - Check the PCM format is CPU-endian | ||||
|  * @format: the format to check | ||||
|  * | ||||
|  * Returns 1 if the given PCM format is CPU-endian, 0 if | ||||
|  * opposite, or a negative error code if endian not specified. | ||||
|  */ | ||||
| int snd_pcm_format_cpu_endian(snd_pcm_format_t format); | ||||
| #endif /* DocBook */ | ||||
| #ifdef SNDRV_LITTLE_ENDIAN | ||||
| #define snd_pcm_format_cpu_endian(format) snd_pcm_format_little_endian(format) | ||||
| #else | ||||
|  | ||||
| @ -32,7 +32,8 @@ struct _snd_pcm_oss_setup { | ||||
| 		     block:1, | ||||
| 		     nonblock:1, | ||||
| 		     partialfrag:1, | ||||
| 		     nosilence:1; | ||||
| 		     nosilence:1, | ||||
| 		     buggyptr:1; | ||||
| 	unsigned int periods; | ||||
| 	unsigned int period_size; | ||||
| 	snd_pcm_oss_setup_t *next; | ||||
|  | ||||
| @ -33,23 +33,6 @@ | ||||
| //#include "ainstr_gf1.h"
 | ||||
| #include "ainstr_simple.h" | ||||
| 
 | ||||
| #ifndef PCI_VENDOR_ID_TRIDENT | ||||
| #define PCI_VENDOR_ID_TRIDENT		0x1023 | ||||
| #endif | ||||
| #ifndef PCI_DEVICE_ID_TRIDENT_4DWAVE_DX  | ||||
| #define PCI_DEVICE_ID_TRIDENT_4DWAVE_DX	0x2000 | ||||
| #endif | ||||
| #ifndef PCI_DEVICE_ID_TRIDENT_4DWAVE_NX  | ||||
| #define PCI_DEVICE_ID_TRIDENT_4DWAVE_NX	0x2001 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef PCI_VENDOR_ID_SI | ||||
| #define PCI_VENDOR_ID_SI		0x1039 | ||||
| #endif | ||||
| #ifndef PCI_DEVICE_ID_SI_7018 | ||||
| #define PCI_DEVICE_ID_SI_7018		0x7018 | ||||
| #endif | ||||
| 
 | ||||
| #define TRIDENT_DEVICE_ID_DX		((PCI_VENDOR_ID_TRIDENT<<16)|PCI_DEVICE_ID_TRIDENT_4DWAVE_DX) | ||||
| #define TRIDENT_DEVICE_ID_NX		((PCI_VENDOR_ID_TRIDENT<<16)|PCI_DEVICE_ID_TRIDENT_4DWAVE_NX) | ||||
| #define TRIDENT_DEVICE_ID_SI7018	((PCI_VENDOR_ID_SI<<16)|PCI_DEVICE_ID_SI_7018) | ||||
|  | ||||
| @ -1,3 +1,3 @@ | ||||
| /* include/version.h.  Generated by configure.  */ | ||||
| #define CONFIG_SND_VERSION "1.0.10rc1" | ||||
| #define CONFIG_SND_DATE " (Tue Aug 30 05:31:08 2005 UTC)" | ||||
| #define CONFIG_SND_DATE " (Mon Sep 12 08:13:09 2005 UTC)" | ||||
|  | ||||
| @ -28,28 +28,6 @@ | ||||
| #include "timer.h" | ||||
| #include <linux/gameport.h> | ||||
| 
 | ||||
| #ifndef PCI_VENDOR_ID_YAMAHA | ||||
| #define PCI_VENDOR_ID_YAMAHA            0x1073 | ||||
| #endif | ||||
| #ifndef PCI_DEVICE_ID_YAMAHA_724 | ||||
| #define PCI_DEVICE_ID_YAMAHA_724	0x0004 | ||||
| #endif | ||||
| #ifndef PCI_DEVICE_ID_YAMAHA_724F | ||||
| #define PCI_DEVICE_ID_YAMAHA_724F	0x000d | ||||
| #endif | ||||
| #ifndef PCI_DEVICE_ID_YAMAHA_740 | ||||
| #define PCI_DEVICE_ID_YAMAHA_740	0x000a | ||||
| #endif | ||||
| #ifndef PCI_DEVICE_ID_YAMAHA_740C | ||||
| #define PCI_DEVICE_ID_YAMAHA_740C	0x000c | ||||
| #endif | ||||
| #ifndef PCI_DEVICE_ID_YAMAHA_744 | ||||
| #define PCI_DEVICE_ID_YAMAHA_744	0x0010 | ||||
| #endif | ||||
| #ifndef PCI_DEVICE_ID_YAMAHA_754 | ||||
| #define PCI_DEVICE_ID_YAMAHA_754	0x0012 | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  *  Direct registers | ||||
|  */ | ||||
|  | ||||
| @ -7,6 +7,7 @@ config SND_SA11XX_UDA1341 | ||||
| 	tristate "SA11xx UDA1341TS driver (iPaq H3600)" | ||||
| 	depends on ARCH_SA1100 && SND && L3 | ||||
| 	select SND_PCM | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 	help | ||||
| 	  Say Y here if you have a Compaq iPaq H3x00 handheld computer | ||||
| 	  and want to use its Philips UDA 1341 audio chip. | ||||
|  | ||||
| @ -900,6 +900,8 @@ static int __devinit aaci_probe(struct amba_device *dev, void *id) | ||||
| 	if (ret) | ||||
| 		goto out; | ||||
| 
 | ||||
| 	snd_card_set_dev(aaci->card, &dev->dev); | ||||
| 
 | ||||
| 	ret = snd_card_register(aaci->card); | ||||
| 	if (ret == 0) { | ||||
| 		dev_info(&dev->dev, "%s, fifo %d\n", aaci->card->longname, | ||||
|  | ||||
| @ -21,7 +21,7 @@ | ||||
|  *                              merged HAL layer (patches from Brian) | ||||
|  */ | ||||
| 
 | ||||
| /* $Id: sa11xx-uda1341.c,v 1.21 2005/01/28 19:34:04 tiwai Exp $ */ | ||||
| /* $Id: sa11xx-uda1341.c,v 1.23 2005/09/09 13:22:34 tiwai Exp $ */ | ||||
| 
 | ||||
| /***************************************************************************************************
 | ||||
| * | ||||
| @ -918,7 +918,7 @@ static int __init sa11xx_uda1341_init(void) | ||||
| 	if (card == NULL) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
| 	sa11xx_uda1341 = kcalloc(1, sizeof(*sa11xx_uda1341), GFP_KERNEL); | ||||
| 	sa11xx_uda1341 = kzalloc(sizeof(*sa11xx_uda1341), GFP_KERNEL); | ||||
| 	if (sa11xx_uda1341 == NULL) | ||||
| 		return -ENOMEM;	 | ||||
| 	spin_lock_init(&chip->s[0].dma_lock); | ||||
| @ -946,6 +946,9 @@ static int __init sa11xx_uda1341_init(void) | ||||
| 	strcpy(card->shortname, "H3600 UDA1341TS"); | ||||
| 	sprintf(card->longname, "Compaq iPAQ H3600 with Philips UDA1341TS"); | ||||
|          | ||||
| 	if ((err = snd_card_set_generic_dev(card)) < 0) | ||||
| 		goto nodev; | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) == 0) { | ||||
| 		printk( KERN_INFO "iPAQ audio support initialized\n" ); | ||||
| 		return 0; | ||||
|  | ||||
| @ -99,6 +99,18 @@ config SND_RTCTIMER | ||||
| 	  To compile this driver as a module, choose M here: the module | ||||
| 	  will be called snd-rtctimer. | ||||
| 
 | ||||
| config SND_SEQ_RTCTIMER_DEFAULT | ||||
| 	bool "Use RTC as default sequencer timer" | ||||
| 	depends on SND_RTCTIMER && SND_SEQUENCER | ||||
| 	default y | ||||
| 	help | ||||
| 	  Say Y here to use the RTC timer as the default sequencer | ||||
| 	  timer.  This is strongly recommended because it ensures | ||||
| 	  precise MIDI timing even when the system timer runs at less | ||||
| 	  than 1000 Hz. | ||||
| 
 | ||||
| 	  If in doubt, say Y. | ||||
| 
 | ||||
| config SND_VERBOSE_PRINTK | ||||
| 	bool "Verbose printk" | ||||
| 	depends on SND | ||||
| @ -128,6 +140,6 @@ config SND_DEBUG_DETECT | ||||
| 	  Say Y here to enable extra-verbose log messages printed when | ||||
| 	  detecting devices. | ||||
| 
 | ||||
| config SND_GENERIC_PM | ||||
| config SND_GENERIC_DRIVER | ||||
| 	bool | ||||
| 	depends on SND | ||||
|  | ||||
| @ -69,7 +69,7 @@ static int snd_ctl_open(struct inode *inode, struct file *file) | ||||
| 		err = -EFAULT; | ||||
| 		goto __error2; | ||||
| 	} | ||||
| 	ctl = kcalloc(1, sizeof(*ctl), GFP_KERNEL); | ||||
| 	ctl = kzalloc(sizeof(*ctl), GFP_KERNEL); | ||||
| 	if (ctl == NULL) { | ||||
| 		err = -ENOMEM; | ||||
| 		goto __error; | ||||
| @ -162,7 +162,7 @@ void snd_ctl_notify(snd_card_t *card, unsigned int mask, snd_ctl_elem_id_t *id) | ||||
| 				goto _found; | ||||
| 			} | ||||
| 		} | ||||
| 		ev = kcalloc(1, sizeof(*ev), GFP_ATOMIC); | ||||
| 		ev = kzalloc(sizeof(*ev), GFP_ATOMIC); | ||||
| 		if (ev) { | ||||
| 			ev->id = *id; | ||||
| 			ev->mask = mask; | ||||
| @ -195,7 +195,7 @@ snd_kcontrol_t *snd_ctl_new(snd_kcontrol_t * control, unsigned int access) | ||||
| 	 | ||||
| 	snd_runtime_check(control != NULL, return NULL); | ||||
| 	snd_runtime_check(control->count > 0, return NULL); | ||||
| 	kctl = kcalloc(1, sizeof(*kctl) + sizeof(snd_kcontrol_volatile_t) * control->count, GFP_KERNEL); | ||||
| 	kctl = kzalloc(sizeof(*kctl) + sizeof(snd_kcontrol_volatile_t) * control->count, GFP_KERNEL); | ||||
| 	if (kctl == NULL) | ||||
| 		return NULL; | ||||
| 	*kctl = *control; | ||||
| @ -521,7 +521,7 @@ static int snd_ctl_card_info(snd_card_t * card, snd_ctl_file_t * ctl, | ||||
| { | ||||
| 	snd_ctl_card_info_t *info; | ||||
| 
 | ||||
| 	info = kcalloc(1, sizeof(*info), GFP_KERNEL); | ||||
| 	info = kzalloc(sizeof(*info), GFP_KERNEL); | ||||
| 	if (! info) | ||||
| 		return -ENOMEM; | ||||
| 	down_read(&snd_ioctl_rwsem); | ||||
| @ -929,7 +929,7 @@ static int snd_ctl_elem_add(snd_ctl_file_t *file, snd_ctl_elem_info_t *info, int | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
| 	private_size *= info->count; | ||||
| 	ue = kcalloc(1, sizeof(struct user_element) + private_size, GFP_KERNEL); | ||||
| 	ue = kzalloc(sizeof(struct user_element) + private_size, GFP_KERNEL); | ||||
| 	if (ue == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	ue->info = *info; | ||||
| @ -1185,7 +1185,7 @@ static int _snd_ctl_register_ioctl(snd_kctl_ioctl_func_t fcn, struct list_head * | ||||
| { | ||||
| 	snd_kctl_ioctl_t *pn; | ||||
| 
 | ||||
| 	pn = kcalloc(1, sizeof(snd_kctl_ioctl_t), GFP_KERNEL); | ||||
| 	pn = kzalloc(sizeof(snd_kctl_ioctl_t), GFP_KERNEL); | ||||
| 	if (pn == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	pn->fioctl = fcn; | ||||
|  | ||||
| @ -92,7 +92,7 @@ static int snd_ctl_elem_info_compat(snd_ctl_file_t *ctl, struct sndrv_ctl_elem_i | ||||
| 	struct sndrv_ctl_elem_info *data; | ||||
| 	int err; | ||||
| 
 | ||||
| 	data = kcalloc(1, sizeof(*data), GFP_KERNEL); | ||||
| 	data = kzalloc(sizeof(*data), GFP_KERNEL); | ||||
| 	if (! data) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
| @ -271,7 +271,7 @@ static int snd_ctl_elem_read_user_compat(snd_card_t *card, | ||||
| 	struct sndrv_ctl_elem_value *data; | ||||
| 	int err, type, count; | ||||
| 
 | ||||
| 	data = kcalloc(1, sizeof(*data), GFP_KERNEL); | ||||
| 	data = kzalloc(sizeof(*data), GFP_KERNEL); | ||||
| 	if (data == NULL) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
| @ -291,7 +291,7 @@ static int snd_ctl_elem_write_user_compat(snd_ctl_file_t *file, | ||||
| 	struct sndrv_ctl_elem_value *data; | ||||
| 	int err, type, count; | ||||
| 
 | ||||
| 	data = kcalloc(1, sizeof(*data), GFP_KERNEL); | ||||
| 	data = kzalloc(sizeof(*data), GFP_KERNEL); | ||||
| 	if (data == NULL) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
| @ -313,7 +313,7 @@ static int snd_ctl_elem_add_compat(snd_ctl_file_t *file, | ||||
| 	struct sndrv_ctl_elem_info *data; | ||||
| 	int err; | ||||
| 
 | ||||
| 	data = kcalloc(1, sizeof(*data), GFP_KERNEL); | ||||
| 	data = kzalloc(sizeof(*data), GFP_KERNEL); | ||||
| 	if (! data) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
|  | ||||
| @ -49,7 +49,7 @@ int snd_device_new(snd_card_t *card, snd_device_type_t type, | ||||
| 	snd_assert(card != NULL, return -ENXIO); | ||||
| 	snd_assert(device_data != NULL, return -ENXIO); | ||||
| 	snd_assert(ops != NULL, return -ENXIO); | ||||
| 	dev = kcalloc(1, sizeof(*dev), GFP_KERNEL); | ||||
| 	dev = kzalloc(sizeof(*dev), GFP_KERNEL); | ||||
| 	if (dev == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	dev->card = card; | ||||
|  | ||||
| @ -359,7 +359,7 @@ int snd_hwdep_new(snd_card_t * card, char *id, int device, snd_hwdep_t ** rhwdep | ||||
| 	snd_assert(rhwdep != NULL, return -EINVAL); | ||||
| 	*rhwdep = NULL; | ||||
| 	snd_assert(card != NULL, return -ENXIO); | ||||
| 	hwdep = kcalloc(1, sizeof(*hwdep), GFP_KERNEL); | ||||
| 	hwdep = kzalloc(sizeof(*hwdep), GFP_KERNEL); | ||||
| 	if (hwdep == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	hwdep->card = card; | ||||
|  | ||||
| @ -295,7 +295,7 @@ static int snd_info_entry_open(struct inode *inode, struct file *file) | ||||
| 		    	goto __error; | ||||
| 		} | ||||
| 	} | ||||
| 	data = kcalloc(1, sizeof(*data), GFP_KERNEL); | ||||
| 	data = kzalloc(sizeof(*data), GFP_KERNEL); | ||||
| 	if (data == NULL) { | ||||
| 		err = -ENOMEM; | ||||
| 		goto __error; | ||||
| @ -304,7 +304,7 @@ static int snd_info_entry_open(struct inode *inode, struct file *file) | ||||
| 	switch (entry->content) { | ||||
| 	case SNDRV_INFO_CONTENT_TEXT: | ||||
| 		if (mode == O_RDONLY || mode == O_RDWR) { | ||||
| 			buffer = kcalloc(1, sizeof(*buffer), GFP_KERNEL); | ||||
| 			buffer = kzalloc(sizeof(*buffer), GFP_KERNEL); | ||||
| 			if (buffer == NULL) { | ||||
| 				kfree(data); | ||||
| 				err = -ENOMEM; | ||||
| @ -323,7 +323,7 @@ static int snd_info_entry_open(struct inode *inode, struct file *file) | ||||
| 			data->rbuffer = buffer; | ||||
| 		} | ||||
| 		if (mode == O_WRONLY || mode == O_RDWR) { | ||||
| 			buffer = kcalloc(1, sizeof(*buffer), GFP_KERNEL); | ||||
| 			buffer = kzalloc(sizeof(*buffer), GFP_KERNEL); | ||||
| 			if (buffer == NULL) { | ||||
| 				if (mode == O_RDWR) { | ||||
| 					vfree(data->rbuffer->buffer); | ||||
| @ -752,7 +752,7 @@ char *snd_info_get_str(char *dest, char *src, int len) | ||||
| static snd_info_entry_t *snd_info_create_entry(const char *name) | ||||
| { | ||||
| 	snd_info_entry_t *entry; | ||||
| 	entry = kcalloc(1, sizeof(*entry), GFP_KERNEL); | ||||
| 	entry = kzalloc(sizeof(*entry), GFP_KERNEL); | ||||
| 	if (entry == NULL) | ||||
| 		return NULL; | ||||
| 	entry->name = kstrdup(name, GFP_KERNEL); | ||||
|  | ||||
| @ -72,7 +72,7 @@ snd_card_t *snd_card_new(int idx, const char *xid, | ||||
| 
 | ||||
| 	if (extra_size < 0) | ||||
| 		extra_size = 0; | ||||
| 	card = kcalloc(1, sizeof(*card) + extra_size, GFP_KERNEL); | ||||
| 	card = kzalloc(sizeof(*card) + extra_size, GFP_KERNEL); | ||||
| 	if (card == NULL) | ||||
| 		return NULL; | ||||
| 	if (xid) { | ||||
| @ -226,8 +226,10 @@ int snd_card_disconnect(snd_card_t * card) | ||||
| 	return 0;	 | ||||
| } | ||||
| 
 | ||||
| #if defined(CONFIG_PM) && defined(CONFIG_SND_GENERIC_PM) | ||||
| static void snd_generic_device_unregister(struct snd_generic_device *dev); | ||||
| #ifdef CONFIG_SND_GENERIC_DRIVER | ||||
| static void snd_generic_device_unregister(snd_card_t *card); | ||||
| #else | ||||
| #define snd_generic_device_unregister(x) /*NOP*/ | ||||
| #endif | ||||
| 
 | ||||
| /**
 | ||||
| @ -253,14 +255,7 @@ int snd_card_free(snd_card_t * card) | ||||
| 
 | ||||
| #ifdef CONFIG_PM | ||||
| 	wake_up(&card->power_sleep); | ||||
| #ifdef CONFIG_SND_GENERIC_PM | ||||
| 	if (card->pm_dev) { | ||||
| 		snd_generic_device_unregister(card->pm_dev); | ||||
| 		card->pm_dev = NULL; | ||||
| 	} | ||||
| #endif | ||||
| #endif | ||||
| 
 | ||||
| 	/* wait, until all devices are ready for the free operation */ | ||||
| 	wait_event(card->shutdown_sleep, card->files == NULL); | ||||
| 
 | ||||
| @ -288,6 +283,7 @@ int snd_card_free(snd_card_t * card) | ||||
| 		snd_printk(KERN_WARNING "unable to free card info\n"); | ||||
| 		/* Not fatal error */ | ||||
| 	} | ||||
| 	snd_generic_device_unregister(card); | ||||
| 	while (card->s_f_ops) { | ||||
| 		s_f_ops = card->s_f_ops; | ||||
| 		card->s_f_ops = s_f_ops->next; | ||||
| @ -665,6 +661,96 @@ int snd_card_file_remove(snd_card_t *card, struct file *file) | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_SND_GENERIC_DRIVER | ||||
| /*
 | ||||
|  * generic device without a proper bus using platform_device | ||||
|  * (e.g. ISA) | ||||
|  */ | ||||
| struct snd_generic_device { | ||||
| 	struct platform_device pdev; | ||||
| 	snd_card_t *card; | ||||
| }; | ||||
| 
 | ||||
| #define get_snd_generic_card(dev)	container_of(to_platform_device(dev), struct snd_generic_device, pdev)->card | ||||
| 
 | ||||
| #define SND_GENERIC_NAME	"snd_generic" | ||||
| 
 | ||||
| #ifdef CONFIG_PM | ||||
| static int snd_generic_suspend(struct device *dev, pm_message_t state, u32 level); | ||||
| static int snd_generic_resume(struct device *dev, u32 level); | ||||
| #endif | ||||
| 
 | ||||
| /* initialized in sound.c */ | ||||
| struct device_driver snd_generic_driver = { | ||||
| 	.name		= SND_GENERIC_NAME, | ||||
| 	.bus		= &platform_bus_type, | ||||
| #ifdef CONFIG_PM | ||||
| 	.suspend	= snd_generic_suspend, | ||||
| 	.resume		= snd_generic_resume, | ||||
| #endif | ||||
| }; | ||||
| 
 | ||||
| void snd_generic_device_release(struct device *dev) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| static int snd_generic_device_register(snd_card_t *card) | ||||
| { | ||||
| 	struct snd_generic_device *dev; | ||||
| 	int err; | ||||
| 
 | ||||
| 	if (card->generic_dev) | ||||
| 		return 0; /* already registered */ | ||||
| 
 | ||||
| 	dev = kzalloc(sizeof(*dev), GFP_KERNEL); | ||||
| 	if (! dev) { | ||||
| 		snd_printk(KERN_ERR "can't allocate generic_device\n"); | ||||
| 		return -ENOMEM; | ||||
| 	} | ||||
| 
 | ||||
| 	dev->pdev.name = SND_GENERIC_NAME; | ||||
| 	dev->pdev.id = card->number; | ||||
| 	dev->pdev.dev.release = snd_generic_device_release; | ||||
| 	dev->card = card; | ||||
| 	if ((err = platform_device_register(&dev->pdev)) < 0) { | ||||
| 		kfree(dev); | ||||
| 		return err; | ||||
| 	} | ||||
| 	card->generic_dev = dev; | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static void snd_generic_device_unregister(snd_card_t *card) | ||||
| { | ||||
| 	struct snd_generic_device *dev = card->generic_dev; | ||||
| 	if (dev) { | ||||
| 		platform_device_unregister(&dev->pdev); | ||||
| 		kfree(dev); | ||||
| 		card->generic_dev = NULL; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_card_set_generic_dev - assign the generic device to the card | ||||
|  * @card: soundcard structure | ||||
|  * | ||||
|  * Assigns a generic device to the card.  This function is provided as the | ||||
|  * last resort, for devices without any proper bus.  Thus this won't override | ||||
|  * the device already assigned to the card. | ||||
|  *  | ||||
|  * Returns zero if successful, or a negative error code. | ||||
|  */ | ||||
| int snd_card_set_generic_dev(snd_card_t *card) | ||||
| { | ||||
| 	int err; | ||||
| 	if ((err = snd_generic_device_register(card)) < 0) | ||||
| 		return err; | ||||
| 	if (! card->dev) | ||||
| 		snd_card_set_dev(card, &card->generic_dev->pdev.dev); | ||||
| 	return 0; | ||||
| } | ||||
| #endif /* CONFIG_SND_GENERIC_DRIVER */ | ||||
| 
 | ||||
| #ifdef CONFIG_PM | ||||
| /**
 | ||||
|  *  snd_power_wait - wait until the power-state is changed. | ||||
| @ -730,75 +816,7 @@ int snd_card_set_pm_callback(snd_card_t *card, | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_SND_GENERIC_PM | ||||
| /*
 | ||||
|  * use platform_device for generic power-management without a proper bus | ||||
|  * (e.g. ISA) | ||||
|  */ | ||||
| struct snd_generic_device { | ||||
| 	struct platform_device pdev; | ||||
| 	snd_card_t *card; | ||||
| }; | ||||
| 
 | ||||
| #define get_snd_generic_card(dev)	container_of(to_platform_device(dev), struct snd_generic_device, pdev)->card | ||||
| 
 | ||||
| #define SND_GENERIC_NAME	"snd_generic_pm" | ||||
| 
 | ||||
| static int snd_generic_suspend(struct device *dev, pm_message_t state, u32 level); | ||||
| static int snd_generic_resume(struct device *dev, u32 level); | ||||
| 
 | ||||
| static struct device_driver snd_generic_driver = { | ||||
| 	.name		= SND_GENERIC_NAME, | ||||
| 	.bus		= &platform_bus_type, | ||||
| 	.suspend	= snd_generic_suspend, | ||||
| 	.resume		= snd_generic_resume, | ||||
| }; | ||||
| 
 | ||||
| static int generic_driver_registered; | ||||
| 
 | ||||
| static void generic_driver_unregister(void) | ||||
| { | ||||
| 	if (generic_driver_registered) { | ||||
| 		generic_driver_registered--; | ||||
| 		if (! generic_driver_registered) | ||||
| 			driver_unregister(&snd_generic_driver); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static struct snd_generic_device *snd_generic_device_register(snd_card_t *card) | ||||
| { | ||||
| 	struct snd_generic_device *dev; | ||||
| 
 | ||||
| 	if (! generic_driver_registered) { | ||||
| 		if (driver_register(&snd_generic_driver) < 0) | ||||
| 			return NULL; | ||||
| 	} | ||||
| 	generic_driver_registered++; | ||||
| 
 | ||||
| 	dev = kcalloc(1, sizeof(*dev), GFP_KERNEL); | ||||
| 	if (! dev) { | ||||
| 		generic_driver_unregister(); | ||||
| 		return NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	dev->pdev.name = SND_GENERIC_NAME; | ||||
| 	dev->pdev.id = card->number; | ||||
| 	dev->card = card; | ||||
| 	if (platform_device_register(&dev->pdev) < 0) { | ||||
| 		kfree(dev); | ||||
| 		generic_driver_unregister(); | ||||
| 		return NULL; | ||||
| 	} | ||||
| 	return dev; | ||||
| } | ||||
| 
 | ||||
| static void snd_generic_device_unregister(struct snd_generic_device *dev) | ||||
| { | ||||
| 	platform_device_unregister(&dev->pdev); | ||||
| 	kfree(dev); | ||||
| 	generic_driver_unregister(); | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_SND_GENERIC_DRIVER | ||||
| /* suspend/resume callbacks for snd_generic platform device */ | ||||
| static int snd_generic_suspend(struct device *dev, pm_message_t state, u32 level) | ||||
| { | ||||
| @ -846,13 +864,12 @@ int snd_card_set_generic_pm_callback(snd_card_t *card, | ||||
| 				 int (*resume)(snd_card_t *), | ||||
| 				 void *private_data) | ||||
| { | ||||
| 	card->pm_dev = snd_generic_device_register(card); | ||||
| 	if (! card->pm_dev) | ||||
| 		return -ENOMEM; | ||||
| 	snd_card_set_pm_callback(card, suspend, resume, private_data); | ||||
| 	return 0; | ||||
| 	int err; | ||||
| 	if ((err = snd_generic_device_register(card)) < 0) | ||||
| 		return err; | ||||
| 	return snd_card_set_pm_callback(card, suspend, resume, private_data); | ||||
| } | ||||
| #endif /* CONFIG_SND_GENERIC_PM */ | ||||
| #endif /* CONFIG_SND_GENERIC_DRIVER */ | ||||
| 
 | ||||
| #ifdef CONFIG_PCI | ||||
| int snd_card_pci_suspend(struct pci_dev *dev, pm_message_t state) | ||||
|  | ||||
| @ -590,7 +590,7 @@ static int snd_mem_proc_write(struct file *file, const char __user *buffer, | ||||
| 
 | ||||
| 		alloced = 0; | ||||
| 		pci = NULL; | ||||
| 		while ((pci = pci_find_device(vendor, device, pci)) != NULL) { | ||||
| 		while ((pci = pci_get_device(vendor, device, pci)) != NULL) { | ||||
| 			if (mask > 0 && mask < 0xffffffff) { | ||||
| 				if (pci_set_dma_mask(pci, mask) < 0 || | ||||
| 				    pci_set_consistent_dma_mask(pci, mask) < 0) { | ||||
| @ -604,6 +604,7 @@ static int snd_mem_proc_write(struct file *file, const char __user *buffer, | ||||
| 				if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci), | ||||
| 							size, &dmab) < 0) { | ||||
| 					printk(KERN_ERR "snd-page-alloc: cannot allocate buffer pages (size = %d)\n", size); | ||||
| 					pci_dev_put(pci); | ||||
| 					return (int)count; | ||||
| 				} | ||||
| 				snd_dma_reserve_buf(&dmab, snd_dma_pci_buf_id(pci)); | ||||
|  | ||||
| @ -249,7 +249,7 @@ int __exit snd_memory_info_done(void) | ||||
| int copy_to_user_fromio(void __user *dst, const volatile void __iomem *src, size_t count) | ||||
| { | ||||
| #if defined(__i386__) || defined(CONFIG_SPARC32) | ||||
| 	return copy_to_user(dst, (const void*)src, count) ? -EFAULT : 0; | ||||
| 	return copy_to_user(dst, (const void __force*)src, count) ? -EFAULT : 0; | ||||
| #else | ||||
| 	char buf[256]; | ||||
| 	while (count) { | ||||
| @ -280,7 +280,7 @@ int copy_to_user_fromio(void __user *dst, const volatile void __iomem *src, size | ||||
| int copy_from_user_toio(volatile void __iomem *dst, const void __user *src, size_t count) | ||||
| { | ||||
| #if defined(__i386__) || defined(CONFIG_SPARC32) | ||||
| 	return copy_from_user((void*)dst, src, count) ? -EFAULT : 0; | ||||
| 	return copy_from_user((void __force *)dst, src, count) ? -EFAULT : 0; | ||||
| #else | ||||
| 	char buf[256]; | ||||
| 	while (count) { | ||||
|  | ||||
| @ -53,7 +53,7 @@ static int snd_mixer_oss_open(struct inode *inode, struct file *file) | ||||
| 	err = snd_card_file_add(card, file); | ||||
| 	if (err < 0) | ||||
| 		return err; | ||||
| 	fmixer = kcalloc(1, sizeof(*fmixer), GFP_KERNEL); | ||||
| 	fmixer = kzalloc(sizeof(*fmixer), GFP_KERNEL); | ||||
| 	if (fmixer == NULL) { | ||||
| 		snd_card_file_remove(card, file); | ||||
| 		return -ENOMEM; | ||||
| @ -517,8 +517,8 @@ static void snd_mixer_oss_get_volume1_vol(snd_mixer_oss_file_t *fmixer, | ||||
| 		up_read(&card->controls_rwsem); | ||||
| 		return; | ||||
| 	} | ||||
| 	uinfo = kcalloc(1, sizeof(*uinfo), GFP_KERNEL); | ||||
| 	uctl = kcalloc(1, sizeof(*uctl), GFP_KERNEL); | ||||
| 	uinfo = kzalloc(sizeof(*uinfo), GFP_KERNEL); | ||||
| 	uctl = kzalloc(sizeof(*uctl), GFP_KERNEL); | ||||
| 	if (uinfo == NULL || uctl == NULL) | ||||
| 		goto __unalloc; | ||||
| 	snd_runtime_check(!kctl->info(kctl, uinfo), goto __unalloc); | ||||
| @ -551,8 +551,8 @@ static void snd_mixer_oss_get_volume1_sw(snd_mixer_oss_file_t *fmixer, | ||||
| 		up_read(&card->controls_rwsem); | ||||
| 		return; | ||||
| 	} | ||||
| 	uinfo = kcalloc(1, sizeof(*uinfo), GFP_KERNEL); | ||||
| 	uctl = kcalloc(1, sizeof(*uctl), GFP_KERNEL); | ||||
| 	uinfo = kzalloc(sizeof(*uinfo), GFP_KERNEL); | ||||
| 	uctl = kzalloc(sizeof(*uctl), GFP_KERNEL); | ||||
| 	if (uinfo == NULL || uctl == NULL) | ||||
| 		goto __unalloc; | ||||
| 	snd_runtime_check(!kctl->info(kctl, uinfo), goto __unalloc); | ||||
| @ -612,8 +612,8 @@ static void snd_mixer_oss_put_volume1_vol(snd_mixer_oss_file_t *fmixer, | ||||
| 	down_read(&card->controls_rwsem); | ||||
| 	if ((kctl = snd_ctl_find_numid(card, numid)) == NULL) | ||||
| 		return; | ||||
| 	uinfo = kcalloc(1, sizeof(*uinfo), GFP_KERNEL); | ||||
| 	uctl = kcalloc(1, sizeof(*uctl), GFP_KERNEL); | ||||
| 	uinfo = kzalloc(sizeof(*uinfo), GFP_KERNEL); | ||||
| 	uctl = kzalloc(sizeof(*uctl), GFP_KERNEL); | ||||
| 	if (uinfo == NULL || uctl == NULL) | ||||
| 		goto __unalloc; | ||||
| 	snd_runtime_check(!kctl->info(kctl, uinfo), goto __unalloc); | ||||
| @ -649,8 +649,8 @@ static void snd_mixer_oss_put_volume1_sw(snd_mixer_oss_file_t *fmixer, | ||||
| 		up_read(&fmixer->card->controls_rwsem); | ||||
| 		return; | ||||
| 	} | ||||
| 	uinfo = kcalloc(1, sizeof(*uinfo), GFP_KERNEL); | ||||
| 	uctl = kcalloc(1, sizeof(*uctl), GFP_KERNEL); | ||||
| 	uinfo = kzalloc(sizeof(*uinfo), GFP_KERNEL); | ||||
| 	uctl = kzalloc(sizeof(*uctl), GFP_KERNEL); | ||||
| 	if (uinfo == NULL || uctl == NULL) | ||||
| 		goto __unalloc; | ||||
| 	snd_runtime_check(!kctl->info(kctl, uinfo), goto __unalloc); | ||||
| @ -768,8 +768,8 @@ static int snd_mixer_oss_get_recsrc2(snd_mixer_oss_file_t *fmixer, unsigned int | ||||
| 	snd_ctl_elem_value_t *uctl; | ||||
| 	int err, idx; | ||||
| 	 | ||||
| 	uinfo = kcalloc(1, sizeof(*uinfo), GFP_KERNEL); | ||||
| 	uctl = kcalloc(1, sizeof(*uctl), GFP_KERNEL); | ||||
| 	uinfo = kzalloc(sizeof(*uinfo), GFP_KERNEL); | ||||
| 	uctl = kzalloc(sizeof(*uctl), GFP_KERNEL); | ||||
| 	if (uinfo == NULL || uctl == NULL) { | ||||
| 		err = -ENOMEM; | ||||
| 		goto __unlock; | ||||
| @ -813,8 +813,8 @@ static int snd_mixer_oss_put_recsrc2(snd_mixer_oss_file_t *fmixer, unsigned int | ||||
| 	int err; | ||||
| 	unsigned int idx; | ||||
| 
 | ||||
| 	uinfo = kcalloc(1, sizeof(*uinfo), GFP_KERNEL); | ||||
| 	uctl = kcalloc(1, sizeof(*uctl), GFP_KERNEL); | ||||
| 	uinfo = kzalloc(sizeof(*uinfo), GFP_KERNEL); | ||||
| 	uctl = kzalloc(sizeof(*uctl), GFP_KERNEL); | ||||
| 	if (uinfo == NULL || uctl == NULL) { | ||||
| 		err = -ENOMEM; | ||||
| 		goto __unlock; | ||||
|  | ||||
| @ -850,7 +850,9 @@ static ssize_t snd_pcm_oss_write1(snd_pcm_substream_t *substream, const char __u | ||||
| 					return xfer > 0 ? xfer : -EAGAIN; | ||||
| 			} | ||||
| 		} else { | ||||
| 			tmp = snd_pcm_oss_write2(substream, (const char *)buf, runtime->oss.period_bytes, 0); | ||||
| 			tmp = snd_pcm_oss_write2(substream, | ||||
| 						 (const char __force *)buf, | ||||
| 						 runtime->oss.period_bytes, 0); | ||||
| 			if (tmp <= 0) | ||||
| 				return xfer > 0 ? (snd_pcm_sframes_t)xfer : tmp; | ||||
| 			runtime->oss.bytes += tmp; | ||||
| @ -926,7 +928,8 @@ static ssize_t snd_pcm_oss_read1(snd_pcm_substream_t *substream, char __user *bu | ||||
| 			xfer += tmp; | ||||
| 			runtime->oss.buffer_used -= tmp; | ||||
| 		} else { | ||||
| 			tmp = snd_pcm_oss_read2(substream, (char *)buf, runtime->oss.period_bytes, 0); | ||||
| 			tmp = snd_pcm_oss_read2(substream, (char __force *)buf, | ||||
| 						runtime->oss.period_bytes, 0); | ||||
| 			if (tmp <= 0) | ||||
| 				return xfer > 0 ? (snd_pcm_sframes_t)xfer : tmp; | ||||
| 			runtime->oss.bytes += tmp; | ||||
| @ -1540,7 +1543,11 @@ static int snd_pcm_oss_get_ptr(snd_pcm_oss_file_t *pcm_oss_file, int stream, str | ||||
| 	} else { | ||||
| 		delay = snd_pcm_oss_bytes(substream, delay); | ||||
| 		if (stream == SNDRV_PCM_STREAM_PLAYBACK) { | ||||
| 			info.blocks = (runtime->oss.buffer_bytes - delay - fixup) / runtime->oss.period_bytes; | ||||
| 			snd_pcm_oss_setup_t *setup = substream->oss.setup; | ||||
| 			if (setup && setup->buggyptr) | ||||
| 				info.blocks = (runtime->oss.buffer_bytes - delay - fixup) / runtime->oss.period_bytes; | ||||
| 			else | ||||
| 				info.blocks = (delay + fixup) / runtime->oss.period_bytes; | ||||
| 			info.bytes = (runtime->oss.bytes - delay) & INT_MAX; | ||||
| 		} else { | ||||
| 			delay += fixup; | ||||
| @ -1733,7 +1740,7 @@ static int snd_pcm_oss_open_file(struct file *file, | ||||
| 	snd_assert(rpcm_oss_file != NULL, return -EINVAL); | ||||
| 	*rpcm_oss_file = NULL; | ||||
| 
 | ||||
| 	pcm_oss_file = kcalloc(1, sizeof(*pcm_oss_file), GFP_KERNEL); | ||||
| 	pcm_oss_file = kzalloc(sizeof(*pcm_oss_file), GFP_KERNEL); | ||||
| 	if (pcm_oss_file == NULL) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
| @ -2347,6 +2354,8 @@ static void snd_pcm_oss_proc_write(snd_info_entry_t *entry, | ||||
| 				template.partialfrag = 1; | ||||
| 			} else if (!strcmp(str, "no-silence")) { | ||||
| 				template.nosilence = 1; | ||||
| 			} else if (!strcmp(str, "buggy-ptr")) { | ||||
| 				template.buggyptr = 1; | ||||
| 			} | ||||
| 		} while (*str); | ||||
| 		if (setup == NULL) { | ||||
|  | ||||
| @ -171,7 +171,7 @@ int snd_pcm_plugin_build(snd_pcm_plug_t *plug, | ||||
| 	 | ||||
| 	snd_assert(plug != NULL, return -ENXIO); | ||||
| 	snd_assert(src_format != NULL && dst_format != NULL, return -ENXIO); | ||||
| 	plugin = kcalloc(1, sizeof(*plugin) + extra, GFP_KERNEL); | ||||
| 	plugin = kzalloc(sizeof(*plugin) + extra, GFP_KERNEL); | ||||
| 	if (plugin == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	plugin->name = name; | ||||
|  | ||||
| @ -597,7 +597,7 @@ int snd_pcm_new_stream(snd_pcm_t *pcm, int stream, int substream_count) | ||||
| 	} | ||||
| 	prev = NULL; | ||||
| 	for (idx = 0, prev = NULL; idx < substream_count; idx++) { | ||||
| 		substream = kcalloc(1, sizeof(*substream), GFP_KERNEL); | ||||
| 		substream = kzalloc(sizeof(*substream), GFP_KERNEL); | ||||
| 		if (substream == NULL) | ||||
| 			return -ENOMEM; | ||||
| 		substream->pcm = pcm; | ||||
| @ -657,7 +657,7 @@ int snd_pcm_new(snd_card_t * card, char *id, int device, | ||||
| 	snd_assert(rpcm != NULL, return -EINVAL); | ||||
| 	*rpcm = NULL; | ||||
| 	snd_assert(card != NULL, return -ENXIO); | ||||
| 	pcm = kcalloc(1, sizeof(*pcm), GFP_KERNEL); | ||||
| 	pcm = kzalloc(sizeof(*pcm), GFP_KERNEL); | ||||
| 	if (pcm == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	pcm->card = card; | ||||
| @ -795,7 +795,7 @@ int snd_pcm_open_substream(snd_pcm_t *pcm, int stream, | ||||
| 	if (substream == NULL) | ||||
| 		return -EAGAIN; | ||||
| 
 | ||||
| 	runtime = kcalloc(1, sizeof(*runtime), GFP_KERNEL); | ||||
| 	runtime = kzalloc(sizeof(*runtime), GFP_KERNEL); | ||||
| 	if (runtime == NULL) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
|  | ||||
| @ -524,6 +524,9 @@ void snd_interval_mul(const snd_interval_t *a, const snd_interval_t *b, snd_inte | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_interval_div - refine the interval value with division | ||||
|  * @a: dividend | ||||
|  * @b: divisor | ||||
|  * @c: quotient | ||||
|  * | ||||
|  * c = a / b | ||||
|  * | ||||
| @ -555,7 +558,11 @@ void snd_interval_div(const snd_interval_t *a, const snd_interval_t *b, snd_inte | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_interval_muldivk - refine the interval value | ||||
|  * | ||||
|  * @a: dividend 1 | ||||
|  * @b: dividend 2 | ||||
|  * @k: divisor (as integer) | ||||
|  * @c: result | ||||
|   * | ||||
|  * c = a * b / k | ||||
|  * | ||||
|  * Returns non-zero if the value is changed, zero if not changed. | ||||
| @ -582,6 +589,10 @@ void snd_interval_muldivk(const snd_interval_t *a, const snd_interval_t *b, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_interval_mulkdiv - refine the interval value | ||||
|  * @a: dividend 1 | ||||
|  * @k: dividend 2 (as integer) | ||||
|  * @b: divisor | ||||
|  * @c: result | ||||
|  * | ||||
|  * c = a * k / b | ||||
|  * | ||||
| @ -618,6 +629,11 @@ void snd_interval_mulkdiv(const snd_interval_t *a, unsigned int k, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_interval_ratnum - refine the interval value | ||||
|  * @i: interval to refine | ||||
|  * @rats_count: number of ratnum_t  | ||||
|  * @rats: ratnum_t array | ||||
|  * @nump: pointer to store the resultant numerator | ||||
|  * @denp: pointer to store the resultant denominator | ||||
|  * | ||||
|  * Returns non-zero if the value is changed, zero if not changed. | ||||
|  */ | ||||
| @ -715,6 +731,11 @@ int snd_interval_ratnum(snd_interval_t *i, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_interval_ratden - refine the interval value | ||||
|  * @i: interval to refine | ||||
|  * @rats_count: number of ratden_t | ||||
|  * @rats: ratden_t array | ||||
|  * @nump: pointer to store the resultant numerator | ||||
|  * @denp: pointer to store the resultant denominator | ||||
|  * | ||||
|  * Returns non-zero if the value is changed, zero if not changed. | ||||
|  */ | ||||
| @ -936,6 +957,11 @@ int snd_pcm_hw_rule_add(snd_pcm_runtime_t *runtime, unsigned int cond, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_constraint_mask | ||||
|  * @runtime: PCM runtime instance | ||||
|  * @var: hw_params variable to apply the mask | ||||
|  * @mask: the bitmap mask | ||||
|  * | ||||
|  * Apply the constraint of the given bitmap mask to a mask parameter. | ||||
|  */ | ||||
| int snd_pcm_hw_constraint_mask(snd_pcm_runtime_t *runtime, snd_pcm_hw_param_t var, | ||||
| 			       u_int32_t mask) | ||||
| @ -951,6 +977,11 @@ int snd_pcm_hw_constraint_mask(snd_pcm_runtime_t *runtime, snd_pcm_hw_param_t va | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_constraint_mask64 | ||||
|  * @runtime: PCM runtime instance | ||||
|  * @var: hw_params variable to apply the mask | ||||
|  * @mask: the 64bit bitmap mask | ||||
|  * | ||||
|  * Apply the constraint of the given bitmap mask to a mask parameter. | ||||
|  */ | ||||
| int snd_pcm_hw_constraint_mask64(snd_pcm_runtime_t *runtime, snd_pcm_hw_param_t var, | ||||
| 				 u_int64_t mask) | ||||
| @ -967,6 +998,10 @@ int snd_pcm_hw_constraint_mask64(snd_pcm_runtime_t *runtime, snd_pcm_hw_param_t | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_constraint_integer | ||||
|  * @runtime: PCM runtime instance | ||||
|  * @var: hw_params variable to apply the integer constraint | ||||
|  * | ||||
|  * Apply the constraint of integer to an interval parameter. | ||||
|  */ | ||||
| int snd_pcm_hw_constraint_integer(snd_pcm_runtime_t *runtime, snd_pcm_hw_param_t var) | ||||
| { | ||||
| @ -976,6 +1011,12 @@ int snd_pcm_hw_constraint_integer(snd_pcm_runtime_t *runtime, snd_pcm_hw_param_t | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_constraint_minmax | ||||
|  * @runtime: PCM runtime instance | ||||
|  * @var: hw_params variable to apply the range | ||||
|  * @min: the minimal value | ||||
|  * @max: the maximal value | ||||
|  *  | ||||
|  * Apply the min/max range constraint to an interval parameter. | ||||
|  */ | ||||
| int snd_pcm_hw_constraint_minmax(snd_pcm_runtime_t *runtime, snd_pcm_hw_param_t var, | ||||
| 				 unsigned int min, unsigned int max) | ||||
| @ -999,6 +1040,12 @@ static int snd_pcm_hw_rule_list(snd_pcm_hw_params_t *params, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_constraint_list | ||||
|  * @runtime: PCM runtime instance | ||||
|  * @cond: condition bits | ||||
|  * @var: hw_params variable to apply the list constraint | ||||
|  * @l: list | ||||
|  *  | ||||
|  * Apply the list of constraints to an interval parameter. | ||||
|  */ | ||||
| int snd_pcm_hw_constraint_list(snd_pcm_runtime_t *runtime, | ||||
| 			       unsigned int cond, | ||||
| @ -1027,6 +1074,10 @@ static int snd_pcm_hw_rule_ratnums(snd_pcm_hw_params_t *params, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_constraint_ratnums | ||||
|  * @runtime: PCM runtime instance | ||||
|  * @cond: condition bits | ||||
|  * @var: hw_params variable to apply the ratnums constraint | ||||
|  * @r: ratnums_t constriants | ||||
|  */ | ||||
| int snd_pcm_hw_constraint_ratnums(snd_pcm_runtime_t *runtime,  | ||||
| 				  unsigned int cond, | ||||
| @ -1054,6 +1105,10 @@ static int snd_pcm_hw_rule_ratdens(snd_pcm_hw_params_t *params, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_constraint_ratdens | ||||
|  * @runtime: PCM runtime instance | ||||
|  * @cond: condition bits | ||||
|  * @var: hw_params variable to apply the ratdens constraint | ||||
|  * @r: ratdens_t constriants | ||||
|  */ | ||||
| int snd_pcm_hw_constraint_ratdens(snd_pcm_runtime_t *runtime,  | ||||
| 				  unsigned int cond, | ||||
| @ -1079,6 +1134,10 @@ static int snd_pcm_hw_rule_msbits(snd_pcm_hw_params_t *params, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_constraint_msbits | ||||
|  * @runtime: PCM runtime instance | ||||
|  * @cond: condition bits | ||||
|  * @width: sample bits width | ||||
|  * @msbits: msbits width | ||||
|  */ | ||||
| int snd_pcm_hw_constraint_msbits(snd_pcm_runtime_t *runtime,  | ||||
| 				 unsigned int cond, | ||||
| @ -1101,6 +1160,10 @@ static int snd_pcm_hw_rule_step(snd_pcm_hw_params_t *params, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_constraint_step | ||||
|  * @runtime: PCM runtime instance | ||||
|  * @cond: condition bits | ||||
|  * @var: hw_params variable to apply the step constraint | ||||
|  * @step: step size | ||||
|  */ | ||||
| int snd_pcm_hw_constraint_step(snd_pcm_runtime_t *runtime, | ||||
| 			       unsigned int cond, | ||||
| @ -1126,6 +1189,9 @@ static int snd_pcm_hw_rule_pow2(snd_pcm_hw_params_t *params, snd_pcm_hw_rule_t * | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_constraint_pow2 | ||||
|  * @runtime: PCM runtime instance | ||||
|  * @cond: condition bits | ||||
|  * @var: hw_params variable to apply the power-of-2 constraint | ||||
|  */ | ||||
| int snd_pcm_hw_constraint_pow2(snd_pcm_runtime_t *runtime, | ||||
| 			       unsigned int cond, | ||||
| @ -1162,7 +1228,7 @@ static void _snd_pcm_hw_param_any(snd_pcm_hw_params_t *params, | ||||
| } | ||||
| 
 | ||||
| #if 0 | ||||
| /**
 | ||||
| /*
 | ||||
|  * snd_pcm_hw_param_any | ||||
|  */ | ||||
| int snd_pcm_hw_param_any(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, | ||||
| @ -1185,7 +1251,7 @@ void _snd_pcm_hw_params_any(snd_pcm_hw_params_t *params) | ||||
| } | ||||
| 
 | ||||
| #if 0 | ||||
| /**
 | ||||
| /*
 | ||||
|  * snd_pcm_hw_params_any | ||||
|  * | ||||
|  * Fill PARAMS with full configuration space boundaries | ||||
| @ -1199,6 +1265,9 @@ int snd_pcm_hw_params_any(snd_pcm_t *pcm, snd_pcm_hw_params_t *params) | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_param_value | ||||
|  * @params: the hw_params instance | ||||
|  * @var: parameter to retrieve | ||||
|  * @dir: pointer to the direction (-1,0,1) or NULL | ||||
|  * | ||||
|  * Return the value for field PAR if it's fixed in configuration space  | ||||
|  *  defined by PARAMS. Return -EINVAL otherwise | ||||
| @ -1228,6 +1297,9 @@ static int snd_pcm_hw_param_value(const snd_pcm_hw_params_t *params, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_param_value_min | ||||
|  * @params: the hw_params instance | ||||
|  * @var: parameter to retrieve | ||||
|  * @dir: pointer to the direction (-1,0,1) or NULL | ||||
|  * | ||||
|  * Return the minimum value for field PAR. | ||||
|  */ | ||||
| @ -1251,6 +1323,9 @@ unsigned int snd_pcm_hw_param_value_min(const snd_pcm_hw_params_t *params, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_param_value_max | ||||
|  * @params: the hw_params instance | ||||
|  * @var: parameter to retrieve | ||||
|  * @dir: pointer to the direction (-1,0,1) or NULL | ||||
|  * | ||||
|  * Return the maximum value for field PAR. | ||||
|  */ | ||||
| @ -1302,7 +1377,7 @@ int _snd_pcm_hw_param_setinteger(snd_pcm_hw_params_t *params, | ||||
| } | ||||
| 	 | ||||
| #if 0 | ||||
| /**
 | ||||
| /*
 | ||||
|  * snd_pcm_hw_param_setinteger | ||||
|  * | ||||
|  * Inside configuration space defined by PARAMS remove from PAR all  | ||||
| @ -1347,6 +1422,10 @@ static int _snd_pcm_hw_param_first(snd_pcm_hw_params_t *params, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_param_first | ||||
|  * @pcm: PCM instance | ||||
|  * @params: the hw_params instance | ||||
|  * @var: parameter to retrieve | ||||
|  * @dir: pointer to the direction (-1,0,1) or NULL | ||||
|  * | ||||
|  * Inside configuration space defined by PARAMS remove from PAR all  | ||||
|  * values > minimum. Reduce configuration space accordingly. | ||||
| @ -1388,6 +1467,10 @@ static int _snd_pcm_hw_param_last(snd_pcm_hw_params_t *params, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_param_last | ||||
|  * @pcm: PCM instance | ||||
|  * @params: the hw_params instance | ||||
|  * @var: parameter to retrieve | ||||
|  * @dir: pointer to the direction (-1,0,1) or NULL | ||||
|  * | ||||
|  * Inside configuration space defined by PARAMS remove from PAR all  | ||||
|  * values < maximum. Reduce configuration space accordingly. | ||||
| @ -1439,6 +1522,11 @@ int _snd_pcm_hw_param_min(snd_pcm_hw_params_t *params, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_param_min | ||||
|  * @pcm: PCM instance | ||||
|  * @params: the hw_params instance | ||||
|  * @var: parameter to retrieve | ||||
|  * @val: minimal value | ||||
|  * @dir: pointer to the direction (-1,0,1) or NULL | ||||
|  * | ||||
|  * Inside configuration space defined by PARAMS remove from PAR all  | ||||
|  * values < VAL. Reduce configuration space accordingly. | ||||
| @ -1494,6 +1582,11 @@ static int _snd_pcm_hw_param_max(snd_pcm_hw_params_t *params, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_param_max | ||||
|  * @pcm: PCM instance | ||||
|  * @params: the hw_params instance | ||||
|  * @var: parameter to retrieve | ||||
|  * @val: maximal value | ||||
|  * @dir: pointer to the direction (-1,0,1) or NULL | ||||
|  * | ||||
|  * Inside configuration space defined by PARAMS remove from PAR all  | ||||
|  *  values >= VAL + 1. Reduce configuration space accordingly. | ||||
| @ -1565,6 +1658,11 @@ int _snd_pcm_hw_param_set(snd_pcm_hw_params_t *params, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_param_set | ||||
|  * @pcm: PCM instance | ||||
|  * @params: the hw_params instance | ||||
|  * @var: parameter to retrieve | ||||
|  * @val: value to set | ||||
|  * @dir: pointer to the direction (-1,0,1) or NULL | ||||
|  * | ||||
|  * Inside configuration space defined by PARAMS remove from PAR all  | ||||
|  * values != VAL. Reduce configuration space accordingly. | ||||
| @ -1599,6 +1697,10 @@ static int _snd_pcm_hw_param_mask(snd_pcm_hw_params_t *params, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_param_mask | ||||
|  * @pcm: PCM instance | ||||
|  * @params: the hw_params instance | ||||
|  * @var: parameter to retrieve | ||||
|  * @val: mask to apply | ||||
|  * | ||||
|  * Inside configuration space defined by PARAMS remove from PAR all values | ||||
|  * not contained in MASK. Reduce configuration space accordingly. | ||||
| @ -1671,6 +1773,11 @@ static int boundary_nearer(int min, int mindir, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_param_near | ||||
|  * @pcm: PCM instance | ||||
|  * @params: the hw_params instance | ||||
|  * @var: parameter to retrieve | ||||
|  * @best: value to set | ||||
|  * @dir: pointer to the direction (-1,0,1) or NULL | ||||
|  * | ||||
|  * Inside configuration space defined by PARAMS set PAR to the available value | ||||
|  * nearest to VAL. Reduce configuration space accordingly. | ||||
| @ -1747,6 +1854,8 @@ int snd_pcm_hw_param_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_hw_param_choose | ||||
|  * @pcm: PCM instance | ||||
|  * @params: the hw_params instance | ||||
|  * | ||||
|  * Choose one configuration from configuration space defined by PARAMS | ||||
|  * The configuration chosen is that obtained fixing in this order: | ||||
|  | ||||
| @ -244,7 +244,7 @@ int snd_pcm_lib_preallocate_pages(snd_pcm_substream_t *substream, | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_lib_preallocate_pages_for_all - pre-allocation for continous memory type (all substreams) | ||||
|  * @substream: the pcm substream instance | ||||
|  * @pcm: the pcm instance | ||||
|  * @type: DMA type (SNDRV_DMA_TYPE_*) | ||||
|  * @data: DMA type dependant data | ||||
|  * @size: the requested pre-allocation size in bytes | ||||
| @ -321,7 +321,7 @@ int snd_pcm_lib_malloc_pages(snd_pcm_substream_t *substream, size_t size) | ||||
| 	if (substream->dma_buffer.area != NULL && substream->dma_buffer.bytes >= size) { | ||||
| 		dmab = &substream->dma_buffer; /* use the pre-allocated buffer */ | ||||
| 	} else { | ||||
| 		dmab = kcalloc(1, sizeof(*dmab), GFP_KERNEL); | ||||
| 		dmab = kzalloc(sizeof(*dmab), GFP_KERNEL); | ||||
| 		if (! dmab) | ||||
| 			return -ENOMEM; | ||||
| 		dmab->dev = substream->dma_buffer.dev; | ||||
|  | ||||
| @ -859,6 +859,7 @@ static struct action_ops snd_pcm_action_start = { | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_start | ||||
|  * @substream: the PCM substream instance | ||||
|  * | ||||
|  * Start all linked streams. | ||||
|  */ | ||||
| @ -908,6 +909,8 @@ static struct action_ops snd_pcm_action_stop = { | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_stop | ||||
|  * @substream: the PCM substream instance | ||||
|  * @state: PCM state after stopping the stream | ||||
|  * | ||||
|  * Try to stop all running streams in the substream group. | ||||
|  * The state of each stream is changed to the given value after that unconditionally. | ||||
| @ -919,6 +922,7 @@ int snd_pcm_stop(snd_pcm_substream_t *substream, int state) | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_drain_done | ||||
|  * @substream: the PCM substream | ||||
|  * | ||||
|  * Stop the DMA only when the given stream is playback. | ||||
|  * The state is changed to SETUP. | ||||
| @ -1040,6 +1044,7 @@ static struct action_ops snd_pcm_action_suspend = { | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_suspend | ||||
|  * @substream: the PCM substream | ||||
|  * | ||||
|  * Trigger SUSPEND to all linked streams. | ||||
|  * After this call, all streams are changed to SUSPENDED state. | ||||
| @ -1057,6 +1062,7 @@ int snd_pcm_suspend(snd_pcm_substream_t *substream) | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_suspend_all | ||||
|  * @pcm: the PCM instance | ||||
|  * | ||||
|  * Trigger SUSPEND to all substreams in the given pcm. | ||||
|  * After this call, all streams are changed to SUSPENDED state. | ||||
| @ -1272,6 +1278,9 @@ static struct action_ops snd_pcm_action_prepare = { | ||||
| 
 | ||||
| /**
 | ||||
|  * snd_pcm_prepare | ||||
|  * @substream: the PCM substream instance | ||||
|  * | ||||
|  * Prepare the PCM substream to be triggerable. | ||||
|  */ | ||||
| int snd_pcm_prepare(snd_pcm_substream_t *substream) | ||||
| { | ||||
| @ -1992,7 +2001,7 @@ static int snd_pcm_open_file(struct file *file, | ||||
| 	snd_assert(rpcm_file != NULL, return -EINVAL); | ||||
| 	*rpcm_file = NULL; | ||||
| 
 | ||||
| 	pcm_file = kcalloc(1, sizeof(*pcm_file), GFP_KERNEL); | ||||
| 	pcm_file = kzalloc(sizeof(*pcm_file), GFP_KERNEL); | ||||
| 	if (pcm_file == NULL) { | ||||
| 		return -ENOMEM; | ||||
| 	} | ||||
|  | ||||
| @ -101,7 +101,7 @@ static int snd_rawmidi_runtime_create(snd_rawmidi_substream_t * substream) | ||||
| { | ||||
| 	snd_rawmidi_runtime_t *runtime; | ||||
| 
 | ||||
| 	if ((runtime = kcalloc(1, sizeof(*runtime), GFP_KERNEL)) == NULL) | ||||
| 	if ((runtime = kzalloc(sizeof(*runtime), GFP_KERNEL)) == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	spin_lock_init(&runtime->lock); | ||||
| 	init_waitqueue_head(&runtime->sleep); | ||||
| @ -984,7 +984,9 @@ static ssize_t snd_rawmidi_read(struct file *file, char __user *buf, size_t coun | ||||
| 			spin_lock_irq(&runtime->lock); | ||||
| 		} | ||||
| 		spin_unlock_irq(&runtime->lock); | ||||
| 		count1 = snd_rawmidi_kernel_read1(substream, (unsigned char *)buf, count, 0); | ||||
| 		count1 = snd_rawmidi_kernel_read1(substream, | ||||
| 						  (unsigned char __force *)buf, | ||||
| 						  count, 0); | ||||
| 		if (count1 < 0) | ||||
| 			return result > 0 ? result : count1; | ||||
| 		result += count1; | ||||
| @ -1107,7 +1109,7 @@ int snd_rawmidi_transmit_ack(snd_rawmidi_substream_t * substream, int count) | ||||
| /**
 | ||||
|  * snd_rawmidi_transmit - copy from the buffer to the device | ||||
|  * @substream: the rawmidi substream | ||||
|  * @buf: the buffer pointer | ||||
|  * @buffer: the buffer pointer | ||||
|  * @count: the data size to transfer | ||||
|  *  | ||||
|  * Copies data from the buffer to the device and advances the pointer. | ||||
| @ -1213,7 +1215,9 @@ static ssize_t snd_rawmidi_write(struct file *file, const char __user *buf, size | ||||
| 			spin_lock_irq(&runtime->lock); | ||||
| 		} | ||||
| 		spin_unlock_irq(&runtime->lock); | ||||
| 		count1 = snd_rawmidi_kernel_write1(substream, (unsigned char *)buf, count, 0); | ||||
| 		count1 = snd_rawmidi_kernel_write1(substream, | ||||
| 						   (unsigned char __force *)buf, | ||||
| 						   count, 0); | ||||
| 		if (count1 < 0) | ||||
| 			return result > 0 ? result : count1; | ||||
| 		result += count1; | ||||
| @ -1370,7 +1374,7 @@ static int snd_rawmidi_alloc_substreams(snd_rawmidi_t *rmidi, | ||||
| 
 | ||||
| 	INIT_LIST_HEAD(&stream->substreams); | ||||
| 	for (idx = 0; idx < count; idx++) { | ||||
| 		substream = kcalloc(1, sizeof(*substream), GFP_KERNEL); | ||||
| 		substream = kzalloc(sizeof(*substream), GFP_KERNEL); | ||||
| 		if (substream == NULL) | ||||
| 			return -ENOMEM; | ||||
| 		substream->stream = direction; | ||||
| @ -1413,7 +1417,7 @@ int snd_rawmidi_new(snd_card_t * card, char *id, int device, | ||||
| 	snd_assert(rrawmidi != NULL, return -EINVAL); | ||||
| 	*rrawmidi = NULL; | ||||
| 	snd_assert(card != NULL, return -ENXIO); | ||||
| 	rmidi = kcalloc(1, sizeof(*rmidi), GFP_KERNEL); | ||||
| 	rmidi = kzalloc(sizeof(*rmidi), GFP_KERNEL); | ||||
| 	if (rmidi == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	rmidi->card = card; | ||||
|  | ||||
| @ -61,7 +61,7 @@ static int snd_seq_gf1_copy_wave_from_stream(snd_gf1_ops_t *ops, | ||||
| 		return -EFAULT; | ||||
| 	*data += sizeof(xp); | ||||
| 	*len -= sizeof(xp); | ||||
| 	wp = kcalloc(1, sizeof(*wp), gfp_mask); | ||||
| 	wp = kzalloc(sizeof(*wp), gfp_mask); | ||||
| 	if (wp == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	wp->share_id[0] = le32_to_cpu(xp.share_id[0]); | ||||
|  | ||||
| @ -92,7 +92,7 @@ static int snd_seq_iwffff_copy_env_from_stream(__u32 req_stype, | ||||
| 		points_size = (le16_to_cpu(rx.nattack) + le16_to_cpu(rx.nrelease)) * 2 * sizeof(__u16); | ||||
| 		if (points_size > *len) | ||||
| 			return -EINVAL; | ||||
| 		rp = kcalloc(1, sizeof(*rp) + points_size, gfp_mask); | ||||
| 		rp = kzalloc(sizeof(*rp) + points_size, gfp_mask); | ||||
| 		if (rp == NULL) | ||||
| 			return -ENOMEM; | ||||
| 		rp->nattack = le16_to_cpu(rx.nattack); | ||||
| @ -139,7 +139,7 @@ static int snd_seq_iwffff_copy_wave_from_stream(snd_iwffff_ops_t *ops, | ||||
| 		return -EFAULT; | ||||
| 	*data += sizeof(xp); | ||||
| 	*len -= sizeof(xp); | ||||
| 	wp = kcalloc(1, sizeof(*wp), gfp_mask); | ||||
| 	wp = kzalloc(sizeof(*wp), gfp_mask); | ||||
| 	if (wp == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	wp->share_id[0] = le32_to_cpu(xp.share_id[0]); | ||||
| @ -273,7 +273,7 @@ static int snd_seq_iwffff_put(void *private_data, snd_seq_kinstr_t *instr, | ||||
| 			snd_seq_iwffff_instr_free(ops, ip, atomic); | ||||
| 			return -EINVAL; | ||||
| 		} | ||||
| 		lp = kcalloc(1, sizeof(*lp), gfp_mask); | ||||
| 		lp = kzalloc(sizeof(*lp), gfp_mask); | ||||
| 		if (lp == NULL) { | ||||
| 			snd_seq_iwffff_instr_free(ops, ip, atomic); | ||||
| 			return -ENOMEM; | ||||
|  | ||||
| @ -193,7 +193,7 @@ snd_seq_oss_open(struct file *file, int level) | ||||
| 	int i, rc; | ||||
| 	seq_oss_devinfo_t *dp; | ||||
| 
 | ||||
| 	if ((dp = kcalloc(1, sizeof(*dp), GFP_KERNEL)) == NULL) { | ||||
| 	if ((dp = kzalloc(sizeof(*dp), GFP_KERNEL)) == NULL) { | ||||
| 		snd_printk(KERN_ERR "can't malloc device info\n"); | ||||
| 		return -ENOMEM; | ||||
| 	} | ||||
|  | ||||
| @ -76,8 +76,8 @@ snd_seq_oss_midi_lookup_ports(int client) | ||||
| 	snd_seq_client_info_t *clinfo; | ||||
| 	snd_seq_port_info_t *pinfo; | ||||
| 
 | ||||
| 	clinfo = kcalloc(1, sizeof(*clinfo), GFP_KERNEL); | ||||
| 	pinfo = kcalloc(1, sizeof(*pinfo), GFP_KERNEL); | ||||
| 	clinfo = kzalloc(sizeof(*clinfo), GFP_KERNEL); | ||||
| 	pinfo = kzalloc(sizeof(*pinfo), GFP_KERNEL); | ||||
| 	if (! clinfo || ! pinfo) { | ||||
| 		kfree(clinfo); | ||||
| 		kfree(pinfo); | ||||
| @ -172,7 +172,7 @@ snd_seq_oss_midi_check_new_port(snd_seq_port_info_t *pinfo) | ||||
| 	/*
 | ||||
| 	 * allocate midi info record | ||||
| 	 */ | ||||
| 	if ((mdev = kcalloc(1, sizeof(*mdev), GFP_KERNEL)) == NULL) { | ||||
| 	if ((mdev = kzalloc(sizeof(*mdev), GFP_KERNEL)) == NULL) { | ||||
| 		snd_printk(KERN_ERR "can't malloc midi info\n"); | ||||
| 		return -ENOMEM; | ||||
| 	} | ||||
|  | ||||
| @ -46,7 +46,7 @@ snd_seq_oss_readq_new(seq_oss_devinfo_t *dp, int maxlen) | ||||
| { | ||||
| 	seq_oss_readq_t *q; | ||||
| 
 | ||||
| 	if ((q = kcalloc(1, sizeof(*q), GFP_KERNEL)) == NULL) { | ||||
| 	if ((q = kzalloc(sizeof(*q), GFP_KERNEL)) == NULL) { | ||||
| 		snd_printk(KERN_ERR "can't malloc read queue\n"); | ||||
| 		return NULL; | ||||
| 	} | ||||
|  | ||||
| @ -103,7 +103,7 @@ snd_seq_oss_synth_register(snd_seq_device_t *dev) | ||||
| 	snd_seq_oss_reg_t *reg = SNDRV_SEQ_DEVICE_ARGPTR(dev); | ||||
| 	unsigned long flags; | ||||
| 
 | ||||
| 	if ((rec = kcalloc(1, sizeof(*rec), GFP_KERNEL)) == NULL) { | ||||
| 	if ((rec = kzalloc(sizeof(*rec), GFP_KERNEL)) == NULL) { | ||||
| 		snd_printk(KERN_ERR "can't malloc synth info\n"); | ||||
| 		return -ENOMEM; | ||||
| 	} | ||||
| @ -499,7 +499,7 @@ snd_seq_oss_synth_sysex(seq_oss_devinfo_t *dp, int dev, unsigned char *buf, snd_ | ||||
| 
 | ||||
| 	sysex = dp->synths[dev].sysex; | ||||
| 	if (sysex == NULL) { | ||||
| 		sysex = kcalloc(1, sizeof(*sysex), GFP_KERNEL); | ||||
| 		sysex = kzalloc(sizeof(*sysex), GFP_KERNEL); | ||||
| 		if (sysex == NULL) | ||||
| 			return -ENOMEM; | ||||
| 		dp->synths[dev].sysex = sysex; | ||||
|  | ||||
| @ -46,7 +46,7 @@ snd_seq_oss_timer_new(seq_oss_devinfo_t *dp) | ||||
| { | ||||
| 	seq_oss_timer_t *rec; | ||||
| 
 | ||||
| 	rec = kcalloc(1, sizeof(*rec), GFP_KERNEL); | ||||
| 	rec = kzalloc(sizeof(*rec), GFP_KERNEL); | ||||
| 	if (rec == NULL) | ||||
| 		return NULL; | ||||
| 
 | ||||
|  | ||||
| @ -38,7 +38,7 @@ snd_seq_oss_writeq_new(seq_oss_devinfo_t *dp, int maxlen) | ||||
| 	seq_oss_writeq_t *q; | ||||
| 	snd_seq_client_pool_t pool; | ||||
| 
 | ||||
| 	if ((q = kcalloc(1, sizeof(*q), GFP_KERNEL)) == NULL) | ||||
| 	if ((q = kzalloc(sizeof(*q), GFP_KERNEL)) == NULL) | ||||
| 		return NULL; | ||||
| 	q->dp = dp; | ||||
| 	q->maxlen = maxlen; | ||||
|  | ||||
| @ -43,7 +43,13 @@ int seq_client_load[64] = {[0 ... 63] = -1}; | ||||
| int seq_default_timer_class = SNDRV_TIMER_CLASS_GLOBAL; | ||||
| int seq_default_timer_sclass = SNDRV_TIMER_SCLASS_NONE; | ||||
| int seq_default_timer_card = -1; | ||||
| int seq_default_timer_device = SNDRV_TIMER_GLOBAL_SYSTEM; | ||||
| int seq_default_timer_device = | ||||
| #ifdef CONFIG_SND_SEQ_RTCTIMER_DEFAULT | ||||
| 	SNDRV_TIMER_GLOBAL_RTC | ||||
| #else | ||||
| 	SNDRV_TIMER_GLOBAL_SYSTEM | ||||
| #endif | ||||
| 	; | ||||
| int seq_default_timer_subdevice = 0; | ||||
| int seq_default_timer_resolution = 0;	/* Hz */ | ||||
| 
 | ||||
|  | ||||
| @ -203,7 +203,7 @@ static client_t *seq_create_client1(int client_index, int poolsize) | ||||
| 	client_t *client; | ||||
| 
 | ||||
| 	/* init client data */ | ||||
| 	client = kcalloc(1, sizeof(*client), GFP_KERNEL); | ||||
| 	client = kzalloc(sizeof(*client), GFP_KERNEL); | ||||
| 	if (client == NULL) | ||||
| 		return NULL; | ||||
| 	client->pool = snd_seq_pool_new(poolsize); | ||||
| @ -413,7 +413,9 @@ static ssize_t snd_seq_read(struct file *file, char __user *buf, size_t count, l | ||||
| 			} | ||||
| 			count -= sizeof(snd_seq_event_t); | ||||
| 			buf += sizeof(snd_seq_event_t); | ||||
| 			err = snd_seq_expand_var_event(&cell->event, count, (char *)buf, 0, sizeof(snd_seq_event_t)); | ||||
| 			err = snd_seq_expand_var_event(&cell->event, count, | ||||
| 						       (char __force *)buf, 0, | ||||
| 						       sizeof(snd_seq_event_t)); | ||||
| 			if (err < 0) | ||||
| 				break; | ||||
| 			result += err; | ||||
| @ -1009,7 +1011,8 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf, size_t c | ||||
| 			} | ||||
| 			/* set user space pointer */ | ||||
| 			event.data.ext.len = extlen | SNDRV_SEQ_EXT_USRPTR; | ||||
| 			event.data.ext.ptr = (char*)buf + sizeof(snd_seq_event_t); | ||||
| 			event.data.ext.ptr = (char __force *)buf | ||||
| 						+ sizeof(snd_seq_event_t); | ||||
| 			len += extlen; /* increment data length */ | ||||
| 		} else { | ||||
| #ifdef CONFIG_COMPAT | ||||
|  | ||||
| @ -200,7 +200,7 @@ int snd_seq_device_new(snd_card_t *card, int device, char *id, int argsize, | ||||
| 	if (ops == NULL) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
| 	dev = kcalloc(1, sizeof(*dev)*2 + argsize, GFP_KERNEL); | ||||
| 	dev = kzalloc(sizeof(*dev)*2 + argsize, GFP_KERNEL); | ||||
| 	if (dev == NULL) { | ||||
| 		unlock_driver(ops); | ||||
| 		return -ENOMEM; | ||||
|  | ||||
| @ -153,7 +153,7 @@ create_port(int idx, int type) | ||||
| 	snd_seq_port_callback_t pcb; | ||||
| 	snd_seq_dummy_port_t *rec; | ||||
| 
 | ||||
| 	if ((rec = kcalloc(1, sizeof(*rec), GFP_KERNEL)) == NULL) | ||||
| 	if ((rec = kzalloc(sizeof(*rec), GFP_KERNEL)) == NULL) | ||||
| 		return NULL; | ||||
| 
 | ||||
| 	rec->client = my_client; | ||||
|  | ||||
| @ -33,7 +33,7 @@ fifo_t *snd_seq_fifo_new(int poolsize) | ||||
| { | ||||
| 	fifo_t *f; | ||||
| 
 | ||||
| 	f = kcalloc(1, sizeof(*f), GFP_KERNEL); | ||||
| 	f = kzalloc(sizeof(*f), GFP_KERNEL); | ||||
| 	if (f == NULL) { | ||||
| 		snd_printd("malloc failed for snd_seq_fifo_new() \n"); | ||||
| 		return NULL; | ||||
|  | ||||
| @ -53,7 +53,7 @@ static snd_seq_kinstr_t *snd_seq_instr_new(int add_len, int atomic) | ||||
| { | ||||
| 	snd_seq_kinstr_t *instr; | ||||
| 	 | ||||
| 	instr = kcalloc(1, sizeof(snd_seq_kinstr_t) + add_len, atomic ? GFP_ATOMIC : GFP_KERNEL); | ||||
| 	instr = kzalloc(sizeof(snd_seq_kinstr_t) + add_len, atomic ? GFP_ATOMIC : GFP_KERNEL); | ||||
| 	if (instr == NULL) | ||||
| 		return NULL; | ||||
| 	instr->add_len = add_len; | ||||
| @ -77,7 +77,7 @@ snd_seq_kinstr_list_t *snd_seq_instr_list_new(void) | ||||
| { | ||||
| 	snd_seq_kinstr_list_t *list; | ||||
| 
 | ||||
| 	list = kcalloc(1, sizeof(snd_seq_kinstr_list_t), GFP_KERNEL); | ||||
| 	list = kzalloc(sizeof(snd_seq_kinstr_list_t), GFP_KERNEL); | ||||
| 	if (list == NULL) | ||||
| 		return NULL; | ||||
| 	spin_lock_init(&list->lock); | ||||
|  | ||||
| @ -452,7 +452,7 @@ pool_t *snd_seq_pool_new(int poolsize) | ||||
| 	pool_t *pool; | ||||
| 
 | ||||
| 	/* create pool block */ | ||||
| 	pool = kcalloc(1, sizeof(*pool), GFP_KERNEL); | ||||
| 	pool = kzalloc(sizeof(*pool), GFP_KERNEL); | ||||
| 	if (pool == NULL) { | ||||
| 		snd_printd("seq: malloc failed for pool\n"); | ||||
| 		return NULL; | ||||
|  | ||||
| @ -322,7 +322,7 @@ snd_seq_midisynth_register_port(snd_seq_device_t *dev) | ||||
| 	client = synths[card->number]; | ||||
| 	if (client == NULL) { | ||||
| 		newclient = 1; | ||||
| 		client = kcalloc(1, sizeof(*client), GFP_KERNEL); | ||||
| 		client = kzalloc(sizeof(*client), GFP_KERNEL); | ||||
| 		if (client == NULL) { | ||||
| 			up(®ister_mutex); | ||||
| 			kfree(info); | ||||
|  | ||||
| @ -118,7 +118,7 @@ int snd_midi_event_new(int bufsize, snd_midi_event_t **rdev) | ||||
| 	snd_midi_event_t *dev; | ||||
| 
 | ||||
| 	*rdev = NULL; | ||||
| 	dev = kcalloc(1, sizeof(*dev), GFP_KERNEL); | ||||
| 	dev = kzalloc(sizeof(*dev), GFP_KERNEL); | ||||
| 	if (dev == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	if (bufsize > 0) { | ||||
|  | ||||
| @ -141,7 +141,7 @@ client_port_t *snd_seq_create_port(client_t *client, int port) | ||||
| 	} | ||||
| 
 | ||||
| 	/* create a new port */ | ||||
| 	new_port = kcalloc(1, sizeof(*new_port), GFP_KERNEL); | ||||
| 	new_port = kzalloc(sizeof(*new_port), GFP_KERNEL); | ||||
| 	if (! new_port) { | ||||
| 		snd_printd("malloc failed for registering client port\n"); | ||||
| 		return NULL;	/* failure, out of memory */ | ||||
| @ -488,7 +488,7 @@ int snd_seq_port_connect(client_t *connector, | ||||
| 	unsigned long flags; | ||||
| 	int exclusive; | ||||
| 
 | ||||
| 	subs = kcalloc(1, sizeof(*subs), GFP_KERNEL); | ||||
| 	subs = kzalloc(sizeof(*subs), GFP_KERNEL); | ||||
| 	if (! subs) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
|  | ||||
| @ -59,7 +59,7 @@ prioq_t *snd_seq_prioq_new(void) | ||||
| { | ||||
| 	prioq_t *f; | ||||
| 
 | ||||
| 	f = kcalloc(1, sizeof(*f), GFP_KERNEL); | ||||
| 	f = kzalloc(sizeof(*f), GFP_KERNEL); | ||||
| 	if (f == NULL) { | ||||
| 		snd_printd("oops: malloc failed for snd_seq_prioq_new()\n"); | ||||
| 		return NULL; | ||||
|  | ||||
| @ -111,7 +111,7 @@ static queue_t *queue_new(int owner, int locked) | ||||
| { | ||||
| 	queue_t *q; | ||||
| 
 | ||||
| 	q = kcalloc(1, sizeof(*q), GFP_KERNEL); | ||||
| 	q = kzalloc(sizeof(*q), GFP_KERNEL); | ||||
| 	if (q == NULL) { | ||||
| 		snd_printd("malloc failed for snd_seq_queue_new()\n"); | ||||
| 		return NULL; | ||||
|  | ||||
| @ -126,8 +126,8 @@ int __init snd_seq_system_client_init(void) | ||||
| 	snd_seq_client_info_t *inf; | ||||
| 	snd_seq_port_info_t *port; | ||||
| 
 | ||||
| 	inf = kcalloc(1, sizeof(*inf), GFP_KERNEL); | ||||
| 	port = kcalloc(1, sizeof(*port), GFP_KERNEL); | ||||
| 	inf = kzalloc(sizeof(*inf), GFP_KERNEL); | ||||
| 	port = kzalloc(sizeof(*port), GFP_KERNEL); | ||||
| 	if (! inf || ! port) { | ||||
| 		kfree(inf); | ||||
| 		kfree(port); | ||||
|  | ||||
| @ -60,7 +60,7 @@ seq_timer_t *snd_seq_timer_new(void) | ||||
| { | ||||
| 	seq_timer_t *tmr; | ||||
| 	 | ||||
| 	tmr = kcalloc(1, sizeof(*tmr), GFP_KERNEL); | ||||
| 	tmr = kzalloc(sizeof(*tmr), GFP_KERNEL); | ||||
| 	if (tmr == NULL) { | ||||
| 		snd_printd("malloc failed for snd_seq_timer_new() \n"); | ||||
| 		return NULL; | ||||
|  | ||||
| @ -205,7 +205,7 @@ static int snd_virmidi_input_open(snd_rawmidi_substream_t * substream) | ||||
| 	snd_virmidi_t *vmidi; | ||||
| 	unsigned long flags; | ||||
| 
 | ||||
| 	vmidi = kcalloc(1, sizeof(*vmidi), GFP_KERNEL); | ||||
| 	vmidi = kzalloc(sizeof(*vmidi), GFP_KERNEL); | ||||
| 	if (vmidi == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	vmidi->substream = substream; | ||||
| @ -233,7 +233,7 @@ static int snd_virmidi_output_open(snd_rawmidi_substream_t * substream) | ||||
| 	snd_rawmidi_runtime_t *runtime = substream->runtime; | ||||
| 	snd_virmidi_t *vmidi; | ||||
| 
 | ||||
| 	vmidi = kcalloc(1, sizeof(*vmidi), GFP_KERNEL); | ||||
| 	vmidi = kzalloc(sizeof(*vmidi), GFP_KERNEL); | ||||
| 	if (vmidi == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	vmidi->substream = substream; | ||||
| @ -508,7 +508,7 @@ int snd_virmidi_new(snd_card_t *card, int device, snd_rawmidi_t **rrmidi) | ||||
| 				   &rmidi)) < 0) | ||||
| 		return err; | ||||
| 	strcpy(rmidi->name, rmidi->id); | ||||
| 	rdev = kcalloc(1, sizeof(*rdev), GFP_KERNEL); | ||||
| 	rdev = kzalloc(sizeof(*rdev), GFP_KERNEL); | ||||
| 	if (rdev == NULL) { | ||||
| 		snd_device_free(card, rmidi); | ||||
| 		return -ENOMEM; | ||||
|  | ||||
| @ -328,6 +328,10 @@ int __exit snd_minor_info_done(void) | ||||
|  *  INIT PART | ||||
|  */ | ||||
| 
 | ||||
| #ifdef CONFIG_SND_GENERIC_DRIVER | ||||
| extern struct device_driver snd_generic_driver; | ||||
| #endif | ||||
| 
 | ||||
| static int __init alsa_sound_init(void) | ||||
| { | ||||
| 	short controlnum; | ||||
| @ -354,6 +358,9 @@ static int __init alsa_sound_init(void) | ||||
| 		return -ENOMEM; | ||||
| 	} | ||||
| 	snd_info_minor_register(); | ||||
| #ifdef CONFIG_SND_GENERIC_DRIVER | ||||
| 	driver_register(&snd_generic_driver); | ||||
| #endif | ||||
| 	for (controlnum = 0; controlnum < cards_limit; controlnum++) | ||||
| 		devfs_mk_cdev(MKDEV(major, controlnum<<5), S_IFCHR | device_mode, "snd/controlC%d", controlnum); | ||||
| #ifndef MODULE | ||||
| @ -369,6 +376,9 @@ static void __exit alsa_sound_exit(void) | ||||
| 	for (controlnum = 0; controlnum < cards_limit; controlnum++) | ||||
| 		devfs_remove("snd/controlC%d", controlnum); | ||||
| 
 | ||||
| #ifdef CONFIG_SND_GENERIC_DRIVER | ||||
| 	driver_unregister(&snd_generic_driver); | ||||
| #endif | ||||
| 	snd_info_minor_unregister(); | ||||
| 	snd_info_done(); | ||||
| 	snd_memory_done(); | ||||
| @ -416,10 +426,13 @@ EXPORT_SYMBOL(snd_card_register); | ||||
| EXPORT_SYMBOL(snd_component_add); | ||||
| EXPORT_SYMBOL(snd_card_file_add); | ||||
| EXPORT_SYMBOL(snd_card_file_remove); | ||||
| #ifdef CONFIG_SND_GENERIC_DRIVER | ||||
| EXPORT_SYMBOL(snd_card_set_generic_dev); | ||||
| #endif | ||||
| #ifdef CONFIG_PM | ||||
| EXPORT_SYMBOL(snd_power_wait); | ||||
| EXPORT_SYMBOL(snd_card_set_pm_callback); | ||||
| #if defined(CONFIG_PM) && defined(CONFIG_SND_GENERIC_PM) | ||||
| #ifdef CONFIG_SND_GENERIC_DRIVER | ||||
| EXPORT_SYMBOL(snd_card_set_generic_pm_callback); | ||||
| #endif | ||||
| #ifdef CONFIG_PCI | ||||
|  | ||||
| @ -98,7 +98,7 @@ static void snd_timer_reschedule(snd_timer_t * timer, unsigned long ticks_left); | ||||
| static snd_timer_instance_t *snd_timer_instance_new(char *owner, snd_timer_t *timer) | ||||
| { | ||||
| 	snd_timer_instance_t *timeri; | ||||
| 	timeri = kcalloc(1, sizeof(*timeri), GFP_KERNEL); | ||||
| 	timeri = kzalloc(sizeof(*timeri), GFP_KERNEL); | ||||
| 	if (timeri == NULL) | ||||
| 		return NULL; | ||||
| 	timeri->owner = kstrdup(owner, GFP_KERNEL); | ||||
| @ -764,7 +764,7 @@ int snd_timer_new(snd_card_t *card, char *id, snd_timer_id_t *tid, snd_timer_t * | ||||
| 	snd_assert(tid != NULL, return -EINVAL); | ||||
| 	snd_assert(rtimer != NULL, return -EINVAL); | ||||
| 	*rtimer = NULL; | ||||
| 	timer = kcalloc(1, sizeof(*timer), GFP_KERNEL); | ||||
| 	timer = kzalloc(sizeof(*timer), GFP_KERNEL); | ||||
| 	if (timer == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	timer->tmr_class = tid->dev_class; | ||||
| @ -1017,7 +1017,7 @@ static int snd_timer_register_system(void) | ||||
| 		return err; | ||||
| 	strcpy(timer->name, "system timer"); | ||||
| 	timer->hw = snd_timer_system; | ||||
| 	priv = kcalloc(1, sizeof(*priv), GFP_KERNEL); | ||||
| 	priv = kzalloc(sizeof(*priv), GFP_KERNEL); | ||||
| 	if (priv == NULL) { | ||||
| 		snd_timer_free(timer); | ||||
| 		return -ENOMEM; | ||||
| @ -1202,7 +1202,7 @@ static int snd_timer_user_open(struct inode *inode, struct file *file) | ||||
| { | ||||
| 	snd_timer_user_t *tu; | ||||
| 	 | ||||
| 	tu = kcalloc(1, sizeof(*tu), GFP_KERNEL); | ||||
| 	tu = kzalloc(sizeof(*tu), GFP_KERNEL); | ||||
| 	if (tu == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	spin_lock_init(&tu->qlock); | ||||
| @ -1513,7 +1513,7 @@ static int snd_timer_user_info(struct file *file, snd_timer_info_t __user *_info | ||||
| 	t = tu->timeri->timer; | ||||
| 	snd_assert(t != NULL, return -ENXIO); | ||||
| 
 | ||||
| 	info = kcalloc(1, sizeof(*info), GFP_KERNEL); | ||||
| 	info = kzalloc(sizeof(*info), GFP_KERNEL); | ||||
| 	if (! info) | ||||
| 		return -ENOMEM; | ||||
| 	info->card = t->card ? t->card->number : -1; | ||||
|  | ||||
| @ -29,6 +29,7 @@ config SND_DUMMY | ||||
| 	tristate "Dummy (/dev/null) soundcard" | ||||
| 	depends on SND | ||||
| 	select SND_PCM | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 	help | ||||
| 	  Say Y here to include the dummy driver.  This driver does | ||||
| 	  nothing, but emulates various mixer controls and PCM devices. | ||||
| @ -44,6 +45,7 @@ config SND_VIRMIDI | ||||
| 	depends on SND_SEQUENCER | ||||
| 	select SND_TIMER | ||||
| 	select SND_RAWMIDI | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 	help | ||||
| 	  Say Y here to include the virtual MIDI driver.  This driver | ||||
| 	  allows to connect applications using raw MIDI devices to | ||||
| @ -59,6 +61,7 @@ config SND_MTPAV | ||||
| 	depends on SND | ||||
| 	select SND_TIMER | ||||
| 	select SND_RAWMIDI | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 	help | ||||
| 	  To use a MOTU MidiTimePiece AV multiport MIDI adapter | ||||
| 	  connected to the parallel port, say Y here and make sure that | ||||
| @ -72,6 +75,7 @@ config SND_SERIAL_U16550 | ||||
| 	depends on SND | ||||
| 	select SND_TIMER | ||||
| 	select SND_RAWMIDI | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 	help | ||||
| 	  To include support for MIDI serial port interfaces, say Y here | ||||
| 	  and read <file:Documentation/sound/alsa/serial-u16550.txt>. | ||||
| @ -88,6 +92,7 @@ config SND_MPU401 | ||||
| 	tristate "Generic MPU-401 UART driver" | ||||
| 	depends on SND | ||||
| 	select SND_MPU401_UART | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 	help | ||||
| 	  Say Y here to include support for MIDI ports compatible with | ||||
| 	  the Roland MPU-401 interface in UART mode. | ||||
|  | ||||
| @ -337,7 +337,7 @@ static int snd_card_dummy_playback_open(snd_pcm_substream_t * substream) | ||||
| 	snd_card_dummy_pcm_t *dpcm; | ||||
| 	int err; | ||||
| 
 | ||||
| 	dpcm = kcalloc(1, sizeof(*dpcm), GFP_KERNEL); | ||||
| 	dpcm = kzalloc(sizeof(*dpcm), GFP_KERNEL); | ||||
| 	if (dpcm == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	init_timer(&dpcm->timer); | ||||
| @ -368,7 +368,7 @@ static int snd_card_dummy_capture_open(snd_pcm_substream_t * substream) | ||||
| 	snd_card_dummy_pcm_t *dpcm; | ||||
| 	int err; | ||||
| 
 | ||||
| 	dpcm = kcalloc(1, sizeof(*dpcm), GFP_KERNEL); | ||||
| 	dpcm = kzalloc(sizeof(*dpcm), GFP_KERNEL); | ||||
| 	if (dpcm == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	init_timer(&dpcm->timer); | ||||
| @ -600,6 +600,10 @@ static int __init snd_card_dummy_probe(int dev) | ||||
| 	strcpy(card->driver, "Dummy"); | ||||
| 	strcpy(card->shortname, "Dummy"); | ||||
| 	sprintf(card->longname, "Dummy %i", dev + 1); | ||||
| 
 | ||||
| 	if ((err = snd_card_set_generic_dev(card)) < 0) | ||||
| 		goto __nodev; | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) == 0) { | ||||
| 		snd_dummy_cards[dev] = card; | ||||
| 		return 0; | ||||
|  | ||||
| @ -77,20 +77,26 @@ static int snd_mpu401_create(int dev, snd_card_t **rcard) | ||||
| 		strcat(card->longname, "polled"); | ||||
| 	} | ||||
| 
 | ||||
| 	if (snd_mpu401_uart_new(card, 0, | ||||
| 				MPU401_HW_MPU401, | ||||
| 				port[dev], 0, | ||||
| 				irq[dev], irq[dev] >= 0 ? SA_INTERRUPT : 0, NULL) < 0) { | ||||
| 	if ((err = snd_mpu401_uart_new(card, 0, | ||||
| 				       MPU401_HW_MPU401, | ||||
| 				       port[dev], 0, | ||||
| 				       irq[dev], irq[dev] >= 0 ? SA_INTERRUPT : 0, NULL)) < 0) { | ||||
| 		printk(KERN_ERR "MPU401 not detected at 0x%lx\n", port[dev]); | ||||
| 		snd_card_free(card); | ||||
| 		return -ENODEV; | ||||
| 	} | ||||
| 	if ((err = snd_card_register(card)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 		goto _err; | ||||
| 	} | ||||
| 
 | ||||
| 	if ((err = snd_card_set_generic_dev(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	*rcard = card; | ||||
| 	return 0; | ||||
| 
 | ||||
|  _err: | ||||
| 	snd_card_free(card); | ||||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| static int __devinit snd_mpu401_probe(int dev) | ||||
|  | ||||
| @ -463,7 +463,7 @@ int snd_mpu401_uart_new(snd_card_t * card, int device, | ||||
| 		*rrawmidi = NULL; | ||||
| 	if ((err = snd_rawmidi_new(card, "MPU-401U", device, 1, 1, &rmidi)) < 0) | ||||
| 		return err; | ||||
| 	mpu = kcalloc(1, sizeof(*mpu), GFP_KERNEL); | ||||
| 	mpu = kzalloc(sizeof(*mpu), GFP_KERNEL); | ||||
| 	if (mpu == NULL) { | ||||
| 		snd_device_free(card, rmidi); | ||||
| 		return -ENOMEM; | ||||
|  | ||||
| @ -688,7 +688,7 @@ static int snd_mtpav_get_RAWMIDI(mtpav_t * mcard) | ||||
| 
 | ||||
| static mtpav_t *new_mtpav(void) | ||||
| { | ||||
| 	mtpav_t *ncrd = kcalloc(1, sizeof(*ncrd), GFP_KERNEL); | ||||
| 	mtpav_t *ncrd = kzalloc(sizeof(*ncrd), GFP_KERNEL); | ||||
| 	if (ncrd != NULL) { | ||||
| 		spin_lock_init(&ncrd->spinlock); | ||||
| 
 | ||||
| @ -757,6 +757,9 @@ static int __init alsa_card_mtpav_init(void) | ||||
| 	if (err < 0) | ||||
| 		goto __error; | ||||
| 
 | ||||
| 	if ((err = snd_card_set_generic_dev(mtp_card->card)) < 0) | ||||
| 		goto __error; | ||||
| 
 | ||||
| 	err = snd_card_register(mtp_card->card);	// don't snd_card_register until AFTER all cards reources done!
 | ||||
| 
 | ||||
| 	//printk("snd_card_register returned %d\n", err);
 | ||||
|  | ||||
| @ -354,7 +354,7 @@ int snd_opl3_new(snd_card_t *card, | ||||
| 	int err; | ||||
| 
 | ||||
| 	*ropl3 = NULL; | ||||
| 	opl3 = kcalloc(1, sizeof(*opl3), GFP_KERNEL); | ||||
| 	opl3 = kzalloc(sizeof(*opl3), GFP_KERNEL); | ||||
| 	if (opl3 == NULL) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
|  | ||||
| @ -241,7 +241,7 @@ static int snd_opl3_load_patch_seq_oss(snd_seq_oss_arg_t *arg, int format, | ||||
| 		} | ||||
| 
 | ||||
| 		size = sizeof(*put) + sizeof(fm_xinstrument_t); | ||||
| 		put = kcalloc(1, size, GFP_KERNEL); | ||||
| 		put = kzalloc(size, GFP_KERNEL); | ||||
| 		if (put == NULL) | ||||
| 			return -ENOMEM; | ||||
| 		/* build header */ | ||||
|  | ||||
| @ -204,7 +204,7 @@ int snd_opl4_create(snd_card_t *card, | ||||
| 	if (ropl4) | ||||
| 		*ropl4 = NULL; | ||||
| 
 | ||||
| 	opl4 = kcalloc(1, sizeof(*opl4), GFP_KERNEL); | ||||
| 	opl4 = kzalloc(sizeof(*opl4), GFP_KERNEL); | ||||
| 	if (!opl4) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
|  | ||||
| @ -779,7 +779,7 @@ static int __init snd_uart16550_create(snd_card_t * card, | ||||
| 	int err; | ||||
| 
 | ||||
| 
 | ||||
| 	if ((uart = kcalloc(1, sizeof(*uart), GFP_KERNEL)) == NULL) | ||||
| 	if ((uart = kzalloc(sizeof(*uart), GFP_KERNEL)) == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	uart->adaptor = adaptor; | ||||
| 	uart->card = card; | ||||
| @ -928,15 +928,11 @@ static int __init snd_serial_probe(int dev) | ||||
| 					base[dev], | ||||
| 					adaptor[dev], | ||||
| 					droponfull[dev], | ||||
| 					&uart)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 					&uart)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_uart16550_rmidi(uart, 0, outs[dev], ins[dev], &uart->rmidi)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_uart16550_rmidi(uart, 0, outs[dev], ins[dev], &uart->rmidi)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	sprintf(card->longname, "%s at 0x%lx, irq %d speed %d div %d outs %d ins %d adaptor %s droponfull %d", | ||||
| 		card->shortname, | ||||
| @ -949,12 +945,18 @@ static int __init snd_serial_probe(int dev) | ||||
| 		adaptor_names[uart->adaptor], | ||||
| 		uart->drop_on_full); | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_card_set_generic_dev(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	snd_serial_cards[dev] = card; | ||||
| 	return 0; | ||||
| 
 | ||||
|  _err: | ||||
| 	snd_card_free(card); | ||||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| static int __init alsa_card_serial_init(void) | ||||
|  | ||||
| @ -116,6 +116,10 @@ static int __init snd_card_virmidi_probe(int dev) | ||||
| 	strcpy(card->driver, "VirMIDI"); | ||||
| 	strcpy(card->shortname, "VirMIDI"); | ||||
| 	sprintf(card->longname, "Virtual MIDI Card %i", dev + 1); | ||||
| 
 | ||||
| 	if ((err = snd_card_set_generic_dev(card)) < 0) | ||||
| 		goto __nodev; | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) == 0) { | ||||
| 		snd_virmidi_cards[dev] = card; | ||||
| 		return 0; | ||||
|  | ||||
| @ -782,7 +782,7 @@ vx_core_t *snd_vx_create(snd_card_t *card, struct snd_vx_hardware *hw, | ||||
| 
 | ||||
| 	snd_assert(card && hw && ops, return NULL); | ||||
| 
 | ||||
| 	chip = kcalloc(1, sizeof(*chip) + extra_size, GFP_KERNEL); | ||||
| 	chip = kzalloc(sizeof(*chip) + extra_size, GFP_KERNEL); | ||||
| 	if (! chip) { | ||||
| 		snd_printk(KERN_ERR "vx_core: no memory\n"); | ||||
| 		return NULL; | ||||
|  | ||||
| @ -473,7 +473,7 @@ static int vx_alloc_pipe(vx_core_t *chip, int capture, | ||||
| 		return err; | ||||
| 
 | ||||
| 	/* initialize the pipe record */ | ||||
| 	pipe = kcalloc(1, sizeof(*pipe), GFP_KERNEL); | ||||
| 	pipe = kzalloc(sizeof(*pipe), GFP_KERNEL); | ||||
| 	if (! pipe) { | ||||
| 		/* release the pipe */ | ||||
| 		vx_init_rmh(&rmh, CMD_FREE_PIPE); | ||||
|  | ||||
| @ -200,7 +200,7 @@ int snd_cs8427_create(snd_i2c_bus_t *bus, | ||||
| 
 | ||||
| 	if ((err = snd_i2c_device_create(bus, "CS8427", CS8427_ADDR | (addr & 7), &device)) < 0) | ||||
| 		return err; | ||||
| 	chip = device->private_data = kcalloc(1, sizeof(*chip), GFP_KERNEL); | ||||
| 	chip = device->private_data = kzalloc(sizeof(*chip), GFP_KERNEL); | ||||
| 	if (chip == NULL) { | ||||
| 	      	snd_i2c_device_free(device); | ||||
| 		return -ENOMEM; | ||||
|  | ||||
| @ -81,7 +81,7 @@ int snd_i2c_bus_create(snd_card_t *card, const char *name, snd_i2c_bus_t *master | ||||
| 	}; | ||||
| 
 | ||||
| 	*ri2c = NULL; | ||||
| 	bus = kcalloc(1, sizeof(*bus), GFP_KERNEL); | ||||
| 	bus = kzalloc(sizeof(*bus), GFP_KERNEL); | ||||
| 	if (bus == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	init_MUTEX(&bus->lock_mutex); | ||||
| @ -108,7 +108,7 @@ int snd_i2c_device_create(snd_i2c_bus_t *bus, const char *name, unsigned char ad | ||||
| 
 | ||||
| 	*rdevice = NULL; | ||||
| 	snd_assert(bus != NULL, return -EINVAL); | ||||
| 	device = kcalloc(1, sizeof(*device), GFP_KERNEL); | ||||
| 	device = kzalloc(sizeof(*device), GFP_KERNEL); | ||||
| 	if (device == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	device->addr = addr; | ||||
|  | ||||
| @ -17,7 +17,7 @@ | ||||
|  * 2002-05-12   Tomas Kasparek  another code cleanup | ||||
|  */ | ||||
| 
 | ||||
| /* $Id: uda1341.c,v 1.15 2005/01/03 12:05:20 tiwai Exp $ */ | ||||
| /* $Id: uda1341.c,v 1.16 2005/09/09 13:22:34 tiwai Exp $ */ | ||||
| 
 | ||||
| #include <sound/driver.h> | ||||
| #include <linux/module.h> | ||||
| @ -670,7 +670,7 @@ int __init snd_chip_uda1341_mixer_new(snd_card_t *card, struct l3_client **clnt) | ||||
| 
 | ||||
| 	snd_assert(card != NULL, return -EINVAL); | ||||
| 
 | ||||
| 	uda1341 = kcalloc(1, sizeof(*uda1341), GFP_KERNEL); | ||||
| 	uda1341 = kzalloc(sizeof(*uda1341), GFP_KERNEL); | ||||
| 	if (uda1341 == NULL) | ||||
| 		return -ENOMEM; | ||||
|           | ||||
| @ -707,7 +707,7 @@ static int uda1341_attach(struct l3_client *clnt) | ||||
| { | ||||
| 	struct uda1341 *uda; | ||||
| 
 | ||||
| 	uda = kcalloc(1, sizeof(*uda), 0, GFP_KERNEL); | ||||
| 	uda = kzalloc(sizeof(*uda), 0, GFP_KERNEL); | ||||
| 	if (!uda) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
|  | ||||
| @ -92,7 +92,7 @@ int snd_ak4114_create(snd_card_t *card, | ||||
| 		.dev_free =     snd_ak4114_dev_free, | ||||
| 	}; | ||||
| 
 | ||||
| 	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL); | ||||
| 	chip = kzalloc(sizeof(*chip), GFP_KERNEL); | ||||
| 	if (chip == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	spin_lock_init(&chip->lock); | ||||
|  | ||||
| @ -83,7 +83,7 @@ int snd_ak4117_create(snd_card_t *card, ak4117_read_t *read, ak4117_write_t *wri | ||||
| 		.dev_free =     snd_ak4117_dev_free, | ||||
| 	}; | ||||
| 
 | ||||
| 	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL); | ||||
| 	chip = kzalloc(sizeof(*chip), GFP_KERNEL); | ||||
| 	if (chip == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	spin_lock_init(&chip->lock); | ||||
|  | ||||
| @ -281,7 +281,7 @@ int snd_tea6330t_update_mixer(snd_card_t * card, | ||||
| 	u8 default_treble, default_bass; | ||||
| 	unsigned char bytes[7]; | ||||
| 
 | ||||
| 	tea = kcalloc(1, sizeof(*tea), GFP_KERNEL); | ||||
| 	tea = kzalloc(sizeof(*tea), GFP_KERNEL); | ||||
| 	if (tea == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	if ((err = snd_i2c_device_create(bus, "TEA6330T", TEA6330T_ADDR, &device)) < 0) { | ||||
|  | ||||
| @ -6,12 +6,12 @@ menu "ISA devices" | ||||
| config SND_AD1848_LIB | ||||
|         tristate | ||||
|         select SND_PCM | ||||
| 	select SND_GENERIC_PM | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 
 | ||||
| config SND_CS4231_LIB | ||||
|         tristate | ||||
|         select SND_PCM | ||||
| 	select SND_GENERIC_PM | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 
 | ||||
| config SND_AD1816A | ||||
| 	tristate "Analog Devices SoundPort AD1816A" | ||||
| @ -97,6 +97,7 @@ config SND_ES1688 | ||||
| 	select SND_OPL3_LIB | ||||
| 	select SND_MPU401_UART | ||||
| 	select SND_PCM | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 	help | ||||
| 	  Say Y here to include support for ESS AudioDrive ES688 or | ||||
| 	  ES1688 chips. | ||||
| @ -110,7 +111,7 @@ config SND_ES18XX | ||||
| 	select SND_OPL3_LIB | ||||
| 	select SND_MPU401_UART | ||||
| 	select SND_PCM | ||||
| 	select SND_GENERIC_PM | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 	help | ||||
| 	  Say Y here to include support for ESS AudioDrive ES18xx chips. | ||||
| 
 | ||||
| @ -126,6 +127,7 @@ config SND_GUSCLASSIC | ||||
| 	select SND_RAWMIDI | ||||
| 	select SND_PCM | ||||
| 	select SND_GUS_SYNTH | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 	help | ||||
| 	  Say Y here to include support for Gravis UltraSound Classic | ||||
| 	  soundcards. | ||||
| @ -140,6 +142,7 @@ config SND_GUSEXTREME | ||||
| 	select SND_MPU401_UART | ||||
| 	select SND_PCM | ||||
| 	select SND_GUS_SYNTH | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 	help | ||||
| 	  Say Y here to include support for Gravis UltraSound Extreme | ||||
| 	  soundcards. | ||||
| @ -153,6 +156,7 @@ config SND_GUSMAX | ||||
| 	select SND_RAWMIDI | ||||
| 	select SND_CS4231_LIB | ||||
| 	select SND_GUS_SYNTH | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 	help | ||||
| 	  Say Y here to include support for Gravis UltraSound MAX | ||||
| 	  soundcards. | ||||
| @ -166,7 +170,7 @@ config SND_INTERWAVE | ||||
| 	select SND_RAWMIDI | ||||
| 	select SND_CS4231_LIB | ||||
| 	select SND_GUS_SYNTH | ||||
| 	select ISAPNP | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 	help | ||||
| 	  Say Y here to include support for AMD InterWave based | ||||
| 	  soundcards (Gravis UltraSound Plug & Play, STB SoundRage32, | ||||
| @ -181,7 +185,7 @@ config SND_INTERWAVE_STB | ||||
| 	select SND_RAWMIDI | ||||
| 	select SND_CS4231_LIB | ||||
| 	select SND_GUS_SYNTH | ||||
| 	select ISAPNP | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 	help | ||||
| 	  Say Y here to include support for AMD InterWave based | ||||
| 	  soundcards with a TEA6330T bass and treble regulator | ||||
| @ -224,6 +228,7 @@ config SND_OPTI93X | ||||
| 	select SND_OPL3_LIB | ||||
| 	select SND_MPU401_UART | ||||
| 	select SND_PCM | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 	help | ||||
| 	  Say Y here to include support for soundcards based on Opti | ||||
| 	  82C93x chips. | ||||
| @ -237,6 +242,7 @@ config SND_SB8 | ||||
| 	select SND_OPL3_LIB | ||||
| 	select SND_RAWMIDI | ||||
| 	select SND_PCM | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 	help | ||||
| 	  Say Y here to include support for Creative Sound Blaster 1.0/ | ||||
| 	  2.0/Pro (8-bit) or 100% compatible soundcards. | ||||
| @ -250,6 +256,7 @@ config SND_SB16 | ||||
| 	select SND_OPL3_LIB | ||||
| 	select SND_MPU401_UART | ||||
| 	select SND_PCM | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 	help | ||||
| 	  Say Y here to include support for Sound Blaster 16 soundcards | ||||
| 	  (including the Plug and Play version). | ||||
| @ -263,6 +270,7 @@ config SND_SBAWE | ||||
| 	select SND_OPL3_LIB | ||||
| 	select SND_MPU401_UART | ||||
| 	select SND_PCM | ||||
| 	select SND_GENERIC_DRIVER | ||||
| 	help | ||||
| 	  Say Y here to include support for Sound Blaster AWE soundcards | ||||
| 	  (including the Plug and Play version). | ||||
|  | ||||
| @ -591,7 +591,7 @@ int snd_ad1816a_create(snd_card_t *card, | ||||
| 
 | ||||
| 	*rchip = NULL; | ||||
| 
 | ||||
| 	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL); | ||||
| 	chip = kzalloc(sizeof(*chip), GFP_KERNEL); | ||||
| 	if (chip == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	chip->irq = -1; | ||||
|  | ||||
| @ -91,35 +91,36 @@ static int __init snd_card_ad1848_probe(int dev) | ||||
| 				     irq[dev], | ||||
| 				     dma1[dev], | ||||
| 				     thinkpad[dev] ? AD1848_HW_THINKPAD : AD1848_HW_DETECT, | ||||
| 				     &chip)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 				     &chip)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_ad1848_pcm(chip, 0, &pcm)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_ad1848_mixer(chip)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_ad1848_pcm(chip, 0, &pcm)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_ad1848_mixer(chip)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	strcpy(card->driver, "AD1848"); | ||||
| 	strcpy(card->shortname, pcm->name); | ||||
| 
 | ||||
| 	sprintf(card->longname, "%s at 0x%lx, irq %d, dma %d", | ||||
| 		pcm->name, chip->port, irq[dev], dma1[dev]); | ||||
| 
 | ||||
| 	if (thinkpad[dev]) { | ||||
| 	if (thinkpad[dev]) | ||||
| 		strcat(card->longname, " [Thinkpad]"); | ||||
| 	} | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_card_set_generic_dev(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	snd_ad1848_cards[dev] = card; | ||||
| 	return 0; | ||||
| 
 | ||||
|  _err: | ||||
| 	snd_card_free(card); | ||||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| static int __init alsa_card_ad1848_init(void) | ||||
|  | ||||
| @ -890,7 +890,7 @@ int snd_ad1848_create(snd_card_t * card, | ||||
| 	int err; | ||||
| 
 | ||||
| 	*rchip = NULL; | ||||
| 	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL); | ||||
| 	chip = kzalloc(sizeof(*chip), GFP_KERNEL); | ||||
| 	if (chip == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	spin_lock_init(&chip->reg_lock); | ||||
|  | ||||
| @ -438,33 +438,37 @@ static int __devinit snd_cmi8330_pcm(snd_card_t *card, struct snd_cmi8330 *chip) | ||||
| /*
 | ||||
|  */ | ||||
| 
 | ||||
| #ifdef CONFIG_PNP | ||||
| #define is_isapnp_selected(dev)		isapnp[dev] | ||||
| #else | ||||
| #define is_isapnp_selected(dev)		0 | ||||
| #endif | ||||
| 
 | ||||
| #define PFX	"cmi8330: " | ||||
| 
 | ||||
| static int __devinit snd_cmi8330_probe(int dev, | ||||
| 				       struct pnp_card_link *pcard, | ||||
| 				       const struct pnp_card_device_id *pid) | ||||
| { | ||||
| 	snd_card_t *card; | ||||
| 	struct snd_cmi8330 *acard; | ||||
| 	unsigned long flags; | ||||
| 	int i, err; | ||||
| 
 | ||||
| #ifdef CONFIG_PNP | ||||
| 	if (!isapnp[dev]) { | ||||
| #endif | ||||
| 	if (! is_isapnp_selected(dev)) { | ||||
| 		if (wssport[dev] == SNDRV_AUTO_PORT) { | ||||
| 			snd_printk("specify wssport\n"); | ||||
| 			snd_printk(KERN_ERR PFX "specify wssport\n"); | ||||
| 			return -EINVAL; | ||||
| 		} | ||||
| 		if (sbport[dev] == SNDRV_AUTO_PORT) { | ||||
| 			snd_printk("specify sbport\n"); | ||||
| 			snd_printk(KERN_ERR PFX "specify sbport\n"); | ||||
| 			return -EINVAL; | ||||
| 		} | ||||
| #ifdef CONFIG_PNP | ||||
| 	} | ||||
| #endif | ||||
| 
 | ||||
| 	card = snd_card_new(index[dev], id[dev], THIS_MODULE, | ||||
| 			    sizeof(struct snd_cmi8330)); | ||||
| 	if (card == NULL) { | ||||
| 		snd_printk("could not get a new card\n"); | ||||
| 		snd_printk(KERN_ERR PFX "could not get a new card\n"); | ||||
| 		return -ENOMEM; | ||||
| 	} | ||||
| 	acard = (struct snd_cmi8330 *)card->private_data; | ||||
| @ -473,9 +477,8 @@ static int __devinit snd_cmi8330_probe(int dev, | ||||
| #ifdef CONFIG_PNP | ||||
| 	if (isapnp[dev]) { | ||||
| 		if ((err = snd_cmi8330_pnp(dev, acard, pcard, pid)) < 0) { | ||||
| 			snd_printk("PnP detection failed\n"); | ||||
| 			snd_card_free(card); | ||||
| 			return err; | ||||
| 			snd_printk(KERN_ERR PFX "PnP detection failed\n"); | ||||
| 			goto _err; | ||||
| 		} | ||||
| 		snd_card_set_dev(card, &pcard->card->dev); | ||||
| 	} | ||||
| @ -487,14 +490,13 @@ static int __devinit snd_cmi8330_probe(int dev, | ||||
| 				     wssdma[dev], | ||||
| 				     AD1848_HW_DETECT, | ||||
| 				     &acard->wss)) < 0) { | ||||
| 		snd_printk("(AD1848) device busy??\n"); | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 		snd_printk(KERN_ERR PFX "(AD1848) device busy??\n"); | ||||
| 		goto _err; | ||||
| 	} | ||||
| 	if (acard->wss->hardware != AD1848_HW_CMI8330) { | ||||
| 		snd_printk("(AD1848) not found during probe\n"); | ||||
| 		snd_card_free(card); | ||||
| 		return -ENODEV; | ||||
| 		snd_printk(KERN_ERR PFX "(AD1848) not found during probe\n"); | ||||
| 		err = -ENODEV; | ||||
| 		goto _err; | ||||
| 	} | ||||
| 
 | ||||
| 	if ((err = snd_sbdsp_create(card, sbport[dev], | ||||
| @ -503,32 +505,26 @@ static int __devinit snd_cmi8330_probe(int dev, | ||||
| 				    sbdma8[dev], | ||||
| 				    sbdma16[dev], | ||||
| 				    SB_HW_AUTO, &acard->sb)) < 0) { | ||||
| 		snd_printk("(SB16) device busy??\n"); | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 		snd_printk(KERN_ERR PFX "(SB16) device busy??\n"); | ||||
| 		goto _err; | ||||
| 	} | ||||
| 	if (acard->sb->hardware != SB_HW_16) { | ||||
| 		snd_printk("(SB16) not found during probe\n"); | ||||
| 		snd_card_free(card); | ||||
| 		return -ENODEV; | ||||
| 		snd_printk(KERN_ERR PFX "(SB16) not found during probe\n"); | ||||
| 		goto _err; | ||||
| 	} | ||||
| 
 | ||||
| 	spin_lock_irqsave(&acard->wss->reg_lock, flags); | ||||
| 	snd_ad1848_out(acard->wss, AD1848_MISC_INFO, 0x40); /* switch on MODE2 */ | ||||
| 	for (i = CMI8330_RMUX3D; i <= CMI8330_CDINGAIN; i++) | ||||
| 		snd_ad1848_out(acard->wss, i, snd_cmi8330_image[i - CMI8330_RMUX3D]); | ||||
| 	spin_unlock_irqrestore(&acard->wss->reg_lock, flags); | ||||
| 
 | ||||
| 	if ((err = snd_cmi8330_mixer(card, acard)) < 0) { | ||||
| 		snd_printk("failed to create mixers\n"); | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 		snd_printk(KERN_ERR PFX "failed to create mixers\n"); | ||||
| 		goto _err; | ||||
| 	} | ||||
| 
 | ||||
| 	if ((err = snd_cmi8330_pcm(card, acard)) < 0) { | ||||
| 		snd_printk("failed to create pcms\n"); | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 		snd_printk(KERN_ERR PFX "failed to create pcms\n"); | ||||
| 		goto _err; | ||||
| 	} | ||||
| 
 | ||||
| 	strcpy(card->driver, "CMI8330/C3D"); | ||||
| @ -539,16 +535,21 @@ static int __devinit snd_cmi8330_probe(int dev, | ||||
| 		wssirq[dev], | ||||
| 		wssdma[dev]); | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_card_set_generic_dev(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if (pcard) | ||||
| 		pnp_set_card_drvdata(pcard, card); | ||||
| 	else | ||||
| 		snd_cmi8330_legacy[dev] = card; | ||||
| 	return 0; | ||||
| 
 | ||||
|  _err: | ||||
| 	snd_card_free(card); | ||||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_PNP | ||||
| @ -594,10 +595,8 @@ static int __init alsa_card_cmi8330_init(void) | ||||
| 	for (dev = 0; dev < SNDRV_CARDS; dev++) { | ||||
| 		if (!enable[dev]) | ||||
| 			continue; | ||||
| #ifdef CONFIG_PNP | ||||
| 		if (isapnp[dev]) | ||||
| 		if (is_isapnp_selected(dev)) | ||||
| 			continue; | ||||
| #endif | ||||
| 		if (snd_cmi8330_probe(dev, NULL, NULL) >= 0) | ||||
| 			cards++; | ||||
| 	} | ||||
|  | ||||
| @ -76,15 +76,15 @@ static int __init snd_card_cs4231_probe(int dev) | ||||
| 	int err; | ||||
| 
 | ||||
| 	if (port[dev] == SNDRV_AUTO_PORT) { | ||||
| 		snd_printk("specify port\n"); | ||||
| 		snd_printk(KERN_ERR "specify port\n"); | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
| 	if (irq[dev] == SNDRV_AUTO_IRQ) { | ||||
| 		snd_printk("specify irq\n"); | ||||
| 		snd_printk(KERN_ERR "specify irq\n"); | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
| 	if (dma1[dev] == SNDRV_AUTO_DMA) { | ||||
| 		snd_printk("specify dma1\n"); | ||||
| 		snd_printk(KERN_ERR "specify dma1\n"); | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
| 	card = snd_card_new(index[dev], id[dev], THIS_MODULE, 0); | ||||
| @ -96,15 +96,11 @@ static int __init snd_card_cs4231_probe(int dev) | ||||
| 				     dma1[dev], | ||||
| 				     dma2[dev], | ||||
| 				     CS4231_HW_DETECT, | ||||
| 				     0, &chip)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 				     0, &chip)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_cs4231_pcm(chip, 0, &pcm)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_cs4231_pcm(chip, 0, &pcm)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	strcpy(card->driver, "CS4231"); | ||||
| 	strcpy(card->shortname, pcm->name); | ||||
| @ -113,14 +109,10 @@ static int __init snd_card_cs4231_probe(int dev) | ||||
| 	if (dma2[dev] >= 0) | ||||
| 		sprintf(card->longname + strlen(card->longname), "&%d", dma2[dev]); | ||||
| 
 | ||||
| 	if ((err = snd_cs4231_mixer(chip)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_cs4231_timer(chip, 0, NULL)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_cs4231_mixer(chip)) < 0) | ||||
| 		goto _err; | ||||
| 	if ((err = snd_cs4231_timer(chip, 0, NULL)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if (mpu_port[dev] > 0 && mpu_port[dev] != SNDRV_AUTO_PORT) { | ||||
| 		if (mpu_irq[dev] == SNDRV_AUTO_IRQ) | ||||
| @ -130,14 +122,20 @@ static int __init snd_card_cs4231_probe(int dev) | ||||
| 					mpu_irq[dev], | ||||
| 					mpu_irq[dev] >= 0 ? SA_INTERRUPT : 0, | ||||
| 					NULL) < 0) | ||||
| 			printk(KERN_ERR "cs4231: MPU401 not detected\n"); | ||||
| 	} | ||||
| 	if ((err = snd_card_register(card)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 			printk(KERN_WARNING "cs4231: MPU401 not detected\n"); | ||||
| 	} | ||||
| 
 | ||||
| 	if ((err = snd_card_set_generic_dev(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) | ||||
| 		goto _err; | ||||
| 	snd_cs4231_cards[dev] = card; | ||||
| 	return 0; | ||||
| 
 | ||||
|  _err: | ||||
| 	snd_card_free(card); | ||||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| static int __init alsa_card_cs4231_init(void) | ||||
|  | ||||
| @ -1480,7 +1480,7 @@ static int snd_cs4231_new(snd_card_t * card, | ||||
| 	cs4231_t *chip; | ||||
| 
 | ||||
| 	*rchip = NULL; | ||||
| 	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL); | ||||
| 	chip = kzalloc(sizeof(*chip), GFP_KERNEL); | ||||
| 	if (chip == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	chip->hardware = hardware; | ||||
|  | ||||
| @ -387,6 +387,12 @@ static void snd_card_cs4236_free(snd_card_t *card) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_PNP | ||||
| #define is_isapnp_selected(dev)		isapnp[dev] | ||||
| #else | ||||
| #define is_isapnp_selected(dev)		0 | ||||
| #endif | ||||
| 
 | ||||
| static int __devinit snd_card_cs423x_probe(int dev, struct pnp_card_link *pcard, | ||||
| 					   const struct pnp_card_device_id *pid) | ||||
| { | ||||
| @ -397,20 +403,16 @@ static int __devinit snd_card_cs423x_probe(int dev, struct pnp_card_link *pcard, | ||||
| 	opl3_t *opl3; | ||||
| 	int err; | ||||
| 
 | ||||
| #ifdef CONFIG_PNP | ||||
| 	if (!isapnp[dev]) { | ||||
| #endif | ||||
| 	if (! is_isapnp_selected(dev)) { | ||||
| 		if (port[dev] == SNDRV_AUTO_PORT) { | ||||
| 			snd_printk("specify port\n"); | ||||
| 			snd_printk(KERN_ERR "specify port\n"); | ||||
| 			return -EINVAL; | ||||
| 		} | ||||
| 		if (cport[dev] == SNDRV_AUTO_PORT) { | ||||
| 			snd_printk("specify cport\n"); | ||||
| 			snd_printk(KERN_ERR "specify cport\n"); | ||||
| 			return -EINVAL; | ||||
| 		} | ||||
| #ifdef CONFIG_PNP | ||||
| 	} | ||||
| #endif | ||||
| 	card = snd_card_new(index[dev], id[dev], THIS_MODULE, | ||||
| 			    sizeof(struct snd_card_cs4236)); | ||||
| 	if (card == NULL) | ||||
| @ -421,8 +423,7 @@ static int __devinit snd_card_cs423x_probe(int dev, struct pnp_card_link *pcard, | ||||
| 	if (isapnp[dev]) { | ||||
| 		if ((err = snd_card_cs4236_pnp(dev, acard, pcard, pid))<0) { | ||||
| 			printk(KERN_ERR "isapnp detection failed and probing for " IDENT " is not supported\n"); | ||||
| 			snd_card_free(card); | ||||
| 			return -ENXIO; | ||||
| 			goto _err; | ||||
| 		} | ||||
| 		snd_card_set_dev(card, &pcard->card->dev); | ||||
| 	} | ||||
| @ -430,8 +431,8 @@ static int __devinit snd_card_cs423x_probe(int dev, struct pnp_card_link *pcard, | ||||
| 	if (sb_port[dev] > 0 && sb_port[dev] != SNDRV_AUTO_PORT) | ||||
| 		if ((acard->res_sb_port = request_region(sb_port[dev], 16, IDENT " SB")) == NULL) { | ||||
| 			printk(KERN_ERR IDENT ": unable to register SB port at 0x%lx\n", sb_port[dev]); | ||||
| 			snd_card_free(card); | ||||
| 			return -ENOMEM; | ||||
| 			err = -EBUSY; | ||||
| 			goto _err; | ||||
| 		} | ||||
| 
 | ||||
| #ifdef CS4232 | ||||
| @ -443,18 +444,14 @@ static int __devinit snd_card_cs423x_probe(int dev, struct pnp_card_link *pcard, | ||||
| 				     dma2[dev], | ||||
| 				     CS4231_HW_DETECT, | ||||
| 				     0, | ||||
| 				     &chip)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_cs4231_pcm(chip, 0, &pcm)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_cs4231_mixer(chip)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 				     &chip)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_cs4231_pcm(chip, 0, &pcm)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_cs4231_mixer(chip)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| #else /* CS4236 */ | ||||
| 	if ((err = snd_cs4236_create(card, | ||||
| @ -465,18 +462,14 @@ static int __devinit snd_card_cs423x_probe(int dev, struct pnp_card_link *pcard, | ||||
| 				     dma2[dev], | ||||
| 				     CS4231_HW_DETECT, | ||||
| 				     0, | ||||
| 				     &chip)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_cs4236_pcm(chip, 0, &pcm)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_cs4236_mixer(chip)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 				     &chip)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_cs4236_pcm(chip, 0, &pcm)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_cs4236_mixer(chip)) < 0) | ||||
| 		goto _err; | ||||
| #endif | ||||
| 	strcpy(card->driver, pcm->name); | ||||
| 	strcpy(card->shortname, pcm->name); | ||||
| @ -488,21 +481,17 @@ static int __devinit snd_card_cs423x_probe(int dev, struct pnp_card_link *pcard, | ||||
| 	if (dma2[dev] >= 0) | ||||
| 		sprintf(card->longname + strlen(card->longname), "&%d", dma2[dev]); | ||||
| 
 | ||||
| 	if ((err = snd_cs4231_timer(chip, 0, NULL)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_cs4231_timer(chip, 0, NULL)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if (fm_port[dev] > 0 && fm_port[dev] != SNDRV_AUTO_PORT) { | ||||
| 		if (snd_opl3_create(card, | ||||
| 				    fm_port[dev], fm_port[dev] + 2, | ||||
| 				    OPL3_HW_OPL3_CS, 0, &opl3) < 0) { | ||||
| 			printk(KERN_ERR IDENT ": OPL3 not detected\n"); | ||||
| 			printk(KERN_WARNING IDENT ": OPL3 not detected\n"); | ||||
| 		} else { | ||||
| 			if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) { | ||||
| 				snd_card_free(card); | ||||
| 				return err; | ||||
| 			} | ||||
| 			if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) | ||||
| 				goto _err; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| @ -513,17 +502,23 @@ static int __devinit snd_card_cs423x_probe(int dev, struct pnp_card_link *pcard, | ||||
| 					mpu_port[dev], 0, | ||||
| 					mpu_irq[dev], | ||||
| 					mpu_irq[dev] >= 0 ? SA_INTERRUPT : 0, NULL) < 0) | ||||
| 			printk(KERN_ERR IDENT ": MPU401 not detected\n"); | ||||
| 	} | ||||
| 	if ((err = snd_card_register(card)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 			printk(KERN_WARNING IDENT ": MPU401 not detected\n"); | ||||
| 	} | ||||
| 
 | ||||
| 	if ((err = snd_card_set_generic_dev(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) | ||||
| 		goto _err; | ||||
| 	if (pcard) | ||||
| 		pnp_set_card_drvdata(pcard, card); | ||||
| 	else | ||||
| 		snd_cs4236_legacy[dev] = card; | ||||
| 	return 0; | ||||
| 
 | ||||
|  _err: | ||||
| 	snd_card_free(card); | ||||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_PNP | ||||
| @ -569,10 +564,8 @@ static int __init alsa_card_cs423x_init(void) | ||||
| 	for (dev = 0; dev < SNDRV_CARDS; dev++) { | ||||
| 		if (!enable[dev]) | ||||
| 			continue; | ||||
| #ifdef CONFIG_PNP | ||||
| 		if (isapnp[dev]) | ||||
| 		if (is_isapnp_selected(dev)) | ||||
| 			continue; | ||||
| #endif | ||||
| 		if (snd_card_cs423x_probe(dev, NULL, NULL) >= 0) | ||||
| 			cards++; | ||||
| 	} | ||||
|  | ||||
| @ -70,6 +70,7 @@ MODULE_PARM_DESC(dma8, "8-bit DMA # for ESx688 driver."); | ||||
| 
 | ||||
| static snd_card_t *snd_audiodrive_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; | ||||
| 
 | ||||
| #define PFX	"es1688: " | ||||
| 
 | ||||
| static int __init snd_audiodrive_probe(int dev) | ||||
| { | ||||
| @ -89,47 +90,41 @@ static int __init snd_audiodrive_probe(int dev) | ||||
| 	xirq = irq[dev]; | ||||
| 	if (xirq == SNDRV_AUTO_IRQ) { | ||||
| 		if ((xirq = snd_legacy_find_free_irq(possible_irqs)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			snd_printk("unable to find a free IRQ\n"); | ||||
| 			return -EBUSY; | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free IRQ\n"); | ||||
| 			err = -EBUSY; | ||||
| 			goto _err; | ||||
| 		} | ||||
| 	} | ||||
| 	xmpu_irq = mpu_irq[dev]; | ||||
| 	xdma = dma8[dev]; | ||||
| 	if (xdma == SNDRV_AUTO_DMA) { | ||||
| 		if ((xdma = snd_legacy_find_free_dma(possible_dmas)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			snd_printk("unable to find a free DMA\n"); | ||||
| 			return -EBUSY; | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free DMA\n"); | ||||
| 			err = -EBUSY; | ||||
| 			goto _err; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if ((err = snd_es1688_create(card, port[dev], mpu_port[dev], | ||||
| 				     xirq, xmpu_irq, xdma, | ||||
| 				     ES1688_HW_AUTO, &chip)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_es1688_pcm(chip, 0, &pcm)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_es1688_mixer(chip)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 				     ES1688_HW_AUTO, &chip)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_es1688_pcm(chip, 0, &pcm)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_es1688_mixer(chip)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	strcpy(card->driver, "ES1688"); | ||||
| 	strcpy(card->shortname, pcm->name); | ||||
| 	sprintf(card->longname, "%s at 0x%lx, irq %i, dma %i", pcm->name, chip->port, xirq, xdma); | ||||
| 
 | ||||
| 	if ((snd_opl3_create(card, chip->port, chip->port + 2, OPL3_HW_OPL3, 0, &opl3)) < 0) { | ||||
| 		printk(KERN_ERR "es1688: opl3 not detected at 0x%lx\n", chip->port); | ||||
| 		printk(KERN_WARNING PFX "opl3 not detected at 0x%lx\n", chip->port); | ||||
| 	} else { | ||||
| 		if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			return err; | ||||
| 		} | ||||
| 		if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) | ||||
| 			goto _err; | ||||
| 	} | ||||
| 
 | ||||
| 	if (xmpu_irq >= 0 && xmpu_irq != SNDRV_AUTO_IRQ && chip->mpu_port > 0) { | ||||
| @ -137,18 +132,22 @@ static int __init snd_audiodrive_probe(int dev) | ||||
| 					       chip->mpu_port, 0, | ||||
| 					       xmpu_irq, | ||||
| 					       SA_INTERRUPT, | ||||
| 					       NULL)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			return err; | ||||
| 		} | ||||
| 	} | ||||
| 	if ((err = snd_card_register(card)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 					       NULL)) < 0) | ||||
| 			goto _err; | ||||
| 	} | ||||
| 
 | ||||
| 	if ((err = snd_card_set_generic_dev(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	snd_audiodrive_cards[dev] = card; | ||||
| 	return 0; | ||||
| 
 | ||||
|  _err: | ||||
| 	snd_card_free(card); | ||||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| static int __init snd_audiodrive_legacy_auto_probe(unsigned long xport) | ||||
|  | ||||
| @ -649,7 +649,7 @@ int snd_es1688_create(snd_card_t * card, | ||||
| 	int err; | ||||
| 
 | ||||
| 	*rchip = NULL; | ||||
| 	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL); | ||||
| 	chip = kzalloc(sizeof(*chip), GFP_KERNEL); | ||||
| 	if (chip == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	chip->irq = -1; | ||||
|  | ||||
| @ -1686,7 +1686,7 @@ static int __devinit snd_es18xx_new_device(snd_card_t * card, | ||||
| 	int err; | ||||
| 
 | ||||
| 	*rchip = NULL; | ||||
|         chip = kcalloc(1, sizeof(*chip), GFP_KERNEL); | ||||
|         chip = kzalloc(sizeof(*chip), GFP_KERNEL); | ||||
| 	if (chip == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	spin_lock_init(&chip->reg_lock); | ||||
| @ -1988,6 +1988,12 @@ static int __devinit snd_audiodrive_pnp(int dev, struct snd_audiodrive *acard, | ||||
| } | ||||
| #endif /* CONFIG_PNP */ | ||||
| 
 | ||||
| #ifdef CONFIG_PNP | ||||
| #define is_isapnp_selected(dev)		isapnp[dev] | ||||
| #else | ||||
| #define is_isapnp_selected(dev)		0 | ||||
| #endif | ||||
| 
 | ||||
| static int __devinit snd_audiodrive_probe(int dev, struct pnp_card_link *pcard, | ||||
| 					  const struct pnp_card_device_id *pid) | ||||
| { | ||||
| @ -1996,7 +2002,6 @@ static int __devinit snd_audiodrive_probe(int dev, struct pnp_card_link *pcard, | ||||
| 	int xirq, xdma1, xdma2; | ||||
| 	snd_card_t *card; | ||||
| 	struct snd_audiodrive *acard; | ||||
| 	snd_rawmidi_t *rmidi = NULL; | ||||
| 	es18xx_t *chip; | ||||
| 	opl3_t *opl3; | ||||
| 	int err; | ||||
| @ -2019,25 +2024,25 @@ static int __devinit snd_audiodrive_probe(int dev, struct pnp_card_link *pcard, | ||||
| 	xirq = irq[dev]; | ||||
| 	if (xirq == SNDRV_AUTO_IRQ) { | ||||
| 		if ((xirq = snd_legacy_find_free_irq(possible_irqs)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			snd_printk("unable to find a free IRQ\n"); | ||||
| 			return -EBUSY; | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free IRQ\n"); | ||||
| 			err = -EBUSY; | ||||
| 			goto _err; | ||||
| 		} | ||||
| 	} | ||||
| 	xdma1 = dma1[dev]; | ||||
|         if (xdma1 == SNDRV_AUTO_DMA) { | ||||
|                 if ((xdma1 = snd_legacy_find_free_dma(possible_dmas)) < 0) { | ||||
|                         snd_card_free(card); | ||||
|                         snd_printk("unable to find a free DMA1\n"); | ||||
|                         return -EBUSY; | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free DMA1\n"); | ||||
| 			err = -EBUSY; | ||||
| 			goto _err; | ||||
|                 } | ||||
|         } | ||||
| 	xdma2 = dma2[dev]; | ||||
|         if (xdma2 == SNDRV_AUTO_DMA) { | ||||
|                 if ((xdma2 = snd_legacy_find_free_dma(possible_dmas)) < 0) { | ||||
|                         snd_card_free(card); | ||||
|                         snd_printk("unable to find a free DMA2\n"); | ||||
|                         return -EBUSY; | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free DMA2\n"); | ||||
| 			err = -EBUSY; | ||||
| 			goto _err; | ||||
|                 } | ||||
|         } | ||||
| 
 | ||||
| @ -2046,10 +2051,8 @@ static int __devinit snd_audiodrive_probe(int dev, struct pnp_card_link *pcard, | ||||
| 					 mpu_port[dev], | ||||
| 					 fm_port[dev], | ||||
| 					 xirq, xdma1, xdma2, | ||||
| 					 &chip)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 					 &chip)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	sprintf(card->driver, "ES%x", chip->version); | ||||
| 	sprintf(card->shortname, "ESS AudioDrive ES%x", chip->version); | ||||
| @ -2064,23 +2067,18 @@ static int __devinit snd_audiodrive_probe(int dev, struct pnp_card_link *pcard, | ||||
| 			chip->port, | ||||
| 			xirq, xdma1); | ||||
| 
 | ||||
| 	if ((err = snd_es18xx_pcm(chip, 0, NULL)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_es18xx_mixer(chip)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_es18xx_pcm(chip, 0, NULL)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_es18xx_mixer(chip)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if (fm_port[dev] > 0 && fm_port[dev] != SNDRV_AUTO_PORT) { | ||||
| 		if (snd_opl3_create(card, chip->fm_port, chip->fm_port + 2, OPL3_HW_OPL3, 0, &opl3) < 0) { | ||||
| 			snd_printk(KERN_ERR PFX "opl3 not detected at 0x%lx\n", chip->fm_port); | ||||
| 			snd_printk(KERN_WARNING PFX "opl3 not detected at 0x%lx\n", chip->fm_port); | ||||
| 		} else { | ||||
| 			if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) { | ||||
| 				snd_card_free(card); | ||||
| 				return err; | ||||
| 			} | ||||
| 			if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) | ||||
| 				goto _err; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| @ -2088,25 +2086,28 @@ static int __devinit snd_audiodrive_probe(int dev, struct pnp_card_link *pcard, | ||||
| 		if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_ES18XX, | ||||
| 					       chip->mpu_port, 0, | ||||
| 					       xirq, 0, | ||||
| 					       &rmidi)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			return err; | ||||
| 		} | ||||
| 		chip->rmidi = rmidi; | ||||
| 					       &chip->rmidi)) < 0) | ||||
| 			goto _err; | ||||
| 	} | ||||
| 
 | ||||
| 	if ((err = snd_card_set_generic_dev(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	/* Power Management */ | ||||
| 	snd_card_set_isa_pm_callback(card, snd_es18xx_suspend, snd_es18xx_resume, chip); | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_card_register(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if (pcard) | ||||
| 		pnp_set_card_drvdata(pcard, card); | ||||
| 	else | ||||
| 		snd_audiodrive_legacy[dev] = card; | ||||
| 	return 0; | ||||
| 
 | ||||
|  _err: | ||||
| 	snd_card_free(card); | ||||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| static int __devinit snd_audiodrive_probe_legacy_port(unsigned long xport) | ||||
| @ -2117,10 +2118,8 @@ static int __devinit snd_audiodrive_probe_legacy_port(unsigned long xport) | ||||
| 	for ( ; dev < SNDRV_CARDS; dev++) { | ||||
| 		if (!enable[dev] || port[dev] != SNDRV_AUTO_PORT) | ||||
| 			continue; | ||||
| #ifdef CONFIG_PNP | ||||
| 		if (isapnp[dev]) | ||||
| 		if (is_isapnp_selected(dev)) | ||||
| 			continue; | ||||
| #endif | ||||
| 		port[dev] = xport; | ||||
| 		res = snd_audiodrive_probe(dev, NULL, NULL); | ||||
| 		if (res < 0) | ||||
| @ -2177,10 +2176,8 @@ static int __init alsa_card_es18xx_init(void) | ||||
| 	for (dev = 0; dev < SNDRV_CARDS; dev++) { | ||||
| 		if (!enable[dev] || port[dev] == SNDRV_AUTO_PORT) | ||||
| 			continue; | ||||
| #ifdef CONFIG_PNP | ||||
| 		if (isapnp[dev]) | ||||
| 		if (is_isapnp_selected(dev)) | ||||
| 			continue; | ||||
| #endif | ||||
| 		if (snd_audiodrive_probe(dev, NULL, NULL) >= 0) | ||||
| 			cards++; | ||||
| 	} | ||||
|  | ||||
| @ -157,7 +157,7 @@ int snd_gus_create(snd_card_t * card, | ||||
| 	}; | ||||
| 
 | ||||
| 	*rgus = NULL; | ||||
| 	gus = kcalloc(1, sizeof(*gus), GFP_KERNEL); | ||||
| 	gus = kzalloc(sizeof(*gus), GFP_KERNEL); | ||||
| 	if (gus == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	gus->gf1.irq = -1; | ||||
|  | ||||
| @ -98,7 +98,7 @@ int snd_gf1_mem_proc_init(snd_gus_card_t * gus) | ||||
| 
 | ||||
| 	for (idx = 0; idx < 4; idx++) { | ||||
| 		if (gus->gf1.mem_alloc.banks_8[idx].size > 0) { | ||||
| 			priv = kcalloc(1, sizeof(*priv), GFP_KERNEL); | ||||
| 			priv = kzalloc(sizeof(*priv), GFP_KERNEL); | ||||
| 			if (priv == NULL) | ||||
| 				return -ENOMEM; | ||||
| 			priv->gus = gus; | ||||
| @ -115,7 +115,7 @@ int snd_gf1_mem_proc_init(snd_gus_card_t * gus) | ||||
| 	} | ||||
| 	for (idx = 0; idx < 4; idx++) { | ||||
| 		if (gus->gf1.rom_present & (1 << idx)) { | ||||
| 			priv = kcalloc(1, sizeof(*priv), GFP_KERNEL); | ||||
| 			priv = kzalloc(sizeof(*priv), GFP_KERNEL); | ||||
| 			if (priv == NULL) | ||||
| 				return -ENOMEM; | ||||
| 			priv->rom = 1; | ||||
|  | ||||
| @ -666,7 +666,7 @@ static int snd_gf1_pcm_playback_open(snd_pcm_substream_t *substream) | ||||
| 	snd_pcm_runtime_t *runtime = substream->runtime; | ||||
| 	int err; | ||||
| 
 | ||||
| 	pcmp = kcalloc(1, sizeof(*pcmp), GFP_KERNEL); | ||||
| 	pcmp = kzalloc(sizeof(*pcmp), GFP_KERNEL); | ||||
| 	if (pcmp == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	pcmp->gus = gus; | ||||
|  | ||||
| @ -72,40 +72,24 @@ MODULE_PARM_DESC(pcm_channels, "Reserved PCM channels for GUS Classic driver."); | ||||
| 
 | ||||
| static snd_card_t *snd_gusclassic_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; | ||||
| 
 | ||||
| #define PFX	"gusclassic: " | ||||
| 
 | ||||
| static int __init snd_gusclassic_detect(snd_gus_card_t * gus) | ||||
| { | ||||
| 	snd_gf1_i_write8(gus, SNDRV_GF1_GB_RESET, 0);	/* reset GF1 */ | ||||
| #ifdef CONFIG_SND_DEBUG_DETECT | ||||
| 	{ | ||||
| 		unsigned char d; | ||||
| 	unsigned char d; | ||||
| 
 | ||||
| 		if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 0) { | ||||
| 			snd_printk("[0x%lx] check 1 failed - 0x%x\n", gus->gf1.port, d); | ||||
| 			return -ENODEV; | ||||
| 		} | ||||
| 	} | ||||
| #else | ||||
| 	if ((snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET) & 0x07) != 0) | ||||
| 	snd_gf1_i_write8(gus, SNDRV_GF1_GB_RESET, 0);	/* reset GF1 */ | ||||
| 	if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 0) { | ||||
| 		snd_printdd("[0x%lx] check 1 failed - 0x%x\n", gus->gf1.port, d); | ||||
| 		return -ENODEV; | ||||
| #endif | ||||
| 	} | ||||
| 	udelay(160); | ||||
| 	snd_gf1_i_write8(gus, SNDRV_GF1_GB_RESET, 1);	/* release reset */ | ||||
| 	udelay(160); | ||||
| #ifdef CONFIG_SND_DEBUG_DETECT | ||||
| 	{ | ||||
| 		unsigned char d; | ||||
| 
 | ||||
| 		if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 1) { | ||||
| 			snd_printk("[0x%lx] check 2 failed - 0x%x\n", gus->gf1.port, d); | ||||
| 			return -ENODEV; | ||||
| 		} | ||||
| 	} | ||||
| #else | ||||
| 	if ((snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET) & 0x07) != 1) | ||||
| 	if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 1) { | ||||
| 		snd_printdd("[0x%lx] check 2 failed - 0x%x\n", gus->gf1.port, d); | ||||
| 		return -ENODEV; | ||||
| #endif | ||||
| 
 | ||||
| 	} | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| @ -137,25 +121,25 @@ static int __init snd_gusclassic_probe(int dev) | ||||
| 	xirq = irq[dev]; | ||||
| 	if (xirq == SNDRV_AUTO_IRQ) { | ||||
| 		if ((xirq = snd_legacy_find_free_irq(possible_irqs)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			snd_printk("unable to find a free IRQ\n"); | ||||
| 			return -EBUSY; | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free IRQ\n"); | ||||
| 			err = -EBUSY; | ||||
| 			goto _err; | ||||
| 		} | ||||
| 	} | ||||
| 	xdma1 = dma1[dev]; | ||||
| 	if (xdma1 == SNDRV_AUTO_DMA) { | ||||
| 		if ((xdma1 = snd_legacy_find_free_dma(possible_dmas)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			snd_printk("unable to find a free DMA1\n"); | ||||
| 			return -EBUSY; | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free DMA1\n"); | ||||
| 			err = -EBUSY; | ||||
| 			goto _err; | ||||
| 		} | ||||
| 	} | ||||
| 	xdma2 = dma2[dev]; | ||||
| 	if (xdma2 == SNDRV_AUTO_DMA) { | ||||
| 		if ((xdma2 = snd_legacy_find_free_dma(possible_dmas)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			snd_printk("unable to find a free DMA2\n"); | ||||
| 			return -EBUSY; | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free DMA2\n"); | ||||
| 			err = -EBUSY; | ||||
| 			goto _err; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| @ -164,47 +148,48 @@ static int __init snd_gusclassic_probe(int dev) | ||||
| 				  port[dev], | ||||
| 				  xirq, xdma1, xdma2, | ||||
| 			          0, channels[dev], pcm_channels[dev], | ||||
| 			          0, &gus)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_gusclassic_detect(gus)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 			          0, &gus)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_gusclassic_detect(gus)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	snd_gusclassic_init(dev, gus); | ||||
| 	if ((err = snd_gus_initialize(gus)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_gus_initialize(gus)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if (gus->max_flag || gus->ess_flag) { | ||||
| 		snd_printdd("GUS Classic or ACE soundcard was not detected at 0x%lx\n", gus->gf1.port); | ||||
| 		snd_card_free(card); | ||||
| 		return -ENODEV; | ||||
| 	} | ||||
| 	if ((err = snd_gf1_new_mixer(gus)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_gf1_pcm_new(gus, 0, 0, NULL)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 		snd_printk(KERN_ERR PFX "GUS Classic or ACE soundcard was not detected at 0x%lx\n", gus->gf1.port); | ||||
| 		err = -ENODEV; | ||||
| 		goto _err; | ||||
| 	} | ||||
| 
 | ||||
| 	if ((err = snd_gf1_new_mixer(gus)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_gf1_pcm_new(gus, 0, 0, NULL)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if (!gus->ace_flag) { | ||||
| 		if ((err = snd_gf1_rawmidi_new(gus, 0, NULL)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			return err; | ||||
| 		} | ||||
| 		if ((err = snd_gf1_rawmidi_new(gus, 0, NULL)) < 0) | ||||
| 			goto _err; | ||||
| 	} | ||||
| 	sprintf(card->longname + strlen(card->longname), " at 0x%lx, irq %d, dma %d", gus->gf1.port, xirq, xdma1); | ||||
| 	if (dma2 >= 0) | ||||
| 		sprintf(card->longname + strlen(card->longname), "&%d", xdma2); | ||||
| 	if ((err = snd_card_register(card)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 
 | ||||
| 	if ((err = snd_card_set_generic_dev(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	snd_gusclassic_cards[dev] = card; | ||||
| 	return 0; | ||||
| 
 | ||||
|  _err: | ||||
| 	snd_card_free(card); | ||||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| static int __init snd_gusclassic_legacy_auto_probe(unsigned long xport) | ||||
|  | ||||
| @ -87,6 +87,7 @@ MODULE_PARM_DESC(pcm_channels, "Reserved PCM channels for GUS Extreme driver."); | ||||
| 
 | ||||
| static snd_card_t *snd_gusextreme_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; | ||||
| 
 | ||||
| #define PFX	"gusextreme: " | ||||
| 
 | ||||
| static int __init snd_gusextreme_detect(int dev, | ||||
| 					snd_card_t * card, | ||||
| @ -94,6 +95,7 @@ static int __init snd_gusextreme_detect(int dev, | ||||
| 					es1688_t *es1688) | ||||
| { | ||||
| 	unsigned long flags; | ||||
| 	unsigned char d; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * This is main stuff - enable access to GF1 chip... | ||||
| @ -123,36 +125,17 @@ static int __init snd_gusextreme_detect(int dev, | ||||
| 	udelay(100); | ||||
| 
 | ||||
| 	snd_gf1_i_write8(gus, SNDRV_GF1_GB_RESET, 0);	/* reset GF1 */ | ||||
| #ifdef CONFIG_SND_DEBUG_DETECT | ||||
| 	{ | ||||
| 		unsigned char d; | ||||
| 
 | ||||
| 		if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 0) { | ||||
| 			snd_printk("[0x%lx] check 1 failed - 0x%x\n", gus->gf1.port, d); | ||||
| 			return -EIO; | ||||
| 		} | ||||
| 	} | ||||
| #else | ||||
| 	if ((snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET) & 0x07) != 0) | ||||
| 	if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 0) { | ||||
| 		snd_printdd("[0x%lx] check 1 failed - 0x%x\n", gus->gf1.port, d); | ||||
| 		return -EIO; | ||||
| #endif | ||||
| 	} | ||||
| 	udelay(160); | ||||
| 	snd_gf1_i_write8(gus, SNDRV_GF1_GB_RESET, 1);	/* release reset */ | ||||
| 	udelay(160); | ||||
| #ifdef CONFIG_SND_DEBUG_DETECT | ||||
| 	{ | ||||
| 		unsigned char d; | ||||
| 
 | ||||
| 		if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 1) { | ||||
| 			snd_printk("[0x%lx] check 2 failed - 0x%x\n", gus->gf1.port, d); | ||||
| 			return -EIO; | ||||
| 		} | ||||
| 	} | ||||
| #else | ||||
| 	if ((snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET) & 0x07) != 1) | ||||
| 	if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 1) { | ||||
| 		snd_printdd("[0x%lx] check 2 failed - 0x%x\n", gus->gf1.port, d); | ||||
| 		return -EIO; | ||||
| #endif | ||||
| 
 | ||||
| 	} | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| @ -205,7 +188,7 @@ static int __init snd_gusextreme_probe(int dev) | ||||
| 	xgf1_irq = gf1_irq[dev]; | ||||
| 	if (xgf1_irq == SNDRV_AUTO_IRQ) { | ||||
| 		if ((xgf1_irq = snd_legacy_find_free_irq(possible_gf1_irqs)) < 0) { | ||||
| 			snd_printk("unable to find a free IRQ for GF1\n"); | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free IRQ for GF1\n"); | ||||
| 			err = -EBUSY; | ||||
| 			goto out; | ||||
| 		} | ||||
| @ -213,7 +196,7 @@ static int __init snd_gusextreme_probe(int dev) | ||||
| 	xess_irq = irq[dev]; | ||||
| 	if (xess_irq == SNDRV_AUTO_IRQ) { | ||||
| 		if ((xess_irq = snd_legacy_find_free_irq(possible_ess_irqs)) < 0) { | ||||
| 			snd_printk("unable to find a free IRQ for ES1688\n"); | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free IRQ for ES1688\n"); | ||||
| 			err = -EBUSY; | ||||
| 			goto out; | ||||
| 		} | ||||
| @ -226,7 +209,7 @@ static int __init snd_gusextreme_probe(int dev) | ||||
| 	xgf1_dma = dma1[dev]; | ||||
| 	if (xgf1_dma == SNDRV_AUTO_DMA) { | ||||
| 		if ((xgf1_dma = snd_legacy_find_free_dma(possible_gf1_dmas)) < 0) { | ||||
| 			snd_printk("unable to find a free DMA for GF1\n"); | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free DMA for GF1\n"); | ||||
| 			err = -EBUSY; | ||||
| 			goto out; | ||||
| 		} | ||||
| @ -234,7 +217,7 @@ static int __init snd_gusextreme_probe(int dev) | ||||
| 	xess_dma = dma8[dev]; | ||||
| 	if (xess_dma == SNDRV_AUTO_DMA) { | ||||
| 		if ((xess_dma = snd_legacy_find_free_dma(possible_ess_dmas)) < 0) { | ||||
| 			snd_printk("unable to find a free DMA for ES1688\n"); | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free DMA for ES1688\n"); | ||||
| 			err = -EBUSY; | ||||
| 			goto out; | ||||
| 		} | ||||
| @ -264,7 +247,7 @@ static int __init snd_gusextreme_probe(int dev) | ||||
| 		goto out; | ||||
| 
 | ||||
| 	if (!gus->ess_flag) { | ||||
| 		snd_printdd("GUS Extreme soundcard was not detected at 0x%lx\n", gus->gf1.port); | ||||
| 		snd_printk(KERN_ERR PFX "GUS Extreme soundcard was not detected at 0x%lx\n", gus->gf1.port); | ||||
| 		err = -ENODEV; | ||||
| 		goto out; | ||||
| 	} | ||||
| @ -287,7 +270,7 @@ static int __init snd_gusextreme_probe(int dev) | ||||
| 
 | ||||
| 	if (snd_opl3_create(card, es1688->port, es1688->port + 2, | ||||
| 			    OPL3_HW_OPL3, 0, &opl3) < 0) { | ||||
| 		printk(KERN_ERR "gusextreme: opl3 not detected at 0x%lx\n", es1688->port); | ||||
| 		printk(KERN_ERR PFX "gusextreme: opl3 not detected at 0x%lx\n", es1688->port); | ||||
| 	} else { | ||||
| 		if ((err = snd_opl3_hwdep_new(opl3, 0, 2, NULL)) < 0) | ||||
| 			goto out; | ||||
| @ -303,6 +286,10 @@ static int __init snd_gusextreme_probe(int dev) | ||||
| 
 | ||||
| 	sprintf(card->longname, "Gravis UltraSound Extreme at 0x%lx, irq %i&%i, dma %i&%i", | ||||
| 		es1688->port, xgf1_irq, xess_irq, xgf1_dma, xess_dma); | ||||
| 
 | ||||
| 	if ((err = snd_card_set_generic_dev(card)) < 0) | ||||
| 		goto out; | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) | ||||
| 		goto out; | ||||
| 
 | ||||
|  | ||||
| @ -82,39 +82,25 @@ struct snd_gusmax { | ||||
| 
 | ||||
| static snd_card_t *snd_gusmax_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; | ||||
| 
 | ||||
| #define PFX	"gusmax: " | ||||
| 
 | ||||
| static int __init snd_gusmax_detect(snd_gus_card_t * gus) | ||||
| { | ||||
| 	snd_gf1_i_write8(gus, SNDRV_GF1_GB_RESET, 0);	/* reset GF1 */ | ||||
| #ifdef CONFIG_SND_DEBUG_DETECT | ||||
| 	{ | ||||
| 		unsigned char d; | ||||
| 	unsigned char d; | ||||
| 
 | ||||
| 		if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 0) { | ||||
| 			snd_printk("[0x%lx] check 1 failed - 0x%x\n", gus->gf1.port, d); | ||||
| 			return -ENODEV; | ||||
| 		} | ||||
| 	} | ||||
| #else | ||||
| 	if ((snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET) & 0x07) != 0) | ||||
| 	snd_gf1_i_write8(gus, SNDRV_GF1_GB_RESET, 0);	/* reset GF1 */ | ||||
| 	if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 0) { | ||||
| 		snd_printdd("[0x%lx] check 1 failed - 0x%x\n", gus->gf1.port, d); | ||||
| 		return -ENODEV; | ||||
| #endif | ||||
| 	} | ||||
| 	udelay(160); | ||||
| 	snd_gf1_i_write8(gus, SNDRV_GF1_GB_RESET, 1);	/* release reset */ | ||||
| 	udelay(160); | ||||
| #ifdef CONFIG_SND_DEBUG_DETECT | ||||
| 	{ | ||||
| 		unsigned char d; | ||||
| 
 | ||||
| 		if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 1) { | ||||
| 			snd_printk("[0x%lx] check 2 failed - 0x%x\n", gus->gf1.port, d); | ||||
| 			return -ENODEV; | ||||
| 		} | ||||
| 	} | ||||
| #else | ||||
| 	if ((snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET) & 0x07) != 1) | ||||
| 	if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 1) { | ||||
| 		snd_printdd("[0x%lx] check 2 failed - 0x%x\n", gus->gf1.port, d); | ||||
| 		return -ENODEV; | ||||
| #endif | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| @ -239,25 +225,25 @@ static int __init snd_gusmax_probe(int dev) | ||||
| 	xirq = irq[dev]; | ||||
| 	if (xirq == SNDRV_AUTO_IRQ) { | ||||
| 		if ((xirq = snd_legacy_find_free_irq(possible_irqs)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			snd_printk("unable to find a free IRQ\n"); | ||||
| 			return -EBUSY; | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free IRQ\n"); | ||||
| 			err = -EBUSY; | ||||
| 			goto _err; | ||||
| 		} | ||||
| 	} | ||||
| 	xdma1 = dma1[dev]; | ||||
| 	if (xdma1 == SNDRV_AUTO_DMA) { | ||||
| 		if ((xdma1 = snd_legacy_find_free_dma(possible_dmas)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			snd_printk("unable to find a free DMA1\n"); | ||||
| 			return -EBUSY; | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free DMA1\n"); | ||||
| 			err = -EBUSY; | ||||
| 			goto _err; | ||||
| 		} | ||||
| 	} | ||||
| 	xdma2 = dma2[dev]; | ||||
| 	if (xdma2 == SNDRV_AUTO_DMA) { | ||||
| 		if ((xdma2 = snd_legacy_find_free_dma(possible_dmas)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			snd_printk("unable to find a free DMA2\n"); | ||||
| 			return -EBUSY; | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free DMA2\n"); | ||||
| 			err = -EBUSY; | ||||
| 			goto _err; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| @ -266,31 +252,28 @@ static int __init snd_gusmax_probe(int dev) | ||||
| 				  -xirq, xdma1, xdma2, | ||||
| 				  0, channels[dev], | ||||
| 				  pcm_channels[dev], | ||||
| 				  0, &gus)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_gusmax_detect(gus)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 				  0, &gus)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_gusmax_detect(gus)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	maxcard->gus_status_reg = gus->gf1.reg_irqstat; | ||||
| 	maxcard->pcm_status_reg = gus->gf1.port + 0x10c + 2; | ||||
| 	snd_gusmax_init(dev, card, gus); | ||||
| 	if ((err = snd_gus_initialize(gus)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_gus_initialize(gus)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if (!gus->max_flag) { | ||||
| 		printk(KERN_ERR "GUS MAX soundcard was not detected at 0x%lx\n", gus->gf1.port); | ||||
| 		snd_card_free(card); | ||||
| 		return -ENODEV; | ||||
| 		snd_printk(KERN_ERR PFX "GUS MAX soundcard was not detected at 0x%lx\n", gus->gf1.port); | ||||
| 		err = -ENODEV; | ||||
| 		goto _err; | ||||
| 	} | ||||
| 
 | ||||
| 	if (request_irq(xirq, snd_gusmax_interrupt, SA_INTERRUPT, "GUS MAX", (void *)maxcard)) { | ||||
| 		snd_card_free(card); | ||||
| 		printk(KERN_ERR "gusmax: unable to grab IRQ %d\n", xirq); | ||||
| 		return -EBUSY; | ||||
| 		snd_printk(KERN_ERR PFX "unable to grab IRQ %d\n", xirq); | ||||
| 		err = -EBUSY; | ||||
| 		goto _err; | ||||
| 	} | ||||
| 	maxcard->irq = xirq; | ||||
| 	 | ||||
| @ -301,50 +284,46 @@ static int __init snd_gusmax_probe(int dev) | ||||
| 				     CS4231_HWSHARE_IRQ | | ||||
| 				     CS4231_HWSHARE_DMA1 | | ||||
| 				     CS4231_HWSHARE_DMA2, | ||||
| 				     &cs4231)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_cs4231_pcm(cs4231, 0, NULL)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_cs4231_mixer(cs4231)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_cs4231_timer(cs4231, 2, NULL)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if (pcm_channels[dev] > 0) { | ||||
| 		if ((err = snd_gf1_pcm_new(gus, 1, 1, NULL)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			return err; | ||||
| 		} | ||||
| 	} | ||||
| 	if ((err = snd_gusmax_mixer(cs4231)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 				     &cs4231)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_gf1_rawmidi_new(gus, 0, NULL)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	if ((err = snd_cs4231_pcm(cs4231, 0, NULL)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_cs4231_mixer(cs4231)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_cs4231_timer(cs4231, 2, NULL)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if (pcm_channels[dev] > 0) { | ||||
| 		if ((err = snd_gf1_pcm_new(gus, 1, 1, NULL)) < 0) | ||||
| 			goto _err; | ||||
| 	} | ||||
| 	if ((err = snd_gusmax_mixer(cs4231)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_gf1_rawmidi_new(gus, 0, NULL)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	sprintf(card->longname + strlen(card->longname), " at 0x%lx, irq %i, dma %i", gus->gf1.port, xirq, xdma1); | ||||
| 	if (xdma2 >= 0) | ||||
| 		sprintf(card->longname + strlen(card->longname), "&%i", xdma2); | ||||
| 	if ((err = snd_card_register(card)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 
 | ||||
| 	if ((err = snd_card_set_generic_dev(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) | ||||
| 		goto _err; | ||||
| 		 | ||||
| 	maxcard->gus = gus; | ||||
| 	maxcard->cs4231 = cs4231; | ||||
| 	snd_gusmax_cards[dev] = card; | ||||
| 	return 0; | ||||
| 
 | ||||
|  _err: | ||||
| 	snd_card_free(card); | ||||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| static int __init snd_gusmax_legacy_auto_probe(unsigned long xport) | ||||
|  | ||||
| @ -73,6 +73,12 @@ static int midi[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; | ||||
| static int pcm_channels[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2}; | ||||
| static int effect[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; | ||||
| 
 | ||||
| #ifdef SNDRV_STB | ||||
| #define PFX "interwave-stb: " | ||||
| #else | ||||
| #define PFX "interwave: " | ||||
| #endif | ||||
| 
 | ||||
| module_param_array(index, int, NULL, 0444); | ||||
| MODULE_PARM_DESC(index, "Index value for InterWave soundcard."); | ||||
| module_param_array(id, charp, NULL, 0444); | ||||
| @ -249,38 +255,20 @@ static int __devinit snd_interwave_detect(struct snd_interwave *iwcard, | ||||
| { | ||||
| 	unsigned long flags; | ||||
| 	unsigned char rev1, rev2; | ||||
| 	int d; | ||||
| 
 | ||||
| 	snd_gf1_i_write8(gus, SNDRV_GF1_GB_RESET, 0);	/* reset GF1 */ | ||||
| #ifdef CONFIG_SND_DEBUG_DETECT | ||||
| 	{ | ||||
| 		int d; | ||||
| 
 | ||||
| 		if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 0) { | ||||
| 			snd_printk("[0x%lx] check 1 failed - 0x%x\n", gus->gf1.port, d); | ||||
| 			return -ENODEV; | ||||
| 		} | ||||
| 	} | ||||
| #else | ||||
| 	if ((snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET) & 0x07) != 0) | ||||
| 	if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 0) { | ||||
| 		snd_printdd("[0x%lx] check 1 failed - 0x%x\n", gus->gf1.port, d); | ||||
| 		return -ENODEV; | ||||
| #endif | ||||
| 	} | ||||
| 	udelay(160); | ||||
| 	snd_gf1_i_write8(gus, SNDRV_GF1_GB_RESET, 1);	/* release reset */ | ||||
| 	udelay(160); | ||||
| #ifdef CONFIG_SND_DEBUG_DETECT | ||||
| 	{ | ||||
| 		int d; | ||||
| 
 | ||||
| 		if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 1) { | ||||
| 			snd_printk("[0x%lx] check 2 failed - 0x%x\n", gus->gf1.port, d); | ||||
| 			return -ENODEV; | ||||
| 		} | ||||
| 	} | ||||
| #else | ||||
| 	if ((snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET) & 0x07) != 1) | ||||
| 	if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 1) { | ||||
| 		snd_printdd("[0x%lx] check 2 failed - 0x%x\n", gus->gf1.port, d); | ||||
| 		return -ENODEV; | ||||
| #endif | ||||
| 
 | ||||
| 	} | ||||
| 	spin_lock_irqsave(&gus->reg_lock, flags); | ||||
| 	rev1 = snd_gf1_look8(gus, SNDRV_GF1_GB_VERSION_NUMBER); | ||||
| 	snd_gf1_write8(gus, SNDRV_GF1_GB_VERSION_NUMBER, ~rev1); | ||||
| @ -686,35 +674,33 @@ static int __devinit snd_interwave_probe(int dev, struct pnp_card_link *pcard, | ||||
| 	card->private_free = snd_interwave_free; | ||||
| #ifdef CONFIG_PNP | ||||
| 	if (isapnp[dev]) { | ||||
| 		if (snd_interwave_pnp(dev, iwcard, pcard, pid)) { | ||||
| 			snd_card_free(card); | ||||
| 			return -ENODEV; | ||||
| 		} | ||||
| 		if ((err = snd_interwave_pnp(dev, iwcard, pcard, pid)) < 0) | ||||
| 			goto _err; | ||||
| 		snd_card_set_dev(card, &pcard->card->dev); | ||||
| 	} | ||||
| #endif | ||||
| 	xirq = irq[dev]; | ||||
| 	if (xirq == SNDRV_AUTO_IRQ) { | ||||
| 		if ((xirq = snd_legacy_find_free_irq(possible_irqs)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			snd_printk("unable to find a free IRQ\n"); | ||||
| 			return -EBUSY; | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free IRQ\n"); | ||||
| 			err = -EBUSY; | ||||
| 			goto _err; | ||||
| 		} | ||||
| 	} | ||||
| 	xdma1 = dma1[dev]; | ||||
| 	if (xdma1 == SNDRV_AUTO_DMA) { | ||||
| 		if ((xdma1 = snd_legacy_find_free_dma(possible_dmas)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			snd_printk("unable to find a free DMA1\n"); | ||||
| 			return -EBUSY; | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free DMA1\n"); | ||||
| 			err = -EBUSY; | ||||
| 			goto _err; | ||||
| 		} | ||||
| 	} | ||||
| 	xdma2 = dma2[dev]; | ||||
| 	if (xdma2 == SNDRV_AUTO_DMA) { | ||||
| 		if ((xdma2 = snd_legacy_find_free_dma(possible_dmas)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			snd_printk("unable to find a free DMA2\n"); | ||||
| 			return -EBUSY; | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free DMA2\n"); | ||||
| 			err = -EBUSY; | ||||
| 			goto _err; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| @ -722,32 +708,28 @@ static int __devinit snd_interwave_probe(int dev, struct pnp_card_link *pcard, | ||||
| 				  port[dev], | ||||
| 				  -xirq, xdma1, xdma2, | ||||
| 				  0, 32, | ||||
| 				  pcm_channels[dev], effect[dev], &gus)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 				  pcm_channels[dev], effect[dev], &gus)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_interwave_detect(iwcard, gus, dev | ||||
| #ifdef SNDRV_STB | ||||
|             , &i2c_bus | ||||
| #endif | ||||
| 	    )) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	    )) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	iwcard->gus_status_reg = gus->gf1.reg_irqstat; | ||||
| 	iwcard->pcm_status_reg = gus->gf1.port + 0x10c + 2; | ||||
| 
 | ||||
| 	snd_interwave_init(dev, gus); | ||||
| 	snd_interwave_detect_memory(gus); | ||||
| 	if ((err = snd_gus_initialize(gus)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_gus_initialize(gus)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if (request_irq(xirq, snd_interwave_interrupt, SA_INTERRUPT, "InterWave", (void *)iwcard)) { | ||||
| 		snd_card_free(card); | ||||
| 		snd_printk("unable to grab IRQ %d\n", xirq); | ||||
| 		return -EBUSY; | ||||
| 		snd_printk(KERN_ERR PFX "unable to grab IRQ %d\n", xirq); | ||||
| 		err = -EBUSY; | ||||
| 		goto _err; | ||||
| 	} | ||||
| 	iwcard->irq = xirq; | ||||
| 
 | ||||
| @ -758,34 +740,28 @@ static int __devinit snd_interwave_probe(int dev, struct pnp_card_link *pcard, | ||||
| 				     CS4231_HWSHARE_IRQ | | ||||
| 				     CS4231_HWSHARE_DMA1 | | ||||
| 				     CS4231_HWSHARE_DMA2, | ||||
| 				     &cs4231)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_cs4231_pcm(cs4231, 0, &pcm)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 				     &cs4231)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_cs4231_pcm(cs4231, 0, &pcm)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	sprintf(pcm->name + strlen(pcm->name), " rev %c", gus->revision + 'A'); | ||||
| 	strcat(pcm->name, " (codec)"); | ||||
| 	if ((err = snd_cs4231_timer(cs4231, 2, NULL)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_cs4231_mixer(cs4231)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 
 | ||||
| 	if ((err = snd_cs4231_timer(cs4231, 2, NULL)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_cs4231_mixer(cs4231)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if (pcm_channels[dev] > 0) { | ||||
| 		if ((err = snd_gf1_pcm_new(gus, 1, 1, NULL)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			return err; | ||||
| 		} | ||||
| 	} | ||||
| 	if ((err = snd_interwave_mixer(cs4231)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 		if ((err = snd_gf1_pcm_new(gus, 1, 1, NULL)) < 0) | ||||
| 			goto _err; | ||||
| 	} | ||||
| 	if ((err = snd_interwave_mixer(cs4231)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| #ifdef SNDRV_STB | ||||
| 	{ | ||||
| 		snd_ctl_elem_id_t id1, id2; | ||||
| @ -795,28 +771,20 @@ static int __devinit snd_interwave_probe(int dev, struct pnp_card_link *pcard, | ||||
| 		strcpy(id1.name, "Master Playback Switch"); | ||||
| 		strcpy(id2.name, id1.name); | ||||
| 		id2.index = 1; | ||||
| 		if ((err = snd_ctl_rename_id(card, &id1, &id2)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			return err; | ||||
| 		} | ||||
| 		if ((err = snd_ctl_rename_id(card, &id1, &id2)) < 0) | ||||
| 			goto _err; | ||||
| 		strcpy(id1.name, "Master Playback Volume"); | ||||
| 		strcpy(id2.name, id1.name); | ||||
| 		if ((err = snd_ctl_rename_id(card, &id1, &id2)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			return err; | ||||
| 		} | ||||
| 		if ((err = snd_tea6330t_update_mixer(card, i2c_bus, 0, 1)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			return err; | ||||
| 		} | ||||
| 		if ((err = snd_ctl_rename_id(card, &id1, &id2)) < 0) | ||||
| 			goto _err; | ||||
| 		if ((err = snd_tea6330t_update_mixer(card, i2c_bus, 0, 1)) < 0) | ||||
| 			goto _err; | ||||
| 	} | ||||
| #endif | ||||
| 
 | ||||
| 	gus->uart_enable = midi[dev]; | ||||
| 	if ((err = snd_gf1_rawmidi_new(gus, 0, NULL)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_gf1_rawmidi_new(gus, 0, NULL)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| #ifndef SNDRV_STB | ||||
| 	str = "AMD InterWave"; | ||||
| @ -835,10 +803,11 @@ static int __devinit snd_interwave_probe(int dev, struct pnp_card_link *pcard, | ||||
| 	if (xdma2 >= 0) | ||||
| 		sprintf(card->longname + strlen(card->longname), "&%d", xdma2); | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_card_set_generic_dev(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) | ||||
| 		goto _err; | ||||
| 	 | ||||
| 	iwcard->cs4231 = cs4231; | ||||
| 	iwcard->gus = gus; | ||||
| @ -847,6 +816,10 @@ static int __devinit snd_interwave_probe(int dev, struct pnp_card_link *pcard, | ||||
| 	else | ||||
| 		snd_interwave_legacy[dev++] = card; | ||||
| 	return 0; | ||||
| 
 | ||||
|  _err: | ||||
| 	snd_card_free(card); | ||||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| static int __devinit snd_interwave_probe_legacy_port(unsigned long xport) | ||||
|  | ||||
| @ -143,6 +143,8 @@ struct snd_opl3sa2 { | ||||
| 
 | ||||
| static snd_card_t *snd_opl3sa2_legacy[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; | ||||
| 
 | ||||
| #define PFX	"opl3sa2: " | ||||
| 
 | ||||
| #ifdef CONFIG_PNP | ||||
| 
 | ||||
| static struct pnp_device_id snd_opl3sa2_pnpbiosids[] = { | ||||
| @ -231,7 +233,7 @@ static int __init snd_opl3sa2_detect(opl3sa2_t *chip) | ||||
| 	card = chip->card; | ||||
| 	port = chip->port; | ||||
| 	if ((chip->res_port = request_region(port, 2, "OPL3-SA control")) == NULL) { | ||||
| 		snd_printk(KERN_ERR "opl3sa2: can't grab port 0x%lx\n", port); | ||||
| 		snd_printk(KERN_ERR PFX "can't grab port 0x%lx\n", port); | ||||
| 		return -EBUSY; | ||||
| 	} | ||||
| 	// snd_printk("REG 0A = 0x%x\n", snd_opl3sa2_read(chip, 0x0a));
 | ||||
| @ -668,6 +670,12 @@ static int snd_opl3sa2_dev_free(snd_device_t *device) | ||||
| 	return snd_opl3sa2_free(chip); | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_PNP | ||||
| #define is_isapnp_selected(dev)		isapnp[dev] | ||||
| #else | ||||
| #define is_isapnp_selected(dev)		0 | ||||
| #endif | ||||
| 
 | ||||
| static int __devinit snd_opl3sa2_probe(int dev, | ||||
| 				       struct pnp_dev *pdev, | ||||
| 				       struct pnp_card_link *pcard, | ||||
| @ -683,34 +691,31 @@ static int __devinit snd_opl3sa2_probe(int dev, | ||||
| 	}; | ||||
| 	int err; | ||||
| 
 | ||||
| #ifdef CONFIG_PNP | ||||
| 	if (!isapnp[dev]) { | ||||
| #endif | ||||
| 	if (! is_isapnp_selected(dev)) { | ||||
| 		if (port[dev] == SNDRV_AUTO_PORT) { | ||||
| 			snd_printk("specify port\n"); | ||||
| 			snd_printk(KERN_ERR PFX "specify port\n"); | ||||
| 			return -EINVAL; | ||||
| 		} | ||||
| 		if (wss_port[dev] == SNDRV_AUTO_PORT) { | ||||
| 			snd_printk("specify wss_port\n"); | ||||
| 			snd_printk(KERN_ERR PFX "specify wss_port\n"); | ||||
| 			return -EINVAL; | ||||
| 		} | ||||
| 		if (fm_port[dev] == SNDRV_AUTO_PORT) { | ||||
| 			snd_printk("specify fm_port\n"); | ||||
| 			snd_printk(KERN_ERR PFX "specify fm_port\n"); | ||||
| 			return -EINVAL; | ||||
| 		} | ||||
| 		if (midi_port[dev] == SNDRV_AUTO_PORT) { | ||||
| 			snd_printk("specify midi_port\n"); | ||||
| 			snd_printk(KERN_ERR PFX "specify midi_port\n"); | ||||
| 			return -EINVAL; | ||||
| 		} | ||||
| #ifdef CONFIG_PNP | ||||
| 	} | ||||
| #endif | ||||
| 
 | ||||
| 	card = snd_card_new(index[dev], id[dev], THIS_MODULE, 0); | ||||
| 	if (card == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	strcpy(card->driver, "OPL3SA2"); | ||||
| 	strcpy(card->shortname, "Yamaha OPL3-SA2"); | ||||
| 	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL); | ||||
| 	chip = kzalloc(sizeof(*chip), GFP_KERNEL); | ||||
| 	if (chip == NULL) { | ||||
| 		err = -ENOMEM; | ||||
| 		goto __error; | ||||
| @ -742,7 +747,7 @@ static int __devinit snd_opl3sa2_probe(int dev, | ||||
| 	if ((err = snd_opl3sa2_detect(chip)) < 0) | ||||
| 		goto __error; | ||||
| 	if (request_irq(xirq, snd_opl3sa2_interrupt, SA_INTERRUPT, "OPL3-SA2", (void *)chip)) { | ||||
| 		snd_printk(KERN_ERR "opl3sa2: can't grab IRQ %d\n", xirq); | ||||
| 		snd_printk(KERN_ERR PFX "can't grab IRQ %d\n", xirq); | ||||
| 		err = -ENODEV; | ||||
| 		goto __error; | ||||
| 	} | ||||
| @ -795,6 +800,9 @@ static int __devinit snd_opl3sa2_probe(int dev, | ||||
| 	if (dma2 >= 0) | ||||
| 		sprintf(card->longname + strlen(card->longname), "&%d", xdma2); | ||||
| 
 | ||||
| 	if ((err = snd_card_set_generic_dev(card)) < 0) | ||||
| 		goto __error; | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) | ||||
| 		goto __error; | ||||
| 
 | ||||
| @ -852,8 +860,10 @@ static int __devinit snd_opl3sa2_pnp_cdetect(struct pnp_card_link *card, | ||||
|         int res; | ||||
| 
 | ||||
|         for ( ; dev < SNDRV_CARDS; dev++) { | ||||
|                 if (!enable[dev] || !isapnp[dev]) | ||||
|                         continue; | ||||
| 		if (!enable[dev]) | ||||
| 			continue; | ||||
| 		if (is_isapnp_selected(dev)) | ||||
| 			continue; | ||||
|                 res = snd_opl3sa2_probe(dev, NULL, card, id); | ||||
|                 if (res < 0) | ||||
|                         return res; | ||||
|  | ||||
| @ -1038,8 +1038,7 @@ static int snd_opti93x_capture_prepare(snd_pcm_substream_t *substream) | ||||
| 
 | ||||
| 	chip->c_dma_size = size; | ||||
| 	snd_opti93x_out_mask(chip, OPTi93X_IFACE_CONF, | ||||
| 		OPTi93X_CAPTURE_ENABLE | OPTi93X_CAPTURE_PIO, | ||||
| 		(unsigned char)~(OPTi93X_CAPTURE_ENABLE | OPTi93X_CAPTURE_PIO)); | ||||
| 		OPTi93X_CAPTURE_ENABLE | OPTi93X_CAPTURE_PIO, 0); | ||||
| 
 | ||||
| 	snd_dma_program(chip->dma2, runtime->dma_addr, size, | ||||
| 		DMA_MODE_READ | DMA_AUTOINIT); | ||||
| @ -1274,7 +1273,7 @@ static int snd_opti93x_create(snd_card_t *card, opti9xx_t *chip, | ||||
| 	opti93x_t *codec; | ||||
| 
 | ||||
| 	*rcodec = NULL; | ||||
| 	codec = kcalloc(1, sizeof(*codec), GFP_KERNEL); | ||||
| 	codec = kzalloc(sizeof(*codec), GFP_KERNEL); | ||||
| 	if (codec == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	codec->irq = -1; | ||||
| @ -1895,8 +1894,8 @@ static void snd_card_opti9xx_free(snd_card_t *card) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static int __devinit snd_card_opti9xx_probe(struct pnp_card_link *pcard, | ||||
| 					    const struct pnp_card_device_id *pid) | ||||
| static int snd_card_opti9xx_probe(struct pnp_card_link *pcard, | ||||
| 				  const struct pnp_card_device_id *pid) | ||||
| { | ||||
| 	static long possible_ports[] = {0x530, 0xe80, 0xf40, 0x604, -1}; | ||||
| 	static long possible_mpu_ports[] = {0x300, 0x310, 0x320, 0x330, -1}; | ||||
| @ -1966,6 +1965,10 @@ static int __devinit snd_card_opti9xx_probe(struct pnp_card_link *pcard, | ||||
| 			snd_card_free(card); | ||||
| 			return error; | ||||
| 		} | ||||
| 		if ((error = snd_card_set_generic_dev(card)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			return error; | ||||
| 		} | ||||
| #ifdef CONFIG_PNP | ||||
| 	} | ||||
| #endif	/* CONFIG_PNP */ | ||||
|  | ||||
| @ -1097,7 +1097,7 @@ snd_emu8000_new(snd_card_t *card, int index, long port, int seq_ports, snd_seq_d | ||||
| 	if (seq_ports <= 0) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	hw = kcalloc(1, sizeof(*hw), GFP_KERNEL); | ||||
| 	hw = kzalloc(sizeof(*hw), GFP_KERNEL); | ||||
| 	if (hw == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	spin_lock_init(&hw->reg_lock); | ||||
|  | ||||
| @ -233,7 +233,7 @@ static int emu8k_pcm_open(snd_pcm_substream_t *subs) | ||||
| 	emu8k_pcm_t *rec; | ||||
| 	snd_pcm_runtime_t *runtime = subs->runtime; | ||||
| 
 | ||||
| 	rec = kcalloc(1, sizeof(*rec), GFP_KERNEL); | ||||
| 	rec = kzalloc(sizeof(*rec), GFP_KERNEL); | ||||
| 	if (! rec) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
|  | ||||
| @ -351,6 +351,12 @@ static void snd_sb16_free(snd_card_t *card) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_PNP | ||||
| #define is_isapnp_selected(dev)		isapnp[dev] | ||||
| #else | ||||
| #define is_isapnp_selected(dev)		0 | ||||
| #endif | ||||
| 
 | ||||
| static int __init snd_sb16_probe(int dev, | ||||
| 				 struct pnp_card_link *pcard, | ||||
| 				 const struct pnp_card_device_id *pid) | ||||
| @ -378,10 +384,8 @@ static int __init snd_sb16_probe(int dev, | ||||
| 	card->private_free = snd_sb16_free; | ||||
| #ifdef CONFIG_PNP | ||||
| 	if (isapnp[dev]) { | ||||
| 		if ((err = snd_card_sb16_pnp(dev, acard, pcard, pid))) { | ||||
| 			snd_card_free(card); | ||||
| 			return err; | ||||
| 		} | ||||
| 		if ((err = snd_card_sb16_pnp(dev, acard, pcard, pid))) | ||||
| 			goto _err; | ||||
| 		snd_card_set_dev(card, &pcard->card->dev); | ||||
| 	} | ||||
| #endif | ||||
| @ -389,41 +393,37 @@ static int __init snd_sb16_probe(int dev, | ||||
| 	xirq = irq[dev]; | ||||
| 	xdma8 = dma8[dev]; | ||||
| 	xdma16 = dma16[dev]; | ||||
| #ifdef CONFIG_PNP | ||||
| 	if (!isapnp[dev]) { | ||||
| #endif | ||||
| 	if (xirq == SNDRV_AUTO_IRQ) { | ||||
| 		if ((xirq = snd_legacy_find_free_irq(possible_irqs)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free IRQ\n"); | ||||
| 			return -EBUSY; | ||||
| 	if (! is_isapnp_selected(dev)) { | ||||
| 		if (xirq == SNDRV_AUTO_IRQ) { | ||||
| 			if ((xirq = snd_legacy_find_free_irq(possible_irqs)) < 0) { | ||||
| 				snd_printk(KERN_ERR PFX "unable to find a free IRQ\n"); | ||||
| 				err = -EBUSY; | ||||
| 				goto _err; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	if (xdma8 == SNDRV_AUTO_DMA) { | ||||
| 		if ((xdma8 = snd_legacy_find_free_dma(possible_dmas8)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free 8-bit DMA\n"); | ||||
| 			return -EBUSY; | ||||
| 		if (xdma8 == SNDRV_AUTO_DMA) { | ||||
| 			if ((xdma8 = snd_legacy_find_free_dma(possible_dmas8)) < 0) { | ||||
| 				snd_printk(KERN_ERR PFX "unable to find a free 8-bit DMA\n"); | ||||
| 				err = -EBUSY; | ||||
| 				goto _err; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	if (xdma16 == SNDRV_AUTO_DMA) { | ||||
| 		if ((xdma16 = snd_legacy_find_free_dma(possible_dmas16)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			snd_printk(KERN_ERR PFX "unable to find a free 16-bit DMA\n"); | ||||
| 			return -EBUSY; | ||||
| 		if (xdma16 == SNDRV_AUTO_DMA) { | ||||
| 			if ((xdma16 = snd_legacy_find_free_dma(possible_dmas16)) < 0) { | ||||
| 				snd_printk(KERN_ERR PFX "unable to find a free 16-bit DMA\n"); | ||||
| 				err = -EBUSY; | ||||
| 				goto _err; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	/* non-PnP FM port address is hardwired with base port address */ | ||||
| 	fm_port[dev] = port[dev]; | ||||
| 	/* block the 0x388 port to avoid PnP conflicts */ | ||||
| 	acard->fm_res = request_region(0x388, 4, "SoundBlaster FM"); | ||||
| 		/* non-PnP FM port address is hardwired with base port address */ | ||||
| 		fm_port[dev] = port[dev]; | ||||
| 		/* block the 0x388 port to avoid PnP conflicts */ | ||||
| 		acard->fm_res = request_region(0x388, 4, "SoundBlaster FM"); | ||||
| #ifdef SNDRV_SBAWE_EMU8000 | ||||
| 	/* non-PnP AWE port address is hardwired with base port address */ | ||||
| 	awe_port[dev] = port[dev] + 0x400; | ||||
| 		/* non-PnP AWE port address is hardwired with base port address */ | ||||
| 		awe_port[dev] = port[dev] + 0x400; | ||||
| #endif | ||||
| #ifdef CONFIG_PNP | ||||
| 	} | ||||
| #endif | ||||
| 
 | ||||
| 	if ((err = snd_sbdsp_create(card, | ||||
| 				    port[dev], | ||||
| @ -432,28 +432,20 @@ static int __init snd_sb16_probe(int dev, | ||||
| 				    xdma8, | ||||
| 				    xdma16, | ||||
| 				    SB_HW_AUTO, | ||||
| 				    &chip)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 				    &chip)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if (chip->hardware != SB_HW_16) { | ||||
| 		snd_card_free(card); | ||||
| 		snd_printdd("SB 16 chip was not detected at 0x%lx\n", port[dev]); | ||||
| 		return -ENODEV; | ||||
| 		snd_printk(KERN_ERR PFX "SB 16 chip was not detected at 0x%lx\n", port[dev]); | ||||
| 		err = -ENODEV; | ||||
| 		goto _err; | ||||
| 	} | ||||
| 	chip->mpu_port = mpu_port[dev]; | ||||
| #ifdef CONFIG_PNP | ||||
| 	if (!isapnp[dev] && (err = snd_sb16dsp_configure(chip)) < 0) { | ||||
| #else | ||||
| 	if ((err = snd_sb16dsp_configure(chip)) < 0) { | ||||
| #endif | ||||
| 		snd_card_free(card); | ||||
| 		return -ENXIO; | ||||
| 	} | ||||
| 	if ((err = snd_sb16dsp_pcm(chip, 0, NULL)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return -ENXIO; | ||||
| 	} | ||||
| 	if (! is_isapnp_selected(dev) && (err = snd_sb16dsp_configure(chip)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_sb16dsp_pcm(chip, 0, NULL)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	strcpy(card->driver, | ||||
| #ifdef SNDRV_SBAWE_EMU8000 | ||||
| @ -474,10 +466,8 @@ static int __init snd_sb16_probe(int dev, | ||||
| 	if (chip->mpu_port > 0 && chip->mpu_port != SNDRV_AUTO_PORT) { | ||||
| 		if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_SB, | ||||
| 					       chip->mpu_port, 0, | ||||
| 					       xirq, 0, &chip->rmidi)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			return -ENXIO; | ||||
| 		} | ||||
| 					       xirq, 0, &chip->rmidi)) < 0) | ||||
| 			goto _err; | ||||
| 		chip->rmidi_callback = snd_mpu401_uart_interrupt; | ||||
| 	} | ||||
| 
 | ||||
| @ -499,17 +489,13 @@ static int __init snd_sb16_probe(int dev, | ||||
| #else | ||||
| 			int seqdev = 1; | ||||
| #endif | ||||
| 			if ((err = snd_opl3_hwdep_new(opl3, 0, seqdev, &synth)) < 0) { | ||||
| 				snd_card_free(card); | ||||
| 				return -ENXIO; | ||||
| 			} | ||||
| 			if ((err = snd_opl3_hwdep_new(opl3, 0, seqdev, &synth)) < 0) | ||||
| 				goto _err; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if ((err = snd_sbmixer_new(chip)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return -ENXIO; | ||||
| 	} | ||||
| 	if ((err = snd_sbmixer_new(chip)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| #ifdef CONFIG_SND_SB16_CSP | ||||
| 	/* CSP chip on SB16ASP/AWE32 */ | ||||
| @ -525,11 +511,11 @@ static int __init snd_sb16_probe(int dev, | ||||
| #endif | ||||
| #ifdef SNDRV_SBAWE_EMU8000 | ||||
| 	if (awe_port[dev] > 0) { | ||||
| 		if (snd_emu8000_new(card, 1, awe_port[dev], | ||||
| 				    seq_ports[dev], NULL) < 0) { | ||||
| 		if ((err = snd_emu8000_new(card, 1, awe_port[dev], | ||||
| 					   seq_ports[dev], NULL)) < 0) { | ||||
| 			snd_printk(KERN_ERR PFX "fatal error - EMU-8000 synthesizer not detected at 0x%lx\n", awe_port[dev]); | ||||
| 			snd_card_free(card); | ||||
| 			return -ENXIO; | ||||
| 
 | ||||
| 			goto _err; | ||||
| 		} | ||||
| 	} | ||||
| #endif | ||||
| @ -541,15 +527,21 @@ static int __init snd_sb16_probe(int dev, | ||||
| 		(mic_agc[dev] ? 0x00 : 0x01)); | ||||
| 	spin_unlock_irqrestore(&chip->mixer_lock, flags); | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_card_set_generic_dev(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if (pcard) | ||||
| 		pnp_set_card_drvdata(pcard, card); | ||||
| 	else | ||||
| 		snd_sb16_legacy[dev] = card; | ||||
| 	return 0; | ||||
| 
 | ||||
|  _err: | ||||
| 	snd_card_free(card); | ||||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| static int __init snd_sb16_probe_legacy_port(unsigned long xport) | ||||
| @ -560,10 +552,8 @@ static int __init snd_sb16_probe_legacy_port(unsigned long xport) | ||||
| 	for ( ; dev < SNDRV_CARDS; dev++) { | ||||
| 		if (!enable[dev] || port[dev] != SNDRV_AUTO_PORT) | ||||
| 			continue; | ||||
| #ifdef CONFIG_PNP | ||||
| 		if (isapnp[dev]) | ||||
| 		if (is_isapnp_selected(dev)) | ||||
| 			continue; | ||||
| #endif | ||||
| 		port[dev] = xport; | ||||
| 		res = snd_sb16_probe(dev, NULL, NULL); | ||||
| 		if (res < 0) | ||||
| @ -621,10 +611,8 @@ static int __init alsa_card_sb16_init(void) | ||||
| 	for (dev = 0; dev < SNDRV_CARDS; dev++) { | ||||
| 		if (!enable[dev] || port[dev] == SNDRV_AUTO_PORT) | ||||
| 			continue; | ||||
| #ifdef CONFIG_PNP | ||||
| 		if (isapnp[dev]) | ||||
| 		if (is_isapnp_selected(dev)) | ||||
| 			continue; | ||||
| #endif | ||||
| 		if (!snd_sb16_probe(dev, NULL, NULL)) { | ||||
| 			cards++; | ||||
| 			continue; | ||||
|  | ||||
| @ -122,7 +122,7 @@ int snd_sb_csp_new(sb_t *chip, int device, snd_hwdep_t ** rhwdep) | ||||
| 	if ((err = snd_hwdep_new(chip->card, "SB16-CSP", device, &hw)) < 0) | ||||
| 		return err; | ||||
| 
 | ||||
| 	if ((p = kcalloc(1, sizeof(*p), GFP_KERNEL)) == NULL) { | ||||
| 	if ((p = kzalloc(sizeof(*p), GFP_KERNEL)) == NULL) { | ||||
| 		snd_device_free(chip->card, hw); | ||||
| 		return -ENOMEM; | ||||
| 	} | ||||
|  | ||||
| @ -107,54 +107,47 @@ static int __init snd_sb8_probe(int dev) | ||||
| 				    dma8[dev], | ||||
| 				    -1, | ||||
| 				    SB_HW_AUTO, | ||||
| 				    &chip)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 				    &chip)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if (chip->hardware >= SB_HW_16) { | ||||
| 		snd_card_free(card); | ||||
| 		if (chip->hardware == SB_HW_ALS100) | ||||
| 			snd_printdd("ALS100 chip detected at 0x%lx, try snd-als100 module\n", | ||||
| 			snd_printk(KERN_WARNING "ALS100 chip detected at 0x%lx, try snd-als100 module\n", | ||||
| 				    port[dev]); | ||||
| 		else | ||||
| 			snd_printdd("SB 16 chip detected at 0x%lx, try snd-sb16 module\n", | ||||
| 				    port[dev]); | ||||
| 		return -ENODEV; | ||||
| 			snd_printk(KERN_WARNING "SB 16 chip detected at 0x%lx, try snd-sb16 module\n", | ||||
| 				   port[dev]); | ||||
| 		err = -ENODEV; | ||||
| 		goto _err; | ||||
| 	} | ||||
| 
 | ||||
| 	if ((err = snd_sb8dsp_pcm(chip, 0, NULL)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_sbmixer_new(chip)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_sb8dsp_pcm(chip, 0, NULL)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_sbmixer_new(chip)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if (chip->hardware == SB_HW_10 || chip->hardware == SB_HW_20) { | ||||
| 		if ((err = snd_opl3_create(card, chip->port + 8, 0, | ||||
| 					   OPL3_HW_AUTO, 1, | ||||
| 					   &opl3)) < 0) { | ||||
| 			snd_printk(KERN_ERR "sb8: no OPL device at 0x%lx\n", chip->port + 8); | ||||
| 			snd_printk(KERN_WARNING "sb8: no OPL device at 0x%lx\n", chip->port + 8); | ||||
| 		} | ||||
| 	} else { | ||||
| 		if ((err = snd_opl3_create(card, chip->port, chip->port + 2, | ||||
| 					   OPL3_HW_AUTO, 1, | ||||
| 					   &opl3)) < 0) { | ||||
| 			snd_printk(KERN_ERR "sb8: no OPL device at 0x%lx-0x%lx\n", | ||||
| 			snd_printk(KERN_WARNING "sb8: no OPL device at 0x%lx-0x%lx\n", | ||||
| 				   chip->port, chip->port + 2); | ||||
| 		} | ||||
| 	} | ||||
| 	if (err >= 0) { | ||||
| 		if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) { | ||||
| 			snd_card_free(card); | ||||
| 			return err; | ||||
| 		} | ||||
| 		if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) | ||||
| 			goto _err; | ||||
| 	} | ||||
| 
 | ||||
| 	if ((err = snd_sb8dsp_midi(chip, 0, NULL)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 	if ((err = snd_sb8dsp_midi(chip, 0, NULL)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	strcpy(card->driver, chip->hardware == SB_HW_PRO ? "SB Pro" : "SB8"); | ||||
| 	strcpy(card->shortname, chip->name); | ||||
| @ -162,12 +155,19 @@ static int __init snd_sb8_probe(int dev) | ||||
| 		chip->name, | ||||
| 		chip->port, | ||||
| 		irq[dev], dma8[dev]); | ||||
| 	if ((err = snd_card_register(card)) < 0) { | ||||
| 		snd_card_free(card); | ||||
| 		return err; | ||||
| 	} | ||||
| 
 | ||||
| 	if ((err = snd_card_set_generic_dev(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	if ((err = snd_card_register(card)) < 0) | ||||
| 		goto _err; | ||||
| 
 | ||||
| 	snd_sb8_cards[dev] = card; | ||||
| 	return 0; | ||||
| 
 | ||||
|  _err: | ||||
| 	snd_card_free(card); | ||||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| static int __init snd_card_sb8_legacy_auto_probe(unsigned long xport) | ||||
|  | ||||
| @ -221,7 +221,7 @@ int snd_sbdsp_create(snd_card_t *card, | ||||
| 
 | ||||
| 	snd_assert(r_chip != NULL, return -EINVAL); | ||||
| 	*r_chip = NULL; | ||||
| 	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL); | ||||
| 	chip = kzalloc(sizeof(*chip), GFP_KERNEL); | ||||
| 	if (chip == NULL) | ||||
| 		return -ENOMEM; | ||||
| 	spin_lock_init(&chip->reg_lock); | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue
	
	Block a user