diff options
author | Michael Opdenacker <michael@free-electrons.com> | 2007-10-24 04:59:44 -0400 |
---|---|---|
committer | Jaroslav Kysela <perex@perex.cz> | 2008-01-31 11:29:10 -0500 |
commit | 3f03f7c586471f376eab497ab33394ab086f5301 (patch) | |
tree | 0c006a3c778c9c4b2dc0af251e73f15edf5b819f /Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl | |
parent | f31639b8c5916f58441b529c9c364715921b29af (diff) |
[ALSA] writing-an-alsa-driver.tmpl: English style improvements
This patch brings some English style improvements throughout the
document, as well as 1 or 2 extra technical details.
Signed-off-by: Michael Opdenacker <michael@free-electrons.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Diffstat (limited to 'Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl')
-rw-r--r-- | Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl | 920 |
1 files changed, 458 insertions, 462 deletions
diff --git a/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl index 2c3fc3cb3b6b..48e4053eda12 100644 --- a/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl +++ b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl | |||
@@ -18,7 +18,7 @@ | |||
18 | </affiliation> | 18 | </affiliation> |
19 | </author> | 19 | </author> |
20 | 20 | ||
21 | <date>September 10, 2007</date> | 21 | <date>Oct 15, 2007</date> |
22 | <edition>0.3.7</edition> | 22 | <edition>0.3.7</edition> |
23 | 23 | ||
24 | <abstract> | 24 | <abstract> |
@@ -67,7 +67,7 @@ | |||
67 | This document describes how to write an | 67 | This document describes how to write an |
68 | <ulink url="http://www.alsa-project.org/"><citetitle> | 68 | <ulink url="http://www.alsa-project.org/"><citetitle> |
69 | ALSA (Advanced Linux Sound Architecture)</citetitle></ulink> | 69 | ALSA (Advanced Linux Sound Architecture)</citetitle></ulink> |
70 | driver. The document focuses mainly on the PCI soundcard. | 70 | driver. The document focuses mainly on PCI soundcards. |
71 | In the case of other device types, the API might | 71 | In the case of other device types, the API might |
72 | be different, too. However, at least the ALSA kernel API is | 72 | be different, too. However, at least the ALSA kernel API is |
73 | consistent, and therefore it would be still a bit help for | 73 | consistent, and therefore it would be still a bit help for |
@@ -75,23 +75,23 @@ | |||
75 | </para> | 75 | </para> |
76 | 76 | ||
77 | <para> | 77 | <para> |
78 | The target of this document is ones who already have enough | 78 | This document targets people who already have enough |
79 | skill of C language and have the basic knowledge of linux | 79 | C language skills and have basic linux kernel programming |
80 | kernel programming. This document doesn't explain the general | 80 | knowledge. This document doesn't explain the general |
81 | topics of linux kernel codes and doesn't cover the detail of | 81 | topic of linux kernel coding and doesn't cover low-level |
82 | implementation of each low-level driver. It describes only how is | 82 | driver implementation details. It only describes |
83 | the standard way to write a PCI sound driver on ALSA. | 83 | the standard way to write a PCI sound driver on ALSA. |
84 | </para> | 84 | </para> |
85 | 85 | ||
86 | <para> | 86 | <para> |
87 | If you are already familiar with the older ALSA ver.0.5.x, you | 87 | If you are already familiar with the older ALSA ver.0.5.x API, you |
88 | can check the drivers such as <filename>es1938.c</filename> or | 88 | can check the drivers such as <filename>sound/pci/es1938.c</filename> or |
89 | <filename>maestro3.c</filename> which have also almost the same | 89 | <filename>sound/pci/maestro3.c</filename> which have also almost the same |
90 | code-base in the ALSA 0.5.x tree, so you can compare the differences. | 90 | code-base in the ALSA 0.5.x tree, so you can compare the differences. |
91 | </para> | 91 | </para> |
92 | 92 | ||
93 | <para> | 93 | <para> |
94 | This document is still a draft version. Any feedbacks and | 94 | This document is still a draft version. Any feedback and |
95 | corrections, please!! | 95 | corrections, please!! |
96 | </para> | 96 | </para> |
97 | </preface> | 97 | </preface> |
@@ -106,7 +106,7 @@ | |||
106 | <section id="file-tree-general"> | 106 | <section id="file-tree-general"> |
107 | <title>General</title> | 107 | <title>General</title> |
108 | <para> | 108 | <para> |
109 | The ALSA drivers are provided in the two ways. | 109 | The ALSA drivers are provided in two ways. |
110 | </para> | 110 | </para> |
111 | 111 | ||
112 | <para> | 112 | <para> |
@@ -114,15 +114,14 @@ | |||
114 | ALSA's ftp site, and another is the 2.6 (or later) Linux kernel | 114 | ALSA's ftp site, and another is the 2.6 (or later) Linux kernel |
115 | tree. To synchronize both, the ALSA driver tree is split into | 115 | tree. To synchronize both, the ALSA driver tree is split into |
116 | two different trees: alsa-kernel and alsa-driver. The former | 116 | two different trees: alsa-kernel and alsa-driver. The former |
117 | contains purely the source codes for the Linux 2.6 (or later) | 117 | contains purely the source code for the Linux 2.6 (or later) |
118 | tree. This tree is designed only for compilation on 2.6 or | 118 | tree. This tree is designed only for compilation on 2.6 or |
119 | later environment. The latter, alsa-driver, contains many subtle | 119 | later environment. The latter, alsa-driver, contains many subtle |
120 | files for compiling the ALSA driver on the outside of Linux | 120 | files for compiling ALSA drivers outside of the Linux kernel tree, |
121 | kernel like configure script, the wrapper functions for older, | 121 | wrapper functions for older 2.2 and 2.4 kernels, to adapt the latest kernel API, |
122 | 2.2 and 2.4 kernels, to adapt the latest kernel API, | ||
123 | and additional drivers which are still in development or in | 122 | and additional drivers which are still in development or in |
124 | tests. The drivers in alsa-driver tree will be moved to | 123 | tests. The drivers in alsa-driver tree will be moved to |
125 | alsa-kernel (eventually 2.6 kernel tree) once when they are | 124 | alsa-kernel (and eventually to the 2.6 kernel tree) when they are |
126 | finished and confirmed to work fine. | 125 | finished and confirmed to work fine. |
127 | </para> | 126 | </para> |
128 | 127 | ||
@@ -168,7 +167,7 @@ | |||
168 | <section id="file-tree-core-directory"> | 167 | <section id="file-tree-core-directory"> |
169 | <title>core directory</title> | 168 | <title>core directory</title> |
170 | <para> | 169 | <para> |
171 | This directory contains the middle layer, that is, the heart | 170 | This directory contains the middle layer which is the heart |
172 | of ALSA drivers. In this directory, the native ALSA modules are | 171 | of ALSA drivers. In this directory, the native ALSA modules are |
173 | stored. The sub-directories contain different modules and are | 172 | stored. The sub-directories contain different modules and are |
174 | dependent upon the kernel config. | 173 | dependent upon the kernel config. |
@@ -181,7 +180,7 @@ | |||
181 | The codes for PCM and mixer OSS emulation modules are stored | 180 | The codes for PCM and mixer OSS emulation modules are stored |
182 | in this directory. The rawmidi OSS emulation is included in | 181 | in this directory. The rawmidi OSS emulation is included in |
183 | the ALSA rawmidi code since it's quite small. The sequencer | 182 | the ALSA rawmidi code since it's quite small. The sequencer |
184 | code is stored in core/seq/oss directory (see | 183 | code is stored in <filename>core/seq/oss</filename> directory (see |
185 | <link linkend="file-tree-core-directory-seq-oss"><citetitle> | 184 | <link linkend="file-tree-core-directory-seq-oss"><citetitle> |
186 | below</citetitle></link>). | 185 | below</citetitle></link>). |
187 | </para> | 186 | </para> |
@@ -200,7 +199,7 @@ | |||
200 | <section id="file-tree-core-directory-seq"> | 199 | <section id="file-tree-core-directory-seq"> |
201 | <title>core/seq</title> | 200 | <title>core/seq</title> |
202 | <para> | 201 | <para> |
203 | This and its sub-directories are for the ALSA | 202 | This directory and its sub-directories are for the ALSA |
204 | sequencer. This directory contains the sequencer core and | 203 | sequencer. This directory contains the sequencer core and |
205 | primary sequencer modules such like snd-seq-midi, | 204 | primary sequencer modules such like snd-seq-midi, |
206 | snd-seq-virmidi, etc. They are compiled only when | 205 | snd-seq-virmidi, etc. They are compiled only when |
@@ -229,22 +228,22 @@ | |||
229 | <title>include directory</title> | 228 | <title>include directory</title> |
230 | <para> | 229 | <para> |
231 | This is the place for the public header files of ALSA drivers, | 230 | This is the place for the public header files of ALSA drivers, |
232 | which are to be exported to the user-space, or included by | 231 | which are to be exported to user-space, or included by |
233 | several files at different directories. Basically, the private | 232 | several files at different directories. Basically, the private |
234 | header files should not be placed in this directory, but you may | 233 | header files should not be placed in this directory, but you may |
235 | still find files there, due to historical reason :) | 234 | still find files there, due to historical reasons :) |
236 | </para> | 235 | </para> |
237 | </section> | 236 | </section> |
238 | 237 | ||
239 | <section id="file-tree-drivers-directory"> | 238 | <section id="file-tree-drivers-directory"> |
240 | <title>drivers directory</title> | 239 | <title>drivers directory</title> |
241 | <para> | 240 | <para> |
242 | This directory contains the codes shared among different drivers | 241 | This directory contains code shared among different drivers |
243 | on the different architectures. They are hence supposed not to be | 242 | on different architectures. They are hence supposed not to be |
244 | architecture-specific. | 243 | architecture-specific. |
245 | For example, the dummy pcm driver and the serial MIDI | 244 | For example, the dummy pcm driver and the serial MIDI |
246 | driver are found in this directory. In the sub-directories, | 245 | driver are found in this directory. In the sub-directories, |
247 | there are the codes for components which are independent from | 246 | there is code for components which are independent from |
248 | bus and cpu architectures. | 247 | bus and cpu architectures. |
249 | </para> | 248 | </para> |
250 | 249 | ||
@@ -271,7 +270,7 @@ | |||
271 | 270 | ||
272 | <para> | 271 | <para> |
273 | Although there is a standard i2c layer on Linux, ALSA has its | 272 | Although there is a standard i2c layer on Linux, ALSA has its |
274 | own i2c codes for some cards, because the soundcard needs only a | 273 | own i2c code for some cards, because the soundcard needs only a |
275 | simple operation and the standard i2c API is too complicated for | 274 | simple operation and the standard i2c API is too complicated for |
276 | such a purpose. | 275 | such a purpose. |
277 | </para> | 276 | </para> |
@@ -292,28 +291,28 @@ | |||
292 | 291 | ||
293 | <para> | 292 | <para> |
294 | So far, there is only Emu8000/Emu10k1 synth driver under | 293 | So far, there is only Emu8000/Emu10k1 synth driver under |
295 | synth/emux sub-directory. | 294 | the <filename>synth/emux</filename> sub-directory. |
296 | </para> | 295 | </para> |
297 | </section> | 296 | </section> |
298 | 297 | ||
299 | <section id="file-tree-pci-directory"> | 298 | <section id="file-tree-pci-directory"> |
300 | <title>pci directory</title> | 299 | <title>pci directory</title> |
301 | <para> | 300 | <para> |
302 | This and its sub-directories hold the top-level card modules | 301 | This directory and its sub-directories hold the top-level card modules |
303 | for PCI soundcards and the codes specific to the PCI BUS. | 302 | for PCI soundcards and the code specific to the PCI BUS. |
304 | </para> | 303 | </para> |
305 | 304 | ||
306 | <para> | 305 | <para> |
307 | The drivers compiled from a single file is stored directly on | 306 | The drivers compiled from a single file are stored directly |
308 | pci directory, while the drivers with several source files are | 307 | in the pci directory, while the drivers with several source files are |
309 | stored on its own sub-directory (e.g. emu10k1, ice1712). | 308 | stored on their own sub-directory (e.g. emu10k1, ice1712). |
310 | </para> | 309 | </para> |
311 | </section> | 310 | </section> |
312 | 311 | ||
313 | <section id="file-tree-isa-directory"> | 312 | <section id="file-tree-isa-directory"> |
314 | <title>isa directory</title> | 313 | <title>isa directory</title> |
315 | <para> | 314 | <para> |
316 | This and its sub-directories hold the top-level card modules | 315 | This directory and its sub-directories hold the top-level card modules |
317 | for ISA soundcards. | 316 | for ISA soundcards. |
318 | </para> | 317 | </para> |
319 | </section> | 318 | </section> |
@@ -321,16 +320,16 @@ | |||
321 | <section id="file-tree-arm-ppc-sparc-directories"> | 320 | <section id="file-tree-arm-ppc-sparc-directories"> |
322 | <title>arm, ppc, and sparc directories</title> | 321 | <title>arm, ppc, and sparc directories</title> |
323 | <para> | 322 | <para> |
324 | These are for the top-level card modules which are | 323 | They are used for top-level card modules which are |
325 | specific to each given architecture. | 324 | specific to one of these architectures. |
326 | </para> | 325 | </para> |
327 | </section> | 326 | </section> |
328 | 327 | ||
329 | <section id="file-tree-usb-directory"> | 328 | <section id="file-tree-usb-directory"> |
330 | <title>usb directory</title> | 329 | <title>usb directory</title> |
331 | <para> | 330 | <para> |
332 | This contains the USB-audio driver. On the latest version, the | 331 | This directory contains the USB-audio driver. In the latest version, the |
333 | USB MIDI driver is integrated together with usb-audio driver. | 332 | USB MIDI driver is integrated in the usb-audio driver. |
334 | </para> | 333 | </para> |
335 | </section> | 334 | </section> |
336 | 335 | ||
@@ -338,16 +337,17 @@ | |||
338 | <title>pcmcia directory</title> | 337 | <title>pcmcia directory</title> |
339 | <para> | 338 | <para> |
340 | The PCMCIA, especially PCCard drivers will go here. CardBus | 339 | The PCMCIA, especially PCCard drivers will go here. CardBus |
341 | drivers will be on pci directory, because its API is identical | 340 | drivers will be in the pci directory, because their API is identical |
342 | with the standard PCI cards. | 341 | to that of standard PCI cards. |
343 | </para> | 342 | </para> |
344 | </section> | 343 | </section> |
345 | 344 | ||
346 | <section id="file-tree-oss-directory"> | 345 | <section id="file-tree-oss-directory"> |
347 | <title>oss directory</title> | 346 | <title>oss directory</title> |
348 | <para> | 347 | <para> |
349 | The OSS/Lite source files are stored here on Linux 2.6 (or | 348 | The OSS/Lite source files are stored here in Linux 2.6 (or |
350 | later) tree. (In the ALSA driver tarball, it's empty, of course :) | 349 | later) tree. In the ALSA driver tarball, this directory is empty, |
350 | of course :) | ||
351 | </para> | 351 | </para> |
352 | </section> | 352 | </section> |
353 | </chapter> | 353 | </chapter> |
@@ -362,7 +362,7 @@ | |||
362 | <section id="basic-flow-outline"> | 362 | <section id="basic-flow-outline"> |
363 | <title>Outline</title> | 363 | <title>Outline</title> |
364 | <para> | 364 | <para> |
365 | The minimum flow of PCI soundcard is like the following: | 365 | The minimum flow for PCI soundcards is as follows: |
366 | 366 | ||
367 | <itemizedlist> | 367 | <itemizedlist> |
368 | <listitem><para>define the PCI ID table (see the section | 368 | <listitem><para>define the PCI ID table (see the section |
@@ -370,9 +370,13 @@ | |||
370 | </citetitle></link>).</para></listitem> | 370 | </citetitle></link>).</para></listitem> |
371 | <listitem><para>create <function>probe()</function> callback.</para></listitem> | 371 | <listitem><para>create <function>probe()</function> callback.</para></listitem> |
372 | <listitem><para>create <function>remove()</function> callback.</para></listitem> | 372 | <listitem><para>create <function>remove()</function> callback.</para></listitem> |
373 | <listitem><para>create pci_driver table which contains the three pointers above.</para></listitem> | 373 | <listitem><para>create a <structname>pci_driver</structname> structure |
374 | <listitem><para>create <function>init()</function> function just calling <function>pci_register_driver()</function> to register the pci_driver table defined above.</para></listitem> | 374 | containing the three pointers above.</para></listitem> |
375 | <listitem><para>create <function>exit()</function> function to call <function>pci_unregister_driver()</function> function.</para></listitem> | 375 | <listitem><para>create an <function>init()</function> function just calling |
376 | the <function>pci_register_driver()</function> to register the pci_driver table | ||
377 | defined above.</para></listitem> | ||
378 | <listitem><para>create an <function>exit()</function> function to call | ||
379 | the <function>pci_unregister_driver()</function> function.</para></listitem> | ||
376 | </itemizedlist> | 380 | </itemizedlist> |
377 | </para> | 381 | </para> |
378 | </section> | 382 | </section> |
@@ -382,12 +386,12 @@ | |||
382 | <para> | 386 | <para> |
383 | The code example is shown below. Some parts are kept | 387 | The code example is shown below. Some parts are kept |
384 | unimplemented at this moment but will be filled in the | 388 | unimplemented at this moment but will be filled in the |
385 | succeeding sections. The numbers in comment lines of | 389 | next sections. The numbers in the comment lines of the |
386 | <function>snd_mychip_probe()</function> function are the | 390 | <function>snd_mychip_probe()</function> function |
387 | markers. | 391 | refer to details explained in the following section. |
388 | 392 | ||
389 | <example> | 393 | <example> |
390 | <title>Basic Flow for PCI Drivers Example</title> | 394 | <title>Basic Flow for PCI Drivers - Example</title> |
391 | <programlisting> | 395 | <programlisting> |
392 | <![CDATA[ | 396 | <![CDATA[ |
393 | #include <sound/driver.h> | 397 | #include <sound/driver.h> |
@@ -398,6 +402,7 @@ | |||
398 | #include <sound/initval.h> | 402 | #include <sound/initval.h> |
399 | 403 | ||
400 | /* module parameters (see "Module Parameters") */ | 404 | /* module parameters (see "Module Parameters") */ |
405 | /* SNDRV_CARDS: maximum number of cards supported by this module */ | ||
401 | static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; | 406 | static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; |
402 | static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; | 407 | static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; |
403 | static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; | 408 | static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; |
@@ -405,13 +410,13 @@ | |||
405 | /* definition of the chip-specific record */ | 410 | /* definition of the chip-specific record */ |
406 | struct mychip { | 411 | struct mychip { |
407 | struct snd_card *card; | 412 | struct snd_card *card; |
408 | /* rest of implementation will be in the section | 413 | /* the rest of the implementation will be in section |
409 | * "PCI Resource Managements" | 414 | * "PCI Resource Management" |
410 | */ | 415 | */ |
411 | }; | 416 | }; |
412 | 417 | ||
413 | /* chip-specific destructor | 418 | /* chip-specific destructor |
414 | * (see "PCI Resource Managements") | 419 | * (see "PCI Resource Management") |
415 | */ | 420 | */ |
416 | static int snd_mychip_free(struct mychip *chip) | 421 | static int snd_mychip_free(struct mychip *chip) |
417 | { | 422 | { |
@@ -442,7 +447,7 @@ | |||
442 | *rchip = NULL; | 447 | *rchip = NULL; |
443 | 448 | ||
444 | /* check PCI availability here | 449 | /* check PCI availability here |
445 | * (see "PCI Resource Managements") | 450 | * (see "PCI Resource Management") |
446 | */ | 451 | */ |
447 | .... | 452 | .... |
448 | 453 | ||
@@ -454,7 +459,7 @@ | |||
454 | chip->card = card; | 459 | chip->card = card; |
455 | 460 | ||
456 | /* rest of initialization here; will be implemented | 461 | /* rest of initialization here; will be implemented |
457 | * later, see "PCI Resource Managements" | 462 | * later, see "PCI Resource Management" |
458 | */ | 463 | */ |
459 | .... | 464 | .... |
460 | 465 | ||
@@ -521,7 +526,7 @@ | |||
521 | return 0; | 526 | return 0; |
522 | } | 527 | } |
523 | 528 | ||
524 | /* destructor -- see "Destructor" sub-section */ | 529 | /* destructor -- see the "Destructor" sub-section */ |
525 | static void __devexit snd_mychip_remove(struct pci_dev *pci) | 530 | static void __devexit snd_mychip_remove(struct pci_dev *pci) |
526 | { | 531 | { |
527 | snd_card_free(pci_get_drvdata(pci)); | 532 | snd_card_free(pci_get_drvdata(pci)); |
@@ -536,16 +541,16 @@ | |||
536 | <section id="basic-flow-constructor"> | 541 | <section id="basic-flow-constructor"> |
537 | <title>Constructor</title> | 542 | <title>Constructor</title> |
538 | <para> | 543 | <para> |
539 | The real constructor of PCI drivers is probe callback. The | 544 | The real constructor of PCI drivers is the <function>probe</function> callback. |
540 | probe callback and other component-constructors which are called | 545 | The <function>probe</function> callback and other component-constructors which are called |
541 | from probe callback should be defined with | 546 | from the <function>probe</function> callback should be defined with |
542 | <parameter>__devinit</parameter> prefix. You | 547 | the <parameter>__devinit</parameter> prefix. You |
543 | cannot use <parameter>__init</parameter> prefix for them, | 548 | cannot use the <parameter>__init</parameter> prefix for them, |
544 | because any PCI device could be a hotplug device. | 549 | because any PCI device could be a hotplug device. |
545 | </para> | 550 | </para> |
546 | 551 | ||
547 | <para> | 552 | <para> |
548 | In the probe callback, the following scheme is often used. | 553 | In the <function>probe</function> callback, the following scheme is often used. |
549 | </para> | 554 | </para> |
550 | 555 | ||
551 | <section id="basic-flow-constructor-device-index"> | 556 | <section id="basic-flow-constructor-device-index"> |
@@ -570,7 +575,7 @@ | |||
570 | </para> | 575 | </para> |
571 | 576 | ||
572 | <para> | 577 | <para> |
573 | At each time probe callback is called, check the | 578 | Each time the <function>probe</function> callback is called, check the |
574 | availability of the device. If not available, simply increment | 579 | availability of the device. If not available, simply increment |
575 | the device index and returns. dev will be incremented also | 580 | the device index and returns. dev will be incremented also |
576 | later (<link | 581 | later (<link |
@@ -594,7 +599,7 @@ | |||
594 | </para> | 599 | </para> |
595 | 600 | ||
596 | <para> | 601 | <para> |
597 | The detail will be explained in the section | 602 | The details will be explained in the section |
598 | <link linkend="card-management-card-instance"><citetitle> | 603 | <link linkend="card-management-card-instance"><citetitle> |
599 | Management of Cards and Components</citetitle></link>. | 604 | Management of Cards and Components</citetitle></link>. |
600 | </para> | 605 | </para> |
@@ -619,9 +624,9 @@ | |||
619 | </programlisting> | 624 | </programlisting> |
620 | </informalexample> | 625 | </informalexample> |
621 | 626 | ||
622 | The detail will be explained in the section <link | 627 | The details will be explained in the section <link |
623 | linkend="pci-resource"><citetitle>PCI Resource | 628 | linkend="pci-resource"><citetitle>PCI Resource |
624 | Managements</citetitle></link>. | 629 | Management</citetitle></link>. |
625 | </para> | 630 | </para> |
626 | </section> | 631 | </section> |
627 | 632 | ||
@@ -640,7 +645,7 @@ | |||
640 | </informalexample> | 645 | </informalexample> |
641 | 646 | ||
642 | The driver field holds the minimal ID string of the | 647 | The driver field holds the minimal ID string of the |
643 | chip. This is referred by alsa-lib's configurator, so keep it | 648 | chip. This is used by alsa-lib's configurator, so keep it |
644 | simple but unique. | 649 | simple but unique. |
645 | Even the same driver can have different driver IDs to | 650 | Even the same driver can have different driver IDs to |
646 | distinguish the functionality of each chip type. | 651 | distinguish the functionality of each chip type. |
@@ -648,7 +653,7 @@ | |||
648 | 653 | ||
649 | <para> | 654 | <para> |
650 | The shortname field is a string shown as more verbose | 655 | The shortname field is a string shown as more verbose |
651 | name. The longname field contains the information which is | 656 | name. The longname field contains the information |
652 | shown in <filename>/proc/asound/cards</filename>. | 657 | shown in <filename>/proc/asound/cards</filename>. |
653 | </para> | 658 | </para> |
654 | </section> | 659 | </section> |
@@ -703,7 +708,7 @@ | |||
703 | </informalexample> | 708 | </informalexample> |
704 | 709 | ||
705 | In the above, the card record is stored. This pointer is | 710 | In the above, the card record is stored. This pointer is |
706 | referred in the remove callback and power-management | 711 | used in the remove callback and power-management |
707 | callbacks, too. | 712 | callbacks, too. |
708 | </para> | 713 | </para> |
709 | </section> | 714 | </section> |
@@ -757,22 +762,22 @@ | |||
757 | </informalexample> | 762 | </informalexample> |
758 | 763 | ||
759 | where the last one is necessary only when module options are | 764 | where the last one is necessary only when module options are |
760 | defined in the source file. If the codes are split to several | 765 | defined in the source file. If the code is split into several |
761 | files, the file without module options don't need them. | 766 | files, the files without module options don't need them. |
762 | </para> | 767 | </para> |
763 | 768 | ||
764 | <para> | 769 | <para> |
765 | In addition to them, you'll need | 770 | In addition to these headers, you'll need |
766 | <filename><linux/interrupt.h></filename> for the interrupt | 771 | <filename><linux/interrupt.h></filename> for interrupt |
767 | handling, and <filename><asm/io.h></filename> for the i/o | 772 | handling, and <filename><asm/io.h></filename> for I/O |
768 | access. If you use <function>mdelay()</function> or | 773 | access. If you use the <function>mdelay()</function> or |
769 | <function>udelay()</function> functions, you'll need to include | 774 | <function>udelay()</function> functions, you'll need to include |
770 | <filename><linux/delay.h></filename>, too. | 775 | <filename><linux/delay.h></filename> too. |
771 | </para> | 776 | </para> |
772 | 777 | ||
773 | <para> | 778 | <para> |
774 | The ALSA interfaces like PCM or control API are defined in other | 779 | The ALSA interfaces like the PCM and control APIs are defined in other |
775 | header files as <filename><sound/xxx.h></filename>. | 780 | <filename><sound/xxx.h></filename> header files. |
776 | They have to be included after | 781 | They have to be included after |
777 | <filename><sound/core.h></filename>. | 782 | <filename><sound/core.h></filename>. |
778 | </para> | 783 | </para> |
@@ -795,12 +800,12 @@ | |||
795 | 800 | ||
796 | <para> | 801 | <para> |
797 | A card record is the headquarters of the soundcard. It manages | 802 | A card record is the headquarters of the soundcard. It manages |
798 | the list of whole devices (components) on the soundcard, such as | 803 | the whole list of devices (components) on the soundcard, such as |
799 | PCM, mixers, MIDI, synthesizer, and so on. Also, the card | 804 | PCM, mixers, MIDI, synthesizer, and so on. Also, the card |
800 | record holds the ID and the name strings of the card, manages | 805 | record holds the ID and the name strings of the card, manages |
801 | the root of proc files, and controls the power-management states | 806 | the root of proc files, and controls the power-management states |
802 | and hotplug disconnections. The component list on the card | 807 | and hotplug disconnections. The component list on the card |
803 | record is used to manage the proper releases of resources at | 808 | record is used to manage the correct release of resources at |
804 | destruction. | 809 | destruction. |
805 | </para> | 810 | </para> |
806 | 811 | ||
@@ -824,9 +829,8 @@ | |||
824 | <constant>THIS_MODULE</constant>), | 829 | <constant>THIS_MODULE</constant>), |
825 | and the size of extra-data space. The last argument is used to | 830 | and the size of extra-data space. The last argument is used to |
826 | allocate card->private_data for the | 831 | allocate card->private_data for the |
827 | chip-specific data. Note that this data | 832 | chip-specific data. Note that these data |
828 | <emphasis>is</emphasis> allocated by | 833 | are allocated by <function>snd_card_new()</function>. |
829 | <function>snd_card_new()</function>. | ||
830 | </para> | 834 | </para> |
831 | </section> | 835 | </section> |
832 | 836 | ||
@@ -834,10 +838,10 @@ | |||
834 | <title>Components</title> | 838 | <title>Components</title> |
835 | <para> | 839 | <para> |
836 | After the card is created, you can attach the components | 840 | After the card is created, you can attach the components |
837 | (devices) to the card instance. On ALSA driver, a component is | 841 | (devices) to the card instance. In an ALSA driver, a component is |
838 | represented as a struct <structname>snd_device</structname> object. | 842 | represented as a struct <structname>snd_device</structname> object. |
839 | A component can be a PCM instance, a control interface, a raw | 843 | A component can be a PCM instance, a control interface, a raw |
840 | MIDI interface, etc. Each of such instances has one component | 844 | MIDI interface, etc. Each such instance has one component |
841 | entry. | 845 | entry. |
842 | </para> | 846 | </para> |
843 | 847 | ||
@@ -859,7 +863,7 @@ | |||
859 | (<constant>SNDRV_DEV_XXX</constant>), the data pointer, and the | 863 | (<constant>SNDRV_DEV_XXX</constant>), the data pointer, and the |
860 | callback pointers (<parameter>&ops</parameter>). The | 864 | callback pointers (<parameter>&ops</parameter>). The |
861 | device-level defines the type of components and the order of | 865 | device-level defines the type of components and the order of |
862 | registration and de-registration. For most of components, the | 866 | registration and de-registration. For most components, the |
863 | device-level is already defined. For a user-defined component, | 867 | device-level is already defined. For a user-defined component, |
864 | you can use <constant>SNDRV_DEV_LOWLEVEL</constant>. | 868 | you can use <constant>SNDRV_DEV_LOWLEVEL</constant>. |
865 | </para> | 869 | </para> |
@@ -867,13 +871,13 @@ | |||
867 | <para> | 871 | <para> |
868 | This function itself doesn't allocate the data space. The data | 872 | This function itself doesn't allocate the data space. The data |
869 | must be allocated manually beforehand, and its pointer is passed | 873 | must be allocated manually beforehand, and its pointer is passed |
870 | as the argument. This pointer is used as the identifier | 874 | as the argument. This pointer is used as the |
871 | (<parameter>chip</parameter> in the above example) for the | 875 | (<parameter>chip</parameter> identifier in the above example) |
872 | instance. | 876 | for the instance. |
873 | </para> | 877 | </para> |
874 | 878 | ||
875 | <para> | 879 | <para> |
876 | Each ALSA pre-defined component such as ac97 or pcm calls | 880 | Each pre-defined ALSA component such as ac97 and pcm calls |
877 | <function>snd_device_new()</function> inside its | 881 | <function>snd_device_new()</function> inside its |
878 | constructor. The destructor for each component is defined in the | 882 | constructor. The destructor for each component is defined in the |
879 | callback pointers. Hence, you don't need to take care of | 883 | callback pointers. Hence, you don't need to take care of |
@@ -881,19 +885,19 @@ | |||
881 | </para> | 885 | </para> |
882 | 886 | ||
883 | <para> | 887 | <para> |
884 | If you would like to create your own component, you need to | 888 | If you wish to create your own component, you need to |
885 | set the destructor function to dev_free callback in | 889 | set the destructor function to the dev_free callback in |
886 | <parameter>ops</parameter>, so that it can be released | 890 | the <parameter>ops</parameter>, so that it can be released |
887 | automatically via <function>snd_card_free()</function>. The | 891 | automatically via <function>snd_card_free()</function>. |
888 | example will be shown later as an implementation of a | 892 | The next example will show an implementation of chip-specific |
889 | chip-specific data. | 893 | data. |
890 | </para> | 894 | </para> |
891 | </section> | 895 | </section> |
892 | 896 | ||
893 | <section id="card-management-chip-specific"> | 897 | <section id="card-management-chip-specific"> |
894 | <title>Chip-Specific Data</title> | 898 | <title>Chip-Specific Data</title> |
895 | <para> | 899 | <para> |
896 | The chip-specific information, e.g. the i/o port address, its | 900 | Chip-specific information, e.g. the I/O port address, its |
897 | resource pointer, or the irq number, is stored in the | 901 | resource pointer, or the irq number, is stored in the |
898 | chip-specific record. | 902 | chip-specific record. |
899 | 903 | ||
@@ -909,13 +913,14 @@ | |||
909 | </para> | 913 | </para> |
910 | 914 | ||
911 | <para> | 915 | <para> |
912 | In general, there are two ways to allocate the chip record. | 916 | In general, there are two ways of allocating the chip record. |
913 | </para> | 917 | </para> |
914 | 918 | ||
915 | <section id="card-management-chip-specific-snd-card-new"> | 919 | <section id="card-management-chip-specific-snd-card-new"> |
916 | <title>1. Allocating via <function>snd_card_new()</function>.</title> | 920 | <title>1. Allocating via <function>snd_card_new()</function>.</title> |
917 | <para> | 921 | <para> |
918 | As mentioned above, you can pass the extra-data-length to the 4th argument of <function>snd_card_new()</function>, i.e. | 922 | As mentioned above, you can pass the extra-data-length |
923 | to the 4th argument of <function>snd_card_new()</function>, i.e. | ||
919 | 924 | ||
920 | <informalexample> | 925 | <informalexample> |
921 | <programlisting> | 926 | <programlisting> |
@@ -925,7 +930,7 @@ | |||
925 | </programlisting> | 930 | </programlisting> |
926 | </informalexample> | 931 | </informalexample> |
927 | 932 | ||
928 | whether struct <structname>mychip</structname> is the type of the chip record. | 933 | struct <structname>mychip</structname> is the type of the chip record. |
929 | </para> | 934 | </para> |
930 | 935 | ||
931 | <para> | 936 | <para> |
@@ -1037,8 +1042,8 @@ | |||
1037 | <title>Registration and Release</title> | 1042 | <title>Registration and Release</title> |
1038 | <para> | 1043 | <para> |
1039 | After all components are assigned, register the card instance | 1044 | After all components are assigned, register the card instance |
1040 | by calling <function>snd_card_register()</function>. The access | 1045 | by calling <function>snd_card_register()</function>. Access |
1041 | to the device files are enabled at this point. That is, before | 1046 | to the device files is enabled at this point. That is, before |
1042 | <function>snd_card_register()</function> is called, the | 1047 | <function>snd_card_register()</function> is called, the |
1043 | components are safely inaccessible from external side. If this | 1048 | components are safely inaccessible from external side. If this |
1044 | call fails, exit the probe function after releasing the card via | 1049 | call fails, exit the probe function after releasing the card via |
@@ -1047,7 +1052,7 @@ | |||
1047 | 1052 | ||
1048 | <para> | 1053 | <para> |
1049 | For releasing the card instance, you can call simply | 1054 | For releasing the card instance, you can call simply |
1050 | <function>snd_card_free()</function>. As already mentioned, all | 1055 | <function>snd_card_free()</function>. As mentioned earlier, all |
1051 | components are released automatically by this call. | 1056 | components are released automatically by this call. |
1052 | </para> | 1057 | </para> |
1053 | 1058 | ||
@@ -1055,7 +1060,7 @@ | |||
1055 | As further notes, the destructors (both | 1060 | As further notes, the destructors (both |
1056 | <function>snd_mychip_dev_free</function> and | 1061 | <function>snd_mychip_dev_free</function> and |
1057 | <function>snd_mychip_free</function>) cannot be defined with | 1062 | <function>snd_mychip_free</function>) cannot be defined with |
1058 | <parameter>__devexit</parameter> prefix, because they may be | 1063 | the <parameter>__devexit</parameter> prefix, because they may be |
1059 | called from the constructor, too, at the false path. | 1064 | called from the constructor, too, at the false path. |
1060 | </para> | 1065 | </para> |
1061 | 1066 | ||
@@ -1071,20 +1076,20 @@ | |||
1071 | 1076 | ||
1072 | 1077 | ||
1073 | <!-- ****************************************************** --> | 1078 | <!-- ****************************************************** --> |
1074 | <!-- PCI Resource Managements --> | 1079 | <!-- PCI Resource Management --> |
1075 | <!-- ****************************************************** --> | 1080 | <!-- ****************************************************** --> |
1076 | <chapter id="pci-resource"> | 1081 | <chapter id="pci-resource"> |
1077 | <title>PCI Resource Managements</title> | 1082 | <title>PCI Resource Management</title> |
1078 | 1083 | ||
1079 | <section id="pci-resource-example"> | 1084 | <section id="pci-resource-example"> |
1080 | <title>Full Code Example</title> | 1085 | <title>Full Code Example</title> |
1081 | <para> | 1086 | <para> |
1082 | In this section, we'll finish the chip-specific constructor, | 1087 | In this section, we'll complete the chip-specific constructor, |
1083 | destructor and PCI entries. The example code is shown first, | 1088 | destructor and PCI entries. Example code is shown first, |
1084 | below. | 1089 | below. |
1085 | 1090 | ||
1086 | <example> | 1091 | <example> |
1087 | <title>PCI Resource Managements Example</title> | 1092 | <title>PCI Resource Management Example</title> |
1088 | <programlisting> | 1093 | <programlisting> |
1089 | <![CDATA[ | 1094 | <![CDATA[ |
1090 | struct mychip { | 1095 | struct mychip { |
@@ -1103,7 +1108,7 @@ | |||
1103 | /* release the irq */ | 1108 | /* release the irq */ |
1104 | if (chip->irq >= 0) | 1109 | if (chip->irq >= 0) |
1105 | free_irq(chip->irq, chip); | 1110 | free_irq(chip->irq, chip); |
1106 | /* release the i/o ports & memory */ | 1111 | /* release the I/O ports & memory */ |
1107 | pci_release_regions(chip->pci); | 1112 | pci_release_regions(chip->pci); |
1108 | /* disable the PCI entry */ | 1113 | /* disable the PCI entry */ |
1109 | pci_disable_device(chip->pci); | 1114 | pci_disable_device(chip->pci); |
@@ -1196,13 +1201,13 @@ | |||
1196 | .remove = __devexit_p(snd_mychip_remove), | 1201 | .remove = __devexit_p(snd_mychip_remove), |
1197 | }; | 1202 | }; |
1198 | 1203 | ||
1199 | /* initialization of the module */ | 1204 | /* module initialization */ |
1200 | static int __init alsa_card_mychip_init(void) | 1205 | static int __init alsa_card_mychip_init(void) |
1201 | { | 1206 | { |
1202 | return pci_register_driver(&driver); | 1207 | return pci_register_driver(&driver); |
1203 | } | 1208 | } |
1204 | 1209 | ||
1205 | /* clean up the module */ | 1210 | /* module clean up */ |
1206 | static void __exit alsa_card_mychip_exit(void) | 1211 | static void __exit alsa_card_mychip_exit(void) |
1207 | { | 1212 | { |
1208 | pci_unregister_driver(&driver); | 1213 | pci_unregister_driver(&driver); |
@@ -1228,10 +1233,10 @@ | |||
1228 | </para> | 1233 | </para> |
1229 | 1234 | ||
1230 | <para> | 1235 | <para> |
1231 | In the case of PCI devices, you have to call at first | 1236 | In the case of PCI devices, you first have to call |
1232 | <function>pci_enable_device()</function> function before | 1237 | the <function>pci_enable_device()</function> function before |
1233 | allocating resources. Also, you need to set the proper PCI DMA | 1238 | allocating resources. Also, you need to set the proper PCI DMA |
1234 | mask to limit the accessed i/o range. In some cases, you might | 1239 | mask to limit the accessed I/O range. In some cases, you might |
1235 | need to call <function>pci_set_master()</function> function, | 1240 | need to call <function>pci_set_master()</function> function, |
1236 | too. | 1241 | too. |
1237 | </para> | 1242 | </para> |
@@ -1261,15 +1266,15 @@ | |||
1261 | <section id="pci-resource-resource-allocation"> | 1266 | <section id="pci-resource-resource-allocation"> |
1262 | <title>Resource Allocation</title> | 1267 | <title>Resource Allocation</title> |
1263 | <para> | 1268 | <para> |
1264 | The allocation of I/O ports and irqs are done via standard kernel | 1269 | The allocation of I/O ports and irqs is done via standard kernel |
1265 | functions. Unlike ALSA ver.0.5.x., there are no helpers for | 1270 | functions. Unlike ALSA ver.0.5.x., there are no helpers for |
1266 | that. And these resources must be released in the destructor | 1271 | that. And these resources must be released in the destructor |
1267 | function (see below). Also, on ALSA 0.9.x, you don't need to | 1272 | function (see below). Also, on ALSA 0.9.x, you don't need to |
1268 | allocate (pseudo-)DMA for PCI like ALSA 0.5.x. | 1273 | allocate (pseudo-)DMA for PCI like in ALSA 0.5.x. |
1269 | </para> | 1274 | </para> |
1270 | 1275 | ||
1271 | <para> | 1276 | <para> |
1272 | Now assume that this PCI device has an I/O port with 8 bytes | 1277 | Now assume that the PCI device has an I/O port with 8 bytes |
1273 | and an interrupt. Then struct <structname>mychip</structname> will have the | 1278 | and an interrupt. Then struct <structname>mychip</structname> will have the |
1274 | following fields: | 1279 | following fields: |
1275 | 1280 | ||
@@ -1288,7 +1293,7 @@ | |||
1288 | </para> | 1293 | </para> |
1289 | 1294 | ||
1290 | <para> | 1295 | <para> |
1291 | For an i/o port (and also a memory region), you need to have | 1296 | For an I/O port (and also a memory region), you need to have |
1292 | the resource pointer for the standard resource management. For | 1297 | the resource pointer for the standard resource management. For |
1293 | an irq, you have to keep only the irq number (integer). But you | 1298 | an irq, you have to keep only the irq number (integer). But you |
1294 | need to initialize this number as -1 before actual allocation, | 1299 | need to initialize this number as -1 before actual allocation, |
@@ -1299,7 +1304,7 @@ | |||
1299 | </para> | 1304 | </para> |
1300 | 1305 | ||
1301 | <para> | 1306 | <para> |
1302 | The allocation of an i/o port is done like this: | 1307 | The allocation of an I/O port is done like this: |
1303 | 1308 | ||
1304 | <informalexample> | 1309 | <informalexample> |
1305 | <programlisting> | 1310 | <programlisting> |
@@ -1318,12 +1323,12 @@ | |||
1318 | 1323 | ||
1319 | <para> | 1324 | <para> |
1320 | <!-- obsolete --> | 1325 | <!-- obsolete --> |
1321 | It will reserve the i/o port region of 8 bytes of the given | 1326 | It will reserve the I/O port region of 8 bytes of the given |
1322 | PCI device. The returned value, chip->res_port, is allocated | 1327 | PCI device. The returned value, chip->res_port, is allocated |
1323 | via <function>kmalloc()</function> by | 1328 | via <function>kmalloc()</function> by |
1324 | <function>request_region()</function>. The pointer must be | 1329 | <function>request_region()</function>. The pointer must be |
1325 | released via <function>kfree()</function>, but there is some | 1330 | released via <function>kfree()</function>, but there is a |
1326 | problem regarding this. This issue will be explained more below. | 1331 | problem with this. This issue will be explained later. |
1327 | </para> | 1332 | </para> |
1328 | 1333 | ||
1329 | <para> | 1334 | <para> |
@@ -1351,8 +1356,8 @@ | |||
1351 | </para> | 1356 | </para> |
1352 | 1357 | ||
1353 | <para> | 1358 | <para> |
1354 | On the PCI bus, the interrupts can be shared. Thus, | 1359 | On the PCI bus, interrupts can be shared. Thus, |
1355 | <constant>IRQF_SHARED</constant> is given as the interrupt flag of | 1360 | <constant>IRQF_SHARED</constant> is used as the interrupt flag of |
1356 | <function>request_irq()</function>. | 1361 | <function>request_irq()</function>. |
1357 | </para> | 1362 | </para> |
1358 | 1363 | ||
@@ -1364,7 +1369,7 @@ | |||
1364 | </para> | 1369 | </para> |
1365 | 1370 | ||
1366 | <para> | 1371 | <para> |
1367 | I won't define the detail of the interrupt handler at this | 1372 | I won't give details about the interrupt handler at this |
1368 | point, but at least its appearance can be explained now. The | 1373 | point, but at least its appearance can be explained now. The |
1369 | interrupt handler looks usually like the following: | 1374 | interrupt handler looks usually like the following: |
1370 | 1375 | ||
@@ -1386,11 +1391,11 @@ | |||
1386 | Now let's write the corresponding destructor for the resources | 1391 | Now let's write the corresponding destructor for the resources |
1387 | above. The role of destructor is simple: disable the hardware | 1392 | above. The role of destructor is simple: disable the hardware |
1388 | (if already activated) and release the resources. So far, we | 1393 | (if already activated) and release the resources. So far, we |
1389 | have no hardware part, so the disabling is not written here. | 1394 | have no hardware part, so the disabling code is not written here. |
1390 | </para> | 1395 | </para> |
1391 | 1396 | ||
1392 | <para> | 1397 | <para> |
1393 | For releasing the resources, <quote>check-and-release</quote> | 1398 | To release the resources, the <quote>check-and-release</quote> |
1394 | method is a safer way. For the interrupt, do like this: | 1399 | method is a safer way. For the interrupt, do like this: |
1395 | 1400 | ||
1396 | <informalexample> | 1401 | <informalexample> |
@@ -1410,7 +1415,7 @@ | |||
1410 | <para> | 1415 | <para> |
1411 | When you requested I/O ports or memory regions via | 1416 | When you requested I/O ports or memory regions via |
1412 | <function>pci_request_region()</function> or | 1417 | <function>pci_request_region()</function> or |
1413 | <function>pci_request_regions()</function> like this example, | 1418 | <function>pci_request_regions()</function> like in this example, |
1414 | release the resource(s) using the corresponding function, | 1419 | release the resource(s) using the corresponding function, |
1415 | <function>pci_release_region()</function> or | 1420 | <function>pci_release_region()</function> or |
1416 | <function>pci_release_regions()</function>. | 1421 | <function>pci_release_regions()</function>. |
@@ -1429,7 +1434,7 @@ | |||
1429 | or <function>request_mem_region</function>, you can release it via | 1434 | or <function>request_mem_region</function>, you can release it via |
1430 | <function>release_resource()</function>. Suppose that you keep | 1435 | <function>release_resource()</function>. Suppose that you keep |
1431 | the resource pointer returned from <function>request_region()</function> | 1436 | the resource pointer returned from <function>request_region()</function> |
1432 | in chip->res_port, the release procedure looks like below: | 1437 | in chip->res_port, the release procedure looks like: |
1433 | 1438 | ||
1434 | <informalexample> | 1439 | <informalexample> |
1435 | <programlisting> | 1440 | <programlisting> |
@@ -1442,7 +1447,7 @@ | |||
1442 | 1447 | ||
1443 | <para> | 1448 | <para> |
1444 | Don't forget to call <function>pci_disable_device()</function> | 1449 | Don't forget to call <function>pci_disable_device()</function> |
1445 | before all finished. | 1450 | before the end. |
1446 | </para> | 1451 | </para> |
1447 | 1452 | ||
1448 | <para> | 1453 | <para> |
@@ -1459,14 +1464,14 @@ | |||
1459 | 1464 | ||
1460 | <para> | 1465 | <para> |
1461 | Again, remember that you cannot | 1466 | Again, remember that you cannot |
1462 | set <parameter>__devexit</parameter> prefix for this destructor. | 1467 | use the <parameter>__devexit</parameter> prefix for this destructor. |
1463 | </para> | 1468 | </para> |
1464 | 1469 | ||
1465 | <para> | 1470 | <para> |
1466 | We didn't implement the hardware-disabling part in the above. | 1471 | We didn't implement the hardware disabling part in the above. |
1467 | If you need to do this, please note that the destructor may be | 1472 | If you need to do this, please note that the destructor may be |
1468 | called even before the initialization of the chip is completed. | 1473 | called even before the initialization of the chip is completed. |
1469 | It would be better to have a flag to skip the hardware-disabling | 1474 | It would be better to have a flag to skip hardware disabling |
1470 | if the hardware was not initialized yet. | 1475 | if the hardware was not initialized yet. |
1471 | </para> | 1476 | </para> |
1472 | 1477 | ||
@@ -1475,14 +1480,14 @@ | |||
1475 | <function>snd_device_new()</function> with | 1480 | <function>snd_device_new()</function> with |
1476 | <constant>SNDRV_DEV_LOWLELVEL</constant> , its destructor is | 1481 | <constant>SNDRV_DEV_LOWLELVEL</constant> , its destructor is |
1477 | called at the last. That is, it is assured that all other | 1482 | called at the last. That is, it is assured that all other |
1478 | components like PCMs and controls have been already released. | 1483 | components like PCMs and controls have already been released. |
1479 | You don't have to call stopping PCMs, etc. explicitly, but just | 1484 | You don't have to stop PCMs, etc. explicitly, but just |
1480 | stop the hardware in the low-level. | 1485 | call low-level hardware stopping. |
1481 | </para> | 1486 | </para> |
1482 | 1487 | ||
1483 | <para> | 1488 | <para> |
1484 | The management of a memory-mapped region is almost as same as | 1489 | The management of a memory-mapped region is almost as same as |
1485 | the management of an i/o port. You'll need three fields like | 1490 | the management of an I/O port. You'll need three fields like |
1486 | the following: | 1491 | the following: |
1487 | 1492 | ||
1488 | <informalexample> | 1493 | <informalexample> |
@@ -1561,8 +1566,8 @@ | |||
1561 | <section id="pci-resource-entries"> | 1566 | <section id="pci-resource-entries"> |
1562 | <title>PCI Entries</title> | 1567 | <title>PCI Entries</title> |
1563 | <para> | 1568 | <para> |
1564 | So far, so good. Let's finish the rest of missing PCI | 1569 | So far, so good. Let's finish the missing PCI |
1565 | stuffs. At first, we need a | 1570 | stuff. At first, we need a |
1566 | <structname>pci_device_id</structname> table for this | 1571 | <structname>pci_device_id</structname> table for this |
1567 | chipset. It's a table of PCI vendor/device ID number, and some | 1572 | chipset. It's a table of PCI vendor/device ID number, and some |
1568 | masks. | 1573 | masks. |
@@ -1588,13 +1593,13 @@ | |||
1588 | 1593 | ||
1589 | <para> | 1594 | <para> |
1590 | The first and second fields of | 1595 | The first and second fields of |
1591 | <structname>pci_device_id</structname> struct are the vendor and | 1596 | the <structname>pci_device_id</structname> structure are the vendor and |
1592 | device IDs. If you have nothing special to filter the matching | 1597 | device IDs. If you have no reason to filter the matching |
1593 | devices, you can use the rest of fields like above. The last | 1598 | devices, you can leave the remaining fields as above. The last |
1594 | field of <structname>pci_device_id</structname> struct is a | 1599 | field of the <structname>pci_device_id</structname> struct contains |
1595 | private data for this entry. You can specify any value here, for | 1600 | private data for this entry. You can specify any value here, for |
1596 | example, to tell the type of different operations per each | 1601 | example, to define specific operations for supported device IDs. |
1597 | device IDs. Such an example is found in intel8x0 driver. | 1602 | Such an example is found in the intel8x0 driver. |
1598 | </para> | 1603 | </para> |
1599 | 1604 | ||
1600 | <para> | 1605 | <para> |
@@ -1621,10 +1626,10 @@ | |||
1621 | 1626 | ||
1622 | <para> | 1627 | <para> |
1623 | The <structfield>probe</structfield> and | 1628 | The <structfield>probe</structfield> and |
1624 | <structfield>remove</structfield> functions are what we already | 1629 | <structfield>remove</structfield> functions have already |
1625 | defined in | 1630 | been defined in the previous sections. |
1626 | the previous sections. The <structfield>remove</structfield> should | 1631 | The <structfield>remove</structfield> function should |
1627 | be defined with | 1632 | be defined with the |
1628 | <function>__devexit_p()</function> macro, so that it's not | 1633 | <function>__devexit_p()</function> macro, so that it's not |
1629 | defined for built-in (and non-hot-pluggable) case. The | 1634 | defined for built-in (and non-hot-pluggable) case. The |
1630 | <structfield>name</structfield> | 1635 | <structfield>name</structfield> |
@@ -1665,8 +1670,7 @@ | |||
1665 | 1670 | ||
1666 | <para> | 1671 | <para> |
1667 | Oh, one thing was forgotten. If you have no exported symbols, | 1672 | Oh, one thing was forgotten. If you have no exported symbols, |
1668 | you need to declare it on 2.2 or 2.4 kernels (on 2.6 kernels | 1673 | you need to declare it in 2.2 or 2.4 kernels (it's not necessary in 2.6 kernels). |
1669 | it's not necessary, though). | ||
1670 | 1674 | ||
1671 | <informalexample> | 1675 | <informalexample> |
1672 | <programlisting> | 1676 | <programlisting> |
@@ -1698,7 +1702,7 @@ | |||
1698 | 1702 | ||
1699 | <para> | 1703 | <para> |
1700 | For accessing to the PCM layer, you need to include | 1704 | For accessing to the PCM layer, you need to include |
1701 | <filename><sound/pcm.h></filename> above all. In addition, | 1705 | <filename><sound/pcm.h></filename> first. In addition, |
1702 | <filename><sound/pcm_params.h></filename> might be needed | 1706 | <filename><sound/pcm_params.h></filename> might be needed |
1703 | if you access to some functions related with hw_param. | 1707 | if you access to some functions related with hw_param. |
1704 | </para> | 1708 | </para> |
@@ -1707,21 +1711,21 @@ | |||
1707 | Each card device can have up to four pcm instances. A pcm | 1711 | Each card device can have up to four pcm instances. A pcm |
1708 | instance corresponds to a pcm device file. The limitation of | 1712 | instance corresponds to a pcm device file. The limitation of |
1709 | number of instances comes only from the available bit size of | 1713 | number of instances comes only from the available bit size of |
1710 | the linux's device number. Once when 64bit device number is | 1714 | the Linux's device numbers. Once when 64bit device number is |
1711 | used, we'll have more available pcm instances. | 1715 | used, we'll have more pcm instances available. |
1712 | </para> | 1716 | </para> |
1713 | 1717 | ||
1714 | <para> | 1718 | <para> |
1715 | A pcm instance consists of pcm playback and capture streams, | 1719 | A pcm instance consists of pcm playback and capture streams, |
1716 | and each pcm stream consists of one or more pcm substreams. Some | 1720 | and each pcm stream consists of one or more pcm substreams. Some |
1717 | soundcard supports the multiple-playback function. For example, | 1721 | soundcards support multiple playback functions. For example, |
1718 | emu10k1 has a PCM playback of 32 stereo substreams. In this case, at | 1722 | emu10k1 has a PCM playback of 32 stereo substreams. In this case, at |
1719 | each open, a free substream is (usually) automatically chosen | 1723 | each open, a free substream is (usually) automatically chosen |
1720 | and opened. Meanwhile, when only one substream exists and it was | 1724 | and opened. Meanwhile, when only one substream exists and it was |
1721 | already opened, the succeeding open will result in the blocking | 1725 | already opened, the successful open will either block |
1722 | or the error with <constant>EAGAIN</constant> according to the | 1726 | or error with <constant>EAGAIN</constant> according to the |
1723 | file open mode. But you don't have to know the detail in your | 1727 | file open mode. But you don't have to care about such details in your |
1724 | driver. The PCM middle layer will take all such jobs. | 1728 | driver. The PCM middle layer will take care of such work. |
1725 | </para> | 1729 | </para> |
1726 | </section> | 1730 | </section> |
1727 | 1731 | ||
@@ -1944,7 +1948,7 @@ | |||
1944 | <section id="pcm-interface-constructor"> | 1948 | <section id="pcm-interface-constructor"> |
1945 | <title>Constructor</title> | 1949 | <title>Constructor</title> |
1946 | <para> | 1950 | <para> |
1947 | A pcm instance is allocated by <function>snd_pcm_new()</function> | 1951 | A pcm instance is allocated by the <function>snd_pcm_new()</function> |
1948 | function. It would be better to create a constructor for pcm, | 1952 | function. It would be better to create a constructor for pcm, |
1949 | namely, | 1953 | namely, |
1950 | 1954 | ||
@@ -1971,23 +1975,23 @@ | |||
1971 | </para> | 1975 | </para> |
1972 | 1976 | ||
1973 | <para> | 1977 | <para> |
1974 | The <function>snd_pcm_new()</function> function takes the four | 1978 | The <function>snd_pcm_new()</function> function takes four |
1975 | arguments. The first argument is the card pointer to which this | 1979 | arguments. The first argument is the card pointer to which this |
1976 | pcm is assigned, and the second is the ID string. | 1980 | pcm is assigned, and the second is the ID string. |
1977 | </para> | 1981 | </para> |
1978 | 1982 | ||
1979 | <para> | 1983 | <para> |
1980 | The third argument (<parameter>index</parameter>, 0 in the | 1984 | The third argument (<parameter>index</parameter>, 0 in the |
1981 | above) is the index of this new pcm. It begins from zero. When | 1985 | above) is the index of this new pcm. It begins from zero. If |
1982 | you will create more than one pcm instances, specify the | 1986 | you create more than one pcm instances, specify the |
1983 | different numbers in this argument. For example, | 1987 | different numbers in this argument. For example, |
1984 | <parameter>index</parameter> = 1 for the second PCM device. | 1988 | <parameter>index</parameter> = 1 for the second PCM device. |
1985 | </para> | 1989 | </para> |
1986 | 1990 | ||
1987 | <para> | 1991 | <para> |
1988 | The fourth and fifth arguments are the number of substreams | 1992 | The fourth and fifth arguments are the number of substreams |
1989 | for playback and capture, respectively. Here both 1 are given in | 1993 | for playback and capture, respectively. Here 1 is used for |
1990 | the above example. When no playback or no capture is available, | 1994 | both arguments. When no playback or capture substreams are available, |
1991 | pass 0 to the corresponding argument. | 1995 | pass 0 to the corresponding argument. |
1992 | </para> | 1996 | </para> |
1993 | 1997 | ||
@@ -2045,13 +2049,13 @@ | |||
2045 | </programlisting> | 2049 | </programlisting> |
2046 | </informalexample> | 2050 | </informalexample> |
2047 | 2051 | ||
2048 | Each of callbacks is explained in the subsection | 2052 | All the callbacks are described in the |
2049 | <link linkend="pcm-interface-operators"><citetitle> | 2053 | <link linkend="pcm-interface-operators"><citetitle> |
2050 | Operators</citetitle></link>. | 2054 | Operators</citetitle></link> subsection. |
2051 | </para> | 2055 | </para> |
2052 | 2056 | ||
2053 | <para> | 2057 | <para> |
2054 | After setting the operators, most likely you'd like to | 2058 | After setting the operators, you probably will want to |
2055 | pre-allocate the buffer. For the pre-allocation, simply call | 2059 | pre-allocate the buffer. For the pre-allocation, simply call |
2056 | the following: | 2060 | the following: |
2057 | 2061 | ||
@@ -2065,8 +2069,8 @@ | |||
2065 | </programlisting> | 2069 | </programlisting> |
2066 | </informalexample> | 2070 | </informalexample> |
2067 | 2071 | ||
2068 | It will allocate up to 64kB buffer as default. The details of | 2072 | It will allocate a buffer up to 64kB as default. |
2069 | buffer management will be described in the later section <link | 2073 | Buffer management details will be described in the later section <link |
2070 | linkend="buffer-and-memory"><citetitle>Buffer and Memory | 2074 | linkend="buffer-and-memory"><citetitle>Buffer and Memory |
2071 | Management</citetitle></link>. | 2075 | Management</citetitle></link>. |
2072 | </para> | 2076 | </para> |
@@ -2095,13 +2099,13 @@ | |||
2095 | <para> | 2099 | <para> |
2096 | The destructor for a pcm instance is not always | 2100 | The destructor for a pcm instance is not always |
2097 | necessary. Since the pcm device will be released by the middle | 2101 | necessary. Since the pcm device will be released by the middle |
2098 | layer code automatically, you don't have to call destructor | 2102 | layer code automatically, you don't have to call the destructor |
2099 | explicitly. | 2103 | explicitly. |
2100 | </para> | 2104 | </para> |
2101 | 2105 | ||
2102 | <para> | 2106 | <para> |
2103 | The destructor would be necessary when you created some | 2107 | The destructor would be necessary if you created |
2104 | special records internally and need to release them. In such a | 2108 | special records internally and needed to release them. In such a |
2105 | case, set the destructor function to | 2109 | case, set the destructor function to |
2106 | pcm->private_free: | 2110 | pcm->private_free: |
2107 | 2111 | ||
@@ -2141,16 +2145,15 @@ | |||
2141 | When the PCM substream is opened, a PCM runtime instance is | 2145 | When the PCM substream is opened, a PCM runtime instance is |
2142 | allocated and assigned to the substream. This pointer is | 2146 | allocated and assigned to the substream. This pointer is |
2143 | accessible via <constant>substream->runtime</constant>. | 2147 | accessible via <constant>substream->runtime</constant>. |
2144 | This runtime pointer holds the various information; it holds | 2148 | This runtime pointer holds most information you need |
2145 | the copy of hw_params and sw_params configurations, the buffer | 2149 | to control the PCM: the copy of hw_params and sw_params configurations, the buffer |
2146 | pointers, mmap records, spinlocks, etc. Almost everything you | 2150 | pointers, mmap records, spinlocks, etc. |
2147 | need for controlling the PCM can be found there. | ||
2148 | </para> | 2151 | </para> |
2149 | 2152 | ||
2150 | <para> | 2153 | <para> |
2151 | The definition of runtime instance is found in | 2154 | The definition of runtime instance is found in |
2152 | <filename><sound/pcm.h></filename>. Here is the | 2155 | <filename><sound/pcm.h></filename>. Here are |
2153 | copy from the file. | 2156 | the contents of this file: |
2154 | <informalexample> | 2157 | <informalexample> |
2155 | <programlisting> | 2158 | <programlisting> |
2156 | <![CDATA[ | 2159 | <![CDATA[ |
@@ -2244,7 +2247,7 @@ struct _snd_pcm_runtime { | |||
2244 | <para> | 2247 | <para> |
2245 | For the operators (callbacks) of each sound driver, most of | 2248 | For the operators (callbacks) of each sound driver, most of |
2246 | these records are supposed to be read-only. Only the PCM | 2249 | these records are supposed to be read-only. Only the PCM |
2247 | middle-layer changes / updates these info. The exceptions are | 2250 | middle-layer changes / updates them. The exceptions are |
2248 | the hardware description (hw), interrupt callbacks | 2251 | the hardware description (hw), interrupt callbacks |
2249 | (transfer_ack_xxx), DMA buffer information, and the private | 2252 | (transfer_ack_xxx), DMA buffer information, and the private |
2250 | data. Besides, if you use the standard buffer allocation | 2253 | data. Besides, if you use the standard buffer allocation |
@@ -2285,7 +2288,7 @@ struct _snd_pcm_runtime { | |||
2285 | </para> | 2288 | </para> |
2286 | 2289 | ||
2287 | <para> | 2290 | <para> |
2288 | Typically, you'll have a hardware descriptor like below: | 2291 | Typically, you'll have a hardware descriptor as below: |
2289 | <informalexample> | 2292 | <informalexample> |
2290 | <programlisting> | 2293 | <programlisting> |
2291 | <![CDATA[ | 2294 | <![CDATA[ |
@@ -2320,10 +2323,10 @@ struct _snd_pcm_runtime { | |||
2320 | <constant>SNDRV_PCM_INFO_XXX</constant>. Here, at least, you | 2323 | <constant>SNDRV_PCM_INFO_XXX</constant>. Here, at least, you |
2321 | have to specify whether the mmap is supported and which | 2324 | have to specify whether the mmap is supported and which |
2322 | interleaved format is supported. | 2325 | interleaved format is supported. |
2323 | When the mmap is supported, add | 2326 | When the is supported, add the |
2324 | <constant>SNDRV_PCM_INFO_MMAP</constant> flag here. When the | 2327 | <constant>SNDRV_PCM_INFO_MMAP</constant> flag here. When the |
2325 | hardware supports the interleaved or the non-interleaved | 2328 | hardware supports the interleaved or the non-interleaved |
2326 | format, <constant>SNDRV_PCM_INFO_INTERLEAVED</constant> or | 2329 | formats, <constant>SNDRV_PCM_INFO_INTERLEAVED</constant> or |
2327 | <constant>SNDRV_PCM_INFO_NONINTERLEAVED</constant> flag must | 2330 | <constant>SNDRV_PCM_INFO_NONINTERLEAVED</constant> flag must |
2328 | be set, respectively. If both are supported, you can set both, | 2331 | be set, respectively. If both are supported, you can set both, |
2329 | too. | 2332 | too. |
@@ -2331,7 +2334,7 @@ struct _snd_pcm_runtime { | |||
2331 | 2334 | ||
2332 | <para> | 2335 | <para> |
2333 | In the above example, <constant>MMAP_VALID</constant> and | 2336 | In the above example, <constant>MMAP_VALID</constant> and |
2334 | <constant>BLOCK_TRANSFER</constant> are specified for OSS mmap | 2337 | <constant>BLOCK_TRANSFER</constant> are specified for the OSS mmap |
2335 | mode. Usually both are set. Of course, | 2338 | mode. Usually both are set. Of course, |
2336 | <constant>MMAP_VALID</constant> is set only if the mmap is | 2339 | <constant>MMAP_VALID</constant> is set only if the mmap is |
2337 | really supported. | 2340 | really supported. |
@@ -2345,11 +2348,11 @@ struct _snd_pcm_runtime { | |||
2345 | <quote>pause</quote> operation, while the | 2348 | <quote>pause</quote> operation, while the |
2346 | <constant>RESUME</constant> bit means that the pcm supports | 2349 | <constant>RESUME</constant> bit means that the pcm supports |
2347 | the full <quote>suspend/resume</quote> operation. | 2350 | the full <quote>suspend/resume</quote> operation. |
2348 | If <constant>PAUSE</constant> flag is set, | 2351 | If the <constant>PAUSE</constant> flag is set, |
2349 | the <structfield>trigger</structfield> callback below | 2352 | the <structfield>trigger</structfield> callback below |
2350 | must handle the corresponding (pause push/release) commands. | 2353 | must handle the corresponding (pause push/release) commands. |
2351 | The suspend/resume trigger commands can be defined even without | 2354 | The suspend/resume trigger commands can be defined even without |
2352 | <constant>RESUME</constant> flag. See <link | 2355 | the <constant>RESUME</constant> flag. See <link |
2353 | linkend="power-management"><citetitle> | 2356 | linkend="power-management"><citetitle> |
2354 | Power Management</citetitle></link> section for details. | 2357 | Power Management</citetitle></link> section for details. |
2355 | </para> | 2358 | </para> |
@@ -2382,7 +2385,7 @@ struct _snd_pcm_runtime { | |||
2382 | <constant>CONTINUOUS</constant> bit additionally. | 2385 | <constant>CONTINUOUS</constant> bit additionally. |
2383 | The pre-defined rate bits are provided only for typical | 2386 | The pre-defined rate bits are provided only for typical |
2384 | rates. If your chip supports unconventional rates, you need to add | 2387 | rates. If your chip supports unconventional rates, you need to add |
2385 | <constant>KNOT</constant> bit and set up the hardware | 2388 | the <constant>KNOT</constant> bit and set up the hardware |
2386 | constraint manually (explained later). | 2389 | constraint manually (explained later). |
2387 | </para> | 2390 | </para> |
2388 | </listitem> | 2391 | </listitem> |
@@ -2390,8 +2393,8 @@ struct _snd_pcm_runtime { | |||
2390 | <listitem> | 2393 | <listitem> |
2391 | <para> | 2394 | <para> |
2392 | <structfield>rate_min</structfield> and | 2395 | <structfield>rate_min</structfield> and |
2393 | <structfield>rate_max</structfield> define the minimal and | 2396 | <structfield>rate_max</structfield> define the minimum and |
2394 | maximal sample rate. This should correspond somehow to | 2397 | maximum sample rate. This should correspond somehow to |
2395 | <structfield>rates</structfield> bits. | 2398 | <structfield>rates</structfield> bits. |
2396 | </para> | 2399 | </para> |
2397 | </listitem> | 2400 | </listitem> |
@@ -2400,7 +2403,7 @@ struct _snd_pcm_runtime { | |||
2400 | <para> | 2403 | <para> |
2401 | <structfield>channel_min</structfield> and | 2404 | <structfield>channel_min</structfield> and |
2402 | <structfield>channel_max</structfield> | 2405 | <structfield>channel_max</structfield> |
2403 | define, as you might already expected, the minimal and maximal | 2406 | define, as you might already expected, the minimum and maximum |
2404 | number of channels. | 2407 | number of channels. |
2405 | </para> | 2408 | </para> |
2406 | </listitem> | 2409 | </listitem> |
@@ -2408,21 +2411,21 @@ struct _snd_pcm_runtime { | |||
2408 | <listitem> | 2411 | <listitem> |
2409 | <para> | 2412 | <para> |
2410 | <structfield>buffer_bytes_max</structfield> defines the | 2413 | <structfield>buffer_bytes_max</structfield> defines the |
2411 | maximal buffer size in bytes. There is no | 2414 | maximum buffer size in bytes. There is no |
2412 | <structfield>buffer_bytes_min</structfield> field, since | 2415 | <structfield>buffer_bytes_min</structfield> field, since |
2413 | it can be calculated from the minimal period size and the | 2416 | it can be calculated from the minimum period size and the |
2414 | minimal number of periods. | 2417 | minimum number of periods. |
2415 | Meanwhile, <structfield>period_bytes_min</structfield> and | 2418 | Meanwhile, <structfield>period_bytes_min</structfield> and |
2416 | define the minimal and maximal size of the period in bytes. | 2419 | define the minimum and maximum size of the period in bytes. |
2417 | <structfield>periods_max</structfield> and | 2420 | <structfield>periods_max</structfield> and |
2418 | <structfield>periods_min</structfield> define the maximal and | 2421 | <structfield>periods_min</structfield> define the maximum and |
2419 | minimal number of periods in the buffer. | 2422 | minimum number of periods in the buffer. |
2420 | </para> | 2423 | </para> |
2421 | 2424 | ||
2422 | <para> | 2425 | <para> |
2423 | The <quote>period</quote> is a term, that corresponds to | 2426 | The <quote>period</quote> is a term that corresponds to |
2424 | fragment in the OSS world. The period defines the size at | 2427 | a fragment in the OSS world. The period defines the size at |
2425 | which the PCM interrupt is generated. This size strongly | 2428 | which a PCM interrupt is generated. This size strongly |
2426 | depends on the hardware. | 2429 | depends on the hardware. |
2427 | Generally, the smaller period size will give you more | 2430 | Generally, the smaller period size will give you more |
2428 | interrupts, that is, more controls. | 2431 | interrupts, that is, more controls. |
@@ -2435,8 +2438,8 @@ struct _snd_pcm_runtime { | |||
2435 | <listitem> | 2438 | <listitem> |
2436 | <para> | 2439 | <para> |
2437 | There is also a field <structfield>fifo_size</structfield>. | 2440 | There is also a field <structfield>fifo_size</structfield>. |
2438 | This specifies the size of the hardware FIFO, but it's not | 2441 | This specifies the size of the hardware FIFO, but currently it |
2439 | used currently in the driver nor in the alsa-lib. So, you | 2442 | is neither used in the driver nor in the alsa-lib. So, you |
2440 | can ignore this field. | 2443 | can ignore this field. |
2441 | </para> | 2444 | </para> |
2442 | </listitem> | 2445 | </listitem> |
@@ -2450,7 +2453,7 @@ struct _snd_pcm_runtime { | |||
2450 | Ok, let's go back again to the PCM runtime records. | 2453 | Ok, let's go back again to the PCM runtime records. |
2451 | The most frequently referred records in the runtime instance are | 2454 | The most frequently referred records in the runtime instance are |
2452 | the PCM configurations. | 2455 | the PCM configurations. |
2453 | The PCM configurations are stored on runtime instance | 2456 | The PCM configurations are stored in the runtime instance |
2454 | after the application sends <type>hw_params</type> data via | 2457 | after the application sends <type>hw_params</type> data via |
2455 | alsa-lib. There are many fields copied from hw_params and | 2458 | alsa-lib. There are many fields copied from hw_params and |
2456 | sw_params structs. For example, | 2459 | sw_params structs. For example, |
@@ -2461,11 +2464,11 @@ struct _snd_pcm_runtime { | |||
2461 | 2464 | ||
2462 | <para> | 2465 | <para> |
2463 | One thing to be noted is that the configured buffer and period | 2466 | One thing to be noted is that the configured buffer and period |
2464 | sizes are stored in <quote>frames</quote> in the runtime | 2467 | sizes are stored in <quote>frames</quote> in the runtime. |
2465 | In the ALSA world, 1 frame = channels * samples-size. | 2468 | In the ALSA world, 1 frame = channels * samples-size. |
2466 | For conversion between frames and bytes, you can use the | 2469 | For conversion between frames and bytes, you can use the |
2467 | helper functions, <function>frames_to_bytes()</function> and | 2470 | <function>frames_to_bytes()</function> and |
2468 | <function>bytes_to_frames()</function>. | 2471 | <function>bytes_to_frames()</function> helper functions. |
2469 | <informalexample> | 2472 | <informalexample> |
2470 | <programlisting> | 2473 | <programlisting> |
2471 | <![CDATA[ | 2474 | <![CDATA[ |
@@ -2515,7 +2518,7 @@ struct _snd_pcm_runtime { | |||
2515 | <structfield>dma_area</structfield> is necessary when the | 2518 | <structfield>dma_area</structfield> is necessary when the |
2516 | buffer is mmapped. If your driver doesn't support mmap, this | 2519 | buffer is mmapped. If your driver doesn't support mmap, this |
2517 | field is not necessary. <structfield>dma_addr</structfield> | 2520 | field is not necessary. <structfield>dma_addr</structfield> |
2518 | is also not mandatory. You can use | 2521 | is also optional. You can use |
2519 | <structfield>dma_private</structfield> as you like, too. | 2522 | <structfield>dma_private</structfield> as you like, too. |
2520 | </para> | 2523 | </para> |
2521 | </section> | 2524 | </section> |
@@ -2524,14 +2527,14 @@ struct _snd_pcm_runtime { | |||
2524 | <title>Running Status</title> | 2527 | <title>Running Status</title> |
2525 | <para> | 2528 | <para> |
2526 | The running status can be referred via <constant>runtime->status</constant>. | 2529 | The running status can be referred via <constant>runtime->status</constant>. |
2527 | This is the pointer to struct <structname>snd_pcm_mmap_status</structname> | 2530 | This is the pointer to the struct <structname>snd_pcm_mmap_status</structname> |
2528 | record. For example, you can get the current DMA hardware | 2531 | record. For example, you can get the current DMA hardware |
2529 | pointer via <constant>runtime->status->hw_ptr</constant>. | 2532 | pointer via <constant>runtime->status->hw_ptr</constant>. |
2530 | </para> | 2533 | </para> |
2531 | 2534 | ||
2532 | <para> | 2535 | <para> |
2533 | The DMA application pointer can be referred via | 2536 | The DMA application pointer can be referred via |
2534 | <constant>runtime->control</constant>, which points | 2537 | <constant>runtime->control</constant>, which points to the |
2535 | struct <structname>snd_pcm_mmap_control</structname> record. | 2538 | struct <structname>snd_pcm_mmap_control</structname> record. |
2536 | However, accessing directly to this value is not recommended. | 2539 | However, accessing directly to this value is not recommended. |
2537 | </para> | 2540 | </para> |
@@ -2542,14 +2545,14 @@ struct _snd_pcm_runtime { | |||
2542 | <para> | 2545 | <para> |
2543 | You can allocate a record for the substream and store it in | 2546 | You can allocate a record for the substream and store it in |
2544 | <constant>runtime->private_data</constant>. Usually, this | 2547 | <constant>runtime->private_data</constant>. Usually, this |
2545 | done in | 2548 | is done in |
2546 | <link linkend="pcm-interface-operators-open-callback"><citetitle> | 2549 | <link linkend="pcm-interface-operators-open-callback"><citetitle> |
2547 | the open callback</citetitle></link>. | 2550 | the open callback</citetitle></link>. |
2548 | Don't mix this with <constant>pcm->private_data</constant>. | 2551 | Don't mix this with <constant>pcm->private_data</constant>. |
2549 | The <constant>pcm->private_data</constant> usually points the | 2552 | The <constant>pcm->private_data</constant> usually points to the |
2550 | chip instance assigned statically at the creation of PCM, while the | 2553 | chip instance assigned statically at the creation of PCM, while the |
2551 | <constant>runtime->private_data</constant> points a dynamic | 2554 | <constant>runtime->private_data</constant> points to a dynamic |
2552 | data created at the PCM open callback. | 2555 | data structure created at the PCM open callback. |
2553 | 2556 | ||
2554 | <informalexample> | 2557 | <informalexample> |
2555 | <programlisting> | 2558 | <programlisting> |
@@ -2579,7 +2582,7 @@ struct _snd_pcm_runtime { | |||
2579 | <para> | 2582 | <para> |
2580 | The field <structfield>transfer_ack_begin</structfield> and | 2583 | The field <structfield>transfer_ack_begin</structfield> and |
2581 | <structfield>transfer_ack_end</structfield> are called at | 2584 | <structfield>transfer_ack_end</structfield> are called at |
2582 | the beginning and the end of | 2585 | the beginning and at the end of |
2583 | <function>snd_pcm_period_elapsed()</function>, respectively. | 2586 | <function>snd_pcm_period_elapsed()</function>, respectively. |
2584 | </para> | 2587 | </para> |
2585 | </section> | 2588 | </section> |
@@ -2589,17 +2592,18 @@ struct _snd_pcm_runtime { | |||
2589 | <section id="pcm-interface-operators"> | 2592 | <section id="pcm-interface-operators"> |
2590 | <title>Operators</title> | 2593 | <title>Operators</title> |
2591 | <para> | 2594 | <para> |
2592 | OK, now let me explain the detail of each pcm callback | 2595 | OK, now let me give details about each pcm callback |
2593 | (<parameter>ops</parameter>). In general, every callback must | 2596 | (<parameter>ops</parameter>). In general, every callback must |
2594 | return 0 if successful, or a negative number with the error | 2597 | return 0 if successful, or a negative error number |
2595 | number such as <constant>-EINVAL</constant> at any | 2598 | such as <constant>-EINVAL</constant>. To choose an appropriate |
2596 | error. | 2599 | error number, it is advised to check what value other parts of |
2600 | the kernel return when the same kind of request fails. | ||
2597 | </para> | 2601 | </para> |
2598 | 2602 | ||
2599 | <para> | 2603 | <para> |
2600 | The callback function takes at least the argument with | 2604 | The callback function takes at least the argument with |
2601 | <structname>snd_pcm_substream</structname> pointer. For retrieving the | 2605 | <structname>snd_pcm_substream</structname> pointer. To retrieve |
2602 | chip record from the given substream instance, you can use the | 2606 | the chip record from the given substream instance, you can use the |
2603 | following macro. | 2607 | following macro. |
2604 | 2608 | ||
2605 | <informalexample> | 2609 | <informalexample> |
@@ -2616,7 +2620,7 @@ struct _snd_pcm_runtime { | |||
2616 | The macro reads <constant>substream->private_data</constant>, | 2620 | The macro reads <constant>substream->private_data</constant>, |
2617 | which is a copy of <constant>pcm->private_data</constant>. | 2621 | which is a copy of <constant>pcm->private_data</constant>. |
2618 | You can override the former if you need to assign different data | 2622 | You can override the former if you need to assign different data |
2619 | records per PCM substream. For example, cmi8330 driver assigns | 2623 | records per PCM substream. For example, the cmi8330 driver assigns |
2620 | different private_data for playback and capture directions, | 2624 | different private_data for playback and capture directions, |
2621 | because it uses two different codecs (SB- and AD-compatible) for | 2625 | because it uses two different codecs (SB- and AD-compatible) for |
2622 | different directions. | 2626 | different directions. |
@@ -2709,7 +2713,7 @@ struct _snd_pcm_runtime { | |||
2709 | <section id="pcm-interface-operators-ioctl-callback"> | 2713 | <section id="pcm-interface-operators-ioctl-callback"> |
2710 | <title>ioctl callback</title> | 2714 | <title>ioctl callback</title> |
2711 | <para> | 2715 | <para> |
2712 | This is used for any special action to pcm ioctls. But | 2716 | This is used for any special call to pcm ioctls. But |
2713 | usually you can pass a generic ioctl callback, | 2717 | usually you can pass a generic ioctl callback, |
2714 | <function>snd_pcm_lib_ioctl</function>. | 2718 | <function>snd_pcm_lib_ioctl</function>. |
2715 | </para> | 2719 | </para> |
@@ -2726,9 +2730,6 @@ struct _snd_pcm_runtime { | |||
2726 | ]]> | 2730 | ]]> |
2727 | </programlisting> | 2731 | </programlisting> |
2728 | </informalexample> | 2732 | </informalexample> |
2729 | |||
2730 | This and <structfield>hw_free</structfield> callbacks exist | ||
2731 | only on ALSA 0.9.x. | ||
2732 | </para> | 2733 | </para> |
2733 | 2734 | ||
2734 | <para> | 2735 | <para> |
@@ -2740,13 +2741,13 @@ struct _snd_pcm_runtime { | |||
2740 | </para> | 2741 | </para> |
2741 | 2742 | ||
2742 | <para> | 2743 | <para> |
2743 | Many hardware set-up should be done in this callback, | 2744 | Many hardware setups should be done in this callback, |
2744 | including the allocation of buffers. | 2745 | including the allocation of buffers. |
2745 | </para> | 2746 | </para> |
2746 | 2747 | ||
2747 | <para> | 2748 | <para> |
2748 | Parameters to be initialized are retrieved by | 2749 | Parameters to be initialized are retrieved by |
2749 | <function>params_xxx()</function> macros. For allocating a | 2750 | <function>params_xxx()</function> macros. To allocate |
2750 | buffer, you can call a helper function, | 2751 | buffer, you can call a helper function, |
2751 | 2752 | ||
2752 | <informalexample> | 2753 | <informalexample> |
@@ -2772,8 +2773,8 @@ struct _snd_pcm_runtime { | |||
2772 | </para> | 2773 | </para> |
2773 | 2774 | ||
2774 | <para> | 2775 | <para> |
2775 | Thus, you need to take care not to allocate the same buffers | 2776 | Thus, you need to be careful not to allocate the same buffers |
2776 | many times, which will lead to memory leak! Calling the | 2777 | many times, which will lead to memory leaks! Calling the |
2777 | helper function above many times is OK. It will release the | 2778 | helper function above many times is OK. It will release the |
2778 | previous buffer automatically when it was already allocated. | 2779 | previous buffer automatically when it was already allocated. |
2779 | </para> | 2780 | </para> |
@@ -2782,7 +2783,7 @@ struct _snd_pcm_runtime { | |||
2782 | Another note is that this callback is non-atomic | 2783 | Another note is that this callback is non-atomic |
2783 | (schedulable). This is important, because the | 2784 | (schedulable). This is important, because the |
2784 | <structfield>trigger</structfield> callback | 2785 | <structfield>trigger</structfield> callback |
2785 | is atomic (non-schedulable). That is, mutex or any | 2786 | is atomic (non-schedulable). That is, mutexes or any |
2786 | schedule-related functions are not available in | 2787 | schedule-related functions are not available in |
2787 | <structfield>trigger</structfield> callback. | 2788 | <structfield>trigger</structfield> callback. |
2788 | Please see the subsection | 2789 | Please see the subsection |
@@ -2843,15 +2844,15 @@ struct _snd_pcm_runtime { | |||
2843 | <quote>prepared</quote>. You can set the format type, sample | 2844 | <quote>prepared</quote>. You can set the format type, sample |
2844 | rate, etc. here. The difference from | 2845 | rate, etc. here. The difference from |
2845 | <structfield>hw_params</structfield> is that the | 2846 | <structfield>hw_params</structfield> is that the |
2846 | <structfield>prepare</structfield> callback will be called at each | 2847 | <structfield>prepare</structfield> callback will be called each |
2847 | time | 2848 | time |
2848 | <function>snd_pcm_prepare()</function> is called, i.e. when | 2849 | <function>snd_pcm_prepare()</function> is called, i.e. when |
2849 | recovered after underruns, etc. | 2850 | recovering after underruns, etc. |
2850 | </para> | 2851 | </para> |
2851 | 2852 | ||
2852 | <para> | 2853 | <para> |
2853 | Note that this callback became non-atomic since the recent version. | 2854 | Note that this callback is now non-atomic. |
2854 | You can use schedule-related functions safely in this callback now. | 2855 | You can use schedule-related functions safely in this callback. |
2855 | </para> | 2856 | </para> |
2856 | 2857 | ||
2857 | <para> | 2858 | <para> |
@@ -2871,7 +2872,7 @@ struct _snd_pcm_runtime { | |||
2871 | 2872 | ||
2872 | <para> | 2873 | <para> |
2873 | Be careful that this callback will be called many times at | 2874 | Be careful that this callback will be called many times at |
2874 | each set up, too. | 2875 | each setup, too. |
2875 | </para> | 2876 | </para> |
2876 | </section> | 2877 | </section> |
2877 | 2878 | ||
@@ -2893,7 +2894,7 @@ struct _snd_pcm_runtime { | |||
2893 | Which action is specified in the second argument, | 2894 | Which action is specified in the second argument, |
2894 | <constant>SNDRV_PCM_TRIGGER_XXX</constant> in | 2895 | <constant>SNDRV_PCM_TRIGGER_XXX</constant> in |
2895 | <filename><sound/pcm.h></filename>. At least, | 2896 | <filename><sound/pcm.h></filename>. At least, |
2896 | <constant>START</constant> and <constant>STOP</constant> | 2897 | the <constant>START</constant> and <constant>STOP</constant> |
2897 | commands must be defined in this callback. | 2898 | commands must be defined in this callback. |
2898 | 2899 | ||
2899 | <informalexample> | 2900 | <informalexample> |
@@ -2915,8 +2916,8 @@ struct _snd_pcm_runtime { | |||
2915 | </para> | 2916 | </para> |
2916 | 2917 | ||
2917 | <para> | 2918 | <para> |
2918 | When the pcm supports the pause operation (given in info | 2919 | When the pcm supports the pause operation (given in the info |
2919 | field of the hardware table), <constant>PAUSE_PUSE</constant> | 2920 | field of the hardware table), the <constant>PAUSE_PUSE</constant> |
2920 | and <constant>PAUSE_RELEASE</constant> commands must be | 2921 | and <constant>PAUSE_RELEASE</constant> commands must be |
2921 | handled here, too. The former is the command to pause the pcm, | 2922 | handled here, too. The former is the command to pause the pcm, |
2922 | and the latter to restart the pcm again. | 2923 | and the latter to restart the pcm again. |
@@ -2925,21 +2926,21 @@ struct _snd_pcm_runtime { | |||
2925 | <para> | 2926 | <para> |
2926 | When the pcm supports the suspend/resume operation, | 2927 | When the pcm supports the suspend/resume operation, |
2927 | regardless of full or partial suspend/resume support, | 2928 | regardless of full or partial suspend/resume support, |
2928 | <constant>SUSPEND</constant> and <constant>RESUME</constant> | 2929 | the <constant>SUSPEND</constant> and <constant>RESUME</constant> |
2929 | commands must be handled, too. | 2930 | commands must be handled, too. |
2930 | These commands are issued when the power-management status is | 2931 | These commands are issued when the power-management status is |
2931 | changed. Obviously, the <constant>SUSPEND</constant> and | 2932 | changed. Obviously, the <constant>SUSPEND</constant> and |
2932 | <constant>RESUME</constant> | 2933 | <constant>RESUME</constant> commands |
2933 | do suspend and resume of the pcm substream, and usually, they | 2934 | suspend and resume the pcm substream, and usually, they |
2934 | are identical with <constant>STOP</constant> and | 2935 | are identical to the <constant>STOP</constant> and |
2935 | <constant>START</constant> commands, respectively. | 2936 | <constant>START</constant> commands, respectively. |
2936 | See <link linkend="power-management"><citetitle> | 2937 | See the <link linkend="power-management"><citetitle> |
2937 | Power Management</citetitle></link> section for details. | 2938 | Power Management</citetitle></link> section for details. |
2938 | </para> | 2939 | </para> |
2939 | 2940 | ||
2940 | <para> | 2941 | <para> |
2941 | As mentioned, this callback is atomic. You cannot call | 2942 | As mentioned, this callback is atomic. You cannot call |
2942 | the function going to sleep. | 2943 | functions which may sleep. |
2943 | The trigger callback should be as minimal as possible, | 2944 | The trigger callback should be as minimal as possible, |
2944 | just really triggering the DMA. The other stuff should be | 2945 | just really triggering the DMA. The other stuff should be |
2945 | initialized hw_params and prepare callbacks properly | 2946 | initialized hw_params and prepare callbacks properly |
@@ -2960,8 +2961,8 @@ struct _snd_pcm_runtime { | |||
2960 | 2961 | ||
2961 | This callback is called when the PCM middle layer inquires | 2962 | This callback is called when the PCM middle layer inquires |
2962 | the current hardware position on the buffer. The position must | 2963 | the current hardware position on the buffer. The position must |
2963 | be returned in frames (which was in bytes on ALSA 0.5.x), | 2964 | be returned in frames, |
2964 | ranged from 0 to buffer_size - 1. | 2965 | ranging from 0 to buffer_size - 1. |
2965 | </para> | 2966 | </para> |
2966 | 2967 | ||
2967 | <para> | 2968 | <para> |
@@ -2983,7 +2984,7 @@ struct _snd_pcm_runtime { | |||
2983 | <para> | 2984 | <para> |
2984 | These callbacks are not mandatory, and can be omitted in | 2985 | These callbacks are not mandatory, and can be omitted in |
2985 | most cases. These callbacks are used when the hardware buffer | 2986 | most cases. These callbacks are used when the hardware buffer |
2986 | cannot be on the normal memory space. Some chips have their | 2987 | cannot be in the normal memory space. Some chips have their |
2987 | own buffer on the hardware which is not mappable. In such a | 2988 | own buffer on the hardware which is not mappable. In such a |
2988 | case, you have to transfer the data manually from the memory | 2989 | case, you have to transfer the data manually from the memory |
2989 | buffer to the hardware buffer. Or, if the buffer is | 2990 | buffer to the hardware buffer. Or, if the buffer is |
@@ -3018,8 +3019,8 @@ struct _snd_pcm_runtime { | |||
3018 | <title>page callback</title> | 3019 | <title>page callback</title> |
3019 | 3020 | ||
3020 | <para> | 3021 | <para> |
3021 | This callback is also not mandatory. This callback is used | 3022 | This callback is optional too. This callback is used |
3022 | mainly for the non-contiguous buffer. The mmap calls this | 3023 | mainly for non-contiguous buffers. The mmap calls this |
3023 | callback to get the page address. Some examples will be | 3024 | callback to get the page address. Some examples will be |
3024 | explained in the later section <link | 3025 | explained in the later section <link |
3025 | linkend="buffer-and-memory"><citetitle>Buffer and Memory | 3026 | linkend="buffer-and-memory"><citetitle>Buffer and Memory |
@@ -3035,7 +3036,7 @@ struct _snd_pcm_runtime { | |||
3035 | role of PCM interrupt handler in the sound driver is to update | 3036 | role of PCM interrupt handler in the sound driver is to update |
3036 | the buffer position and to tell the PCM middle layer when the | 3037 | the buffer position and to tell the PCM middle layer when the |
3037 | buffer position goes across the prescribed period size. To | 3038 | buffer position goes across the prescribed period size. To |
3038 | inform this, call <function>snd_pcm_period_elapsed()</function> | 3039 | inform this, call the <function>snd_pcm_period_elapsed()</function> |
3039 | function. | 3040 | function. |
3040 | </para> | 3041 | </para> |
3041 | 3042 | ||
@@ -3072,7 +3073,7 @@ struct _snd_pcm_runtime { | |||
3072 | </para> | 3073 | </para> |
3073 | 3074 | ||
3074 | <para> | 3075 | <para> |
3075 | A typical coding would be like: | 3076 | Typical code would be like: |
3076 | 3077 | ||
3077 | <example> | 3078 | <example> |
3078 | <title>Interrupt Handler Case #1</title> | 3079 | <title>Interrupt Handler Case #1</title> |
@@ -3101,21 +3102,21 @@ struct _snd_pcm_runtime { | |||
3101 | </section> | 3102 | </section> |
3102 | 3103 | ||
3103 | <section id="pcm-interface-interrupt-handler-timer"> | 3104 | <section id="pcm-interface-interrupt-handler-timer"> |
3104 | <title>High-frequent timer interrupts</title> | 3105 | <title>High frequency timer interrupts</title> |
3105 | <para> | 3106 | <para> |
3106 | This is the case when the hardware doesn't generate interrupts | 3107 | This happense when the hardware doesn't generate interrupts |
3107 | at the period boundary but do timer-interrupts at the fixed | 3108 | at the period boundary but issues timer interrupts at a fixed |
3108 | timer rate (e.g. es1968 or ymfpci drivers). | 3109 | timer rate (e.g. es1968 or ymfpci drivers). |
3109 | In this case, you need to check the current hardware | 3110 | In this case, you need to check the current hardware |
3110 | position and accumulates the processed sample length at each | 3111 | position and accumulate the processed sample length at each |
3111 | interrupt. When the accumulated size overcomes the period | 3112 | interrupt. When the accumulated size exceeds the period |
3112 | size, call | 3113 | size, call |
3113 | <function>snd_pcm_period_elapsed()</function> and reset the | 3114 | <function>snd_pcm_period_elapsed()</function> and reset the |
3114 | accumulator. | 3115 | accumulator. |
3115 | </para> | 3116 | </para> |
3116 | 3117 | ||
3117 | <para> | 3118 | <para> |
3118 | A typical coding would be like the following. | 3119 | Typical code would be like the following. |
3119 | 3120 | ||
3120 | <example> | 3121 | <example> |
3121 | <title>Interrupt Handler Case #2</title> | 3122 | <title>Interrupt Handler Case #2</title> |
@@ -3178,32 +3179,33 @@ struct _snd_pcm_runtime { | |||
3178 | <section id="pcm-interface-atomicity"> | 3179 | <section id="pcm-interface-atomicity"> |
3179 | <title>Atomicity</title> | 3180 | <title>Atomicity</title> |
3180 | <para> | 3181 | <para> |
3181 | One of the most important (and thus difficult to debug) problem | 3182 | One of the most important (and thus difficult to debug) problems |
3182 | on the kernel programming is the race condition. | 3183 | in kernel programming are race conditions. |
3183 | On linux kernel, usually it's solved via spin-locks or | 3184 | In the Linux kernel, they are usually avoided via spin-locks, mutexes |
3184 | semaphores. In general, if the race condition may | 3185 | or semaphores. In general, if a race condition can happen |
3185 | happen in the interrupt handler, it's handled as atomic, and you | 3186 | in an interrupt handler, it has to be managed atomically, and you |
3186 | have to use spinlock for protecting the critical session. If it | 3187 | have to use a spinlock to protect the critical session. If the |
3187 | never happens in the interrupt and it may take relatively long | 3188 | critical section is not in interrupt handler code and |
3188 | time, you should use semaphore. | 3189 | if taking a relatively long time to execute is acceptable, you |
3190 | should use mutexes or semaphores instead. | ||
3189 | </para> | 3191 | </para> |
3190 | 3192 | ||
3191 | <para> | 3193 | <para> |
3192 | As already seen, some pcm callbacks are atomic and some are | 3194 | As already seen, some pcm callbacks are atomic and some are |
3193 | not. For example, <parameter>hw_params</parameter> callback is | 3195 | not. For example, the <parameter>hw_params</parameter> callback is |
3194 | non-atomic, while <parameter>trigger</parameter> callback is | 3196 | non-atomic, while <parameter>trigger</parameter> callback is |
3195 | atomic. This means, the latter is called already in a spinlock | 3197 | atomic. This means, the latter is called already in a spinlock |
3196 | held by the PCM middle layer. Please take this atomicity into | 3198 | held by the PCM middle layer. Please take this atomicity into |
3197 | account when you use a spinlock or a semaphore in the callbacks. | 3199 | account when you choose a locking scheme in the callbacks. |
3198 | </para> | 3200 | </para> |
3199 | 3201 | ||
3200 | <para> | 3202 | <para> |
3201 | In the atomic callbacks, you cannot use functions which may call | 3203 | In the atomic callbacks, you cannot use functions which may call |
3202 | <function>schedule</function> or go to | 3204 | <function>schedule</function> or go to |
3203 | <function>sleep</function>. The semaphore and mutex do sleep, | 3205 | <function>sleep</function>. Semaphores and mutexes can sleep, |
3204 | and hence they cannot be used inside the atomic callbacks | 3206 | and hence they cannot be used inside the atomic callbacks |
3205 | (e.g. <parameter>trigger</parameter> callback). | 3207 | (e.g. <parameter>trigger</parameter> callback). |
3206 | For taking a certain delay in such a callback, please use | 3208 | To implement some delay in such a callback, please use |
3207 | <function>udelay()</function> or <function>mdelay()</function>. | 3209 | <function>udelay()</function> or <function>mdelay()</function>. |
3208 | </para> | 3210 | </para> |
3209 | 3211 | ||
@@ -3257,7 +3259,7 @@ struct _snd_pcm_runtime { | |||
3257 | 3259 | ||
3258 | <para> | 3260 | <para> |
3259 | There are many different constraints. | 3261 | There are many different constraints. |
3260 | Look in <filename>sound/pcm.h</filename> for a complete list. | 3262 | Look at <filename>sound/pcm.h</filename> for a complete list. |
3261 | You can even define your own constraint rules. | 3263 | You can even define your own constraint rules. |
3262 | For example, let's suppose my_chip can manage a substream of 1 channel | 3264 | For example, let's suppose my_chip can manage a substream of 1 channel |
3263 | if and only if the format is S16_LE, otherwise it supports any format | 3265 | if and only if the format is S16_LE, otherwise it supports any format |
@@ -3346,7 +3348,7 @@ struct _snd_pcm_runtime { | |||
3346 | </para> | 3348 | </para> |
3347 | 3349 | ||
3348 | <para> | 3350 | <para> |
3349 | I won't explain more details here, rather I | 3351 | I won't give more details here, rather I |
3350 | would like to say, <quote>Luke, use the source.</quote> | 3352 | would like to say, <quote>Luke, use the source.</quote> |
3351 | </para> | 3353 | </para> |
3352 | </section> | 3354 | </section> |
@@ -3364,10 +3366,9 @@ struct _snd_pcm_runtime { | |||
3364 | <title>General</title> | 3366 | <title>General</title> |
3365 | <para> | 3367 | <para> |
3366 | The control interface is used widely for many switches, | 3368 | The control interface is used widely for many switches, |
3367 | sliders, etc. which are accessed from the user-space. Its most | 3369 | sliders, etc. which are accessed from user-space. Its most |
3368 | important use is the mixer interface. In other words, on ALSA | 3370 | important use is the mixer interface. In other words, since ALSA |
3369 | 0.9.x, all the mixer stuff is implemented on the control kernel | 3371 | 0.9.x, all the mixer stuff is implemented on the control kernel API. |
3370 | API (while there was an independent mixer kernel API on 0.5.x). | ||
3371 | </para> | 3372 | </para> |
3372 | 3373 | ||
3373 | <para> | 3374 | <para> |
@@ -3379,14 +3380,15 @@ struct _snd_pcm_runtime { | |||
3379 | <para> | 3380 | <para> |
3380 | The control API is defined in | 3381 | The control API is defined in |
3381 | <filename><sound/control.h></filename>. | 3382 | <filename><sound/control.h></filename>. |
3382 | Include this file if you add your own controls. | 3383 | Include this file if you want to add your own controls. |
3383 | </para> | 3384 | </para> |
3384 | </section> | 3385 | </section> |
3385 | 3386 | ||
3386 | <section id="control-interface-definition"> | 3387 | <section id="control-interface-definition"> |
3387 | <title>Definition of Controls</title> | 3388 | <title>Definition of Controls</title> |
3388 | <para> | 3389 | <para> |
3389 | For creating a new control, you need to define the three | 3390 | To create a new control, you need to define the |
3391 | following three | ||
3390 | callbacks: <structfield>info</structfield>, | 3392 | callbacks: <structfield>info</structfield>, |
3391 | <structfield>get</structfield> and | 3393 | <structfield>get</structfield> and |
3392 | <structfield>put</structfield>. Then, define a | 3394 | <structfield>put</structfield>. Then, define a |
@@ -3414,13 +3416,13 @@ struct _snd_pcm_runtime { | |||
3414 | <para> | 3416 | <para> |
3415 | Most likely the control is created via | 3417 | Most likely the control is created via |
3416 | <function>snd_ctl_new1()</function>, and in such a case, you can | 3418 | <function>snd_ctl_new1()</function>, and in such a case, you can |
3417 | add <parameter>__devinitdata</parameter> prefix to the | 3419 | add the <parameter>__devinitdata</parameter> prefix to the |
3418 | definition like above. | 3420 | definition as above. |
3419 | </para> | 3421 | </para> |
3420 | 3422 | ||
3421 | <para> | 3423 | <para> |
3422 | The <structfield>iface</structfield> field specifies the type of | 3424 | The <structfield>iface</structfield> field specifies the control |
3423 | the control, <constant>SNDRV_CTL_ELEM_IFACE_XXX</constant>, which | 3425 | type, <constant>SNDRV_CTL_ELEM_IFACE_XXX</constant>, which |
3424 | is usually <constant>MIXER</constant>. | 3426 | is usually <constant>MIXER</constant>. |
3425 | Use <constant>CARD</constant> for global controls that are not | 3427 | Use <constant>CARD</constant> for global controls that are not |
3426 | logically part of the mixer. | 3428 | logically part of the mixer. |
@@ -3435,12 +3437,11 @@ struct _snd_pcm_runtime { | |||
3435 | 3437 | ||
3436 | <para> | 3438 | <para> |
3437 | The <structfield>name</structfield> is the name identifier | 3439 | The <structfield>name</structfield> is the name identifier |
3438 | string. On ALSA 0.9.x, the control name is very important, | 3440 | string. Since ALSA 0.9.x, the control name is very important, |
3439 | because its role is classified from its name. There are | 3441 | because its role is classified from its name. There are |
3440 | pre-defined standard control names. The details are described in | 3442 | pre-defined standard control names. The details are described in |
3441 | the subsection | 3443 | the <link linkend="control-interface-control-names"><citetitle> |
3442 | <link linkend="control-interface-control-names"><citetitle> | 3444 | Control Names</citetitle></link> subsection. |
3443 | Control Names</citetitle></link>. | ||
3444 | </para> | 3445 | </para> |
3445 | 3446 | ||
3446 | <para> | 3447 | <para> |
@@ -3456,15 +3457,15 @@ struct _snd_pcm_runtime { | |||
3456 | The <structfield>access</structfield> field contains the access | 3457 | The <structfield>access</structfield> field contains the access |
3457 | type of this control. Give the combination of bit masks, | 3458 | type of this control. Give the combination of bit masks, |
3458 | <constant>SNDRV_CTL_ELEM_ACCESS_XXX</constant>, there. | 3459 | <constant>SNDRV_CTL_ELEM_ACCESS_XXX</constant>, there. |
3459 | The detailed will be explained in the subsection | 3460 | The details will be explained in |
3460 | <link linkend="control-interface-access-flags"><citetitle> | 3461 | the <link linkend="control-interface-access-flags"><citetitle> |
3461 | Access Flags</citetitle></link>. | 3462 | Access Flags</citetitle></link> subsection. |
3462 | </para> | 3463 | </para> |
3463 | 3464 | ||
3464 | <para> | 3465 | <para> |
3465 | The <structfield>private_value</structfield> field contains | 3466 | The <structfield>private_value</structfield> field contains |
3466 | an arbitrary long integer value for this record. When using | 3467 | an arbitrary long integer value for this record. When using |
3467 | generic <structfield>info</structfield>, | 3468 | the generic <structfield>info</structfield>, |
3468 | <structfield>get</structfield> and | 3469 | <structfield>get</structfield> and |
3469 | <structfield>put</structfield> callbacks, you can pass a value | 3470 | <structfield>put</structfield> callbacks, you can pass a value |
3470 | through this field. If several small numbers are necessary, you can | 3471 | through this field. If several small numbers are necessary, you can |
@@ -3489,7 +3490,7 @@ struct _snd_pcm_runtime { | |||
3489 | <section id="control-interface-control-names"> | 3490 | <section id="control-interface-control-names"> |
3490 | <title>Control Names</title> | 3491 | <title>Control Names</title> |
3491 | <para> | 3492 | <para> |
3492 | There are some standards for defining the control names. A | 3493 | There are some standards to define the control names. A |
3493 | control is usually defined from the three parts as | 3494 | control is usually defined from the three parts as |
3494 | <quote>SOURCE DIRECTION FUNCTION</quote>. | 3495 | <quote>SOURCE DIRECTION FUNCTION</quote>. |
3495 | </para> | 3496 | </para> |
@@ -3497,7 +3498,7 @@ struct _snd_pcm_runtime { | |||
3497 | <para> | 3498 | <para> |
3498 | The first, <constant>SOURCE</constant>, specifies the source | 3499 | The first, <constant>SOURCE</constant>, specifies the source |
3499 | of the control, and is a string such as <quote>Master</quote>, | 3500 | of the control, and is a string such as <quote>Master</quote>, |
3500 | <quote>PCM</quote>, <quote>CD</quote> or | 3501 | <quote>PCM</quote>, <quote>CD</quote> and |
3501 | <quote>Line</quote>. There are many pre-defined sources. | 3502 | <quote>Line</quote>. There are many pre-defined sources. |
3502 | </para> | 3503 | </para> |
3503 | 3504 | ||
@@ -3575,22 +3576,22 @@ struct _snd_pcm_runtime { | |||
3575 | <title>Access Flags</title> | 3576 | <title>Access Flags</title> |
3576 | 3577 | ||
3577 | <para> | 3578 | <para> |
3578 | The access flag is the bit-flags which specifies the access type | 3579 | The access flag is the bitmask which specifies the access type |
3579 | of the given control. The default access type is | 3580 | of the given control. The default access type is |
3580 | <constant>SNDRV_CTL_ELEM_ACCESS_READWRITE</constant>, | 3581 | <constant>SNDRV_CTL_ELEM_ACCESS_READWRITE</constant>, |
3581 | which means both read and write are allowed to this control. | 3582 | which means both read and write are allowed to this control. |
3582 | When the access flag is omitted (i.e. = 0), it is | 3583 | When the access flag is omitted (i.e. = 0), it is |
3583 | regarded as <constant>READWRITE</constant> access as default. | 3584 | considered as <constant>READWRITE</constant> access as default. |
3584 | </para> | 3585 | </para> |
3585 | 3586 | ||
3586 | <para> | 3587 | <para> |
3587 | When the control is read-only, pass | 3588 | When the control is read-only, pass |
3588 | <constant>SNDRV_CTL_ELEM_ACCESS_READ</constant> instead. | 3589 | <constant>SNDRV_CTL_ELEM_ACCESS_READ</constant> instead. |
3589 | In this case, you don't have to define | 3590 | In this case, you don't have to define |
3590 | <structfield>put</structfield> callback. | 3591 | the <structfield>put</structfield> callback. |
3591 | Similarly, when the control is write-only (although it's a rare | 3592 | Similarly, when the control is write-only (although it's a rare |
3592 | case), you can use <constant>WRITE</constant> flag instead, and | 3593 | case), you can use the <constant>WRITE</constant> flag instead, and |
3593 | you don't need <structfield>get</structfield> callback. | 3594 | you don't need the <structfield>get</structfield> callback. |
3594 | </para> | 3595 | </para> |
3595 | 3596 | ||
3596 | <para> | 3597 | <para> |
@@ -3598,15 +3599,15 @@ struct _snd_pcm_runtime { | |||
3598 | <constant>VOLATILE</constant> flag should be given. This means | 3599 | <constant>VOLATILE</constant> flag should be given. This means |
3599 | that the control may be changed without | 3600 | that the control may be changed without |
3600 | <link linkend="control-interface-change-notification"><citetitle> | 3601 | <link linkend="control-interface-change-notification"><citetitle> |
3601 | notification</citetitle></link>. Applications should poll such | 3602 | notification</citetitle></link>. Applications should poll such |
3602 | a control constantly. | 3603 | a control constantly. |
3603 | </para> | 3604 | </para> |
3604 | 3605 | ||
3605 | <para> | 3606 | <para> |
3606 | When the control is inactive, set | 3607 | When the control is inactive, set |
3607 | <constant>INACTIVE</constant> flag, too. | 3608 | the <constant>INACTIVE</constant> flag, too. |
3608 | There are <constant>LOCK</constant> and | 3609 | There are <constant>LOCK</constant> and |
3609 | <constant>OWNER</constant> flags for changing the write | 3610 | <constant>OWNER</constant> flags to change the write |
3610 | permissions. | 3611 | permissions. |
3611 | </para> | 3612 | </para> |
3612 | 3613 | ||
@@ -3619,10 +3620,10 @@ struct _snd_pcm_runtime { | |||
3619 | <title>info callback</title> | 3620 | <title>info callback</title> |
3620 | <para> | 3621 | <para> |
3621 | The <structfield>info</structfield> callback is used to get | 3622 | The <structfield>info</structfield> callback is used to get |
3622 | the detailed information of this control. This must store the | 3623 | detailed information on this control. This must store the |
3623 | values of the given struct <structname>snd_ctl_elem_info</structname> | 3624 | values of the given struct <structname>snd_ctl_elem_info</structname> |
3624 | object. For example, for a boolean control with a single | 3625 | object. For example, for a boolean control with a single |
3625 | element will be: | 3626 | element: |
3626 | 3627 | ||
3627 | <example> | 3628 | <example> |
3628 | <title>Example of info callback</title> | 3629 | <title>Example of info callback</title> |
@@ -3653,7 +3654,7 @@ struct _snd_pcm_runtime { | |||
3653 | volume would have count = 2. The | 3654 | volume would have count = 2. The |
3654 | <structfield>value</structfield> field is a union, and | 3655 | <structfield>value</structfield> field is a union, and |
3655 | the values stored are depending on the type. The boolean and | 3656 | the values stored are depending on the type. The boolean and |
3656 | integer are identical. | 3657 | integer types are identical. |
3657 | </para> | 3658 | </para> |
3658 | 3659 | ||
3659 | <para> | 3660 | <para> |
@@ -3684,7 +3685,7 @@ struct _snd_pcm_runtime { | |||
3684 | </para> | 3685 | </para> |
3685 | 3686 | ||
3686 | <para> | 3687 | <para> |
3687 | Some common info callbacks are prepared for easy use: | 3688 | Some common info callbacks are available for your convenience: |
3688 | <function>snd_ctl_boolean_mono_info()</function> and | 3689 | <function>snd_ctl_boolean_mono_info()</function> and |
3689 | <function>snd_ctl_boolean_stereo_info()</function>. | 3690 | <function>snd_ctl_boolean_stereo_info()</function>. |
3690 | Obviously, the former is an info callback for a mono channel | 3691 | Obviously, the former is an info callback for a mono channel |
@@ -3699,7 +3700,7 @@ struct _snd_pcm_runtime { | |||
3699 | 3700 | ||
3700 | <para> | 3701 | <para> |
3701 | This callback is used to read the current value of the | 3702 | This callback is used to read the current value of the |
3702 | control and to return to the user-space. | 3703 | control and to return to user-space. |
3703 | </para> | 3704 | </para> |
3704 | 3705 | ||
3705 | <para> | 3706 | <para> |
@@ -3722,11 +3723,11 @@ struct _snd_pcm_runtime { | |||
3722 | </para> | 3723 | </para> |
3723 | 3724 | ||
3724 | <para> | 3725 | <para> |
3725 | The <structfield>value</structfield> field is depending on | 3726 | The <structfield>value</structfield> field depends on |
3726 | the type of control as well as on info callback. For example, | 3727 | the type of control as well as on the info callback. For example, |
3727 | the sb driver uses this field to store the register offset, | 3728 | the sb driver uses this field to store the register offset, |
3728 | the bit-shift and the bit-mask. The | 3729 | the bit-shift and the bit-mask. The |
3729 | <structfield>private_value</structfield> is set like | 3730 | <structfield>private_value</structfield> field is set as follows: |
3730 | <informalexample> | 3731 | <informalexample> |
3731 | <programlisting> | 3732 | <programlisting> |
3732 | <![CDATA[ | 3733 | <![CDATA[ |
@@ -3752,7 +3753,8 @@ struct _snd_pcm_runtime { | |||
3752 | </para> | 3753 | </para> |
3753 | 3754 | ||
3754 | <para> | 3755 | <para> |
3755 | In <structfield>get</structfield> callback, you have to fill all the elements if the | 3756 | In the <structfield>get</structfield> callback, |
3757 | you have to fill all the elements if the | ||
3756 | control has more than one elements, | 3758 | control has more than one elements, |
3757 | i.e. <structfield>count</structfield> > 1. | 3759 | i.e. <structfield>count</structfield> > 1. |
3758 | In the example above, we filled only one element | 3760 | In the example above, we filled only one element |
@@ -3765,7 +3767,7 @@ struct _snd_pcm_runtime { | |||
3765 | <title>put callback</title> | 3767 | <title>put callback</title> |
3766 | 3768 | ||
3767 | <para> | 3769 | <para> |
3768 | This callback is used to write a value from the user-space. | 3770 | This callback is used to write a value from user-space. |
3769 | </para> | 3771 | </para> |
3770 | 3772 | ||
3771 | <para> | 3773 | <para> |
@@ -3799,7 +3801,7 @@ struct _snd_pcm_runtime { | |||
3799 | </para> | 3801 | </para> |
3800 | 3802 | ||
3801 | <para> | 3803 | <para> |
3802 | Like <structfield>get</structfield> callback, | 3804 | As in the <structfield>get</structfield> callback, |
3803 | when the control has more than one elements, | 3805 | when the control has more than one elements, |
3804 | all elements must be evaluated in this callback, too. | 3806 | all elements must be evaluated in this callback, too. |
3805 | </para> | 3807 | </para> |
@@ -3817,7 +3819,7 @@ struct _snd_pcm_runtime { | |||
3817 | <title>Constructor</title> | 3819 | <title>Constructor</title> |
3818 | <para> | 3820 | <para> |
3819 | When everything is ready, finally we can create a new | 3821 | When everything is ready, finally we can create a new |
3820 | control. For creating a control, there are two functions to be | 3822 | control. To create a control, there are two functions to be |
3821 | called, <function>snd_ctl_new1()</function> and | 3823 | called, <function>snd_ctl_new1()</function> and |
3822 | <function>snd_ctl_add()</function>. | 3824 | <function>snd_ctl_add()</function>. |
3823 | </para> | 3825 | </para> |
@@ -3839,14 +3841,14 @@ struct _snd_pcm_runtime { | |||
3839 | struct <structname>snd_kcontrol_new</structname> object defined above, and chip | 3841 | struct <structname>snd_kcontrol_new</structname> object defined above, and chip |
3840 | is the object pointer to be passed to | 3842 | is the object pointer to be passed to |
3841 | kcontrol->private_data | 3843 | kcontrol->private_data |
3842 | which can be referred in callbacks. | 3844 | which can be referred to in callbacks. |
3843 | </para> | 3845 | </para> |
3844 | 3846 | ||
3845 | <para> | 3847 | <para> |
3846 | <function>snd_ctl_new1()</function> allocates a new | 3848 | <function>snd_ctl_new1()</function> allocates a new |
3847 | <structname>snd_kcontrol</structname> instance (that's why the definition | 3849 | <structname>snd_kcontrol</structname> instance (that's why the definition |
3848 | of <parameter>my_control</parameter> can be with | 3850 | of <parameter>my_control</parameter> can be with |
3849 | <parameter>__devinitdata</parameter> | 3851 | the <parameter>__devinitdata</parameter> |
3850 | prefix), and <function>snd_ctl_add</function> assigns the given | 3852 | prefix), and <function>snd_ctl_add</function> assigns the given |
3851 | control component to the card. | 3853 | control component to the card. |
3852 | </para> | 3854 | </para> |
@@ -3941,7 +3943,7 @@ struct _snd_pcm_runtime { | |||
3941 | <title>General</title> | 3943 | <title>General</title> |
3942 | <para> | 3944 | <para> |
3943 | The ALSA AC97 codec layer is a well-defined one, and you don't | 3945 | The ALSA AC97 codec layer is a well-defined one, and you don't |
3944 | have to write many codes to control it. Only low-level control | 3946 | have to write much code to control it. Only low-level control |
3945 | routines are necessary. The AC97 codec API is defined in | 3947 | routines are necessary. The AC97 codec API is defined in |
3946 | <filename><sound/ac97_codec.h></filename>. | 3948 | <filename><sound/ac97_codec.h></filename>. |
3947 | </para> | 3949 | </para> |
@@ -4004,7 +4006,7 @@ struct _snd_pcm_runtime { | |||
4004 | <section id="api-ac97-constructor"> | 4006 | <section id="api-ac97-constructor"> |
4005 | <title>Constructor</title> | 4007 | <title>Constructor</title> |
4006 | <para> | 4008 | <para> |
4007 | For creating an ac97 instance, first call <function>snd_ac97_bus</function> | 4009 | To create an ac97 instance, first call <function>snd_ac97_bus</function> |
4008 | with an <type>ac97_bus_ops_t</type> record with callback functions. | 4010 | with an <type>ac97_bus_ops_t</type> record with callback functions. |
4009 | 4011 | ||
4010 | <informalexample> | 4012 | <informalexample> |
@@ -4042,12 +4044,12 @@ struct _snd_pcm_runtime { | |||
4042 | </programlisting> | 4044 | </programlisting> |
4043 | </informalexample> | 4045 | </informalexample> |
4044 | 4046 | ||
4045 | where chip->ac97 is the pointer of a newly created | 4047 | where chip->ac97 is a pointer to a newly created |
4046 | <type>ac97_t</type> instance. | 4048 | <type>ac97_t</type> instance. |
4047 | In this case, the chip pointer is set as the private data, so that | 4049 | In this case, the chip pointer is set as the private data, so that |
4048 | the read/write callback functions can refer to this chip instance. | 4050 | the read/write callback functions can refer to this chip instance. |
4049 | This instance is not necessarily stored in the chip | 4051 | This instance is not necessarily stored in the chip |
4050 | record. When you need to change the register values from the | 4052 | record. If you need to change the register values from the |
4051 | driver, or need the suspend/resume of ac97 codecs, keep this | 4053 | driver, or need the suspend/resume of ac97 codecs, keep this |
4052 | pointer to pass to the corresponding functions. | 4054 | pointer to pass to the corresponding functions. |
4053 | </para> | 4055 | </para> |
@@ -4098,7 +4100,7 @@ struct _snd_pcm_runtime { | |||
4098 | </para> | 4100 | </para> |
4099 | 4101 | ||
4100 | <para> | 4102 | <para> |
4101 | These callbacks are non-atomic like the callbacks of control API. | 4103 | These callbacks are non-atomic like the control API callbacks. |
4102 | </para> | 4104 | </para> |
4103 | 4105 | ||
4104 | <para> | 4106 | <para> |
@@ -4110,14 +4112,14 @@ struct _snd_pcm_runtime { | |||
4110 | 4112 | ||
4111 | <para> | 4113 | <para> |
4112 | The <structfield>reset</structfield> callback is used to reset | 4114 | The <structfield>reset</structfield> callback is used to reset |
4113 | the codec. If the chip requires a special way of reset, you can | 4115 | the codec. If the chip requires a special kind of reset, you can |
4114 | define this callback. | 4116 | define this callback. |
4115 | </para> | 4117 | </para> |
4116 | 4118 | ||
4117 | <para> | 4119 | <para> |
4118 | The <structfield>wait</structfield> callback is used for a | 4120 | The <structfield>wait</structfield> callback is used to |
4119 | certain wait at the standard initialization of the codec. If the | 4121 | add some waiting time in the standard initialization of the codec. If the |
4120 | chip requires the extra wait-time, define this callback. | 4122 | chip requires the extra waiting time, define this callback. |
4121 | </para> | 4123 | </para> |
4122 | 4124 | ||
4123 | <para> | 4125 | <para> |
@@ -4172,7 +4174,7 @@ struct _snd_pcm_runtime { | |||
4172 | 4174 | ||
4173 | <para> | 4175 | <para> |
4174 | <function>snd_ac97_update_bits()</function> is used to update | 4176 | <function>snd_ac97_update_bits()</function> is used to update |
4175 | some bits of the given register. | 4177 | some bits in the given register. |
4176 | 4178 | ||
4177 | <informalexample> | 4179 | <informalexample> |
4178 | <programlisting> | 4180 | <programlisting> |
@@ -4185,7 +4187,7 @@ struct _snd_pcm_runtime { | |||
4185 | 4187 | ||
4186 | <para> | 4188 | <para> |
4187 | Also, there is a function to change the sample rate (of a | 4189 | Also, there is a function to change the sample rate (of a |
4188 | certain register such as | 4190 | given register such as |
4189 | <constant>AC97_PCM_FRONT_DAC_RATE</constant>) when VRA or | 4191 | <constant>AC97_PCM_FRONT_DAC_RATE</constant>) when VRA or |
4190 | DRA is supported by the codec: | 4192 | DRA is supported by the codec: |
4191 | <function>snd_ac97_set_rate()</function>. | 4193 | <function>snd_ac97_set_rate()</function>. |
@@ -4200,11 +4202,11 @@ struct _snd_pcm_runtime { | |||
4200 | </para> | 4202 | </para> |
4201 | 4203 | ||
4202 | <para> | 4204 | <para> |
4203 | The following registers are available for setting the rate: | 4205 | The following registers are available to set the rate: |
4204 | <constant>AC97_PCM_MIC_ADC_RATE</constant>, | 4206 | <constant>AC97_PCM_MIC_ADC_RATE</constant>, |
4205 | <constant>AC97_PCM_FRONT_DAC_RATE</constant>, | 4207 | <constant>AC97_PCM_FRONT_DAC_RATE</constant>, |
4206 | <constant>AC97_PCM_LR_ADC_RATE</constant>, | 4208 | <constant>AC97_PCM_LR_ADC_RATE</constant>, |
4207 | <constant>AC97_SPDIF</constant>. When the | 4209 | <constant>AC97_SPDIF</constant>. When |
4208 | <constant>AC97_SPDIF</constant> is specified, the register is | 4210 | <constant>AC97_SPDIF</constant> is specified, the register is |
4209 | not really changed but the corresponding IEC958 status bits will | 4211 | not really changed but the corresponding IEC958 status bits will |
4210 | be updated. | 4212 | be updated. |
@@ -4214,12 +4216,11 @@ struct _snd_pcm_runtime { | |||
4214 | <section id="api-ac97-clock-adjustment"> | 4216 | <section id="api-ac97-clock-adjustment"> |
4215 | <title>Clock Adjustment</title> | 4217 | <title>Clock Adjustment</title> |
4216 | <para> | 4218 | <para> |
4217 | On some chip, the clock of the codec isn't 48000 but using a | 4219 | In some chips, the clock of the codec isn't 48000 but using a |
4218 | PCI clock (to save a quartz!). In this case, change the field | 4220 | PCI clock (to save a quartz!). In this case, change the field |
4219 | bus->clock to the corresponding | 4221 | bus->clock to the corresponding |
4220 | value. For example, intel8x0 | 4222 | value. For example, intel8x0 |
4221 | and es1968 drivers have the auto-measurement function of the | 4223 | and es1968 drivers have their own function to read from the clock. |
4222 | clock. | ||
4223 | </para> | 4224 | </para> |
4224 | </section> | 4225 | </section> |
4225 | 4226 | ||
@@ -4239,15 +4240,13 @@ struct _snd_pcm_runtime { | |||
4239 | When there are several codecs on the same card, you need to | 4240 | When there are several codecs on the same card, you need to |
4240 | call <function>snd_ac97_mixer()</function> multiple times with | 4241 | call <function>snd_ac97_mixer()</function> multiple times with |
4241 | ac97.num=1 or greater. The <structfield>num</structfield> field | 4242 | ac97.num=1 or greater. The <structfield>num</structfield> field |
4242 | specifies the codec | 4243 | specifies the codec number. |
4243 | number. | ||
4244 | </para> | 4244 | </para> |
4245 | 4245 | ||
4246 | <para> | 4246 | <para> |
4247 | If you have set up multiple codecs, you need to either write | 4247 | If you set up multiple codecs, you either need to write |
4248 | different callbacks for each codec or check | 4248 | different callbacks for each codec or check |
4249 | ac97->num in the | 4249 | ac97->num in the callback routines. |
4250 | callback routines. | ||
4251 | </para> | 4250 | </para> |
4252 | </section> | 4251 | </section> |
4253 | 4252 | ||
@@ -4271,7 +4270,7 @@ struct _snd_pcm_runtime { | |||
4271 | </para> | 4270 | </para> |
4272 | 4271 | ||
4273 | <para> | 4272 | <para> |
4274 | Some soundchips have similar but a little bit different | 4273 | Some soundchips have a similar but slightly different |
4275 | implementation of mpu401 stuff. For example, emu10k1 has its own | 4274 | implementation of mpu401 stuff. For example, emu10k1 has its own |
4276 | mpu401 routines. | 4275 | mpu401 routines. |
4277 | </para> | 4276 | </para> |
@@ -4280,7 +4279,7 @@ struct _snd_pcm_runtime { | |||
4280 | <section id="midi-interface-constructor"> | 4279 | <section id="midi-interface-constructor"> |
4281 | <title>Constructor</title> | 4280 | <title>Constructor</title> |
4282 | <para> | 4281 | <para> |
4283 | For creating a rawmidi object, call | 4282 | To create a rawmidi object, call |
4284 | <function>snd_mpu401_uart_new()</function>. | 4283 | <function>snd_mpu401_uart_new()</function>. |
4285 | 4284 | ||
4286 | <informalexample> | 4285 | <informalexample> |
@@ -4307,25 +4306,24 @@ struct _snd_pcm_runtime { | |||
4307 | </para> | 4306 | </para> |
4308 | 4307 | ||
4309 | <para> | 4308 | <para> |
4310 | The 4th argument is the i/o port address. Many | 4309 | The 4th argument is the I/O port address. Many |
4311 | backward-compatible MPU401 has an i/o port such as 0x330. Or, it | 4310 | backward-compatible MPU401 have an I/O port such as 0x330. Or, it |
4312 | might be a part of its own PCI i/o region. It depends on the | 4311 | might be a part of its own PCI I/O region. It depends on the |
4313 | chip design. | 4312 | chip design. |
4314 | </para> | 4313 | </para> |
4315 | 4314 | ||
4316 | <para> | 4315 | <para> |
4317 | The 5th argument is bitflags for additional information. | 4316 | The 5th argument is a bitflag for additional information. |
4318 | When the i/o port address above is a part of the PCI i/o | 4317 | When the I/O port address above is part of the PCI I/O |
4319 | region, the MPU401 i/o port might have been already allocated | 4318 | region, the MPU401 I/O port might have been already allocated |
4320 | (reserved) by the driver itself. In such a case, pass a bit flag | 4319 | (reserved) by the driver itself. In such a case, pass a bit flag |
4321 | <constant>MPU401_INFO_INTEGRATED</constant>, | 4320 | <constant>MPU401_INFO_INTEGRATED</constant>, |
4322 | and | 4321 | and the mpu401-uart layer will allocate the I/O ports by itself. |
4323 | the mpu401-uart layer will allocate the i/o ports by itself. | ||
4324 | </para> | 4322 | </para> |
4325 | 4323 | ||
4326 | <para> | 4324 | <para> |
4327 | When the controller supports only the input or output MIDI stream, | 4325 | When the controller supports only the input or output MIDI stream, |
4328 | pass <constant>MPU401_INFO_INPUT</constant> or | 4326 | pass the <constant>MPU401_INFO_INPUT</constant> or |
4329 | <constant>MPU401_INFO_OUTPUT</constant> bitflag, respectively. | 4327 | <constant>MPU401_INFO_OUTPUT</constant> bitflag, respectively. |
4330 | Then the rawmidi instance is created as a single stream. | 4328 | Then the rawmidi instance is created as a single stream. |
4331 | </para> | 4329 | </para> |
@@ -4333,7 +4331,7 @@ struct _snd_pcm_runtime { | |||
4333 | <para> | 4331 | <para> |
4334 | <constant>MPU401_INFO_MMIO</constant> bitflag is used to change | 4332 | <constant>MPU401_INFO_MMIO</constant> bitflag is used to change |
4335 | the access method to MMIO (via readb and writeb) instead of | 4333 | the access method to MMIO (via readb and writeb) instead of |
4336 | iob and outb. In this case, you have to pass the iomapped address | 4334 | iob and outb. In this case, you have to pass the iomapped address |
4337 | to <function>snd_mpu401_uart_new()</function>. | 4335 | to <function>snd_mpu401_uart_new()</function>. |
4338 | </para> | 4336 | </para> |
4339 | 4337 | ||
@@ -4341,7 +4339,7 @@ struct _snd_pcm_runtime { | |||
4341 | When <constant>MPU401_INFO_TX_IRQ</constant> is set, the output | 4339 | When <constant>MPU401_INFO_TX_IRQ</constant> is set, the output |
4342 | stream isn't checked in the default interrupt handler. The driver | 4340 | stream isn't checked in the default interrupt handler. The driver |
4343 | needs to call <function>snd_mpu401_uart_interrupt_tx()</function> | 4341 | needs to call <function>snd_mpu401_uart_interrupt_tx()</function> |
4344 | by itself to start processing the output stream in irq handler. | 4342 | by itself to start processing the output stream in the irq handler. |
4345 | </para> | 4343 | </para> |
4346 | 4344 | ||
4347 | <para> | 4345 | <para> |
@@ -4381,7 +4379,7 @@ struct _snd_pcm_runtime { | |||
4381 | (<parameter>irq_flags</parameter>). Otherwise, pass the flags | 4379 | (<parameter>irq_flags</parameter>). Otherwise, pass the flags |
4382 | for irq allocation | 4380 | for irq allocation |
4383 | (<constant>SA_XXX</constant> bits) to it, and the irq will be | 4381 | (<constant>SA_XXX</constant> bits) to it, and the irq will be |
4384 | reserved by the mpu401-uart layer. If the card doesn't generates | 4382 | reserved by the mpu401-uart layer. If the card doesn't generate |
4385 | UART interrupts, pass -1 as the irq number. Then a timer | 4383 | UART interrupts, pass -1 as the irq number. Then a timer |
4386 | interrupt will be invoked for polling. | 4384 | interrupt will be invoked for polling. |
4387 | </para> | 4385 | </para> |
@@ -4392,8 +4390,8 @@ struct _snd_pcm_runtime { | |||
4392 | <para> | 4390 | <para> |
4393 | When the interrupt is allocated in | 4391 | When the interrupt is allocated in |
4394 | <function>snd_mpu401_uart_new()</function>, the private | 4392 | <function>snd_mpu401_uart_new()</function>, the private |
4395 | interrupt handler is used, hence you don't have to do nothing | 4393 | interrupt handler is used, hence you don't have anything else to do |
4396 | else than creating the mpu401 stuff. Otherwise, you have to call | 4394 | than creating the mpu401 stuff. Otherwise, you have to call |
4397 | <function>snd_mpu401_uart_interrupt()</function> explicitly when | 4395 | <function>snd_mpu401_uart_interrupt()</function> explicitly when |
4398 | a UART interrupt is invoked and checked in your own interrupt | 4396 | a UART interrupt is invoked and checked in your own interrupt |
4399 | handler. | 4397 | handler. |
@@ -4480,8 +4478,8 @@ struct _snd_pcm_runtime { | |||
4480 | 4478 | ||
4481 | <para> | 4479 | <para> |
4482 | The fourth and fifth arguments are the number of output and | 4480 | The fourth and fifth arguments are the number of output and |
4483 | input substreams, respectively, of this device. (A substream is | 4481 | input substreams, respectively, of this device (a substream is |
4484 | the equivalent of a MIDI port.) | 4482 | the equivalent of a MIDI port). |
4485 | </para> | 4483 | </para> |
4486 | 4484 | ||
4487 | <para> | 4485 | <para> |
@@ -4498,7 +4496,7 @@ struct _snd_pcm_runtime { | |||
4498 | <para> | 4496 | <para> |
4499 | After the rawmidi device is created, you need to set the | 4497 | After the rawmidi device is created, you need to set the |
4500 | operators (callbacks) for each substream. There are helper | 4498 | operators (callbacks) for each substream. There are helper |
4501 | functions to set the operators for all substream of a device: | 4499 | functions to set the operators for all the substreams of a device: |
4502 | <informalexample> | 4500 | <informalexample> |
4503 | <programlisting> | 4501 | <programlisting> |
4504 | <![CDATA[ | 4502 | <![CDATA[ |
@@ -4528,8 +4526,8 @@ struct _snd_pcm_runtime { | |||
4528 | </para> | 4526 | </para> |
4529 | 4527 | ||
4530 | <para> | 4528 | <para> |
4531 | If there is more than one substream, you should give each one a | 4529 | If there are more than one substream, you should give a |
4532 | unique name: | 4530 | unique name to each of them: |
4533 | <informalexample> | 4531 | <informalexample> |
4534 | <programlisting> | 4532 | <programlisting> |
4535 | <![CDATA[ | 4533 | <![CDATA[ |
@@ -4550,7 +4548,7 @@ struct _snd_pcm_runtime { | |||
4550 | <title>Callbacks</title> | 4548 | <title>Callbacks</title> |
4551 | 4549 | ||
4552 | <para> | 4550 | <para> |
4553 | In all callbacks, the private data that you've set for the | 4551 | In all the callbacks, the private data that you've set for the |
4554 | rawmidi device can be accessed as | 4552 | rawmidi device can be accessed as |
4555 | substream->rmidi->private_data. | 4553 | substream->rmidi->private_data. |
4556 | <!-- <code> isn't available before DocBook 4.3 --> | 4554 | <!-- <code> isn't available before DocBook 4.3 --> |
@@ -4583,8 +4581,8 @@ struct _snd_pcm_runtime { | |||
4583 | 4581 | ||
4584 | <para> | 4582 | <para> |
4585 | This is called when a substream is opened. | 4583 | This is called when a substream is opened. |
4586 | You can initialize the hardware here, but you should not yet | 4584 | You can initialize the hardware here, but you shouldn't |
4587 | start transmitting/receiving data. | 4585 | start transmitting/receiving data yet. |
4588 | </para> | 4586 | </para> |
4589 | </section> | 4587 | </section> |
4590 | 4588 | ||
@@ -4632,9 +4630,9 @@ struct _snd_pcm_runtime { | |||
4632 | To read data from the buffer, call | 4630 | To read data from the buffer, call |
4633 | <function>snd_rawmidi_transmit_peek</function>. It will | 4631 | <function>snd_rawmidi_transmit_peek</function>. It will |
4634 | return the number of bytes that have been read; this will be | 4632 | return the number of bytes that have been read; this will be |
4635 | less than the number of bytes requested when there is no more | 4633 | less than the number of bytes requested when there are no more |
4636 | data in the buffer. | 4634 | data in the buffer. |
4637 | After the data has been transmitted successfully, call | 4635 | After the data have been transmitted successfully, call |
4638 | <function>snd_rawmidi_transmit_ack</function> to remove the | 4636 | <function>snd_rawmidi_transmit_ack</function> to remove the |
4639 | data from the substream buffer: | 4637 | data from the substream buffer: |
4640 | <informalexample> | 4638 | <informalexample> |
@@ -4655,7 +4653,7 @@ struct _snd_pcm_runtime { | |||
4655 | <para> | 4653 | <para> |
4656 | If you know beforehand that the hardware will accept data, you | 4654 | If you know beforehand that the hardware will accept data, you |
4657 | can use the <function>snd_rawmidi_transmit</function> function | 4655 | can use the <function>snd_rawmidi_transmit</function> function |
4658 | which reads some data and removes it from the buffer at once: | 4656 | which reads some data and removes them from the buffer at once: |
4659 | <informalexample> | 4657 | <informalexample> |
4660 | <programlisting> | 4658 | <programlisting> |
4661 | <![CDATA[ | 4659 | <![CDATA[ |
@@ -4749,13 +4747,13 @@ struct _snd_pcm_runtime { | |||
4749 | 4747 | ||
4750 | <para> | 4748 | <para> |
4751 | This is only used with output substreams. This function should wait | 4749 | This is only used with output substreams. This function should wait |
4752 | until all data read from the substream buffer has been transmitted. | 4750 | until all data read from the substream buffer have been transmitted. |
4753 | This ensures that the device can be closed and the driver unloaded | 4751 | This ensures that the device can be closed and the driver unloaded |
4754 | without losing data. | 4752 | without losing data. |
4755 | </para> | 4753 | </para> |
4756 | 4754 | ||
4757 | <para> | 4755 | <para> |
4758 | This callback is optional. If you do not set | 4756 | This callback is optional. If you do not set |
4759 | <structfield>drain</structfield> in the struct snd_rawmidi_ops | 4757 | <structfield>drain</structfield> in the struct snd_rawmidi_ops |
4760 | structure, ALSA will simply wait for 50 milliseconds | 4758 | structure, ALSA will simply wait for 50 milliseconds |
4761 | instead. | 4759 | instead. |
@@ -4775,24 +4773,24 @@ struct _snd_pcm_runtime { | |||
4775 | <section id="misc-devices-opl3"> | 4773 | <section id="misc-devices-opl3"> |
4776 | <title>FM OPL3</title> | 4774 | <title>FM OPL3</title> |
4777 | <para> | 4775 | <para> |
4778 | The FM OPL3 is still used on many chips (mainly for backward | 4776 | The FM OPL3 is still used in many chips (mainly for backward |
4779 | compatibility). ALSA has a nice OPL3 FM control layer, too. The | 4777 | compatibility). ALSA has a nice OPL3 FM control layer, too. The |
4780 | OPL3 API is defined in | 4778 | OPL3 API is defined in |
4781 | <filename><sound/opl3.h></filename>. | 4779 | <filename><sound/opl3.h></filename>. |
4782 | </para> | 4780 | </para> |
4783 | 4781 | ||
4784 | <para> | 4782 | <para> |
4785 | FM registers can be directly accessed through direct-FM API, | 4783 | FM registers can be directly accessed through the direct-FM API, |
4786 | defined in <filename><sound/asound_fm.h></filename>. In | 4784 | defined in <filename><sound/asound_fm.h></filename>. In |
4787 | ALSA native mode, FM registers are accessed through | 4785 | ALSA native mode, FM registers are accessed through |
4788 | Hardware-Dependant Device direct-FM extension API, whereas in | 4786 | the Hardware-Dependant Device direct-FM extension API, whereas in |
4789 | OSS compatible mode, FM registers can be accessed with OSS | 4787 | OSS compatible mode, FM registers can be accessed with the OSS |
4790 | direct-FM compatible API on <filename>/dev/dmfmX</filename> device. | 4788 | direct-FM compatible API in <filename>/dev/dmfmX</filename> device. |
4791 | </para> | 4789 | </para> |
4792 | 4790 | ||
4793 | <para> | 4791 | <para> |
4794 | For creating the OPL3 component, you have two functions to | 4792 | To create the OPL3 component, you have two functions to |
4795 | call. The first one is a constructor for <type>opl3_t</type> | 4793 | call. The first one is a constructor for the <type>opl3_t</type> |
4796 | instance. | 4794 | instance. |
4797 | 4795 | ||
4798 | <informalexample> | 4796 | <informalexample> |
@@ -4819,12 +4817,12 @@ struct _snd_pcm_runtime { | |||
4819 | <para> | 4817 | <para> |
4820 | When the left and right ports have been already allocated by | 4818 | When the left and right ports have been already allocated by |
4821 | the card driver, pass non-zero to the fifth argument | 4819 | the card driver, pass non-zero to the fifth argument |
4822 | (<parameter>integrated</parameter>). Otherwise, opl3 module will | 4820 | (<parameter>integrated</parameter>). Otherwise, the opl3 module will |
4823 | allocate the specified ports by itself. | 4821 | allocate the specified ports by itself. |
4824 | </para> | 4822 | </para> |
4825 | 4823 | ||
4826 | <para> | 4824 | <para> |
4827 | When the accessing to the hardware requires special method | 4825 | When the accessing the hardware requires special method |
4828 | instead of the standard I/O access, you can create opl3 instance | 4826 | instead of the standard I/O access, you can create opl3 instance |
4829 | separately with <function>snd_opl3_new()</function>. | 4827 | separately with <function>snd_opl3_new()</function>. |
4830 | 4828 | ||
@@ -4845,13 +4843,13 @@ struct _snd_pcm_runtime { | |||
4845 | access function, the private data and the destructor. | 4843 | access function, the private data and the destructor. |
4846 | The l_port and r_port are not necessarily set. Only the | 4844 | The l_port and r_port are not necessarily set. Only the |
4847 | command must be set properly. You can retrieve the data | 4845 | command must be set properly. You can retrieve the data |
4848 | from opl3->private_data field. | 4846 | from the opl3->private_data field. |
4849 | </para> | 4847 | </para> |
4850 | 4848 | ||
4851 | <para> | 4849 | <para> |
4852 | After creating the opl3 instance via <function>snd_opl3_new()</function>, | 4850 | After creating the opl3 instance via <function>snd_opl3_new()</function>, |
4853 | call <function>snd_opl3_init()</function> to initialize the chip to the | 4851 | call <function>snd_opl3_init()</function> to initialize the chip to the |
4854 | proper state. Note that <function>snd_opl3_create()</function> always | 4852 | proper state. Note that <function>snd_opl3_create()</function> always |
4855 | calls it internally. | 4853 | calls it internally. |
4856 | </para> | 4854 | </para> |
4857 | 4855 | ||
@@ -4884,7 +4882,7 @@ struct _snd_pcm_runtime { | |||
4884 | <section id="misc-devices-hardware-dependent"> | 4882 | <section id="misc-devices-hardware-dependent"> |
4885 | <title>Hardware-Dependent Devices</title> | 4883 | <title>Hardware-Dependent Devices</title> |
4886 | <para> | 4884 | <para> |
4887 | Some chips need the access from the user-space for special | 4885 | Some chips need user-space access for special |
4888 | controls or for loading the micro code. In such a case, you can | 4886 | controls or for loading the micro code. In such a case, you can |
4889 | create a hwdep (hardware-dependent) device. The hwdep API is | 4887 | create a hwdep (hardware-dependent) device. The hwdep API is |
4890 | defined in <filename><sound/hwdep.h></filename>. You can | 4888 | defined in <filename><sound/hwdep.h></filename>. You can |
@@ -4893,7 +4891,7 @@ struct _snd_pcm_runtime { | |||
4893 | </para> | 4891 | </para> |
4894 | 4892 | ||
4895 | <para> | 4893 | <para> |
4896 | Creation of the <type>hwdep</type> instance is done via | 4894 | The creation of the <type>hwdep</type> instance is done via |
4897 | <function>snd_hwdep_new()</function>. | 4895 | <function>snd_hwdep_new()</function>. |
4898 | 4896 | ||
4899 | <informalexample> | 4897 | <informalexample> |
@@ -4912,8 +4910,8 @@ struct _snd_pcm_runtime { | |||
4912 | You can then pass any pointer value to the | 4910 | You can then pass any pointer value to the |
4913 | <parameter>private_data</parameter>. | 4911 | <parameter>private_data</parameter>. |
4914 | If you assign a private data, you should define the | 4912 | If you assign a private data, you should define the |
4915 | destructor, too. The destructor function is set to | 4913 | destructor, too. The destructor function is set in |
4916 | <structfield>private_free</structfield> field. | 4914 | the <structfield>private_free</structfield> field. |
4917 | 4915 | ||
4918 | <informalexample> | 4916 | <informalexample> |
4919 | <programlisting> | 4917 | <programlisting> |
@@ -4925,7 +4923,7 @@ struct _snd_pcm_runtime { | |||
4925 | </programlisting> | 4923 | </programlisting> |
4926 | </informalexample> | 4924 | </informalexample> |
4927 | 4925 | ||
4928 | and the implementation of destructor would be: | 4926 | and the implementation of the destructor would be: |
4929 | 4927 | ||
4930 | <informalexample> | 4928 | <informalexample> |
4931 | <programlisting> | 4929 | <programlisting> |
@@ -4943,7 +4941,7 @@ struct _snd_pcm_runtime { | |||
4943 | <para> | 4941 | <para> |
4944 | The arbitrary file operations can be defined for this | 4942 | The arbitrary file operations can be defined for this |
4945 | instance. The file operators are defined in | 4943 | instance. The file operators are defined in |
4946 | <parameter>ops</parameter> table. For example, assume that | 4944 | the <parameter>ops</parameter> table. For example, assume that |
4947 | this chip needs an ioctl. | 4945 | this chip needs an ioctl. |
4948 | 4946 | ||
4949 | <informalexample> | 4947 | <informalexample> |
@@ -4964,7 +4962,7 @@ struct _snd_pcm_runtime { | |||
4964 | <title>IEC958 (S/PDIF)</title> | 4962 | <title>IEC958 (S/PDIF)</title> |
4965 | <para> | 4963 | <para> |
4966 | Usually the controls for IEC958 devices are implemented via | 4964 | Usually the controls for IEC958 devices are implemented via |
4967 | control interface. There is a macro to compose a name string for | 4965 | the control interface. There is a macro to compose a name string for |
4968 | IEC958 controls, <function>SNDRV_CTL_NAME_IEC958()</function> | 4966 | IEC958 controls, <function>SNDRV_CTL_NAME_IEC958()</function> |
4969 | defined in <filename><include/asound.h></filename>. | 4967 | defined in <filename><include/asound.h></filename>. |
4970 | </para> | 4968 | </para> |
@@ -4973,7 +4971,7 @@ struct _snd_pcm_runtime { | |||
4973 | There are some standard controls for IEC958 status bits. These | 4971 | There are some standard controls for IEC958 status bits. These |
4974 | controls use the type <type>SNDRV_CTL_ELEM_TYPE_IEC958</type>, | 4972 | controls use the type <type>SNDRV_CTL_ELEM_TYPE_IEC958</type>, |
4975 | and the size of element is fixed as 4 bytes array | 4973 | and the size of element is fixed as 4 bytes array |
4976 | (value.iec958.status[x]). For <structfield>info</structfield> | 4974 | (value.iec958.status[x]). For the <structfield>info</structfield> |
4977 | callback, you don't specify | 4975 | callback, you don't specify |
4978 | the value field for this type (the count field must be set, | 4976 | the value field for this type (the count field must be set, |
4979 | though). | 4977 | though). |
@@ -5001,7 +4999,7 @@ struct _snd_pcm_runtime { | |||
5001 | enable/disable or to set the raw bit mode. The implementation | 4999 | enable/disable or to set the raw bit mode. The implementation |
5002 | will depend on the chip, but the control should be named as | 5000 | will depend on the chip, but the control should be named as |
5003 | <quote>IEC958 xxx</quote>, preferably using | 5001 | <quote>IEC958 xxx</quote>, preferably using |
5004 | <function>SNDRV_CTL_NAME_IEC958()</function> macro. | 5002 | the <function>SNDRV_CTL_NAME_IEC958()</function> macro. |
5005 | </para> | 5003 | </para> |
5006 | 5004 | ||
5007 | <para> | 5005 | <para> |
@@ -5036,12 +5034,12 @@ struct _snd_pcm_runtime { | |||
5036 | The allocation of pages with fallback is | 5034 | The allocation of pages with fallback is |
5037 | <function>snd_malloc_xxx_pages_fallback()</function>. This | 5035 | <function>snd_malloc_xxx_pages_fallback()</function>. This |
5038 | function tries to allocate the specified pages but if the pages | 5036 | function tries to allocate the specified pages but if the pages |
5039 | are not available, it tries to reduce the page sizes until the | 5037 | are not available, it tries to reduce the page sizes until |
5040 | enough space is found. | 5038 | enough space is found. |
5041 | </para> | 5039 | </para> |
5042 | 5040 | ||
5043 | <para> | 5041 | <para> |
5044 | For releasing the space, call | 5042 | The release the pages, call |
5045 | <function>snd_free_xxx_pages()</function> function. | 5043 | <function>snd_free_xxx_pages()</function> function. |
5046 | </para> | 5044 | </para> |
5047 | 5045 | ||
@@ -5050,8 +5048,8 @@ struct _snd_pcm_runtime { | |||
5050 | a large contiguous physical space | 5048 | a large contiguous physical space |
5051 | at the time the module is loaded for the later use. | 5049 | at the time the module is loaded for the later use. |
5052 | This is called <quote>pre-allocation</quote>. | 5050 | This is called <quote>pre-allocation</quote>. |
5053 | As already written, you can call the following function at the | 5051 | As already written, you can call the following function at |
5054 | construction of pcm instance (in the case of PCI bus). | 5052 | pcm instance construction time (in the case of PCI bus). |
5055 | 5053 | ||
5056 | <informalexample> | 5054 | <informalexample> |
5057 | <programlisting> | 5055 | <programlisting> |
@@ -5063,34 +5061,34 @@ struct _snd_pcm_runtime { | |||
5063 | </informalexample> | 5061 | </informalexample> |
5064 | 5062 | ||
5065 | where <parameter>size</parameter> is the byte size to be | 5063 | where <parameter>size</parameter> is the byte size to be |
5066 | pre-allocated and the <parameter>max</parameter> is the maximal | 5064 | pre-allocated and the <parameter>max</parameter> is the maximum |
5067 | size to be changed via <filename>prealloc</filename> proc file. | 5065 | size to be changed via the <filename>prealloc</filename> proc file. |
5068 | The allocator will try to get as large area as possible | 5066 | The allocator will try to get an area as large as possible |
5069 | within the given size. | 5067 | within the given size. |
5070 | </para> | 5068 | </para> |
5071 | 5069 | ||
5072 | <para> | 5070 | <para> |
5073 | The second argument (type) and the third argument (device pointer) | 5071 | The second argument (type) and the third argument (device pointer) |
5074 | are dependent on the bus. | 5072 | are dependent on the bus. |
5075 | In the case of ISA bus, pass <function>snd_dma_isa_data()</function> | 5073 | In the case of the ISA bus, pass <function>snd_dma_isa_data()</function> |
5076 | as the third argument with <constant>SNDRV_DMA_TYPE_DEV</constant> type. | 5074 | as the third argument with <constant>SNDRV_DMA_TYPE_DEV</constant> type. |
5077 | For the continuous buffer unrelated to the bus can be pre-allocated | 5075 | For the continuous buffer unrelated to the bus can be pre-allocated |
5078 | with <constant>SNDRV_DMA_TYPE_CONTINUOUS</constant> type and the | 5076 | with <constant>SNDRV_DMA_TYPE_CONTINUOUS</constant> type and the |
5079 | <function>snd_dma_continuous_data(GFP_KERNEL)</function> device pointer, | 5077 | <function>snd_dma_continuous_data(GFP_KERNEL)</function> device pointer, |
5080 | whereh <constant>GFP_KERNEL</constant> is the kernel allocation flag to | 5078 | where <constant>GFP_KERNEL</constant> is the kernel allocation flag to |
5081 | use. For the SBUS, <constant>SNDRV_DMA_TYPE_SBUS</constant> and | 5079 | use. For the SBUS, <constant>SNDRV_DMA_TYPE_SBUS</constant> and |
5082 | <function>snd_dma_sbus_data(sbus_dev)</function> are used instead. | 5080 | <function>snd_dma_sbus_data(sbus_dev)</function> are used instead. |
5083 | For the PCI scatter-gather buffers, use | 5081 | For the PCI scatter-gather buffers, use |
5084 | <constant>SNDRV_DMA_TYPE_DEV_SG</constant> with | 5082 | <constant>SNDRV_DMA_TYPE_DEV_SG</constant> with |
5085 | <function>snd_dma_pci_data(pci)</function> | 5083 | <function>snd_dma_pci_data(pci)</function> |
5086 | (see the section | 5084 | (see the |
5087 | <link linkend="buffer-and-memory-non-contiguous"><citetitle>Non-Contiguous Buffers | 5085 | <link linkend="buffer-and-memory-non-contiguous"><citetitle>Non-Contiguous Buffers |
5088 | </citetitle></link>). | 5086 | </citetitle></link> section). |
5089 | </para> | 5087 | </para> |
5090 | 5088 | ||
5091 | <para> | 5089 | <para> |
5092 | Once when the buffer is pre-allocated, you can use the | 5090 | Once the buffer is pre-allocated, you can use the |
5093 | allocator in the <structfield>hw_params</structfield> callback | 5091 | allocator in the <structfield>hw_params</structfield> callback: |
5094 | 5092 | ||
5095 | <informalexample> | 5093 | <informalexample> |
5096 | <programlisting> | 5094 | <programlisting> |
@@ -5116,8 +5114,8 @@ struct _snd_pcm_runtime { | |||
5116 | </para> | 5114 | </para> |
5117 | 5115 | ||
5118 | <para> | 5116 | <para> |
5119 | The first case works fine if the external hardware buffer is enough | 5117 | The first case works fine if the external hardware buffer is large |
5120 | large. This method doesn't need any extra buffers and thus is | 5118 | enough. This method doesn't need any extra buffers and thus is |
5121 | more effective. You need to define the | 5119 | more effective. You need to define the |
5122 | <structfield>copy</structfield> and | 5120 | <structfield>copy</structfield> and |
5123 | <structfield>silence</structfield> callbacks for | 5121 | <structfield>silence</structfield> callbacks for |
@@ -5127,25 +5125,25 @@ struct _snd_pcm_runtime { | |||
5127 | </para> | 5125 | </para> |
5128 | 5126 | ||
5129 | <para> | 5127 | <para> |
5130 | The second case allows the mmap of the buffer, although you have | 5128 | The second case allows for mmap on the buffer, although you have |
5131 | to handle an interrupt or a tasklet for transferring the data | 5129 | to handle an interrupt or a tasklet to transfer the data |
5132 | from the intermediate buffer to the hardware buffer. You can find an | 5130 | from the intermediate buffer to the hardware buffer. You can find an |
5133 | example in vxpocket driver. | 5131 | example in the vxpocket driver. |
5134 | </para> | 5132 | </para> |
5135 | 5133 | ||
5136 | <para> | 5134 | <para> |
5137 | Another case is that the chip uses a PCI memory-map | 5135 | Another case is when the chip uses a PCI memory-map |
5138 | region for the buffer instead of the host memory. In this case, | 5136 | region for the buffer instead of the host memory. In this case, |
5139 | mmap is available only on certain architectures like intel. In | 5137 | mmap is available only on certain architectures like the Intel one. |
5140 | non-mmap mode, the data cannot be transferred as the normal | 5138 | In non-mmap mode, the data cannot be transferred as in the normal |
5141 | way. Thus you need to define <structfield>copy</structfield> and | 5139 | way. Thus you need to define the <structfield>copy</structfield> and |
5142 | <structfield>silence</structfield> callbacks as well | 5140 | <structfield>silence</structfield> callbacks as well, |
5143 | as in the cases above. The examples are found in | 5141 | as in the cases above. The examples are found in |
5144 | <filename>rme32.c</filename> and <filename>rme96.c</filename>. | 5142 | <filename>rme32.c</filename> and <filename>rme96.c</filename>. |
5145 | </para> | 5143 | </para> |
5146 | 5144 | ||
5147 | <para> | 5145 | <para> |
5148 | The implementation of <structfield>copy</structfield> and | 5146 | The implementation of the <structfield>copy</structfield> and |
5149 | <structfield>silence</structfield> callbacks depends upon | 5147 | <structfield>silence</structfield> callbacks depends upon |
5150 | whether the hardware supports interleaved or non-interleaved | 5148 | whether the hardware supports interleaved or non-interleaved |
5151 | samples. The <structfield>copy</structfield> callback is | 5149 | samples. The <structfield>copy</structfield> callback is |
@@ -5184,8 +5182,8 @@ struct _snd_pcm_runtime { | |||
5184 | 5182 | ||
5185 | <para> | 5183 | <para> |
5186 | What you have to do in this callback is again different | 5184 | What you have to do in this callback is again different |
5187 | between playback and capture directions. In the case of | 5185 | between playback and capture directions. In the |
5188 | playback, you do: copy the given amount of data | 5186 | playback case, you copy the given amount of data |
5189 | (<parameter>count</parameter>) at the specified pointer | 5187 | (<parameter>count</parameter>) at the specified pointer |
5190 | (<parameter>src</parameter>) to the specified offset | 5188 | (<parameter>src</parameter>) to the specified offset |
5191 | (<parameter>pos</parameter>) on the hardware buffer. When | 5189 | (<parameter>pos</parameter>) on the hardware buffer. When |
@@ -5202,7 +5200,7 @@ struct _snd_pcm_runtime { | |||
5202 | </para> | 5200 | </para> |
5203 | 5201 | ||
5204 | <para> | 5202 | <para> |
5205 | For the capture direction, you do: copy the given amount of | 5203 | For the capture direction, you copy the given amount of |
5206 | data (<parameter>count</parameter>) at the specified offset | 5204 | data (<parameter>count</parameter>) at the specified offset |
5207 | (<parameter>pos</parameter>) on the hardware buffer to the | 5205 | (<parameter>pos</parameter>) on the hardware buffer to the |
5208 | specified pointer (<parameter>dst</parameter>). | 5206 | specified pointer (<parameter>dst</parameter>). |
@@ -5216,7 +5214,7 @@ struct _snd_pcm_runtime { | |||
5216 | </programlisting> | 5214 | </programlisting> |
5217 | </informalexample> | 5215 | </informalexample> |
5218 | 5216 | ||
5219 | Note that both of the position and the data amount are given | 5217 | Note that both the position and the amount of data are given |
5220 | in frames. | 5218 | in frames. |
5221 | </para> | 5219 | </para> |
5222 | 5220 | ||
@@ -5247,7 +5245,7 @@ struct _snd_pcm_runtime { | |||
5247 | </para> | 5245 | </para> |
5248 | 5246 | ||
5249 | <para> | 5247 | <para> |
5250 | The meanings of arguments are identical with the | 5248 | The meanings of arguments are the same as in the |
5251 | <structfield>copy</structfield> | 5249 | <structfield>copy</structfield> |
5252 | callback, although there is no <parameter>src/dst</parameter> | 5250 | callback, although there is no <parameter>src/dst</parameter> |
5253 | argument. In the case of interleaved samples, the channel | 5251 | argument. In the case of interleaved samples, the channel |
@@ -5284,8 +5282,8 @@ struct _snd_pcm_runtime { | |||
5284 | <section id="buffer-and-memory-non-contiguous"> | 5282 | <section id="buffer-and-memory-non-contiguous"> |
5285 | <title>Non-Contiguous Buffers</title> | 5283 | <title>Non-Contiguous Buffers</title> |
5286 | <para> | 5284 | <para> |
5287 | If your hardware supports the page table like emu10k1 or the | 5285 | If your hardware supports the page table as in emu10k1 or the |
5288 | buffer descriptors like via82xx, you can use the scatter-gather | 5286 | buffer descriptors as in via82xx, you can use the scatter-gather |
5289 | (SG) DMA. ALSA provides an interface for handling SG-buffers. | 5287 | (SG) DMA. ALSA provides an interface for handling SG-buffers. |
5290 | The API is provided in <filename><sound/pcm.h></filename>. | 5288 | The API is provided in <filename><sound/pcm.h></filename>. |
5291 | </para> | 5289 | </para> |
@@ -5296,7 +5294,7 @@ struct _snd_pcm_runtime { | |||
5296 | <function>snd_pcm_lib_preallocate_pages_for_all()</function> | 5294 | <function>snd_pcm_lib_preallocate_pages_for_all()</function> |
5297 | with <constant>SNDRV_DMA_TYPE_DEV_SG</constant> | 5295 | with <constant>SNDRV_DMA_TYPE_DEV_SG</constant> |
5298 | in the PCM constructor like other PCI pre-allocator. | 5296 | in the PCM constructor like other PCI pre-allocator. |
5299 | You need to pass the <function>snd_dma_pci_data(pci)</function>, | 5297 | You need to pass <function>snd_dma_pci_data(pci)</function>, |
5300 | where pci is the struct <structname>pci_dev</structname> pointer | 5298 | where pci is the struct <structname>pci_dev</structname> pointer |
5301 | of the chip as well. | 5299 | of the chip as well. |
5302 | The <type>struct snd_sg_buf</type> instance is created as | 5300 | The <type>struct snd_sg_buf</type> instance is created as |
@@ -5314,7 +5312,7 @@ struct _snd_pcm_runtime { | |||
5314 | 5312 | ||
5315 | <para> | 5313 | <para> |
5316 | Then call <function>snd_pcm_lib_malloc_pages()</function> | 5314 | Then call <function>snd_pcm_lib_malloc_pages()</function> |
5317 | in <structfield>hw_params</structfield> callback | 5315 | in the <structfield>hw_params</structfield> callback |
5318 | as well as in the case of normal PCI buffer. | 5316 | as well as in the case of normal PCI buffer. |
5319 | The SG-buffer handler will allocate the non-contiguous kernel | 5317 | The SG-buffer handler will allocate the non-contiguous kernel |
5320 | pages of the given size and map them onto the virtually contiguous | 5318 | pages of the given size and map them onto the virtually contiguous |
@@ -5335,7 +5333,7 @@ struct _snd_pcm_runtime { | |||
5335 | </para> | 5333 | </para> |
5336 | 5334 | ||
5337 | <para> | 5335 | <para> |
5338 | For releasing the data, call | 5336 | To release the data, call |
5339 | <function>snd_pcm_lib_free_pages()</function> in the | 5337 | <function>snd_pcm_lib_free_pages()</function> in the |
5340 | <structfield>hw_free</structfield> callback as usual. | 5338 | <structfield>hw_free</structfield> callback as usual. |
5341 | </para> | 5339 | </para> |
@@ -5390,7 +5388,7 @@ struct _snd_pcm_runtime { | |||
5390 | </para> | 5388 | </para> |
5391 | 5389 | ||
5392 | <para> | 5390 | <para> |
5393 | For creating a proc file, call | 5391 | To create a proc file, call |
5394 | <function>snd_card_proc_new()</function>. | 5392 | <function>snd_card_proc_new()</function>. |
5395 | 5393 | ||
5396 | <informalexample> | 5394 | <informalexample> |
@@ -5402,7 +5400,7 @@ struct _snd_pcm_runtime { | |||
5402 | </programlisting> | 5400 | </programlisting> |
5403 | </informalexample> | 5401 | </informalexample> |
5404 | 5402 | ||
5405 | where the second argument specifies the proc-file name to be | 5403 | where the second argument specifies the name of the proc file to be |
5406 | created. The above example will create a file | 5404 | created. The above example will create a file |
5407 | <filename>my-file</filename> under the card directory, | 5405 | <filename>my-file</filename> under the card directory, |
5408 | e.g. <filename>/proc/asound/card0/my-file</filename>. | 5406 | e.g. <filename>/proc/asound/card0/my-file</filename>. |
@@ -5417,8 +5415,8 @@ struct _snd_pcm_runtime { | |||
5417 | 5415 | ||
5418 | <para> | 5416 | <para> |
5419 | When the creation is successful, the function stores a new | 5417 | When the creation is successful, the function stores a new |
5420 | instance at the pointer given in the third argument. | 5418 | instance in the pointer given in the third argument. |
5421 | It is initialized as a text proc file for read only. For using | 5419 | It is initialized as a text proc file for read only. To use |
5422 | this proc file as a read-only text file as it is, set the read | 5420 | this proc file as a read-only text file as it is, set the read |
5423 | callback with a private data via | 5421 | callback with a private data via |
5424 | <function>snd_info_set_text_ops()</function>. | 5422 | <function>snd_info_set_text_ops()</function>. |
@@ -5470,9 +5468,9 @@ struct _snd_pcm_runtime { | |||
5470 | </para> | 5468 | </para> |
5471 | 5469 | ||
5472 | <para> | 5470 | <para> |
5473 | The file permission can be changed afterwards. As default, it's | 5471 | The file permissions can be changed afterwards. As default, it's |
5474 | set as read only for all users. If you want to add the write | 5472 | set as read only for all users. If you want to add write |
5475 | permission to the user (root as default), set like below: | 5473 | permission for the user (root as default), do as follows: |
5476 | 5474 | ||
5477 | <informalexample> | 5475 | <informalexample> |
5478 | <programlisting> | 5476 | <programlisting> |
@@ -5503,7 +5501,7 @@ struct _snd_pcm_runtime { | |||
5503 | </para> | 5501 | </para> |
5504 | 5502 | ||
5505 | <para> | 5503 | <para> |
5506 | For a raw-data proc-file, set the attributes like the following: | 5504 | For a raw-data proc-file, set the attributes as follows: |
5507 | 5505 | ||
5508 | <informalexample> | 5506 | <informalexample> |
5509 | <programlisting> | 5507 | <programlisting> |
@@ -5524,7 +5522,7 @@ struct _snd_pcm_runtime { | |||
5524 | 5522 | ||
5525 | <para> | 5523 | <para> |
5526 | The callback is much more complicated than the text-file | 5524 | The callback is much more complicated than the text-file |
5527 | version. You need to use a low-level i/o functions such as | 5525 | version. You need to use a low-level I/O functions such as |
5528 | <function>copy_from/to_user()</function> to transfer the | 5526 | <function>copy_from/to_user()</function> to transfer the |
5529 | data. | 5527 | data. |
5530 | 5528 | ||
@@ -5560,28 +5558,28 @@ struct _snd_pcm_runtime { | |||
5560 | <title>Power Management</title> | 5558 | <title>Power Management</title> |
5561 | <para> | 5559 | <para> |
5562 | If the chip is supposed to work with suspend/resume | 5560 | If the chip is supposed to work with suspend/resume |
5563 | functions, you need to add the power-management codes to the | 5561 | functions, you need to add power-management code to the |
5564 | driver. The additional codes for the power-management should be | 5562 | driver. The additional code for power-management should be |
5565 | <function>ifdef</function>'ed with | 5563 | <function>ifdef</function>'ed with |
5566 | <constant>CONFIG_PM</constant>. | 5564 | <constant>CONFIG_PM</constant>. |
5567 | </para> | 5565 | </para> |
5568 | 5566 | ||
5569 | <para> | 5567 | <para> |
5570 | If the driver supports the suspend/resume | 5568 | If the driver <emphasis>fully</emphasis> supports suspend/resume |
5571 | <emphasis>fully</emphasis>, that is, the device can be | 5569 | that is, the device can be |
5572 | properly resumed to the status at the suspend is called, | 5570 | properly resumed to its state when suspend was called, |
5573 | you can set <constant>SNDRV_PCM_INFO_RESUME</constant> flag | 5571 | you can set the <constant>SNDRV_PCM_INFO_RESUME</constant> flag |
5574 | to pcm info field. Usually, this is possible when the | 5572 | in the pcm info field. Usually, this is possible when the |
5575 | registers of ths chip can be safely saved and restored to the | 5573 | registers of the chip can be safely saved and restored to |
5576 | RAM. If this is set, the trigger callback is called with | 5574 | RAM. If this is set, the trigger callback is called with |
5577 | <constant>SNDRV_PCM_TRIGGER_RESUME</constant> after resume | 5575 | <constant>SNDRV_PCM_TRIGGER_RESUME</constant> after the resume |
5578 | callback is finished. | 5576 | callback completes. |
5579 | </para> | 5577 | </para> |
5580 | 5578 | ||
5581 | <para> | 5579 | <para> |
5582 | Even if the driver doesn't support PM fully but only the | 5580 | Even if the driver doesn't support PM fully but |
5583 | partial suspend/resume is possible, it's still worthy to | 5581 | partial suspend/resume is still possible, it's still worthy to |
5584 | implement suspend/resume callbacks. In such a case, applications | 5582 | implement suspend/resume callbacks. In such a case, applications |
5585 | would reset the status by calling | 5583 | would reset the status by calling |
5586 | <function>snd_pcm_prepare()</function> and restart the stream | 5584 | <function>snd_pcm_prepare()</function> and restart the stream |
5587 | appropriately. Hence, you can define suspend/resume callbacks | 5585 | appropriately. Hence, you can define suspend/resume callbacks |
@@ -5590,22 +5588,22 @@ struct _snd_pcm_runtime { | |||
5590 | </para> | 5588 | </para> |
5591 | 5589 | ||
5592 | <para> | 5590 | <para> |
5593 | Note that the trigger with SUSPEND can be always called when | 5591 | Note that the trigger with SUSPEND can always be called when |
5594 | <function>snd_pcm_suspend_all</function> is called, | 5592 | <function>snd_pcm_suspend_all</function> is called, |
5595 | regardless of <constant>SNDRV_PCM_INFO_RESUME</constant> flag. | 5593 | regardless of the <constant>SNDRV_PCM_INFO_RESUME</constant> flag. |
5596 | The <constant>RESUME</constant> flag affects only the behavior | 5594 | The <constant>RESUME</constant> flag affects only the behavior |
5597 | of <function>snd_pcm_resume()</function>. | 5595 | of <function>snd_pcm_resume()</function>. |
5598 | (Thus, in theory, | 5596 | (Thus, in theory, |
5599 | <constant>SNDRV_PCM_TRIGGER_RESUME</constant> isn't needed | 5597 | <constant>SNDRV_PCM_TRIGGER_RESUME</constant> isn't needed |
5600 | to be handled in the trigger callback when no | 5598 | to be handled in the trigger callback when no |
5601 | <constant>SNDRV_PCM_INFO_RESUME</constant> flag is set. But, | 5599 | <constant>SNDRV_PCM_INFO_RESUME</constant> flag is set. But, |
5602 | it's better to keep it for compatibility reason.) | 5600 | it's better to keep it for compatibility reasons.) |
5603 | </para> | 5601 | </para> |
5604 | <para> | 5602 | <para> |
5605 | In the earlier version of ALSA drivers, a common | 5603 | In the earlier version of ALSA drivers, a common |
5606 | power-management layer was provided, but it has been removed. | 5604 | power-management layer was provided, but it has been removed. |
5607 | The driver needs to define the suspend/resume hooks according to | 5605 | The driver needs to define the suspend/resume hooks according to |
5608 | the bus the device is assigned. In the case of PCI driver, the | 5606 | the bus the device is connected to. In the case of PCI drivers, the |
5609 | callbacks look like below: | 5607 | callbacks look like below: |
5610 | 5608 | ||
5611 | <informalexample> | 5609 | <informalexample> |
@@ -5629,7 +5627,7 @@ struct _snd_pcm_runtime { | |||
5629 | </para> | 5627 | </para> |
5630 | 5628 | ||
5631 | <para> | 5629 | <para> |
5632 | The scheme of the real suspend job is as following. | 5630 | The scheme of the real suspend job is as follows. |
5633 | 5631 | ||
5634 | <orderedlist> | 5632 | <orderedlist> |
5635 | <listitem><para>Retrieve the card and the chip data.</para></listitem> | 5633 | <listitem><para>Retrieve the card and the chip data.</para></listitem> |
@@ -5679,11 +5677,11 @@ struct _snd_pcm_runtime { | |||
5679 | </para> | 5677 | </para> |
5680 | 5678 | ||
5681 | <para> | 5679 | <para> |
5682 | The scheme of the real resume job is as following. | 5680 | The scheme of the real resume job is as follows. |
5683 | 5681 | ||
5684 | <orderedlist> | 5682 | <orderedlist> |
5685 | <listitem><para>Retrieve the card and the chip data.</para></listitem> | 5683 | <listitem><para>Retrieve the card and the chip data.</para></listitem> |
5686 | <listitem><para>Set up PCI. First, call <function>pci_restore_state()</function>. | 5684 | <listitem><para>Set up PCI. First, call <function>pci_restore_state()</function>. |
5687 | Then enable the pci device again by calling <function>pci_enable_device()</function>. | 5685 | Then enable the pci device again by calling <function>pci_enable_device()</function>. |
5688 | Call <function>pci_set_master()</function> if necessary, too.</para></listitem> | 5686 | Call <function>pci_set_master()</function> if necessary, too.</para></listitem> |
5689 | <listitem><para>Re-initialize the chip.</para></listitem> | 5687 | <listitem><para>Re-initialize the chip.</para></listitem> |
@@ -5734,7 +5732,7 @@ struct _snd_pcm_runtime { | |||
5734 | <function>snd_pcm_suspend_all()</function> or | 5732 | <function>snd_pcm_suspend_all()</function> or |
5735 | <function>snd_pcm_suspend()</function>. It means that the PCM | 5733 | <function>snd_pcm_suspend()</function>. It means that the PCM |
5736 | streams are already stoppped when the register snapshot is | 5734 | streams are already stoppped when the register snapshot is |
5737 | taken. But, remind that you don't have to restart the PCM | 5735 | taken. But, remember that you don't have to restart the PCM |
5738 | stream in the resume callback. It'll be restarted via | 5736 | stream in the resume callback. It'll be restarted via |
5739 | trigger call with <constant>SNDRV_PCM_TRIGGER_RESUME</constant> | 5737 | trigger call with <constant>SNDRV_PCM_TRIGGER_RESUME</constant> |
5740 | when necessary. | 5738 | when necessary. |
@@ -5795,7 +5793,7 @@ struct _snd_pcm_runtime { | |||
5795 | </para> | 5793 | </para> |
5796 | 5794 | ||
5797 | <para> | 5795 | <para> |
5798 | If you need a space for saving the registers, allocate the | 5796 | If you need a space to save the registers, allocate the |
5799 | buffer for it here, too, since it would be fatal | 5797 | buffer for it here, too, since it would be fatal |
5800 | if you cannot allocate a memory in the suspend phase. | 5798 | if you cannot allocate a memory in the suspend phase. |
5801 | The allocated buffer should be released in the corresponding | 5799 | The allocated buffer should be released in the corresponding |
@@ -5833,7 +5831,7 @@ struct _snd_pcm_runtime { | |||
5833 | <title>Module Parameters</title> | 5831 | <title>Module Parameters</title> |
5834 | <para> | 5832 | <para> |
5835 | There are standard module options for ALSA. At least, each | 5833 | There are standard module options for ALSA. At least, each |
5836 | module should have <parameter>index</parameter>, | 5834 | module should have the <parameter>index</parameter>, |
5837 | <parameter>id</parameter> and <parameter>enable</parameter> | 5835 | <parameter>id</parameter> and <parameter>enable</parameter> |
5838 | options. | 5836 | options. |
5839 | </para> | 5837 | </para> |
@@ -5841,8 +5839,8 @@ struct _snd_pcm_runtime { | |||
5841 | <para> | 5839 | <para> |
5842 | If the module supports multiple cards (usually up to | 5840 | If the module supports multiple cards (usually up to |
5843 | 8 = <constant>SNDRV_CARDS</constant> cards), they should be | 5841 | 8 = <constant>SNDRV_CARDS</constant> cards), they should be |
5844 | arrays. The default initial values are defined already as | 5842 | arrays. The default initial values are defined already as |
5845 | constants for ease of programming: | 5843 | constants for easier programming: |
5846 | 5844 | ||
5847 | <informalexample> | 5845 | <informalexample> |
5848 | <programlisting> | 5846 | <programlisting> |
@@ -5858,7 +5856,7 @@ struct _snd_pcm_runtime { | |||
5858 | <para> | 5856 | <para> |
5859 | If the module supports only a single card, they could be single | 5857 | If the module supports only a single card, they could be single |
5860 | variables, instead. <parameter>enable</parameter> option is not | 5858 | variables, instead. <parameter>enable</parameter> option is not |
5861 | always necessary in this case, but it wouldn't be so bad to have a | 5859 | always necessary in this case, but it would be better to have a |
5862 | dummy option for compatibility. | 5860 | dummy option for compatibility. |
5863 | </para> | 5861 | </para> |
5864 | 5862 | ||
@@ -5923,22 +5921,22 @@ struct _snd_pcm_runtime { | |||
5923 | </para> | 5921 | </para> |
5924 | 5922 | ||
5925 | <para> | 5923 | <para> |
5926 | Suppose that you'll create a new PCI driver for the card | 5924 | Suppose that you create a new PCI driver for the card |
5927 | <quote>xyz</quote>. The card module name would be | 5925 | <quote>xyz</quote>. The card module name would be |
5928 | snd-xyz. The new driver is usually put into alsa-driver | 5926 | snd-xyz. The new driver is usually put into the alsa-driver |
5929 | tree, <filename>alsa-driver/pci</filename> directory in | 5927 | tree, <filename>alsa-driver/pci</filename> directory in |
5930 | the case of PCI cards. | 5928 | the case of PCI cards. |
5931 | Then the driver is evaluated, audited and tested | 5929 | Then the driver is evaluated, audited and tested |
5932 | by developers and users. After a certain time, the driver | 5930 | by developers and users. After a certain time, the driver |
5933 | will go to alsa-kernel tree (to the corresponding directory, | 5931 | will go to the alsa-kernel tree (to the corresponding directory, |
5934 | such as <filename>alsa-kernel/pci</filename>) and eventually | 5932 | such as <filename>alsa-kernel/pci</filename>) and eventually |
5935 | integrated into Linux 2.6 tree (the directory would be | 5933 | will be integrated into the Linux 2.6 tree (the directory would be |
5936 | <filename>linux/sound/pci</filename>). | 5934 | <filename>linux/sound/pci</filename>). |
5937 | </para> | 5935 | </para> |
5938 | 5936 | ||
5939 | <para> | 5937 | <para> |
5940 | In the following sections, the driver code is supposed | 5938 | In the following sections, the driver code is supposed |
5941 | to be put into alsa-driver tree. The two cases are assumed: | 5939 | to be put into alsa-driver tree. The two cases are covered: |
5942 | a driver consisting of a single source file and one consisting | 5940 | a driver consisting of a single source file and one consisting |
5943 | of several source files. | 5941 | of several source files. |
5944 | </para> | 5942 | </para> |
@@ -6033,7 +6031,7 @@ struct _snd_pcm_runtime { | |||
6033 | <listitem> | 6031 | <listitem> |
6034 | <para> | 6032 | <para> |
6035 | Add a new directory (<filename>xyz</filename>) in | 6033 | Add a new directory (<filename>xyz</filename>) in |
6036 | <filename>alsa-driver/pci/Makefile</filename> like below | 6034 | <filename>alsa-driver/pci/Makefile</filename> as below |
6037 | 6035 | ||
6038 | <informalexample> | 6036 | <informalexample> |
6039 | <programlisting> | 6037 | <programlisting> |
@@ -6102,7 +6100,7 @@ struct _snd_pcm_runtime { | |||
6102 | <section id="useful-functions-snd-printk"> | 6100 | <section id="useful-functions-snd-printk"> |
6103 | <title><function>snd_printk()</function> and friends</title> | 6101 | <title><function>snd_printk()</function> and friends</title> |
6104 | <para> | 6102 | <para> |
6105 | ALSA provides a verbose version of | 6103 | ALSA provides a verbose version of the |
6106 | <function>printk()</function> function. If a kernel config | 6104 | <function>printk()</function> function. If a kernel config |
6107 | <constant>CONFIG_SND_VERBOSE_PRINTK</constant> is set, this | 6105 | <constant>CONFIG_SND_VERBOSE_PRINTK</constant> is set, this |
6108 | function prints the given message together with the file name | 6106 | function prints the given message together with the file name |
@@ -6170,7 +6168,7 @@ struct _snd_pcm_runtime { | |||
6170 | <section id="useful-functions-snd-bug"> | 6168 | <section id="useful-functions-snd-bug"> |
6171 | <title><function>snd_BUG()</function></title> | 6169 | <title><function>snd_BUG()</function></title> |
6172 | <para> | 6170 | <para> |
6173 | It shows <computeroutput>BUG?</computeroutput> message and | 6171 | It shows the <computeroutput>BUG?</computeroutput> message and |
6174 | stack trace as well as <function>snd_assert</function> at the point. | 6172 | stack trace as well as <function>snd_assert</function> at the point. |
6175 | It's useful to show that a fatal error happens there. | 6173 | It's useful to show that a fatal error happens there. |
6176 | </para> | 6174 | </para> |
@@ -6199,6 +6197,4 @@ struct _snd_pcm_runtime { | |||
6199 | in the hardware constraints section. | 6197 | in the hardware constraints section. |
6200 | </para> | 6198 | </para> |
6201 | </chapter> | 6199 | </chapter> |
6202 | |||
6203 | |||
6204 | </book> | 6200 | </book> |