X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=Documentation%2Fsound%2Falsa%2FDocBook%2Fwriting-an-alsa-driver.tmpl;h=ccd0a953953dcc09a52288d766bff968afff3e4b;hb=refs%2Fheads%2Fvserver;hp=4251085d38d3a173981867092bf23cc77cb9a8f7;hpb=76828883507a47dae78837ab5dec5a5b4513c667;p=linux-2.6.git
diff --git a/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
index 4251085d3..ccd0a9539 100644
--- a/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
+++ b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
@@ -927,7 +927,7 @@
private_data;
+ struct mychip *chip = card->private_data;
]]>
@@ -1054,9 +1054,8 @@
For a device which allows hotplugging, you can use
- snd_card_free_in_thread. This one will
- postpone the destruction and wait in a kernel-thread until all
- devices are closed.
+ snd_card_free_when_closed. This one will
+ postpone the destruction until all devices are closed.
@@ -1096,7 +1095,7 @@
/* release the irq */
if (chip->irq >= 0)
- free_irq(chip->irq, (void *)chip);
+ free_irq(chip->irq, chip);
/* release the i/o ports & memory */
pci_release_regions(chip->pci);
/* disable the PCI entry */
@@ -1123,8 +1122,8 @@
if ((err = pci_enable_device(pci)) < 0)
return err;
/* check PCI availability (28bit DMA) */
- if (pci_set_dma_mask(pci, 0x0fffffff) < 0 ||
- pci_set_consistent_dma_mask(pci, 0x0fffffff) < 0) {
+ if (pci_set_dma_mask(pci, DMA_28BIT_MASK) < 0 ||
+ pci_set_consistent_dma_mask(pci, DMA_28BIT_MASK) < 0) {
printk(KERN_ERR "error to set 28bit mask DMA\n");
pci_disable_device(pci);
return -ENXIO;
@@ -1149,7 +1148,7 @@
}
chip->port = pci_resource_start(pci, 0);
if (request_irq(pci->irq, snd_mychip_interrupt,
- SA_INTERRUPT|SA_SHIRQ, "My Chip", chip)) {
+ IRQF_SHARED, "My Chip", chip)) {
printk(KERN_ERR "cannot grab irq %d\n", pci->irq);
snd_mychip_free(chip);
return -EBUSY;
@@ -1216,7 +1215,7 @@
The allocation of PCI resources is done in the
probe() function, and usually an extra
xxx_create() function is written for this
- purpose.
+ purpose.
@@ -1225,7 +1224,7 @@
allocating resources. Also, you need to set the proper PCI DMA
mask to limit the accessed i/o range. In some cases, you might
need to call pci_set_master() function,
- too.
+ too.
@@ -1236,8 +1235,8 @@
Now assume that this PCI device has an I/O port with 8 bytes
and an interrupt. Then struct mychip will have the
- following fields:
+ following fields:
@@ -1323,7 +1322,7 @@
irq, snd_mychip_interrupt,
- SA_INTERRUPT|SA_SHIRQ, "My Chip", chip)) {
+ IRQF_DISABLED|IRQF_SHARED, "My Chip", chip)) {
printk(KERN_ERR "cannot grab irq %d\n", pci->irq);
snd_mychip_free(chip);
return -EBUSY;
@@ -1342,7 +1341,7 @@
On the PCI bus, the interrupts can be shared. Thus,
- SA_SHIRQ is given as the interrupt flag of
+ IRQF_SHARED is given as the interrupt flag of
request_irq().
@@ -1388,7 +1387,7 @@
irq >= 0)
- free_irq(chip->irq, (void *)chip);
+ free_irq(chip->irq, chip);
]]>
@@ -1834,7 +1833,7 @@
mychip_set_sample_format(chip, runtime->format);
mychip_set_sample_rate(chip, runtime->rate);
mychip_set_channels(chip, runtime->channels);
- mychip_set_dma_setup(chip, runtime->dma_area,
+ mychip_set_dma_setup(chip, runtime->dma_addr,
chip->buffer_size,
chip->period_size);
return 0;
@@ -2836,7 +2835,7 @@ struct _snd_pcm_runtime {
Note that this callback became non-atomic since the recent version.
- You can use schedule-related fucntions safely in this callback now.
+ You can use schedule-related functions safely in this callback now.
@@ -3048,7 +3047,7 @@ struct _snd_pcm_runtime {
- If you aquire a spinlock in the interrupt handler, and the
+ If you acquire a spinlock in the interrupt handler, and the
lock is used in other pcm callbacks, too, then you have to
release the lock before calling
snd_pcm_period_elapsed(), because
@@ -3388,7 +3387,7 @@ struct _snd_pcm_runtime {
.name = "PCM Playback Switch",
.index = 0,
.access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
- .private_values = 0xffff,
+ .private_value = 0xffff,
.info = my_control_info,
.get = my_control_get,
.put = my_control_put
@@ -3449,7 +3448,7 @@ struct _snd_pcm_runtime {
- The private_values field contains
+ The private_value field contains
an arbitrary long integer value for this record. When using
generic info,
get and
@@ -4215,7 +4214,7 @@ struct _snd_pcm_runtime {
@@ -4242,15 +4241,36 @@ struct _snd_pcm_runtime {
+ The 5th argument is bitflags for additional information.
When the i/o port address above is a part of the PCI i/o
region, the MPU401 i/o port might have been already allocated
- (reserved) by the driver itself. In such a case, pass non-zero
- to the 5th argument
- (integrated). Otherwise, pass 0 to it,
+ (reserved) by the driver itself. In such a case, pass a bit flag
+ MPU401_INFO_INTEGRATED,
and
the mpu401-uart layer will allocate the i/o ports by itself.
+
+ When the controller supports only the input or output MIDI stream,
+ pass MPU401_INFO_INPUT or
+ MPU401_INFO_OUTPUT bitflag, respectively.
+ Then the rawmidi instance is created as a single stream.
+
+
+
+ MPU401_INFO_MMIO bitflag is used to change
+ the access method to MMIO (via readb and writeb) instead of
+ iob and outb. In this case, you have to pass the iomapped address
+ to snd_mpu401_uart_new().
+
+
+
+ When MPU401_INFO_TX_IRQ is set, the output
+ stream isn't checked in the default interrupt handler. The driver
+ needs to call snd_mpu401_uart_interrupt_tx()
+ by itself to start processing the output stream in irq handler.
+
+
Usually, the port address corresponds to the command port and
port + 1 corresponds to the data port. If not, you may change
@@ -5333,7 +5353,7 @@ struct _snd_pcm_runtime {
@@ -5394,29 +5414,12 @@ struct _snd_pcm_runtime {
c.text.write_size = 256;
entry->c.text.write = my_proc_write;
]]>
-
- The buffer size for read is set to 1024 implicitly by
- snd_info_set_text_ops(). It should suffice
- in most cases (the size will be aligned to
- PAGE_SIZE anyway), but if you need to handle
- very large text files, you can set it explicitly, too.
-
-
-
-c.text.read_size = 65536;
-]]>
-
-
-
-
For the write callback, you can use
snd_info_get_line() to get a text line, and
@@ -5483,7 +5486,7 @@ struct _snd_pcm_runtime {
Power Management
- If the chip is supposed to work with with suspend/resume
+ If the chip is supposed to work with suspend/resume
functions, you need to add the power-management codes to the
driver. The additional codes for the power-management should be
ifdef'ed with
@@ -5562,7 +5565,7 @@ struct _snd_pcm_runtime {
power status.
Call snd_pcm_suspend_all() to suspend the running PCM streams.
If AC97 codecs are used, call
- snd_ac97_resume() for each codec.
+ snd_ac97_suspend() for each codec.
Save the register values if necessary.
Stop the hardware if necessary.
Disable the PCI device by calling