Merge git://git.kernel.org/pub/scm/linux/kernel/git/perex/alsa
* git://git.kernel.org/pub/scm/linux/kernel/git/perex/alsa: (22 commits) [ALSA] via82xx - Use DXS_SRC as default for VIA8235/8237/8251 chips [ALSA] hda-codec - Add model entry for ASUS Z62F [ALSA] PCMCIA sound devices shouldn't depend on ISA [ALSA] hda-codec - Fix capture from line-in on VAIO SZ/FE laptops [ALSA] Fix Oops at rmmod with CONFIG_SND_VERBOSE_PROCFS=n [ALSA] PCM core - introduce CONFIG_SND_PCM_XRUN_DEBUG [ALSA] adding __devinitdata to pci_device_id [ALSA] add __devinitdata to all pci_device_id [ALSA] hda-codec - Add codec id for AD1988B codec chip [ALSA] hda-codec - Add model entry for ASUS M9 laptop [ALSA] pcxhr - Fix a compiler warning on 64bit architectures [ALSA] via82xx: tweak VT8251 workaround [ALSA] intel8x0 - Disable ALI5455 SPDIF-input [ALSA] via82xx: add support for VIA VT8251 (AC'97) [ALSA] Fix typos and add information about Jack support to Audiophile-Usb.txt [ALSA] Fix double free in error path of miro driver [ALSA] hda-codec - Add entry for Epox EP-5LDA+ GLi [ALSA] sound/pci/: remove duplicate #include's [ALSA] hda-codec - Use model 'hp' for all HP laptops with AD1981HD [ALSA] continue on IS_ERR from platform device registration ...
This commit is contained in:
commit
494b9aea6d
|
@ -1,4 +1,4 @@
|
||||||
Guide to using M-Audio Audiophile USB with ALSA and Jack v1.2
|
Guide to using M-Audio Audiophile USB with ALSA and Jack v1.3
|
||||||
========================================================
|
========================================================
|
||||||
|
|
||||||
Thibault Le Meur <Thibault.LeMeur@supelec.fr>
|
Thibault Le Meur <Thibault.LeMeur@supelec.fr>
|
||||||
|
@ -22,16 +22,16 @@ The device has 4 audio interfaces, and 2 MIDI ports:
|
||||||
* Midi In (Mi)
|
* Midi In (Mi)
|
||||||
* Midi Out (Mo)
|
* Midi Out (Mo)
|
||||||
|
|
||||||
The internal DAC/ADC has the following caracteristics:
|
The internal DAC/ADC has the following characteristics:
|
||||||
* sample depth of 16 or 24 bits
|
* sample depth of 16 or 24 bits
|
||||||
* sample rate from 8kHz to 96kHz
|
* sample rate from 8kHz to 96kHz
|
||||||
* Two ports can't use different sample depths at the same time.Moreover, the
|
* Two ports can't use different sample depths at the same time. Moreover, the
|
||||||
Audiophile USB documentation gives the following Warning: "Please exit any
|
Audiophile USB documentation gives the following Warning: "Please exit any
|
||||||
audio application running before switching between bit depths"
|
audio application running before switching between bit depths"
|
||||||
|
|
||||||
Due to the USB 1.1 bandwidth limitation, a limited number of interfaces can be
|
Due to the USB 1.1 bandwidth limitation, a limited number of interfaces can be
|
||||||
activated at the same time depending on the audio mode selected:
|
activated at the same time depending on the audio mode selected:
|
||||||
* 16-bit/48kHz ==> 4 channels in/ 4 channels out
|
* 16-bit/48kHz ==> 4 channels in/4 channels out
|
||||||
- Ai+Ao+Di+Do
|
- Ai+Ao+Di+Do
|
||||||
* 24-bit/48kHz ==> 4 channels in/2 channels out,
|
* 24-bit/48kHz ==> 4 channels in/2 channels out,
|
||||||
or 2 channels in/4 channels out
|
or 2 channels in/4 channels out
|
||||||
|
@ -41,8 +41,8 @@ activated at the same time depending on the audio mode selected:
|
||||||
|
|
||||||
Important facts about the Digital interface:
|
Important facts about the Digital interface:
|
||||||
--------------------------------------------
|
--------------------------------------------
|
||||||
* The Do port additionnaly supports surround-encoded AC-3 and DTS passthrough,
|
* The Do port additionally supports surround-encoded AC-3 and DTS passthrough,
|
||||||
though I haven't tested it under linux
|
though I haven't tested it under Linux
|
||||||
- Note that in this setup only the Do interface can be enabled
|
- Note that in this setup only the Do interface can be enabled
|
||||||
* Apart from recording an audio digital stream, enabling the Di port is a way
|
* Apart from recording an audio digital stream, enabling the Di port is a way
|
||||||
to synchronize the device to an external sample clock
|
to synchronize the device to an external sample clock
|
||||||
|
@ -60,24 +60,23 @@ synchronization error (for instance sound played at an odd sample rate)
|
||||||
The Audiophile USB MIDI ports will be automatically supported once the
|
The Audiophile USB MIDI ports will be automatically supported once the
|
||||||
following modules have been loaded:
|
following modules have been loaded:
|
||||||
* snd-usb-audio
|
* snd-usb-audio
|
||||||
* snd-seq
|
|
||||||
* snd-seq-midi
|
* snd-seq-midi
|
||||||
|
|
||||||
No additionnal setting is required.
|
No additional setting is required.
|
||||||
|
|
||||||
2.2 - Audio ports
|
2.2 - Audio ports
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
Audio functions of the Audiophile USB device are handled by the snd-usb-audio
|
Audio functions of the Audiophile USB device are handled by the snd-usb-audio
|
||||||
module. This module can work in a default mode (without any device-specific
|
module. This module can work in a default mode (without any device-specific
|
||||||
parameter), or in an advanced mode with the device-specific parameter called
|
parameter), or in an "advanced" mode with the device-specific parameter called
|
||||||
"device_setup".
|
"device_setup".
|
||||||
|
|
||||||
2.2.1 - Default Alsa driver mode
|
2.2.1 - Default Alsa driver mode
|
||||||
|
|
||||||
The default behaviour of the snd-usb-audio driver is to parse the device
|
The default behavior of the snd-usb-audio driver is to parse the device
|
||||||
capabilities at startup and enable all functions inside the device (including
|
capabilities at startup and enable all functions inside the device (including
|
||||||
all ports at any sample rates and any sample depths supported). This approach
|
all ports at any supported sample rates and sample depths). This approach
|
||||||
has the advantage to let the driver easily switch from sample rates/depths
|
has the advantage to let the driver easily switch from sample rates/depths
|
||||||
automatically according to the need of the application claiming the device.
|
automatically according to the need of the application claiming the device.
|
||||||
|
|
||||||
|
@ -114,9 +113,9 @@ gain).
|
||||||
For people having this problem, the snd-usb-audio module has a new module
|
For people having this problem, the snd-usb-audio module has a new module
|
||||||
parameter called "device_setup".
|
parameter called "device_setup".
|
||||||
|
|
||||||
2.2.2.1 - Initializing the working mode of the Audiohile USB
|
2.2.2.1 - Initializing the working mode of the Audiophile USB
|
||||||
|
|
||||||
As far as the Audiohile USB device is concerned, this value let the user
|
As far as the Audiophile USB device is concerned, this value let the user
|
||||||
specify:
|
specify:
|
||||||
* the sample depth
|
* the sample depth
|
||||||
* the sample rate
|
* the sample rate
|
||||||
|
@ -174,20 +173,20 @@ The parameter can be given:
|
||||||
|
|
||||||
IMPORTANT NOTE WHEN SWITCHING CONFIGURATION:
|
IMPORTANT NOTE WHEN SWITCHING CONFIGURATION:
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
* You may need to _first_ intialize the module with the correct device_setup
|
* You may need to _first_ initialize the module with the correct device_setup
|
||||||
parameter and _only_after_ turn on the Audiophile USB device
|
parameter and _only_after_ turn on the Audiophile USB device
|
||||||
* This is especially true when switching the sample depth:
|
* This is especially true when switching the sample depth:
|
||||||
- first trun off the device
|
- first turn off the device
|
||||||
- de-register the snd-usb-audio module
|
- de-register the snd-usb-audio module (modprobe -r)
|
||||||
- change the device_setup parameter (by either manually reprobing the module
|
- change the device_setup parameter by changing the device_setup
|
||||||
or changing modprobe.conf)
|
option in /etc/modprobe.conf
|
||||||
- turn on the device
|
- turn on the device
|
||||||
|
|
||||||
2.2.2.3 - Audiophile USB's device_setup structure
|
2.2.2.3 - Audiophile USB's device_setup structure
|
||||||
|
|
||||||
If you want to understand the device_setup magic numbers for the Audiophile
|
If you want to understand the device_setup magic numbers for the Audiophile
|
||||||
USB, you need some very basic understanding of binary computation. However,
|
USB, you need some very basic understanding of binary computation. However,
|
||||||
this is not required to use the parameter and you may skip thi section.
|
this is not required to use the parameter and you may skip this section.
|
||||||
|
|
||||||
The device_setup is one byte long and its structure is the following:
|
The device_setup is one byte long and its structure is the following:
|
||||||
|
|
||||||
|
@ -231,11 +230,11 @@ Caution:
|
||||||
|
|
||||||
2.2.3 - USB implementation details for this device
|
2.2.3 - USB implementation details for this device
|
||||||
|
|
||||||
You may safely skip this section if you're not interrested in driver
|
You may safely skip this section if you're not interested in driver
|
||||||
development.
|
development.
|
||||||
|
|
||||||
This section describes some internals aspect of the device and summarize the
|
This section describes some internal aspects of the device and summarize the
|
||||||
data I got by usb-snooping the windows and linux drivers.
|
data I got by usb-snooping the windows and Linux drivers.
|
||||||
|
|
||||||
The M-Audio Audiophile USB has 7 USB Interfaces:
|
The M-Audio Audiophile USB has 7 USB Interfaces:
|
||||||
a "USB interface":
|
a "USB interface":
|
||||||
|
@ -277,9 +276,9 @@ Here is a short description of the AltSettings capabilities:
|
||||||
- 16-bit depth, 8-48kHz sample mode
|
- 16-bit depth, 8-48kHz sample mode
|
||||||
- Synch playback (Do), audio format type III IEC1937_AC-3
|
- Synch playback (Do), audio format type III IEC1937_AC-3
|
||||||
|
|
||||||
In order to ensure a correct intialization of the device, the driver
|
In order to ensure a correct initialization of the device, the driver
|
||||||
_must_know_ how the device will be used:
|
_must_know_ how the device will be used:
|
||||||
* if DTS is choosen, only Interface 2 with AltSet nb.6 must be
|
* if DTS is chosen, only Interface 2 with AltSet nb.6 must be
|
||||||
registered
|
registered
|
||||||
* if 96KHz only AltSets nb.1 of each interface must be selected
|
* if 96KHz only AltSets nb.1 of each interface must be selected
|
||||||
* if samples are using 24bits/48KHz then AltSet 2 must me used if
|
* if samples are using 24bits/48KHz then AltSet 2 must me used if
|
||||||
|
@ -290,7 +289,7 @@ _must_know_ how the device will be used:
|
||||||
is not connected
|
is not connected
|
||||||
|
|
||||||
When device_setup is given as a parameter to the snd-usb-audio module, the
|
When device_setup is given as a parameter to the snd-usb-audio module, the
|
||||||
parse_audio_enpoint function uses a quirk called
|
parse_audio_endpoints function uses a quirk called
|
||||||
"audiophile_skip_setting_quirk" in order to prevent AltSettings not
|
"audiophile_skip_setting_quirk" in order to prevent AltSettings not
|
||||||
corresponding to device_setup from being registered in the driver.
|
corresponding to device_setup from being registered in the driver.
|
||||||
|
|
||||||
|
@ -317,9 +316,8 @@ However you may see the following warning message:
|
||||||
using the "default" ALSA device. This is less efficient than it could be.
|
using the "default" ALSA device. This is less efficient than it could be.
|
||||||
Consider using a hardware device instead rather than using the plug layer."
|
Consider using a hardware device instead rather than using the plug layer."
|
||||||
|
|
||||||
|
|
||||||
3.2 - Patching alsa to use direct pcm device
|
3.2 - Patching alsa to use direct pcm device
|
||||||
-------------------------------------------
|
--------------------------------------------
|
||||||
A patch for Jack by Andreas Steinmetz adds support for Big Endian devices.
|
A patch for Jack by Andreas Steinmetz adds support for Big Endian devices.
|
||||||
However it has not been included in the CVS tree.
|
However it has not been included in the CVS tree.
|
||||||
|
|
||||||
|
@ -331,3 +329,32 @@ After having applied the patch you can run jackd with the following command
|
||||||
line:
|
line:
|
||||||
% jackd -R -dalsa -Phw:1,0 -r48000 -p128 -n2 -D -Chw:1,1
|
% jackd -R -dalsa -Phw:1,0 -r48000 -p128 -n2 -D -Chw:1,1
|
||||||
|
|
||||||
|
3.2 - Getting 2 input and/or output interfaces in Jack
|
||||||
|
------------------------------------------------------
|
||||||
|
|
||||||
|
As you can see, starting the Jack server this way will only enable 1 stereo
|
||||||
|
input (Di or Ai) and 1 stereo output (Ao or Do).
|
||||||
|
|
||||||
|
This is due to the following restrictions:
|
||||||
|
* Jack can only open one capture device and one playback device at a time
|
||||||
|
* The Audiophile USB is seen as 2 (or three) Alsa devices: hw:1,0, hw:1,1
|
||||||
|
(and optionally hw:1,2)
|
||||||
|
If you want to get Ai+Di and/or Ao+Do support with Jack, you would need to
|
||||||
|
combine the Alsa devices into one logical "complex" device.
|
||||||
|
|
||||||
|
If you want to give it a try, I recommend reading the information from
|
||||||
|
this page: http://www.sound-man.co.uk/linuxaudio/ice1712multi.html
|
||||||
|
It is related to another device (ice1712) but can be adapted to suit
|
||||||
|
the Audiophile USB.
|
||||||
|
|
||||||
|
Enabling multiple Audiophile USB interfaces for Jackd will certainly require:
|
||||||
|
* patching Jack with the previously mentioned "Big Endian" patch
|
||||||
|
* patching Jackd with the MMAP_COMPLEX patch (see the ice1712 page)
|
||||||
|
* patching the alsa-lib/src/pcm/pcm_multi.c file (see the ice1712 page)
|
||||||
|
* define a multi device (combination of hw:1,0 and hw:1,1) in your .asoundrc
|
||||||
|
file
|
||||||
|
* start jackd with this device
|
||||||
|
|
||||||
|
I had no success in testing this for now, but this may be due to my OS
|
||||||
|
configuration. If you have any success with this kind of setup, please
|
||||||
|
drop me an email.
|
||||||
|
|
|
@ -1172,7 +1172,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
/* PCI IDs */
|
/* PCI IDs */
|
||||||
static struct pci_device_id snd_mychip_ids[] = {
|
static struct pci_device_id snd_mychip_ids[] __devinitdata = {
|
||||||
{ PCI_VENDOR_ID_FOO, PCI_DEVICE_ID_BAR,
|
{ PCI_VENDOR_ID_FOO, PCI_DEVICE_ID_BAR,
|
||||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
|
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
|
||||||
....
|
....
|
||||||
|
@ -1565,7 +1565,7 @@
|
||||||
<informalexample>
|
<informalexample>
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
static struct pci_device_id snd_mychip_ids[] = {
|
static struct pci_device_id snd_mychip_ids[] __devinitdata = {
|
||||||
{ PCI_VENDOR_ID_FOO, PCI_DEVICE_ID_BAR,
|
{ PCI_VENDOR_ID_FOO, PCI_DEVICE_ID_BAR,
|
||||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
|
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
|
||||||
....
|
....
|
||||||
|
|
|
@ -616,7 +616,7 @@ static struct snd_kcontrol_new snd_cx88_capture_volume = {
|
||||||
* Only boards with eeprom and byte 1 at eeprom=1 have it
|
* Only boards with eeprom and byte 1 at eeprom=1 have it
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static struct pci_device_id cx88_audio_pci_tbl[] = {
|
static struct pci_device_id cx88_audio_pci_tbl[] __devinitdata = {
|
||||||
{0x14f1,0x8801,PCI_ANY_ID,PCI_ANY_ID,0,0,0},
|
{0x14f1,0x8801,PCI_ANY_ID,PCI_ANY_ID,0,0,0},
|
||||||
{0x14f1,0x8811,PCI_ANY_ID,PCI_ANY_ID,0,0,0},
|
{0x14f1,0x8811,PCI_ANY_ID,PCI_ANY_ID,0,0,0},
|
||||||
{0, }
|
{0, }
|
||||||
|
|
|
@ -374,12 +374,14 @@ struct snd_pcm_substream {
|
||||||
/* -- OSS things -- */
|
/* -- OSS things -- */
|
||||||
struct snd_pcm_oss_substream oss;
|
struct snd_pcm_oss_substream oss;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_SND_VERBOSE_PROCFS
|
||||||
struct snd_info_entry *proc_root;
|
struct snd_info_entry *proc_root;
|
||||||
struct snd_info_entry *proc_info_entry;
|
struct snd_info_entry *proc_info_entry;
|
||||||
struct snd_info_entry *proc_hw_params_entry;
|
struct snd_info_entry *proc_hw_params_entry;
|
||||||
struct snd_info_entry *proc_sw_params_entry;
|
struct snd_info_entry *proc_sw_params_entry;
|
||||||
struct snd_info_entry *proc_status_entry;
|
struct snd_info_entry *proc_status_entry;
|
||||||
struct snd_info_entry *proc_prealloc_entry;
|
struct snd_info_entry *proc_prealloc_entry;
|
||||||
|
#endif
|
||||||
/* misc flags */
|
/* misc flags */
|
||||||
unsigned int no_mmap_ctrl: 1;
|
unsigned int no_mmap_ctrl: 1;
|
||||||
unsigned int hw_opened: 1;
|
unsigned int hw_opened: 1;
|
||||||
|
@ -400,12 +402,14 @@ struct snd_pcm_str {
|
||||||
struct snd_pcm_oss_stream oss;
|
struct snd_pcm_oss_stream oss;
|
||||||
#endif
|
#endif
|
||||||
struct snd_pcm_file *files;
|
struct snd_pcm_file *files;
|
||||||
|
#ifdef CONFIG_SND_VERBOSE_PROCFS
|
||||||
struct snd_info_entry *proc_root;
|
struct snd_info_entry *proc_root;
|
||||||
struct snd_info_entry *proc_info_entry;
|
struct snd_info_entry *proc_info_entry;
|
||||||
#ifdef CONFIG_SND_DEBUG
|
#ifdef CONFIG_SND_PCM_XRUN_DEBUG
|
||||||
unsigned int xrun_debug; /* 0 = disabled, 1 = verbose, 2 = stacktrace */
|
unsigned int xrun_debug; /* 0 = disabled, 1 = verbose, 2 = stacktrace */
|
||||||
struct snd_info_entry *proc_xrun_debug_entry;
|
struct snd_info_entry *proc_xrun_debug_entry;
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
struct snd_pcm {
|
struct snd_pcm {
|
||||||
|
|
|
@ -75,7 +75,9 @@ struct snd_pcm_oss_substream {
|
||||||
struct snd_pcm_oss_stream {
|
struct snd_pcm_oss_stream {
|
||||||
struct snd_pcm_oss_setup *setup_list; /* setup list */
|
struct snd_pcm_oss_setup *setup_list; /* setup list */
|
||||||
struct mutex setup_mutex;
|
struct mutex setup_mutex;
|
||||||
|
#ifdef CONFIG_SND_VERBOSE_PROCFS
|
||||||
struct snd_info_entry *proc_entry;
|
struct snd_info_entry *proc_entry;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
struct snd_pcm_oss {
|
struct snd_pcm_oss {
|
||||||
|
|
|
@ -142,7 +142,7 @@ config SND_SUPPORT_OLD_API
|
||||||
|
|
||||||
config SND_VERBOSE_PROCFS
|
config SND_VERBOSE_PROCFS
|
||||||
bool "Verbose procfs contents"
|
bool "Verbose procfs contents"
|
||||||
depends on SND
|
depends on SND && PROC_FS
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
Say Y here to include code for verbose procfs contents (provides
|
Say Y here to include code for verbose procfs contents (provides
|
||||||
|
@ -171,3 +171,13 @@ config SND_DEBUG_DETECT
|
||||||
help
|
help
|
||||||
Say Y here to enable extra-verbose log messages printed when
|
Say Y here to enable extra-verbose log messages printed when
|
||||||
detecting devices.
|
detecting devices.
|
||||||
|
|
||||||
|
config SND_PCM_XRUN_DEBUG
|
||||||
|
bool "Enable PCM ring buffer overrun/underrun debugging"
|
||||||
|
default n
|
||||||
|
depends on SND_DEBUG && SND_VERBOSE_PROCFS
|
||||||
|
help
|
||||||
|
Say Y to enable the PCM ring buffer overrun/underrun debugging.
|
||||||
|
It is usually not required, but if you have trouble with
|
||||||
|
sound clicking when system is loaded, it may help to determine
|
||||||
|
the process or driver which causes the scheduling gaps.
|
||||||
|
|
|
@ -1242,6 +1242,8 @@ static int snd_pcm_oss_set_format(struct snd_pcm_oss_file *pcm_oss_file, int for
|
||||||
|
|
||||||
if (format != AFMT_QUERY) {
|
if (format != AFMT_QUERY) {
|
||||||
formats = snd_pcm_oss_get_formats(pcm_oss_file);
|
formats = snd_pcm_oss_get_formats(pcm_oss_file);
|
||||||
|
if (formats < 0)
|
||||||
|
return formats;
|
||||||
if (!(formats & format))
|
if (!(formats & format))
|
||||||
format = AFMT_U8;
|
format = AFMT_U8;
|
||||||
for (idx = 1; idx >= 0; --idx) {
|
for (idx = 1; idx >= 0; --idx) {
|
||||||
|
@ -2212,7 +2214,7 @@ static int snd_pcm_oss_mmap(struct file *file, struct vm_area_struct *area)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PROC_FS
|
#ifdef CONFIG_SND_VERBOSE_PROCFS
|
||||||
/*
|
/*
|
||||||
* /proc interface
|
* /proc interface
|
||||||
*/
|
*/
|
||||||
|
@ -2366,10 +2368,10 @@ static void snd_pcm_oss_proc_done(struct snd_pcm *pcm)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else /* !CONFIG_PROC_FS */
|
#else /* !CONFIG_SND_VERBOSE_PROCFS */
|
||||||
#define snd_pcm_oss_proc_init(pcm)
|
#define snd_pcm_oss_proc_init(pcm)
|
||||||
#define snd_pcm_oss_proc_done(pcm)
|
#define snd_pcm_oss_proc_done(pcm)
|
||||||
#endif /* CONFIG_PROC_FS */
|
#endif /* CONFIG_SND_VERBOSE_PROCFS */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ENTRY functions
|
* ENTRY functions
|
||||||
|
|
|
@ -142,7 +142,7 @@ static int snd_pcm_control_ioctl(struct snd_card *card,
|
||||||
return -ENOIOCTLCMD;
|
return -ENOIOCTLCMD;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_PROC_FS) && defined(CONFIG_SND_VERBOSE_PROCFS)
|
#ifdef CONFIG_SND_VERBOSE_PROCFS
|
||||||
|
|
||||||
#define STATE(v) [SNDRV_PCM_STATE_##v] = #v
|
#define STATE(v) [SNDRV_PCM_STATE_##v] = #v
|
||||||
#define STREAM(v) [SNDRV_PCM_STREAM_##v] = #v
|
#define STREAM(v) [SNDRV_PCM_STREAM_##v] = #v
|
||||||
|
@ -436,7 +436,7 @@ static void snd_pcm_substream_proc_status_read(struct snd_info_entry *entry,
|
||||||
snd_iprintf(buffer, "appl_ptr : %ld\n", runtime->control->appl_ptr);
|
snd_iprintf(buffer, "appl_ptr : %ld\n", runtime->control->appl_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SND_DEBUG
|
#ifdef CONFIG_SND_PCM_XRUN_DEBUG
|
||||||
static void snd_pcm_xrun_debug_read(struct snd_info_entry *entry,
|
static void snd_pcm_xrun_debug_read(struct snd_info_entry *entry,
|
||||||
struct snd_info_buffer *buffer)
|
struct snd_info_buffer *buffer)
|
||||||
{
|
{
|
||||||
|
@ -480,7 +480,7 @@ static int snd_pcm_stream_proc_init(struct snd_pcm_str *pstr)
|
||||||
}
|
}
|
||||||
pstr->proc_info_entry = entry;
|
pstr->proc_info_entry = entry;
|
||||||
|
|
||||||
#ifdef CONFIG_SND_DEBUG
|
#ifdef CONFIG_SND_PCM_XRUN_DEBUG
|
||||||
if ((entry = snd_info_create_card_entry(pcm->card, "xrun_debug",
|
if ((entry = snd_info_create_card_entry(pcm->card, "xrun_debug",
|
||||||
pstr->proc_root)) != NULL) {
|
pstr->proc_root)) != NULL) {
|
||||||
entry->c.text.read_size = 64;
|
entry->c.text.read_size = 64;
|
||||||
|
@ -501,7 +501,7 @@ static int snd_pcm_stream_proc_init(struct snd_pcm_str *pstr)
|
||||||
|
|
||||||
static int snd_pcm_stream_proc_done(struct snd_pcm_str *pstr)
|
static int snd_pcm_stream_proc_done(struct snd_pcm_str *pstr)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_SND_DEBUG
|
#ifdef CONFIG_SND_PCM_XRUN_DEBUG
|
||||||
if (pstr->proc_xrun_debug_entry) {
|
if (pstr->proc_xrun_debug_entry) {
|
||||||
snd_info_unregister(pstr->proc_xrun_debug_entry);
|
snd_info_unregister(pstr->proc_xrun_debug_entry);
|
||||||
pstr->proc_xrun_debug_entry = NULL;
|
pstr->proc_xrun_debug_entry = NULL;
|
||||||
|
@ -599,12 +599,12 @@ static int snd_pcm_substream_proc_done(struct snd_pcm_substream *substream)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#else /* !CONFIG_PROC_FS */
|
#else /* !CONFIG_SND_VERBOSE_PROCFS */
|
||||||
static inline int snd_pcm_stream_proc_init(struct snd_pcm_str *pstr) { return 0; }
|
static inline int snd_pcm_stream_proc_init(struct snd_pcm_str *pstr) { return 0; }
|
||||||
static inline int snd_pcm_stream_proc_done(struct snd_pcm_str *pstr) { return 0; }
|
static inline int snd_pcm_stream_proc_done(struct snd_pcm_str *pstr) { return 0; }
|
||||||
static inline int snd_pcm_substream_proc_init(struct snd_pcm_substream *substream) { return 0; }
|
static inline int snd_pcm_substream_proc_init(struct snd_pcm_substream *substream) { return 0; }
|
||||||
static inline int snd_pcm_substream_proc_done(struct snd_pcm_substream *substream) { return 0; }
|
static inline int snd_pcm_substream_proc_done(struct snd_pcm_substream *substream) { return 0; }
|
||||||
#endif /* CONFIG_PROC_FS */
|
#endif /* CONFIG_SND_VERBOSE_PROCFS */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* snd_pcm_new_stream - create a new PCM stream
|
* snd_pcm_new_stream - create a new PCM stream
|
||||||
|
|
|
@ -130,7 +130,7 @@ void snd_pcm_playback_silence(struct snd_pcm_substream *substream, snd_pcm_ufram
|
||||||
static void xrun(struct snd_pcm_substream *substream)
|
static void xrun(struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
|
snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
|
||||||
#ifdef CONFIG_SND_DEBUG
|
#ifdef CONFIG_SND_PCM_XRUN_DEBUG
|
||||||
if (substream->pstr->xrun_debug) {
|
if (substream->pstr->xrun_debug) {
|
||||||
snd_printd(KERN_DEBUG "XRUN: pcmC%dD%d%c\n",
|
snd_printd(KERN_DEBUG "XRUN: pcmC%dD%d%c\n",
|
||||||
substream->pcm->card->number,
|
substream->pcm->card->number,
|
||||||
|
@ -204,7 +204,7 @@ static inline int snd_pcm_update_hw_ptr_interrupt(struct snd_pcm_substream *subs
|
||||||
delta = hw_ptr_interrupt - new_hw_ptr;
|
delta = hw_ptr_interrupt - new_hw_ptr;
|
||||||
if (delta > 0) {
|
if (delta > 0) {
|
||||||
if ((snd_pcm_uframes_t)delta < runtime->buffer_size / 2) {
|
if ((snd_pcm_uframes_t)delta < runtime->buffer_size / 2) {
|
||||||
#ifdef CONFIG_SND_DEBUG
|
#ifdef CONFIG_SND_PCM_XRUN_DEBUG
|
||||||
if (runtime->periods > 1 && substream->pstr->xrun_debug) {
|
if (runtime->periods > 1 && substream->pstr->xrun_debug) {
|
||||||
snd_printd(KERN_ERR "Unexpected hw_pointer value [1] (stream = %i, delta: -%ld, max jitter = %ld): wrong interrupt acknowledge?\n", substream->stream, (long) delta, runtime->buffer_size / 2);
|
snd_printd(KERN_ERR "Unexpected hw_pointer value [1] (stream = %i, delta: -%ld, max jitter = %ld): wrong interrupt acknowledge?\n", substream->stream, (long) delta, runtime->buffer_size / 2);
|
||||||
if (substream->pstr->xrun_debug > 1)
|
if (substream->pstr->xrun_debug > 1)
|
||||||
|
@ -249,7 +249,7 @@ int snd_pcm_update_hw_ptr(struct snd_pcm_substream *substream)
|
||||||
delta = old_hw_ptr - new_hw_ptr;
|
delta = old_hw_ptr - new_hw_ptr;
|
||||||
if (delta > 0) {
|
if (delta > 0) {
|
||||||
if ((snd_pcm_uframes_t)delta < runtime->buffer_size / 2) {
|
if ((snd_pcm_uframes_t)delta < runtime->buffer_size / 2) {
|
||||||
#ifdef CONFIG_SND_DEBUG
|
#ifdef CONFIG_SND_PCM_XRUN_DEBUG
|
||||||
if (runtime->periods > 2 && substream->pstr->xrun_debug) {
|
if (runtime->periods > 2 && substream->pstr->xrun_debug) {
|
||||||
snd_printd(KERN_ERR "Unexpected hw_pointer value [2] (stream = %i, delta: -%ld, max jitter = %ld): wrong interrupt acknowledge?\n", substream->stream, (long) delta, runtime->buffer_size / 2);
|
snd_printd(KERN_ERR "Unexpected hw_pointer value [2] (stream = %i, delta: -%ld, max jitter = %ld): wrong interrupt acknowledge?\n", substream->stream, (long) delta, runtime->buffer_size / 2);
|
||||||
if (substream->pstr->xrun_debug > 1)
|
if (substream->pstr->xrun_debug > 1)
|
||||||
|
|
|
@ -100,8 +100,10 @@ static void snd_pcm_lib_preallocate_dma_free(struct snd_pcm_substream *substream
|
||||||
int snd_pcm_lib_preallocate_free(struct snd_pcm_substream *substream)
|
int snd_pcm_lib_preallocate_free(struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
snd_pcm_lib_preallocate_dma_free(substream);
|
snd_pcm_lib_preallocate_dma_free(substream);
|
||||||
|
#ifdef CONFIG_SND_VERBOSE_PROCFS
|
||||||
snd_info_unregister(substream->proc_prealloc_entry);
|
snd_info_unregister(substream->proc_prealloc_entry);
|
||||||
substream->proc_prealloc_entry = NULL;
|
substream->proc_prealloc_entry = NULL;
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,7 +126,7 @@ int snd_pcm_lib_preallocate_free_for_all(struct snd_pcm *pcm)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PROC_FS
|
#ifdef CONFIG_SND_VERBOSE_PROCFS
|
||||||
/*
|
/*
|
||||||
* read callback for prealloc proc file
|
* read callback for prealloc proc file
|
||||||
*
|
*
|
||||||
|
@ -203,9 +205,9 @@ static inline void preallocate_info_init(struct snd_pcm_substream *substream)
|
||||||
substream->proc_prealloc_entry = entry;
|
substream->proc_prealloc_entry = entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* !CONFIG_PROC_FS */
|
#else /* !CONFIG_SND_VERBOSE_PROCFS */
|
||||||
#define preallocate_info_init(s)
|
#define preallocate_info_init(s)
|
||||||
#endif
|
#endif /* CONFIG_SND_VERBOSE_PROCFS */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* pre-allocate the buffer and create a proc file for the substream
|
* pre-allocate the buffer and create a proc file for the substream
|
||||||
|
|
|
@ -675,10 +675,8 @@ static int __init alsa_card_dummy_init(void)
|
||||||
continue;
|
continue;
|
||||||
device = platform_device_register_simple(SND_DUMMY_DRIVER,
|
device = platform_device_register_simple(SND_DUMMY_DRIVER,
|
||||||
i, NULL, 0);
|
i, NULL, 0);
|
||||||
if (IS_ERR(device)) {
|
if (IS_ERR(device))
|
||||||
err = PTR_ERR(device);
|
continue;
|
||||||
goto errout;
|
|
||||||
}
|
|
||||||
devices[i] = device;
|
devices[i] = device;
|
||||||
cards++;
|
cards++;
|
||||||
}
|
}
|
||||||
|
@ -686,14 +684,10 @@ static int __init alsa_card_dummy_init(void)
|
||||||
#ifdef MODULE
|
#ifdef MODULE
|
||||||
printk(KERN_ERR "Dummy soundcard not found or device busy\n");
|
printk(KERN_ERR "Dummy soundcard not found or device busy\n");
|
||||||
#endif
|
#endif
|
||||||
err = -ENODEV;
|
snd_dummy_unregister_all();
|
||||||
goto errout;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
errout:
|
|
||||||
snd_dummy_unregister_all();
|
|
||||||
return err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit alsa_card_dummy_exit(void)
|
static void __exit alsa_card_dummy_exit(void)
|
||||||
|
|
|
@ -251,10 +251,8 @@ static int __init alsa_card_mpu401_init(void)
|
||||||
#endif
|
#endif
|
||||||
device = platform_device_register_simple(SND_MPU401_DRIVER,
|
device = platform_device_register_simple(SND_MPU401_DRIVER,
|
||||||
i, NULL, 0);
|
i, NULL, 0);
|
||||||
if (IS_ERR(device)) {
|
if (IS_ERR(device))
|
||||||
err = PTR_ERR(device);
|
continue;
|
||||||
goto errout;
|
|
||||||
}
|
|
||||||
platform_devices[i] = device;
|
platform_devices[i] = device;
|
||||||
snd_mpu401_devices++;
|
snd_mpu401_devices++;
|
||||||
}
|
}
|
||||||
|
@ -266,14 +264,10 @@ static int __init alsa_card_mpu401_init(void)
|
||||||
#ifdef MODULE
|
#ifdef MODULE
|
||||||
printk(KERN_ERR "MPU-401 device not found or device busy\n");
|
printk(KERN_ERR "MPU-401 device not found or device busy\n");
|
||||||
#endif
|
#endif
|
||||||
err = -ENODEV;
|
snd_mpu401_unregister_all();
|
||||||
goto errout;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
errout:
|
|
||||||
snd_mpu401_unregister_all();
|
|
||||||
return err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit alsa_card_mpu401_exit(void)
|
static void __exit alsa_card_mpu401_exit(void)
|
||||||
|
|
|
@ -996,10 +996,8 @@ static int __init alsa_card_serial_init(void)
|
||||||
continue;
|
continue;
|
||||||
device = platform_device_register_simple(SND_SERIAL_DRIVER,
|
device = platform_device_register_simple(SND_SERIAL_DRIVER,
|
||||||
i, NULL, 0);
|
i, NULL, 0);
|
||||||
if (IS_ERR(device)) {
|
if (IS_ERR(device))
|
||||||
err = PTR_ERR(device);
|
continue;
|
||||||
goto errout;
|
|
||||||
}
|
|
||||||
devices[i] = device;
|
devices[i] = device;
|
||||||
cards++;
|
cards++;
|
||||||
}
|
}
|
||||||
|
@ -1007,14 +1005,10 @@ static int __init alsa_card_serial_init(void)
|
||||||
#ifdef MODULE
|
#ifdef MODULE
|
||||||
printk(KERN_ERR "serial midi soundcard not found or device busy\n");
|
printk(KERN_ERR "serial midi soundcard not found or device busy\n");
|
||||||
#endif
|
#endif
|
||||||
err = -ENODEV;
|
snd_serial_unregister_all();
|
||||||
goto errout;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
errout:
|
|
||||||
snd_serial_unregister_all();
|
|
||||||
return err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit alsa_card_serial_exit(void)
|
static void __exit alsa_card_serial_exit(void)
|
||||||
|
|
|
@ -169,10 +169,8 @@ static int __init alsa_card_virmidi_init(void)
|
||||||
continue;
|
continue;
|
||||||
device = platform_device_register_simple(SND_VIRMIDI_DRIVER,
|
device = platform_device_register_simple(SND_VIRMIDI_DRIVER,
|
||||||
i, NULL, 0);
|
i, NULL, 0);
|
||||||
if (IS_ERR(device)) {
|
if (IS_ERR(device))
|
||||||
err = PTR_ERR(device);
|
continue;
|
||||||
goto errout;
|
|
||||||
}
|
|
||||||
devices[i] = device;
|
devices[i] = device;
|
||||||
cards++;
|
cards++;
|
||||||
}
|
}
|
||||||
|
@ -180,14 +178,10 @@ static int __init alsa_card_virmidi_init(void)
|
||||||
#ifdef MODULE
|
#ifdef MODULE
|
||||||
printk(KERN_ERR "Card-VirMIDI soundcard not found or device busy\n");
|
printk(KERN_ERR "Card-VirMIDI soundcard not found or device busy\n");
|
||||||
#endif
|
#endif
|
||||||
err = -ENODEV;
|
snd_virmidi_unregister_all();
|
||||||
goto errout;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
errout:
|
|
||||||
snd_virmidi_unregister_all();
|
|
||||||
return err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit alsa_card_virmidi_exit(void)
|
static void __exit alsa_card_virmidi_exit(void)
|
||||||
|
|
|
@ -1179,20 +1179,17 @@ static int __init snd_card_miro_aci_detect(struct snd_card *card, struct snd_mir
|
||||||
/* force ACI into a known state */
|
/* force ACI into a known state */
|
||||||
for (i = 0; i < 3; i++)
|
for (i = 0; i < 3; i++)
|
||||||
if (aci_cmd(miro, ACI_ERROR_OP, -1, -1) < 0) {
|
if (aci_cmd(miro, ACI_ERROR_OP, -1, -1) < 0) {
|
||||||
snd_card_free(card);
|
|
||||||
snd_printk(KERN_ERR "can't force aci into known state.\n");
|
snd_printk(KERN_ERR "can't force aci into known state.\n");
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((miro->aci_vendor=aci_cmd(miro, ACI_READ_IDCODE, -1, -1)) < 0 ||
|
if ((miro->aci_vendor=aci_cmd(miro, ACI_READ_IDCODE, -1, -1)) < 0 ||
|
||||||
(miro->aci_product=aci_cmd(miro, ACI_READ_IDCODE, -1, -1)) < 0) {
|
(miro->aci_product=aci_cmd(miro, ACI_READ_IDCODE, -1, -1)) < 0) {
|
||||||
snd_card_free(card);
|
|
||||||
snd_printk(KERN_ERR "can't read aci id on 0x%lx.\n", miro->aci_port);
|
snd_printk(KERN_ERR "can't read aci id on 0x%lx.\n", miro->aci_port);
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((miro->aci_version=aci_cmd(miro, ACI_READ_VERSION, -1, -1)) < 0) {
|
if ((miro->aci_version=aci_cmd(miro, ACI_READ_VERSION, -1, -1)) < 0) {
|
||||||
snd_card_free(card);
|
|
||||||
snd_printk(KERN_ERR "can't read aci version on 0x%lx.\n",
|
snd_printk(KERN_ERR "can't read aci version on 0x%lx.\n",
|
||||||
miro->aci_port);
|
miro->aci_port);
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
|
|
|
@ -39,7 +39,6 @@
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/dma-mapping.h>
|
|
||||||
|
|
||||||
#include <sound/driver.h>
|
#include <sound/driver.h>
|
||||||
#include <sound/core.h>
|
#include <sound/core.h>
|
||||||
|
@ -1052,7 +1051,7 @@ snd_ad1889_remove(struct pci_dev *pci)
|
||||||
pci_set_drvdata(pci, NULL);
|
pci_set_drvdata(pci, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct pci_device_id snd_ad1889_ids[] = {
|
static struct pci_device_id snd_ad1889_ids[] __devinitdata = {
|
||||||
{ PCI_DEVICE(PCI_VENDOR_ID_ANALOG_DEVICES, PCI_DEVICE_ID_AD1889JS) },
|
{ PCI_DEVICE(PCI_VENDOR_ID_ANALOG_DEVICES, PCI_DEVICE_ID_AD1889JS) },
|
||||||
{ 0, },
|
{ 0, },
|
||||||
};
|
};
|
||||||
|
|
|
@ -279,7 +279,7 @@ struct snd_ali {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pci_device_id snd_ali_ids[] = {
|
static struct pci_device_id snd_ali_ids[] __devinitdata = {
|
||||||
{PCI_DEVICE(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M5451), 0, 0, 0},
|
{PCI_DEVICE(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M5451), 0, 0, 0},
|
||||||
{0, }
|
{0, }
|
||||||
};
|
};
|
||||||
|
|
|
@ -146,7 +146,7 @@ struct snd_als300_substream_data {
|
||||||
int block_counter_register;
|
int block_counter_register;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pci_device_id snd_als300_ids[] = {
|
static struct pci_device_id snd_als300_ids[] __devinitdata = {
|
||||||
{ 0x4005, 0x0300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_ALS300 },
|
{ 0x4005, 0x0300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_ALS300 },
|
||||||
{ 0x4005, 0x0308, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_ALS300_PLUS },
|
{ 0x4005, 0x0308, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_ALS300_PLUS },
|
||||||
{ 0, }
|
{ 0, }
|
||||||
|
|
|
@ -116,7 +116,7 @@ struct snd_card_als4000 {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pci_device_id snd_als4000_ids[] = {
|
static struct pci_device_id snd_als4000_ids[] __devinitdata = {
|
||||||
{ 0x4005, 0x4000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* ALS4000 */
|
{ 0x4005, 0x4000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* ALS4000 */
|
||||||
{ 0, }
|
{ 0, }
|
||||||
};
|
};
|
||||||
|
|
|
@ -284,7 +284,7 @@ struct atiixp {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*/
|
*/
|
||||||
static struct pci_device_id snd_atiixp_ids[] = {
|
static struct pci_device_id snd_atiixp_ids[] __devinitdata = {
|
||||||
{ 0x1002, 0x4341, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB200 */
|
{ 0x1002, 0x4341, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB200 */
|
||||||
{ 0x1002, 0x4361, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB300 */
|
{ 0x1002, 0x4361, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB300 */
|
||||||
{ 0x1002, 0x4370, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB400 */
|
{ 0x1002, 0x4370, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB400 */
|
||||||
|
|
|
@ -262,7 +262,7 @@ struct atiixp_modem {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*/
|
*/
|
||||||
static struct pci_device_id snd_atiixp_ids[] = {
|
static struct pci_device_id snd_atiixp_ids[] __devinitdata = {
|
||||||
{ 0x1002, 0x434d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB200 */
|
{ 0x1002, 0x434d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB200 */
|
||||||
{ 0x1002, 0x4378, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB400 */
|
{ 0x1002, 0x4378, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB400 */
|
||||||
{ 0, }
|
{ 0, }
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "au8810.h"
|
#include "au8810.h"
|
||||||
#include "au88x0.h"
|
#include "au88x0.h"
|
||||||
static struct pci_device_id snd_vortex_ids[] = {
|
static struct pci_device_id snd_vortex_ids[] __devinitdata = {
|
||||||
{PCI_VENDOR_ID_AUREAL, PCI_DEVICE_ID_AUREAL_ADVANTAGE,
|
{PCI_VENDOR_ID_AUREAL, PCI_DEVICE_ID_AUREAL_ADVANTAGE,
|
||||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1,},
|
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1,},
|
||||||
{0,}
|
{0,}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "au8820.h"
|
#include "au8820.h"
|
||||||
#include "au88x0.h"
|
#include "au88x0.h"
|
||||||
static struct pci_device_id snd_vortex_ids[] = {
|
static struct pci_device_id snd_vortex_ids[] __devinitdata = {
|
||||||
{PCI_VENDOR_ID_AUREAL, PCI_DEVICE_ID_AUREAL_VORTEX_1,
|
{PCI_VENDOR_ID_AUREAL, PCI_DEVICE_ID_AUREAL_VORTEX_1,
|
||||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0,},
|
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0,},
|
||||||
{0,}
|
{0,}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "au8830.h"
|
#include "au8830.h"
|
||||||
#include "au88x0.h"
|
#include "au88x0.h"
|
||||||
static struct pci_device_id snd_vortex_ids[] = {
|
static struct pci_device_id snd_vortex_ids[] __devinitdata = {
|
||||||
{PCI_VENDOR_ID_AUREAL, PCI_DEVICE_ID_AUREAL_VORTEX_2,
|
{PCI_VENDOR_ID_AUREAL, PCI_DEVICE_ID_AUREAL_VORTEX_2,
|
||||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0,},
|
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0,},
|
||||||
{0,}
|
{0,}
|
||||||
|
|
|
@ -216,7 +216,7 @@ struct snd_azf3328 {
|
||||||
int irq;
|
int irq;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct pci_device_id snd_azf3328_ids[] = {
|
static const struct pci_device_id snd_azf3328_ids[] __devinitdata = {
|
||||||
{ 0x122D, 0x50DC, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* PCI168/3328 */
|
{ 0x122D, 0x50DC, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* PCI168/3328 */
|
||||||
{ 0x122D, 0x80DA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* 3328 */
|
{ 0x122D, 0x80DA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* 3328 */
|
||||||
{ 0, }
|
{ 0, }
|
||||||
|
|
|
@ -774,7 +774,7 @@ static int __devinit snd_bt87x_create(struct snd_card *card,
|
||||||
.driver_data = rate }
|
.driver_data = rate }
|
||||||
|
|
||||||
/* driver_data is the default digital_rate value for that device */
|
/* driver_data is the default digital_rate value for that device */
|
||||||
static struct pci_device_id snd_bt87x_ids[] = {
|
static struct pci_device_id snd_bt87x_ids[] __devinitdata = {
|
||||||
/* Hauppauge WinTV series */
|
/* Hauppauge WinTV series */
|
||||||
BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_878, 0x0070, 0x13eb, 32000),
|
BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_878, 0x0070, 0x13eb, 32000),
|
||||||
/* Hauppauge WinTV series */
|
/* Hauppauge WinTV series */
|
||||||
|
@ -911,7 +911,7 @@ static void __devexit snd_bt87x_remove(struct pci_dev *pci)
|
||||||
|
|
||||||
/* default entries for all Bt87x cards - it's not exported */
|
/* default entries for all Bt87x cards - it's not exported */
|
||||||
/* driver_data is set to 0 to call detection */
|
/* driver_data is set to 0 to call detection */
|
||||||
static struct pci_device_id snd_bt87x_default_ids[] = {
|
static struct pci_device_id snd_bt87x_default_ids[] __devinitdata = {
|
||||||
BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_878, PCI_ANY_ID, PCI_ANY_ID, 0),
|
BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_878, PCI_ANY_ID, PCI_ANY_ID, 0),
|
||||||
BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_879, PCI_ANY_ID, PCI_ANY_ID, 0),
|
BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_879, PCI_ANY_ID, PCI_ANY_ID, 0),
|
||||||
{ }
|
{ }
|
||||||
|
|
|
@ -1561,7 +1561,7 @@ static void __devexit snd_ca0106_remove(struct pci_dev *pci)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PCI IDs
|
// PCI IDs
|
||||||
static struct pci_device_id snd_ca0106_ids[] = {
|
static struct pci_device_id snd_ca0106_ids[] __devinitdata = {
|
||||||
{ 0x1102, 0x0007, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* Audigy LS or Live 24bit */
|
{ 0x1102, 0x0007, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* Audigy LS or Live 24bit */
|
||||||
{ 0, }
|
{ 0, }
|
||||||
};
|
};
|
||||||
|
|
|
@ -2609,7 +2609,7 @@ static inline void snd_cmipci_proc_init(struct cmipci *cm) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static struct pci_device_id snd_cmipci_ids[] = {
|
static struct pci_device_id snd_cmipci_ids[] __devinitdata = {
|
||||||
{PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8338A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
{PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8338A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
||||||
{PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8338B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
{PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8338B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
||||||
{PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8738, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
{PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8738, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
||||||
|
|
|
@ -494,7 +494,7 @@ struct cs4281 {
|
||||||
|
|
||||||
static irqreturn_t snd_cs4281_interrupt(int irq, void *dev_id, struct pt_regs *regs);
|
static irqreturn_t snd_cs4281_interrupt(int irq, void *dev_id, struct pt_regs *regs);
|
||||||
|
|
||||||
static struct pci_device_id snd_cs4281_ids[] = {
|
static struct pci_device_id snd_cs4281_ids[] __devinitdata = {
|
||||||
{ 0x1013, 0x6005, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* CS4281 */
|
{ 0x1013, 0x6005, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* CS4281 */
|
||||||
{ 0, }
|
{ 0, }
|
||||||
};
|
};
|
||||||
|
|
|
@ -65,7 +65,7 @@ MODULE_PARM_DESC(thinkpad, "Force to enable Thinkpad's CLKRUN control.");
|
||||||
module_param_array(mmap_valid, bool, NULL, 0444);
|
module_param_array(mmap_valid, bool, NULL, 0444);
|
||||||
MODULE_PARM_DESC(mmap_valid, "Support OSS mmap.");
|
MODULE_PARM_DESC(mmap_valid, "Support OSS mmap.");
|
||||||
|
|
||||||
static struct pci_device_id snd_cs46xx_ids[] = {
|
static struct pci_device_id snd_cs46xx_ids[] __devinitdata = {
|
||||||
{ 0x1013, 0x6001, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* CS4280 */
|
{ 0x1013, 0x6001, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* CS4280 */
|
||||||
{ 0x1013, 0x6003, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* CS4612 */
|
{ 0x1013, 0x6003, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* CS4612 */
|
||||||
{ 0x1013, 0x6004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* CS4615 */
|
{ 0x1013, 0x6004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* CS4615 */
|
||||||
|
|
|
@ -45,7 +45,7 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
|
||||||
static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
|
static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
|
||||||
static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
|
static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
|
||||||
|
|
||||||
static struct pci_device_id snd_cs5535audio_ids[] = {
|
static struct pci_device_id snd_cs5535audio_ids[] __devinitdata = {
|
||||||
{ PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_CS5535_AUDIO,
|
{ PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_CS5535_AUDIO,
|
||||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
|
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
|
||||||
{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_AUDIO,
|
{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_AUDIO,
|
||||||
|
|
|
@ -77,7 +77,7 @@ MODULE_PARM_DESC(subsystem, "Force card subsystem model.");
|
||||||
/*
|
/*
|
||||||
* Class 0401: 1102:0008 (rev 00) Subsystem: 1102:1001 -> Audigy2 Value Model:SB0400
|
* Class 0401: 1102:0008 (rev 00) Subsystem: 1102:1001 -> Audigy2 Value Model:SB0400
|
||||||
*/
|
*/
|
||||||
static struct pci_device_id snd_emu10k1_ids[] = {
|
static struct pci_device_id snd_emu10k1_ids[] __devinitdata = {
|
||||||
{ 0x1102, 0x0002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* EMU10K1 */
|
{ 0x1102, 0x0002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* EMU10K1 */
|
||||||
{ 0x1102, 0x0004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 }, /* Audigy */
|
{ 0x1102, 0x0004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 }, /* Audigy */
|
||||||
{ 0x1102, 0x0008, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 }, /* Audigy 2 Value SB0400 */
|
{ 0x1102, 0x0008, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 }, /* Audigy 2 Value SB0400 */
|
||||||
|
|
|
@ -36,7 +36,6 @@
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/moduleparam.h>
|
#include <linux/moduleparam.h>
|
||||||
#include <linux/dma-mapping.h>
|
|
||||||
#include <sound/core.h>
|
#include <sound/core.h>
|
||||||
#include <sound/initval.h>
|
#include <sound/initval.h>
|
||||||
#include <sound/pcm.h>
|
#include <sound/pcm.h>
|
||||||
|
@ -1596,7 +1595,7 @@ static void __devexit snd_emu10k1x_remove(struct pci_dev *pci)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PCI IDs
|
// PCI IDs
|
||||||
static struct pci_device_id snd_emu10k1x_ids[] = {
|
static struct pci_device_id snd_emu10k1x_ids[] __devinitdata = {
|
||||||
{ 0x1102, 0x0006, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* Dell OEM version (EMU10K1) */
|
{ 0x1102, 0x0006, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* Dell OEM version (EMU10K1) */
|
||||||
{ 0, }
|
{ 0, }
|
||||||
};
|
};
|
||||||
|
|
|
@ -446,7 +446,7 @@ struct ensoniq {
|
||||||
|
|
||||||
static irqreturn_t snd_audiopci_interrupt(int irq, void *dev_id, struct pt_regs *regs);
|
static irqreturn_t snd_audiopci_interrupt(int irq, void *dev_id, struct pt_regs *regs);
|
||||||
|
|
||||||
static struct pci_device_id snd_audiopci_ids[] = {
|
static struct pci_device_id snd_audiopci_ids[] __devinitdata = {
|
||||||
#ifdef CHIP1370
|
#ifdef CHIP1370
|
||||||
{ 0x1274, 0x5000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* ES1370 */
|
{ 0x1274, 0x5000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* ES1370 */
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -242,7 +242,7 @@ struct es1938 {
|
||||||
|
|
||||||
static irqreturn_t snd_es1938_interrupt(int irq, void *dev_id, struct pt_regs *regs);
|
static irqreturn_t snd_es1938_interrupt(int irq, void *dev_id, struct pt_regs *regs);
|
||||||
|
|
||||||
static struct pci_device_id snd_es1938_ids[] = {
|
static struct pci_device_id snd_es1938_ids[] __devinitdata = {
|
||||||
{ 0x125d, 0x1969, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* Solo-1 */
|
{ 0x125d, 0x1969, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* Solo-1 */
|
||||||
{ 0, }
|
{ 0, }
|
||||||
};
|
};
|
||||||
|
|
|
@ -104,7 +104,6 @@
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/gameport.h>
|
#include <linux/gameport.h>
|
||||||
#include <linux/moduleparam.h>
|
#include <linux/moduleparam.h>
|
||||||
#include <linux/dma-mapping.h>
|
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
|
|
||||||
#include <sound/core.h>
|
#include <sound/core.h>
|
||||||
|
@ -593,7 +592,7 @@ struct es1968 {
|
||||||
|
|
||||||
static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id, struct pt_regs *regs);
|
static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id, struct pt_regs *regs);
|
||||||
|
|
||||||
static struct pci_device_id snd_es1968_ids[] = {
|
static struct pci_device_id snd_es1968_ids[] __devinitdata = {
|
||||||
/* Maestro 1 */
|
/* Maestro 1 */
|
||||||
{ 0x1285, 0x0100, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, TYPE_MAESTRO },
|
{ 0x1285, 0x0100, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, TYPE_MAESTRO },
|
||||||
/* Maestro 2 */
|
/* Maestro 2 */
|
||||||
|
|
|
@ -199,7 +199,7 @@ struct fm801 {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pci_device_id snd_fm801_ids[] = {
|
static struct pci_device_id snd_fm801_ids[] __devinitdata = {
|
||||||
{ 0x1319, 0x0801, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, 0, }, /* FM801 */
|
{ 0x1319, 0x0801, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, 0, }, /* FM801 */
|
||||||
{ 0x5213, 0x0510, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, 0, }, /* Gallant Odyssey Sound 4 */
|
{ 0x5213, 0x0510, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, 0, }, /* Gallant Odyssey Sound 4 */
|
||||||
{ 0, }
|
{ 0, }
|
||||||
|
|
|
@ -1614,7 +1614,7 @@ static void __devexit azx_remove(struct pci_dev *pci)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* PCI IDs */
|
/* PCI IDs */
|
||||||
static struct pci_device_id azx_ids[] = {
|
static struct pci_device_id azx_ids[] __devinitdata = {
|
||||||
{ 0x8086, 0x2668, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH6 */
|
{ 0x8086, 0x2668, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH6 */
|
||||||
{ 0x8086, 0x27d8, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH7 */
|
{ 0x8086, 0x27d8, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH7 */
|
||||||
{ 0x8086, 0x269a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ESB2 */
|
{ 0x8086, 0x269a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ESB2 */
|
||||||
|
|
|
@ -799,10 +799,14 @@ static struct hda_board_config ad1986a_cfg_tbl[] = {
|
||||||
{ .modelname = "laptop-eapd", .config = AD1986A_LAPTOP_EAPD },
|
{ .modelname = "laptop-eapd", .config = AD1986A_LAPTOP_EAPD },
|
||||||
{ .pci_subvendor = 0x144d, .pci_subdevice = 0xc024,
|
{ .pci_subvendor = 0x144d, .pci_subdevice = 0xc024,
|
||||||
.config = AD1986A_LAPTOP_EAPD }, /* Samsung R65-T2300 Charis */
|
.config = AD1986A_LAPTOP_EAPD }, /* Samsung R65-T2300 Charis */
|
||||||
|
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x1153,
|
||||||
|
.config = AD1986A_LAPTOP_EAPD }, /* ASUS M9 */
|
||||||
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x1213,
|
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x1213,
|
||||||
.config = AD1986A_LAPTOP_EAPD }, /* ASUS A6J */
|
.config = AD1986A_LAPTOP_EAPD }, /* ASUS A6J */
|
||||||
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x11f7,
|
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x11f7,
|
||||||
.config = AD1986A_LAPTOP_EAPD }, /* ASUS U5A */
|
.config = AD1986A_LAPTOP_EAPD }, /* ASUS U5A */
|
||||||
|
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x1297,
|
||||||
|
.config = AD1986A_LAPTOP_EAPD }, /* ASUS Z62F */
|
||||||
{ .pci_subvendor = 0x103c, .pci_subdevice = 0x30af,
|
{ .pci_subvendor = 0x103c, .pci_subdevice = 0x30af,
|
||||||
.config = AD1986A_LAPTOP_EAPD }, /* HP Compaq Presario B2800 */
|
.config = AD1986A_LAPTOP_EAPD }, /* HP Compaq Presario B2800 */
|
||||||
{}
|
{}
|
||||||
|
@ -1330,12 +1334,8 @@ enum { AD1981_BASIC, AD1981_HP };
|
||||||
|
|
||||||
static struct hda_board_config ad1981_cfg_tbl[] = {
|
static struct hda_board_config ad1981_cfg_tbl[] = {
|
||||||
{ .modelname = "hp", .config = AD1981_HP },
|
{ .modelname = "hp", .config = AD1981_HP },
|
||||||
{ .pci_subvendor = 0x103c, .pci_subdevice = 0x30aa,
|
/* All HP models */
|
||||||
.config = AD1981_HP }, /* HP nx6320 */
|
{ .pci_subvendor = 0x103c, .config = AD1981_HP },
|
||||||
{ .pci_subvendor = 0x103c, .pci_subdevice = 0x309f,
|
|
||||||
.config = AD1981_HP }, /* HP nx9420 AngelFire */
|
|
||||||
{ .pci_subvendor = 0x103c, .pci_subdevice = 0x30a2,
|
|
||||||
.config = AD1981_HP }, /* HP nx9420 AngelFire */
|
|
||||||
{ .modelname = "basic", .config = AD1981_BASIC },
|
{ .modelname = "basic", .config = AD1981_BASIC },
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
@ -2623,5 +2623,6 @@ struct hda_codec_preset snd_hda_preset_analog[] = {
|
||||||
{ .id = 0x11d41983, .name = "AD1983", .patch = patch_ad1983 },
|
{ .id = 0x11d41983, .name = "AD1983", .patch = patch_ad1983 },
|
||||||
{ .id = 0x11d41986, .name = "AD1986A", .patch = patch_ad1986a },
|
{ .id = 0x11d41986, .name = "AD1986A", .patch = patch_ad1986a },
|
||||||
{ .id = 0x11d41988, .name = "AD1988", .patch = patch_ad1988 },
|
{ .id = 0x11d41988, .name = "AD1988", .patch = patch_ad1988 },
|
||||||
|
{ .id = 0x11d4198b, .name = "AD1988B", .patch = patch_ad1988 },
|
||||||
{} /* terminator */
|
{} /* terminator */
|
||||||
};
|
};
|
||||||
|
|
|
@ -2148,6 +2148,7 @@ static struct hda_board_config alc880_cfg_tbl[] = {
|
||||||
{ .pci_subvendor = 0x1025, .pci_subdevice = 0x0087, .config = ALC880_6ST_DIG },
|
{ .pci_subvendor = 0x1025, .pci_subdevice = 0x0087, .config = ALC880_6ST_DIG },
|
||||||
{ .pci_subvendor = 0x1297, .pci_subdevice = 0xc790, .config = ALC880_6ST_DIG }, /* Shuttle ST20G5 */
|
{ .pci_subvendor = 0x1297, .pci_subdevice = 0xc790, .config = ALC880_6ST_DIG }, /* Shuttle ST20G5 */
|
||||||
{ .pci_subvendor = 0x1509, .pci_subdevice = 0x925d, .config = ALC880_6ST_DIG }, /* FIC P4M-915GD1 */
|
{ .pci_subvendor = 0x1509, .pci_subdevice = 0x925d, .config = ALC880_6ST_DIG }, /* FIC P4M-915GD1 */
|
||||||
|
{ .pci_subvendor = 0x1695, .pci_subdevice = 0x4012, .config = ALC880_5ST_DIG }, /* Epox EP-5LDA+ GLi */
|
||||||
|
|
||||||
{ .modelname = "asus", .config = ALC880_ASUS },
|
{ .modelname = "asus", .config = ALC880_ASUS },
|
||||||
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x1964, .config = ALC880_ASUS_DIG },
|
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x1964, .config = ALC880_ASUS_DIG },
|
||||||
|
|
|
@ -1212,8 +1212,8 @@ static hda_nid_t vaio_mux_nids[] = { 0x15 };
|
||||||
static struct hda_input_mux vaio_mux = {
|
static struct hda_input_mux vaio_mux = {
|
||||||
.num_items = 2,
|
.num_items = 2,
|
||||||
.items = {
|
.items = {
|
||||||
/* { "HP", 0x0 },
|
/* { "HP", 0x0 }, */
|
||||||
{ "Unknown", 0x1 }, */
|
{ "Line", 0x1 },
|
||||||
{ "Mic", 0x2 },
|
{ "Mic", 0x2 },
|
||||||
{ "PCM", 0x3 },
|
{ "PCM", 0x3 },
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,6 @@
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/moduleparam.h>
|
#include <linux/moduleparam.h>
|
||||||
#include <linux/dma-mapping.h>
|
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
|
|
||||||
#include <sound/core.h>
|
#include <sound/core.h>
|
||||||
|
@ -108,7 +107,7 @@ module_param_array(dxr_enable, int, NULL, 0444);
|
||||||
MODULE_PARM_DESC(dxr_enable, "Enable DXR support for Terratec DMX6FIRE.");
|
MODULE_PARM_DESC(dxr_enable, "Enable DXR support for Terratec DMX6FIRE.");
|
||||||
|
|
||||||
|
|
||||||
static struct pci_device_id snd_ice1712_ids[] = {
|
static struct pci_device_id snd_ice1712_ids[] __devinitdata = {
|
||||||
{ PCI_VENDOR_ID_ICE, PCI_DEVICE_ID_ICE_1712, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* ICE1712 */
|
{ PCI_VENDOR_ID_ICE, PCI_DEVICE_ID_ICE_1712, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* ICE1712 */
|
||||||
{ 0, }
|
{ 0, }
|
||||||
};
|
};
|
||||||
|
|
|
@ -86,7 +86,7 @@ MODULE_PARM_DESC(model, "Use the given board model.");
|
||||||
|
|
||||||
|
|
||||||
/* Both VT1720 and VT1724 have the same PCI IDs */
|
/* Both VT1720 and VT1724 have the same PCI IDs */
|
||||||
static struct pci_device_id snd_vt1724_ids[] = {
|
static struct pci_device_id snd_vt1724_ids[] __devinitdata = {
|
||||||
{ PCI_VENDOR_ID_ICE, PCI_DEVICE_ID_VT1724, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
|
{ PCI_VENDOR_ID_ICE, PCI_DEVICE_ID_VT1724, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
|
||||||
{ 0, }
|
{ 0, }
|
||||||
};
|
};
|
||||||
|
|
|
@ -413,7 +413,7 @@ struct intel8x0 {
|
||||||
u32 int_sta_mask; /* interrupt status mask */
|
u32 int_sta_mask; /* interrupt status mask */
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pci_device_id snd_intel8x0_ids[] = {
|
static struct pci_device_id snd_intel8x0_ids[] __devinitdata = {
|
||||||
{ 0x8086, 0x2415, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL }, /* 82801AA */
|
{ 0x8086, 0x2415, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL }, /* 82801AA */
|
||||||
{ 0x8086, 0x2425, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL }, /* 82901AB */
|
{ 0x8086, 0x2425, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL }, /* 82901AB */
|
||||||
{ 0x8086, 0x2445, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL }, /* 82801BA */
|
{ 0x8086, 0x2445, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL }, /* 82801BA */
|
||||||
|
@ -1293,6 +1293,7 @@ static int snd_intel8x0_ali_ac97spdifout_close(struct snd_pcm_substream *substre
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0 // NYI
|
||||||
static int snd_intel8x0_ali_spdifin_open(struct snd_pcm_substream *substream)
|
static int snd_intel8x0_ali_spdifin_open(struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
struct intel8x0 *chip = snd_pcm_substream_chip(substream);
|
struct intel8x0 *chip = snd_pcm_substream_chip(substream);
|
||||||
|
@ -1308,7 +1309,6 @@ static int snd_intel8x0_ali_spdifin_close(struct snd_pcm_substream *substream)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0 // NYI
|
|
||||||
static int snd_intel8x0_ali_spdifout_open(struct snd_pcm_substream *substream)
|
static int snd_intel8x0_ali_spdifout_open(struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
struct intel8x0 *chip = snd_pcm_substream_chip(substream);
|
struct intel8x0 *chip = snd_pcm_substream_chip(substream);
|
||||||
|
@ -1435,6 +1435,7 @@ static struct snd_pcm_ops snd_intel8x0_ali_ac97spdifout_ops = {
|
||||||
.pointer = snd_intel8x0_pcm_pointer,
|
.pointer = snd_intel8x0_pcm_pointer,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if 0 // NYI
|
||||||
static struct snd_pcm_ops snd_intel8x0_ali_spdifin_ops = {
|
static struct snd_pcm_ops snd_intel8x0_ali_spdifin_ops = {
|
||||||
.open = snd_intel8x0_ali_spdifin_open,
|
.open = snd_intel8x0_ali_spdifin_open,
|
||||||
.close = snd_intel8x0_ali_spdifin_close,
|
.close = snd_intel8x0_ali_spdifin_close,
|
||||||
|
@ -1446,7 +1447,6 @@ static struct snd_pcm_ops snd_intel8x0_ali_spdifin_ops = {
|
||||||
.pointer = snd_intel8x0_pcm_pointer,
|
.pointer = snd_intel8x0_pcm_pointer,
|
||||||
};
|
};
|
||||||
|
|
||||||
#if 0 // NYI
|
|
||||||
static struct snd_pcm_ops snd_intel8x0_ali_spdifout_ops = {
|
static struct snd_pcm_ops snd_intel8x0_ali_spdifout_ops = {
|
||||||
.open = snd_intel8x0_ali_spdifout_open,
|
.open = snd_intel8x0_ali_spdifout_open,
|
||||||
.close = snd_intel8x0_ali_spdifout_close,
|
.close = snd_intel8x0_ali_spdifout_close,
|
||||||
|
@ -1582,7 +1582,7 @@ static struct ich_pcm_table ali_pcms[] __devinitdata = {
|
||||||
{
|
{
|
||||||
.suffix = "IEC958",
|
.suffix = "IEC958",
|
||||||
.playback_ops = &snd_intel8x0_ali_ac97spdifout_ops,
|
.playback_ops = &snd_intel8x0_ali_ac97spdifout_ops,
|
||||||
.capture_ops = &snd_intel8x0_ali_spdifin_ops,
|
/* .capture_ops = &snd_intel8x0_ali_spdifin_ops, */
|
||||||
.prealloc_size = 64 * 1024,
|
.prealloc_size = 64 * 1024,
|
||||||
.prealloc_max_size = 128 * 1024,
|
.prealloc_max_size = 128 * 1024,
|
||||||
.ac97_idx = ALID_AC97SPDIFOUT,
|
.ac97_idx = ALID_AC97SPDIFOUT,
|
||||||
|
|
|
@ -224,7 +224,7 @@ struct intel8x0m {
|
||||||
unsigned int pcm_pos_shift;
|
unsigned int pcm_pos_shift;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pci_device_id snd_intel8x0m_ids[] = {
|
static struct pci_device_id snd_intel8x0m_ids[] __devinitdata = {
|
||||||
{ 0x8086, 0x2416, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL }, /* 82801AA */
|
{ 0x8086, 0x2416, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL }, /* 82801AA */
|
||||||
{ 0x8086, 0x2426, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL }, /* 82901AB */
|
{ 0x8086, 0x2426, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL }, /* 82901AB */
|
||||||
{ 0x8086, 0x2446, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL }, /* 82801BA */
|
{ 0x8086, 0x2446, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL }, /* 82801BA */
|
||||||
|
|
|
@ -424,7 +424,7 @@ module_param_array(enable, bool, NULL, 0444);
|
||||||
MODULE_PARM_DESC(enable, "Enable Korg 1212 soundcard.");
|
MODULE_PARM_DESC(enable, "Enable Korg 1212 soundcard.");
|
||||||
MODULE_AUTHOR("Haroldo Gamal <gamal@alternex.com.br>");
|
MODULE_AUTHOR("Haroldo Gamal <gamal@alternex.com.br>");
|
||||||
|
|
||||||
static struct pci_device_id snd_korg1212_ids[] = {
|
static struct pci_device_id snd_korg1212_ids[] __devinitdata = {
|
||||||
{
|
{
|
||||||
.vendor = 0x10b5,
|
.vendor = 0x10b5,
|
||||||
.device = 0x906d,
|
.device = 0x906d,
|
||||||
|
|
|
@ -41,7 +41,6 @@
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/vmalloc.h>
|
#include <linux/vmalloc.h>
|
||||||
#include <linux/moduleparam.h>
|
#include <linux/moduleparam.h>
|
||||||
#include <linux/dma-mapping.h>
|
|
||||||
#include <sound/core.h>
|
#include <sound/core.h>
|
||||||
#include <sound/info.h>
|
#include <sound/info.h>
|
||||||
#include <sound/control.h>
|
#include <sound/control.h>
|
||||||
|
@ -870,7 +869,7 @@ struct snd_m3 {
|
||||||
/*
|
/*
|
||||||
* pci ids
|
* pci ids
|
||||||
*/
|
*/
|
||||||
static struct pci_device_id snd_m3_ids[] = {
|
static struct pci_device_id snd_m3_ids[] __devinitdata = {
|
||||||
{PCI_VENDOR_ID_ESS, PCI_DEVICE_ID_ESS_ALLEGRO_1, PCI_ANY_ID, PCI_ANY_ID,
|
{PCI_VENDOR_ID_ESS, PCI_DEVICE_ID_ESS_ALLEGRO_1, PCI_ANY_ID, PCI_ANY_ID,
|
||||||
PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, 0},
|
PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, 0},
|
||||||
{PCI_VENDOR_ID_ESS, PCI_DEVICE_ID_ESS_ALLEGRO, PCI_ANY_ID, PCI_ANY_ID,
|
{PCI_VENDOR_ID_ESS, PCI_DEVICE_ID_ESS_ALLEGRO, PCI_ANY_ID, PCI_ANY_ID,
|
||||||
|
|
|
@ -28,7 +28,6 @@
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/moduleparam.h>
|
#include <linux/moduleparam.h>
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
#include <linux/dma-mapping.h>
|
|
||||||
|
|
||||||
#include <sound/core.h>
|
#include <sound/core.h>
|
||||||
#include <sound/initval.h>
|
#include <sound/initval.h>
|
||||||
|
@ -62,7 +61,7 @@ MODULE_PARM_DESC(enable, "Enable Digigram " CARD_NAME " soundcard.");
|
||||||
/*
|
/*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static struct pci_device_id snd_mixart_ids[] = {
|
static struct pci_device_id snd_mixart_ids[] __devinitdata = {
|
||||||
{ 0x1057, 0x0003, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* MC8240 */
|
{ 0x1057, 0x0003, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* MC8240 */
|
||||||
{ 0, }
|
{ 0, }
|
||||||
};
|
};
|
||||||
|
|
|
@ -263,7 +263,7 @@ struct nm256 {
|
||||||
/*
|
/*
|
||||||
* PCI ids
|
* PCI ids
|
||||||
*/
|
*/
|
||||||
static struct pci_device_id snd_nm256_ids[] = {
|
static struct pci_device_id snd_nm256_ids[] __devinitdata = {
|
||||||
{PCI_VENDOR_ID_NEOMAGIC, PCI_DEVICE_ID_NEOMAGIC_NM256AV_AUDIO, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
{PCI_VENDOR_ID_NEOMAGIC, PCI_DEVICE_ID_NEOMAGIC_NM256AV_AUDIO, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
||||||
{PCI_VENDOR_ID_NEOMAGIC, PCI_DEVICE_ID_NEOMAGIC_NM256ZX_AUDIO, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
{PCI_VENDOR_ID_NEOMAGIC, PCI_DEVICE_ID_NEOMAGIC_NM256ZX_AUDIO, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
||||||
{PCI_VENDOR_ID_NEOMAGIC, PCI_DEVICE_ID_NEOMAGIC_NM256XL_PLUS_AUDIO, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
{PCI_VENDOR_ID_NEOMAGIC, PCI_DEVICE_ID_NEOMAGIC_NM256XL_PLUS_AUDIO, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
||||||
|
|
|
@ -30,7 +30,6 @@
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/moduleparam.h>
|
#include <linux/moduleparam.h>
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
#include <linux/dma-mapping.h>
|
|
||||||
|
|
||||||
#include <sound/core.h>
|
#include <sound/core.h>
|
||||||
#include <sound/initval.h>
|
#include <sound/initval.h>
|
||||||
|
@ -74,7 +73,7 @@ enum {
|
||||||
PCI_ID_LAST
|
PCI_ID_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pci_device_id pcxhr_ids[] = {
|
static struct pci_device_id pcxhr_ids[] __devinitdata = {
|
||||||
{ 0x10b5, 0x9656, 0x1369, 0xb001, 0, 0, PCI_ID_VX882HR, }, /* VX882HR */
|
{ 0x10b5, 0x9656, 0x1369, 0xb001, 0, 0, PCI_ID_VX882HR, }, /* VX882HR */
|
||||||
{ 0x10b5, 0x9656, 0x1369, 0xb101, 0, 0, PCI_ID_PCX882HR, }, /* PCX882HR */
|
{ 0x10b5, 0x9656, 0x1369, 0xb101, 0, 0, PCI_ID_PCX882HR, }, /* PCX882HR */
|
||||||
{ 0x10b5, 0x9656, 0x1369, 0xb201, 0, 0, PCI_ID_VX881HR, }, /* VX881HR */
|
{ 0x10b5, 0x9656, 0x1369, 0xb201, 0, 0, PCI_ID_VX881HR, }, /* VX881HR */
|
||||||
|
|
|
@ -385,8 +385,8 @@ static int pcxhr_hwdep_dsp_load(struct snd_hwdep *hw,
|
||||||
fw.size = dsp->length;
|
fw.size = dsp->length;
|
||||||
fw.data = vmalloc(fw.size);
|
fw.data = vmalloc(fw.size);
|
||||||
if (! fw.data) {
|
if (! fw.data) {
|
||||||
snd_printk(KERN_ERR "pcxhr: cannot allocate dsp image (%d bytes)\n",
|
snd_printk(KERN_ERR "pcxhr: cannot allocate dsp image (%lu bytes)\n",
|
||||||
fw.size);
|
(unsigned long)fw.size);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
if (copy_from_user(fw.data, dsp->image, dsp->length)) {
|
if (copy_from_user(fw.data, dsp->image, dsp->length)) {
|
||||||
|
|
|
@ -506,7 +506,7 @@ static int riptide_reset(struct cmdif *cif, struct snd_riptide *chip);
|
||||||
/*
|
/*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static struct pci_device_id snd_riptide_ids[] = {
|
static struct pci_device_id snd_riptide_ids[] __devinitdata = {
|
||||||
{
|
{
|
||||||
.vendor = 0x127a,.device = 0x4310,
|
.vendor = 0x127a,.device = 0x4310,
|
||||||
.subvendor = PCI_ANY_ID,.subdevice = PCI_ANY_ID,
|
.subvendor = PCI_ANY_ID,.subdevice = PCI_ANY_ID,
|
||||||
|
@ -527,7 +527,7 @@ static struct pci_device_id snd_riptide_ids[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef SUPPORT_JOYSTICK
|
#ifdef SUPPORT_JOYSTICK
|
||||||
static struct pci_device_id snd_riptide_joystick_ids[] = {
|
static struct pci_device_id snd_riptide_joystick_ids[] __devinitdata = {
|
||||||
{
|
{
|
||||||
.vendor = 0x127a,.device = 0x4312,
|
.vendor = 0x127a,.device = 0x4312,
|
||||||
.subvendor = PCI_ANY_ID,.subdevice = PCI_ANY_ID,
|
.subvendor = PCI_ANY_ID,.subdevice = PCI_ANY_ID,
|
||||||
|
|
|
@ -227,7 +227,7 @@ struct rme32 {
|
||||||
struct snd_kcontrol *spdif_ctl;
|
struct snd_kcontrol *spdif_ctl;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pci_device_id snd_rme32_ids[] = {
|
static struct pci_device_id snd_rme32_ids[] __devinitdata = {
|
||||||
{PCI_VENDOR_ID_XILINX_RME, PCI_DEVICE_ID_RME_DIGI32,
|
{PCI_VENDOR_ID_XILINX_RME, PCI_DEVICE_ID_RME_DIGI32,
|
||||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0,},
|
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0,},
|
||||||
{PCI_VENDOR_ID_XILINX_RME, PCI_DEVICE_ID_RME_DIGI32_8,
|
{PCI_VENDOR_ID_XILINX_RME, PCI_DEVICE_ID_RME_DIGI32_8,
|
||||||
|
|
|
@ -232,7 +232,7 @@ struct rme96 {
|
||||||
struct snd_kcontrol *spdif_ctl;
|
struct snd_kcontrol *spdif_ctl;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pci_device_id snd_rme96_ids[] = {
|
static struct pci_device_id snd_rme96_ids[] __devinitdata = {
|
||||||
{ PCI_VENDOR_ID_XILINX, PCI_DEVICE_ID_RME_DIGI96,
|
{ PCI_VENDOR_ID_XILINX, PCI_DEVICE_ID_RME_DIGI96,
|
||||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
|
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
|
||||||
{ PCI_VENDOR_ID_XILINX, PCI_DEVICE_ID_RME_DIGI96_8,
|
{ PCI_VENDOR_ID_XILINX, PCI_DEVICE_ID_RME_DIGI96_8,
|
||||||
|
|
|
@ -568,7 +568,7 @@ static void snd_hammerfall_free_buffer(struct snd_dma_buffer *dmab, struct pci_d
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static struct pci_device_id snd_hdsp_ids[] = {
|
static struct pci_device_id snd_hdsp_ids[] __devinitdata = {
|
||||||
{
|
{
|
||||||
.vendor = PCI_VENDOR_ID_XILINX,
|
.vendor = PCI_VENDOR_ID_XILINX,
|
||||||
.device = PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP,
|
.device = PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP,
|
||||||
|
|
|
@ -426,7 +426,7 @@ static char channel_map_madi_qs[HDSPM_MAX_CHANNELS] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static struct pci_device_id snd_hdspm_ids[] = {
|
static struct pci_device_id snd_hdspm_ids[] __devinitdata = {
|
||||||
{
|
{
|
||||||
.vendor = PCI_VENDOR_ID_XILINX,
|
.vendor = PCI_VENDOR_ID_XILINX,
|
||||||
.device = PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP_MADI,
|
.device = PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP_MADI,
|
||||||
|
|
|
@ -315,7 +315,7 @@ static void snd_hammerfall_free_buffer(struct snd_dma_buffer *dmab, struct pci_d
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static struct pci_device_id snd_rme9652_ids[] = {
|
static struct pci_device_id snd_rme9652_ids[] __devinitdata = {
|
||||||
{
|
{
|
||||||
.vendor = 0x10ee,
|
.vendor = 0x10ee,
|
||||||
.device = 0x3fc4,
|
.device = 0x3fc4,
|
||||||
|
|
|
@ -243,7 +243,7 @@ struct sonicvibes {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pci_device_id snd_sonic_ids[] = {
|
static struct pci_device_id snd_sonic_ids[] __devinitdata = {
|
||||||
{ 0x5333, 0xca00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
|
{ 0x5333, 0xca00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
|
||||||
{ 0, }
|
{ 0, }
|
||||||
};
|
};
|
||||||
|
|
|
@ -63,7 +63,7 @@ MODULE_PARM_DESC(pcm_channels, "Number of hardware channels assigned for PCM.");
|
||||||
module_param_array(wavetable_size, int, NULL, 0444);
|
module_param_array(wavetable_size, int, NULL, 0444);
|
||||||
MODULE_PARM_DESC(wavetable_size, "Maximum memory size in kB for wavetable synth.");
|
MODULE_PARM_DESC(wavetable_size, "Maximum memory size in kB for wavetable synth.");
|
||||||
|
|
||||||
static struct pci_device_id snd_trident_ids[] = {
|
static struct pci_device_id snd_trident_ids[] __devinitdata = {
|
||||||
{PCI_DEVICE(PCI_VENDOR_ID_TRIDENT, PCI_DEVICE_ID_TRIDENT_4DWAVE_DX),
|
{PCI_DEVICE(PCI_VENDOR_ID_TRIDENT, PCI_DEVICE_ID_TRIDENT_4DWAVE_DX),
|
||||||
PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, 0},
|
PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, 0},
|
||||||
{PCI_DEVICE(PCI_VENDOR_ID_TRIDENT, PCI_DEVICE_ID_TRIDENT_4DWAVE_NX),
|
{PCI_DEVICE(PCI_VENDOR_ID_TRIDENT, PCI_DEVICE_ID_TRIDENT_4DWAVE_NX),
|
||||||
|
|
|
@ -123,6 +123,7 @@ module_param(enable, bool, 0444);
|
||||||
#define VIA_REV_8233A 0x40 /* 1 rec, 1 multi-pb, spdf */
|
#define VIA_REV_8233A 0x40 /* 1 rec, 1 multi-pb, spdf */
|
||||||
#define VIA_REV_8235 0x50 /* 2 rec, 4 pb, 1 multi-pb, spdif */
|
#define VIA_REV_8235 0x50 /* 2 rec, 4 pb, 1 multi-pb, spdif */
|
||||||
#define VIA_REV_8237 0x60
|
#define VIA_REV_8237 0x60
|
||||||
|
#define VIA_REV_8251 0x70
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Direct registers
|
* Direct registers
|
||||||
|
@ -395,7 +396,7 @@ struct via82xx {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pci_device_id snd_via82xx_ids[] = {
|
static struct pci_device_id snd_via82xx_ids[] __devinitdata = {
|
||||||
/* 0x1106, 0x3058 */
|
/* 0x1106, 0x3058 */
|
||||||
{ PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, TYPE_CARD_VIA686, }, /* 686A */
|
{ PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, TYPE_CARD_VIA686, }, /* 686A */
|
||||||
/* 0x1106, 0x3059 */
|
/* 0x1106, 0x3059 */
|
||||||
|
@ -862,6 +863,11 @@ static snd_pcm_uframes_t snd_via8233_pcm_pointer(struct snd_pcm_substream *subst
|
||||||
if (!status)
|
if (!status)
|
||||||
status = inb(VIADEV_REG(viadev, OFFSET_STATUS));
|
status = inb(VIADEV_REG(viadev, OFFSET_STATUS));
|
||||||
|
|
||||||
|
/* An apparent bug in the 8251 is worked around by sending a
|
||||||
|
* REG_CTRL_START. */
|
||||||
|
if (chip->revision == VIA_REV_8251 && (status & VIA_REG_STAT_EOL))
|
||||||
|
snd_via82xx_pcm_trigger(substream, SNDRV_PCM_TRIGGER_START);
|
||||||
|
|
||||||
if (!(status & VIA_REG_STAT_ACTIVE)) {
|
if (!(status & VIA_REG_STAT_ACTIVE)) {
|
||||||
res = 0;
|
res = 0;
|
||||||
goto unlock;
|
goto unlock;
|
||||||
|
@ -2313,6 +2319,7 @@ static struct via823x_info via823x_cards[] __devinitdata = {
|
||||||
{ VIA_REV_8233A, "VIA 8233A", TYPE_VIA8233A },
|
{ VIA_REV_8233A, "VIA 8233A", TYPE_VIA8233A },
|
||||||
{ VIA_REV_8235, "VIA 8235", TYPE_VIA8233 },
|
{ VIA_REV_8235, "VIA 8235", TYPE_VIA8233 },
|
||||||
{ VIA_REV_8237, "VIA 8237", TYPE_VIA8233 },
|
{ VIA_REV_8237, "VIA 8237", TYPE_VIA8233 },
|
||||||
|
{ VIA_REV_8251, "VIA 8251", TYPE_VIA8233 },
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2325,7 +2332,7 @@ struct dxs_whitelist {
|
||||||
short action; /* new dxs_support value */
|
short action; /* new dxs_support value */
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __devinit check_dxs_list(struct pci_dev *pci)
|
static int __devinit check_dxs_list(struct pci_dev *pci, int revision)
|
||||||
{
|
{
|
||||||
static struct dxs_whitelist whitelist[] = {
|
static struct dxs_whitelist whitelist[] = {
|
||||||
{ .subvendor = 0x1005, .subdevice = 0x4710, .action = VIA_DXS_ENABLE }, /* Avance Logic Mobo */
|
{ .subvendor = 0x1005, .subdevice = 0x4710, .action = VIA_DXS_ENABLE }, /* Avance Logic Mobo */
|
||||||
|
@ -2342,6 +2349,7 @@ static int __devinit check_dxs_list(struct pci_dev *pci)
|
||||||
{ .subvendor = 0x1043, .subdevice = 0x810d, .action = VIA_DXS_SRC }, /* ASUS */
|
{ .subvendor = 0x1043, .subdevice = 0x810d, .action = VIA_DXS_SRC }, /* ASUS */
|
||||||
{ .subvendor = 0x1043, .subdevice = 0x812a, .action = VIA_DXS_SRC }, /* ASUS A8V Deluxe */
|
{ .subvendor = 0x1043, .subdevice = 0x812a, .action = VIA_DXS_SRC }, /* ASUS A8V Deluxe */
|
||||||
{ .subvendor = 0x1043, .subdevice = 0x8174, .action = VIA_DXS_SRC }, /* ASUS */
|
{ .subvendor = 0x1043, .subdevice = 0x8174, .action = VIA_DXS_SRC }, /* ASUS */
|
||||||
|
{ .subvendor = 0x1043, .subdevice = 0x81b9, .action = VIA_DXS_SRC }, /* ASUS A8V-MX */
|
||||||
{ .subvendor = 0x1071, .subdevice = 0x8375, .action = VIA_DXS_NO_VRA }, /* Vobis/Yakumo/Mitac notebook */
|
{ .subvendor = 0x1071, .subdevice = 0x8375, .action = VIA_DXS_NO_VRA }, /* Vobis/Yakumo/Mitac notebook */
|
||||||
{ .subvendor = 0x1071, .subdevice = 0x8399, .action = VIA_DXS_NO_VRA }, /* Umax AB 595T (VIA K8N800A - VT8237) */
|
{ .subvendor = 0x1071, .subdevice = 0x8399, .action = VIA_DXS_NO_VRA }, /* Umax AB 595T (VIA K8N800A - VT8237) */
|
||||||
{ .subvendor = 0x10cf, .subdevice = 0x118e, .action = VIA_DXS_ENABLE }, /* FSC laptop */
|
{ .subvendor = 0x10cf, .subdevice = 0x118e, .action = VIA_DXS_ENABLE }, /* FSC laptop */
|
||||||
|
@ -2405,6 +2413,10 @@ static int __devinit check_dxs_list(struct pci_dev *pci)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* for newer revision, default to DXS_SRC */
|
||||||
|
if (revision >= VIA_REV_8235)
|
||||||
|
return VIA_DXS_SRC;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* not detected, try 48k rate only to be sure.
|
* not detected, try 48k rate only to be sure.
|
||||||
*/
|
*/
|
||||||
|
@ -2449,7 +2461,7 @@ static int __devinit snd_via82xx_probe(struct pci_dev *pci,
|
||||||
}
|
}
|
||||||
if (chip_type != TYPE_VIA8233A) {
|
if (chip_type != TYPE_VIA8233A) {
|
||||||
if (dxs_support == VIA_DXS_AUTO)
|
if (dxs_support == VIA_DXS_AUTO)
|
||||||
dxs_support = check_dxs_list(pci);
|
dxs_support = check_dxs_list(pci, revision);
|
||||||
/* force to use VIA8233 or 8233A model according to
|
/* force to use VIA8233 or 8233A model according to
|
||||||
* dxs_support module option
|
* dxs_support module option
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -261,7 +261,7 @@ struct via82xx_modem {
|
||||||
struct snd_info_entry *proc_entry;
|
struct snd_info_entry *proc_entry;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pci_device_id snd_via82xx_modem_ids[] = {
|
static struct pci_device_id snd_via82xx_modem_ids[] __devinitdata = {
|
||||||
{ 0x1106, 0x3068, PCI_ANY_ID, PCI_ANY_ID, 0, 0, TYPE_CARD_VIA82XX_MODEM, },
|
{ 0x1106, 0x3068, PCI_ANY_ID, PCI_ANY_ID, 0, 0, TYPE_CARD_VIA82XX_MODEM, },
|
||||||
{ 0, }
|
{ 0, }
|
||||||
};
|
};
|
||||||
|
|
|
@ -60,7 +60,7 @@ enum {
|
||||||
VX_PCI_VX222_NEW
|
VX_PCI_VX222_NEW
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pci_device_id snd_vx222_ids[] = {
|
static struct pci_device_id snd_vx222_ids[] __devinitdata = {
|
||||||
{ 0x10b5, 0x9050, 0x1369, PCI_ANY_ID, 0, 0, VX_PCI_VX222_OLD, }, /* PLX */
|
{ 0x10b5, 0x9050, 0x1369, PCI_ANY_ID, 0, 0, VX_PCI_VX222_OLD, }, /* PLX */
|
||||||
{ 0x10b5, 0x9030, 0x1369, PCI_ANY_ID, 0, 0, VX_PCI_VX222_NEW, }, /* PLX */
|
{ 0x10b5, 0x9030, 0x1369, PCI_ANY_ID, 0, 0, VX_PCI_VX222_NEW, }, /* PLX */
|
||||||
{ 0, }
|
{ 0, }
|
||||||
|
|
|
@ -70,7 +70,7 @@ MODULE_PARM_DESC(rear_switch, "Enable shared rear/line-in switch");
|
||||||
module_param_array(rear_swap, bool, NULL, 0444);
|
module_param_array(rear_swap, bool, NULL, 0444);
|
||||||
MODULE_PARM_DESC(rear_swap, "Swap rear channels (must be enabled for correct IEC958 (S/PDIF)) output");
|
MODULE_PARM_DESC(rear_swap, "Swap rear channels (must be enabled for correct IEC958 (S/PDIF)) output");
|
||||||
|
|
||||||
static struct pci_device_id snd_ymfpci_ids[] = {
|
static struct pci_device_id snd_ymfpci_ids[] __devinitdata = {
|
||||||
{ 0x1073, 0x0004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* YMF724 */
|
{ 0x1073, 0x0004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* YMF724 */
|
||||||
{ 0x1073, 0x000d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* YMF724F */
|
{ 0x1073, 0x000d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* YMF724F */
|
||||||
{ 0x1073, 0x000a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* YMF740 */
|
{ 0x1073, 0x000a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* YMF740 */
|
||||||
|
|
|
@ -5,7 +5,7 @@ menu "PCMCIA devices"
|
||||||
|
|
||||||
config SND_VXPOCKET
|
config SND_VXPOCKET
|
||||||
tristate "Digigram VXpocket"
|
tristate "Digigram VXpocket"
|
||||||
depends on SND && PCMCIA && ISA
|
depends on SND && PCMCIA
|
||||||
select SND_VX_LIB
|
select SND_VX_LIB
|
||||||
help
|
help
|
||||||
Say Y here to include support for Digigram VXpocket and
|
Say Y here to include support for Digigram VXpocket and
|
||||||
|
@ -16,7 +16,7 @@ config SND_VXPOCKET
|
||||||
|
|
||||||
config SND_PDAUDIOCF
|
config SND_PDAUDIOCF
|
||||||
tristate "Sound Core PDAudioCF"
|
tristate "Sound Core PDAudioCF"
|
||||||
depends on SND && PCMCIA && ISA
|
depends on SND && PCMCIA
|
||||||
select SND_PCM
|
select SND_PCM
|
||||||
help
|
help
|
||||||
Say Y here to include support for Sound Core PDAudioCF
|
Say Y here to include support for Sound Core PDAudioCF
|
||||||
|
|
|
@ -1530,6 +1530,15 @@ YAMAHA_DEVICE(0x7010, "UB99"),
|
||||||
.type = QUIRK_MIDI_STANDARD_INTERFACE
|
.type = QUIRK_MIDI_STANDARD_INTERFACE
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
|
||||||
|
.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
|
||||||
|
.vendor_name = "TerraTec",
|
||||||
|
.product_name = "PHASE 26",
|
||||||
|
.ifnum = 3,
|
||||||
|
.type = QUIRK_MIDI_STANDARD_INTERFACE
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
USB_DEVICE(0x0ccd, 0x0035),
|
USB_DEVICE(0x0ccd, 0x0035),
|
||||||
.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
|
.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
|
||||||
|
|
Loading…
Reference in New Issue