1======================
2Writing an ALSA Driver
3======================
4
5:Author: Takashi Iwai <tiwai@suse.de>
6:Date:   Oct 15, 2007
7:Edition: 0.3.7
8
9Preface
10=======
11
12This document describes how to write an `ALSA (Advanced Linux Sound
13Architecture) <http://www.alsa-project.org/>`__ driver. The document
14focuses mainly on PCI soundcards. In the case of other device types, the
15API might be different, too. However, at least the ALSA kernel API is
16consistent, and therefore it would be still a bit help for writing them.
17
18This document targets people who already have enough C language skills
19and have basic linux kernel programming knowledge. This document doesn't
20explain the general topic of linux kernel coding and doesn't cover
21low-level driver implementation details. It only describes the standard
22way to write a PCI sound driver on ALSA.
23
24If you are already familiar with the older ALSA ver.0.5.x API, you can
25check the drivers such as ``sound/pci/es1938.c`` or
26``sound/pci/maestro3.c`` which have also almost the same code-base in
27the ALSA 0.5.x tree, so you can compare the differences.
28
29This document is still a draft version. Any feedback and corrections,
30please!!
31
32File Tree Structure
33===================
34
35General
36-------
37
38The ALSA drivers are provided in two ways.
39
40One is the trees provided as a tarball or via cvs from the ALSA's ftp
41site, and another is the 2.6 (or later) Linux kernel tree. To
42synchronize both, the ALSA driver tree is split into two different
43trees: alsa-kernel and alsa-driver. The former contains purely the
44source code for the Linux 2.6 (or later) tree. This tree is designed
45only for compilation on 2.6 or later environment. The latter,
46alsa-driver, contains many subtle files for compiling ALSA drivers
47outside of the Linux kernel tree, wrapper functions for older 2.2 and
482.4 kernels, to adapt the latest kernel API, and additional drivers
49which are still in development or in tests. The drivers in alsa-driver
50tree will be moved to alsa-kernel (and eventually to the 2.6 kernel
51tree) when they are finished and confirmed to work fine.
52
53The file tree structure of ALSA driver is depicted below. Both
54alsa-kernel and alsa-driver have almost the same file structure, except
55for “core” directory. It's named as “acore” in alsa-driver tree.
56
57::
58
59            sound
60                    /core
61                            /oss
62                            /seq
63                                    /oss
64                                    /instr
65                    /ioctl32
66                    /include
67                    /drivers
68                            /mpu401
69                            /opl3
70                    /i2c
71                            /l3
72                    /synth
73                            /emux
74                    /pci
75                            /(cards)
76                    /isa
77                            /(cards)
78                    /arm
79                    /ppc
80                    /sparc
81                    /usb
82                    /pcmcia /(cards)
83                    /oss
84
85
86core directory
87--------------
88
89This directory contains the middle layer which is the heart of ALSA
90drivers. In this directory, the native ALSA modules are stored. The
91sub-directories contain different modules and are dependent upon the
92kernel config.
93
94core/oss
95~~~~~~~~
96
97The codes for PCM and mixer OSS emulation modules are stored in this
98directory. The rawmidi OSS emulation is included in the ALSA rawmidi
99code since it's quite small. The sequencer code is stored in
100``core/seq/oss`` directory (see `below <#core-seq-oss>`__).
101
102core/ioctl32
103~~~~~~~~~~~~
104
105This directory contains the 32bit-ioctl wrappers for 64bit architectures
106such like x86-64, ppc64 and sparc64. For 32bit and alpha architectures,
107these are not compiled.
108
109core/seq
110~~~~~~~~
111
112This directory and its sub-directories are for the ALSA sequencer. This
113directory contains the sequencer core and primary sequencer modules such
114like snd-seq-midi, snd-seq-virmidi, etc. They are compiled only when
115``CONFIG_SND_SEQUENCER`` is set in the kernel config.
116
117core/seq/oss
118~~~~~~~~~~~~
119
120This contains the OSS sequencer emulation codes.
121
122core/seq/instr
123~~~~~~~~~~~~~~
124
125This directory contains the modules for the sequencer instrument layer.
126
127include directory
128-----------------
129
130This is the place for the public header files of ALSA drivers, which are
131to be exported to user-space, or included by several files at different
132directories. Basically, the private header files should not be placed in
133this directory, but you may still find files there, due to historical
134reasons :)
135
136drivers directory
137-----------------
138
139This directory contains code shared among different drivers on different
140architectures. They are hence supposed not to be architecture-specific.
141For example, the dummy pcm driver and the serial MIDI driver are found
142in this directory. In the sub-directories, there is code for components
143which are independent from bus and cpu architectures.
144
145drivers/mpu401
146~~~~~~~~~~~~~~
147
148The MPU401 and MPU401-UART modules are stored here.
149
150drivers/opl3 and opl4
151~~~~~~~~~~~~~~~~~~~~~
152
153The OPL3 and OPL4 FM-synth stuff is found here.
154
155i2c directory
156-------------
157
158This contains the ALSA i2c components.
159
160Although there is a standard i2c layer on Linux, ALSA has its own i2c
161code for some cards, because the soundcard needs only a simple operation
162and the standard i2c API is too complicated for such a purpose.
163
164i2c/l3
165~~~~~~
166
167This is a sub-directory for ARM L3 i2c.
168
169synth directory
170---------------
171
172This contains the synth middle-level modules.
173
174So far, there is only Emu8000/Emu10k1 synth driver under the
175``synth/emux`` sub-directory.
176
177pci directory
178-------------
179
180This directory and its sub-directories hold the top-level card modules
181for PCI soundcards and the code specific to the PCI BUS.
182
183The drivers compiled from a single file are stored directly in the pci
184directory, while the drivers with several source files are stored on
185their own sub-directory (e.g. emu10k1, ice1712).
186
187isa directory
188-------------
189
190This directory and its sub-directories hold the top-level card modules
191for ISA soundcards.
192
193arm, ppc, and sparc directories
194-------------------------------
195
196They are used for top-level card modules which are specific to one of
197these architectures.
198
199usb directory
200-------------
201
202This directory contains the USB-audio driver. In the latest version, the
203USB MIDI driver is integrated in the usb-audio driver.
204
205pcmcia directory
206----------------
207
208The PCMCIA, especially PCCard drivers will go here. CardBus drivers will
209be in the pci directory, because their API is identical to that of
210standard PCI cards.
211
212oss directory
213-------------
214
215The OSS/Lite source files are stored here in Linux 2.6 (or later) tree.
216In the ALSA driver tarball, this directory is empty, of course :)
217
218Basic Flow for PCI Drivers
219==========================
220
221Outline
222-------
223
224The minimum flow for PCI soundcards is as follows:
225
226-  define the PCI ID table (see the section `PCI Entries`_).
227
228-  create ``probe`` callback.
229
230-  create ``remove`` callback.
231
232-  create a :c:type:`struct pci_driver <pci_driver>` structure
233   containing the three pointers above.
234
235-  create an ``init`` function just calling the
236   :c:func:`pci_register_driver()` to register the pci_driver
237   table defined above.
238
239-  create an ``exit`` function to call the
240   :c:func:`pci_unregister_driver()` function.
241
242Full Code Example
243-----------------
244
245The code example is shown below. Some parts are kept unimplemented at
246this moment but will be filled in the next sections. The numbers in the
247comment lines of the :c:func:`snd_mychip_probe()` function refer
248to details explained in the following section.
249
250::
251
252      #include <linux/init.h>
253      #include <linux/pci.h>
254      #include <linux/slab.h>
255      #include <sound/core.h>
256      #include <sound/initval.h>
257
258      /* module parameters (see "Module Parameters") */
259      /* SNDRV_CARDS: maximum number of cards supported by this module */
260      static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
261      static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
262      static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
263
264      /* definition of the chip-specific record */
265      struct mychip {
266              struct snd_card *card;
267              /* the rest of the implementation will be in section
268               * "PCI Resource Management"
269               */
270      };
271
272      /* chip-specific destructor
273       * (see "PCI Resource Management")
274       */
275      static int snd_mychip_free(struct mychip *chip)
276      {
277              .... /* will be implemented later... */
278      }
279
280      /* component-destructor
281       * (see "Management of Cards and Components")
282       */
283      static int snd_mychip_dev_free(struct snd_device *device)
284      {
285              return snd_mychip_free(device->device_data);
286      }
287
288      /* chip-specific constructor
289       * (see "Management of Cards and Components")
290       */
291      static int snd_mychip_create(struct snd_card *card,
292                                   struct pci_dev *pci,
293                                   struct mychip **rchip)
294      {
295              struct mychip *chip;
296              int err;
297              static struct snd_device_ops ops = {
298                     .dev_free = snd_mychip_dev_free,
299              };
300
301              *rchip = NULL;
302
303              /* check PCI availability here
304               * (see "PCI Resource Management")
305               */
306              ....
307
308              /* allocate a chip-specific data with zero filled */
309              chip = kzalloc(sizeof(*chip), GFP_KERNEL);
310              if (chip == NULL)
311                      return -ENOMEM;
312
313              chip->card = card;
314
315              /* rest of initialization here; will be implemented
316               * later, see "PCI Resource Management"
317               */
318              ....
319
320              err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
321              if (err < 0) {
322                      snd_mychip_free(chip);
323                      return err;
324              }
325
326              *rchip = chip;
327              return 0;
328      }
329
330      /* constructor -- see "Driver Constructor" sub-section */
331      static int snd_mychip_probe(struct pci_dev *pci,
332                                  const struct pci_device_id *pci_id)
333      {
334              static int dev;
335              struct snd_card *card;
336              struct mychip *chip;
337              int err;
338
339              /* (1) */
340              if (dev >= SNDRV_CARDS)
341                      return -ENODEV;
342              if (!enable[dev]) {
343                      dev++;
344                      return -ENOENT;
345              }
346
347              /* (2) */
348              err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
349                                 0, &card);
350              if (err < 0)
351                      return err;
352
353              /* (3) */
354              err = snd_mychip_create(card, pci, &chip);
355              if (err < 0) {
356                      snd_card_free(card);
357                      return err;
358              }
359
360              /* (4) */
361              strcpy(card->driver, "My Chip");
362              strcpy(card->shortname, "My Own Chip 123");
363              sprintf(card->longname, "%s at 0x%lx irq %i",
364                      card->shortname, chip->ioport, chip->irq);
365
366              /* (5) */
367              .... /* implemented later */
368
369              /* (6) */
370              err = snd_card_register(card);
371              if (err < 0) {
372                      snd_card_free(card);
373                      return err;
374              }
375
376              /* (7) */
377              pci_set_drvdata(pci, card);
378              dev++;
379              return 0;
380      }
381
382      /* destructor -- see the "Destructor" sub-section */
383      static void snd_mychip_remove(struct pci_dev *pci)
384      {
385              snd_card_free(pci_get_drvdata(pci));
386              pci_set_drvdata(pci, NULL);
387      }
388
389
390
391Driver Constructor
392------------------
393
394The real constructor of PCI drivers is the ``probe`` callback. The
395``probe`` callback and other component-constructors which are called
396from the ``probe`` callback cannot be used with the ``__init`` prefix
397because any PCI device could be a hotplug device.
398
399In the ``probe`` callback, the following scheme is often used.
400
4011) Check and increment the device index.
402~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
403
404::
405
406  static int dev;
407  ....
408  if (dev >= SNDRV_CARDS)
409          return -ENODEV;
410  if (!enable[dev]) {
411          dev++;
412          return -ENOENT;
413  }
414
415
416where ``enable[dev]`` is the module option.
417
418Each time the ``probe`` callback is called, check the availability of
419the device. If not available, simply increment the device index and
420returns. dev will be incremented also later (`step 7
421<#set-the-pci-driver-data-and-return-zero>`__).
422
4232) Create a card instance
424~~~~~~~~~~~~~~~~~~~~~~~~~
425
426::
427
428  struct snd_card *card;
429  int err;
430  ....
431  err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
432                     0, &card);
433
434
435The details will be explained in the section `Management of Cards and
436Components`_.
437
4383) Create a main component
439~~~~~~~~~~~~~~~~~~~~~~~~~~
440
441In this part, the PCI resources are allocated.
442
443::
444
445  struct mychip *chip;
446  ....
447  err = snd_mychip_create(card, pci, &chip);
448  if (err < 0) {
449          snd_card_free(card);
450          return err;
451  }
452
453The details will be explained in the section `PCI Resource
454Management`_.
455
4564) Set the driver ID and name strings.
457~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
458
459::
460
461  strcpy(card->driver, "My Chip");
462  strcpy(card->shortname, "My Own Chip 123");
463  sprintf(card->longname, "%s at 0x%lx irq %i",
464          card->shortname, chip->ioport, chip->irq);
465
466The driver field holds the minimal ID string of the chip. This is used
467by alsa-lib's configurator, so keep it simple but unique. Even the
468same driver can have different driver IDs to distinguish the
469functionality of each chip type.
470
471The shortname field is a string shown as more verbose name. The longname
472field contains the information shown in ``/proc/asound/cards``.
473
4745) Create other components, such as mixer, MIDI, etc.
475~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
476
477Here you define the basic components such as `PCM <#PCM-Interface>`__,
478mixer (e.g. `AC97 <#API-for-AC97-Codec>`__), MIDI (e.g.
479`MPU-401 <#MIDI-MPU401-UART-Interface>`__), and other interfaces.
480Also, if you want a `proc file <#Proc-Interface>`__, define it here,
481too.
482
4836) Register the card instance.
484~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
485
486::
487
488  err = snd_card_register(card);
489  if (err < 0) {
490          snd_card_free(card);
491          return err;
492  }
493
494Will be explained in the section `Management of Cards and
495Components`_, too.
496
4977) Set the PCI driver data and return zero.
498~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
499
500::
501
502  pci_set_drvdata(pci, card);
503  dev++;
504  return 0;
505
506In the above, the card record is stored. This pointer is used in the
507remove callback and power-management callbacks, too.
508
509Destructor
510----------
511
512The destructor, remove callback, simply releases the card instance. Then
513the ALSA middle layer will release all the attached components
514automatically.
515
516It would be typically like the following:
517
518::
519
520  static void snd_mychip_remove(struct pci_dev *pci)
521  {
522          snd_card_free(pci_get_drvdata(pci));
523          pci_set_drvdata(pci, NULL);
524  }
525
526
527The above code assumes that the card pointer is set to the PCI driver
528data.
529
530Header Files
531------------
532
533For the above example, at least the following include files are
534necessary.
535
536::
537
538  #include <linux/init.h>
539  #include <linux/pci.h>
540  #include <linux/slab.h>
541  #include <sound/core.h>
542  #include <sound/initval.h>
543
544where the last one is necessary only when module options are defined
545in the source file. If the code is split into several files, the files
546without module options don't need them.
547
548In addition to these headers, you'll need ``<linux/interrupt.h>`` for
549interrupt handling, and ``<asm/io.h>`` for I/O access. If you use the
550:c:func:`mdelay()` or :c:func:`udelay()` functions, you'll need
551to include ``<linux/delay.h>`` too.
552
553The ALSA interfaces like the PCM and control APIs are defined in other
554``<sound/xxx.h>`` header files. They have to be included after
555``<sound/core.h>``.
556
557Management of Cards and Components
558==================================
559
560Card Instance
561-------------
562
563For each soundcard, a “card” record must be allocated.
564
565A card record is the headquarters of the soundcard. It manages the whole
566list of devices (components) on the soundcard, such as PCM, mixers,
567MIDI, synthesizer, and so on. Also, the card record holds the ID and the
568name strings of the card, manages the root of proc files, and controls
569the power-management states and hotplug disconnections. The component
570list on the card record is used to manage the correct release of
571resources at destruction.
572
573As mentioned above, to create a card instance, call
574:c:func:`snd_card_new()`.
575
576::
577
578  struct snd_card *card;
579  int err;
580  err = snd_card_new(&pci->dev, index, id, module, extra_size, &card);
581
582
583The function takes six arguments: the parent device pointer, the
584card-index number, the id string, the module pointer (usually
585``THIS_MODULE``), the size of extra-data space, and the pointer to
586return the card instance. The extra_size argument is used to allocate
587card->private_data for the chip-specific data. Note that these data are
588allocated by :c:func:`snd_card_new()`.
589
590The first argument, the pointer of struct :c:type:`struct device
591<device>`, specifies the parent device. For PCI devices, typically
592``&pci->`` is passed there.
593
594Components
595----------
596
597After the card is created, you can attach the components (devices) to
598the card instance. In an ALSA driver, a component is represented as a
599:c:type:`struct snd_device <snd_device>` object. A component
600can be a PCM instance, a control interface, a raw MIDI interface, etc.
601Each such instance has one component entry.
602
603A component can be created via :c:func:`snd_device_new()`
604function.
605
606::
607
608  snd_device_new(card, SNDRV_DEV_XXX, chip, &ops);
609
610This takes the card pointer, the device-level (``SNDRV_DEV_XXX``), the
611data pointer, and the callback pointers (``&ops``). The device-level
612defines the type of components and the order of registration and
613de-registration. For most components, the device-level is already
614defined. For a user-defined component, you can use
615``SNDRV_DEV_LOWLEVEL``.
616
617This function itself doesn't allocate the data space. The data must be
618allocated manually beforehand, and its pointer is passed as the
619argument. This pointer (``chip`` in the above example) is used as the
620identifier for the instance.
621
622Each pre-defined ALSA component such as ac97 and pcm calls
623:c:func:`snd_device_new()` inside its constructor. The destructor
624for each component is defined in the callback pointers. Hence, you don't
625need to take care of calling a destructor for such a component.
626
627If you wish to create your own component, you need to set the destructor
628function to the dev_free callback in the ``ops``, so that it can be
629released automatically via :c:func:`snd_card_free()`. The next
630example will show an implementation of chip-specific data.
631
632Chip-Specific Data
633------------------
634
635Chip-specific information, e.g. the I/O port address, its resource
636pointer, or the irq number, is stored in the chip-specific record.
637
638::
639
640  struct mychip {
641          ....
642  };
643
644
645In general, there are two ways of allocating the chip record.
646
6471. Allocating via :c:func:`snd_card_new()`.
648~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
649
650As mentioned above, you can pass the extra-data-length to the 5th
651argument of :c:func:`snd_card_new()`, i.e.
652
653::
654
655  err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
656                     sizeof(struct mychip), &card);
657
658:c:type:`struct mychip <mychip>` is the type of the chip record.
659
660In return, the allocated record can be accessed as
661
662::
663
664  struct mychip *chip = card->private_data;
665
666With this method, you don't have to allocate twice. The record is
667released together with the card instance.
668
6692. Allocating an extra device.
670~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
671
672After allocating a card instance via :c:func:`snd_card_new()`
673(with ``0`` on the 4th arg), call :c:func:`kzalloc()`.
674
675::
676
677  struct snd_card *card;
678  struct mychip *chip;
679  err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
680                     0, &card);
681  .....
682  chip = kzalloc(sizeof(*chip), GFP_KERNEL);
683
684The chip record should have the field to hold the card pointer at least,
685
686::
687
688  struct mychip {
689          struct snd_card *card;
690          ....
691  };
692
693
694Then, set the card pointer in the returned chip instance.
695
696::
697
698  chip->card = card;
699
700Next, initialize the fields, and register this chip record as a
701low-level device with a specified ``ops``,
702
703::
704
705  static struct snd_device_ops ops = {
706          .dev_free =        snd_mychip_dev_free,
707  };
708  ....
709  snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
710
711:c:func:`snd_mychip_dev_free()` is the device-destructor
712function, which will call the real destructor.
713
714::
715
716  static int snd_mychip_dev_free(struct snd_device *device)
717  {
718          return snd_mychip_free(device->device_data);
719  }
720
721where :c:func:`snd_mychip_free()` is the real destructor.
722
723Registration and Release
724------------------------
725
726After all components are assigned, register the card instance by calling
727:c:func:`snd_card_register()`. Access to the device files is
728enabled at this point. That is, before
729:c:func:`snd_card_register()` is called, the components are safely
730inaccessible from external side. If this call fails, exit the probe
731function after releasing the card via :c:func:`snd_card_free()`.
732
733For releasing the card instance, you can call simply
734:c:func:`snd_card_free()`. As mentioned earlier, all components
735are released automatically by this call.
736
737For a device which allows hotplugging, you can use
738:c:func:`snd_card_free_when_closed()`. This one will postpone
739the destruction until all devices are closed.
740
741PCI Resource Management
742=======================
743
744Full Code Example
745-----------------
746
747In this section, we'll complete the chip-specific constructor,
748destructor and PCI entries. Example code is shown first, below.
749
750::
751
752      struct mychip {
753              struct snd_card *card;
754              struct pci_dev *pci;
755
756              unsigned long port;
757              int irq;
758      };
759
760      static int snd_mychip_free(struct mychip *chip)
761      {
762              /* disable hardware here if any */
763              .... /* (not implemented in this document) */
764
765              /* release the irq */
766              if (chip->irq >= 0)
767                      free_irq(chip->irq, chip);
768              /* release the I/O ports & memory */
769              pci_release_regions(chip->pci);
770              /* disable the PCI entry */
771              pci_disable_device(chip->pci);
772              /* release the data */
773              kfree(chip);
774              return 0;
775      }
776
777      /* chip-specific constructor */
778      static int snd_mychip_create(struct snd_card *card,
779                                   struct pci_dev *pci,
780                                   struct mychip **rchip)
781      {
782              struct mychip *chip;
783              int err;
784              static struct snd_device_ops ops = {
785                     .dev_free = snd_mychip_dev_free,
786              };
787
788              *rchip = NULL;
789
790              /* initialize the PCI entry */
791              err = pci_enable_device(pci);
792              if (err < 0)
793                      return err;
794              /* check PCI availability (28bit DMA) */
795              if (pci_set_dma_mask(pci, DMA_BIT_MASK(28)) < 0 ||
796                  pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(28)) < 0) {
797                      printk(KERN_ERR "error to set 28bit mask DMA\n");
798                      pci_disable_device(pci);
799                      return -ENXIO;
800              }
801
802              chip = kzalloc(sizeof(*chip), GFP_KERNEL);
803              if (chip == NULL) {
804                      pci_disable_device(pci);
805                      return -ENOMEM;
806              }
807
808              /* initialize the stuff */
809              chip->card = card;
810              chip->pci = pci;
811              chip->irq = -1;
812
813              /* (1) PCI resource allocation */
814              err = pci_request_regions(pci, "My Chip");
815              if (err < 0) {
816                      kfree(chip);
817                      pci_disable_device(pci);
818                      return err;
819              }
820              chip->port = pci_resource_start(pci, 0);
821              if (request_irq(pci->irq, snd_mychip_interrupt,
822                              IRQF_SHARED, KBUILD_MODNAME, chip)) {
823                      printk(KERN_ERR "cannot grab irq %d\n", pci->irq);
824                      snd_mychip_free(chip);
825                      return -EBUSY;
826              }
827              chip->irq = pci->irq;
828
829              /* (2) initialization of the chip hardware */
830              .... /*   (not implemented in this document) */
831
832              err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
833              if (err < 0) {
834                      snd_mychip_free(chip);
835                      return err;
836              }
837
838              *rchip = chip;
839              return 0;
840      }
841
842      /* PCI IDs */
843      static struct pci_device_id snd_mychip_ids[] = {
844              { PCI_VENDOR_ID_FOO, PCI_DEVICE_ID_BAR,
845                PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
846              ....
847              { 0, }
848      };
849      MODULE_DEVICE_TABLE(pci, snd_mychip_ids);
850
851      /* pci_driver definition */
852      static struct pci_driver driver = {
853              .name = KBUILD_MODNAME,
854              .id_table = snd_mychip_ids,
855              .probe = snd_mychip_probe,
856              .remove = snd_mychip_remove,
857      };
858
859      /* module initialization */
860      static int __init alsa_card_mychip_init(void)
861      {
862              return pci_register_driver(&driver);
863      }
864
865      /* module clean up */
866      static void __exit alsa_card_mychip_exit(void)
867      {
868              pci_unregister_driver(&driver);
869      }
870
871      module_init(alsa_card_mychip_init)
872      module_exit(alsa_card_mychip_exit)
873
874      EXPORT_NO_SYMBOLS; /* for old kernels only */
875
876Some Hafta's
877------------
878
879The allocation of PCI resources is done in the ``probe`` function, and
880usually an extra :c:func:`xxx_create()` function is written for this
881purpose.
882
883In the case of PCI devices, you first have to call the
884:c:func:`pci_enable_device()` function before allocating
885resources. Also, you need to set the proper PCI DMA mask to limit the
886accessed I/O range. In some cases, you might need to call
887:c:func:`pci_set_master()` function, too.
888
889Suppose the 28bit mask, and the code to be added would be like:
890
891::
892
893  err = pci_enable_device(pci);
894  if (err < 0)
895          return err;
896  if (pci_set_dma_mask(pci, DMA_BIT_MASK(28)) < 0 ||
897      pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(28)) < 0) {
898          printk(KERN_ERR "error to set 28bit mask DMA\n");
899          pci_disable_device(pci);
900          return -ENXIO;
901  }
902
903
904Resource Allocation
905-------------------
906
907The allocation of I/O ports and irqs is done via standard kernel
908functions. Unlike ALSA ver.0.5.x., there are no helpers for that. And
909these resources must be released in the destructor function (see below).
910Also, on ALSA 0.9.x, you don't need to allocate (pseudo-)DMA for PCI
911like in ALSA 0.5.x.
912
913Now assume that the PCI device has an I/O port with 8 bytes and an
914interrupt. Then :c:type:`struct mychip <mychip>` will have the
915following fields:
916
917::
918
919  struct mychip {
920          struct snd_card *card;
921
922          unsigned long port;
923          int irq;
924  };
925
926
927For an I/O port (and also a memory region), you need to have the
928resource pointer for the standard resource management. For an irq, you
929have to keep only the irq number (integer). But you need to initialize
930this number as -1 before actual allocation, since irq 0 is valid. The
931port address and its resource pointer can be initialized as null by
932:c:func:`kzalloc()` automatically, so you don't have to take care of
933resetting them.
934
935The allocation of an I/O port is done like this:
936
937::
938
939  err = pci_request_regions(pci, "My Chip");
940  if (err < 0) {
941          kfree(chip);
942          pci_disable_device(pci);
943          return err;
944  }
945  chip->port = pci_resource_start(pci, 0);
946
947It will reserve the I/O port region of 8 bytes of the given PCI device.
948The returned value, ``chip->res_port``, is allocated via
949:c:func:`kmalloc()` by :c:func:`request_region()`. The pointer
950must be released via :c:func:`kfree()`, but there is a problem with
951this. This issue will be explained later.
952
953The allocation of an interrupt source is done like this:
954
955::
956
957  if (request_irq(pci->irq, snd_mychip_interrupt,
958                  IRQF_SHARED, KBUILD_MODNAME, chip)) {
959          printk(KERN_ERR "cannot grab irq %d\n", pci->irq);
960          snd_mychip_free(chip);
961          return -EBUSY;
962  }
963  chip->irq = pci->irq;
964
965where :c:func:`snd_mychip_interrupt()` is the interrupt handler
966defined `later <#pcm-interface-interrupt-handler>`__. Note that
967``chip->irq`` should be defined only when :c:func:`request_irq()`
968succeeded.
969
970On the PCI bus, interrupts can be shared. Thus, ``IRQF_SHARED`` is used
971as the interrupt flag of :c:func:`request_irq()`.
972
973The last argument of :c:func:`request_irq()` is the data pointer
974passed to the interrupt handler. Usually, the chip-specific record is
975used for that, but you can use what you like, too.
976
977I won't give details about the interrupt handler at this point, but at
978least its appearance can be explained now. The interrupt handler looks
979usually like the following:
980
981::
982
983  static irqreturn_t snd_mychip_interrupt(int irq, void *dev_id)
984  {
985          struct mychip *chip = dev_id;
986          ....
987          return IRQ_HANDLED;
988  }
989
990
991Now let's write the corresponding destructor for the resources above.
992The role of destructor is simple: disable the hardware (if already
993activated) and release the resources. So far, we have no hardware part,
994so the disabling code is not written here.
995
996To release the resources, the “check-and-release” method is a safer way.
997For the interrupt, do like this:
998
999::
1000
1001  if (chip->irq >= 0)
1002          free_irq(chip->irq, chip);
1003
1004Since the irq number can start from 0, you should initialize
1005``chip->irq`` with a negative value (e.g. -1), so that you can check
1006the validity of the irq number as above.
1007
1008When you requested I/O ports or memory regions via
1009:c:func:`pci_request_region()` or
1010:c:func:`pci_request_regions()` like in this example, release the
1011resource(s) using the corresponding function,
1012:c:func:`pci_release_region()` or
1013:c:func:`pci_release_regions()`.
1014
1015::
1016
1017  pci_release_regions(chip->pci);
1018
1019When you requested manually via :c:func:`request_region()` or
1020:c:func:`request_mem_region()`, you can release it via
1021:c:func:`release_resource()`. Suppose that you keep the resource
1022pointer returned from :c:func:`request_region()` in
1023chip->res_port, the release procedure looks like:
1024
1025::
1026
1027  release_and_free_resource(chip->res_port);
1028
1029Don't forget to call :c:func:`pci_disable_device()` before the
1030end.
1031
1032And finally, release the chip-specific record.
1033
1034::
1035
1036  kfree(chip);
1037
1038We didn't implement the hardware disabling part in the above. If you
1039need to do this, please note that the destructor may be called even
1040before the initialization of the chip is completed. It would be better
1041to have a flag to skip hardware disabling if the hardware was not
1042initialized yet.
1043
1044When the chip-data is assigned to the card using
1045:c:func:`snd_device_new()` with ``SNDRV_DEV_LOWLELVEL`` , its
1046destructor is called at the last. That is, it is assured that all other
1047components like PCMs and controls have already been released. You don't
1048have to stop PCMs, etc. explicitly, but just call low-level hardware
1049stopping.
1050
1051The management of a memory-mapped region is almost as same as the
1052management of an I/O port. You'll need three fields like the
1053following:
1054
1055::
1056
1057  struct mychip {
1058          ....
1059          unsigned long iobase_phys;
1060          void __iomem *iobase_virt;
1061  };
1062
1063and the allocation would be like below:
1064
1065::
1066
1067  if ((err = pci_request_regions(pci, "My Chip")) < 0) {
1068          kfree(chip);
1069          return err;
1070  }
1071  chip->iobase_phys = pci_resource_start(pci, 0);
1072  chip->iobase_virt = ioremap_nocache(chip->iobase_phys,
1073                                      pci_resource_len(pci, 0));
1074
1075and the corresponding destructor would be:
1076
1077::
1078
1079  static int snd_mychip_free(struct mychip *chip)
1080  {
1081          ....
1082          if (chip->iobase_virt)
1083                  iounmap(chip->iobase_virt);
1084          ....
1085          pci_release_regions(chip->pci);
1086          ....
1087  }
1088
1089PCI Entries
1090-----------
1091
1092So far, so good. Let's finish the missing PCI stuff. At first, we need a
1093:c:type:`struct pci_device_id <pci_device_id>` table for
1094this chipset. It's a table of PCI vendor/device ID number, and some
1095masks.
1096
1097For example,
1098
1099::
1100
1101  static struct pci_device_id snd_mychip_ids[] = {
1102          { PCI_VENDOR_ID_FOO, PCI_DEVICE_ID_BAR,
1103            PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
1104          ....
1105          { 0, }
1106  };
1107  MODULE_DEVICE_TABLE(pci, snd_mychip_ids);
1108
1109The first and second fields of the :c:type:`struct pci_device_id
1110<pci_device_id>` structure are the vendor and device IDs. If you
1111have no reason to filter the matching devices, you can leave the
1112remaining fields as above. The last field of the :c:type:`struct
1113pci_device_id <pci_device_id>` struct contains private data
1114for this entry. You can specify any value here, for example, to define
1115specific operations for supported device IDs. Such an example is found
1116in the intel8x0 driver.
1117
1118The last entry of this list is the terminator. You must specify this
1119all-zero entry.
1120
1121Then, prepare the :c:type:`struct pci_driver <pci_driver>`
1122record:
1123
1124::
1125
1126  static struct pci_driver driver = {
1127          .name = KBUILD_MODNAME,
1128          .id_table = snd_mychip_ids,
1129          .probe = snd_mychip_probe,
1130          .remove = snd_mychip_remove,
1131  };
1132
1133The ``probe`` and ``remove`` functions have already been defined in
1134the previous sections. The ``name`` field is the name string of this
1135device. Note that you must not use a slash “/” in this string.
1136
1137And at last, the module entries:
1138
1139::
1140
1141  static int __init alsa_card_mychip_init(void)
1142  {
1143          return pci_register_driver(&driver);
1144  }
1145
1146  static void __exit alsa_card_mychip_exit(void)
1147  {
1148          pci_unregister_driver(&driver);
1149  }
1150
1151  module_init(alsa_card_mychip_init)
1152  module_exit(alsa_card_mychip_exit)
1153
1154Note that these module entries are tagged with ``__init`` and ``__exit``
1155prefixes.
1156
1157Oh, one thing was forgotten. If you have no exported symbols, you need
1158to declare it in 2.2 or 2.4 kernels (it's not necessary in 2.6 kernels).
1159
1160::
1161
1162  EXPORT_NO_SYMBOLS;
1163
1164That's all!
1165
1166PCM Interface
1167=============
1168
1169General
1170-------
1171
1172The PCM middle layer of ALSA is quite powerful and it is only necessary
1173for each driver to implement the low-level functions to access its
1174hardware.
1175
1176For accessing to the PCM layer, you need to include ``<sound/pcm.h>``
1177first. In addition, ``<sound/pcm_params.h>`` might be needed if you
1178access to some functions related with hw_param.
1179
1180Each card device can have up to four pcm instances. A pcm instance
1181corresponds to a pcm device file. The limitation of number of instances
1182comes only from the available bit size of the Linux's device numbers.
1183Once when 64bit device number is used, we'll have more pcm instances
1184available.
1185
1186A pcm instance consists of pcm playback and capture streams, and each
1187pcm stream consists of one or more pcm substreams. Some soundcards
1188support multiple playback functions. For example, emu10k1 has a PCM
1189playback of 32 stereo substreams. In this case, at each open, a free
1190substream is (usually) automatically chosen and opened. Meanwhile, when
1191only one substream exists and it was already opened, the successful open
1192will either block or error with ``EAGAIN`` according to the file open
1193mode. But you don't have to care about such details in your driver. The
1194PCM middle layer will take care of such work.
1195
1196Full Code Example
1197-----------------
1198
1199The example code below does not include any hardware access routines but
1200shows only the skeleton, how to build up the PCM interfaces.
1201
1202::
1203
1204      #include <sound/pcm.h>
1205      ....
1206
1207      /* hardware definition */
1208      static struct snd_pcm_hardware snd_mychip_playback_hw = {
1209              .info = (SNDRV_PCM_INFO_MMAP |
1210                       SNDRV_PCM_INFO_INTERLEAVED |
1211                       SNDRV_PCM_INFO_BLOCK_TRANSFER |
1212                       SNDRV_PCM_INFO_MMAP_VALID),
1213              .formats =          SNDRV_PCM_FMTBIT_S16_LE,
1214              .rates =            SNDRV_PCM_RATE_8000_48000,
1215              .rate_min =         8000,
1216              .rate_max =         48000,
1217              .channels_min =     2,
1218              .channels_max =     2,
1219              .buffer_bytes_max = 32768,
1220              .period_bytes_min = 4096,
1221              .period_bytes_max = 32768,
1222              .periods_min =      1,
1223              .periods_max =      1024,
1224      };
1225
1226      /* hardware definition */
1227      static struct snd_pcm_hardware snd_mychip_capture_hw = {
1228              .info = (SNDRV_PCM_INFO_MMAP |
1229                       SNDRV_PCM_INFO_INTERLEAVED |
1230                       SNDRV_PCM_INFO_BLOCK_TRANSFER |
1231                       SNDRV_PCM_INFO_MMAP_VALID),
1232              .formats =          SNDRV_PCM_FMTBIT_S16_LE,
1233              .rates =            SNDRV_PCM_RATE_8000_48000,
1234              .rate_min =         8000,
1235              .rate_max =         48000,
1236              .channels_min =     2,
1237              .channels_max =     2,
1238              .buffer_bytes_max = 32768,
1239              .period_bytes_min = 4096,
1240              .period_bytes_max = 32768,
1241              .periods_min =      1,
1242              .periods_max =      1024,
1243      };
1244
1245      /* open callback */
1246      static int snd_mychip_playback_open(struct snd_pcm_substream *substream)
1247      {
1248              struct mychip *chip = snd_pcm_substream_chip(substream);
1249              struct snd_pcm_runtime *runtime = substream->runtime;
1250
1251              runtime->hw = snd_mychip_playback_hw;
1252              /* more hardware-initialization will be done here */
1253              ....
1254              return 0;
1255      }
1256
1257      /* close callback */
1258      static int snd_mychip_playback_close(struct snd_pcm_substream *substream)
1259      {
1260              struct mychip *chip = snd_pcm_substream_chip(substream);
1261              /* the hardware-specific codes will be here */
1262              ....
1263              return 0;
1264
1265      }
1266
1267      /* open callback */
1268      static int snd_mychip_capture_open(struct snd_pcm_substream *substream)
1269      {
1270              struct mychip *chip = snd_pcm_substream_chip(substream);
1271              struct snd_pcm_runtime *runtime = substream->runtime;
1272
1273              runtime->hw = snd_mychip_capture_hw;
1274              /* more hardware-initialization will be done here */
1275              ....
1276              return 0;
1277      }
1278
1279      /* close callback */
1280      static int snd_mychip_capture_close(struct snd_pcm_substream *substream)
1281      {
1282              struct mychip *chip = snd_pcm_substream_chip(substream);
1283              /* the hardware-specific codes will be here */
1284              ....
1285              return 0;
1286
1287      }
1288
1289      /* hw_params callback */
1290      static int snd_mychip_pcm_hw_params(struct snd_pcm_substream *substream,
1291                                   struct snd_pcm_hw_params *hw_params)
1292      {
1293              return snd_pcm_lib_malloc_pages(substream,
1294                                         params_buffer_bytes(hw_params));
1295      }
1296
1297      /* hw_free callback */
1298      static int snd_mychip_pcm_hw_free(struct snd_pcm_substream *substream)
1299      {
1300              return snd_pcm_lib_free_pages(substream);
1301      }
1302
1303      /* prepare callback */
1304      static int snd_mychip_pcm_prepare(struct snd_pcm_substream *substream)
1305      {
1306              struct mychip *chip = snd_pcm_substream_chip(substream);
1307              struct snd_pcm_runtime *runtime = substream->runtime;
1308
1309              /* set up the hardware with the current configuration
1310               * for example...
1311               */
1312              mychip_set_sample_format(chip, runtime->format);
1313              mychip_set_sample_rate(chip, runtime->rate);
1314              mychip_set_channels(chip, runtime->channels);
1315              mychip_set_dma_setup(chip, runtime->dma_addr,
1316                                   chip->buffer_size,
1317                                   chip->period_size);
1318              return 0;
1319      }
1320
1321      /* trigger callback */
1322      static int snd_mychip_pcm_trigger(struct snd_pcm_substream *substream,
1323                                        int cmd)
1324      {
1325              switch (cmd) {
1326              case SNDRV_PCM_TRIGGER_START:
1327                      /* do something to start the PCM engine */
1328                      ....
1329                      break;
1330              case SNDRV_PCM_TRIGGER_STOP:
1331                      /* do something to stop the PCM engine */
1332                      ....
1333                      break;
1334              default:
1335                      return -EINVAL;
1336              }
1337      }
1338
1339      /* pointer callback */
1340      static snd_pcm_uframes_t
1341      snd_mychip_pcm_pointer(struct snd_pcm_substream *substream)
1342      {
1343              struct mychip *chip = snd_pcm_substream_chip(substream);
1344              unsigned int current_ptr;
1345
1346              /* get the current hardware pointer */
1347              current_ptr = mychip_get_hw_pointer(chip);
1348              return current_ptr;
1349      }
1350
1351      /* operators */
1352      static struct snd_pcm_ops snd_mychip_playback_ops = {
1353              .open =        snd_mychip_playback_open,
1354              .close =       snd_mychip_playback_close,
1355              .ioctl =       snd_pcm_lib_ioctl,
1356              .hw_params =   snd_mychip_pcm_hw_params,
1357              .hw_free =     snd_mychip_pcm_hw_free,
1358              .prepare =     snd_mychip_pcm_prepare,
1359              .trigger =     snd_mychip_pcm_trigger,
1360              .pointer =     snd_mychip_pcm_pointer,
1361      };
1362
1363      /* operators */
1364      static struct snd_pcm_ops snd_mychip_capture_ops = {
1365              .open =        snd_mychip_capture_open,
1366              .close =       snd_mychip_capture_close,
1367              .ioctl =       snd_pcm_lib_ioctl,
1368              .hw_params =   snd_mychip_pcm_hw_params,
1369              .hw_free =     snd_mychip_pcm_hw_free,
1370              .prepare =     snd_mychip_pcm_prepare,
1371              .trigger =     snd_mychip_pcm_trigger,
1372              .pointer =     snd_mychip_pcm_pointer,
1373      };
1374
1375      /*
1376       *  definitions of capture are omitted here...
1377       */
1378
1379      /* create a pcm device */
1380      static int snd_mychip_new_pcm(struct mychip *chip)
1381      {
1382              struct snd_pcm *pcm;
1383              int err;
1384
1385              err = snd_pcm_new(chip->card, "My Chip", 0, 1, 1, &pcm);
1386              if (err < 0)
1387                      return err;
1388              pcm->private_data = chip;
1389              strcpy(pcm->name, "My Chip");
1390              chip->pcm = pcm;
1391              /* set operators */
1392              snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK,
1393                              &snd_mychip_playback_ops);
1394              snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE,
1395                              &snd_mychip_capture_ops);
1396              /* pre-allocation of buffers */
1397              /* NOTE: this may fail */
1398              snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
1399                                                    snd_dma_pci_data(chip->pci),
1400                                                    64*1024, 64*1024);
1401              return 0;
1402      }
1403
1404
1405PCM Constructor
1406---------------
1407
1408A pcm instance is allocated by the :c:func:`snd_pcm_new()`
1409function. It would be better to create a constructor for pcm, namely,
1410
1411::
1412
1413  static int snd_mychip_new_pcm(struct mychip *chip)
1414  {
1415          struct snd_pcm *pcm;
1416          int err;
1417
1418          err = snd_pcm_new(chip->card, "My Chip", 0, 1, 1, &pcm);
1419          if (err < 0)
1420                  return err;
1421          pcm->private_data = chip;
1422          strcpy(pcm->name, "My Chip");
1423          chip->pcm = pcm;
1424	  ....
1425          return 0;
1426  }
1427
1428The :c:func:`snd_pcm_new()` function takes four arguments. The
1429first argument is the card pointer to which this pcm is assigned, and
1430the second is the ID string.
1431
1432The third argument (``index``, 0 in the above) is the index of this new
1433pcm. It begins from zero. If you create more than one pcm instances,
1434specify the different numbers in this argument. For example, ``index =
14351`` for the second PCM device.
1436
1437The fourth and fifth arguments are the number of substreams for playback
1438and capture, respectively. Here 1 is used for both arguments. When no
1439playback or capture substreams are available, pass 0 to the
1440corresponding argument.
1441
1442If a chip supports multiple playbacks or captures, you can specify more
1443numbers, but they must be handled properly in open/close, etc.
1444callbacks. When you need to know which substream you are referring to,
1445then it can be obtained from :c:type:`struct snd_pcm_substream
1446<snd_pcm_substream>` data passed to each callback as follows:
1447
1448::
1449
1450  struct snd_pcm_substream *substream;
1451  int index = substream->number;
1452
1453
1454After the pcm is created, you need to set operators for each pcm stream.
1455
1456::
1457
1458  snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK,
1459                  &snd_mychip_playback_ops);
1460  snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE,
1461                  &snd_mychip_capture_ops);
1462
1463The operators are defined typically like this:
1464
1465::
1466
1467  static struct snd_pcm_ops snd_mychip_playback_ops = {
1468          .open =        snd_mychip_pcm_open,
1469          .close =       snd_mychip_pcm_close,
1470          .ioctl =       snd_pcm_lib_ioctl,
1471          .hw_params =   snd_mychip_pcm_hw_params,
1472          .hw_free =     snd_mychip_pcm_hw_free,
1473          .prepare =     snd_mychip_pcm_prepare,
1474          .trigger =     snd_mychip_pcm_trigger,
1475          .pointer =     snd_mychip_pcm_pointer,
1476  };
1477
1478All the callbacks are described in the Operators_ subsection.
1479
1480After setting the operators, you probably will want to pre-allocate the
1481buffer. For the pre-allocation, simply call the following:
1482
1483::
1484
1485  snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
1486                                        snd_dma_pci_data(chip->pci),
1487                                        64*1024, 64*1024);
1488
1489It will allocate a buffer up to 64kB as default. Buffer management
1490details will be described in the later section `Buffer and Memory
1491Management`_.
1492
1493Additionally, you can set some extra information for this pcm in
1494``pcm->info_flags``. The available values are defined as
1495``SNDRV_PCM_INFO_XXX`` in ``<sound/asound.h>``, which is used for the
1496hardware definition (described later). When your soundchip supports only
1497half-duplex, specify like this:
1498
1499::
1500
1501  pcm->info_flags = SNDRV_PCM_INFO_HALF_DUPLEX;
1502
1503
1504... And the Destructor?
1505-----------------------
1506
1507The destructor for a pcm instance is not always necessary. Since the pcm
1508device will be released by the middle layer code automatically, you
1509don't have to call the destructor explicitly.
1510
1511The destructor would be necessary if you created special records
1512internally and needed to release them. In such a case, set the
1513destructor function to ``pcm->private_free``:
1514
1515::
1516
1517      static void mychip_pcm_free(struct snd_pcm *pcm)
1518      {
1519              struct mychip *chip = snd_pcm_chip(pcm);
1520              /* free your own data */
1521              kfree(chip->my_private_pcm_data);
1522              /* do what you like else */
1523              ....
1524      }
1525
1526      static int snd_mychip_new_pcm(struct mychip *chip)
1527      {
1528              struct snd_pcm *pcm;
1529              ....
1530              /* allocate your own data */
1531              chip->my_private_pcm_data = kmalloc(...);
1532              /* set the destructor */
1533              pcm->private_data = chip;
1534              pcm->private_free = mychip_pcm_free;
1535              ....
1536      }
1537
1538
1539
1540Runtime Pointer - The Chest of PCM Information
1541----------------------------------------------
1542
1543When the PCM substream is opened, a PCM runtime instance is allocated
1544and assigned to the substream. This pointer is accessible via
1545``substream->runtime``. This runtime pointer holds most information you
1546need to control the PCM: the copy of hw_params and sw_params
1547configurations, the buffer pointers, mmap records, spinlocks, etc.
1548
1549The definition of runtime instance is found in ``<sound/pcm.h>``. Here
1550are the contents of this file:
1551
1552::
1553
1554  struct _snd_pcm_runtime {
1555          /* -- Status -- */
1556          struct snd_pcm_substream *trigger_master;
1557          snd_timestamp_t trigger_tstamp;	/* trigger timestamp */
1558          int overrange;
1559          snd_pcm_uframes_t avail_max;
1560          snd_pcm_uframes_t hw_ptr_base;	/* Position at buffer restart */
1561          snd_pcm_uframes_t hw_ptr_interrupt; /* Position at interrupt time*/
1562
1563          /* -- HW params -- */
1564          snd_pcm_access_t access;	/* access mode */
1565          snd_pcm_format_t format;	/* SNDRV_PCM_FORMAT_* */
1566          snd_pcm_subformat_t subformat;	/* subformat */
1567          unsigned int rate;		/* rate in Hz */
1568          unsigned int channels;		/* channels */
1569          snd_pcm_uframes_t period_size;	/* period size */
1570          unsigned int periods;		/* periods */
1571          snd_pcm_uframes_t buffer_size;	/* buffer size */
1572          unsigned int tick_time;		/* tick time */
1573          snd_pcm_uframes_t min_align;	/* Min alignment for the format */
1574          size_t byte_align;
1575          unsigned int frame_bits;
1576          unsigned int sample_bits;
1577          unsigned int info;
1578          unsigned int rate_num;
1579          unsigned int rate_den;
1580
1581          /* -- SW params -- */
1582          struct timespec tstamp_mode;	/* mmap timestamp is updated */
1583          unsigned int period_step;
1584          unsigned int sleep_min;		/* min ticks to sleep */
1585          snd_pcm_uframes_t start_threshold;
1586          snd_pcm_uframes_t stop_threshold;
1587          snd_pcm_uframes_t silence_threshold; /* Silence filling happens when
1588                                                  noise is nearest than this */
1589          snd_pcm_uframes_t silence_size;	/* Silence filling size */
1590          snd_pcm_uframes_t boundary;	/* pointers wrap point */
1591
1592          snd_pcm_uframes_t silenced_start;
1593          snd_pcm_uframes_t silenced_size;
1594
1595          snd_pcm_sync_id_t sync;		/* hardware synchronization ID */
1596
1597          /* -- mmap -- */
1598          volatile struct snd_pcm_mmap_status *status;
1599          volatile struct snd_pcm_mmap_control *control;
1600          atomic_t mmap_count;
1601
1602          /* -- locking / scheduling -- */
1603          spinlock_t lock;
1604          wait_queue_head_t sleep;
1605          struct timer_list tick_timer;
1606          struct fasync_struct *fasync;
1607
1608          /* -- private section -- */
1609          void *private_data;
1610          void (*private_free)(struct snd_pcm_runtime *runtime);
1611
1612          /* -- hardware description -- */
1613          struct snd_pcm_hardware hw;
1614          struct snd_pcm_hw_constraints hw_constraints;
1615
1616          /* -- timer -- */
1617          unsigned int timer_resolution;	/* timer resolution */
1618
1619          /* -- DMA -- */
1620          unsigned char *dma_area;	/* DMA area */
1621          dma_addr_t dma_addr;		/* physical bus address (not accessible from main CPU) */
1622          size_t dma_bytes;		/* size of DMA area */
1623
1624          struct snd_dma_buffer *dma_buffer_p;	/* allocated buffer */
1625
1626  #if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)
1627          /* -- OSS things -- */
1628          struct snd_pcm_oss_runtime oss;
1629  #endif
1630  };
1631
1632
1633For the operators (callbacks) of each sound driver, most of these
1634records are supposed to be read-only. Only the PCM middle-layer changes
1635/ updates them. The exceptions are the hardware description (hw) DMA
1636buffer information and the private data. Besides, if you use the
1637standard buffer allocation method via
1638:c:func:`snd_pcm_lib_malloc_pages()`, you don't need to set the
1639DMA buffer information by yourself.
1640
1641In the sections below, important records are explained.
1642
1643Hardware Description
1644~~~~~~~~~~~~~~~~~~~~
1645
1646The hardware descriptor (:c:type:`struct snd_pcm_hardware
1647<snd_pcm_hardware>`) contains the definitions of the fundamental
1648hardware configuration. Above all, you'll need to define this in the
1649`PCM open callback`_. Note that the runtime instance holds the copy of
1650the descriptor, not the pointer to the existing descriptor. That is,
1651in the open callback, you can modify the copied descriptor
1652(``runtime->hw``) as you need. For example, if the maximum number of
1653channels is 1 only on some chip models, you can still use the same
1654hardware descriptor and change the channels_max later:
1655
1656::
1657
1658          struct snd_pcm_runtime *runtime = substream->runtime;
1659          ...
1660          runtime->hw = snd_mychip_playback_hw; /* common definition */
1661          if (chip->model == VERY_OLD_ONE)
1662                  runtime->hw.channels_max = 1;
1663
1664Typically, you'll have a hardware descriptor as below:
1665
1666::
1667
1668  static struct snd_pcm_hardware snd_mychip_playback_hw = {
1669          .info = (SNDRV_PCM_INFO_MMAP |
1670                   SNDRV_PCM_INFO_INTERLEAVED |
1671                   SNDRV_PCM_INFO_BLOCK_TRANSFER |
1672                   SNDRV_PCM_INFO_MMAP_VALID),
1673          .formats =          SNDRV_PCM_FMTBIT_S16_LE,
1674          .rates =            SNDRV_PCM_RATE_8000_48000,
1675          .rate_min =         8000,
1676          .rate_max =         48000,
1677          .channels_min =     2,
1678          .channels_max =     2,
1679          .buffer_bytes_max = 32768,
1680          .period_bytes_min = 4096,
1681          .period_bytes_max = 32768,
1682          .periods_min =      1,
1683          .periods_max =      1024,
1684  };
1685
1686-  The ``info`` field contains the type and capabilities of this
1687   pcm. The bit flags are defined in ``<sound/asound.h>`` as
1688   ``SNDRV_PCM_INFO_XXX``. Here, at least, you have to specify whether
1689   the mmap is supported and which interleaved format is
1690   supported. When the hardware supports mmap, add the
1691   ``SNDRV_PCM_INFO_MMAP`` flag here. When the hardware supports the
1692   interleaved or the non-interleaved formats,
1693   ``SNDRV_PCM_INFO_INTERLEAVED`` or ``SNDRV_PCM_INFO_NONINTERLEAVED``
1694   flag must be set, respectively. If both are supported, you can set
1695   both, too.
1696
1697   In the above example, ``MMAP_VALID`` and ``BLOCK_TRANSFER`` are
1698   specified for the OSS mmap mode. Usually both are set. Of course,
1699   ``MMAP_VALID`` is set only if the mmap is really supported.
1700
1701   The other possible flags are ``SNDRV_PCM_INFO_PAUSE`` and
1702   ``SNDRV_PCM_INFO_RESUME``. The ``PAUSE`` bit means that the pcm
1703   supports the “pause” operation, while the ``RESUME`` bit means that
1704   the pcm supports the full “suspend/resume” operation. If the
1705   ``PAUSE`` flag is set, the ``trigger`` callback below must handle
1706   the corresponding (pause push/release) commands. The suspend/resume
1707   trigger commands can be defined even without the ``RESUME``
1708   flag. See `Power Management`_ section for details.
1709
1710   When the PCM substreams can be synchronized (typically,
1711   synchronized start/stop of a playback and a capture streams), you
1712   can give ``SNDRV_PCM_INFO_SYNC_START``, too. In this case, you'll
1713   need to check the linked-list of PCM substreams in the trigger
1714   callback. This will be described in the later section.
1715
1716-  ``formats`` field contains the bit-flags of supported formats
1717   (``SNDRV_PCM_FMTBIT_XXX``). If the hardware supports more than one
1718   format, give all or'ed bits. In the example above, the signed 16bit
1719   little-endian format is specified.
1720
1721-  ``rates`` field contains the bit-flags of supported rates
1722   (``SNDRV_PCM_RATE_XXX``). When the chip supports continuous rates,
1723   pass ``CONTINUOUS`` bit additionally. The pre-defined rate bits are
1724   provided only for typical rates. If your chip supports
1725   unconventional rates, you need to add the ``KNOT`` bit and set up
1726   the hardware constraint manually (explained later).
1727
1728-  ``rate_min`` and ``rate_max`` define the minimum and maximum sample
1729   rate. This should correspond somehow to ``rates`` bits.
1730
1731-  ``channel_min`` and ``channel_max`` define, as you might already
1732   expected, the minimum and maximum number of channels.
1733
1734-  ``buffer_bytes_max`` defines the maximum buffer size in
1735   bytes. There is no ``buffer_bytes_min`` field, since it can be
1736   calculated from the minimum period size and the minimum number of
1737   periods. Meanwhile, ``period_bytes_min`` and define the minimum and
1738   maximum size of the period in bytes. ``periods_max`` and
1739   ``periods_min`` define the maximum and minimum number of periods in
1740   the buffer.
1741
1742   The “period” is a term that corresponds to a fragment in the OSS
1743   world. The period defines the size at which a PCM interrupt is
1744   generated. This size strongly depends on the hardware. Generally,
1745   the smaller period size will give you more interrupts, that is,
1746   more controls. In the case of capture, this size defines the input
1747   latency. On the other hand, the whole buffer size defines the
1748   output latency for the playback direction.
1749
1750-  There is also a field ``fifo_size``. This specifies the size of the
1751   hardware FIFO, but currently it is neither used in the driver nor
1752   in the alsa-lib. So, you can ignore this field.
1753
1754PCM Configurations
1755~~~~~~~~~~~~~~~~~~
1756
1757Ok, let's go back again to the PCM runtime records. The most
1758frequently referred records in the runtime instance are the PCM
1759configurations. The PCM configurations are stored in the runtime
1760instance after the application sends ``hw_params`` data via
1761alsa-lib. There are many fields copied from hw_params and sw_params
1762structs. For example, ``format`` holds the format type chosen by the
1763application. This field contains the enum value
1764``SNDRV_PCM_FORMAT_XXX``.
1765
1766One thing to be noted is that the configured buffer and period sizes
1767are stored in “frames” in the runtime. In the ALSA world, ``1 frame =
1768channels \* samples-size``. For conversion between frames and bytes,
1769you can use the :c:func:`frames_to_bytes()` and
1770:c:func:`bytes_to_frames()` helper functions.
1771
1772::
1773
1774  period_bytes = frames_to_bytes(runtime, runtime->period_size);
1775
1776Also, many software parameters (sw_params) are stored in frames, too.
1777Please check the type of the field. ``snd_pcm_uframes_t`` is for the
1778frames as unsigned integer while ``snd_pcm_sframes_t`` is for the
1779frames as signed integer.
1780
1781DMA Buffer Information
1782~~~~~~~~~~~~~~~~~~~~~~
1783
1784The DMA buffer is defined by the following four fields, ``dma_area``,
1785``dma_addr``, ``dma_bytes`` and ``dma_private``. The ``dma_area``
1786holds the buffer pointer (the logical address). You can call
1787:c:func:`memcpy()` from/to this pointer. Meanwhile, ``dma_addr`` holds
1788the physical address of the buffer. This field is specified only when
1789the buffer is a linear buffer. ``dma_bytes`` holds the size of buffer
1790in bytes. ``dma_private`` is used for the ALSA DMA allocator.
1791
1792If you use a standard ALSA function,
1793:c:func:`snd_pcm_lib_malloc_pages()`, for allocating the buffer,
1794these fields are set by the ALSA middle layer, and you should *not*
1795change them by yourself. You can read them but not write them. On the
1796other hand, if you want to allocate the buffer by yourself, you'll
1797need to manage it in hw_params callback. At least, ``dma_bytes`` is
1798mandatory. ``dma_area`` is necessary when the buffer is mmapped. If
1799your driver doesn't support mmap, this field is not
1800necessary. ``dma_addr`` is also optional. You can use dma_private as
1801you like, too.
1802
1803Running Status
1804~~~~~~~~~~~~~~
1805
1806The running status can be referred via ``runtime->status``. This is
1807the pointer to the :c:type:`struct snd_pcm_mmap_status
1808<snd_pcm_mmap_status>` record. For example, you can get the current
1809DMA hardware pointer via ``runtime->status->hw_ptr``.
1810
1811The DMA application pointer can be referred via ``runtime->control``,
1812which points to the :c:type:`struct snd_pcm_mmap_control
1813<snd_pcm_mmap_control>` record. However, accessing directly to
1814this value is not recommended.
1815
1816Private Data
1817~~~~~~~~~~~~
1818
1819You can allocate a record for the substream and store it in
1820``runtime->private_data``. Usually, this is done in the `PCM open
1821callback`_. Don't mix this with ``pcm->private_data``. The
1822``pcm->private_data`` usually points to the chip instance assigned
1823statically at the creation of PCM, while the ``runtime->private_data``
1824points to a dynamic data structure created at the PCM open
1825callback.
1826
1827::
1828
1829  static int snd_xxx_open(struct snd_pcm_substream *substream)
1830  {
1831          struct my_pcm_data *data;
1832          ....
1833          data = kmalloc(sizeof(*data), GFP_KERNEL);
1834          substream->runtime->private_data = data;
1835          ....
1836  }
1837
1838
1839The allocated object must be released in the `close callback`_.
1840
1841Operators
1842---------
1843
1844OK, now let me give details about each pcm callback (``ops``). In
1845general, every callback must return 0 if successful, or a negative
1846error number such as ``-EINVAL``. To choose an appropriate error
1847number, it is advised to check what value other parts of the kernel
1848return when the same kind of request fails.
1849
1850The callback function takes at least the argument with :c:type:`struct
1851snd_pcm_substream <snd_pcm_substream>` pointer. To retrieve the chip
1852record from the given substream instance, you can use the following
1853macro.
1854
1855::
1856
1857  int xxx() {
1858          struct mychip *chip = snd_pcm_substream_chip(substream);
1859          ....
1860  }
1861
1862The macro reads ``substream->private_data``, which is a copy of
1863``pcm->private_data``. You can override the former if you need to
1864assign different data records per PCM substream. For example, the
1865cmi8330 driver assigns different ``private_data`` for playback and
1866capture directions, because it uses two different codecs (SB- and
1867AD-compatible) for different directions.
1868
1869PCM open callback
1870~~~~~~~~~~~~~~~~~
1871
1872::
1873
1874  static int snd_xxx_open(struct snd_pcm_substream *substream);
1875
1876This is called when a pcm substream is opened.
1877
1878At least, here you have to initialize the ``runtime->hw``
1879record. Typically, this is done by like this:
1880
1881::
1882
1883  static int snd_xxx_open(struct snd_pcm_substream *substream)
1884  {
1885          struct mychip *chip = snd_pcm_substream_chip(substream);
1886          struct snd_pcm_runtime *runtime = substream->runtime;
1887
1888          runtime->hw = snd_mychip_playback_hw;
1889          return 0;
1890  }
1891
1892where ``snd_mychip_playback_hw`` is the pre-defined hardware
1893description.
1894
1895You can allocate a private data in this callback, as described in
1896`Private Data`_ section.
1897
1898If the hardware configuration needs more constraints, set the hardware
1899constraints here, too. See Constraints_ for more details.
1900
1901close callback
1902~~~~~~~~~~~~~~
1903
1904::
1905
1906  static int snd_xxx_close(struct snd_pcm_substream *substream);
1907
1908
1909Obviously, this is called when a pcm substream is closed.
1910
1911Any private instance for a pcm substream allocated in the ``open``
1912callback will be released here.
1913
1914::
1915
1916  static int snd_xxx_close(struct snd_pcm_substream *substream)
1917  {
1918          ....
1919          kfree(substream->runtime->private_data);
1920          ....
1921  }
1922
1923ioctl callback
1924~~~~~~~~~~~~~~
1925
1926This is used for any special call to pcm ioctls. But usually you can
1927pass a generic ioctl callback, :c:func:`snd_pcm_lib_ioctl()`.
1928
1929hw_params callback
1930~~~~~~~~~~~~~~~~~~~
1931
1932::
1933
1934  static int snd_xxx_hw_params(struct snd_pcm_substream *substream,
1935                               struct snd_pcm_hw_params *hw_params);
1936
1937This is called when the hardware parameter (``hw_params``) is set up
1938by the application, that is, once when the buffer size, the period
1939size, the format, etc. are defined for the pcm substream.
1940
1941Many hardware setups should be done in this callback, including the
1942allocation of buffers.
1943
1944Parameters to be initialized are retrieved by
1945:c:func:`params_xxx()` macros. To allocate buffer, you can call a
1946helper function,
1947
1948::
1949
1950  snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
1951
1952:c:func:`snd_pcm_lib_malloc_pages()` is available only when the
1953DMA buffers have been pre-allocated. See the section `Buffer Types`_
1954for more details.
1955
1956Note that this and ``prepare`` callbacks may be called multiple times
1957per initialization. For example, the OSS emulation may call these
1958callbacks at each change via its ioctl.
1959
1960Thus, you need to be careful not to allocate the same buffers many
1961times, which will lead to memory leaks! Calling the helper function
1962above many times is OK. It will release the previous buffer
1963automatically when it was already allocated.
1964
1965Another note is that this callback is non-atomic (schedulable) as
1966default, i.e. when no ``nonatomic`` flag set. This is important,
1967because the ``trigger`` callback is atomic (non-schedulable). That is,
1968mutexes or any schedule-related functions are not available in
1969``trigger`` callback. Please see the subsection Atomicity_ for
1970details.
1971
1972hw_free callback
1973~~~~~~~~~~~~~~~~~
1974
1975::
1976
1977  static int snd_xxx_hw_free(struct snd_pcm_substream *substream);
1978
1979This is called to release the resources allocated via
1980``hw_params``. For example, releasing the buffer via
1981:c:func:`snd_pcm_lib_malloc_pages()` is done by calling the
1982following:
1983
1984::
1985
1986  snd_pcm_lib_free_pages(substream);
1987
1988This function is always called before the close callback is called.
1989Also, the callback may be called multiple times, too. Keep track
1990whether the resource was already released.
1991
1992prepare callback
1993~~~~~~~~~~~~~~~~
1994
1995::
1996
1997  static int snd_xxx_prepare(struct snd_pcm_substream *substream);
1998
1999This callback is called when the pcm is “prepared”. You can set the
2000format type, sample rate, etc. here. The difference from ``hw_params``
2001is that the ``prepare`` callback will be called each time
2002:c:func:`snd_pcm_prepare()` is called, i.e. when recovering after
2003underruns, etc.
2004
2005Note that this callback is now non-atomic. You can use
2006schedule-related functions safely in this callback.
2007
2008In this and the following callbacks, you can refer to the values via
2009the runtime record, ``substream->runtime``. For example, to get the
2010current rate, format or channels, access to ``runtime->rate``,
2011``runtime->format`` or ``runtime->channels``, respectively. The
2012physical address of the allocated buffer is set to
2013``runtime->dma_area``. The buffer and period sizes are in
2014``runtime->buffer_size`` and ``runtime->period_size``, respectively.
2015
2016Be careful that this callback will be called many times at each setup,
2017too.
2018
2019trigger callback
2020~~~~~~~~~~~~~~~~
2021
2022::
2023
2024  static int snd_xxx_trigger(struct snd_pcm_substream *substream, int cmd);
2025
2026This is called when the pcm is started, stopped or paused.
2027
2028Which action is specified in the second argument,
2029``SNDRV_PCM_TRIGGER_XXX`` in ``<sound/pcm.h>``. At least, the ``START``
2030and ``STOP`` commands must be defined in this callback.
2031
2032::
2033
2034  switch (cmd) {
2035  case SNDRV_PCM_TRIGGER_START:
2036          /* do something to start the PCM engine */
2037          break;
2038  case SNDRV_PCM_TRIGGER_STOP:
2039          /* do something to stop the PCM engine */
2040          break;
2041  default:
2042          return -EINVAL;
2043  }
2044
2045When the pcm supports the pause operation (given in the info field of
2046the hardware table), the ``PAUSE_PUSH`` and ``PAUSE_RELEASE`` commands
2047must be handled here, too. The former is the command to pause the pcm,
2048and the latter to restart the pcm again.
2049
2050When the pcm supports the suspend/resume operation, regardless of full
2051or partial suspend/resume support, the ``SUSPEND`` and ``RESUME``
2052commands must be handled, too. These commands are issued when the
2053power-management status is changed. Obviously, the ``SUSPEND`` and
2054``RESUME`` commands suspend and resume the pcm substream, and usually,
2055they are identical to the ``STOP`` and ``START`` commands, respectively.
2056See the `Power Management`_ section for details.
2057
2058As mentioned, this callback is atomic as default unless ``nonatomic``
2059flag set, and you cannot call functions which may sleep. The
2060``trigger`` callback should be as minimal as possible, just really
2061triggering the DMA. The other stuff should be initialized
2062``hw_params`` and ``prepare`` callbacks properly beforehand.
2063
2064pointer callback
2065~~~~~~~~~~~~~~~~
2066
2067::
2068
2069  static snd_pcm_uframes_t snd_xxx_pointer(struct snd_pcm_substream *substream)
2070
2071This callback is called when the PCM middle layer inquires the current
2072hardware position on the buffer. The position must be returned in
2073frames, ranging from 0 to ``buffer_size - 1``.
2074
2075This is called usually from the buffer-update routine in the pcm
2076middle layer, which is invoked when :c:func:`snd_pcm_period_elapsed()`
2077is called in the interrupt routine. Then the pcm middle layer updates
2078the position and calculates the available space, and wakes up the
2079sleeping poll threads, etc.
2080
2081This callback is also atomic as default.
2082
2083copy_user, copy_kernel and fill_silence ops
2084~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2085
2086These callbacks are not mandatory, and can be omitted in most cases.
2087These callbacks are used when the hardware buffer cannot be in the
2088normal memory space. Some chips have their own buffer on the hardware
2089which is not mappable. In such a case, you have to transfer the data
2090manually from the memory buffer to the hardware buffer. Or, if the
2091buffer is non-contiguous on both physical and virtual memory spaces,
2092these callbacks must be defined, too.
2093
2094If these two callbacks are defined, copy and set-silence operations
2095are done by them. The detailed will be described in the later section
2096`Buffer and Memory Management`_.
2097
2098ack callback
2099~~~~~~~~~~~~
2100
2101This callback is also not mandatory. This callback is called when the
2102``appl_ptr`` is updated in read or write operations. Some drivers like
2103emu10k1-fx and cs46xx need to track the current ``appl_ptr`` for the
2104internal buffer, and this callback is useful only for such a purpose.
2105
2106This callback is atomic as default.
2107
2108page callback
2109~~~~~~~~~~~~~
2110
2111This callback is optional too. This callback is used mainly for
2112non-contiguous buffers. The mmap calls this callback to get the page
2113address. Some examples will be explained in the later section `Buffer
2114and Memory Management`_, too.
2115
2116PCM Interrupt Handler
2117---------------------
2118
2119The rest of pcm stuff is the PCM interrupt handler. The role of PCM
2120interrupt handler in the sound driver is to update the buffer position
2121and to tell the PCM middle layer when the buffer position goes across
2122the prescribed period size. To inform this, call the
2123:c:func:`snd_pcm_period_elapsed()` function.
2124
2125There are several types of sound chips to generate the interrupts.
2126
2127Interrupts at the period (fragment) boundary
2128~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2129
2130This is the most frequently found type: the hardware generates an
2131interrupt at each period boundary. In this case, you can call
2132:c:func:`snd_pcm_period_elapsed()` at each interrupt.
2133
2134:c:func:`snd_pcm_period_elapsed()` takes the substream pointer as
2135its argument. Thus, you need to keep the substream pointer accessible
2136from the chip instance. For example, define ``substream`` field in the
2137chip record to hold the current running substream pointer, and set the
2138pointer value at ``open`` callback (and reset at ``close`` callback).
2139
2140If you acquire a spinlock in the interrupt handler, and the lock is used
2141in other pcm callbacks, too, then you have to release the lock before
2142calling :c:func:`snd_pcm_period_elapsed()`, because
2143:c:func:`snd_pcm_period_elapsed()` calls other pcm callbacks
2144inside.
2145
2146Typical code would be like:
2147
2148::
2149
2150
2151      static irqreturn_t snd_mychip_interrupt(int irq, void *dev_id)
2152      {
2153              struct mychip *chip = dev_id;
2154              spin_lock(&chip->lock);
2155              ....
2156              if (pcm_irq_invoked(chip)) {
2157                      /* call updater, unlock before it */
2158                      spin_unlock(&chip->lock);
2159                      snd_pcm_period_elapsed(chip->substream);
2160                      spin_lock(&chip->lock);
2161                      /* acknowledge the interrupt if necessary */
2162              }
2163              ....
2164              spin_unlock(&chip->lock);
2165              return IRQ_HANDLED;
2166      }
2167
2168
2169
2170High frequency timer interrupts
2171~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2172
2173This happens when the hardware doesn't generate interrupts at the period
2174boundary but issues timer interrupts at a fixed timer rate (e.g. es1968
2175or ymfpci drivers). In this case, you need to check the current hardware
2176position and accumulate the processed sample length at each interrupt.
2177When the accumulated size exceeds the period size, call
2178:c:func:`snd_pcm_period_elapsed()` and reset the accumulator.
2179
2180Typical code would be like the following.
2181
2182::
2183
2184
2185      static irqreturn_t snd_mychip_interrupt(int irq, void *dev_id)
2186      {
2187              struct mychip *chip = dev_id;
2188              spin_lock(&chip->lock);
2189              ....
2190              if (pcm_irq_invoked(chip)) {
2191                      unsigned int last_ptr, size;
2192                      /* get the current hardware pointer (in frames) */
2193                      last_ptr = get_hw_ptr(chip);
2194                      /* calculate the processed frames since the
2195                       * last update
2196                       */
2197                      if (last_ptr < chip->last_ptr)
2198                              size = runtime->buffer_size + last_ptr
2199                                       - chip->last_ptr;
2200                      else
2201                              size = last_ptr - chip->last_ptr;
2202                      /* remember the last updated point */
2203                      chip->last_ptr = last_ptr;
2204                      /* accumulate the size */
2205                      chip->size += size;
2206                      /* over the period boundary? */
2207                      if (chip->size >= runtime->period_size) {
2208                              /* reset the accumulator */
2209                              chip->size %= runtime->period_size;
2210                              /* call updater */
2211                              spin_unlock(&chip->lock);
2212                              snd_pcm_period_elapsed(substream);
2213                              spin_lock(&chip->lock);
2214                      }
2215                      /* acknowledge the interrupt if necessary */
2216              }
2217              ....
2218              spin_unlock(&chip->lock);
2219              return IRQ_HANDLED;
2220      }
2221
2222
2223
2224On calling :c:func:`snd_pcm_period_elapsed()`
2225~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2226
2227In both cases, even if more than one period are elapsed, you don't have
2228to call :c:func:`snd_pcm_period_elapsed()` many times. Call only
2229once. And the pcm layer will check the current hardware pointer and
2230update to the latest status.
2231
2232Atomicity
2233---------
2234
2235One of the most important (and thus difficult to debug) problems in
2236kernel programming are race conditions. In the Linux kernel, they are
2237usually avoided via spin-locks, mutexes or semaphores. In general, if a
2238race condition can happen in an interrupt handler, it has to be managed
2239atomically, and you have to use a spinlock to protect the critical
2240session. If the critical section is not in interrupt handler code and if
2241taking a relatively long time to execute is acceptable, you should use
2242mutexes or semaphores instead.
2243
2244As already seen, some pcm callbacks are atomic and some are not. For
2245example, the ``hw_params`` callback is non-atomic, while ``trigger``
2246callback is atomic. This means, the latter is called already in a
2247spinlock held by the PCM middle layer. Please take this atomicity into
2248account when you choose a locking scheme in the callbacks.
2249
2250In the atomic callbacks, you cannot use functions which may call
2251:c:func:`schedule()` or go to :c:func:`sleep()`. Semaphores and
2252mutexes can sleep, and hence they cannot be used inside the atomic
2253callbacks (e.g. ``trigger`` callback). To implement some delay in such a
2254callback, please use :c:func:`udelay()` or :c:func:`mdelay()`.
2255
2256All three atomic callbacks (trigger, pointer, and ack) are called with
2257local interrupts disabled.
2258
2259The recent changes in PCM core code, however, allow all PCM operations
2260to be non-atomic. This assumes that the all caller sides are in
2261non-atomic contexts. For example, the function
2262:c:func:`snd_pcm_period_elapsed()` is called typically from the
2263interrupt handler. But, if you set up the driver to use a threaded
2264interrupt handler, this call can be in non-atomic context, too. In such
2265a case, you can set ``nonatomic`` filed of :c:type:`struct snd_pcm
2266<snd_pcm>` object after creating it. When this flag is set, mutex
2267and rwsem are used internally in the PCM core instead of spin and
2268rwlocks, so that you can call all PCM functions safely in a non-atomic
2269context.
2270
2271Constraints
2272-----------
2273
2274If your chip supports unconventional sample rates, or only the limited
2275samples, you need to set a constraint for the condition.
2276
2277For example, in order to restrict the sample rates in the some supported
2278values, use :c:func:`snd_pcm_hw_constraint_list()`. You need to
2279call this function in the open callback.
2280
2281::
2282
2283      static unsigned int rates[] =
2284              {4000, 10000, 22050, 44100};
2285      static struct snd_pcm_hw_constraint_list constraints_rates = {
2286              .count = ARRAY_SIZE(rates),
2287              .list = rates,
2288              .mask = 0,
2289      };
2290
2291      static int snd_mychip_pcm_open(struct snd_pcm_substream *substream)
2292      {
2293              int err;
2294              ....
2295              err = snd_pcm_hw_constraint_list(substream->runtime, 0,
2296                                               SNDRV_PCM_HW_PARAM_RATE,
2297                                               &constraints_rates);
2298              if (err < 0)
2299                      return err;
2300              ....
2301      }
2302
2303
2304
2305There are many different constraints. Look at ``sound/pcm.h`` for a
2306complete list. You can even define your own constraint rules. For
2307example, let's suppose my_chip can manage a substream of 1 channel if
2308and only if the format is ``S16_LE``, otherwise it supports any format
2309specified in the :c:type:`struct snd_pcm_hardware
2310<snd_pcm_hardware>` structure (or in any other
2311constraint_list). You can build a rule like this:
2312
2313::
2314
2315      static int hw_rule_channels_by_format(struct snd_pcm_hw_params *params,
2316                                            struct snd_pcm_hw_rule *rule)
2317      {
2318              struct snd_interval *c = hw_param_interval(params,
2319                            SNDRV_PCM_HW_PARAM_CHANNELS);
2320              struct snd_mask *f = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
2321              struct snd_interval ch;
2322
2323              snd_interval_any(&ch);
2324              if (f->bits[0] == SNDRV_PCM_FMTBIT_S16_LE) {
2325                      ch.min = ch.max = 1;
2326                      ch.integer = 1;
2327                      return snd_interval_refine(c, &ch);
2328              }
2329              return 0;
2330      }
2331
2332
2333Then you need to call this function to add your rule:
2334
2335::
2336
2337  snd_pcm_hw_rule_add(substream->runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
2338                      hw_rule_channels_by_format, NULL,
2339                      SNDRV_PCM_HW_PARAM_FORMAT, -1);
2340
2341The rule function is called when an application sets the PCM format, and
2342it refines the number of channels accordingly. But an application may
2343set the number of channels before setting the format. Thus you also need
2344to define the inverse rule:
2345
2346::
2347
2348      static int hw_rule_format_by_channels(struct snd_pcm_hw_params *params,
2349                                            struct snd_pcm_hw_rule *rule)
2350      {
2351              struct snd_interval *c = hw_param_interval(params,
2352                    SNDRV_PCM_HW_PARAM_CHANNELS);
2353              struct snd_mask *f = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
2354              struct snd_mask fmt;
2355
2356              snd_mask_any(&fmt);    /* Init the struct */
2357              if (c->min < 2) {
2358                      fmt.bits[0] &= SNDRV_PCM_FMTBIT_S16_LE;
2359                      return snd_mask_refine(f, &fmt);
2360              }
2361              return 0;
2362      }
2363
2364
2365... and in the open callback:
2366
2367::
2368
2369  snd_pcm_hw_rule_add(substream->runtime, 0, SNDRV_PCM_HW_PARAM_FORMAT,
2370                      hw_rule_format_by_channels, NULL,
2371                      SNDRV_PCM_HW_PARAM_CHANNELS, -1);
2372
2373I won't give more details here, rather I would like to say, “Luke, use
2374the source.”
2375
2376Control Interface
2377=================
2378
2379General
2380-------
2381
2382The control interface is used widely for many switches, sliders, etc.
2383which are accessed from user-space. Its most important use is the mixer
2384interface. In other words, since ALSA 0.9.x, all the mixer stuff is
2385implemented on the control kernel API.
2386
2387ALSA has a well-defined AC97 control module. If your chip supports only
2388the AC97 and nothing else, you can skip this section.
2389
2390The control API is defined in ``<sound/control.h>``. Include this file
2391if you want to add your own controls.
2392
2393Definition of Controls
2394----------------------
2395
2396To create a new control, you need to define the following three
2397callbacks: ``info``, ``get`` and ``put``. Then, define a
2398:c:type:`struct snd_kcontrol_new <snd_kcontrol_new>` record, such as:
2399
2400::
2401
2402
2403      static struct snd_kcontrol_new my_control = {
2404              .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2405              .name = "PCM Playback Switch",
2406              .index = 0,
2407              .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
2408              .private_value = 0xffff,
2409              .info = my_control_info,
2410              .get = my_control_get,
2411              .put = my_control_put
2412      };
2413
2414
2415The ``iface`` field specifies the control type,
2416``SNDRV_CTL_ELEM_IFACE_XXX``, which is usually ``MIXER``. Use ``CARD``
2417for global controls that are not logically part of the mixer. If the
2418control is closely associated with some specific device on the sound
2419card, use ``HWDEP``, ``PCM``, ``RAWMIDI``, ``TIMER``, or ``SEQUENCER``,
2420and specify the device number with the ``device`` and ``subdevice``
2421fields.
2422
2423The ``name`` is the name identifier string. Since ALSA 0.9.x, the
2424control name is very important, because its role is classified from
2425its name. There are pre-defined standard control names. The details
2426are described in the `Control Names`_ subsection.
2427
2428The ``index`` field holds the index number of this control. If there
2429are several different controls with the same name, they can be
2430distinguished by the index number. This is the case when several
2431codecs exist on the card. If the index is zero, you can omit the
2432definition above.
2433
2434The ``access`` field contains the access type of this control. Give
2435the combination of bit masks, ``SNDRV_CTL_ELEM_ACCESS_XXX``,
2436there. The details will be explained in the `Access Flags`_
2437subsection.
2438
2439The ``private_value`` field contains an arbitrary long integer value
2440for this record. When using the generic ``info``, ``get`` and ``put``
2441callbacks, you can pass a value through this field. If several small
2442numbers are necessary, you can combine them in bitwise. Or, it's
2443possible to give a pointer (casted to unsigned long) of some record to
2444this field, too.
2445
2446The ``tlv`` field can be used to provide metadata about the control;
2447see the `Metadata`_ subsection.
2448
2449The other three are `Control Callbacks`_.
2450
2451Control Names
2452-------------
2453
2454There are some standards to define the control names. A control is
2455usually defined from the three parts as “SOURCE DIRECTION FUNCTION”.
2456
2457The first, ``SOURCE``, specifies the source of the control, and is a
2458string such as “Master”, “PCM”, “CD” and “Line”. There are many
2459pre-defined sources.
2460
2461The second, ``DIRECTION``, is one of the following strings according to
2462the direction of the control: “Playback”, “Capture”, “Bypass Playback”
2463and “Bypass Capture”. Or, it can be omitted, meaning both playback and
2464capture directions.
2465
2466The third, ``FUNCTION``, is one of the following strings according to
2467the function of the control: “Switch”, “Volume” and “Route”.
2468
2469The example of control names are, thus, “Master Capture Switch” or “PCM
2470Playback Volume”.
2471
2472There are some exceptions:
2473
2474Global capture and playback
2475~~~~~~~~~~~~~~~~~~~~~~~~~~~
2476
2477“Capture Source”, “Capture Switch” and “Capture Volume” are used for the
2478global capture (input) source, switch and volume. Similarly, “Playback
2479Switch” and “Playback Volume” are used for the global output gain switch
2480and volume.
2481
2482Tone-controls
2483~~~~~~~~~~~~~
2484
2485tone-control switch and volumes are specified like “Tone Control - XXX”,
2486e.g. “Tone Control - Switch”, “Tone Control - Bass”, “Tone Control -
2487Center”.
2488
24893D controls
2490~~~~~~~~~~~
2491
24923D-control switches and volumes are specified like “3D Control - XXX”,
2493e.g. “3D Control - Switch”, “3D Control - Center”, “3D Control - Space”.
2494
2495Mic boost
2496~~~~~~~~~
2497
2498Mic-boost switch is set as “Mic Boost” or “Mic Boost (6dB)”.
2499
2500More precise information can be found in
2501``Documentation/sound/designs/control-names.rst``.
2502
2503Access Flags
2504------------
2505
2506The access flag is the bitmask which specifies the access type of the
2507given control. The default access type is
2508``SNDRV_CTL_ELEM_ACCESS_READWRITE``, which means both read and write are
2509allowed to this control. When the access flag is omitted (i.e. = 0), it
2510is considered as ``READWRITE`` access as default.
2511
2512When the control is read-only, pass ``SNDRV_CTL_ELEM_ACCESS_READ``
2513instead. In this case, you don't have to define the ``put`` callback.
2514Similarly, when the control is write-only (although it's a rare case),
2515you can use the ``WRITE`` flag instead, and you don't need the ``get``
2516callback.
2517
2518If the control value changes frequently (e.g. the VU meter),
2519``VOLATILE`` flag should be given. This means that the control may be
2520changed without `Change notification`_. Applications should poll such
2521a control constantly.
2522
2523When the control is inactive, set the ``INACTIVE`` flag, too. There are
2524``LOCK`` and ``OWNER`` flags to change the write permissions.
2525
2526Control Callbacks
2527-----------------
2528
2529info callback
2530~~~~~~~~~~~~~
2531
2532The ``info`` callback is used to get detailed information on this
2533control. This must store the values of the given :c:type:`struct
2534snd_ctl_elem_info <snd_ctl_elem_info>` object. For example,
2535for a boolean control with a single element:
2536
2537::
2538
2539
2540      static int snd_myctl_mono_info(struct snd_kcontrol *kcontrol,
2541                              struct snd_ctl_elem_info *uinfo)
2542      {
2543              uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
2544              uinfo->count = 1;
2545              uinfo->value.integer.min = 0;
2546              uinfo->value.integer.max = 1;
2547              return 0;
2548      }
2549
2550
2551
2552The ``type`` field specifies the type of the control. There are
2553``BOOLEAN``, ``INTEGER``, ``ENUMERATED``, ``BYTES``, ``IEC958`` and
2554``INTEGER64``. The ``count`` field specifies the number of elements in
2555this control. For example, a stereo volume would have count = 2. The
2556``value`` field is a union, and the values stored are depending on the
2557type. The boolean and integer types are identical.
2558
2559The enumerated type is a bit different from others. You'll need to set
2560the string for the currently given item index.
2561
2562::
2563
2564  static int snd_myctl_enum_info(struct snd_kcontrol *kcontrol,
2565                          struct snd_ctl_elem_info *uinfo)
2566  {
2567          static char *texts[4] = {
2568                  "First", "Second", "Third", "Fourth"
2569          };
2570          uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2571          uinfo->count = 1;
2572          uinfo->value.enumerated.items = 4;
2573          if (uinfo->value.enumerated.item > 3)
2574                  uinfo->value.enumerated.item = 3;
2575          strcpy(uinfo->value.enumerated.name,
2576                 texts[uinfo->value.enumerated.item]);
2577          return 0;
2578  }
2579
2580The above callback can be simplified with a helper function,
2581:c:func:`snd_ctl_enum_info()`. The final code looks like below.
2582(You can pass ``ARRAY_SIZE(texts)`` instead of 4 in the third argument;
2583it's a matter of taste.)
2584
2585::
2586
2587  static int snd_myctl_enum_info(struct snd_kcontrol *kcontrol,
2588                          struct snd_ctl_elem_info *uinfo)
2589  {
2590          static char *texts[4] = {
2591                  "First", "Second", "Third", "Fourth"
2592          };
2593          return snd_ctl_enum_info(uinfo, 1, 4, texts);
2594  }
2595
2596
2597Some common info callbacks are available for your convenience:
2598:c:func:`snd_ctl_boolean_mono_info()` and
2599:c:func:`snd_ctl_boolean_stereo_info()`. Obviously, the former
2600is an info callback for a mono channel boolean item, just like
2601:c:func:`snd_myctl_mono_info()` above, and the latter is for a
2602stereo channel boolean item.
2603
2604get callback
2605~~~~~~~~~~~~
2606
2607This callback is used to read the current value of the control and to
2608return to user-space.
2609
2610For example,
2611
2612::
2613
2614
2615      static int snd_myctl_get(struct snd_kcontrol *kcontrol,
2616                               struct snd_ctl_elem_value *ucontrol)
2617      {
2618              struct mychip *chip = snd_kcontrol_chip(kcontrol);
2619              ucontrol->value.integer.value[0] = get_some_value(chip);
2620              return 0;
2621      }
2622
2623
2624
2625The ``value`` field depends on the type of control as well as on the
2626info callback. For example, the sb driver uses this field to store the
2627register offset, the bit-shift and the bit-mask. The ``private_value``
2628field is set as follows:
2629
2630::
2631
2632  .private_value = reg | (shift << 16) | (mask << 24)
2633
2634and is retrieved in callbacks like
2635
2636::
2637
2638  static int snd_sbmixer_get_single(struct snd_kcontrol *kcontrol,
2639                                    struct snd_ctl_elem_value *ucontrol)
2640  {
2641          int reg = kcontrol->private_value & 0xff;
2642          int shift = (kcontrol->private_value >> 16) & 0xff;
2643          int mask = (kcontrol->private_value >> 24) & 0xff;
2644          ....
2645  }
2646
2647In the ``get`` callback, you have to fill all the elements if the
2648control has more than one elements, i.e. ``count > 1``. In the example
2649above, we filled only one element (``value.integer.value[0]``) since
2650it's assumed as ``count = 1``.
2651
2652put callback
2653~~~~~~~~~~~~
2654
2655This callback is used to write a value from user-space.
2656
2657For example,
2658
2659::
2660
2661
2662      static int snd_myctl_put(struct snd_kcontrol *kcontrol,
2663                               struct snd_ctl_elem_value *ucontrol)
2664      {
2665              struct mychip *chip = snd_kcontrol_chip(kcontrol);
2666              int changed = 0;
2667              if (chip->current_value !=
2668                   ucontrol->value.integer.value[0]) {
2669                      change_current_value(chip,
2670                                  ucontrol->value.integer.value[0]);
2671                      changed = 1;
2672              }
2673              return changed;
2674      }
2675
2676
2677
2678As seen above, you have to return 1 if the value is changed. If the
2679value is not changed, return 0 instead. If any fatal error happens,
2680return a negative error code as usual.
2681
2682As in the ``get`` callback, when the control has more than one
2683elements, all elements must be evaluated in this callback, too.
2684
2685Callbacks are not atomic
2686~~~~~~~~~~~~~~~~~~~~~~~~
2687
2688All these three callbacks are basically not atomic.
2689
2690Control Constructor
2691-------------------
2692
2693When everything is ready, finally we can create a new control. To create
2694a control, there are two functions to be called,
2695:c:func:`snd_ctl_new1()` and :c:func:`snd_ctl_add()`.
2696
2697In the simplest way, you can do like this:
2698
2699::
2700
2701  err = snd_ctl_add(card, snd_ctl_new1(&my_control, chip));
2702  if (err < 0)
2703          return err;
2704
2705where ``my_control`` is the :c:type:`struct snd_kcontrol_new
2706<snd_kcontrol_new>` object defined above, and chip is the object
2707pointer to be passed to kcontrol->private_data which can be referred
2708to in callbacks.
2709
2710:c:func:`snd_ctl_new1()` allocates a new :c:type:`struct
2711snd_kcontrol <snd_kcontrol>` instance, and
2712:c:func:`snd_ctl_add()` assigns the given control component to the
2713card.
2714
2715Change Notification
2716-------------------
2717
2718If you need to change and update a control in the interrupt routine, you
2719can call :c:func:`snd_ctl_notify()`. For example,
2720
2721::
2722
2723  snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, id_pointer);
2724
2725This function takes the card pointer, the event-mask, and the control id
2726pointer for the notification. The event-mask specifies the types of
2727notification, for example, in the above example, the change of control
2728values is notified. The id pointer is the pointer of :c:type:`struct
2729snd_ctl_elem_id <snd_ctl_elem_id>` to be notified. You can
2730find some examples in ``es1938.c`` or ``es1968.c`` for hardware volume
2731interrupts.
2732
2733Metadata
2734--------
2735
2736To provide information about the dB values of a mixer control, use on of
2737the ``DECLARE_TLV_xxx`` macros from ``<sound/tlv.h>`` to define a
2738variable containing this information, set the ``tlv.p`` field to point to
2739this variable, and include the ``SNDRV_CTL_ELEM_ACCESS_TLV_READ`` flag
2740in the ``access`` field; like this:
2741
2742::
2743
2744  static DECLARE_TLV_DB_SCALE(db_scale_my_control, -4050, 150, 0);
2745
2746  static struct snd_kcontrol_new my_control = {
2747          ...
2748          .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
2749                    SNDRV_CTL_ELEM_ACCESS_TLV_READ,
2750          ...
2751          .tlv.p = db_scale_my_control,
2752  };
2753
2754
2755The :c:func:`DECLARE_TLV_DB_SCALE()` macro defines information
2756about a mixer control where each step in the control's value changes the
2757dB value by a constant dB amount. The first parameter is the name of the
2758variable to be defined. The second parameter is the minimum value, in
2759units of 0.01 dB. The third parameter is the step size, in units of 0.01
2760dB. Set the fourth parameter to 1 if the minimum value actually mutes
2761the control.
2762
2763The :c:func:`DECLARE_TLV_DB_LINEAR()` macro defines information
2764about a mixer control where the control's value affects the output
2765linearly. The first parameter is the name of the variable to be defined.
2766The second parameter is the minimum value, in units of 0.01 dB. The
2767third parameter is the maximum value, in units of 0.01 dB. If the
2768minimum value mutes the control, set the second parameter to
2769``TLV_DB_GAIN_MUTE``.
2770
2771API for AC97 Codec
2772==================
2773
2774General
2775-------
2776
2777The ALSA AC97 codec layer is a well-defined one, and you don't have to
2778write much code to control it. Only low-level control routines are
2779necessary. The AC97 codec API is defined in ``<sound/ac97_codec.h>``.
2780
2781Full Code Example
2782-----------------
2783
2784::
2785
2786      struct mychip {
2787              ....
2788              struct snd_ac97 *ac97;
2789              ....
2790      };
2791
2792      static unsigned short snd_mychip_ac97_read(struct snd_ac97 *ac97,
2793                                                 unsigned short reg)
2794      {
2795              struct mychip *chip = ac97->private_data;
2796              ....
2797              /* read a register value here from the codec */
2798              return the_register_value;
2799      }
2800
2801      static void snd_mychip_ac97_write(struct snd_ac97 *ac97,
2802                                       unsigned short reg, unsigned short val)
2803      {
2804              struct mychip *chip = ac97->private_data;
2805              ....
2806              /* write the given register value to the codec */
2807      }
2808
2809      static int snd_mychip_ac97(struct mychip *chip)
2810      {
2811              struct snd_ac97_bus *bus;
2812              struct snd_ac97_template ac97;
2813              int err;
2814              static struct snd_ac97_bus_ops ops = {
2815                      .write = snd_mychip_ac97_write,
2816                      .read = snd_mychip_ac97_read,
2817              };
2818
2819              err = snd_ac97_bus(chip->card, 0, &ops, NULL, &bus);
2820              if (err < 0)
2821                      return err;
2822              memset(&ac97, 0, sizeof(ac97));
2823              ac97.private_data = chip;
2824              return snd_ac97_mixer(bus, &ac97, &chip->ac97);
2825      }
2826
2827
2828AC97 Constructor
2829----------------
2830
2831To create an ac97 instance, first call :c:func:`snd_ac97_bus()`
2832with an ``ac97_bus_ops_t`` record with callback functions.
2833
2834::
2835
2836  struct snd_ac97_bus *bus;
2837  static struct snd_ac97_bus_ops ops = {
2838        .write = snd_mychip_ac97_write,
2839        .read = snd_mychip_ac97_read,
2840  };
2841
2842  snd_ac97_bus(card, 0, &ops, NULL, &pbus);
2843
2844The bus record is shared among all belonging ac97 instances.
2845
2846And then call :c:func:`snd_ac97_mixer()` with an :c:type:`struct
2847snd_ac97_template <snd_ac97_template>` record together with
2848the bus pointer created above.
2849
2850::
2851
2852  struct snd_ac97_template ac97;
2853  int err;
2854
2855  memset(&ac97, 0, sizeof(ac97));
2856  ac97.private_data = chip;
2857  snd_ac97_mixer(bus, &ac97, &chip->ac97);
2858
2859where chip->ac97 is a pointer to a newly created ``ac97_t``
2860instance. In this case, the chip pointer is set as the private data,
2861so that the read/write callback functions can refer to this chip
2862instance. This instance is not necessarily stored in the chip
2863record. If you need to change the register values from the driver, or
2864need the suspend/resume of ac97 codecs, keep this pointer to pass to
2865the corresponding functions.
2866
2867AC97 Callbacks
2868--------------
2869
2870The standard callbacks are ``read`` and ``write``. Obviously they
2871correspond to the functions for read and write accesses to the
2872hardware low-level codes.
2873
2874The ``read`` callback returns the register value specified in the
2875argument.
2876
2877::
2878
2879  static unsigned short snd_mychip_ac97_read(struct snd_ac97 *ac97,
2880                                             unsigned short reg)
2881  {
2882          struct mychip *chip = ac97->private_data;
2883          ....
2884          return the_register_value;
2885  }
2886
2887Here, the chip can be cast from ``ac97->private_data``.
2888
2889Meanwhile, the ``write`` callback is used to set the register
2890value
2891
2892::
2893
2894  static void snd_mychip_ac97_write(struct snd_ac97 *ac97,
2895                       unsigned short reg, unsigned short val)
2896
2897
2898These callbacks are non-atomic like the control API callbacks.
2899
2900There are also other callbacks: ``reset``, ``wait`` and ``init``.
2901
2902The ``reset`` callback is used to reset the codec. If the chip
2903requires a special kind of reset, you can define this callback.
2904
2905The ``wait`` callback is used to add some waiting time in the standard
2906initialization of the codec. If the chip requires the extra waiting
2907time, define this callback.
2908
2909The ``init`` callback is used for additional initialization of the
2910codec.
2911
2912Updating Registers in The Driver
2913--------------------------------
2914
2915If you need to access to the codec from the driver, you can call the
2916following functions: :c:func:`snd_ac97_write()`,
2917:c:func:`snd_ac97_read()`, :c:func:`snd_ac97_update()` and
2918:c:func:`snd_ac97_update_bits()`.
2919
2920Both :c:func:`snd_ac97_write()` and
2921:c:func:`snd_ac97_update()` functions are used to set a value to
2922the given register (``AC97_XXX``). The difference between them is that
2923:c:func:`snd_ac97_update()` doesn't write a value if the given
2924value has been already set, while :c:func:`snd_ac97_write()`
2925always rewrites the value.
2926
2927::
2928
2929  snd_ac97_write(ac97, AC97_MASTER, 0x8080);
2930  snd_ac97_update(ac97, AC97_MASTER, 0x8080);
2931
2932:c:func:`snd_ac97_read()` is used to read the value of the given
2933register. For example,
2934
2935::
2936
2937  value = snd_ac97_read(ac97, AC97_MASTER);
2938
2939:c:func:`snd_ac97_update_bits()` is used to update some bits in
2940the given register.
2941
2942::
2943
2944  snd_ac97_update_bits(ac97, reg, mask, value);
2945
2946Also, there is a function to change the sample rate (of a given register
2947such as ``AC97_PCM_FRONT_DAC_RATE``) when VRA or DRA is supported by the
2948codec: :c:func:`snd_ac97_set_rate()`.
2949
2950::
2951
2952  snd_ac97_set_rate(ac97, AC97_PCM_FRONT_DAC_RATE, 44100);
2953
2954
2955The following registers are available to set the rate:
2956``AC97_PCM_MIC_ADC_RATE``, ``AC97_PCM_FRONT_DAC_RATE``,
2957``AC97_PCM_LR_ADC_RATE``, ``AC97_SPDIF``. When ``AC97_SPDIF`` is
2958specified, the register is not really changed but the corresponding
2959IEC958 status bits will be updated.
2960
2961Clock Adjustment
2962----------------
2963
2964In some chips, the clock of the codec isn't 48000 but using a PCI clock
2965(to save a quartz!). In this case, change the field ``bus->clock`` to
2966the corresponding value. For example, intel8x0 and es1968 drivers have
2967their own function to read from the clock.
2968
2969Proc Files
2970----------
2971
2972The ALSA AC97 interface will create a proc file such as
2973``/proc/asound/card0/codec97#0/ac97#0-0`` and ``ac97#0-0+regs``. You
2974can refer to these files to see the current status and registers of
2975the codec.
2976
2977Multiple Codecs
2978---------------
2979
2980When there are several codecs on the same card, you need to call
2981:c:func:`snd_ac97_mixer()` multiple times with ``ac97.num=1`` or
2982greater. The ``num`` field specifies the codec number.
2983
2984If you set up multiple codecs, you either need to write different
2985callbacks for each codec or check ``ac97->num`` in the callback
2986routines.
2987
2988MIDI (MPU401-UART) Interface
2989============================
2990
2991General
2992-------
2993
2994Many soundcards have built-in MIDI (MPU401-UART) interfaces. When the
2995soundcard supports the standard MPU401-UART interface, most likely you
2996can use the ALSA MPU401-UART API. The MPU401-UART API is defined in
2997``<sound/mpu401.h>``.
2998
2999Some soundchips have a similar but slightly different implementation of
3000mpu401 stuff. For example, emu10k1 has its own mpu401 routines.
3001
3002MIDI Constructor
3003----------------
3004
3005To create a rawmidi object, call :c:func:`snd_mpu401_uart_new()`.
3006
3007::
3008
3009  struct snd_rawmidi *rmidi;
3010  snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, port, info_flags,
3011                      irq, &rmidi);
3012
3013
3014The first argument is the card pointer, and the second is the index of
3015this component. You can create up to 8 rawmidi devices.
3016
3017The third argument is the type of the hardware, ``MPU401_HW_XXX``. If
3018it's not a special one, you can use ``MPU401_HW_MPU401``.
3019
3020The 4th argument is the I/O port address. Many backward-compatible
3021MPU401 have an I/O port such as 0x330. Or, it might be a part of its own
3022PCI I/O region. It depends on the chip design.
3023
3024The 5th argument is a bitflag for additional information. When the I/O
3025port address above is part of the PCI I/O region, the MPU401 I/O port
3026might have been already allocated (reserved) by the driver itself. In
3027such a case, pass a bit flag ``MPU401_INFO_INTEGRATED``, and the
3028mpu401-uart layer will allocate the I/O ports by itself.
3029
3030When the controller supports only the input or output MIDI stream, pass
3031the ``MPU401_INFO_INPUT`` or ``MPU401_INFO_OUTPUT`` bitflag,
3032respectively. Then the rawmidi instance is created as a single stream.
3033
3034``MPU401_INFO_MMIO`` bitflag is used to change the access method to MMIO
3035(via readb and writeb) instead of iob and outb. In this case, you have
3036to pass the iomapped address to :c:func:`snd_mpu401_uart_new()`.
3037
3038When ``MPU401_INFO_TX_IRQ`` is set, the output stream isn't checked in
3039the default interrupt handler. The driver needs to call
3040:c:func:`snd_mpu401_uart_interrupt_tx()` by itself to start
3041processing the output stream in the irq handler.
3042
3043If the MPU-401 interface shares its interrupt with the other logical
3044devices on the card, set ``MPU401_INFO_IRQ_HOOK`` (see
3045`below <#MIDI-Interrupt-Handler>`__).
3046
3047Usually, the port address corresponds to the command port and port + 1
3048corresponds to the data port. If not, you may change the ``cport``
3049field of :c:type:`struct snd_mpu401 <snd_mpu401>` manually afterward.
3050However, :c:type:`struct snd_mpu401 <snd_mpu401>` pointer is
3051not returned explicitly by :c:func:`snd_mpu401_uart_new()`. You
3052need to cast ``rmidi->private_data`` to :c:type:`struct snd_mpu401
3053<snd_mpu401>` explicitly,
3054
3055::
3056
3057  struct snd_mpu401 *mpu;
3058  mpu = rmidi->private_data;
3059
3060and reset the ``cport`` as you like:
3061
3062::
3063
3064  mpu->cport = my_own_control_port;
3065
3066The 6th argument specifies the ISA irq number that will be allocated. If
3067no interrupt is to be allocated (because your code is already allocating
3068a shared interrupt, or because the device does not use interrupts), pass
3069-1 instead. For a MPU-401 device without an interrupt, a polling timer
3070will be used instead.
3071
3072MIDI Interrupt Handler
3073----------------------
3074
3075When the interrupt is allocated in
3076:c:func:`snd_mpu401_uart_new()`, an exclusive ISA interrupt
3077handler is automatically used, hence you don't have anything else to do
3078than creating the mpu401 stuff. Otherwise, you have to set
3079``MPU401_INFO_IRQ_HOOK``, and call
3080:c:func:`snd_mpu401_uart_interrupt()` explicitly from your own
3081interrupt handler when it has determined that a UART interrupt has
3082occurred.
3083
3084In this case, you need to pass the private_data of the returned rawmidi
3085object from :c:func:`snd_mpu401_uart_new()` as the second
3086argument of :c:func:`snd_mpu401_uart_interrupt()`.
3087
3088::
3089
3090  snd_mpu401_uart_interrupt(irq, rmidi->private_data, regs);
3091
3092
3093RawMIDI Interface
3094=================
3095
3096Overview
3097--------
3098
3099The raw MIDI interface is used for hardware MIDI ports that can be
3100accessed as a byte stream. It is not used for synthesizer chips that do
3101not directly understand MIDI.
3102
3103ALSA handles file and buffer management. All you have to do is to write
3104some code to move data between the buffer and the hardware.
3105
3106The rawmidi API is defined in ``<sound/rawmidi.h>``.
3107
3108RawMIDI Constructor
3109-------------------
3110
3111To create a rawmidi device, call the :c:func:`snd_rawmidi_new()`
3112function:
3113
3114::
3115
3116  struct snd_rawmidi *rmidi;
3117  err = snd_rawmidi_new(chip->card, "MyMIDI", 0, outs, ins, &rmidi);
3118  if (err < 0)
3119          return err;
3120  rmidi->private_data = chip;
3121  strcpy(rmidi->name, "My MIDI");
3122  rmidi->info_flags = SNDRV_RAWMIDI_INFO_OUTPUT |
3123                      SNDRV_RAWMIDI_INFO_INPUT |
3124                      SNDRV_RAWMIDI_INFO_DUPLEX;
3125
3126The first argument is the card pointer, the second argument is the ID
3127string.
3128
3129The third argument is the index of this component. You can create up to
31308 rawmidi devices.
3131
3132The fourth and fifth arguments are the number of output and input
3133substreams, respectively, of this device (a substream is the equivalent
3134of a MIDI port).
3135
3136Set the ``info_flags`` field to specify the capabilities of the
3137device. Set ``SNDRV_RAWMIDI_INFO_OUTPUT`` if there is at least one
3138output port, ``SNDRV_RAWMIDI_INFO_INPUT`` if there is at least one
3139input port, and ``SNDRV_RAWMIDI_INFO_DUPLEX`` if the device can handle
3140output and input at the same time.
3141
3142After the rawmidi device is created, you need to set the operators
3143(callbacks) for each substream. There are helper functions to set the
3144operators for all the substreams of a device:
3145
3146::
3147
3148  snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, &snd_mymidi_output_ops);
3149  snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_INPUT, &snd_mymidi_input_ops);
3150
3151The operators are usually defined like this:
3152
3153::
3154
3155  static struct snd_rawmidi_ops snd_mymidi_output_ops = {
3156          .open =    snd_mymidi_output_open,
3157          .close =   snd_mymidi_output_close,
3158          .trigger = snd_mymidi_output_trigger,
3159  };
3160
3161These callbacks are explained in the `RawMIDI Callbacks`_ section.
3162
3163If there are more than one substream, you should give a unique name to
3164each of them:
3165
3166::
3167
3168  struct snd_rawmidi_substream *substream;
3169  list_for_each_entry(substream,
3170                      &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams,
3171                      list {
3172          sprintf(substream->name, "My MIDI Port %d", substream->number + 1);
3173  }
3174  /* same for SNDRV_RAWMIDI_STREAM_INPUT */
3175
3176RawMIDI Callbacks
3177-----------------
3178
3179In all the callbacks, the private data that you've set for the rawmidi
3180device can be accessed as ``substream->rmidi->private_data``.
3181
3182If there is more than one port, your callbacks can determine the port
3183index from the struct snd_rawmidi_substream data passed to each
3184callback:
3185
3186::
3187
3188  struct snd_rawmidi_substream *substream;
3189  int index = substream->number;
3190
3191RawMIDI open callback
3192~~~~~~~~~~~~~~~~~~~~~
3193
3194::
3195
3196      static int snd_xxx_open(struct snd_rawmidi_substream *substream);
3197
3198
3199This is called when a substream is opened. You can initialize the
3200hardware here, but you shouldn't start transmitting/receiving data yet.
3201
3202RawMIDI close callback
3203~~~~~~~~~~~~~~~~~~~~~~
3204
3205::
3206
3207      static int snd_xxx_close(struct snd_rawmidi_substream *substream);
3208
3209Guess what.
3210
3211The ``open`` and ``close`` callbacks of a rawmidi device are
3212serialized with a mutex, and can sleep.
3213
3214Rawmidi trigger callback for output substreams
3215~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3216
3217::
3218
3219      static void snd_xxx_output_trigger(struct snd_rawmidi_substream *substream, int up);
3220
3221
3222This is called with a nonzero ``up`` parameter when there is some data
3223in the substream buffer that must be transmitted.
3224
3225To read data from the buffer, call
3226:c:func:`snd_rawmidi_transmit_peek()`. It will return the number
3227of bytes that have been read; this will be less than the number of bytes
3228requested when there are no more data in the buffer. After the data have
3229been transmitted successfully, call
3230:c:func:`snd_rawmidi_transmit_ack()` to remove the data from the
3231substream buffer:
3232
3233::
3234
3235  unsigned char data;
3236  while (snd_rawmidi_transmit_peek(substream, &data, 1) == 1) {
3237          if (snd_mychip_try_to_transmit(data))
3238                  snd_rawmidi_transmit_ack(substream, 1);
3239          else
3240                  break; /* hardware FIFO full */
3241  }
3242
3243If you know beforehand that the hardware will accept data, you can use
3244the :c:func:`snd_rawmidi_transmit()` function which reads some
3245data and removes them from the buffer at once:
3246
3247::
3248
3249  while (snd_mychip_transmit_possible()) {
3250          unsigned char data;
3251          if (snd_rawmidi_transmit(substream, &data, 1) != 1)
3252                  break; /* no more data */
3253          snd_mychip_transmit(data);
3254  }
3255
3256If you know beforehand how many bytes you can accept, you can use a
3257buffer size greater than one with the
3258:c:func:`snd_rawmidi_transmit\*()` functions.
3259
3260The ``trigger`` callback must not sleep. If the hardware FIFO is full
3261before the substream buffer has been emptied, you have to continue
3262transmitting data later, either in an interrupt handler, or with a
3263timer if the hardware doesn't have a MIDI transmit interrupt.
3264
3265The ``trigger`` callback is called with a zero ``up`` parameter when
3266the transmission of data should be aborted.
3267
3268RawMIDI trigger callback for input substreams
3269~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3270
3271::
3272
3273      static void snd_xxx_input_trigger(struct snd_rawmidi_substream *substream, int up);
3274
3275
3276This is called with a nonzero ``up`` parameter to enable receiving data,
3277or with a zero ``up`` parameter do disable receiving data.
3278
3279The ``trigger`` callback must not sleep; the actual reading of data
3280from the device is usually done in an interrupt handler.
3281
3282When data reception is enabled, your interrupt handler should call
3283:c:func:`snd_rawmidi_receive()` for all received data:
3284
3285::
3286
3287  void snd_mychip_midi_interrupt(...)
3288  {
3289          while (mychip_midi_available()) {
3290                  unsigned char data;
3291                  data = mychip_midi_read();
3292                  snd_rawmidi_receive(substream, &data, 1);
3293          }
3294  }
3295
3296
3297drain callback
3298~~~~~~~~~~~~~~
3299
3300::
3301
3302      static void snd_xxx_drain(struct snd_rawmidi_substream *substream);
3303
3304
3305This is only used with output substreams. This function should wait
3306until all data read from the substream buffer have been transmitted.
3307This ensures that the device can be closed and the driver unloaded
3308without losing data.
3309
3310This callback is optional. If you do not set ``drain`` in the struct
3311snd_rawmidi_ops structure, ALSA will simply wait for 50 milliseconds
3312instead.
3313
3314Miscellaneous Devices
3315=====================
3316
3317FM OPL3
3318-------
3319
3320The FM OPL3 is still used in many chips (mainly for backward
3321compatibility). ALSA has a nice OPL3 FM control layer, too. The OPL3 API
3322is defined in ``<sound/opl3.h>``.
3323
3324FM registers can be directly accessed through the direct-FM API, defined
3325in ``<sound/asound_fm.h>``. In ALSA native mode, FM registers are
3326accessed through the Hardware-Dependent Device direct-FM extension API,
3327whereas in OSS compatible mode, FM registers can be accessed with the
3328OSS direct-FM compatible API in ``/dev/dmfmX`` device.
3329
3330To create the OPL3 component, you have two functions to call. The first
3331one is a constructor for the ``opl3_t`` instance.
3332
3333::
3334
3335  struct snd_opl3 *opl3;
3336  snd_opl3_create(card, lport, rport, OPL3_HW_OPL3_XXX,
3337                  integrated, &opl3);
3338
3339The first argument is the card pointer, the second one is the left port
3340address, and the third is the right port address. In most cases, the
3341right port is placed at the left port + 2.
3342
3343The fourth argument is the hardware type.
3344
3345When the left and right ports have been already allocated by the card
3346driver, pass non-zero to the fifth argument (``integrated``). Otherwise,
3347the opl3 module will allocate the specified ports by itself.
3348
3349When the accessing the hardware requires special method instead of the
3350standard I/O access, you can create opl3 instance separately with
3351:c:func:`snd_opl3_new()`.
3352
3353::
3354
3355  struct snd_opl3 *opl3;
3356  snd_opl3_new(card, OPL3_HW_OPL3_XXX, &opl3);
3357
3358Then set ``command``, ``private_data`` and ``private_free`` for the
3359private access function, the private data and the destructor. The
3360``l_port`` and ``r_port`` are not necessarily set. Only the command
3361must be set properly. You can retrieve the data from the
3362``opl3->private_data`` field.
3363
3364After creating the opl3 instance via :c:func:`snd_opl3_new()`,
3365call :c:func:`snd_opl3_init()` to initialize the chip to the
3366proper state. Note that :c:func:`snd_opl3_create()` always calls
3367it internally.
3368
3369If the opl3 instance is created successfully, then create a hwdep device
3370for this opl3.
3371
3372::
3373
3374  struct snd_hwdep *opl3hwdep;
3375  snd_opl3_hwdep_new(opl3, 0, 1, &opl3hwdep);
3376
3377The first argument is the ``opl3_t`` instance you created, and the
3378second is the index number, usually 0.
3379
3380The third argument is the index-offset for the sequencer client assigned
3381to the OPL3 port. When there is an MPU401-UART, give 1 for here (UART
3382always takes 0).
3383
3384Hardware-Dependent Devices
3385--------------------------
3386
3387Some chips need user-space access for special controls or for loading
3388the micro code. In such a case, you can create a hwdep
3389(hardware-dependent) device. The hwdep API is defined in
3390``<sound/hwdep.h>``. You can find examples in opl3 driver or
3391``isa/sb/sb16_csp.c``.
3392
3393The creation of the ``hwdep`` instance is done via
3394:c:func:`snd_hwdep_new()`.
3395
3396::
3397
3398  struct snd_hwdep *hw;
3399  snd_hwdep_new(card, "My HWDEP", 0, &hw);
3400
3401where the third argument is the index number.
3402
3403You can then pass any pointer value to the ``private_data``. If you
3404assign a private data, you should define the destructor, too. The
3405destructor function is set in the ``private_free`` field.
3406
3407::
3408
3409  struct mydata *p = kmalloc(sizeof(*p), GFP_KERNEL);
3410  hw->private_data = p;
3411  hw->private_free = mydata_free;
3412
3413and the implementation of the destructor would be:
3414
3415::
3416
3417  static void mydata_free(struct snd_hwdep *hw)
3418  {
3419          struct mydata *p = hw->private_data;
3420          kfree(p);
3421  }
3422
3423The arbitrary file operations can be defined for this instance. The file
3424operators are defined in the ``ops`` table. For example, assume that
3425this chip needs an ioctl.
3426
3427::
3428
3429  hw->ops.open = mydata_open;
3430  hw->ops.ioctl = mydata_ioctl;
3431  hw->ops.release = mydata_release;
3432
3433And implement the callback functions as you like.
3434
3435IEC958 (S/PDIF)
3436---------------
3437
3438Usually the controls for IEC958 devices are implemented via the control
3439interface. There is a macro to compose a name string for IEC958
3440controls, :c:func:`SNDRV_CTL_NAME_IEC958()` defined in
3441``<include/asound.h>``.
3442
3443There are some standard controls for IEC958 status bits. These controls
3444use the type ``SNDRV_CTL_ELEM_TYPE_IEC958``, and the size of element is
3445fixed as 4 bytes array (value.iec958.status[x]). For the ``info``
3446callback, you don't specify the value field for this type (the count
3447field must be set, though).
3448
3449“IEC958 Playback Con Mask” is used to return the bit-mask for the IEC958
3450status bits of consumer mode. Similarly, “IEC958 Playback Pro Mask”
3451returns the bitmask for professional mode. They are read-only controls,
3452and are defined as MIXER controls (iface =
3453``SNDRV_CTL_ELEM_IFACE_MIXER``).
3454
3455Meanwhile, “IEC958 Playback Default” control is defined for getting and
3456setting the current default IEC958 bits. Note that this one is usually
3457defined as a PCM control (iface = ``SNDRV_CTL_ELEM_IFACE_PCM``),
3458although in some places it's defined as a MIXER control.
3459
3460In addition, you can define the control switches to enable/disable or to
3461set the raw bit mode. The implementation will depend on the chip, but
3462the control should be named as “IEC958 xxx”, preferably using the
3463:c:func:`SNDRV_CTL_NAME_IEC958()` macro.
3464
3465You can find several cases, for example, ``pci/emu10k1``,
3466``pci/ice1712``, or ``pci/cmipci.c``.
3467
3468Buffer and Memory Management
3469============================
3470
3471Buffer Types
3472------------
3473
3474ALSA provides several different buffer allocation functions depending on
3475the bus and the architecture. All these have a consistent API. The
3476allocation of physically-contiguous pages is done via
3477:c:func:`snd_malloc_xxx_pages()` function, where xxx is the bus
3478type.
3479
3480The allocation of pages with fallback is
3481:c:func:`snd_malloc_xxx_pages_fallback()`. This function tries
3482to allocate the specified pages but if the pages are not available, it
3483tries to reduce the page sizes until enough space is found.
3484
3485The release the pages, call :c:func:`snd_free_xxx_pages()`
3486function.
3487
3488Usually, ALSA drivers try to allocate and reserve a large contiguous
3489physical space at the time the module is loaded for the later use. This
3490is called “pre-allocation”. As already written, you can call the
3491following function at pcm instance construction time (in the case of PCI
3492bus).
3493
3494::
3495
3496  snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
3497                                        snd_dma_pci_data(pci), size, max);
3498
3499where ``size`` is the byte size to be pre-allocated and the ``max`` is
3500the maximum size to be changed via the ``prealloc`` proc file. The
3501allocator will try to get an area as large as possible within the
3502given size.
3503
3504The second argument (type) and the third argument (device pointer) are
3505dependent on the bus. In the case of the ISA bus, pass
3506:c:func:`snd_dma_isa_data()` as the third argument with
3507``SNDRV_DMA_TYPE_DEV`` type. For the continuous buffer unrelated to the
3508bus can be pre-allocated with ``SNDRV_DMA_TYPE_CONTINUOUS`` type and the
3509``snd_dma_continuous_data(GFP_KERNEL)`` device pointer, where
3510``GFP_KERNEL`` is the kernel allocation flag to use. For the PCI
3511scatter-gather buffers, use ``SNDRV_DMA_TYPE_DEV_SG`` with
3512``snd_dma_pci_data(pci)`` (see the `Non-Contiguous Buffers`_
3513section).
3514
3515Once the buffer is pre-allocated, you can use the allocator in the
3516``hw_params`` callback:
3517
3518::
3519
3520  snd_pcm_lib_malloc_pages(substream, size);
3521
3522Note that you have to pre-allocate to use this function.
3523
3524External Hardware Buffers
3525-------------------------
3526
3527Some chips have their own hardware buffers and the DMA transfer from the
3528host memory is not available. In such a case, you need to either 1)
3529copy/set the audio data directly to the external hardware buffer, or 2)
3530make an intermediate buffer and copy/set the data from it to the
3531external hardware buffer in interrupts (or in tasklets, preferably).
3532
3533The first case works fine if the external hardware buffer is large
3534enough. This method doesn't need any extra buffers and thus is more
3535effective. You need to define the ``copy_user`` and ``copy_kernel``
3536callbacks for the data transfer, in addition to ``fill_silence``
3537callback for playback. However, there is a drawback: it cannot be
3538mmapped. The examples are GUS's GF1 PCM or emu8000's wavetable PCM.
3539
3540The second case allows for mmap on the buffer, although you have to
3541handle an interrupt or a tasklet to transfer the data from the
3542intermediate buffer to the hardware buffer. You can find an example in
3543the vxpocket driver.
3544
3545Another case is when the chip uses a PCI memory-map region for the
3546buffer instead of the host memory. In this case, mmap is available only
3547on certain architectures like the Intel one. In non-mmap mode, the data
3548cannot be transferred as in the normal way. Thus you need to define the
3549``copy_user``, ``copy_kernel`` and ``fill_silence`` callbacks as well,
3550as in the cases above. The examples are found in ``rme32.c`` and
3551``rme96.c``.
3552
3553The implementation of the ``copy_user``, ``copy_kernel`` and
3554``silence`` callbacks depends upon whether the hardware supports
3555interleaved or non-interleaved samples. The ``copy_user`` callback is
3556defined like below, a bit differently depending whether the direction
3557is playback or capture:
3558
3559::
3560
3561  static int playback_copy_user(struct snd_pcm_substream *substream,
3562               int channel, unsigned long pos,
3563               void __user *src, unsigned long count);
3564  static int capture_copy_user(struct snd_pcm_substream *substream,
3565               int channel, unsigned long pos,
3566               void __user *dst, unsigned long count);
3567
3568In the case of interleaved samples, the second argument (``channel``) is
3569not used. The third argument (``pos``) points the current position
3570offset in bytes.
3571
3572The meaning of the fourth argument is different between playback and
3573capture. For playback, it holds the source data pointer, and for
3574capture, it's the destination data pointer.
3575
3576The last argument is the number of bytes to be copied.
3577
3578What you have to do in this callback is again different between playback
3579and capture directions. In the playback case, you copy the given amount
3580of data (``count``) at the specified pointer (``src``) to the specified
3581offset (``pos``) on the hardware buffer. When coded like memcpy-like
3582way, the copy would be like:
3583
3584::
3585
3586  my_memcpy_from_user(my_buffer + pos, src, count);
3587
3588For the capture direction, you copy the given amount of data (``count``)
3589at the specified offset (``pos``) on the hardware buffer to the
3590specified pointer (``dst``).
3591
3592::
3593
3594  my_memcpy_to_user(dst, my_buffer + pos, count);
3595
3596Here the functions are named as ``from_user`` and ``to_user`` because
3597it's the user-space buffer that is passed to these callbacks.  That
3598is, the callback is supposed to copy from/to the user-space data
3599directly to/from the hardware buffer.
3600
3601Careful readers might notice that these callbacks receive the
3602arguments in bytes, not in frames like other callbacks.  It's because
3603it would make coding easier like the examples above, and also it makes
3604easier to unify both the interleaved and non-interleaved cases, as
3605explained in the following.
3606
3607In the case of non-interleaved samples, the implementation will be a bit
3608more complicated.  The callback is called for each channel, passed by
3609the second argument, so totally it's called for N-channels times per
3610transfer.
3611
3612The meaning of other arguments are almost same as the interleaved
3613case.  The callback is supposed to copy the data from/to the given
3614user-space buffer, but only for the given channel.  For the detailed
3615implementations, please check ``isa/gus/gus_pcm.c`` or
3616"pci/rme9652/rme9652.c" as examples.
3617
3618The above callbacks are the copy from/to the user-space buffer.  There
3619are some cases where we want copy from/to the kernel-space buffer
3620instead.  In such a case, ``copy_kernel`` callback is called.  It'd
3621look like:
3622
3623::
3624
3625  static int playback_copy_kernel(struct snd_pcm_substream *substream,
3626               int channel, unsigned long pos,
3627               void *src, unsigned long count);
3628  static int capture_copy_kernel(struct snd_pcm_substream *substream,
3629               int channel, unsigned long pos,
3630               void *dst, unsigned long count);
3631
3632As found easily, the only difference is that the buffer pointer is
3633without ``__user`` prefix; that is, a kernel-buffer pointer is passed
3634in the fourth argument.  Correspondingly, the implementation would be
3635a version without the user-copy, such as:
3636
3637::
3638
3639  my_memcpy(my_buffer + pos, src, count);
3640
3641Usually for the playback, another callback ``fill_silence`` is
3642defined.  It's implemented in a similar way as the copy callbacks
3643above:
3644
3645::
3646
3647  static int silence(struct snd_pcm_substream *substream, int channel,
3648                     unsigned long pos, unsigned long count);
3649
3650The meanings of arguments are the same as in the ``copy_user`` and
3651``copy_kernel`` callbacks, although there is no buffer pointer
3652argument. In the case of interleaved samples, the channel argument has
3653no meaning, as well as on ``copy_*`` callbacks.
3654
3655The role of ``fill_silence`` callback is to set the given amount
3656(``count``) of silence data at the specified offset (``pos``) on the
3657hardware buffer. Suppose that the data format is signed (that is, the
3658silent-data is 0), and the implementation using a memset-like function
3659would be like:
3660
3661::
3662
3663  my_memset(my_buffer + pos, 0, count);
3664
3665In the case of non-interleaved samples, again, the implementation
3666becomes a bit more complicated, as it's called N-times per transfer
3667for each channel. See, for example, ``isa/gus/gus_pcm.c``.
3668
3669Non-Contiguous Buffers
3670----------------------
3671
3672If your hardware supports the page table as in emu10k1 or the buffer
3673descriptors as in via82xx, you can use the scatter-gather (SG) DMA. ALSA
3674provides an interface for handling SG-buffers. The API is provided in
3675``<sound/pcm.h>``.
3676
3677For creating the SG-buffer handler, call
3678:c:func:`snd_pcm_lib_preallocate_pages()` or
3679:c:func:`snd_pcm_lib_preallocate_pages_for_all()` with
3680``SNDRV_DMA_TYPE_DEV_SG`` in the PCM constructor like other PCI
3681pre-allocator. You need to pass ``snd_dma_pci_data(pci)``, where pci is
3682the :c:type:`struct pci_dev <pci_dev>` pointer of the chip as
3683well. The ``struct snd_sg_buf`` instance is created as
3684``substream->dma_private``. You can cast the pointer like:
3685
3686::
3687
3688  struct snd_sg_buf *sgbuf = (struct snd_sg_buf *)substream->dma_private;
3689
3690Then call :c:func:`snd_pcm_lib_malloc_pages()` in the ``hw_params``
3691callback as well as in the case of normal PCI buffer. The SG-buffer
3692handler will allocate the non-contiguous kernel pages of the given size
3693and map them onto the virtually contiguous memory. The virtual pointer
3694is addressed in runtime->dma_area. The physical address
3695(``runtime->dma_addr``) is set to zero, because the buffer is
3696physically non-contiguous. The physical address table is set up in
3697``sgbuf->table``. You can get the physical address at a certain offset
3698via :c:func:`snd_pcm_sgbuf_get_addr()`.
3699
3700When a SG-handler is used, you need to set
3701:c:func:`snd_pcm_sgbuf_ops_page()` as the ``page`` callback. (See
3702`page callback`_ section.)
3703
3704To release the data, call :c:func:`snd_pcm_lib_free_pages()` in
3705the ``hw_free`` callback as usual.
3706
3707Vmalloc'ed Buffers
3708------------------
3709
3710It's possible to use a buffer allocated via :c:func:`vmalloc()`, for
3711example, for an intermediate buffer. Since the allocated pages are not
3712contiguous, you need to set the ``page`` callback to obtain the physical
3713address at every offset.
3714
3715The implementation of ``page`` callback would be like this:
3716
3717::
3718
3719  #include <linux/vmalloc.h>
3720
3721  /* get the physical page pointer on the given offset */
3722  static struct page *mychip_page(struct snd_pcm_substream *substream,
3723                                  unsigned long offset)
3724  {
3725          void *pageptr = substream->runtime->dma_area + offset;
3726          return vmalloc_to_page(pageptr);
3727  }
3728
3729Proc Interface
3730==============
3731
3732ALSA provides an easy interface for procfs. The proc files are very
3733useful for debugging. I recommend you set up proc files if you write a
3734driver and want to get a running status or register dumps. The API is
3735found in ``<sound/info.h>``.
3736
3737To create a proc file, call :c:func:`snd_card_proc_new()`.
3738
3739::
3740
3741  struct snd_info_entry *entry;
3742  int err = snd_card_proc_new(card, "my-file", &entry);
3743
3744where the second argument specifies the name of the proc file to be
3745created. The above example will create a file ``my-file`` under the
3746card directory, e.g. ``/proc/asound/card0/my-file``.
3747
3748Like other components, the proc entry created via
3749:c:func:`snd_card_proc_new()` will be registered and released
3750automatically in the card registration and release functions.
3751
3752When the creation is successful, the function stores a new instance in
3753the pointer given in the third argument. It is initialized as a text
3754proc file for read only. To use this proc file as a read-only text file
3755as it is, set the read callback with a private data via
3756:c:func:`snd_info_set_text_ops()`.
3757
3758::
3759
3760  snd_info_set_text_ops(entry, chip, my_proc_read);
3761
3762where the second argument (``chip``) is the private data to be used in
3763the callbacks. The third parameter specifies the read buffer size and
3764the fourth (``my_proc_read``) is the callback function, which is
3765defined like
3766
3767::
3768
3769  static void my_proc_read(struct snd_info_entry *entry,
3770                           struct snd_info_buffer *buffer);
3771
3772In the read callback, use :c:func:`snd_iprintf()` for output
3773strings, which works just like normal :c:func:`printf()`. For
3774example,
3775
3776::
3777
3778  static void my_proc_read(struct snd_info_entry *entry,
3779                           struct snd_info_buffer *buffer)
3780  {
3781          struct my_chip *chip = entry->private_data;
3782
3783          snd_iprintf(buffer, "This is my chip!\n");
3784          snd_iprintf(buffer, "Port = %ld\n", chip->port);
3785  }
3786
3787The file permissions can be changed afterwards. As default, it's set as
3788read only for all users. If you want to add write permission for the
3789user (root as default), do as follows:
3790
3791::
3792
3793 entry->mode = S_IFREG | S_IRUGO | S_IWUSR;
3794
3795and set the write buffer size and the callback
3796
3797::
3798
3799  entry->c.text.write = my_proc_write;
3800
3801For the write callback, you can use :c:func:`snd_info_get_line()`
3802to get a text line, and :c:func:`snd_info_get_str()` to retrieve
3803a string from the line. Some examples are found in
3804``core/oss/mixer_oss.c``, core/oss/and ``pcm_oss.c``.
3805
3806For a raw-data proc-file, set the attributes as follows:
3807
3808::
3809
3810  static struct snd_info_entry_ops my_file_io_ops = {
3811          .read = my_file_io_read,
3812  };
3813
3814  entry->content = SNDRV_INFO_CONTENT_DATA;
3815  entry->private_data = chip;
3816  entry->c.ops = &my_file_io_ops;
3817  entry->size = 4096;
3818  entry->mode = S_IFREG | S_IRUGO;
3819
3820For the raw data, ``size`` field must be set properly. This specifies
3821the maximum size of the proc file access.
3822
3823The read/write callbacks of raw mode are more direct than the text mode.
3824You need to use a low-level I/O functions such as
3825:c:func:`copy_from/to_user()` to transfer the data.
3826
3827::
3828
3829  static ssize_t my_file_io_read(struct snd_info_entry *entry,
3830                              void *file_private_data,
3831                              struct file *file,
3832                              char *buf,
3833                              size_t count,
3834                              loff_t pos)
3835  {
3836          if (copy_to_user(buf, local_data + pos, count))
3837                  return -EFAULT;
3838          return count;
3839  }
3840
3841If the size of the info entry has been set up properly, ``count`` and
3842``pos`` are guaranteed to fit within 0 and the given size. You don't
3843have to check the range in the callbacks unless any other condition is
3844required.
3845
3846Power Management
3847================
3848
3849If the chip is supposed to work with suspend/resume functions, you need
3850to add power-management code to the driver. The additional code for
3851power-management should be ifdef-ed with ``CONFIG_PM``.
3852
3853If the driver *fully* supports suspend/resume that is, the device can be
3854properly resumed to its state when suspend was called, you can set the
3855``SNDRV_PCM_INFO_RESUME`` flag in the pcm info field. Usually, this is
3856possible when the registers of the chip can be safely saved and restored
3857to RAM. If this is set, the trigger callback is called with
3858``SNDRV_PCM_TRIGGER_RESUME`` after the resume callback completes.
3859
3860Even if the driver doesn't support PM fully but partial suspend/resume
3861is still possible, it's still worthy to implement suspend/resume
3862callbacks. In such a case, applications would reset the status by
3863calling :c:func:`snd_pcm_prepare()` and restart the stream
3864appropriately. Hence, you can define suspend/resume callbacks below but
3865don't set ``SNDRV_PCM_INFO_RESUME`` info flag to the PCM.
3866
3867Note that the trigger with SUSPEND can always be called when
3868:c:func:`snd_pcm_suspend_all()` is called, regardless of the
3869``SNDRV_PCM_INFO_RESUME`` flag. The ``RESUME`` flag affects only the
3870behavior of :c:func:`snd_pcm_resume()`. (Thus, in theory,
3871``SNDRV_PCM_TRIGGER_RESUME`` isn't needed to be handled in the trigger
3872callback when no ``SNDRV_PCM_INFO_RESUME`` flag is set. But, it's better
3873to keep it for compatibility reasons.)
3874
3875In the earlier version of ALSA drivers, a common power-management layer
3876was provided, but it has been removed. The driver needs to define the
3877suspend/resume hooks according to the bus the device is connected to. In
3878the case of PCI drivers, the callbacks look like below:
3879
3880::
3881
3882  #ifdef CONFIG_PM
3883  static int snd_my_suspend(struct pci_dev *pci, pm_message_t state)
3884  {
3885          .... /* do things for suspend */
3886          return 0;
3887  }
3888  static int snd_my_resume(struct pci_dev *pci)
3889  {
3890          .... /* do things for suspend */
3891          return 0;
3892  }
3893  #endif
3894
3895The scheme of the real suspend job is as follows.
3896
38971. Retrieve the card and the chip data.
3898
38992. Call :c:func:`snd_power_change_state()` with
3900   ``SNDRV_CTL_POWER_D3hot`` to change the power status.
3901
39023. Call :c:func:`snd_pcm_suspend_all()` to suspend the running
3903   PCM streams.
3904
39054. If AC97 codecs are used, call :c:func:`snd_ac97_suspend()` for
3906   each codec.
3907
39085. Save the register values if necessary.
3909
39106. Stop the hardware if necessary.
3911
39127. Disable the PCI device by calling
3913   :c:func:`pci_disable_device()`. Then, call
3914   :c:func:`pci_save_state()` at last.
3915
3916A typical code would be like:
3917
3918::
3919
3920  static int mychip_suspend(struct pci_dev *pci, pm_message_t state)
3921  {
3922          /* (1) */
3923          struct snd_card *card = pci_get_drvdata(pci);
3924          struct mychip *chip = card->private_data;
3925          /* (2) */
3926          snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
3927          /* (3) */
3928          snd_pcm_suspend_all(chip->pcm);
3929          /* (4) */
3930          snd_ac97_suspend(chip->ac97);
3931          /* (5) */
3932          snd_mychip_save_registers(chip);
3933          /* (6) */
3934          snd_mychip_stop_hardware(chip);
3935          /* (7) */
3936          pci_disable_device(pci);
3937          pci_save_state(pci);
3938          return 0;
3939  }
3940
3941
3942The scheme of the real resume job is as follows.
3943
39441. Retrieve the card and the chip data.
3945
39462. Set up PCI. First, call :c:func:`pci_restore_state()`. Then
3947   enable the pci device again by calling
3948   :c:func:`pci_enable_device()`. Call
3949   :c:func:`pci_set_master()` if necessary, too.
3950
39513. Re-initialize the chip.
3952
39534. Restore the saved registers if necessary.
3954
39555. Resume the mixer, e.g. calling :c:func:`snd_ac97_resume()`.
3956
39576. Restart the hardware (if any).
3958
39597. Call :c:func:`snd_power_change_state()` with
3960   ``SNDRV_CTL_POWER_D0`` to notify the processes.
3961
3962A typical code would be like:
3963
3964::
3965
3966  static int mychip_resume(struct pci_dev *pci)
3967  {
3968          /* (1) */
3969          struct snd_card *card = pci_get_drvdata(pci);
3970          struct mychip *chip = card->private_data;
3971          /* (2) */
3972          pci_restore_state(pci);
3973          pci_enable_device(pci);
3974          pci_set_master(pci);
3975          /* (3) */
3976          snd_mychip_reinit_chip(chip);
3977          /* (4) */
3978          snd_mychip_restore_registers(chip);
3979          /* (5) */
3980          snd_ac97_resume(chip->ac97);
3981          /* (6) */
3982          snd_mychip_restart_chip(chip);
3983          /* (7) */
3984          snd_power_change_state(card, SNDRV_CTL_POWER_D0);
3985          return 0;
3986  }
3987
3988As shown in the above, it's better to save registers after suspending
3989the PCM operations via :c:func:`snd_pcm_suspend_all()` or
3990:c:func:`snd_pcm_suspend()`. It means that the PCM streams are
3991already stopped when the register snapshot is taken. But, remember that
3992you don't have to restart the PCM stream in the resume callback. It'll
3993be restarted via trigger call with ``SNDRV_PCM_TRIGGER_RESUME`` when
3994necessary.
3995
3996OK, we have all callbacks now. Let's set them up. In the initialization
3997of the card, make sure that you can get the chip data from the card
3998instance, typically via ``private_data`` field, in case you created the
3999chip data individually.
4000
4001::
4002
4003  static int snd_mychip_probe(struct pci_dev *pci,
4004                              const struct pci_device_id *pci_id)
4005  {
4006          ....
4007          struct snd_card *card;
4008          struct mychip *chip;
4009          int err;
4010          ....
4011          err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
4012                             0, &card);
4013          ....
4014          chip = kzalloc(sizeof(*chip), GFP_KERNEL);
4015          ....
4016          card->private_data = chip;
4017          ....
4018  }
4019
4020When you created the chip data with :c:func:`snd_card_new()`, it's
4021anyway accessible via ``private_data`` field.
4022
4023::
4024
4025  static int snd_mychip_probe(struct pci_dev *pci,
4026                              const struct pci_device_id *pci_id)
4027  {
4028          ....
4029          struct snd_card *card;
4030          struct mychip *chip;
4031          int err;
4032          ....
4033          err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
4034                             sizeof(struct mychip), &card);
4035          ....
4036          chip = card->private_data;
4037          ....
4038  }
4039
4040If you need a space to save the registers, allocate the buffer for it
4041here, too, since it would be fatal if you cannot allocate a memory in
4042the suspend phase. The allocated buffer should be released in the
4043corresponding destructor.
4044
4045And next, set suspend/resume callbacks to the pci_driver.
4046
4047::
4048
4049  static struct pci_driver driver = {
4050          .name = KBUILD_MODNAME,
4051          .id_table = snd_my_ids,
4052          .probe = snd_my_probe,
4053          .remove = snd_my_remove,
4054  #ifdef CONFIG_PM
4055          .suspend = snd_my_suspend,
4056          .resume = snd_my_resume,
4057  #endif
4058  };
4059
4060Module Parameters
4061=================
4062
4063There are standard module options for ALSA. At least, each module should
4064have the ``index``, ``id`` and ``enable`` options.
4065
4066If the module supports multiple cards (usually up to 8 = ``SNDRV_CARDS``
4067cards), they should be arrays. The default initial values are defined
4068already as constants for easier programming:
4069
4070::
4071
4072  static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
4073  static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
4074  static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
4075
4076If the module supports only a single card, they could be single
4077variables, instead. ``enable`` option is not always necessary in this
4078case, but it would be better to have a dummy option for compatibility.
4079
4080The module parameters must be declared with the standard
4081``module_param()()``, ``module_param_array()()`` and
4082:c:func:`MODULE_PARM_DESC()` macros.
4083
4084The typical coding would be like below:
4085
4086::
4087
4088  #define CARD_NAME "My Chip"
4089
4090  module_param_array(index, int, NULL, 0444);
4091  MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
4092  module_param_array(id, charp, NULL, 0444);
4093  MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard.");
4094  module_param_array(enable, bool, NULL, 0444);
4095  MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard.");
4096
4097Also, don't forget to define the module description, classes, license
4098and devices. Especially, the recent modprobe requires to define the
4099module license as GPL, etc., otherwise the system is shown as “tainted”.
4100
4101::
4102
4103  MODULE_DESCRIPTION("My Chip");
4104  MODULE_LICENSE("GPL");
4105  MODULE_SUPPORTED_DEVICE("{{Vendor,My Chip Name}}");
4106
4107
4108How To Put Your Driver Into ALSA Tree
4109=====================================
4110
4111General
4112-------
4113
4114So far, you've learned how to write the driver codes. And you might have
4115a question now: how to put my own driver into the ALSA driver tree? Here
4116(finally :) the standard procedure is described briefly.
4117
4118Suppose that you create a new PCI driver for the card “xyz”. The card
4119module name would be snd-xyz. The new driver is usually put into the
4120alsa-driver tree, ``alsa-driver/pci`` directory in the case of PCI
4121cards. Then the driver is evaluated, audited and tested by developers
4122and users. After a certain time, the driver will go to the alsa-kernel
4123tree (to the corresponding directory, such as ``alsa-kernel/pci``) and
4124eventually will be integrated into the Linux 2.6 tree (the directory
4125would be ``linux/sound/pci``).
4126
4127In the following sections, the driver code is supposed to be put into
4128alsa-driver tree. The two cases are covered: a driver consisting of a
4129single source file and one consisting of several source files.
4130
4131Driver with A Single Source File
4132--------------------------------
4133
41341. Modify alsa-driver/pci/Makefile
4135
4136   Suppose you have a file xyz.c. Add the following two lines
4137
4138::
4139
4140  snd-xyz-objs := xyz.o
4141  obj-$(CONFIG_SND_XYZ) += snd-xyz.o
4142
41432. Create the Kconfig entry
4144
4145   Add the new entry of Kconfig for your xyz driver. config SND_XYZ
4146   tristate "Foobar XYZ" depends on SND select SND_PCM help Say Y here
4147   to include support for Foobar XYZ soundcard. To compile this driver
4148   as a module, choose M here: the module will be called snd-xyz. the
4149   line, select SND_PCM, specifies that the driver xyz supports PCM. In
4150   addition to SND_PCM, the following components are supported for
4151   select command: SND_RAWMIDI, SND_TIMER, SND_HWDEP,
4152   SND_MPU401_UART, SND_OPL3_LIB, SND_OPL4_LIB, SND_VX_LIB,
4153   SND_AC97_CODEC. Add the select command for each supported
4154   component.
4155
4156   Note that some selections imply the lowlevel selections. For example,
4157   PCM includes TIMER, MPU401_UART includes RAWMIDI, AC97_CODEC
4158   includes PCM, and OPL3_LIB includes HWDEP. You don't need to give
4159   the lowlevel selections again.
4160
4161   For the details of Kconfig script, refer to the kbuild documentation.
4162
41633. Run cvscompile script to re-generate the configure script and build
4164   the whole stuff again.
4165
4166Drivers with Several Source Files
4167---------------------------------
4168
4169Suppose that the driver snd-xyz have several source files. They are
4170located in the new subdirectory, pci/xyz.
4171
41721. Add a new directory (``xyz``) in ``alsa-driver/pci/Makefile`` as
4173   below
4174
4175::
4176
4177  obj-$(CONFIG_SND) += xyz/
4178
4179
41802. Under the directory ``xyz``, create a Makefile
4181
4182::
4183
4184         ifndef SND_TOPDIR
4185         SND_TOPDIR=../..
4186         endif
4187
4188         include $(SND_TOPDIR)/toplevel.config
4189         include $(SND_TOPDIR)/Makefile.conf
4190
4191         snd-xyz-objs := xyz.o abc.o def.o
4192
4193         obj-$(CONFIG_SND_XYZ) += snd-xyz.o
4194
4195         include $(SND_TOPDIR)/Rules.make
4196
41973. Create the Kconfig entry
4198
4199   This procedure is as same as in the last section.
4200
42014. Run cvscompile script to re-generate the configure script and build
4202   the whole stuff again.
4203
4204Useful Functions
4205================
4206
4207:c:func:`snd_printk()` and friends
4208---------------------------------------
4209
4210ALSA provides a verbose version of the :c:func:`printk()` function.
4211If a kernel config ``CONFIG_SND_VERBOSE_PRINTK`` is set, this function
4212prints the given message together with the file name and the line of the
4213caller. The ``KERN_XXX`` prefix is processed as well as the original
4214:c:func:`printk()` does, so it's recommended to add this prefix,
4215e.g. snd_printk(KERN_ERR "Oh my, sorry, it's extremely bad!\\n");
4216
4217There are also :c:func:`printk()`'s for debugging.
4218:c:func:`snd_printd()` can be used for general debugging purposes.
4219If ``CONFIG_SND_DEBUG`` is set, this function is compiled, and works
4220just like :c:func:`snd_printk()`. If the ALSA is compiled without
4221the debugging flag, it's ignored.
4222
4223:c:func:`snd_printdd()` is compiled in only when
4224``CONFIG_SND_DEBUG_VERBOSE`` is set. Please note that
4225``CONFIG_SND_DEBUG_VERBOSE`` is not set as default even if you configure
4226the alsa-driver with ``--with-debug=full`` option. You need to give
4227explicitly ``--with-debug=detect`` option instead.
4228
4229:c:func:`snd_BUG()`
4230------------------------
4231
4232It shows the ``BUG?`` message and stack trace as well as
4233:c:func:`snd_BUG_ON()` at the point. It's useful to show that a
4234fatal error happens there.
4235
4236When no debug flag is set, this macro is ignored.
4237
4238:c:func:`snd_BUG_ON()`
4239----------------------------
4240
4241:c:func:`snd_BUG_ON()` macro is similar with
4242:c:func:`WARN_ON()` macro. For example, snd_BUG_ON(!pointer); or
4243it can be used as the condition, if (snd_BUG_ON(non_zero_is_bug))
4244return -EINVAL;
4245
4246The macro takes an conditional expression to evaluate. When
4247``CONFIG_SND_DEBUG``, is set, if the expression is non-zero, it shows
4248the warning message such as ``BUG? (xxx)`` normally followed by stack
4249trace. In both cases it returns the evaluated value.
4250
4251Acknowledgments
4252===============
4253
4254I would like to thank Phil Kerr for his help for improvement and
4255corrections of this document.
4256
4257Kevin Conder reformatted the original plain-text to the DocBook format.
4258
4259Giuliano Pochini corrected typos and contributed the example codes in
4260the hardware constraints section.
4261