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