You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'linus' of master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa
* 'linus' of master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa: (264 commits) [ALSA] version 1.0.15 [ALSA] Fix thinko in cs4231 mce down check [ALSA] sun-cs4231: improved waiting after MCE down [ALSA] sun-cs4231: use cs4231-regs.h [ALSA] This simplifies and fixes waiting loops of the mce_down() [ALSA] This patch adds support for a wavetable chip on [ALSA] This patch removes open_mutex from the ad1848-lib as [ALSA] fix bootup crash in snd_gus_interrupt() [ALSA] hda-codec - Fix SKU ID function for realtek codecs [ALSA] Support ASUS P701 eeepc [0x1043 0x82a1] support [ALSA] hda-codec - Add array terminator for dmic in STAC codec [ALSA] hdsp - Fix zero division [ALSA] usb-audio - Fix double comment [ALSA] hda-codec - Fix STAC922x volume knob control [ALSA] Changed Jaroslav Kysela's e-mail from perex@suse.cz to perex@perex.cz [ALSA] hda-codec - Fix for Fujitsu Lifebook C1410 [ALSA] mpu-401: remove MPU401_INFO_UART_ONLY flag [ALSA] mpu-401: do not require an ACK byte for the ENTER_UART command [ALSA] via82xx - Add DXS quirk for Shuttle AK31v2 [ALSA] hda-codec - Fix input_mux numbers for vaio stac92xx ...
This commit is contained in:
@@ -1933,7 +1933,7 @@ M: seasons@makosteszta.sote.hu
|
||||
D: Original author of software suspend
|
||||
|
||||
N: Jaroslav Kysela
|
||||
E: perex@suse.cz
|
||||
E: perex@perex.cz
|
||||
W: http://www.perex.cz
|
||||
D: Original Author and Maintainer for HP 10/100 Mbit Network Adapters
|
||||
D: ISA PnP
|
||||
|
||||
@@ -365,13 +365,14 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
Module snd-cmipci
|
||||
-----------------
|
||||
|
||||
Module for C-Media CMI8338 and 8738 PCI sound cards.
|
||||
Module for C-Media CMI8338/8738/8768/8770 PCI sound cards.
|
||||
|
||||
mpu_port - 0x300,0x310,0x320,0x330 = legacy port,
|
||||
1 = integrated PCI port,
|
||||
mpu_port - port address of MIDI interface (8338 only):
|
||||
0x300,0x310,0x320,0x330 = legacy port,
|
||||
0 = disable (default)
|
||||
fm_port - 0x388 = legacy port,
|
||||
1 = integrated PCI port (default),
|
||||
fm_port - port address of OPL-3 FM synthesizer (8x38 only):
|
||||
0x388 = legacy port,
|
||||
1 = integrated PCI port (default on 8738),
|
||||
0 = disable
|
||||
soft_ac3 - Software-conversion of raw SPDIF packets (model 033 only)
|
||||
(default = 1)
|
||||
@@ -768,6 +769,10 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
single_cmd - Use single immediate commands to communicate with
|
||||
codecs (for debugging only)
|
||||
enable_msi - Enable Message Signaled Interrupt (MSI) (default = off)
|
||||
power_save - Automatic power-saving timtout (in second, 0 =
|
||||
disable)
|
||||
power_save_controller - Reset HD-audio controller in power-saving mode
|
||||
(default = on)
|
||||
|
||||
This module supports one card and autoprobe.
|
||||
|
||||
@@ -828,6 +833,8 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
|
||||
ALC268
|
||||
3stack 3-stack model
|
||||
toshiba Toshiba A205
|
||||
acer Acer laptops
|
||||
auto auto-config reading BIOS (default)
|
||||
|
||||
ALC662
|
||||
@@ -842,7 +849,11 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
3stack-dig 3-jack with SPDIF I/O
|
||||
6stack-dig 6-jack digital with SPDIF I/O
|
||||
arima Arima W820Di1
|
||||
targa Targa T8, MSI-1049 T8
|
||||
asus-a7j ASUS A7J
|
||||
asus-a7m ASUS A7M
|
||||
macpro MacPro support
|
||||
mbp3 Macbook Pro rev3
|
||||
imac24 iMac 24'' with jack detection
|
||||
w2jc ASUS W2JC
|
||||
auto auto-config reading BIOS (default)
|
||||
@@ -854,6 +865,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
3stack-6ch-dig 3-jack 6-channel with SPDIF I/O
|
||||
6stack-dig-demo 6-jack digital for Intel demo board
|
||||
acer Acer laptops (Travelmate 3012WTMi, Aspire 5600, etc)
|
||||
acer-aspire Acer Aspire 9810
|
||||
medion Medion Laptops
|
||||
medion-md2 Medion MD2
|
||||
targa-dig Targa/MSI
|
||||
@@ -862,6 +874,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
lenovo-101e Lenovo 101E
|
||||
lenovo-nb0763 Lenovo NB0763
|
||||
lenovo-ms7195-dig Lenovo MS7195
|
||||
haier-w66 Haier W66
|
||||
6stack-hp HP machines with 6stack (Nettle boards)
|
||||
3stack-hp HP machines with 3stack (Lucknow, Samba boards)
|
||||
auto auto-config reading BIOS (default)
|
||||
@@ -885,6 +898,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
3stack-660-digout 3-jack with SPDIF OUT (for ALC660VD)
|
||||
lenovo Lenovo 3000 C200
|
||||
dallas Dallas laptops
|
||||
hp HP TX1000
|
||||
auto auto-config reading BIOS (default)
|
||||
|
||||
CMI9880
|
||||
@@ -920,6 +934,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
3stack 3-stack, shared surrounds
|
||||
laptop 2-channel only (FSC V2060, Samsung M50)
|
||||
laptop-eapd 2-channel with EAPD (Samsung R65, ASUS A6J)
|
||||
laptop-automute 2-channel with EAPD and HP-automute (Lenovo N100)
|
||||
ultra 2-channel with EAPD (Samsung Ultra tablet PC)
|
||||
|
||||
AD1988
|
||||
@@ -945,14 +960,30 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
can be adjusted. Appearing only when compiled with
|
||||
$CONFIG_SND_DEBUG=y
|
||||
|
||||
STAC9200/9205/9254
|
||||
STAC9200
|
||||
ref Reference board
|
||||
dell-d21 Dell (unknown)
|
||||
dell-d22 Dell (unknown)
|
||||
dell-d23 Dell (unknown)
|
||||
dell-m21 Dell Inspiron 630m, Dell Inspiron 640m
|
||||
dell-m22 Dell Latitude D620, Dell Latitude D820
|
||||
dell-m23 Dell XPS M1710, Dell Precision M90
|
||||
dell-m24 Dell Latitude 120L
|
||||
dell-m25 Dell Inspiron E1505n
|
||||
dell-m26 Dell Inspiron 1501
|
||||
dell-m27 Dell Inspiron E1705/9400
|
||||
gateway Gateway laptops with EAPD control
|
||||
|
||||
STAC9205/9254
|
||||
ref Reference board
|
||||
dell-m42 Dell (unknown)
|
||||
dell-m43 Dell Precision
|
||||
dell-m44 Dell Inspiron
|
||||
|
||||
STAC9220/9221
|
||||
ref Reference board
|
||||
3stack D945 3stack
|
||||
5stack D945 5stack + SPDIF
|
||||
dell Dell XPS M1210
|
||||
intel-mac-v1 Intel Mac Type 1
|
||||
intel-mac-v2 Intel Mac Type 2
|
||||
intel-mac-v3 Intel Mac Type 3
|
||||
@@ -964,6 +995,10 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
macbook-pro Intel Mac Book Pro 2nd generation (eq. type 3)
|
||||
imac-intel Intel iMac (eq. type 2)
|
||||
imac-intel-20 Intel iMac (newer version) (eq. type 3)
|
||||
dell-d81 Dell (unknown)
|
||||
dell-d82 Dell (unknown)
|
||||
dell-m81 Dell (unknown)
|
||||
dell-m82 Dell XPS M1210
|
||||
|
||||
STAC9202/9250/9251
|
||||
ref Reference board, base config
|
||||
@@ -975,6 +1010,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
ref Reference board
|
||||
3stack D965 3stack
|
||||
5stack D965 5stack + SPDIF
|
||||
dell-3stack Dell Dimension E520
|
||||
|
||||
STAC9872
|
||||
vaio Setup for VAIO FE550G/SZ110
|
||||
@@ -989,6 +1025,9 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
subsystem ID (output of "lspci -nv") to ALSA BTS or alsa-devel
|
||||
ML (see the section "Links and Addresses").
|
||||
|
||||
power_save and power_save_controller options are for power-saving
|
||||
mode. See powersave.txt for details.
|
||||
|
||||
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
|
||||
@@ -1349,7 +1388,6 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
port - port number or -1 (disable)
|
||||
irq - IRQ number or -1 (disable)
|
||||
pnp - PnP detection - 0 = disable, 1 = enable (default)
|
||||
uart_enter - Issue UART_ENTER command at open - bool, default = on
|
||||
|
||||
This module supports multiple devices and PnP.
|
||||
|
||||
@@ -1630,6 +1668,21 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
|
||||
The power-management is supported.
|
||||
|
||||
Module snd-sc6000
|
||||
-----------------
|
||||
|
||||
Module for Gallant SC-6000 soundcard.
|
||||
|
||||
port - Port # (0x220 or 0x240)
|
||||
mss_port - MSS Port # (0x530 or 0xe80)
|
||||
irq - IRQ # (5,7,9,10,11)
|
||||
mpu_irq - MPU-401 IRQ # (5,7,9,10) ,0 - no MPU-401 irq
|
||||
dma - DMA # (1,3,0)
|
||||
|
||||
This module supports multiple cards.
|
||||
|
||||
This card is also known as Audio Excel DSP 16 or Zoltrix AV302.
|
||||
|
||||
Module snd-sgalaxy
|
||||
------------------
|
||||
|
||||
@@ -1650,9 +1703,11 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
Module for ENSONIQ SoundScape PnP cards.
|
||||
|
||||
port - Port # (PnP setup)
|
||||
wss_port - WSS Port # (PnP setup)
|
||||
irq - IRQ # (PnP setup)
|
||||
mpu_irq - MPU-401 IRQ # (PnP setup)
|
||||
dma - DMA # (PnP setup)
|
||||
dma2 - 2nd DMA # (PnP setup, -1 to disable)
|
||||
|
||||
This module supports multiple cards. ISA PnP must be enabled.
|
||||
You need sscape_ctl tool in alsa-tools package for loading
|
||||
@@ -1697,8 +1752,52 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
dma2 - DMA2 # for CS4232 PCM interface.
|
||||
isapnp - ISA PnP detection - 0 = disable, 1 = enable (default)
|
||||
|
||||
The below are options for wavefront_synth features:
|
||||
wf_raw - Assume that we need to boot the OS (default:no)
|
||||
If yes, then during driver loading, the state of the board is
|
||||
ignored, and we reset the board and load the firmware anyway.
|
||||
fx_raw - Assume that the FX process needs help (default:yes)
|
||||
If false, we'll leave the FX processor in whatever state it is
|
||||
when the driver is loaded. The default is to download the
|
||||
microprogram and associated coefficients to set it up for
|
||||
"default" operation, whatever that means.
|
||||
debug_default - Debug parameters for card initialization
|
||||
wait_usecs - How long to wait without sleeping, usecs
|
||||
(default:150)
|
||||
This magic number seems to give pretty optimal throughput
|
||||
based on my limited experimentation.
|
||||
If you want to play around with it and find a better value, be
|
||||
my guest. Remember, the idea is to get a number that causes us
|
||||
to just busy wait for as many WaveFront commands as possible,
|
||||
without coming up with a number so large that we hog the whole
|
||||
CPU.
|
||||
Specifically, with this number, out of about 134,000 status
|
||||
waits, only about 250 result in a sleep.
|
||||
sleep_interval - How long to sleep when waiting for reply
|
||||
(default: 100)
|
||||
sleep_tries - How many times to try sleeping during a wait
|
||||
(default: 50)
|
||||
ospath - Pathname to processed ICS2115 OS firmware
|
||||
(default:wavefront.os)
|
||||
The path name of the ISC2115 OS firmware. In the recent
|
||||
version, it's handled via firmware loader framework, so it
|
||||
must be installed in the proper path, typically,
|
||||
/lib/firmware.
|
||||
reset_time - How long to wait for a reset to take effect
|
||||
(default:2)
|
||||
ramcheck_time - How many seconds to wait for the RAM test
|
||||
(default:20)
|
||||
osrun_time - How many seconds to wait for the ICS2115 OS
|
||||
(default:10)
|
||||
|
||||
This module supports multiple cards and ISA PnP.
|
||||
|
||||
Note: the firmware file "wavefront.os" was located in the earlier
|
||||
version in /etc. Now it's loaded via firmware loader, and
|
||||
must be in the proper firmware path, such as /lib/firmware.
|
||||
Copy (or symlink) the file appropriately if you get an error
|
||||
regarding firmware downloading after upgrading the kernel.
|
||||
|
||||
Module snd-sonicvibes
|
||||
---------------------
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Brief Notes on C-Media 8738/8338 Driver
|
||||
=======================================
|
||||
Brief Notes on C-Media 8338/8738/8768/8770 Driver
|
||||
=================================================
|
||||
|
||||
Takashi Iwai <tiwai@suse.de>
|
||||
|
||||
@@ -209,10 +209,13 @@ In addition to the standard SB mixer, CM8x38 provides more functions.
|
||||
MIDI CONTROLLER
|
||||
---------------
|
||||
|
||||
The MPU401-UART interface is disabled as default. You need to set
|
||||
module option "mpu_port" with a valid I/O port address to enable the
|
||||
MIDI support. The valid I/O ports are 0x300, 0x310, 0x320 and 0x330.
|
||||
Choose the value which doesn't conflict with other cards.
|
||||
With CMI8338 chips, the MPU401-UART interface is disabled as default.
|
||||
You need to set the module option "mpu_port" to a valid I/O port address
|
||||
to enable MIDI support. Valid I/O ports are 0x300, 0x310, 0x320 and
|
||||
0x330. Choose a value that doesn't conflict with other cards.
|
||||
|
||||
With CMI8738 and newer chips, the MIDI interface is enabled by default
|
||||
and the driver automatically chooses a port address.
|
||||
|
||||
There is _no_ hardware wavetable function on this chip (except for
|
||||
OPL3 synth below).
|
||||
@@ -230,6 +233,8 @@ Set "fm_port" module option for more cards.
|
||||
The output quality of FM OPL/3 is, however, very weird.
|
||||
I don't know why..
|
||||
|
||||
CMI8768 and newer chips do not have the FM synth.
|
||||
|
||||
|
||||
Joystick and Modem
|
||||
------------------
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
</affiliation>
|
||||
</author>
|
||||
|
||||
<date>November 17, 2005</date>
|
||||
<edition>0.3.6</edition>
|
||||
<date>September 10, 2007</date>
|
||||
<edition>0.3.7</edition>
|
||||
|
||||
<abstract>
|
||||
<para>
|
||||
@@ -405,8 +405,9 @@
|
||||
/* definition of the chip-specific record */
|
||||
struct mychip {
|
||||
struct snd_card *card;
|
||||
// rest of implementation will be in the section
|
||||
// "PCI Resource Managements"
|
||||
/* rest of implementation will be in the section
|
||||
* "PCI Resource Managements"
|
||||
*/
|
||||
};
|
||||
|
||||
/* chip-specific destructor
|
||||
@@ -414,7 +415,7 @@
|
||||
*/
|
||||
static int snd_mychip_free(struct mychip *chip)
|
||||
{
|
||||
.... // will be implemented later...
|
||||
.... /* will be implemented later... */
|
||||
}
|
||||
|
||||
/* component-destructor
|
||||
@@ -440,8 +441,9 @@
|
||||
|
||||
*rchip = NULL;
|
||||
|
||||
// check PCI availability here
|
||||
// (see "PCI Resource Managements")
|
||||
/* check PCI availability here
|
||||
* (see "PCI Resource Managements")
|
||||
*/
|
||||
....
|
||||
|
||||
/* allocate a chip-specific data with zero filled */
|
||||
@@ -451,12 +453,13 @@
|
||||
|
||||
chip->card = card;
|
||||
|
||||
// rest of initialization here; will be implemented
|
||||
// later, see "PCI Resource Managements"
|
||||
/* rest of initialization here; will be implemented
|
||||
* later, see "PCI Resource Managements"
|
||||
*/
|
||||
....
|
||||
|
||||
if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL,
|
||||
chip, &ops)) < 0) {
|
||||
err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
|
||||
if (err < 0) {
|
||||
snd_mychip_free(chip);
|
||||
return err;
|
||||
}
|
||||
@@ -490,7 +493,8 @@
|
||||
return -ENOMEM;
|
||||
|
||||
/* (3) */
|
||||
if ((err = snd_mychip_create(card, pci, &chip)) < 0) {
|
||||
err = snd_mychip_create(card, pci, &chip);
|
||||
if (err < 0) {
|
||||
snd_card_free(card);
|
||||
return err;
|
||||
}
|
||||
@@ -502,10 +506,11 @@
|
||||
card->shortname, chip->ioport, chip->irq);
|
||||
|
||||
/* (5) */
|
||||
.... // implemented later
|
||||
.... /* implemented later */
|
||||
|
||||
/* (6) */
|
||||
if ((err = snd_card_register(card)) < 0) {
|
||||
err = snd_card_register(card);
|
||||
if (err < 0) {
|
||||
snd_card_free(card);
|
||||
return err;
|
||||
}
|
||||
@@ -605,7 +610,8 @@
|
||||
<![CDATA[
|
||||
struct mychip *chip;
|
||||
....
|
||||
if ((err = snd_mychip_create(card, pci, &chip)) < 0) {
|
||||
err = snd_mychip_create(card, pci, &chip);
|
||||
if (err < 0) {
|
||||
snd_card_free(card);
|
||||
return err;
|
||||
}
|
||||
@@ -666,7 +672,8 @@
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
if ((err = snd_card_register(card)) < 0) {
|
||||
err = snd_card_register(card);
|
||||
if (err < 0) {
|
||||
snd_card_free(card);
|
||||
return err;
|
||||
}
|
||||
@@ -1091,7 +1098,7 @@
|
||||
static int snd_mychip_free(struct mychip *chip)
|
||||
{
|
||||
/* disable hardware here if any */
|
||||
.... // (not implemented in this document)
|
||||
.... /* (not implemented in this document) */
|
||||
|
||||
/* release the irq */
|
||||
if (chip->irq >= 0)
|
||||
@@ -1119,7 +1126,8 @@
|
||||
*rchip = NULL;
|
||||
|
||||
/* initialize the PCI entry */
|
||||
if ((err = pci_enable_device(pci)) < 0)
|
||||
err = pci_enable_device(pci);
|
||||
if (err < 0)
|
||||
return err;
|
||||
/* check PCI availability (28bit DMA) */
|
||||
if (pci_set_dma_mask(pci, DMA_28BIT_MASK) < 0 ||
|
||||
@@ -1141,7 +1149,8 @@
|
||||
chip->irq = -1;
|
||||
|
||||
/* (1) PCI resource allocation */
|
||||
if ((err = pci_request_regions(pci, "My Chip")) < 0) {
|
||||
err = pci_request_regions(pci, "My Chip");
|
||||
if (err < 0) {
|
||||
kfree(chip);
|
||||
pci_disable_device(pci);
|
||||
return err;
|
||||
@@ -1156,10 +1165,10 @@
|
||||
chip->irq = pci->irq;
|
||||
|
||||
/* (2) initialization of the chip hardware */
|
||||
.... // (not implemented in this document)
|
||||
.... /* (not implemented in this document) */
|
||||
|
||||
if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL,
|
||||
chip, &ops)) < 0) {
|
||||
err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
|
||||
if (err < 0) {
|
||||
snd_mychip_free(chip);
|
||||
return err;
|
||||
}
|
||||
@@ -1233,7 +1242,8 @@
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
if ((err = pci_enable_device(pci)) < 0)
|
||||
err = pci_enable_device(pci);
|
||||
if (err < 0)
|
||||
return err;
|
||||
if (pci_set_dma_mask(pci, DMA_28BIT_MASK) < 0 ||
|
||||
pci_set_consistent_dma_mask(pci, DMA_28BIT_MASK) < 0) {
|
||||
@@ -1294,7 +1304,8 @@
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
if ((err = pci_request_regions(pci, "My Chip")) < 0) {
|
||||
err = pci_request_regions(pci, "My Chip");
|
||||
if (err < 0) {
|
||||
kfree(chip);
|
||||
pci_disable_device(pci);
|
||||
return err;
|
||||
@@ -1322,7 +1333,7 @@
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
if (request_irq(pci->irq, snd_mychip_interrupt,
|
||||
IRQF_DISABLED|IRQF_SHARED, "My Chip", chip)) {
|
||||
IRQF_SHARED, "My Chip", chip)) {
|
||||
printk(KERN_ERR "cannot grab irq %d\n", pci->irq);
|
||||
snd_mychip_free(chip);
|
||||
return -EBUSY;
|
||||
@@ -1773,7 +1784,8 @@
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
|
||||
runtime->hw = snd_mychip_playback_hw;
|
||||
// more hardware-initialization will be done here
|
||||
/* more hardware-initialization will be done here */
|
||||
....
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1781,7 +1793,8 @@
|
||||
static int snd_mychip_playback_close(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct mychip *chip = snd_pcm_substream_chip(substream);
|
||||
// the hardware-specific codes will be here
|
||||
/* the hardware-specific codes will be here */
|
||||
....
|
||||
return 0;
|
||||
|
||||
}
|
||||
@@ -1793,7 +1806,8 @@
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
|
||||
runtime->hw = snd_mychip_capture_hw;
|
||||
// more hardware-initialization will be done here
|
||||
/* more hardware-initialization will be done here */
|
||||
....
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1801,7 +1815,8 @@
|
||||
static int snd_mychip_capture_close(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct mychip *chip = snd_pcm_substream_chip(substream);
|
||||
// the hardware-specific codes will be here
|
||||
/* the hardware-specific codes will be here */
|
||||
....
|
||||
return 0;
|
||||
|
||||
}
|
||||
@@ -1844,10 +1859,12 @@
|
||||
{
|
||||
switch (cmd) {
|
||||
case SNDRV_PCM_TRIGGER_START:
|
||||
// do something to start the PCM engine
|
||||
/* do something to start the PCM engine */
|
||||
....
|
||||
break;
|
||||
case SNDRV_PCM_TRIGGER_STOP:
|
||||
// do something to stop the PCM engine
|
||||
/* do something to stop the PCM engine */
|
||||
....
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
@@ -1900,8 +1917,8 @@
|
||||
struct snd_pcm *pcm;
|
||||
int err;
|
||||
|
||||
if ((err = snd_pcm_new(chip->card, "My Chip", 0, 1, 1,
|
||||
&pcm)) < 0)
|
||||
err = snd_pcm_new(chip->card, "My Chip", 0, 1, 1, &pcm);
|
||||
if (err < 0)
|
||||
return err;
|
||||
pcm->private_data = chip;
|
||||
strcpy(pcm->name, "My Chip");
|
||||
@@ -1939,8 +1956,8 @@
|
||||
struct snd_pcm *pcm;
|
||||
int err;
|
||||
|
||||
if ((err = snd_pcm_new(chip->card, "My Chip", 0, 1, 1,
|
||||
&pcm)) < 0)
|
||||
err = snd_pcm_new(chip->card, "My Chip", 0, 1, 1, &pcm);
|
||||
if (err < 0)
|
||||
return err;
|
||||
pcm->private_data = chip;
|
||||
strcpy(pcm->name, "My Chip");
|
||||
@@ -2097,7 +2114,7 @@
|
||||
struct mychip *chip = snd_pcm_chip(pcm);
|
||||
/* free your own data */
|
||||
kfree(chip->my_private_pcm_data);
|
||||
// do what you like else
|
||||
/* do what you like else */
|
||||
....
|
||||
}
|
||||
|
||||
@@ -2884,10 +2901,10 @@ struct _snd_pcm_runtime {
|
||||
<![CDATA[
|
||||
switch (cmd) {
|
||||
case SNDRV_PCM_TRIGGER_START:
|
||||
// do something to start the PCM engine
|
||||
/* do something to start the PCM engine */
|
||||
break;
|
||||
case SNDRV_PCM_TRIGGER_STOP:
|
||||
// do something to stop the PCM engine
|
||||
/* do something to stop the PCM engine */
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
@@ -3071,7 +3088,7 @@ struct _snd_pcm_runtime {
|
||||
spin_unlock(&chip->lock);
|
||||
snd_pcm_period_elapsed(chip->substream);
|
||||
spin_lock(&chip->lock);
|
||||
// acknowledge the interrupt if necessary
|
||||
/* acknowledge the interrupt if necessary */
|
||||
}
|
||||
....
|
||||
spin_unlock(&chip->lock);
|
||||
@@ -3134,7 +3151,7 @@ struct _snd_pcm_runtime {
|
||||
snd_pcm_period_elapsed(substream);
|
||||
spin_lock(&chip->lock);
|
||||
}
|
||||
// acknowledge the interrupt if necessary
|
||||
/* acknowledge the interrupt if necessary */
|
||||
}
|
||||
....
|
||||
spin_unlock(&chip->lock);
|
||||
@@ -3455,6 +3472,13 @@ struct _snd_pcm_runtime {
|
||||
(casted to unsigned long) of some record to this field, too.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <structfield>tlv</structfield> field can be used to provide
|
||||
metadata about the control; see the
|
||||
<link linkend="control-interface-tlv">
|
||||
<citetitle>Metadata</citetitle></link> subsection.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The other three are
|
||||
<link linkend="control-interface-callbacks"><citetitle>
|
||||
@@ -3604,7 +3628,7 @@ struct _snd_pcm_runtime {
|
||||
<title>Example of info callback</title>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
static int snd_myctl_info(struct snd_kcontrol *kcontrol,
|
||||
static int snd_myctl_mono_info(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_info *uinfo)
|
||||
{
|
||||
uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
|
||||
@@ -3639,7 +3663,7 @@ struct _snd_pcm_runtime {
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
static int snd_myctl_info(struct snd_kcontrol *kcontrol,
|
||||
static int snd_myctl_enum_info(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_info *uinfo)
|
||||
{
|
||||
static char *texts[4] = {
|
||||
@@ -3658,6 +3682,16 @@ struct _snd_pcm_runtime {
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Some common info callbacks are prepared for easy use:
|
||||
<function>snd_ctl_boolean_mono_info()</function> and
|
||||
<function>snd_ctl_boolean_stereo_info()</function>.
|
||||
Obviously, the former is an info callback for a mono channel
|
||||
boolean item, just like <function>snd_myctl_mono_info</function>
|
||||
above, and the latter is for a stereo channel boolean item.
|
||||
</para>
|
||||
|
||||
</section>
|
||||
|
||||
<section id="control-interface-callbacks-get">
|
||||
@@ -3794,7 +3828,8 @@ struct _snd_pcm_runtime {
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
if ((err = snd_ctl_add(card, snd_ctl_new1(&my_control, chip))) < 0)
|
||||
err = snd_ctl_add(card, snd_ctl_new1(&my_control, chip));
|
||||
if (err < 0)
|
||||
return err;
|
||||
]]>
|
||||
</programlisting>
|
||||
@@ -3843,6 +3878,56 @@ struct _snd_pcm_runtime {
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section id="control-interface-tlv">
|
||||
<title>Metadata</title>
|
||||
<para>
|
||||
To provide information about the dB values of a mixer control, use
|
||||
on of the <constant>DECLARE_TLV_xxx</constant> macros from
|
||||
<filename><sound/tlv.h></filename> to define a variable
|
||||
containing this information, set the<structfield>tlv.p
|
||||
</structfield> field to point to this variable, and include the
|
||||
<constant>SNDRV_CTL_ELEM_ACCESS_TLV_READ</constant> flag in the
|
||||
<structfield>access</structfield> field; like this:
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
static DECLARE_TLV_DB_SCALE(db_scale_my_control, -4050, 150, 0);
|
||||
|
||||
static struct snd_kcontrol_new my_control __devinitdata = {
|
||||
...
|
||||
.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
|
||||
SNDRV_CTL_ELEM_ACCESS_TLV_READ,
|
||||
...
|
||||
.tlv.p = db_scale_my_control,
|
||||
};
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <function>DECLARE_TLV_DB_SCALE</function> macro defines
|
||||
information about a mixer control where each step in the control's
|
||||
value changes the dB value by a constant dB amount.
|
||||
The first parameter is the name of the variable to be defined.
|
||||
The second parameter is the minimum value, in units of 0.01 dB.
|
||||
The third parameter is the step size, in units of 0.01 dB.
|
||||
Set the fourth parameter to 1 if the minimum value actually mutes
|
||||
the control.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <function>DECLARE_TLV_DB_LINEAR</function> macro defines
|
||||
information about a mixer control where the control's value affects
|
||||
the output linearly.
|
||||
The first parameter is the name of the variable to be defined.
|
||||
The second parameter is the minimum value, in units of 0.01 dB.
|
||||
The third parameter is the maximum value, in units of 0.01 dB.
|
||||
If the minimum value mutes the control, set the second parameter to
|
||||
<constant>TLV_DB_GAIN_MUTE</constant>.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
</chapter>
|
||||
|
||||
|
||||
@@ -3880,7 +3965,7 @@ struct _snd_pcm_runtime {
|
||||
{
|
||||
struct mychip *chip = ac97->private_data;
|
||||
....
|
||||
// read a register value here from the codec
|
||||
/* read a register value here from the codec */
|
||||
return the_register_value;
|
||||
}
|
||||
|
||||
@@ -3889,7 +3974,7 @@ struct _snd_pcm_runtime {
|
||||
{
|
||||
struct mychip *chip = ac97->private_data;
|
||||
....
|
||||
// write the given register value to the codec
|
||||
/* write the given register value to the codec */
|
||||
}
|
||||
|
||||
static int snd_mychip_ac97(struct mychip *chip)
|
||||
@@ -3902,7 +3987,8 @@ struct _snd_pcm_runtime {
|
||||
.read = snd_mychip_ac97_read,
|
||||
};
|
||||
|
||||
if ((err = snd_ac97_bus(chip->card, 0, &ops, NULL, &bus)) < 0)
|
||||
err = snd_ac97_bus(chip->card, 0, &ops, NULL, &bus);
|
||||
if (err < 0)
|
||||
return err;
|
||||
memset(&ac97, 0, sizeof(ac97));
|
||||
ac97.private_data = chip;
|
||||
@@ -4447,10 +4533,10 @@ struct _snd_pcm_runtime {
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
struct list_head *list;
|
||||
struct snd_rawmidi_substream *substream;
|
||||
list_for_each(list, &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams) {
|
||||
substream = list_entry(list, struct snd_rawmidi_substream, list);
|
||||
list_for_each_entry(substream,
|
||||
&rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams,
|
||||
list {
|
||||
sprintf(substream->name, "My MIDI Port %d", substream->number + 1);
|
||||
}
|
||||
/* same for SNDRV_RAWMIDI_STREAM_INPUT */
|
||||
|
||||
@@ -303,10 +303,3 @@ ICE1712 supports only the unconventional format, interleaved
|
||||
the buffer as the conventional (mono or 2-channels, 8 or 16bit) format
|
||||
on OSS.
|
||||
|
||||
USB devices
|
||||
-----------
|
||||
Some USB devices support only 24bit format packed in 3bytes. This
|
||||
format is not supported by OSS and no conversion is provided by kernel
|
||||
OSS emulation. You can use the user-space OSS emulation via libaoss
|
||||
instead.
|
||||
|
||||
|
||||
@@ -49,6 +49,9 @@ struct hda_bus_ops {
|
||||
unsigned int verb, unsigned int parm);
|
||||
unsigned int (*get_response)(struct hda_codec *codec);
|
||||
void (*private_free)(struct hda_bus *);
|
||||
#ifdef CONFIG_SND_HDA_POWER_SAVE
|
||||
void (*pm_notify)(struct hda_codec *codec);
|
||||
#endif
|
||||
};
|
||||
|
||||
The command callback is called when the codec module needs to send a
|
||||
@@ -56,9 +59,16 @@ VERB to the controller. It's always a single command.
|
||||
The get_response callback is called when the codec requires the answer
|
||||
for the last command. These two callbacks are mandatory and have to
|
||||
be given.
|
||||
The last, private_free callback, is optional. It's called in the
|
||||
The third, private_free callback, is optional. It's called in the
|
||||
destructor to release any necessary data in the lowlevel driver.
|
||||
|
||||
The pm_notify callback is available only with
|
||||
CONFIG_SND_HDA_POWER_SAVE kconfig. It's called when the codec needs
|
||||
to power up or may power down. The controller should check the all
|
||||
belonging codecs on the bus whether they are actually powered off
|
||||
(check codec->power_on), and optionally the driver may power down the
|
||||
contoller side, too.
|
||||
|
||||
The bus instance is created via snd_hda_bus_new(). You need to pass
|
||||
the card instance, the template, and the pointer to store the
|
||||
resultant bus instance.
|
||||
@@ -86,10 +96,8 @@ resultant codec instance (can be NULL if not needed).
|
||||
The codec is stored in a linked list of bus instance. You can follow
|
||||
the codec list like:
|
||||
|
||||
struct list_head *p;
|
||||
struct hda_codec *codec;
|
||||
list_for_each(p, &bus->codec_list) {
|
||||
codec = list_entry(p, struct hda_codec, list);
|
||||
list_for_each_entry(codec, &bus->codec_list, list) {
|
||||
...
|
||||
}
|
||||
|
||||
@@ -100,10 +108,15 @@ initialization sequence is called when the controls are built later.
|
||||
Codec Access
|
||||
============
|
||||
|
||||
To access codec, use snd_codec_read() and snd_codec_write().
|
||||
To access codec, use snd_hda_codec_read() and snd_hda_codec_write().
|
||||
snd_hda_param_read() is for reading parameters.
|
||||
For writing a sequence of verbs, use snd_hda_sequence_write().
|
||||
|
||||
There are variants of cached read/write, snd_hda_codec_write_cache(),
|
||||
snd_hda_sequence_write_cache(). These are used for recording the
|
||||
register states for the power-mangement resume. When no PM is needed,
|
||||
these are equivalent with non-cached version.
|
||||
|
||||
To retrieve the number of sub nodes connected to the given node, use
|
||||
snd_hda_get_sub_nodes(). The connection list can be obtained via
|
||||
snd_hda_get_connections() call.
|
||||
@@ -239,6 +252,10 @@ set the codec->patch_ops field. This is defined as below:
|
||||
int (*suspend)(struct hda_codec *codec, pm_message_t state);
|
||||
int (*resume)(struct hda_codec *codec);
|
||||
#endif
|
||||
#ifdef CONFIG_SND_HDA_POWER_SAVE
|
||||
int (*check_power_status)(struct hda_codec *codec,
|
||||
hda_nid_t nid);
|
||||
#endif
|
||||
};
|
||||
|
||||
The build_controls callback is called from snd_hda_build_controls().
|
||||
@@ -251,6 +268,18 @@ The unsol_event callback is called when an unsolicited event is
|
||||
received.
|
||||
|
||||
The suspend and resume callbacks are for power management.
|
||||
They can be NULL if no special sequence is required. When the resume
|
||||
callback is NULL, the driver calls the init callback and resumes the
|
||||
registers from the cache. If other handling is needed, you'd need to
|
||||
write your own resume callback. There, the amp values can be resumed
|
||||
via
|
||||
void snd_hda_codec_resume_amp(struct hda_codec *codec);
|
||||
and the other codec registers via
|
||||
void snd_hda_codec_resume_cache(struct hda_codec *codec);
|
||||
|
||||
The check_power_status callback is called when the amp value of the
|
||||
given widget NID is changed. The codec code can turn on/off the power
|
||||
appropriately from this information.
|
||||
|
||||
Each entry can be NULL if not necessary to be called.
|
||||
|
||||
@@ -267,8 +296,7 @@ Digital I/O
|
||||
===========
|
||||
|
||||
Call snd_hda_create_spdif_out_ctls() from the patch to create controls
|
||||
related with SPDIF out. In the patch resume callback, call
|
||||
snd_hda_resume_spdif().
|
||||
related with SPDIF out.
|
||||
|
||||
|
||||
Helper Functions
|
||||
@@ -284,12 +312,7 @@ as a module parameter, and PCI subsystem IDs. If the matching entry
|
||||
is found, it returns the config field value.
|
||||
|
||||
snd_hda_add_new_ctls() can be used to create and add control entries.
|
||||
Pass the zero-terminated array of struct snd_kcontrol_new. The same array
|
||||
can be passed to snd_hda_resume_ctls() for resume.
|
||||
Note that this will call control->put callback of these entries. So,
|
||||
put callback should check codec->in_resume and force to restore the
|
||||
given value if it's non-zero even if the value is identical with the
|
||||
cached value.
|
||||
Pass the zero-terminated array of struct snd_kcontrol_new
|
||||
|
||||
Macros HDA_CODEC_VOLUME(), HDA_CODEC_MUTE() and their variables can be
|
||||
used for the entry of struct snd_kcontrol_new.
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
Notes on Power-Saving Mode
|
||||
==========================
|
||||
|
||||
AC97 and HD-audio drivers have the automatic power-saving mode.
|
||||
This feature is enabled via Kconfig CONFIG_SND_AC97_POWER_SAVE
|
||||
and CONFIG_SND_HDA_POWER_SAVE options, respectively.
|
||||
|
||||
With the automatic power-saving, the driver turns off the codec power
|
||||
appropriately when no operation is required. When no applications use
|
||||
the device and/or no analog loopback is set, the power disablement is
|
||||
done fully or partially. It'll save a certain power consumption, thus
|
||||
good for laptops (even for desktops).
|
||||
|
||||
The time-out for automatic power-off can be specified via power_save
|
||||
module option of snd-ac97-codec and snd-hda-intel modules. Specify
|
||||
the time-out value in seconds. 0 means to disable the automatic
|
||||
power-saving. The default value of timeout is given via
|
||||
CONFIG_SND_AC97_POWER_SAVE_DEFAULT and
|
||||
CONFIG_SND_HDA_POWER_SAVE_DEFAULT Kconfig options. Setting this to 1
|
||||
(the minimum value) isn't recommended because many applications try to
|
||||
reopen the device frequently. 10 would be a good choice for normal
|
||||
operations.
|
||||
|
||||
The power_save option is exported as writable. This means you can
|
||||
adjust the value via sysfs on the fly. For example, to turn on the
|
||||
automatic power-save mode with 10 seconds, write to
|
||||
/sys/modules/snd_ac97_codec/parameters/power_save (usually as root):
|
||||
|
||||
# echo 10 > /sys/modules/snd_ac97_codec/parameters/power_save
|
||||
|
||||
|
||||
Note that you might hear click noise/pop when changing the power
|
||||
state. Also, it often takes certain time to wake up from the
|
||||
power-down to the active state. These are often hardly to fix, so
|
||||
don't report extra bug reports unless you have a fix patch ;-)
|
||||
|
||||
For HD-audio interface, there is another module option,
|
||||
power_save_controller. This enables/disables the power-save mode of
|
||||
the controller side. Setting this on may reduce a bit more power
|
||||
consumption, but might result in longer wake-up time and click noise.
|
||||
Try to turn it off when you experience such a thing too often.
|
||||
+3
-3
@@ -1769,7 +1769,7 @@ S: Maintained
|
||||
|
||||
HP100: Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series
|
||||
P: Jaroslav Kysela
|
||||
M: perex@suse.cz
|
||||
M: perex@perex.cz
|
||||
S: Maintained
|
||||
|
||||
HPET: High Precision Event Timers driver (hpet.c)
|
||||
@@ -2132,7 +2132,7 @@ S: Maintained
|
||||
|
||||
ISAPNP
|
||||
P: Jaroslav Kysela
|
||||
M: perex@suse.cz
|
||||
M: perex@perex.cz
|
||||
S: Maintained
|
||||
|
||||
ISDN SUBSYSTEM
|
||||
@@ -3523,7 +3523,7 @@ S: Maintained
|
||||
|
||||
SOUND
|
||||
P: Jaroslav Kysela
|
||||
M: perex@suse.cz
|
||||
M: perex@perex.cz
|
||||
L: alsa-devel@alsa-project.org (subscribers-only)
|
||||
S: Maintained
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* (c) 2005,2006 Ricardo Cerqueira <v4l@cerqueira.org>
|
||||
* (c) 2005 Mauro Carvalho Chehab <mchehab@infradead.org>
|
||||
* Based on a dummy cx88 module by Gerd Knorr <kraxel@bytesex.org>
|
||||
* Based on dummy.c by Jaroslav Kysela <perex@suse.cz>
|
||||
* Based on dummy.c by Jaroslav Kysela <perex@perex.cz>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
+2
-2
@@ -8,7 +8,7 @@
|
||||
** Extended for new busmaster capable chipsets by
|
||||
** Siegfried "Frieder" Loeffler (dg1sek) <floeff@mathematik.uni-stuttgart.de>
|
||||
**
|
||||
** Maintained by: Jaroslav Kysela <perex@suse.cz>
|
||||
** Maintained by: Jaroslav Kysela <perex@perex.cz>
|
||||
**
|
||||
** This driver has only been tested with
|
||||
** -- HP J2585B 10/100 Mbit/s PCI Busmaster
|
||||
@@ -2951,7 +2951,7 @@ static struct pci_driver hp100_pci_driver = {
|
||||
*/
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>, "
|
||||
MODULE_AUTHOR("Jaroslav Kysela <perex@perex.cz>, "
|
||||
"Siegfried \"Frieder\" Loeffler (dg1sek) <floeff@mathematik.uni-stuttgart.de>");
|
||||
MODULE_DESCRIPTION("HP CASCADE Architecture Driver for 100VG-AnyLan Network Adapters");
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* interface.c - contains everything related to the user interface
|
||||
*
|
||||
* Some code, especially possible resource dumping is based on isapnp_proc.c (c) Jaroslav Kysela <perex@suse.cz>
|
||||
* Some code, especially possible resource dumping is based on isapnp_proc.c (c) Jaroslav Kysela <perex@perex.cz>
|
||||
* Copyright 2002 Adam Belay <ambx1@neo.rr.com>
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ISA Plug & Play support
|
||||
* Copyright (c) by Jaroslav Kysela <perex@suse.cz>
|
||||
* Copyright (c) by Jaroslav Kysela <perex@perex.cz>
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@@ -53,7 +53,7 @@ static int isapnp_rdp; /* Read Data Port */
|
||||
static int isapnp_reset = 1; /* reset all PnP cards (deactivate) */
|
||||
static int isapnp_verbose = 1; /* verbose mode */
|
||||
|
||||
MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
|
||||
MODULE_AUTHOR("Jaroslav Kysela <perex@perex.cz>");
|
||||
MODULE_DESCRIPTION("Generic ISA Plug & Play support");
|
||||
module_param(isapnp_disable, int, 0);
|
||||
MODULE_PARM_DESC(isapnp_disable, "ISA Plug & Play disable");
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ISA Plug & Play support
|
||||
* Copyright (c) by Jaroslav Kysela <perex@suse.cz>
|
||||
* Copyright (c) by Jaroslav Kysela <perex@perex.cz>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* manager.c - Resource Management, Conflict Resolution, Activation and Disabling of Devices
|
||||
*
|
||||
* based on isapnp.c resource management (c) Jaroslav Kysela <perex@suse.cz>
|
||||
* based on isapnp.c resource management (c) Jaroslav Kysela <perex@perex.cz>
|
||||
* Copyright 2003 Adam Belay <ambx1@neo.rr.com>
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* resource.c - Contains functions for registering and analyzing resource information
|
||||
*
|
||||
* based on isapnp.c resource management (c) Jaroslav Kysela <perex@suse.cz>
|
||||
* based on isapnp.c resource management (c) Jaroslav Kysela <perex@perex.cz>
|
||||
* Copyright 2003 Adam Belay <ambx1@neo.rr.com>
|
||||
*/
|
||||
|
||||
|
||||
@@ -120,6 +120,7 @@
|
||||
#define I2C_DRIVERID_WM8753 91 /* Wolfson WM8753 audio codec */
|
||||
#define I2C_DRIVERID_LM4857 92 /* LM4857 Audio Amplifier */
|
||||
#define I2C_DRIVERID_VP27SMPX 93 /* Panasonic VP27s tuner internal MPX */
|
||||
#define I2C_DRIVERID_CS4270 94 /* Cirrus Logic 4270 audio codec */
|
||||
|
||||
#define I2C_DRIVERID_I2CDEV 900
|
||||
#define I2C_DRIVERID_ARP 902 /* SMBus ARP Client */
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Board-specific data used to set up AT73c213 audio DAC driver.
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_SPI_AT73C213_H
|
||||
#define __LINUX_SPI_AT73C213_H
|
||||
|
||||
/**
|
||||
* at73c213_board_info - how the external DAC is wired to the device.
|
||||
*
|
||||
* @ssc_id: SSC platform_driver id the DAC shall use to stream the audio.
|
||||
* @dac_clk: the external clock used to provide master clock to the DAC.
|
||||
* @shortname: a short discription for the DAC, seen by userspace tools.
|
||||
*
|
||||
* This struct contains the configuration of the hardware connection to the
|
||||
* external DAC. The DAC needs a master clock and a I2S audio stream. It also
|
||||
* provides a name which is used to identify it in userspace tools.
|
||||
*/
|
||||
struct at73c213_board_info {
|
||||
int ssc_id;
|
||||
struct clk *dac_clk;
|
||||
char shortname[32];
|
||||
};
|
||||
|
||||
#endif /* __LINUX_SPI_AT73C213_H */
|
||||
@@ -2,7 +2,7 @@
|
||||
#define __SOUND_AC97_CODEC_H
|
||||
|
||||
/*
|
||||
* Copyright (c) by Jaroslav Kysela <perex@suse.cz>
|
||||
* Copyright (c) by Jaroslav Kysela <perex@perex.cz>
|
||||
* Universal interface for Audio Codec '97
|
||||
*
|
||||
* For more details look to AC '97 component specification revision 2.1
|
||||
@@ -345,9 +345,9 @@
|
||||
#define AC97_ALC650_GPIO_STATUS 0x78
|
||||
#define AC97_ALC650_CLOCK 0x7a
|
||||
|
||||
/* specific - Yamaha YMF753 */
|
||||
#define AC97_YMF753_DIT_CTRL2 0x66 /* DIT Control 2 */
|
||||
#define AC97_YMF753_3D_MODE_SEL 0x68 /* 3D Mode Select */
|
||||
/* specific - Yamaha YMF7x3 */
|
||||
#define AC97_YMF7X3_DIT_CTRL 0x66 /* DIT Control (YMF743) / 2 (YMF753) */
|
||||
#define AC97_YMF7X3_3D_MODE_SEL 0x68 /* 3D Mode Select */
|
||||
|
||||
/* specific - C-Media */
|
||||
#define AC97_CM9738_VENDOR_CTRL 0x5a
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#define __SOUND_AD1848_H
|
||||
|
||||
/*
|
||||
* Copyright (c) by Jaroslav Kysela <perex@suse.cz>
|
||||
* Copyright (c) by Jaroslav Kysela <perex@perex.cz>
|
||||
* Definitions for AD1847/AD1848/CS4248 chips
|
||||
*
|
||||
*
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
/* IO ports */
|
||||
|
||||
#define AD1848P( codec, x ) ( (chip) -> port + c_d_c_AD1848##x )
|
||||
#define AD1848P( chip, x ) ( (chip) -> port + c_d_c_AD1848##x )
|
||||
|
||||
#define c_d_c_AD1848REGSEL 0
|
||||
#define c_d_c_AD1848REG 1
|
||||
@@ -154,7 +154,6 @@ struct snd_ad1848 {
|
||||
#endif
|
||||
|
||||
spinlock_t reg_lock;
|
||||
struct mutex open_mutex;
|
||||
};
|
||||
|
||||
/* exported functions */
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Advanced Linux Sound Architecture
|
||||
*
|
||||
* GF1 (GUS) Patch Instrument Format
|
||||
* Copyright (c) 1994-99 by Jaroslav Kysela <perex@suse.cz>
|
||||
* Copyright (c) 1994-99 by Jaroslav Kysela <perex@perex.cz>
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user