~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/sound/kernel-api/writing-an-alsa-driver.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/sound/kernel-api/writing-an-alsa-driver.rst (Version linux-6.12-rc7) and /Documentation/sound/kernel-api/writing-an-alsa-driver.rst (Version linux-2.6.32.71)


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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php