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