1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
3	"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []>
4
5<!-- ****************************************************** -->
6<!-- Header  -->
7<!-- ****************************************************** -->
8<book id="ALSA-Driver-API">
9  <bookinfo>
10    <title>The ALSA Driver API</title>
11
12    <legalnotice>
13    <para>
14    This document is free; you can redistribute it and/or modify it
15    under the terms of the GNU General Public License as published by
16    the Free Software Foundation; either version 2 of the License, or
17    (at your option) any later version. 
18    </para>
19
20    <para>
21    This document is distributed in the hope that it will be useful,
22    but <emphasis>WITHOUT ANY WARRANTY</emphasis>; without even the
23    implied warranty of <emphasis>MERCHANTABILITY or FITNESS FOR A
24    PARTICULAR PURPOSE</emphasis>. See the GNU General Public License
25    for more details.
26    </para>
27
28    <para>
29    You should have received a copy of the GNU General Public
30    License along with this program; if not, write to the Free
31    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
32    MA 02111-1307 USA
33    </para>
34    </legalnotice>
35
36  </bookinfo>
37
38<toc></toc>
39
40  <chapter><title>Management of Cards and Devices</title>
41     <sect1><title>Card Management</title>
42<!-- sound/core/init.c -->
43<refentry id="API-snd-device-initialize">
44<refentryinfo>
45 <title>LINUX</title>
46 <productname>Kernel Hackers Manual</productname>
47 <date>July 2017</date>
48</refentryinfo>
49<refmeta>
50 <refentrytitle><phrase>snd_device_initialize</phrase></refentrytitle>
51 <manvolnum>9</manvolnum>
52 <refmiscinfo class="version">4.4.14</refmiscinfo>
53</refmeta>
54<refnamediv>
55 <refname>snd_device_initialize</refname>
56 <refpurpose>
57  Initialize struct device for sound devices
58 </refpurpose>
59</refnamediv>
60<refsynopsisdiv>
61 <title>Synopsis</title>
62  <funcsynopsis><funcprototype>
63   <funcdef>void <function>snd_device_initialize </function></funcdef>
64   <paramdef>struct device * <parameter>dev</parameter></paramdef>
65   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
66  </funcprototype></funcsynopsis>
67</refsynopsisdiv>
68<refsect1>
69 <title>Arguments</title>
70 <variablelist>
71  <varlistentry>
72   <term><parameter>dev</parameter></term>
73   <listitem>
74    <para>
75     device to initialize
76    </para>
77   </listitem>
78  </varlistentry>
79  <varlistentry>
80   <term><parameter>card</parameter></term>
81   <listitem>
82    <para>
83     card to assign, optional
84    </para>
85   </listitem>
86  </varlistentry>
87 </variablelist>
88</refsect1>
89</refentry>
90
91<refentry id="API-snd-card-new">
92<refentryinfo>
93 <title>LINUX</title>
94 <productname>Kernel Hackers Manual</productname>
95 <date>July 2017</date>
96</refentryinfo>
97<refmeta>
98 <refentrytitle><phrase>snd_card_new</phrase></refentrytitle>
99 <manvolnum>9</manvolnum>
100 <refmiscinfo class="version">4.4.14</refmiscinfo>
101</refmeta>
102<refnamediv>
103 <refname>snd_card_new</refname>
104 <refpurpose>
105     create and initialize a soundcard structure
106 </refpurpose>
107</refnamediv>
108<refsynopsisdiv>
109 <title>Synopsis</title>
110  <funcsynopsis><funcprototype>
111   <funcdef>int <function>snd_card_new </function></funcdef>
112   <paramdef>struct device * <parameter>parent</parameter></paramdef>
113   <paramdef>int <parameter>idx</parameter></paramdef>
114   <paramdef>const char * <parameter>xid</parameter></paramdef>
115   <paramdef>struct module * <parameter>module</parameter></paramdef>
116   <paramdef>int <parameter>extra_size</parameter></paramdef>
117   <paramdef>struct snd_card ** <parameter>card_ret</parameter></paramdef>
118  </funcprototype></funcsynopsis>
119</refsynopsisdiv>
120<refsect1>
121 <title>Arguments</title>
122 <variablelist>
123  <varlistentry>
124   <term><parameter>parent</parameter></term>
125   <listitem>
126    <para>
127     the parent device object
128    </para>
129   </listitem>
130  </varlistentry>
131  <varlistentry>
132   <term><parameter>idx</parameter></term>
133   <listitem>
134    <para>
135     card index (address) [0 ... (SNDRV_CARDS-1)]
136    </para>
137   </listitem>
138  </varlistentry>
139  <varlistentry>
140   <term><parameter>xid</parameter></term>
141   <listitem>
142    <para>
143     card identification (ASCII string)
144    </para>
145   </listitem>
146  </varlistentry>
147  <varlistentry>
148   <term><parameter>module</parameter></term>
149   <listitem>
150    <para>
151     top level module for locking
152    </para>
153   </listitem>
154  </varlistentry>
155  <varlistentry>
156   <term><parameter>extra_size</parameter></term>
157   <listitem>
158    <para>
159     allocate this extra size after the main soundcard structure
160    </para>
161   </listitem>
162  </varlistentry>
163  <varlistentry>
164   <term><parameter>card_ret</parameter></term>
165   <listitem>
166    <para>
167     the pointer to store the created card instance
168    </para>
169   </listitem>
170  </varlistentry>
171 </variablelist>
172</refsect1>
173<refsect1>
174<title>Description</title>
175<para>
176   Creates and initializes a soundcard structure.
177   </para><para>
178
179   The function allocates snd_card instance via kzalloc with the given
180   space for the driver to use freely.  The allocated struct is stored
181   in the given card_ret pointer.
182</para>
183</refsect1>
184<refsect1>
185<title>Return</title>
186<para>
187   Zero if successful or a negative error code.
188</para>
189</refsect1>
190</refentry>
191
192<refentry id="API-snd-card-disconnect">
193<refentryinfo>
194 <title>LINUX</title>
195 <productname>Kernel Hackers Manual</productname>
196 <date>July 2017</date>
197</refentryinfo>
198<refmeta>
199 <refentrytitle><phrase>snd_card_disconnect</phrase></refentrytitle>
200 <manvolnum>9</manvolnum>
201 <refmiscinfo class="version">4.4.14</refmiscinfo>
202</refmeta>
203<refnamediv>
204 <refname>snd_card_disconnect</refname>
205 <refpurpose>
206     disconnect all APIs from the file-operations (user space)
207 </refpurpose>
208</refnamediv>
209<refsynopsisdiv>
210 <title>Synopsis</title>
211  <funcsynopsis><funcprototype>
212   <funcdef>int <function>snd_card_disconnect </function></funcdef>
213   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
214  </funcprototype></funcsynopsis>
215</refsynopsisdiv>
216<refsect1>
217 <title>Arguments</title>
218 <variablelist>
219  <varlistentry>
220   <term><parameter>card</parameter></term>
221   <listitem>
222    <para>
223     soundcard structure
224    </para>
225   </listitem>
226  </varlistentry>
227 </variablelist>
228</refsect1>
229<refsect1>
230<title>Description</title>
231<para>
232   Disconnects all APIs from the file-operations (user space).
233</para>
234</refsect1>
235<refsect1>
236<title>Return</title>
237<para>
238   Zero, otherwise a negative error code.
239</para>
240</refsect1>
241<refsect1>
242<title>Note</title>
243<para>
244   The current implementation replaces all active file-&gt;f_op with special
245   dummy file operations (they do nothing except release).
246</para>
247</refsect1>
248</refentry>
249
250<refentry id="API-snd-card-free-when-closed">
251<refentryinfo>
252 <title>LINUX</title>
253 <productname>Kernel Hackers Manual</productname>
254 <date>July 2017</date>
255</refentryinfo>
256<refmeta>
257 <refentrytitle><phrase>snd_card_free_when_closed</phrase></refentrytitle>
258 <manvolnum>9</manvolnum>
259 <refmiscinfo class="version">4.4.14</refmiscinfo>
260</refmeta>
261<refnamediv>
262 <refname>snd_card_free_when_closed</refname>
263 <refpurpose>
264     Disconnect the card, free it later eventually
265 </refpurpose>
266</refnamediv>
267<refsynopsisdiv>
268 <title>Synopsis</title>
269  <funcsynopsis><funcprototype>
270   <funcdef>int <function>snd_card_free_when_closed </function></funcdef>
271   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
272  </funcprototype></funcsynopsis>
273</refsynopsisdiv>
274<refsect1>
275 <title>Arguments</title>
276 <variablelist>
277  <varlistentry>
278   <term><parameter>card</parameter></term>
279   <listitem>
280    <para>
281     soundcard structure
282    </para>
283   </listitem>
284  </varlistentry>
285 </variablelist>
286</refsect1>
287<refsect1>
288<title>Description</title>
289<para>
290   Unlike <function>snd_card_free</function>, this function doesn't try to release the card
291   resource immediately, but tries to disconnect at first.  When the card
292   is still in use, the function returns before freeing the resources.
293   The card resources will be freed when the refcount gets to zero.
294</para>
295</refsect1>
296</refentry>
297
298<refentry id="API-snd-card-free">
299<refentryinfo>
300 <title>LINUX</title>
301 <productname>Kernel Hackers Manual</productname>
302 <date>July 2017</date>
303</refentryinfo>
304<refmeta>
305 <refentrytitle><phrase>snd_card_free</phrase></refentrytitle>
306 <manvolnum>9</manvolnum>
307 <refmiscinfo class="version">4.4.14</refmiscinfo>
308</refmeta>
309<refnamediv>
310 <refname>snd_card_free</refname>
311 <refpurpose>
312     frees given soundcard structure
313 </refpurpose>
314</refnamediv>
315<refsynopsisdiv>
316 <title>Synopsis</title>
317  <funcsynopsis><funcprototype>
318   <funcdef>int <function>snd_card_free </function></funcdef>
319   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
320  </funcprototype></funcsynopsis>
321</refsynopsisdiv>
322<refsect1>
323 <title>Arguments</title>
324 <variablelist>
325  <varlistentry>
326   <term><parameter>card</parameter></term>
327   <listitem>
328    <para>
329     soundcard structure
330    </para>
331   </listitem>
332  </varlistentry>
333 </variablelist>
334</refsect1>
335<refsect1>
336<title>Description</title>
337<para>
338   This function releases the soundcard structure and the all assigned
339   devices automatically.  That is, you don't have to release the devices
340   by yourself.
341   </para><para>
342
343   This function waits until the all resources are properly released.
344</para>
345</refsect1>
346<refsect1>
347<title>Return</title>
348<para>
349   Zero. Frees all associated devices and frees the control
350   interface associated to given soundcard.
351</para>
352</refsect1>
353</refentry>
354
355<refentry id="API-snd-card-set-id">
356<refentryinfo>
357 <title>LINUX</title>
358 <productname>Kernel Hackers Manual</productname>
359 <date>July 2017</date>
360</refentryinfo>
361<refmeta>
362 <refentrytitle><phrase>snd_card_set_id</phrase></refentrytitle>
363 <manvolnum>9</manvolnum>
364 <refmiscinfo class="version">4.4.14</refmiscinfo>
365</refmeta>
366<refnamediv>
367 <refname>snd_card_set_id</refname>
368 <refpurpose>
369     set card identification name
370 </refpurpose>
371</refnamediv>
372<refsynopsisdiv>
373 <title>Synopsis</title>
374  <funcsynopsis><funcprototype>
375   <funcdef>void <function>snd_card_set_id </function></funcdef>
376   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
377   <paramdef>const char * <parameter>nid</parameter></paramdef>
378  </funcprototype></funcsynopsis>
379</refsynopsisdiv>
380<refsect1>
381 <title>Arguments</title>
382 <variablelist>
383  <varlistentry>
384   <term><parameter>card</parameter></term>
385   <listitem>
386    <para>
387     soundcard structure
388    </para>
389   </listitem>
390  </varlistentry>
391  <varlistentry>
392   <term><parameter>nid</parameter></term>
393   <listitem>
394    <para>
395     new identification string
396    </para>
397   </listitem>
398  </varlistentry>
399 </variablelist>
400</refsect1>
401<refsect1>
402<title>Description</title>
403<para>
404   This function sets the card identification and checks for name
405   collisions.
406</para>
407</refsect1>
408</refentry>
409
410<refentry id="API-snd-card-add-dev-attr">
411<refentryinfo>
412 <title>LINUX</title>
413 <productname>Kernel Hackers Manual</productname>
414 <date>July 2017</date>
415</refentryinfo>
416<refmeta>
417 <refentrytitle><phrase>snd_card_add_dev_attr</phrase></refentrytitle>
418 <manvolnum>9</manvolnum>
419 <refmiscinfo class="version">4.4.14</refmiscinfo>
420</refmeta>
421<refnamediv>
422 <refname>snd_card_add_dev_attr</refname>
423 <refpurpose>
424     Append a new sysfs attribute group to card
425 </refpurpose>
426</refnamediv>
427<refsynopsisdiv>
428 <title>Synopsis</title>
429  <funcsynopsis><funcprototype>
430   <funcdef>int <function>snd_card_add_dev_attr </function></funcdef>
431   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
432   <paramdef>const struct attribute_group * <parameter>group</parameter></paramdef>
433  </funcprototype></funcsynopsis>
434</refsynopsisdiv>
435<refsect1>
436 <title>Arguments</title>
437 <variablelist>
438  <varlistentry>
439   <term><parameter>card</parameter></term>
440   <listitem>
441    <para>
442     card instance
443    </para>
444   </listitem>
445  </varlistentry>
446  <varlistentry>
447   <term><parameter>group</parameter></term>
448   <listitem>
449    <para>
450     attribute group to append
451    </para>
452   </listitem>
453  </varlistentry>
454 </variablelist>
455</refsect1>
456</refentry>
457
458<refentry id="API-snd-card-register">
459<refentryinfo>
460 <title>LINUX</title>
461 <productname>Kernel Hackers Manual</productname>
462 <date>July 2017</date>
463</refentryinfo>
464<refmeta>
465 <refentrytitle><phrase>snd_card_register</phrase></refentrytitle>
466 <manvolnum>9</manvolnum>
467 <refmiscinfo class="version">4.4.14</refmiscinfo>
468</refmeta>
469<refnamediv>
470 <refname>snd_card_register</refname>
471 <refpurpose>
472     register the soundcard
473 </refpurpose>
474</refnamediv>
475<refsynopsisdiv>
476 <title>Synopsis</title>
477  <funcsynopsis><funcprototype>
478   <funcdef>int <function>snd_card_register </function></funcdef>
479   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
480  </funcprototype></funcsynopsis>
481</refsynopsisdiv>
482<refsect1>
483 <title>Arguments</title>
484 <variablelist>
485  <varlistentry>
486   <term><parameter>card</parameter></term>
487   <listitem>
488    <para>
489     soundcard structure
490    </para>
491   </listitem>
492  </varlistentry>
493 </variablelist>
494</refsect1>
495<refsect1>
496<title>Description</title>
497<para>
498   This function registers all the devices assigned to the soundcard.
499   Until calling this, the ALSA control interface is blocked from the
500   external accesses.  Thus, you should call this function at the end
501   of the initialization of the card.
502</para>
503</refsect1>
504<refsect1>
505<title>Return</title>
506<para>
507   Zero otherwise a negative error code if the registration failed.
508</para>
509</refsect1>
510</refentry>
511
512<refentry id="API-snd-component-add">
513<refentryinfo>
514 <title>LINUX</title>
515 <productname>Kernel Hackers Manual</productname>
516 <date>July 2017</date>
517</refentryinfo>
518<refmeta>
519 <refentrytitle><phrase>snd_component_add</phrase></refentrytitle>
520 <manvolnum>9</manvolnum>
521 <refmiscinfo class="version">4.4.14</refmiscinfo>
522</refmeta>
523<refnamediv>
524 <refname>snd_component_add</refname>
525 <refpurpose>
526     add a component string
527 </refpurpose>
528</refnamediv>
529<refsynopsisdiv>
530 <title>Synopsis</title>
531  <funcsynopsis><funcprototype>
532   <funcdef>int <function>snd_component_add </function></funcdef>
533   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
534   <paramdef>const char * <parameter>component</parameter></paramdef>
535  </funcprototype></funcsynopsis>
536</refsynopsisdiv>
537<refsect1>
538 <title>Arguments</title>
539 <variablelist>
540  <varlistentry>
541   <term><parameter>card</parameter></term>
542   <listitem>
543    <para>
544     soundcard structure
545    </para>
546   </listitem>
547  </varlistentry>
548  <varlistentry>
549   <term><parameter>component</parameter></term>
550   <listitem>
551    <para>
552     the component id string
553    </para>
554   </listitem>
555  </varlistentry>
556 </variablelist>
557</refsect1>
558<refsect1>
559<title>Description</title>
560<para>
561   This function adds the component id string to the supported list.
562   The component can be referred from the alsa-lib.
563</para>
564</refsect1>
565<refsect1>
566<title>Return</title>
567<para>
568   Zero otherwise a negative error code.
569</para>
570</refsect1>
571</refentry>
572
573<refentry id="API-snd-card-file-add">
574<refentryinfo>
575 <title>LINUX</title>
576 <productname>Kernel Hackers Manual</productname>
577 <date>July 2017</date>
578</refentryinfo>
579<refmeta>
580 <refentrytitle><phrase>snd_card_file_add</phrase></refentrytitle>
581 <manvolnum>9</manvolnum>
582 <refmiscinfo class="version">4.4.14</refmiscinfo>
583</refmeta>
584<refnamediv>
585 <refname>snd_card_file_add</refname>
586 <refpurpose>
587     add the file to the file list of the card
588 </refpurpose>
589</refnamediv>
590<refsynopsisdiv>
591 <title>Synopsis</title>
592  <funcsynopsis><funcprototype>
593   <funcdef>int <function>snd_card_file_add </function></funcdef>
594   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
595   <paramdef>struct file * <parameter>file</parameter></paramdef>
596  </funcprototype></funcsynopsis>
597</refsynopsisdiv>
598<refsect1>
599 <title>Arguments</title>
600 <variablelist>
601  <varlistentry>
602   <term><parameter>card</parameter></term>
603   <listitem>
604    <para>
605     soundcard structure
606    </para>
607   </listitem>
608  </varlistentry>
609  <varlistentry>
610   <term><parameter>file</parameter></term>
611   <listitem>
612    <para>
613     file pointer
614    </para>
615   </listitem>
616  </varlistentry>
617 </variablelist>
618</refsect1>
619<refsect1>
620<title>Description</title>
621<para>
622   This function adds the file to the file linked-list of the card.
623   This linked-list is used to keep tracking the connection state,
624   and to avoid the release of busy resources by hotplug.
625</para>
626</refsect1>
627<refsect1>
628<title>Return</title>
629<para>
630   zero or a negative error code.
631</para>
632</refsect1>
633</refentry>
634
635<refentry id="API-snd-card-file-remove">
636<refentryinfo>
637 <title>LINUX</title>
638 <productname>Kernel Hackers Manual</productname>
639 <date>July 2017</date>
640</refentryinfo>
641<refmeta>
642 <refentrytitle><phrase>snd_card_file_remove</phrase></refentrytitle>
643 <manvolnum>9</manvolnum>
644 <refmiscinfo class="version">4.4.14</refmiscinfo>
645</refmeta>
646<refnamediv>
647 <refname>snd_card_file_remove</refname>
648 <refpurpose>
649     remove the file from the file list
650 </refpurpose>
651</refnamediv>
652<refsynopsisdiv>
653 <title>Synopsis</title>
654  <funcsynopsis><funcprototype>
655   <funcdef>int <function>snd_card_file_remove </function></funcdef>
656   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
657   <paramdef>struct file * <parameter>file</parameter></paramdef>
658  </funcprototype></funcsynopsis>
659</refsynopsisdiv>
660<refsect1>
661 <title>Arguments</title>
662 <variablelist>
663  <varlistentry>
664   <term><parameter>card</parameter></term>
665   <listitem>
666    <para>
667     soundcard structure
668    </para>
669   </listitem>
670  </varlistentry>
671  <varlistentry>
672   <term><parameter>file</parameter></term>
673   <listitem>
674    <para>
675     file pointer
676    </para>
677   </listitem>
678  </varlistentry>
679 </variablelist>
680</refsect1>
681<refsect1>
682<title>Description</title>
683<para>
684   This function removes the file formerly added to the card via
685   <function>snd_card_file_add</function> function.
686   If all files are removed and <function>snd_card_free_when_closed</function> was
687   called beforehand, it processes the pending release of
688   resources.
689</para>
690</refsect1>
691<refsect1>
692<title>Return</title>
693<para>
694   Zero or a negative error code.
695</para>
696</refsect1>
697</refentry>
698
699<refentry id="API-snd-power-wait">
700<refentryinfo>
701 <title>LINUX</title>
702 <productname>Kernel Hackers Manual</productname>
703 <date>July 2017</date>
704</refentryinfo>
705<refmeta>
706 <refentrytitle><phrase>snd_power_wait</phrase></refentrytitle>
707 <manvolnum>9</manvolnum>
708 <refmiscinfo class="version">4.4.14</refmiscinfo>
709</refmeta>
710<refnamediv>
711 <refname>snd_power_wait</refname>
712 <refpurpose>
713     wait until the power-state is changed.
714 </refpurpose>
715</refnamediv>
716<refsynopsisdiv>
717 <title>Synopsis</title>
718  <funcsynopsis><funcprototype>
719   <funcdef>int <function>snd_power_wait </function></funcdef>
720   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
721   <paramdef>unsigned int <parameter>power_state</parameter></paramdef>
722  </funcprototype></funcsynopsis>
723</refsynopsisdiv>
724<refsect1>
725 <title>Arguments</title>
726 <variablelist>
727  <varlistentry>
728   <term><parameter>card</parameter></term>
729   <listitem>
730    <para>
731     soundcard structure
732    </para>
733   </listitem>
734  </varlistentry>
735  <varlistentry>
736   <term><parameter>power_state</parameter></term>
737   <listitem>
738    <para>
739     expected power state
740    </para>
741   </listitem>
742  </varlistentry>
743 </variablelist>
744</refsect1>
745<refsect1>
746<title>Description</title>
747<para>
748   Waits until the power-state is changed.
749</para>
750</refsect1>
751<refsect1>
752<title>Return</title>
753<para>
754   Zero if successful, or a negative error code.
755</para>
756</refsect1>
757<refsect1>
758<title>Note</title>
759<para>
760   the power lock must be active before call.
761</para>
762</refsect1>
763</refentry>
764
765     </sect1>
766     <sect1><title>Device Components</title>
767<!-- sound/core/device.c -->
768<refentry id="API-snd-device-new">
769<refentryinfo>
770 <title>LINUX</title>
771 <productname>Kernel Hackers Manual</productname>
772 <date>July 2017</date>
773</refentryinfo>
774<refmeta>
775 <refentrytitle><phrase>snd_device_new</phrase></refentrytitle>
776 <manvolnum>9</manvolnum>
777 <refmiscinfo class="version">4.4.14</refmiscinfo>
778</refmeta>
779<refnamediv>
780 <refname>snd_device_new</refname>
781 <refpurpose>
782  create an ALSA device component
783 </refpurpose>
784</refnamediv>
785<refsynopsisdiv>
786 <title>Synopsis</title>
787  <funcsynopsis><funcprototype>
788   <funcdef>int <function>snd_device_new </function></funcdef>
789   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
790   <paramdef>enum snd_device_type <parameter>type</parameter></paramdef>
791   <paramdef>void * <parameter>device_data</parameter></paramdef>
792   <paramdef>struct snd_device_ops * <parameter>ops</parameter></paramdef>
793  </funcprototype></funcsynopsis>
794</refsynopsisdiv>
795<refsect1>
796 <title>Arguments</title>
797 <variablelist>
798  <varlistentry>
799   <term><parameter>card</parameter></term>
800   <listitem>
801    <para>
802     the card instance
803    </para>
804   </listitem>
805  </varlistentry>
806  <varlistentry>
807   <term><parameter>type</parameter></term>
808   <listitem>
809    <para>
810     the device type, SNDRV_DEV_XXX
811    </para>
812   </listitem>
813  </varlistentry>
814  <varlistentry>
815   <term><parameter>device_data</parameter></term>
816   <listitem>
817    <para>
818     the data pointer of this device
819    </para>
820   </listitem>
821  </varlistentry>
822  <varlistentry>
823   <term><parameter>ops</parameter></term>
824   <listitem>
825    <para>
826     the operator table
827    </para>
828   </listitem>
829  </varlistentry>
830 </variablelist>
831</refsect1>
832<refsect1>
833<title>Description</title>
834<para>
835   Creates a new device component for the given data pointer.
836   The device will be assigned to the card and managed together
837   by the card.
838   </para><para>
839
840   The data pointer plays a role as the identifier, too, so the
841   pointer address must be unique and unchanged.
842</para>
843</refsect1>
844<refsect1>
845<title>Return</title>
846<para>
847   Zero if successful, or a negative error code on failure.
848</para>
849</refsect1>
850</refentry>
851
852<refentry id="API-snd-device-disconnect">
853<refentryinfo>
854 <title>LINUX</title>
855 <productname>Kernel Hackers Manual</productname>
856 <date>July 2017</date>
857</refentryinfo>
858<refmeta>
859 <refentrytitle><phrase>snd_device_disconnect</phrase></refentrytitle>
860 <manvolnum>9</manvolnum>
861 <refmiscinfo class="version">4.4.14</refmiscinfo>
862</refmeta>
863<refnamediv>
864 <refname>snd_device_disconnect</refname>
865 <refpurpose>
866     disconnect the device
867 </refpurpose>
868</refnamediv>
869<refsynopsisdiv>
870 <title>Synopsis</title>
871  <funcsynopsis><funcprototype>
872   <funcdef>void <function>snd_device_disconnect </function></funcdef>
873   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
874   <paramdef>void * <parameter>device_data</parameter></paramdef>
875  </funcprototype></funcsynopsis>
876</refsynopsisdiv>
877<refsect1>
878 <title>Arguments</title>
879 <variablelist>
880  <varlistentry>
881   <term><parameter>card</parameter></term>
882   <listitem>
883    <para>
884     the card instance
885    </para>
886   </listitem>
887  </varlistentry>
888  <varlistentry>
889   <term><parameter>device_data</parameter></term>
890   <listitem>
891    <para>
892     the data pointer to disconnect
893    </para>
894   </listitem>
895  </varlistentry>
896 </variablelist>
897</refsect1>
898<refsect1>
899<title>Description</title>
900<para>
901   Turns the device into the disconnection state, invoking
902   dev_disconnect callback, if the device was already registered.
903   </para><para>
904
905   Usually called from <function>snd_card_disconnect</function>.
906</para>
907</refsect1>
908<refsect1>
909<title>Return</title>
910<para>
911   Zero if successful, or a negative error code on failure or if the
912   device not found.
913</para>
914</refsect1>
915</refentry>
916
917<refentry id="API-snd-device-free">
918<refentryinfo>
919 <title>LINUX</title>
920 <productname>Kernel Hackers Manual</productname>
921 <date>July 2017</date>
922</refentryinfo>
923<refmeta>
924 <refentrytitle><phrase>snd_device_free</phrase></refentrytitle>
925 <manvolnum>9</manvolnum>
926 <refmiscinfo class="version">4.4.14</refmiscinfo>
927</refmeta>
928<refnamediv>
929 <refname>snd_device_free</refname>
930 <refpurpose>
931     release the device from the card
932 </refpurpose>
933</refnamediv>
934<refsynopsisdiv>
935 <title>Synopsis</title>
936  <funcsynopsis><funcprototype>
937   <funcdef>void <function>snd_device_free </function></funcdef>
938   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
939   <paramdef>void * <parameter>device_data</parameter></paramdef>
940  </funcprototype></funcsynopsis>
941</refsynopsisdiv>
942<refsect1>
943 <title>Arguments</title>
944 <variablelist>
945  <varlistentry>
946   <term><parameter>card</parameter></term>
947   <listitem>
948    <para>
949     the card instance
950    </para>
951   </listitem>
952  </varlistentry>
953  <varlistentry>
954   <term><parameter>device_data</parameter></term>
955   <listitem>
956    <para>
957     the data pointer to release
958    </para>
959   </listitem>
960  </varlistentry>
961 </variablelist>
962</refsect1>
963<refsect1>
964<title>Description</title>
965<para>
966   Removes the device from the list on the card and invokes the
967   callbacks, dev_disconnect and dev_free, corresponding to the state.
968   Then release the device.
969</para>
970</refsect1>
971</refentry>
972
973<refentry id="API-snd-device-register">
974<refentryinfo>
975 <title>LINUX</title>
976 <productname>Kernel Hackers Manual</productname>
977 <date>July 2017</date>
978</refentryinfo>
979<refmeta>
980 <refentrytitle><phrase>snd_device_register</phrase></refentrytitle>
981 <manvolnum>9</manvolnum>
982 <refmiscinfo class="version">4.4.14</refmiscinfo>
983</refmeta>
984<refnamediv>
985 <refname>snd_device_register</refname>
986 <refpurpose>
987     register the device
988 </refpurpose>
989</refnamediv>
990<refsynopsisdiv>
991 <title>Synopsis</title>
992  <funcsynopsis><funcprototype>
993   <funcdef>int <function>snd_device_register </function></funcdef>
994   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
995   <paramdef>void * <parameter>device_data</parameter></paramdef>
996  </funcprototype></funcsynopsis>
997</refsynopsisdiv>
998<refsect1>
999 <title>Arguments</title>
1000 <variablelist>
1001  <varlistentry>
1002   <term><parameter>card</parameter></term>
1003   <listitem>
1004    <para>
1005     the card instance
1006    </para>
1007   </listitem>
1008  </varlistentry>
1009  <varlistentry>
1010   <term><parameter>device_data</parameter></term>
1011   <listitem>
1012    <para>
1013     the data pointer to register
1014    </para>
1015   </listitem>
1016  </varlistentry>
1017 </variablelist>
1018</refsect1>
1019<refsect1>
1020<title>Description</title>
1021<para>
1022   Registers the device which was already created via
1023   <function>snd_device_new</function>.  Usually this is called from <function>snd_card_register</function>,
1024   but it can be called later if any new devices are created after
1025   invocation of <function>snd_card_register</function>.
1026</para>
1027</refsect1>
1028<refsect1>
1029<title>Return</title>
1030<para>
1031   Zero if successful, or a negative error code on failure or if the
1032   device not found.
1033</para>
1034</refsect1>
1035</refentry>
1036
1037     </sect1>
1038     <sect1><title>Module requests and Device File Entries</title>
1039<!-- sound/core/sound.c -->
1040<refentry id="API-snd-request-card">
1041<refentryinfo>
1042 <title>LINUX</title>
1043 <productname>Kernel Hackers Manual</productname>
1044 <date>July 2017</date>
1045</refentryinfo>
1046<refmeta>
1047 <refentrytitle><phrase>snd_request_card</phrase></refentrytitle>
1048 <manvolnum>9</manvolnum>
1049 <refmiscinfo class="version">4.4.14</refmiscinfo>
1050</refmeta>
1051<refnamediv>
1052 <refname>snd_request_card</refname>
1053 <refpurpose>
1054  try to load the card module
1055 </refpurpose>
1056</refnamediv>
1057<refsynopsisdiv>
1058 <title>Synopsis</title>
1059  <funcsynopsis><funcprototype>
1060   <funcdef>void <function>snd_request_card </function></funcdef>
1061   <paramdef>int <parameter>card</parameter></paramdef>
1062  </funcprototype></funcsynopsis>
1063</refsynopsisdiv>
1064<refsect1>
1065 <title>Arguments</title>
1066 <variablelist>
1067  <varlistentry>
1068   <term><parameter>card</parameter></term>
1069   <listitem>
1070    <para>
1071     the card number
1072    </para>
1073   </listitem>
1074  </varlistentry>
1075 </variablelist>
1076</refsect1>
1077<refsect1>
1078<title>Description</title>
1079<para>
1080   Tries to load the module <quote>snd-card-X</quote> for the given card number
1081   via request_module.  Returns immediately if already loaded.
1082</para>
1083</refsect1>
1084</refentry>
1085
1086<refentry id="API-snd-lookup-minor-data">
1087<refentryinfo>
1088 <title>LINUX</title>
1089 <productname>Kernel Hackers Manual</productname>
1090 <date>July 2017</date>
1091</refentryinfo>
1092<refmeta>
1093 <refentrytitle><phrase>snd_lookup_minor_data</phrase></refentrytitle>
1094 <manvolnum>9</manvolnum>
1095 <refmiscinfo class="version">4.4.14</refmiscinfo>
1096</refmeta>
1097<refnamediv>
1098 <refname>snd_lookup_minor_data</refname>
1099 <refpurpose>
1100     get user data of a registered device
1101 </refpurpose>
1102</refnamediv>
1103<refsynopsisdiv>
1104 <title>Synopsis</title>
1105  <funcsynopsis><funcprototype>
1106   <funcdef>void * <function>snd_lookup_minor_data </function></funcdef>
1107   <paramdef>unsigned int <parameter>minor</parameter></paramdef>
1108   <paramdef>int <parameter>type</parameter></paramdef>
1109  </funcprototype></funcsynopsis>
1110</refsynopsisdiv>
1111<refsect1>
1112 <title>Arguments</title>
1113 <variablelist>
1114  <varlistentry>
1115   <term><parameter>minor</parameter></term>
1116   <listitem>
1117    <para>
1118     the minor number
1119    </para>
1120   </listitem>
1121  </varlistentry>
1122  <varlistentry>
1123   <term><parameter>type</parameter></term>
1124   <listitem>
1125    <para>
1126     device type (SNDRV_DEVICE_TYPE_XXX)
1127    </para>
1128   </listitem>
1129  </varlistentry>
1130 </variablelist>
1131</refsect1>
1132<refsect1>
1133<title>Description</title>
1134<para>
1135   Checks that a minor device with the specified type is registered, and returns
1136   its user data pointer.
1137   </para><para>
1138
1139   This function increments the reference counter of the card instance
1140   if an associated instance with the given minor number and type is found.
1141   The caller must call <function>snd_card_unref</function> appropriately later.
1142</para>
1143</refsect1>
1144<refsect1>
1145<title>Return</title>
1146<para>
1147   The user data pointer if the specified device is found. <constant>NULL</constant>
1148   otherwise.
1149</para>
1150</refsect1>
1151</refentry>
1152
1153<refentry id="API-snd-register-device">
1154<refentryinfo>
1155 <title>LINUX</title>
1156 <productname>Kernel Hackers Manual</productname>
1157 <date>July 2017</date>
1158</refentryinfo>
1159<refmeta>
1160 <refentrytitle><phrase>snd_register_device</phrase></refentrytitle>
1161 <manvolnum>9</manvolnum>
1162 <refmiscinfo class="version">4.4.14</refmiscinfo>
1163</refmeta>
1164<refnamediv>
1165 <refname>snd_register_device</refname>
1166 <refpurpose>
1167     Register the ALSA device file for the card
1168 </refpurpose>
1169</refnamediv>
1170<refsynopsisdiv>
1171 <title>Synopsis</title>
1172  <funcsynopsis><funcprototype>
1173   <funcdef>int <function>snd_register_device </function></funcdef>
1174   <paramdef>int <parameter>type</parameter></paramdef>
1175   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
1176   <paramdef>int <parameter>dev</parameter></paramdef>
1177   <paramdef>const struct file_operations * <parameter>f_ops</parameter></paramdef>
1178   <paramdef>void * <parameter>private_data</parameter></paramdef>
1179   <paramdef>struct device * <parameter>device</parameter></paramdef>
1180  </funcprototype></funcsynopsis>
1181</refsynopsisdiv>
1182<refsect1>
1183 <title>Arguments</title>
1184 <variablelist>
1185  <varlistentry>
1186   <term><parameter>type</parameter></term>
1187   <listitem>
1188    <para>
1189     the device type, SNDRV_DEVICE_TYPE_XXX
1190    </para>
1191   </listitem>
1192  </varlistentry>
1193  <varlistentry>
1194   <term><parameter>card</parameter></term>
1195   <listitem>
1196    <para>
1197     the card instance
1198    </para>
1199   </listitem>
1200  </varlistentry>
1201  <varlistentry>
1202   <term><parameter>dev</parameter></term>
1203   <listitem>
1204    <para>
1205     the device index
1206    </para>
1207   </listitem>
1208  </varlistentry>
1209  <varlistentry>
1210   <term><parameter>f_ops</parameter></term>
1211   <listitem>
1212    <para>
1213     the file operations
1214    </para>
1215   </listitem>
1216  </varlistentry>
1217  <varlistentry>
1218   <term><parameter>private_data</parameter></term>
1219   <listitem>
1220    <para>
1221     user pointer for f_ops-&gt;<function>open</function>
1222    </para>
1223   </listitem>
1224  </varlistentry>
1225  <varlistentry>
1226   <term><parameter>device</parameter></term>
1227   <listitem>
1228    <para>
1229     the device to register
1230    </para>
1231   </listitem>
1232  </varlistentry>
1233 </variablelist>
1234</refsect1>
1235<refsect1>
1236<title>Description</title>
1237<para>
1238   Registers an ALSA device file for the given card.
1239   The operators have to be set in reg parameter.
1240</para>
1241</refsect1>
1242<refsect1>
1243<title>Return</title>
1244<para>
1245   Zero if successful, or a negative error code on failure.
1246</para>
1247</refsect1>
1248</refentry>
1249
1250<refentry id="API-snd-unregister-device">
1251<refentryinfo>
1252 <title>LINUX</title>
1253 <productname>Kernel Hackers Manual</productname>
1254 <date>July 2017</date>
1255</refentryinfo>
1256<refmeta>
1257 <refentrytitle><phrase>snd_unregister_device</phrase></refentrytitle>
1258 <manvolnum>9</manvolnum>
1259 <refmiscinfo class="version">4.4.14</refmiscinfo>
1260</refmeta>
1261<refnamediv>
1262 <refname>snd_unregister_device</refname>
1263 <refpurpose>
1264     unregister the device on the given card
1265 </refpurpose>
1266</refnamediv>
1267<refsynopsisdiv>
1268 <title>Synopsis</title>
1269  <funcsynopsis><funcprototype>
1270   <funcdef>int <function>snd_unregister_device </function></funcdef>
1271   <paramdef>struct device * <parameter>dev</parameter></paramdef>
1272  </funcprototype></funcsynopsis>
1273</refsynopsisdiv>
1274<refsect1>
1275 <title>Arguments</title>
1276 <variablelist>
1277  <varlistentry>
1278   <term><parameter>dev</parameter></term>
1279   <listitem>
1280    <para>
1281     the device instance
1282    </para>
1283   </listitem>
1284  </varlistentry>
1285 </variablelist>
1286</refsect1>
1287<refsect1>
1288<title>Description</title>
1289<para>
1290   Unregisters the device file already registered via
1291   <function>snd_register_device</function>.
1292</para>
1293</refsect1>
1294<refsect1>
1295<title>Return</title>
1296<para>
1297   Zero if successful, or a negative error code on failure.
1298</para>
1299</refsect1>
1300</refentry>
1301
1302     </sect1>
1303     <sect1><title>Memory Management Helpers</title>
1304<!-- sound/core/memory.c -->
1305<refentry id="API-copy-to-user-fromio">
1306<refentryinfo>
1307 <title>LINUX</title>
1308 <productname>Kernel Hackers Manual</productname>
1309 <date>July 2017</date>
1310</refentryinfo>
1311<refmeta>
1312 <refentrytitle><phrase>copy_to_user_fromio</phrase></refentrytitle>
1313 <manvolnum>9</manvolnum>
1314 <refmiscinfo class="version">4.4.14</refmiscinfo>
1315</refmeta>
1316<refnamediv>
1317 <refname>copy_to_user_fromio</refname>
1318 <refpurpose>
1319  copy data from mmio-space to user-space
1320 </refpurpose>
1321</refnamediv>
1322<refsynopsisdiv>
1323 <title>Synopsis</title>
1324  <funcsynopsis><funcprototype>
1325   <funcdef>int <function>copy_to_user_fromio </function></funcdef>
1326   <paramdef>void __user * <parameter>dst</parameter></paramdef>
1327   <paramdef>const volatile void __iomem * <parameter>src</parameter></paramdef>
1328   <paramdef>size_t <parameter>count</parameter></paramdef>
1329  </funcprototype></funcsynopsis>
1330</refsynopsisdiv>
1331<refsect1>
1332 <title>Arguments</title>
1333 <variablelist>
1334  <varlistentry>
1335   <term><parameter>dst</parameter></term>
1336   <listitem>
1337    <para>
1338     the destination pointer on user-space
1339    </para>
1340   </listitem>
1341  </varlistentry>
1342  <varlistentry>
1343   <term><parameter>src</parameter></term>
1344   <listitem>
1345    <para>
1346     the source pointer on mmio
1347    </para>
1348   </listitem>
1349  </varlistentry>
1350  <varlistentry>
1351   <term><parameter>count</parameter></term>
1352   <listitem>
1353    <para>
1354     the data size to copy in bytes
1355    </para>
1356   </listitem>
1357  </varlistentry>
1358 </variablelist>
1359</refsect1>
1360<refsect1>
1361<title>Description</title>
1362<para>
1363   Copies the data from mmio-space to user-space.
1364</para>
1365</refsect1>
1366<refsect1>
1367<title>Return</title>
1368<para>
1369   Zero if successful, or non-zero on failure.
1370</para>
1371</refsect1>
1372</refentry>
1373
1374<refentry id="API-copy-from-user-toio">
1375<refentryinfo>
1376 <title>LINUX</title>
1377 <productname>Kernel Hackers Manual</productname>
1378 <date>July 2017</date>
1379</refentryinfo>
1380<refmeta>
1381 <refentrytitle><phrase>copy_from_user_toio</phrase></refentrytitle>
1382 <manvolnum>9</manvolnum>
1383 <refmiscinfo class="version">4.4.14</refmiscinfo>
1384</refmeta>
1385<refnamediv>
1386 <refname>copy_from_user_toio</refname>
1387 <refpurpose>
1388     copy data from user-space to mmio-space
1389 </refpurpose>
1390</refnamediv>
1391<refsynopsisdiv>
1392 <title>Synopsis</title>
1393  <funcsynopsis><funcprototype>
1394   <funcdef>int <function>copy_from_user_toio </function></funcdef>
1395   <paramdef>volatile void __iomem * <parameter>dst</parameter></paramdef>
1396   <paramdef>const void __user * <parameter>src</parameter></paramdef>
1397   <paramdef>size_t <parameter>count</parameter></paramdef>
1398  </funcprototype></funcsynopsis>
1399</refsynopsisdiv>
1400<refsect1>
1401 <title>Arguments</title>
1402 <variablelist>
1403  <varlistentry>
1404   <term><parameter>dst</parameter></term>
1405   <listitem>
1406    <para>
1407     the destination pointer on mmio-space
1408    </para>
1409   </listitem>
1410  </varlistentry>
1411  <varlistentry>
1412   <term><parameter>src</parameter></term>
1413   <listitem>
1414    <para>
1415     the source pointer on user-space
1416    </para>
1417   </listitem>
1418  </varlistentry>
1419  <varlistentry>
1420   <term><parameter>count</parameter></term>
1421   <listitem>
1422    <para>
1423     the data size to copy in bytes
1424    </para>
1425   </listitem>
1426  </varlistentry>
1427 </variablelist>
1428</refsect1>
1429<refsect1>
1430<title>Description</title>
1431<para>
1432   Copies the data from user-space to mmio-space.
1433</para>
1434</refsect1>
1435<refsect1>
1436<title>Return</title>
1437<para>
1438   Zero if successful, or non-zero on failure.
1439</para>
1440</refsect1>
1441</refentry>
1442
1443<!-- sound/core/memalloc.c -->
1444<refentry id="API-snd-malloc-pages">
1445<refentryinfo>
1446 <title>LINUX</title>
1447 <productname>Kernel Hackers Manual</productname>
1448 <date>July 2017</date>
1449</refentryinfo>
1450<refmeta>
1451 <refentrytitle><phrase>snd_malloc_pages</phrase></refentrytitle>
1452 <manvolnum>9</manvolnum>
1453 <refmiscinfo class="version">4.4.14</refmiscinfo>
1454</refmeta>
1455<refnamediv>
1456 <refname>snd_malloc_pages</refname>
1457 <refpurpose>
1458  allocate pages with the given size
1459 </refpurpose>
1460</refnamediv>
1461<refsynopsisdiv>
1462 <title>Synopsis</title>
1463  <funcsynopsis><funcprototype>
1464   <funcdef>void * <function>snd_malloc_pages </function></funcdef>
1465   <paramdef>size_t <parameter>size</parameter></paramdef>
1466   <paramdef>gfp_t <parameter>gfp_flags</parameter></paramdef>
1467  </funcprototype></funcsynopsis>
1468</refsynopsisdiv>
1469<refsect1>
1470 <title>Arguments</title>
1471 <variablelist>
1472  <varlistentry>
1473   <term><parameter>size</parameter></term>
1474   <listitem>
1475    <para>
1476     the size to allocate in bytes
1477    </para>
1478   </listitem>
1479  </varlistentry>
1480  <varlistentry>
1481   <term><parameter>gfp_flags</parameter></term>
1482   <listitem>
1483    <para>
1484     the allocation conditions, GFP_XXX
1485    </para>
1486   </listitem>
1487  </varlistentry>
1488 </variablelist>
1489</refsect1>
1490<refsect1>
1491<title>Description</title>
1492<para>
1493   Allocates the physically contiguous pages with the given size.
1494</para>
1495</refsect1>
1496<refsect1>
1497<title>Return</title>
1498<para>
1499   The pointer of the buffer, or <constant>NULL</constant> if no enough memory.
1500</para>
1501</refsect1>
1502</refentry>
1503
1504<refentry id="API-snd-free-pages">
1505<refentryinfo>
1506 <title>LINUX</title>
1507 <productname>Kernel Hackers Manual</productname>
1508 <date>July 2017</date>
1509</refentryinfo>
1510<refmeta>
1511 <refentrytitle><phrase>snd_free_pages</phrase></refentrytitle>
1512 <manvolnum>9</manvolnum>
1513 <refmiscinfo class="version">4.4.14</refmiscinfo>
1514</refmeta>
1515<refnamediv>
1516 <refname>snd_free_pages</refname>
1517 <refpurpose>
1518     release the pages
1519 </refpurpose>
1520</refnamediv>
1521<refsynopsisdiv>
1522 <title>Synopsis</title>
1523  <funcsynopsis><funcprototype>
1524   <funcdef>void <function>snd_free_pages </function></funcdef>
1525   <paramdef>void * <parameter>ptr</parameter></paramdef>
1526   <paramdef>size_t <parameter>size</parameter></paramdef>
1527  </funcprototype></funcsynopsis>
1528</refsynopsisdiv>
1529<refsect1>
1530 <title>Arguments</title>
1531 <variablelist>
1532  <varlistentry>
1533   <term><parameter>ptr</parameter></term>
1534   <listitem>
1535    <para>
1536     the buffer pointer to release
1537    </para>
1538   </listitem>
1539  </varlistentry>
1540  <varlistentry>
1541   <term><parameter>size</parameter></term>
1542   <listitem>
1543    <para>
1544     the allocated buffer size
1545    </para>
1546   </listitem>
1547  </varlistentry>
1548 </variablelist>
1549</refsect1>
1550<refsect1>
1551<title>Description</title>
1552<para>
1553   Releases the buffer allocated via <function>snd_malloc_pages</function>.
1554</para>
1555</refsect1>
1556</refentry>
1557
1558<refentry id="API-snd-dma-alloc-pages">
1559<refentryinfo>
1560 <title>LINUX</title>
1561 <productname>Kernel Hackers Manual</productname>
1562 <date>July 2017</date>
1563</refentryinfo>
1564<refmeta>
1565 <refentrytitle><phrase>snd_dma_alloc_pages</phrase></refentrytitle>
1566 <manvolnum>9</manvolnum>
1567 <refmiscinfo class="version">4.4.14</refmiscinfo>
1568</refmeta>
1569<refnamediv>
1570 <refname>snd_dma_alloc_pages</refname>
1571 <refpurpose>
1572     allocate the buffer area according to the given type
1573 </refpurpose>
1574</refnamediv>
1575<refsynopsisdiv>
1576 <title>Synopsis</title>
1577  <funcsynopsis><funcprototype>
1578   <funcdef>int <function>snd_dma_alloc_pages </function></funcdef>
1579   <paramdef>int <parameter>type</parameter></paramdef>
1580   <paramdef>struct device * <parameter>device</parameter></paramdef>
1581   <paramdef>size_t <parameter>size</parameter></paramdef>
1582   <paramdef>struct snd_dma_buffer * <parameter>dmab</parameter></paramdef>
1583  </funcprototype></funcsynopsis>
1584</refsynopsisdiv>
1585<refsect1>
1586 <title>Arguments</title>
1587 <variablelist>
1588  <varlistentry>
1589   <term><parameter>type</parameter></term>
1590   <listitem>
1591    <para>
1592     the DMA buffer type
1593    </para>
1594   </listitem>
1595  </varlistentry>
1596  <varlistentry>
1597   <term><parameter>device</parameter></term>
1598   <listitem>
1599    <para>
1600     the device pointer
1601    </para>
1602   </listitem>
1603  </varlistentry>
1604  <varlistentry>
1605   <term><parameter>size</parameter></term>
1606   <listitem>
1607    <para>
1608     the buffer size to allocate
1609    </para>
1610   </listitem>
1611  </varlistentry>
1612  <varlistentry>
1613   <term><parameter>dmab</parameter></term>
1614   <listitem>
1615    <para>
1616     buffer allocation record to store the allocated data
1617    </para>
1618   </listitem>
1619  </varlistentry>
1620 </variablelist>
1621</refsect1>
1622<refsect1>
1623<title>Description</title>
1624<para>
1625   Calls the memory-allocator function for the corresponding
1626   buffer type.
1627</para>
1628</refsect1>
1629<refsect1>
1630<title>Return</title>
1631<para>
1632   Zero if the buffer with the given size is allocated successfully,
1633   otherwise a negative value on error.
1634</para>
1635</refsect1>
1636</refentry>
1637
1638<refentry id="API-snd-dma-alloc-pages-fallback">
1639<refentryinfo>
1640 <title>LINUX</title>
1641 <productname>Kernel Hackers Manual</productname>
1642 <date>July 2017</date>
1643</refentryinfo>
1644<refmeta>
1645 <refentrytitle><phrase>snd_dma_alloc_pages_fallback</phrase></refentrytitle>
1646 <manvolnum>9</manvolnum>
1647 <refmiscinfo class="version">4.4.14</refmiscinfo>
1648</refmeta>
1649<refnamediv>
1650 <refname>snd_dma_alloc_pages_fallback</refname>
1651 <refpurpose>
1652     allocate the buffer area according to the given type with fallback
1653 </refpurpose>
1654</refnamediv>
1655<refsynopsisdiv>
1656 <title>Synopsis</title>
1657  <funcsynopsis><funcprototype>
1658   <funcdef>int <function>snd_dma_alloc_pages_fallback </function></funcdef>
1659   <paramdef>int <parameter>type</parameter></paramdef>
1660   <paramdef>struct device * <parameter>device</parameter></paramdef>
1661   <paramdef>size_t <parameter>size</parameter></paramdef>
1662   <paramdef>struct snd_dma_buffer * <parameter>dmab</parameter></paramdef>
1663  </funcprototype></funcsynopsis>
1664</refsynopsisdiv>
1665<refsect1>
1666 <title>Arguments</title>
1667 <variablelist>
1668  <varlistentry>
1669   <term><parameter>type</parameter></term>
1670   <listitem>
1671    <para>
1672     the DMA buffer type
1673    </para>
1674   </listitem>
1675  </varlistentry>
1676  <varlistentry>
1677   <term><parameter>device</parameter></term>
1678   <listitem>
1679    <para>
1680     the device pointer
1681    </para>
1682   </listitem>
1683  </varlistentry>
1684  <varlistentry>
1685   <term><parameter>size</parameter></term>
1686   <listitem>
1687    <para>
1688     the buffer size to allocate
1689    </para>
1690   </listitem>
1691  </varlistentry>
1692  <varlistentry>
1693   <term><parameter>dmab</parameter></term>
1694   <listitem>
1695    <para>
1696     buffer allocation record to store the allocated data
1697    </para>
1698   </listitem>
1699  </varlistentry>
1700 </variablelist>
1701</refsect1>
1702<refsect1>
1703<title>Description</title>
1704<para>
1705   Calls the memory-allocator function for the corresponding
1706   buffer type.  When no space is left, this function reduces the size and
1707   tries to allocate again.  The size actually allocated is stored in
1708   res_size argument.
1709</para>
1710</refsect1>
1711<refsect1>
1712<title>Return</title>
1713<para>
1714   Zero if the buffer with the given size is allocated successfully,
1715   otherwise a negative value on error.
1716</para>
1717</refsect1>
1718</refentry>
1719
1720<refentry id="API-snd-dma-free-pages">
1721<refentryinfo>
1722 <title>LINUX</title>
1723 <productname>Kernel Hackers Manual</productname>
1724 <date>July 2017</date>
1725</refentryinfo>
1726<refmeta>
1727 <refentrytitle><phrase>snd_dma_free_pages</phrase></refentrytitle>
1728 <manvolnum>9</manvolnum>
1729 <refmiscinfo class="version">4.4.14</refmiscinfo>
1730</refmeta>
1731<refnamediv>
1732 <refname>snd_dma_free_pages</refname>
1733 <refpurpose>
1734     release the allocated buffer
1735 </refpurpose>
1736</refnamediv>
1737<refsynopsisdiv>
1738 <title>Synopsis</title>
1739  <funcsynopsis><funcprototype>
1740   <funcdef>void <function>snd_dma_free_pages </function></funcdef>
1741   <paramdef>struct snd_dma_buffer * <parameter>dmab</parameter></paramdef>
1742  </funcprototype></funcsynopsis>
1743</refsynopsisdiv>
1744<refsect1>
1745 <title>Arguments</title>
1746 <variablelist>
1747  <varlistentry>
1748   <term><parameter>dmab</parameter></term>
1749   <listitem>
1750    <para>
1751     the buffer allocation record to release
1752    </para>
1753   </listitem>
1754  </varlistentry>
1755 </variablelist>
1756</refsect1>
1757<refsect1>
1758<title>Description</title>
1759<para>
1760   Releases the allocated buffer via <function>snd_dma_alloc_pages</function>.
1761</para>
1762</refsect1>
1763</refentry>
1764
1765     </sect1>
1766  </chapter>
1767  <chapter><title>PCM API</title>
1768     <sect1><title>PCM Core</title>
1769<!-- sound/core/pcm.c -->
1770<refentry id="API-snd-pcm-format-name">
1771<refentryinfo>
1772 <title>LINUX</title>
1773 <productname>Kernel Hackers Manual</productname>
1774 <date>July 2017</date>
1775</refentryinfo>
1776<refmeta>
1777 <refentrytitle><phrase>snd_pcm_format_name</phrase></refentrytitle>
1778 <manvolnum>9</manvolnum>
1779 <refmiscinfo class="version">4.4.14</refmiscinfo>
1780</refmeta>
1781<refnamediv>
1782 <refname>snd_pcm_format_name</refname>
1783 <refpurpose>
1784  Return a name string for the given PCM format
1785 </refpurpose>
1786</refnamediv>
1787<refsynopsisdiv>
1788 <title>Synopsis</title>
1789  <funcsynopsis><funcprototype>
1790   <funcdef>const char * <function>snd_pcm_format_name </function></funcdef>
1791   <paramdef>snd_pcm_format_t <parameter>format</parameter></paramdef>
1792  </funcprototype></funcsynopsis>
1793</refsynopsisdiv>
1794<refsect1>
1795 <title>Arguments</title>
1796 <variablelist>
1797  <varlistentry>
1798   <term><parameter>format</parameter></term>
1799   <listitem>
1800    <para>
1801     PCM format
1802    </para>
1803   </listitem>
1804  </varlistentry>
1805 </variablelist>
1806</refsect1>
1807</refentry>
1808
1809<refentry id="API-snd-pcm-new-stream">
1810<refentryinfo>
1811 <title>LINUX</title>
1812 <productname>Kernel Hackers Manual</productname>
1813 <date>July 2017</date>
1814</refentryinfo>
1815<refmeta>
1816 <refentrytitle><phrase>snd_pcm_new_stream</phrase></refentrytitle>
1817 <manvolnum>9</manvolnum>
1818 <refmiscinfo class="version">4.4.14</refmiscinfo>
1819</refmeta>
1820<refnamediv>
1821 <refname>snd_pcm_new_stream</refname>
1822 <refpurpose>
1823     create a new PCM stream
1824 </refpurpose>
1825</refnamediv>
1826<refsynopsisdiv>
1827 <title>Synopsis</title>
1828  <funcsynopsis><funcprototype>
1829   <funcdef>int <function>snd_pcm_new_stream </function></funcdef>
1830   <paramdef>struct snd_pcm * <parameter>pcm</parameter></paramdef>
1831   <paramdef>int <parameter>stream</parameter></paramdef>
1832   <paramdef>int <parameter>substream_count</parameter></paramdef>
1833  </funcprototype></funcsynopsis>
1834</refsynopsisdiv>
1835<refsect1>
1836 <title>Arguments</title>
1837 <variablelist>
1838  <varlistentry>
1839   <term><parameter>pcm</parameter></term>
1840   <listitem>
1841    <para>
1842     the pcm instance
1843    </para>
1844   </listitem>
1845  </varlistentry>
1846  <varlistentry>
1847   <term><parameter>stream</parameter></term>
1848   <listitem>
1849    <para>
1850     the stream direction, SNDRV_PCM_STREAM_XXX
1851    </para>
1852   </listitem>
1853  </varlistentry>
1854  <varlistentry>
1855   <term><parameter>substream_count</parameter></term>
1856   <listitem>
1857    <para>
1858     the number of substreams
1859    </para>
1860   </listitem>
1861  </varlistentry>
1862 </variablelist>
1863</refsect1>
1864<refsect1>
1865<title>Description</title>
1866<para>
1867   Creates a new stream for the pcm.
1868   The corresponding stream on the pcm must have been empty before
1869   calling this, i.e. zero must be given to the argument of
1870   <function>snd_pcm_new</function>.
1871</para>
1872</refsect1>
1873<refsect1>
1874<title>Return</title>
1875<para>
1876   Zero if successful, or a negative error code on failure.
1877</para>
1878</refsect1>
1879</refentry>
1880
1881<refentry id="API-snd-pcm-new">
1882<refentryinfo>
1883 <title>LINUX</title>
1884 <productname>Kernel Hackers Manual</productname>
1885 <date>July 2017</date>
1886</refentryinfo>
1887<refmeta>
1888 <refentrytitle><phrase>snd_pcm_new</phrase></refentrytitle>
1889 <manvolnum>9</manvolnum>
1890 <refmiscinfo class="version">4.4.14</refmiscinfo>
1891</refmeta>
1892<refnamediv>
1893 <refname>snd_pcm_new</refname>
1894 <refpurpose>
1895     create a new PCM instance
1896 </refpurpose>
1897</refnamediv>
1898<refsynopsisdiv>
1899 <title>Synopsis</title>
1900  <funcsynopsis><funcprototype>
1901   <funcdef>int <function>snd_pcm_new </function></funcdef>
1902   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
1903   <paramdef>const char * <parameter>id</parameter></paramdef>
1904   <paramdef>int <parameter>device</parameter></paramdef>
1905   <paramdef>int <parameter>playback_count</parameter></paramdef>
1906   <paramdef>int <parameter>capture_count</parameter></paramdef>
1907   <paramdef>struct snd_pcm ** <parameter>rpcm</parameter></paramdef>
1908  </funcprototype></funcsynopsis>
1909</refsynopsisdiv>
1910<refsect1>
1911 <title>Arguments</title>
1912 <variablelist>
1913  <varlistentry>
1914   <term><parameter>card</parameter></term>
1915   <listitem>
1916    <para>
1917     the card instance
1918    </para>
1919   </listitem>
1920  </varlistentry>
1921  <varlistentry>
1922   <term><parameter>id</parameter></term>
1923   <listitem>
1924    <para>
1925     the id string
1926    </para>
1927   </listitem>
1928  </varlistentry>
1929  <varlistentry>
1930   <term><parameter>device</parameter></term>
1931   <listitem>
1932    <para>
1933     the device index (zero based)
1934    </para>
1935   </listitem>
1936  </varlistentry>
1937  <varlistentry>
1938   <term><parameter>playback_count</parameter></term>
1939   <listitem>
1940    <para>
1941     the number of substreams for playback
1942    </para>
1943   </listitem>
1944  </varlistentry>
1945  <varlistentry>
1946   <term><parameter>capture_count</parameter></term>
1947   <listitem>
1948    <para>
1949     the number of substreams for capture
1950    </para>
1951   </listitem>
1952  </varlistentry>
1953  <varlistentry>
1954   <term><parameter>rpcm</parameter></term>
1955   <listitem>
1956    <para>
1957     the pointer to store the new pcm instance
1958    </para>
1959   </listitem>
1960  </varlistentry>
1961 </variablelist>
1962</refsect1>
1963<refsect1>
1964<title>Description</title>
1965<para>
1966   Creates a new PCM instance.
1967   </para><para>
1968
1969   The pcm operators have to be set afterwards to the new instance
1970   via <function>snd_pcm_set_ops</function>.
1971</para>
1972</refsect1>
1973<refsect1>
1974<title>Return</title>
1975<para>
1976   Zero if successful, or a negative error code on failure.
1977</para>
1978</refsect1>
1979</refentry>
1980
1981<refentry id="API-snd-pcm-new-internal">
1982<refentryinfo>
1983 <title>LINUX</title>
1984 <productname>Kernel Hackers Manual</productname>
1985 <date>July 2017</date>
1986</refentryinfo>
1987<refmeta>
1988 <refentrytitle><phrase>snd_pcm_new_internal</phrase></refentrytitle>
1989 <manvolnum>9</manvolnum>
1990 <refmiscinfo class="version">4.4.14</refmiscinfo>
1991</refmeta>
1992<refnamediv>
1993 <refname>snd_pcm_new_internal</refname>
1994 <refpurpose>
1995     create a new internal PCM instance
1996 </refpurpose>
1997</refnamediv>
1998<refsynopsisdiv>
1999 <title>Synopsis</title>
2000  <funcsynopsis><funcprototype>
2001   <funcdef>int <function>snd_pcm_new_internal </function></funcdef>
2002   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
2003   <paramdef>const char * <parameter>id</parameter></paramdef>
2004   <paramdef>int <parameter>device</parameter></paramdef>
2005   <paramdef>int <parameter>playback_count</parameter></paramdef>
2006   <paramdef>int <parameter>capture_count</parameter></paramdef>
2007   <paramdef>struct snd_pcm ** <parameter>rpcm</parameter></paramdef>
2008  </funcprototype></funcsynopsis>
2009</refsynopsisdiv>
2010<refsect1>
2011 <title>Arguments</title>
2012 <variablelist>
2013  <varlistentry>
2014   <term><parameter>card</parameter></term>
2015   <listitem>
2016    <para>
2017     the card instance
2018    </para>
2019   </listitem>
2020  </varlistentry>
2021  <varlistentry>
2022   <term><parameter>id</parameter></term>
2023   <listitem>
2024    <para>
2025     the id string
2026    </para>
2027   </listitem>
2028  </varlistentry>
2029  <varlistentry>
2030   <term><parameter>device</parameter></term>
2031   <listitem>
2032    <para>
2033     the device index (zero based - shared with normal PCMs)
2034    </para>
2035   </listitem>
2036  </varlistentry>
2037  <varlistentry>
2038   <term><parameter>playback_count</parameter></term>
2039   <listitem>
2040    <para>
2041     the number of substreams for playback
2042    </para>
2043   </listitem>
2044  </varlistentry>
2045  <varlistentry>
2046   <term><parameter>capture_count</parameter></term>
2047   <listitem>
2048    <para>
2049     the number of substreams for capture
2050    </para>
2051   </listitem>
2052  </varlistentry>
2053  <varlistentry>
2054   <term><parameter>rpcm</parameter></term>
2055   <listitem>
2056    <para>
2057     the pointer to store the new pcm instance
2058    </para>
2059   </listitem>
2060  </varlistentry>
2061 </variablelist>
2062</refsect1>
2063<refsect1>
2064<title>Description</title>
2065<para>
2066   Creates a new internal PCM instance with no userspace device or procfs
2067   entries. This is used by ASoC Back End PCMs in order to create a PCM that
2068   will only be used internally by kernel drivers. i.e. it cannot be opened
2069   by userspace. It provides existing ASoC components drivers with a substream
2070   and access to any private data.
2071   </para><para>
2072
2073   The pcm operators have to be set afterwards to the new instance
2074   via <function>snd_pcm_set_ops</function>.
2075</para>
2076</refsect1>
2077<refsect1>
2078<title>Return</title>
2079<para>
2080   Zero if successful, or a negative error code on failure.
2081</para>
2082</refsect1>
2083</refentry>
2084
2085<refentry id="API-snd-pcm-notify">
2086<refentryinfo>
2087 <title>LINUX</title>
2088 <productname>Kernel Hackers Manual</productname>
2089 <date>July 2017</date>
2090</refentryinfo>
2091<refmeta>
2092 <refentrytitle><phrase>snd_pcm_notify</phrase></refentrytitle>
2093 <manvolnum>9</manvolnum>
2094 <refmiscinfo class="version">4.4.14</refmiscinfo>
2095</refmeta>
2096<refnamediv>
2097 <refname>snd_pcm_notify</refname>
2098 <refpurpose>
2099     Add/remove the notify list
2100 </refpurpose>
2101</refnamediv>
2102<refsynopsisdiv>
2103 <title>Synopsis</title>
2104  <funcsynopsis><funcprototype>
2105   <funcdef>int <function>snd_pcm_notify </function></funcdef>
2106   <paramdef>struct snd_pcm_notify * <parameter>notify</parameter></paramdef>
2107   <paramdef>int <parameter>nfree</parameter></paramdef>
2108  </funcprototype></funcsynopsis>
2109</refsynopsisdiv>
2110<refsect1>
2111 <title>Arguments</title>
2112 <variablelist>
2113  <varlistentry>
2114   <term><parameter>notify</parameter></term>
2115   <listitem>
2116    <para>
2117     PCM notify list
2118    </para>
2119   </listitem>
2120  </varlistentry>
2121  <varlistentry>
2122   <term><parameter>nfree</parameter></term>
2123   <listitem>
2124    <para>
2125     0 = register, 1 = unregister
2126    </para>
2127   </listitem>
2128  </varlistentry>
2129 </variablelist>
2130</refsect1>
2131<refsect1>
2132<title>Description</title>
2133<para>
2134   This adds the given notifier to the global list so that the callback is
2135   called for each registered PCM devices.  This exists only for PCM OSS
2136   emulation, so far.
2137</para>
2138</refsect1>
2139</refentry>
2140
2141<!-- sound/core/pcm_lib.c -->
2142<refentry id="API-snd-pcm-set-ops">
2143<refentryinfo>
2144 <title>LINUX</title>
2145 <productname>Kernel Hackers Manual</productname>
2146 <date>July 2017</date>
2147</refentryinfo>
2148<refmeta>
2149 <refentrytitle><phrase>snd_pcm_set_ops</phrase></refentrytitle>
2150 <manvolnum>9</manvolnum>
2151 <refmiscinfo class="version">4.4.14</refmiscinfo>
2152</refmeta>
2153<refnamediv>
2154 <refname>snd_pcm_set_ops</refname>
2155 <refpurpose>
2156  set the PCM operators
2157 </refpurpose>
2158</refnamediv>
2159<refsynopsisdiv>
2160 <title>Synopsis</title>
2161  <funcsynopsis><funcprototype>
2162   <funcdef>void <function>snd_pcm_set_ops </function></funcdef>
2163   <paramdef>struct snd_pcm * <parameter>pcm</parameter></paramdef>
2164   <paramdef>int <parameter>direction</parameter></paramdef>
2165   <paramdef>const struct snd_pcm_ops * <parameter>ops</parameter></paramdef>
2166  </funcprototype></funcsynopsis>
2167</refsynopsisdiv>
2168<refsect1>
2169 <title>Arguments</title>
2170 <variablelist>
2171  <varlistentry>
2172   <term><parameter>pcm</parameter></term>
2173   <listitem>
2174    <para>
2175     the pcm instance
2176    </para>
2177   </listitem>
2178  </varlistentry>
2179  <varlistentry>
2180   <term><parameter>direction</parameter></term>
2181   <listitem>
2182    <para>
2183     stream direction, SNDRV_PCM_STREAM_XXX
2184    </para>
2185   </listitem>
2186  </varlistentry>
2187  <varlistentry>
2188   <term><parameter>ops</parameter></term>
2189   <listitem>
2190    <para>
2191     the operator table
2192    </para>
2193   </listitem>
2194  </varlistentry>
2195 </variablelist>
2196</refsect1>
2197<refsect1>
2198<title>Description</title>
2199<para>
2200   Sets the given PCM operators to the pcm instance.
2201</para>
2202</refsect1>
2203</refentry>
2204
2205<refentry id="API-snd-pcm-set-sync">
2206<refentryinfo>
2207 <title>LINUX</title>
2208 <productname>Kernel Hackers Manual</productname>
2209 <date>July 2017</date>
2210</refentryinfo>
2211<refmeta>
2212 <refentrytitle><phrase>snd_pcm_set_sync</phrase></refentrytitle>
2213 <manvolnum>9</manvolnum>
2214 <refmiscinfo class="version">4.4.14</refmiscinfo>
2215</refmeta>
2216<refnamediv>
2217 <refname>snd_pcm_set_sync</refname>
2218 <refpurpose>
2219     set the PCM sync id
2220 </refpurpose>
2221</refnamediv>
2222<refsynopsisdiv>
2223 <title>Synopsis</title>
2224  <funcsynopsis><funcprototype>
2225   <funcdef>void <function>snd_pcm_set_sync </function></funcdef>
2226   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
2227  </funcprototype></funcsynopsis>
2228</refsynopsisdiv>
2229<refsect1>
2230 <title>Arguments</title>
2231 <variablelist>
2232  <varlistentry>
2233   <term><parameter>substream</parameter></term>
2234   <listitem>
2235    <para>
2236     the pcm substream
2237    </para>
2238   </listitem>
2239  </varlistentry>
2240 </variablelist>
2241</refsect1>
2242<refsect1>
2243<title>Description</title>
2244<para>
2245   Sets the PCM sync identifier for the card.
2246</para>
2247</refsect1>
2248</refentry>
2249
2250<refentry id="API-snd-interval-refine">
2251<refentryinfo>
2252 <title>LINUX</title>
2253 <productname>Kernel Hackers Manual</productname>
2254 <date>July 2017</date>
2255</refentryinfo>
2256<refmeta>
2257 <refentrytitle><phrase>snd_interval_refine</phrase></refentrytitle>
2258 <manvolnum>9</manvolnum>
2259 <refmiscinfo class="version">4.4.14</refmiscinfo>
2260</refmeta>
2261<refnamediv>
2262 <refname>snd_interval_refine</refname>
2263 <refpurpose>
2264     refine the interval value of configurator
2265 </refpurpose>
2266</refnamediv>
2267<refsynopsisdiv>
2268 <title>Synopsis</title>
2269  <funcsynopsis><funcprototype>
2270   <funcdef>int <function>snd_interval_refine </function></funcdef>
2271   <paramdef>struct snd_interval * <parameter>i</parameter></paramdef>
2272   <paramdef>const struct snd_interval * <parameter>v</parameter></paramdef>
2273  </funcprototype></funcsynopsis>
2274</refsynopsisdiv>
2275<refsect1>
2276 <title>Arguments</title>
2277 <variablelist>
2278  <varlistentry>
2279   <term><parameter>i</parameter></term>
2280   <listitem>
2281    <para>
2282     the interval value to refine
2283    </para>
2284   </listitem>
2285  </varlistentry>
2286  <varlistentry>
2287   <term><parameter>v</parameter></term>
2288   <listitem>
2289    <para>
2290     the interval value to refer to
2291    </para>
2292   </listitem>
2293  </varlistentry>
2294 </variablelist>
2295</refsect1>
2296<refsect1>
2297<title>Description</title>
2298<para>
2299   Refines the interval value with the reference value.
2300   The interval is changed to the range satisfying both intervals.
2301   The interval status (min, max, integer, etc.) are evaluated.
2302</para>
2303</refsect1>
2304<refsect1>
2305<title>Return</title>
2306<para>
2307   Positive if the value is changed, zero if it's not changed, or a
2308   negative error code.
2309</para>
2310</refsect1>
2311</refentry>
2312
2313<refentry id="API-snd-interval-ratnum">
2314<refentryinfo>
2315 <title>LINUX</title>
2316 <productname>Kernel Hackers Manual</productname>
2317 <date>July 2017</date>
2318</refentryinfo>
2319<refmeta>
2320 <refentrytitle><phrase>snd_interval_ratnum</phrase></refentrytitle>
2321 <manvolnum>9</manvolnum>
2322 <refmiscinfo class="version">4.4.14</refmiscinfo>
2323</refmeta>
2324<refnamediv>
2325 <refname>snd_interval_ratnum</refname>
2326 <refpurpose>
2327     refine the interval value
2328 </refpurpose>
2329</refnamediv>
2330<refsynopsisdiv>
2331 <title>Synopsis</title>
2332  <funcsynopsis><funcprototype>
2333   <funcdef>int <function>snd_interval_ratnum </function></funcdef>
2334   <paramdef>struct snd_interval * <parameter>i</parameter></paramdef>
2335   <paramdef>unsigned int <parameter>rats_count</parameter></paramdef>
2336   <paramdef>const struct snd_ratnum * <parameter>rats</parameter></paramdef>
2337   <paramdef>unsigned int * <parameter>nump</parameter></paramdef>
2338   <paramdef>unsigned int * <parameter>denp</parameter></paramdef>
2339  </funcprototype></funcsynopsis>
2340</refsynopsisdiv>
2341<refsect1>
2342 <title>Arguments</title>
2343 <variablelist>
2344  <varlistentry>
2345   <term><parameter>i</parameter></term>
2346   <listitem>
2347    <para>
2348     interval to refine
2349    </para>
2350   </listitem>
2351  </varlistentry>
2352  <varlistentry>
2353   <term><parameter>rats_count</parameter></term>
2354   <listitem>
2355    <para>
2356     number of ratnum_t 
2357    </para>
2358   </listitem>
2359  </varlistentry>
2360  <varlistentry>
2361   <term><parameter>rats</parameter></term>
2362   <listitem>
2363    <para>
2364     ratnum_t array
2365    </para>
2366   </listitem>
2367  </varlistentry>
2368  <varlistentry>
2369   <term><parameter>nump</parameter></term>
2370   <listitem>
2371    <para>
2372     pointer to store the resultant numerator
2373    </para>
2374   </listitem>
2375  </varlistentry>
2376  <varlistentry>
2377   <term><parameter>denp</parameter></term>
2378   <listitem>
2379    <para>
2380     pointer to store the resultant denominator
2381    </para>
2382   </listitem>
2383  </varlistentry>
2384 </variablelist>
2385</refsect1>
2386<refsect1>
2387<title>Return</title>
2388<para>
2389   Positive if the value is changed, zero if it's not changed, or a
2390   negative error code.
2391</para>
2392</refsect1>
2393</refentry>
2394
2395<refentry id="API-snd-interval-list">
2396<refentryinfo>
2397 <title>LINUX</title>
2398 <productname>Kernel Hackers Manual</productname>
2399 <date>July 2017</date>
2400</refentryinfo>
2401<refmeta>
2402 <refentrytitle><phrase>snd_interval_list</phrase></refentrytitle>
2403 <manvolnum>9</manvolnum>
2404 <refmiscinfo class="version">4.4.14</refmiscinfo>
2405</refmeta>
2406<refnamediv>
2407 <refname>snd_interval_list</refname>
2408 <refpurpose>
2409     refine the interval value from the list
2410 </refpurpose>
2411</refnamediv>
2412<refsynopsisdiv>
2413 <title>Synopsis</title>
2414  <funcsynopsis><funcprototype>
2415   <funcdef>int <function>snd_interval_list </function></funcdef>
2416   <paramdef>struct snd_interval * <parameter>i</parameter></paramdef>
2417   <paramdef>unsigned int <parameter>count</parameter></paramdef>
2418   <paramdef>const unsigned int * <parameter>list</parameter></paramdef>
2419   <paramdef>unsigned int <parameter>mask</parameter></paramdef>
2420  </funcprototype></funcsynopsis>
2421</refsynopsisdiv>
2422<refsect1>
2423 <title>Arguments</title>
2424 <variablelist>
2425  <varlistentry>
2426   <term><parameter>i</parameter></term>
2427   <listitem>
2428    <para>
2429     the interval value to refine
2430    </para>
2431   </listitem>
2432  </varlistentry>
2433  <varlistentry>
2434   <term><parameter>count</parameter></term>
2435   <listitem>
2436    <para>
2437     the number of elements in the list
2438    </para>
2439   </listitem>
2440  </varlistentry>
2441  <varlistentry>
2442   <term><parameter>list</parameter></term>
2443   <listitem>
2444    <para>
2445     the value list
2446    </para>
2447   </listitem>
2448  </varlistentry>
2449  <varlistentry>
2450   <term><parameter>mask</parameter></term>
2451   <listitem>
2452    <para>
2453     the bit-mask to evaluate
2454    </para>
2455   </listitem>
2456  </varlistentry>
2457 </variablelist>
2458</refsect1>
2459<refsect1>
2460<title>Description</title>
2461<para>
2462   Refines the interval value from the list.
2463   When mask is non-zero, only the elements corresponding to bit 1 are
2464   evaluated.
2465</para>
2466</refsect1>
2467<refsect1>
2468<title>Return</title>
2469<para>
2470   Positive if the value is changed, zero if it's not changed, or a
2471   negative error code.
2472</para>
2473</refsect1>
2474</refentry>
2475
2476<refentry id="API-snd-interval-ranges">
2477<refentryinfo>
2478 <title>LINUX</title>
2479 <productname>Kernel Hackers Manual</productname>
2480 <date>July 2017</date>
2481</refentryinfo>
2482<refmeta>
2483 <refentrytitle><phrase>snd_interval_ranges</phrase></refentrytitle>
2484 <manvolnum>9</manvolnum>
2485 <refmiscinfo class="version">4.4.14</refmiscinfo>
2486</refmeta>
2487<refnamediv>
2488 <refname>snd_interval_ranges</refname>
2489 <refpurpose>
2490     refine the interval value from the list of ranges
2491 </refpurpose>
2492</refnamediv>
2493<refsynopsisdiv>
2494 <title>Synopsis</title>
2495  <funcsynopsis><funcprototype>
2496   <funcdef>int <function>snd_interval_ranges </function></funcdef>
2497   <paramdef>struct snd_interval * <parameter>i</parameter></paramdef>
2498   <paramdef>unsigned int <parameter>count</parameter></paramdef>
2499   <paramdef>const struct snd_interval * <parameter>ranges</parameter></paramdef>
2500   <paramdef>unsigned int <parameter>mask</parameter></paramdef>
2501  </funcprototype></funcsynopsis>
2502</refsynopsisdiv>
2503<refsect1>
2504 <title>Arguments</title>
2505 <variablelist>
2506  <varlistentry>
2507   <term><parameter>i</parameter></term>
2508   <listitem>
2509    <para>
2510     the interval value to refine
2511    </para>
2512   </listitem>
2513  </varlistentry>
2514  <varlistentry>
2515   <term><parameter>count</parameter></term>
2516   <listitem>
2517    <para>
2518     the number of elements in the list of ranges
2519    </para>
2520   </listitem>
2521  </varlistentry>
2522  <varlistentry>
2523   <term><parameter>ranges</parameter></term>
2524   <listitem>
2525    <para>
2526     the ranges list
2527    </para>
2528   </listitem>
2529  </varlistentry>
2530  <varlistentry>
2531   <term><parameter>mask</parameter></term>
2532   <listitem>
2533    <para>
2534     the bit-mask to evaluate
2535    </para>
2536   </listitem>
2537  </varlistentry>
2538 </variablelist>
2539</refsect1>
2540<refsect1>
2541<title>Description</title>
2542<para>
2543   Refines the interval value from the list of ranges.
2544   When mask is non-zero, only the elements corresponding to bit 1 are
2545   evaluated.
2546</para>
2547</refsect1>
2548<refsect1>
2549<title>Return</title>
2550<para>
2551   Positive if the value is changed, zero if it's not changed, or a
2552   negative error code.
2553</para>
2554</refsect1>
2555</refentry>
2556
2557<refentry id="API-snd-pcm-hw-rule-add">
2558<refentryinfo>
2559 <title>LINUX</title>
2560 <productname>Kernel Hackers Manual</productname>
2561 <date>July 2017</date>
2562</refentryinfo>
2563<refmeta>
2564 <refentrytitle><phrase>snd_pcm_hw_rule_add</phrase></refentrytitle>
2565 <manvolnum>9</manvolnum>
2566 <refmiscinfo class="version">4.4.14</refmiscinfo>
2567</refmeta>
2568<refnamediv>
2569 <refname>snd_pcm_hw_rule_add</refname>
2570 <refpurpose>
2571     add the hw-constraint rule
2572 </refpurpose>
2573</refnamediv>
2574<refsynopsisdiv>
2575 <title>Synopsis</title>
2576  <funcsynopsis><funcprototype>
2577   <funcdef>int <function>snd_pcm_hw_rule_add </function></funcdef>
2578   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
2579   <paramdef>unsigned int <parameter>cond</parameter></paramdef>
2580   <paramdef>int <parameter>var</parameter></paramdef>
2581   <paramdef>snd_pcm_hw_rule_func_t <parameter>func</parameter></paramdef>
2582   <paramdef>void * <parameter>private</parameter></paramdef>
2583   <paramdef>int <parameter>dep</parameter></paramdef>
2584   <paramdef> <parameter>...</parameter></paramdef>
2585  </funcprototype></funcsynopsis>
2586</refsynopsisdiv>
2587<refsect1>
2588 <title>Arguments</title>
2589 <variablelist>
2590  <varlistentry>
2591   <term><parameter>runtime</parameter></term>
2592   <listitem>
2593    <para>
2594     the pcm runtime instance
2595    </para>
2596   </listitem>
2597  </varlistentry>
2598  <varlistentry>
2599   <term><parameter>cond</parameter></term>
2600   <listitem>
2601    <para>
2602     condition bits
2603    </para>
2604   </listitem>
2605  </varlistentry>
2606  <varlistentry>
2607   <term><parameter>var</parameter></term>
2608   <listitem>
2609    <para>
2610     the variable to evaluate
2611    </para>
2612   </listitem>
2613  </varlistentry>
2614  <varlistentry>
2615   <term><parameter>func</parameter></term>
2616   <listitem>
2617    <para>
2618     the evaluation function
2619    </para>
2620   </listitem>
2621  </varlistentry>
2622  <varlistentry>
2623   <term><parameter>private</parameter></term>
2624   <listitem>
2625    <para>
2626     the private data pointer passed to function
2627    </para>
2628   </listitem>
2629  </varlistentry>
2630  <varlistentry>
2631   <term><parameter>dep</parameter></term>
2632   <listitem>
2633    <para>
2634     the dependent variables
2635    </para>
2636   </listitem>
2637  </varlistentry>
2638  <varlistentry>
2639   <term><parameter>...</parameter></term>
2640   <listitem>
2641    <para>
2642     variable arguments
2643    </para>
2644   </listitem>
2645  </varlistentry>
2646 </variablelist>
2647</refsect1>
2648<refsect1>
2649<title>Return</title>
2650<para>
2651   Zero if successful, or a negative error code on failure.
2652</para>
2653</refsect1>
2654</refentry>
2655
2656<refentry id="API-snd-pcm-hw-constraint-mask64">
2657<refentryinfo>
2658 <title>LINUX</title>
2659 <productname>Kernel Hackers Manual</productname>
2660 <date>July 2017</date>
2661</refentryinfo>
2662<refmeta>
2663 <refentrytitle><phrase>snd_pcm_hw_constraint_mask64</phrase></refentrytitle>
2664 <manvolnum>9</manvolnum>
2665 <refmiscinfo class="version">4.4.14</refmiscinfo>
2666</refmeta>
2667<refnamediv>
2668 <refname>snd_pcm_hw_constraint_mask64</refname>
2669 <refpurpose>
2670     apply the given bitmap mask constraint
2671 </refpurpose>
2672</refnamediv>
2673<refsynopsisdiv>
2674 <title>Synopsis</title>
2675  <funcsynopsis><funcprototype>
2676   <funcdef>int <function>snd_pcm_hw_constraint_mask64 </function></funcdef>
2677   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
2678   <paramdef>snd_pcm_hw_param_t <parameter>var</parameter></paramdef>
2679   <paramdef>u_int64_t <parameter>mask</parameter></paramdef>
2680  </funcprototype></funcsynopsis>
2681</refsynopsisdiv>
2682<refsect1>
2683 <title>Arguments</title>
2684 <variablelist>
2685  <varlistentry>
2686   <term><parameter>runtime</parameter></term>
2687   <listitem>
2688    <para>
2689     PCM runtime instance
2690    </para>
2691   </listitem>
2692  </varlistentry>
2693  <varlistentry>
2694   <term><parameter>var</parameter></term>
2695   <listitem>
2696    <para>
2697     hw_params variable to apply the mask
2698    </para>
2699   </listitem>
2700  </varlistentry>
2701  <varlistentry>
2702   <term><parameter>mask</parameter></term>
2703   <listitem>
2704    <para>
2705     the 64bit bitmap mask
2706    </para>
2707   </listitem>
2708  </varlistentry>
2709 </variablelist>
2710</refsect1>
2711<refsect1>
2712<title>Description</title>
2713<para>
2714   Apply the constraint of the given bitmap mask to a 64-bit mask parameter.
2715</para>
2716</refsect1>
2717<refsect1>
2718<title>Return</title>
2719<para>
2720   Zero if successful, or a negative error code on failure.
2721</para>
2722</refsect1>
2723</refentry>
2724
2725<refentry id="API-snd-pcm-hw-constraint-integer">
2726<refentryinfo>
2727 <title>LINUX</title>
2728 <productname>Kernel Hackers Manual</productname>
2729 <date>July 2017</date>
2730</refentryinfo>
2731<refmeta>
2732 <refentrytitle><phrase>snd_pcm_hw_constraint_integer</phrase></refentrytitle>
2733 <manvolnum>9</manvolnum>
2734 <refmiscinfo class="version">4.4.14</refmiscinfo>
2735</refmeta>
2736<refnamediv>
2737 <refname>snd_pcm_hw_constraint_integer</refname>
2738 <refpurpose>
2739     apply an integer constraint to an interval
2740 </refpurpose>
2741</refnamediv>
2742<refsynopsisdiv>
2743 <title>Synopsis</title>
2744  <funcsynopsis><funcprototype>
2745   <funcdef>int <function>snd_pcm_hw_constraint_integer </function></funcdef>
2746   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
2747   <paramdef>snd_pcm_hw_param_t <parameter>var</parameter></paramdef>
2748  </funcprototype></funcsynopsis>
2749</refsynopsisdiv>
2750<refsect1>
2751 <title>Arguments</title>
2752 <variablelist>
2753  <varlistentry>
2754   <term><parameter>runtime</parameter></term>
2755   <listitem>
2756    <para>
2757     PCM runtime instance
2758    </para>
2759   </listitem>
2760  </varlistentry>
2761  <varlistentry>
2762   <term><parameter>var</parameter></term>
2763   <listitem>
2764    <para>
2765     hw_params variable to apply the integer constraint
2766    </para>
2767   </listitem>
2768  </varlistentry>
2769 </variablelist>
2770</refsect1>
2771<refsect1>
2772<title>Description</title>
2773<para>
2774   Apply the constraint of integer to an interval parameter.
2775</para>
2776</refsect1>
2777<refsect1>
2778<title>Return</title>
2779<para>
2780   Positive if the value is changed, zero if it's not changed, or a
2781   negative error code.
2782</para>
2783</refsect1>
2784</refentry>
2785
2786<refentry id="API-snd-pcm-hw-constraint-minmax">
2787<refentryinfo>
2788 <title>LINUX</title>
2789 <productname>Kernel Hackers Manual</productname>
2790 <date>July 2017</date>
2791</refentryinfo>
2792<refmeta>
2793 <refentrytitle><phrase>snd_pcm_hw_constraint_minmax</phrase></refentrytitle>
2794 <manvolnum>9</manvolnum>
2795 <refmiscinfo class="version">4.4.14</refmiscinfo>
2796</refmeta>
2797<refnamediv>
2798 <refname>snd_pcm_hw_constraint_minmax</refname>
2799 <refpurpose>
2800     apply a min/max range constraint to an interval
2801 </refpurpose>
2802</refnamediv>
2803<refsynopsisdiv>
2804 <title>Synopsis</title>
2805  <funcsynopsis><funcprototype>
2806   <funcdef>int <function>snd_pcm_hw_constraint_minmax </function></funcdef>
2807   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
2808   <paramdef>snd_pcm_hw_param_t <parameter>var</parameter></paramdef>
2809   <paramdef>unsigned int <parameter>min</parameter></paramdef>
2810   <paramdef>unsigned int <parameter>max</parameter></paramdef>
2811  </funcprototype></funcsynopsis>
2812</refsynopsisdiv>
2813<refsect1>
2814 <title>Arguments</title>
2815 <variablelist>
2816  <varlistentry>
2817   <term><parameter>runtime</parameter></term>
2818   <listitem>
2819    <para>
2820     PCM runtime instance
2821    </para>
2822   </listitem>
2823  </varlistentry>
2824  <varlistentry>
2825   <term><parameter>var</parameter></term>
2826   <listitem>
2827    <para>
2828     hw_params variable to apply the range
2829    </para>
2830   </listitem>
2831  </varlistentry>
2832  <varlistentry>
2833   <term><parameter>min</parameter></term>
2834   <listitem>
2835    <para>
2836     the minimal value
2837    </para>
2838   </listitem>
2839  </varlistentry>
2840  <varlistentry>
2841   <term><parameter>max</parameter></term>
2842   <listitem>
2843    <para>
2844     the maximal value
2845    </para>
2846   </listitem>
2847  </varlistentry>
2848 </variablelist>
2849</refsect1>
2850<refsect1>
2851<title>Description</title>
2852<para>
2853   Apply the min/max range constraint to an interval parameter.
2854</para>
2855</refsect1>
2856<refsect1>
2857<title>Return</title>
2858<para>
2859   Positive if the value is changed, zero if it's not changed, or a
2860   negative error code.
2861</para>
2862</refsect1>
2863</refentry>
2864
2865<refentry id="API-snd-pcm-hw-constraint-list">
2866<refentryinfo>
2867 <title>LINUX</title>
2868 <productname>Kernel Hackers Manual</productname>
2869 <date>July 2017</date>
2870</refentryinfo>
2871<refmeta>
2872 <refentrytitle><phrase>snd_pcm_hw_constraint_list</phrase></refentrytitle>
2873 <manvolnum>9</manvolnum>
2874 <refmiscinfo class="version">4.4.14</refmiscinfo>
2875</refmeta>
2876<refnamediv>
2877 <refname>snd_pcm_hw_constraint_list</refname>
2878 <refpurpose>
2879     apply a list of constraints to a parameter
2880 </refpurpose>
2881</refnamediv>
2882<refsynopsisdiv>
2883 <title>Synopsis</title>
2884  <funcsynopsis><funcprototype>
2885   <funcdef>int <function>snd_pcm_hw_constraint_list </function></funcdef>
2886   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
2887   <paramdef>unsigned int <parameter>cond</parameter></paramdef>
2888   <paramdef>snd_pcm_hw_param_t <parameter>var</parameter></paramdef>
2889   <paramdef>const struct snd_pcm_hw_constraint_list * <parameter>l</parameter></paramdef>
2890  </funcprototype></funcsynopsis>
2891</refsynopsisdiv>
2892<refsect1>
2893 <title>Arguments</title>
2894 <variablelist>
2895  <varlistentry>
2896   <term><parameter>runtime</parameter></term>
2897   <listitem>
2898    <para>
2899     PCM runtime instance
2900    </para>
2901   </listitem>
2902  </varlistentry>
2903  <varlistentry>
2904   <term><parameter>cond</parameter></term>
2905   <listitem>
2906    <para>
2907     condition bits
2908    </para>
2909   </listitem>
2910  </varlistentry>
2911  <varlistentry>
2912   <term><parameter>var</parameter></term>
2913   <listitem>
2914    <para>
2915     hw_params variable to apply the list constraint
2916    </para>
2917   </listitem>
2918  </varlistentry>
2919  <varlistentry>
2920   <term><parameter>l</parameter></term>
2921   <listitem>
2922    <para>
2923     list
2924    </para>
2925   </listitem>
2926  </varlistentry>
2927 </variablelist>
2928</refsect1>
2929<refsect1>
2930<title>Description</title>
2931<para>
2932   Apply the list of constraints to an interval parameter.
2933</para>
2934</refsect1>
2935<refsect1>
2936<title>Return</title>
2937<para>
2938   Zero if successful, or a negative error code on failure.
2939</para>
2940</refsect1>
2941</refentry>
2942
2943<refentry id="API-snd-pcm-hw-constraint-ranges">
2944<refentryinfo>
2945 <title>LINUX</title>
2946 <productname>Kernel Hackers Manual</productname>
2947 <date>July 2017</date>
2948</refentryinfo>
2949<refmeta>
2950 <refentrytitle><phrase>snd_pcm_hw_constraint_ranges</phrase></refentrytitle>
2951 <manvolnum>9</manvolnum>
2952 <refmiscinfo class="version">4.4.14</refmiscinfo>
2953</refmeta>
2954<refnamediv>
2955 <refname>snd_pcm_hw_constraint_ranges</refname>
2956 <refpurpose>
2957     apply list of range constraints to a parameter
2958 </refpurpose>
2959</refnamediv>
2960<refsynopsisdiv>
2961 <title>Synopsis</title>
2962  <funcsynopsis><funcprototype>
2963   <funcdef>int <function>snd_pcm_hw_constraint_ranges </function></funcdef>
2964   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
2965   <paramdef>unsigned int <parameter>cond</parameter></paramdef>
2966   <paramdef>snd_pcm_hw_param_t <parameter>var</parameter></paramdef>
2967   <paramdef>const struct snd_pcm_hw_constraint_ranges * <parameter>r</parameter></paramdef>
2968  </funcprototype></funcsynopsis>
2969</refsynopsisdiv>
2970<refsect1>
2971 <title>Arguments</title>
2972 <variablelist>
2973  <varlistentry>
2974   <term><parameter>runtime</parameter></term>
2975   <listitem>
2976    <para>
2977     PCM runtime instance
2978    </para>
2979   </listitem>
2980  </varlistentry>
2981  <varlistentry>
2982   <term><parameter>cond</parameter></term>
2983   <listitem>
2984    <para>
2985     condition bits
2986    </para>
2987   </listitem>
2988  </varlistentry>
2989  <varlistentry>
2990   <term><parameter>var</parameter></term>
2991   <listitem>
2992    <para>
2993     hw_params variable to apply the list of range constraints
2994    </para>
2995   </listitem>
2996  </varlistentry>
2997  <varlistentry>
2998   <term><parameter>r</parameter></term>
2999   <listitem>
3000    <para>
3001     ranges
3002    </para>
3003   </listitem>
3004  </varlistentry>
3005 </variablelist>
3006</refsect1>
3007<refsect1>
3008<title>Description</title>
3009<para>
3010   Apply the list of range constraints to an interval parameter.
3011</para>
3012</refsect1>
3013<refsect1>
3014<title>Return</title>
3015<para>
3016   Zero if successful, or a negative error code on failure.
3017</para>
3018</refsect1>
3019</refentry>
3020
3021<refentry id="API-snd-pcm-hw-constraint-ratnums">
3022<refentryinfo>
3023 <title>LINUX</title>
3024 <productname>Kernel Hackers Manual</productname>
3025 <date>July 2017</date>
3026</refentryinfo>
3027<refmeta>
3028 <refentrytitle><phrase>snd_pcm_hw_constraint_ratnums</phrase></refentrytitle>
3029 <manvolnum>9</manvolnum>
3030 <refmiscinfo class="version">4.4.14</refmiscinfo>
3031</refmeta>
3032<refnamediv>
3033 <refname>snd_pcm_hw_constraint_ratnums</refname>
3034 <refpurpose>
3035     apply ratnums constraint to a parameter
3036 </refpurpose>
3037</refnamediv>
3038<refsynopsisdiv>
3039 <title>Synopsis</title>
3040  <funcsynopsis><funcprototype>
3041   <funcdef>int <function>snd_pcm_hw_constraint_ratnums </function></funcdef>
3042   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
3043   <paramdef>unsigned int <parameter>cond</parameter></paramdef>
3044   <paramdef>snd_pcm_hw_param_t <parameter>var</parameter></paramdef>
3045   <paramdef>const struct snd_pcm_hw_constraint_ratnums * <parameter>r</parameter></paramdef>
3046  </funcprototype></funcsynopsis>
3047</refsynopsisdiv>
3048<refsect1>
3049 <title>Arguments</title>
3050 <variablelist>
3051  <varlistentry>
3052   <term><parameter>runtime</parameter></term>
3053   <listitem>
3054    <para>
3055     PCM runtime instance
3056    </para>
3057   </listitem>
3058  </varlistentry>
3059  <varlistentry>
3060   <term><parameter>cond</parameter></term>
3061   <listitem>
3062    <para>
3063     condition bits
3064    </para>
3065   </listitem>
3066  </varlistentry>
3067  <varlistentry>
3068   <term><parameter>var</parameter></term>
3069   <listitem>
3070    <para>
3071     hw_params variable to apply the ratnums constraint
3072    </para>
3073   </listitem>
3074  </varlistentry>
3075  <varlistentry>
3076   <term><parameter>r</parameter></term>
3077   <listitem>
3078    <para>
3079     struct snd_ratnums constriants
3080    </para>
3081   </listitem>
3082  </varlistentry>
3083 </variablelist>
3084</refsect1>
3085<refsect1>
3086<title>Return</title>
3087<para>
3088   Zero if successful, or a negative error code on failure.
3089</para>
3090</refsect1>
3091</refentry>
3092
3093<refentry id="API-snd-pcm-hw-constraint-ratdens">
3094<refentryinfo>
3095 <title>LINUX</title>
3096 <productname>Kernel Hackers Manual</productname>
3097 <date>July 2017</date>
3098</refentryinfo>
3099<refmeta>
3100 <refentrytitle><phrase>snd_pcm_hw_constraint_ratdens</phrase></refentrytitle>
3101 <manvolnum>9</manvolnum>
3102 <refmiscinfo class="version">4.4.14</refmiscinfo>
3103</refmeta>
3104<refnamediv>
3105 <refname>snd_pcm_hw_constraint_ratdens</refname>
3106 <refpurpose>
3107     apply ratdens constraint to a parameter
3108 </refpurpose>
3109</refnamediv>
3110<refsynopsisdiv>
3111 <title>Synopsis</title>
3112  <funcsynopsis><funcprototype>
3113   <funcdef>int <function>snd_pcm_hw_constraint_ratdens </function></funcdef>
3114   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
3115   <paramdef>unsigned int <parameter>cond</parameter></paramdef>
3116   <paramdef>snd_pcm_hw_param_t <parameter>var</parameter></paramdef>
3117   <paramdef>const struct snd_pcm_hw_constraint_ratdens * <parameter>r</parameter></paramdef>
3118  </funcprototype></funcsynopsis>
3119</refsynopsisdiv>
3120<refsect1>
3121 <title>Arguments</title>
3122 <variablelist>
3123  <varlistentry>
3124   <term><parameter>runtime</parameter></term>
3125   <listitem>
3126    <para>
3127     PCM runtime instance
3128    </para>
3129   </listitem>
3130  </varlistentry>
3131  <varlistentry>
3132   <term><parameter>cond</parameter></term>
3133   <listitem>
3134    <para>
3135     condition bits
3136    </para>
3137   </listitem>
3138  </varlistentry>
3139  <varlistentry>
3140   <term><parameter>var</parameter></term>
3141   <listitem>
3142    <para>
3143     hw_params variable to apply the ratdens constraint
3144    </para>
3145   </listitem>
3146  </varlistentry>
3147  <varlistentry>
3148   <term><parameter>r</parameter></term>
3149   <listitem>
3150    <para>
3151     struct snd_ratdens constriants
3152    </para>
3153   </listitem>
3154  </varlistentry>
3155 </variablelist>
3156</refsect1>
3157<refsect1>
3158<title>Return</title>
3159<para>
3160   Zero if successful, or a negative error code on failure.
3161</para>
3162</refsect1>
3163</refentry>
3164
3165<refentry id="API-snd-pcm-hw-constraint-msbits">
3166<refentryinfo>
3167 <title>LINUX</title>
3168 <productname>Kernel Hackers Manual</productname>
3169 <date>July 2017</date>
3170</refentryinfo>
3171<refmeta>
3172 <refentrytitle><phrase>snd_pcm_hw_constraint_msbits</phrase></refentrytitle>
3173 <manvolnum>9</manvolnum>
3174 <refmiscinfo class="version">4.4.14</refmiscinfo>
3175</refmeta>
3176<refnamediv>
3177 <refname>snd_pcm_hw_constraint_msbits</refname>
3178 <refpurpose>
3179     add a hw constraint msbits rule
3180 </refpurpose>
3181</refnamediv>
3182<refsynopsisdiv>
3183 <title>Synopsis</title>
3184  <funcsynopsis><funcprototype>
3185   <funcdef>int <function>snd_pcm_hw_constraint_msbits </function></funcdef>
3186   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
3187   <paramdef>unsigned int <parameter>cond</parameter></paramdef>
3188   <paramdef>unsigned int <parameter>width</parameter></paramdef>
3189   <paramdef>unsigned int <parameter>msbits</parameter></paramdef>
3190  </funcprototype></funcsynopsis>
3191</refsynopsisdiv>
3192<refsect1>
3193 <title>Arguments</title>
3194 <variablelist>
3195  <varlistentry>
3196   <term><parameter>runtime</parameter></term>
3197   <listitem>
3198    <para>
3199     PCM runtime instance
3200    </para>
3201   </listitem>
3202  </varlistentry>
3203  <varlistentry>
3204   <term><parameter>cond</parameter></term>
3205   <listitem>
3206    <para>
3207     condition bits
3208    </para>
3209   </listitem>
3210  </varlistentry>
3211  <varlistentry>
3212   <term><parameter>width</parameter></term>
3213   <listitem>
3214    <para>
3215     sample bits width
3216    </para>
3217   </listitem>
3218  </varlistentry>
3219  <varlistentry>
3220   <term><parameter>msbits</parameter></term>
3221   <listitem>
3222    <para>
3223     msbits width
3224    </para>
3225   </listitem>
3226  </varlistentry>
3227 </variablelist>
3228</refsect1>
3229<refsect1>
3230<title>Description</title>
3231<para>
3232   This constraint will set the number of most significant bits (msbits) if a
3233   sample format with the specified width has been select. If width is set to 0
3234   the msbits will be set for any sample format with a width larger than the
3235   specified msbits.
3236</para>
3237</refsect1>
3238<refsect1>
3239<title>Return</title>
3240<para>
3241   Zero if successful, or a negative error code on failure.
3242</para>
3243</refsect1>
3244</refentry>
3245
3246<refentry id="API-snd-pcm-hw-constraint-step">
3247<refentryinfo>
3248 <title>LINUX</title>
3249 <productname>Kernel Hackers Manual</productname>
3250 <date>July 2017</date>
3251</refentryinfo>
3252<refmeta>
3253 <refentrytitle><phrase>snd_pcm_hw_constraint_step</phrase></refentrytitle>
3254 <manvolnum>9</manvolnum>
3255 <refmiscinfo class="version">4.4.14</refmiscinfo>
3256</refmeta>
3257<refnamediv>
3258 <refname>snd_pcm_hw_constraint_step</refname>
3259 <refpurpose>
3260     add a hw constraint step rule
3261 </refpurpose>
3262</refnamediv>
3263<refsynopsisdiv>
3264 <title>Synopsis</title>
3265  <funcsynopsis><funcprototype>
3266   <funcdef>int <function>snd_pcm_hw_constraint_step </function></funcdef>
3267   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
3268   <paramdef>unsigned int <parameter>cond</parameter></paramdef>
3269   <paramdef>snd_pcm_hw_param_t <parameter>var</parameter></paramdef>
3270   <paramdef>unsigned long <parameter>step</parameter></paramdef>
3271  </funcprototype></funcsynopsis>
3272</refsynopsisdiv>
3273<refsect1>
3274 <title>Arguments</title>
3275 <variablelist>
3276  <varlistentry>
3277   <term><parameter>runtime</parameter></term>
3278   <listitem>
3279    <para>
3280     PCM runtime instance
3281    </para>
3282   </listitem>
3283  </varlistentry>
3284  <varlistentry>
3285   <term><parameter>cond</parameter></term>
3286   <listitem>
3287    <para>
3288     condition bits
3289    </para>
3290   </listitem>
3291  </varlistentry>
3292  <varlistentry>
3293   <term><parameter>var</parameter></term>
3294   <listitem>
3295    <para>
3296     hw_params variable to apply the step constraint
3297    </para>
3298   </listitem>
3299  </varlistentry>
3300  <varlistentry>
3301   <term><parameter>step</parameter></term>
3302   <listitem>
3303    <para>
3304     step size
3305    </para>
3306   </listitem>
3307  </varlistentry>
3308 </variablelist>
3309</refsect1>
3310<refsect1>
3311<title>Return</title>
3312<para>
3313   Zero if successful, or a negative error code on failure.
3314</para>
3315</refsect1>
3316</refentry>
3317
3318<refentry id="API-snd-pcm-hw-constraint-pow2">
3319<refentryinfo>
3320 <title>LINUX</title>
3321 <productname>Kernel Hackers Manual</productname>
3322 <date>July 2017</date>
3323</refentryinfo>
3324<refmeta>
3325 <refentrytitle><phrase>snd_pcm_hw_constraint_pow2</phrase></refentrytitle>
3326 <manvolnum>9</manvolnum>
3327 <refmiscinfo class="version">4.4.14</refmiscinfo>
3328</refmeta>
3329<refnamediv>
3330 <refname>snd_pcm_hw_constraint_pow2</refname>
3331 <refpurpose>
3332     add a hw constraint power-of-2 rule
3333 </refpurpose>
3334</refnamediv>
3335<refsynopsisdiv>
3336 <title>Synopsis</title>
3337  <funcsynopsis><funcprototype>
3338   <funcdef>int <function>snd_pcm_hw_constraint_pow2 </function></funcdef>
3339   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
3340   <paramdef>unsigned int <parameter>cond</parameter></paramdef>
3341   <paramdef>snd_pcm_hw_param_t <parameter>var</parameter></paramdef>
3342  </funcprototype></funcsynopsis>
3343</refsynopsisdiv>
3344<refsect1>
3345 <title>Arguments</title>
3346 <variablelist>
3347  <varlistentry>
3348   <term><parameter>runtime</parameter></term>
3349   <listitem>
3350    <para>
3351     PCM runtime instance
3352    </para>
3353   </listitem>
3354  </varlistentry>
3355  <varlistentry>
3356   <term><parameter>cond</parameter></term>
3357   <listitem>
3358    <para>
3359     condition bits
3360    </para>
3361   </listitem>
3362  </varlistentry>
3363  <varlistentry>
3364   <term><parameter>var</parameter></term>
3365   <listitem>
3366    <para>
3367     hw_params variable to apply the power-of-2 constraint
3368    </para>
3369   </listitem>
3370  </varlistentry>
3371 </variablelist>
3372</refsect1>
3373<refsect1>
3374<title>Return</title>
3375<para>
3376   Zero if successful, or a negative error code on failure.
3377</para>
3378</refsect1>
3379</refentry>
3380
3381<refentry id="API-snd-pcm-hw-rule-noresample">
3382<refentryinfo>
3383 <title>LINUX</title>
3384 <productname>Kernel Hackers Manual</productname>
3385 <date>July 2017</date>
3386</refentryinfo>
3387<refmeta>
3388 <refentrytitle><phrase>snd_pcm_hw_rule_noresample</phrase></refentrytitle>
3389 <manvolnum>9</manvolnum>
3390 <refmiscinfo class="version">4.4.14</refmiscinfo>
3391</refmeta>
3392<refnamediv>
3393 <refname>snd_pcm_hw_rule_noresample</refname>
3394 <refpurpose>
3395     add a rule to allow disabling hw resampling
3396 </refpurpose>
3397</refnamediv>
3398<refsynopsisdiv>
3399 <title>Synopsis</title>
3400  <funcsynopsis><funcprototype>
3401   <funcdef>int <function>snd_pcm_hw_rule_noresample </function></funcdef>
3402   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
3403   <paramdef>unsigned int <parameter>base_rate</parameter></paramdef>
3404  </funcprototype></funcsynopsis>
3405</refsynopsisdiv>
3406<refsect1>
3407 <title>Arguments</title>
3408 <variablelist>
3409  <varlistentry>
3410   <term><parameter>runtime</parameter></term>
3411   <listitem>
3412    <para>
3413     PCM runtime instance
3414    </para>
3415   </listitem>
3416  </varlistentry>
3417  <varlistentry>
3418   <term><parameter>base_rate</parameter></term>
3419   <listitem>
3420    <para>
3421     the rate at which the hardware does not resample
3422    </para>
3423   </listitem>
3424  </varlistentry>
3425 </variablelist>
3426</refsect1>
3427<refsect1>
3428<title>Return</title>
3429<para>
3430   Zero if successful, or a negative error code on failure.
3431</para>
3432</refsect1>
3433</refentry>
3434
3435<refentry id="API-snd-pcm-hw-param-value">
3436<refentryinfo>
3437 <title>LINUX</title>
3438 <productname>Kernel Hackers Manual</productname>
3439 <date>July 2017</date>
3440</refentryinfo>
3441<refmeta>
3442 <refentrytitle><phrase>snd_pcm_hw_param_value</phrase></refentrytitle>
3443 <manvolnum>9</manvolnum>
3444 <refmiscinfo class="version">4.4.14</refmiscinfo>
3445</refmeta>
3446<refnamediv>
3447 <refname>snd_pcm_hw_param_value</refname>
3448 <refpurpose>
3449     return <parameter>params</parameter> field <parameter>var</parameter> value
3450 </refpurpose>
3451</refnamediv>
3452<refsynopsisdiv>
3453 <title>Synopsis</title>
3454  <funcsynopsis><funcprototype>
3455   <funcdef>int <function>snd_pcm_hw_param_value </function></funcdef>
3456   <paramdef>const struct snd_pcm_hw_params * <parameter>params</parameter></paramdef>
3457   <paramdef>snd_pcm_hw_param_t <parameter>var</parameter></paramdef>
3458   <paramdef>int * <parameter>dir</parameter></paramdef>
3459  </funcprototype></funcsynopsis>
3460</refsynopsisdiv>
3461<refsect1>
3462 <title>Arguments</title>
3463 <variablelist>
3464  <varlistentry>
3465   <term><parameter>params</parameter></term>
3466   <listitem>
3467    <para>
3468     the hw_params instance
3469    </para>
3470   </listitem>
3471  </varlistentry>
3472  <varlistentry>
3473   <term><parameter>var</parameter></term>
3474   <listitem>
3475    <para>
3476     parameter to retrieve
3477    </para>
3478   </listitem>
3479  </varlistentry>
3480  <varlistentry>
3481   <term><parameter>dir</parameter></term>
3482   <listitem>
3483    <para>
3484     pointer to the direction (-1,0,1) or <constant>NULL</constant>
3485    </para>
3486   </listitem>
3487  </varlistentry>
3488 </variablelist>
3489</refsect1>
3490<refsect1>
3491<title>Return</title>
3492<para>
3493   The value for field <parameter>var</parameter> if it's fixed in configuration space
3494   defined by <parameter>params</parameter>. -<constant>EINVAL</constant> otherwise.
3495</para>
3496</refsect1>
3497</refentry>
3498
3499<refentry id="API-snd-pcm-hw-param-first">
3500<refentryinfo>
3501 <title>LINUX</title>
3502 <productname>Kernel Hackers Manual</productname>
3503 <date>July 2017</date>
3504</refentryinfo>
3505<refmeta>
3506 <refentrytitle><phrase>snd_pcm_hw_param_first</phrase></refentrytitle>
3507 <manvolnum>9</manvolnum>
3508 <refmiscinfo class="version">4.4.14</refmiscinfo>
3509</refmeta>
3510<refnamediv>
3511 <refname>snd_pcm_hw_param_first</refname>
3512 <refpurpose>
3513     refine config space and return minimum value
3514 </refpurpose>
3515</refnamediv>
3516<refsynopsisdiv>
3517 <title>Synopsis</title>
3518  <funcsynopsis><funcprototype>
3519   <funcdef>int <function>snd_pcm_hw_param_first </function></funcdef>
3520   <paramdef>struct snd_pcm_substream * <parameter>pcm</parameter></paramdef>
3521   <paramdef>struct snd_pcm_hw_params * <parameter>params</parameter></paramdef>
3522   <paramdef>snd_pcm_hw_param_t <parameter>var</parameter></paramdef>
3523   <paramdef>int * <parameter>dir</parameter></paramdef>
3524  </funcprototype></funcsynopsis>
3525</refsynopsisdiv>
3526<refsect1>
3527 <title>Arguments</title>
3528 <variablelist>
3529  <varlistentry>
3530   <term><parameter>pcm</parameter></term>
3531   <listitem>
3532    <para>
3533     PCM instance
3534    </para>
3535   </listitem>
3536  </varlistentry>
3537  <varlistentry>
3538   <term><parameter>params</parameter></term>
3539   <listitem>
3540    <para>
3541     the hw_params instance
3542    </para>
3543   </listitem>
3544  </varlistentry>
3545  <varlistentry>
3546   <term><parameter>var</parameter></term>
3547   <listitem>
3548    <para>
3549     parameter to retrieve
3550    </para>
3551   </listitem>
3552  </varlistentry>
3553  <varlistentry>
3554   <term><parameter>dir</parameter></term>
3555   <listitem>
3556    <para>
3557     pointer to the direction (-1,0,1) or <constant>NULL</constant>
3558    </para>
3559   </listitem>
3560  </varlistentry>
3561 </variablelist>
3562</refsect1>
3563<refsect1>
3564<title>Description</title>
3565<para>
3566   Inside configuration space defined by <parameter>params</parameter> remove from <parameter>var</parameter> all
3567   values &gt; minimum. Reduce configuration space accordingly.
3568</para>
3569</refsect1>
3570<refsect1>
3571<title>Return</title>
3572<para>
3573   The minimum, or a negative error code on failure.
3574</para>
3575</refsect1>
3576</refentry>
3577
3578<refentry id="API-snd-pcm-hw-param-last">
3579<refentryinfo>
3580 <title>LINUX</title>
3581 <productname>Kernel Hackers Manual</productname>
3582 <date>July 2017</date>
3583</refentryinfo>
3584<refmeta>
3585 <refentrytitle><phrase>snd_pcm_hw_param_last</phrase></refentrytitle>
3586 <manvolnum>9</manvolnum>
3587 <refmiscinfo class="version">4.4.14</refmiscinfo>
3588</refmeta>
3589<refnamediv>
3590 <refname>snd_pcm_hw_param_last</refname>
3591 <refpurpose>
3592     refine config space and return maximum value
3593 </refpurpose>
3594</refnamediv>
3595<refsynopsisdiv>
3596 <title>Synopsis</title>
3597  <funcsynopsis><funcprototype>
3598   <funcdef>int <function>snd_pcm_hw_param_last </function></funcdef>
3599   <paramdef>struct snd_pcm_substream * <parameter>pcm</parameter></paramdef>
3600   <paramdef>struct snd_pcm_hw_params * <parameter>params</parameter></paramdef>
3601   <paramdef>snd_pcm_hw_param_t <parameter>var</parameter></paramdef>
3602   <paramdef>int * <parameter>dir</parameter></paramdef>
3603  </funcprototype></funcsynopsis>
3604</refsynopsisdiv>
3605<refsect1>
3606 <title>Arguments</title>
3607 <variablelist>
3608  <varlistentry>
3609   <term><parameter>pcm</parameter></term>
3610   <listitem>
3611    <para>
3612     PCM instance
3613    </para>
3614   </listitem>
3615  </varlistentry>
3616  <varlistentry>
3617   <term><parameter>params</parameter></term>
3618   <listitem>
3619    <para>
3620     the hw_params instance
3621    </para>
3622   </listitem>
3623  </varlistentry>
3624  <varlistentry>
3625   <term><parameter>var</parameter></term>
3626   <listitem>
3627    <para>
3628     parameter to retrieve
3629    </para>
3630   </listitem>
3631  </varlistentry>
3632  <varlistentry>
3633   <term><parameter>dir</parameter></term>
3634   <listitem>
3635    <para>
3636     pointer to the direction (-1,0,1) or <constant>NULL</constant>
3637    </para>
3638   </listitem>
3639  </varlistentry>
3640 </variablelist>
3641</refsect1>
3642<refsect1>
3643<title>Description</title>
3644<para>
3645   Inside configuration space defined by <parameter>params</parameter> remove from <parameter>var</parameter> all
3646   values &lt; maximum. Reduce configuration space accordingly.
3647</para>
3648</refsect1>
3649<refsect1>
3650<title>Return</title>
3651<para>
3652   The maximum, or a negative error code on failure.
3653</para>
3654</refsect1>
3655</refentry>
3656
3657<refentry id="API-snd-pcm-lib-ioctl">
3658<refentryinfo>
3659 <title>LINUX</title>
3660 <productname>Kernel Hackers Manual</productname>
3661 <date>July 2017</date>
3662</refentryinfo>
3663<refmeta>
3664 <refentrytitle><phrase>snd_pcm_lib_ioctl</phrase></refentrytitle>
3665 <manvolnum>9</manvolnum>
3666 <refmiscinfo class="version">4.4.14</refmiscinfo>
3667</refmeta>
3668<refnamediv>
3669 <refname>snd_pcm_lib_ioctl</refname>
3670 <refpurpose>
3671     a generic PCM ioctl callback
3672 </refpurpose>
3673</refnamediv>
3674<refsynopsisdiv>
3675 <title>Synopsis</title>
3676  <funcsynopsis><funcprototype>
3677   <funcdef>int <function>snd_pcm_lib_ioctl </function></funcdef>
3678   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
3679   <paramdef>unsigned int <parameter>cmd</parameter></paramdef>
3680   <paramdef>void * <parameter>arg</parameter></paramdef>
3681  </funcprototype></funcsynopsis>
3682</refsynopsisdiv>
3683<refsect1>
3684 <title>Arguments</title>
3685 <variablelist>
3686  <varlistentry>
3687   <term><parameter>substream</parameter></term>
3688   <listitem>
3689    <para>
3690     the pcm substream instance
3691    </para>
3692   </listitem>
3693  </varlistentry>
3694  <varlistentry>
3695   <term><parameter>cmd</parameter></term>
3696   <listitem>
3697    <para>
3698     ioctl command
3699    </para>
3700   </listitem>
3701  </varlistentry>
3702  <varlistentry>
3703   <term><parameter>arg</parameter></term>
3704   <listitem>
3705    <para>
3706     ioctl argument
3707    </para>
3708   </listitem>
3709  </varlistentry>
3710 </variablelist>
3711</refsect1>
3712<refsect1>
3713<title>Description</title>
3714<para>
3715   Processes the generic ioctl commands for PCM.
3716   Can be passed as the ioctl callback for PCM ops.
3717</para>
3718</refsect1>
3719<refsect1>
3720<title>Return</title>
3721<para>
3722   Zero if successful, or a negative error code on failure.
3723</para>
3724</refsect1>
3725</refentry>
3726
3727<refentry id="API-snd-pcm-period-elapsed">
3728<refentryinfo>
3729 <title>LINUX</title>
3730 <productname>Kernel Hackers Manual</productname>
3731 <date>July 2017</date>
3732</refentryinfo>
3733<refmeta>
3734 <refentrytitle><phrase>snd_pcm_period_elapsed</phrase></refentrytitle>
3735 <manvolnum>9</manvolnum>
3736 <refmiscinfo class="version">4.4.14</refmiscinfo>
3737</refmeta>
3738<refnamediv>
3739 <refname>snd_pcm_period_elapsed</refname>
3740 <refpurpose>
3741     update the pcm status for the next period
3742 </refpurpose>
3743</refnamediv>
3744<refsynopsisdiv>
3745 <title>Synopsis</title>
3746  <funcsynopsis><funcprototype>
3747   <funcdef>void <function>snd_pcm_period_elapsed </function></funcdef>
3748   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
3749  </funcprototype></funcsynopsis>
3750</refsynopsisdiv>
3751<refsect1>
3752 <title>Arguments</title>
3753 <variablelist>
3754  <varlistentry>
3755   <term><parameter>substream</parameter></term>
3756   <listitem>
3757    <para>
3758     the pcm substream instance
3759    </para>
3760   </listitem>
3761  </varlistentry>
3762 </variablelist>
3763</refsect1>
3764<refsect1>
3765<title>Description</title>
3766<para>
3767   This function is called from the interrupt handler when the
3768   PCM has processed the period size.  It will update the current
3769   pointer, wake up sleepers, etc.
3770   </para><para>
3771
3772   Even if more than one periods have elapsed since the last call, you
3773   have to call this only once.
3774</para>
3775</refsect1>
3776</refentry>
3777
3778<refentry id="API-snd-pcm-add-chmap-ctls">
3779<refentryinfo>
3780 <title>LINUX</title>
3781 <productname>Kernel Hackers Manual</productname>
3782 <date>July 2017</date>
3783</refentryinfo>
3784<refmeta>
3785 <refentrytitle><phrase>snd_pcm_add_chmap_ctls</phrase></refentrytitle>
3786 <manvolnum>9</manvolnum>
3787 <refmiscinfo class="version">4.4.14</refmiscinfo>
3788</refmeta>
3789<refnamediv>
3790 <refname>snd_pcm_add_chmap_ctls</refname>
3791 <refpurpose>
3792     create channel-mapping control elements
3793 </refpurpose>
3794</refnamediv>
3795<refsynopsisdiv>
3796 <title>Synopsis</title>
3797  <funcsynopsis><funcprototype>
3798   <funcdef>int <function>snd_pcm_add_chmap_ctls </function></funcdef>
3799   <paramdef>struct snd_pcm * <parameter>pcm</parameter></paramdef>
3800   <paramdef>int <parameter>stream</parameter></paramdef>
3801   <paramdef>const struct snd_pcm_chmap_elem * <parameter>chmap</parameter></paramdef>
3802   <paramdef>int <parameter>max_channels</parameter></paramdef>
3803   <paramdef>unsigned long <parameter>private_value</parameter></paramdef>
3804   <paramdef>struct snd_pcm_chmap ** <parameter>info_ret</parameter></paramdef>
3805  </funcprototype></funcsynopsis>
3806</refsynopsisdiv>
3807<refsect1>
3808 <title>Arguments</title>
3809 <variablelist>
3810  <varlistentry>
3811   <term><parameter>pcm</parameter></term>
3812   <listitem>
3813    <para>
3814     the assigned PCM instance
3815    </para>
3816   </listitem>
3817  </varlistentry>
3818  <varlistentry>
3819   <term><parameter>stream</parameter></term>
3820   <listitem>
3821    <para>
3822     stream direction
3823    </para>
3824   </listitem>
3825  </varlistentry>
3826  <varlistentry>
3827   <term><parameter>chmap</parameter></term>
3828   <listitem>
3829    <para>
3830     channel map elements (for query)
3831    </para>
3832   </listitem>
3833  </varlistentry>
3834  <varlistentry>
3835   <term><parameter>max_channels</parameter></term>
3836   <listitem>
3837    <para>
3838     the max number of channels for the stream
3839    </para>
3840   </listitem>
3841  </varlistentry>
3842  <varlistentry>
3843   <term><parameter>private_value</parameter></term>
3844   <listitem>
3845    <para>
3846     the value passed to each kcontrol's private_value field
3847    </para>
3848   </listitem>
3849  </varlistentry>
3850  <varlistentry>
3851   <term><parameter>info_ret</parameter></term>
3852   <listitem>
3853    <para>
3854     store struct snd_pcm_chmap instance if non-NULL
3855    </para>
3856   </listitem>
3857  </varlistentry>
3858 </variablelist>
3859</refsect1>
3860<refsect1>
3861<title>Description</title>
3862<para>
3863   Create channel-mapping control elements assigned to the given PCM stream(s).
3864</para>
3865</refsect1>
3866<refsect1>
3867<title>Return</title>
3868<para>
3869   Zero if successful, or a negative error value.
3870</para>
3871</refsect1>
3872</refentry>
3873
3874<!-- sound/core/pcm_native.c -->
3875<refentry id="API-snd-pcm-stream-lock">
3876<refentryinfo>
3877 <title>LINUX</title>
3878 <productname>Kernel Hackers Manual</productname>
3879 <date>July 2017</date>
3880</refentryinfo>
3881<refmeta>
3882 <refentrytitle><phrase>snd_pcm_stream_lock</phrase></refentrytitle>
3883 <manvolnum>9</manvolnum>
3884 <refmiscinfo class="version">4.4.14</refmiscinfo>
3885</refmeta>
3886<refnamediv>
3887 <refname>snd_pcm_stream_lock</refname>
3888 <refpurpose>
3889  Lock the PCM stream
3890 </refpurpose>
3891</refnamediv>
3892<refsynopsisdiv>
3893 <title>Synopsis</title>
3894  <funcsynopsis><funcprototype>
3895   <funcdef>void <function>snd_pcm_stream_lock </function></funcdef>
3896   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
3897  </funcprototype></funcsynopsis>
3898</refsynopsisdiv>
3899<refsect1>
3900 <title>Arguments</title>
3901 <variablelist>
3902  <varlistentry>
3903   <term><parameter>substream</parameter></term>
3904   <listitem>
3905    <para>
3906     PCM substream
3907    </para>
3908   </listitem>
3909  </varlistentry>
3910 </variablelist>
3911</refsect1>
3912<refsect1>
3913<title>Description</title>
3914<para>
3915   This locks the PCM stream's spinlock or mutex depending on the nonatomic
3916   flag of the given substream.  This also takes the global link rw lock
3917   (or rw sem), too, for avoiding the race with linked streams.
3918</para>
3919</refsect1>
3920</refentry>
3921
3922<refentry id="API-snd-pcm-stream-unlock">
3923<refentryinfo>
3924 <title>LINUX</title>
3925 <productname>Kernel Hackers Manual</productname>
3926 <date>July 2017</date>
3927</refentryinfo>
3928<refmeta>
3929 <refentrytitle><phrase>snd_pcm_stream_unlock</phrase></refentrytitle>
3930 <manvolnum>9</manvolnum>
3931 <refmiscinfo class="version">4.4.14</refmiscinfo>
3932</refmeta>
3933<refnamediv>
3934 <refname>snd_pcm_stream_unlock</refname>
3935 <refpurpose>
3936     Unlock the PCM stream
3937 </refpurpose>
3938</refnamediv>
3939<refsynopsisdiv>
3940 <title>Synopsis</title>
3941  <funcsynopsis><funcprototype>
3942   <funcdef>void <function>snd_pcm_stream_unlock </function></funcdef>
3943   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
3944  </funcprototype></funcsynopsis>
3945</refsynopsisdiv>
3946<refsect1>
3947 <title>Arguments</title>
3948 <variablelist>
3949  <varlistentry>
3950   <term><parameter>substream</parameter></term>
3951   <listitem>
3952    <para>
3953     PCM substream
3954    </para>
3955   </listitem>
3956  </varlistentry>
3957 </variablelist>
3958</refsect1>
3959<refsect1>
3960<title>Description</title>
3961<para>
3962   This unlocks the PCM stream that has been locked via <function>snd_pcm_stream_lock</function>.
3963</para>
3964</refsect1>
3965</refentry>
3966
3967<refentry id="API-snd-pcm-stream-lock-irq">
3968<refentryinfo>
3969 <title>LINUX</title>
3970 <productname>Kernel Hackers Manual</productname>
3971 <date>July 2017</date>
3972</refentryinfo>
3973<refmeta>
3974 <refentrytitle><phrase>snd_pcm_stream_lock_irq</phrase></refentrytitle>
3975 <manvolnum>9</manvolnum>
3976 <refmiscinfo class="version">4.4.14</refmiscinfo>
3977</refmeta>
3978<refnamediv>
3979 <refname>snd_pcm_stream_lock_irq</refname>
3980 <refpurpose>
3981     Lock the PCM stream
3982 </refpurpose>
3983</refnamediv>
3984<refsynopsisdiv>
3985 <title>Synopsis</title>
3986  <funcsynopsis><funcprototype>
3987   <funcdef>void <function>snd_pcm_stream_lock_irq </function></funcdef>
3988   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
3989  </funcprototype></funcsynopsis>
3990</refsynopsisdiv>
3991<refsect1>
3992 <title>Arguments</title>
3993 <variablelist>
3994  <varlistentry>
3995   <term><parameter>substream</parameter></term>
3996   <listitem>
3997    <para>
3998     PCM substream
3999    </para>
4000   </listitem>
4001  </varlistentry>
4002 </variablelist>
4003</refsect1>
4004<refsect1>
4005<title>Description</title>
4006<para>
4007   This locks the PCM stream like <function>snd_pcm_stream_lock</function> and disables the local
4008   IRQ (only when nonatomic is false).  In nonatomic case, this is identical
4009   as <function>snd_pcm_stream_lock</function>.
4010</para>
4011</refsect1>
4012</refentry>
4013
4014<refentry id="API-snd-pcm-stream-unlock-irq">
4015<refentryinfo>
4016 <title>LINUX</title>
4017 <productname>Kernel Hackers Manual</productname>
4018 <date>July 2017</date>
4019</refentryinfo>
4020<refmeta>
4021 <refentrytitle><phrase>snd_pcm_stream_unlock_irq</phrase></refentrytitle>
4022 <manvolnum>9</manvolnum>
4023 <refmiscinfo class="version">4.4.14</refmiscinfo>
4024</refmeta>
4025<refnamediv>
4026 <refname>snd_pcm_stream_unlock_irq</refname>
4027 <refpurpose>
4028     Unlock the PCM stream
4029 </refpurpose>
4030</refnamediv>
4031<refsynopsisdiv>
4032 <title>Synopsis</title>
4033  <funcsynopsis><funcprototype>
4034   <funcdef>void <function>snd_pcm_stream_unlock_irq </function></funcdef>
4035   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
4036  </funcprototype></funcsynopsis>
4037</refsynopsisdiv>
4038<refsect1>
4039 <title>Arguments</title>
4040 <variablelist>
4041  <varlistentry>
4042   <term><parameter>substream</parameter></term>
4043   <listitem>
4044    <para>
4045     PCM substream
4046    </para>
4047   </listitem>
4048  </varlistentry>
4049 </variablelist>
4050</refsect1>
4051<refsect1>
4052<title>Description</title>
4053<para>
4054   This is a counter-part of <function>snd_pcm_stream_lock_irq</function>.
4055</para>
4056</refsect1>
4057</refentry>
4058
4059<refentry id="API-snd-pcm-stream-unlock-irqrestore">
4060<refentryinfo>
4061 <title>LINUX</title>
4062 <productname>Kernel Hackers Manual</productname>
4063 <date>July 2017</date>
4064</refentryinfo>
4065<refmeta>
4066 <refentrytitle><phrase>snd_pcm_stream_unlock_irqrestore</phrase></refentrytitle>
4067 <manvolnum>9</manvolnum>
4068 <refmiscinfo class="version">4.4.14</refmiscinfo>
4069</refmeta>
4070<refnamediv>
4071 <refname>snd_pcm_stream_unlock_irqrestore</refname>
4072 <refpurpose>
4073     Unlock the PCM stream
4074 </refpurpose>
4075</refnamediv>
4076<refsynopsisdiv>
4077 <title>Synopsis</title>
4078  <funcsynopsis><funcprototype>
4079   <funcdef>void <function>snd_pcm_stream_unlock_irqrestore </function></funcdef>
4080   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
4081   <paramdef>unsigned long <parameter>flags</parameter></paramdef>
4082  </funcprototype></funcsynopsis>
4083</refsynopsisdiv>
4084<refsect1>
4085 <title>Arguments</title>
4086 <variablelist>
4087  <varlistentry>
4088   <term><parameter>substream</parameter></term>
4089   <listitem>
4090    <para>
4091     PCM substream
4092    </para>
4093   </listitem>
4094  </varlistentry>
4095  <varlistentry>
4096   <term><parameter>flags</parameter></term>
4097   <listitem>
4098    <para>
4099     irq flags
4100    </para>
4101   </listitem>
4102  </varlistentry>
4103 </variablelist>
4104</refsect1>
4105<refsect1>
4106<title>Description</title>
4107<para>
4108   This is a counter-part of <function>snd_pcm_stream_lock_irqsave</function>.
4109</para>
4110</refsect1>
4111</refentry>
4112
4113<refentry id="API-snd-pcm-stop">
4114<refentryinfo>
4115 <title>LINUX</title>
4116 <productname>Kernel Hackers Manual</productname>
4117 <date>July 2017</date>
4118</refentryinfo>
4119<refmeta>
4120 <refentrytitle><phrase>snd_pcm_stop</phrase></refentrytitle>
4121 <manvolnum>9</manvolnum>
4122 <refmiscinfo class="version">4.4.14</refmiscinfo>
4123</refmeta>
4124<refnamediv>
4125 <refname>snd_pcm_stop</refname>
4126 <refpurpose>
4127     try to stop all running streams in the substream group
4128 </refpurpose>
4129</refnamediv>
4130<refsynopsisdiv>
4131 <title>Synopsis</title>
4132  <funcsynopsis><funcprototype>
4133   <funcdef>int <function>snd_pcm_stop </function></funcdef>
4134   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
4135   <paramdef>snd_pcm_state_t <parameter>state</parameter></paramdef>
4136  </funcprototype></funcsynopsis>
4137</refsynopsisdiv>
4138<refsect1>
4139 <title>Arguments</title>
4140 <variablelist>
4141  <varlistentry>
4142   <term><parameter>substream</parameter></term>
4143   <listitem>
4144    <para>
4145     the PCM substream instance
4146    </para>
4147   </listitem>
4148  </varlistentry>
4149  <varlistentry>
4150   <term><parameter>state</parameter></term>
4151   <listitem>
4152    <para>
4153     PCM state after stopping the stream
4154    </para>
4155   </listitem>
4156  </varlistentry>
4157 </variablelist>
4158</refsect1>
4159<refsect1>
4160<title>Description</title>
4161<para>
4162   The state of each stream is then changed to the given state unconditionally.
4163</para>
4164</refsect1>
4165<refsect1>
4166<title>Return</title>
4167<para>
4168   Zero if successful, or a negative error code.
4169</para>
4170</refsect1>
4171</refentry>
4172
4173<refentry id="API-snd-pcm-stop-xrun">
4174<refentryinfo>
4175 <title>LINUX</title>
4176 <productname>Kernel Hackers Manual</productname>
4177 <date>July 2017</date>
4178</refentryinfo>
4179<refmeta>
4180 <refentrytitle><phrase>snd_pcm_stop_xrun</phrase></refentrytitle>
4181 <manvolnum>9</manvolnum>
4182 <refmiscinfo class="version">4.4.14</refmiscinfo>
4183</refmeta>
4184<refnamediv>
4185 <refname>snd_pcm_stop_xrun</refname>
4186 <refpurpose>
4187     stop the running streams as XRUN
4188 </refpurpose>
4189</refnamediv>
4190<refsynopsisdiv>
4191 <title>Synopsis</title>
4192  <funcsynopsis><funcprototype>
4193   <funcdef>int <function>snd_pcm_stop_xrun </function></funcdef>
4194   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
4195  </funcprototype></funcsynopsis>
4196</refsynopsisdiv>
4197<refsect1>
4198 <title>Arguments</title>
4199 <variablelist>
4200  <varlistentry>
4201   <term><parameter>substream</parameter></term>
4202   <listitem>
4203    <para>
4204     the PCM substream instance
4205    </para>
4206   </listitem>
4207  </varlistentry>
4208 </variablelist>
4209</refsect1>
4210<refsect1>
4211<title>Description</title>
4212<para>
4213   This stops the given running substream (and all linked substreams) as XRUN.
4214   Unlike <function>snd_pcm_stop</function>, this function takes the substream lock by itself.
4215</para>
4216</refsect1>
4217<refsect1>
4218<title>Return</title>
4219<para>
4220   Zero if successful, or a negative error code.
4221</para>
4222</refsect1>
4223</refentry>
4224
4225<refentry id="API-snd-pcm-suspend">
4226<refentryinfo>
4227 <title>LINUX</title>
4228 <productname>Kernel Hackers Manual</productname>
4229 <date>July 2017</date>
4230</refentryinfo>
4231<refmeta>
4232 <refentrytitle><phrase>snd_pcm_suspend</phrase></refentrytitle>
4233 <manvolnum>9</manvolnum>
4234 <refmiscinfo class="version">4.4.14</refmiscinfo>
4235</refmeta>
4236<refnamediv>
4237 <refname>snd_pcm_suspend</refname>
4238 <refpurpose>
4239     trigger SUSPEND to all linked streams
4240 </refpurpose>
4241</refnamediv>
4242<refsynopsisdiv>
4243 <title>Synopsis</title>
4244  <funcsynopsis><funcprototype>
4245   <funcdef>int <function>snd_pcm_suspend </function></funcdef>
4246   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
4247  </funcprototype></funcsynopsis>
4248</refsynopsisdiv>
4249<refsect1>
4250 <title>Arguments</title>
4251 <variablelist>
4252  <varlistentry>
4253   <term><parameter>substream</parameter></term>
4254   <listitem>
4255    <para>
4256     the PCM substream
4257    </para>
4258   </listitem>
4259  </varlistentry>
4260 </variablelist>
4261</refsect1>
4262<refsect1>
4263<title>Description</title>
4264<para>
4265   After this call, all streams are changed to SUSPENDED state.
4266</para>
4267</refsect1>
4268<refsect1>
4269<title>Return</title>
4270<para>
4271   Zero if successful (or <parameter>substream</parameter> is <constant>NULL</constant>), or a negative error
4272   code.
4273</para>
4274</refsect1>
4275</refentry>
4276
4277<refentry id="API-snd-pcm-suspend-all">
4278<refentryinfo>
4279 <title>LINUX</title>
4280 <productname>Kernel Hackers Manual</productname>
4281 <date>July 2017</date>
4282</refentryinfo>
4283<refmeta>
4284 <refentrytitle><phrase>snd_pcm_suspend_all</phrase></refentrytitle>
4285 <manvolnum>9</manvolnum>
4286 <refmiscinfo class="version">4.4.14</refmiscinfo>
4287</refmeta>
4288<refnamediv>
4289 <refname>snd_pcm_suspend_all</refname>
4290 <refpurpose>
4291     trigger SUSPEND to all substreams in the given pcm
4292 </refpurpose>
4293</refnamediv>
4294<refsynopsisdiv>
4295 <title>Synopsis</title>
4296  <funcsynopsis><funcprototype>
4297   <funcdef>int <function>snd_pcm_suspend_all </function></funcdef>
4298   <paramdef>struct snd_pcm * <parameter>pcm</parameter></paramdef>
4299  </funcprototype></funcsynopsis>
4300</refsynopsisdiv>
4301<refsect1>
4302 <title>Arguments</title>
4303 <variablelist>
4304  <varlistentry>
4305   <term><parameter>pcm</parameter></term>
4306   <listitem>
4307    <para>
4308     the PCM instance
4309    </para>
4310   </listitem>
4311  </varlistentry>
4312 </variablelist>
4313</refsect1>
4314<refsect1>
4315<title>Description</title>
4316<para>
4317   After this call, all streams are changed to SUSPENDED state.
4318</para>
4319</refsect1>
4320<refsect1>
4321<title>Return</title>
4322<para>
4323   Zero if successful (or <parameter>pcm</parameter> is <constant>NULL</constant>), or a negative error code.
4324</para>
4325</refsect1>
4326</refentry>
4327
4328<refentry id="API-snd-pcm-lib-default-mmap">
4329<refentryinfo>
4330 <title>LINUX</title>
4331 <productname>Kernel Hackers Manual</productname>
4332 <date>July 2017</date>
4333</refentryinfo>
4334<refmeta>
4335 <refentrytitle><phrase>snd_pcm_lib_default_mmap</phrase></refentrytitle>
4336 <manvolnum>9</manvolnum>
4337 <refmiscinfo class="version">4.4.14</refmiscinfo>
4338</refmeta>
4339<refnamediv>
4340 <refname>snd_pcm_lib_default_mmap</refname>
4341 <refpurpose>
4342     Default PCM data mmap function
4343 </refpurpose>
4344</refnamediv>
4345<refsynopsisdiv>
4346 <title>Synopsis</title>
4347  <funcsynopsis><funcprototype>
4348   <funcdef>int <function>snd_pcm_lib_default_mmap </function></funcdef>
4349   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
4350   <paramdef>struct vm_area_struct * <parameter>area</parameter></paramdef>
4351  </funcprototype></funcsynopsis>
4352</refsynopsisdiv>
4353<refsect1>
4354 <title>Arguments</title>
4355 <variablelist>
4356  <varlistentry>
4357   <term><parameter>substream</parameter></term>
4358   <listitem>
4359    <para>
4360     PCM substream
4361    </para>
4362   </listitem>
4363  </varlistentry>
4364  <varlistentry>
4365   <term><parameter>area</parameter></term>
4366   <listitem>
4367    <para>
4368     VMA
4369    </para>
4370   </listitem>
4371  </varlistentry>
4372 </variablelist>
4373</refsect1>
4374<refsect1>
4375<title>Description</title>
4376<para>
4377   This is the default mmap handler for PCM data.  When mmap pcm_ops is NULL,
4378   this function is invoked implicitly.
4379</para>
4380</refsect1>
4381</refentry>
4382
4383<refentry id="API-snd-pcm-lib-mmap-iomem">
4384<refentryinfo>
4385 <title>LINUX</title>
4386 <productname>Kernel Hackers Manual</productname>
4387 <date>July 2017</date>
4388</refentryinfo>
4389<refmeta>
4390 <refentrytitle><phrase>snd_pcm_lib_mmap_iomem</phrase></refentrytitle>
4391 <manvolnum>9</manvolnum>
4392 <refmiscinfo class="version">4.4.14</refmiscinfo>
4393</refmeta>
4394<refnamediv>
4395 <refname>snd_pcm_lib_mmap_iomem</refname>
4396 <refpurpose>
4397     Default PCM data mmap function for I/O mem
4398 </refpurpose>
4399</refnamediv>
4400<refsynopsisdiv>
4401 <title>Synopsis</title>
4402  <funcsynopsis><funcprototype>
4403   <funcdef>int <function>snd_pcm_lib_mmap_iomem </function></funcdef>
4404   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
4405   <paramdef>struct vm_area_struct * <parameter>area</parameter></paramdef>
4406  </funcprototype></funcsynopsis>
4407</refsynopsisdiv>
4408<refsect1>
4409 <title>Arguments</title>
4410 <variablelist>
4411  <varlistentry>
4412   <term><parameter>substream</parameter></term>
4413   <listitem>
4414    <para>
4415     PCM substream
4416    </para>
4417   </listitem>
4418  </varlistentry>
4419  <varlistentry>
4420   <term><parameter>area</parameter></term>
4421   <listitem>
4422    <para>
4423     VMA
4424    </para>
4425   </listitem>
4426  </varlistentry>
4427 </variablelist>
4428</refsect1>
4429<refsect1>
4430<title>Description</title>
4431<para>
4432   When your hardware uses the iomapped pages as the hardware buffer and
4433   wants to mmap it, pass this function as mmap pcm_ops.  Note that this
4434   is supposed to work only on limited architectures.
4435</para>
4436</refsect1>
4437</refentry>
4438
4439<!-- include/sound/pcm.h -->
4440<refentry id="API-snd-pcm-stream-linked">
4441<refentryinfo>
4442 <title>LINUX</title>
4443 <productname>Kernel Hackers Manual</productname>
4444 <date>July 2017</date>
4445</refentryinfo>
4446<refmeta>
4447 <refentrytitle><phrase>snd_pcm_stream_linked</phrase></refentrytitle>
4448 <manvolnum>9</manvolnum>
4449 <refmiscinfo class="version">4.4.14</refmiscinfo>
4450</refmeta>
4451<refnamediv>
4452 <refname>snd_pcm_stream_linked</refname>
4453 <refpurpose>
4454  Check whether the substream is linked with others
4455 </refpurpose>
4456</refnamediv>
4457<refsynopsisdiv>
4458 <title>Synopsis</title>
4459  <funcsynopsis><funcprototype>
4460   <funcdef>int <function>snd_pcm_stream_linked </function></funcdef>
4461   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
4462  </funcprototype></funcsynopsis>
4463</refsynopsisdiv>
4464<refsect1>
4465 <title>Arguments</title>
4466 <variablelist>
4467  <varlistentry>
4468   <term><parameter>substream</parameter></term>
4469   <listitem>
4470    <para>
4471     substream to check
4472    </para>
4473   </listitem>
4474  </varlistentry>
4475 </variablelist>
4476</refsect1>
4477<refsect1>
4478<title>Description</title>
4479<para>
4480   Returns true if the given substream is being linked with others.
4481</para>
4482</refsect1>
4483</refentry>
4484
4485<refentry id="API-snd-pcm-stream-lock-irqsave">
4486<refentryinfo>
4487 <title>LINUX</title>
4488 <productname>Kernel Hackers Manual</productname>
4489 <date>July 2017</date>
4490</refentryinfo>
4491<refmeta>
4492 <refentrytitle><phrase>snd_pcm_stream_lock_irqsave</phrase></refentrytitle>
4493 <manvolnum>9</manvolnum>
4494 <refmiscinfo class="version">4.4.14</refmiscinfo>
4495</refmeta>
4496<refnamediv>
4497 <refname>snd_pcm_stream_lock_irqsave</refname>
4498 <refpurpose>
4499     Lock the PCM stream
4500 </refpurpose>
4501</refnamediv>
4502<refsynopsisdiv>
4503 <title>Synopsis</title>
4504  <funcsynopsis><funcprototype>
4505   <funcdef> <function>snd_pcm_stream_lock_irqsave </function></funcdef>
4506   <paramdef> <parameter>substream</parameter></paramdef>
4507   <paramdef> <parameter>flags</parameter></paramdef>
4508  </funcprototype></funcsynopsis>
4509</refsynopsisdiv>
4510<refsect1>
4511 <title>Arguments</title>
4512 <variablelist>
4513  <varlistentry>
4514   <term><parameter>substream</parameter></term>
4515   <listitem>
4516    <para>
4517     PCM substream
4518    </para>
4519   </listitem>
4520  </varlistentry>
4521  <varlistentry>
4522   <term><parameter>flags</parameter></term>
4523   <listitem>
4524    <para>
4525     irq flags
4526    </para>
4527   </listitem>
4528  </varlistentry>
4529 </variablelist>
4530</refsect1>
4531<refsect1>
4532<title>Description</title>
4533<para>
4534   This locks the PCM stream like <function>snd_pcm_stream_lock</function> but with the local
4535   IRQ (only when nonatomic is false).  In nonatomic case, this is identical
4536   as <function>snd_pcm_stream_lock</function>.
4537</para>
4538</refsect1>
4539</refentry>
4540
4541<refentry id="API-snd-pcm-group-for-each-entry">
4542<refentryinfo>
4543 <title>LINUX</title>
4544 <productname>Kernel Hackers Manual</productname>
4545 <date>July 2017</date>
4546</refentryinfo>
4547<refmeta>
4548 <refentrytitle><phrase>snd_pcm_group_for_each_entry</phrase></refentrytitle>
4549 <manvolnum>9</manvolnum>
4550 <refmiscinfo class="version">4.4.14</refmiscinfo>
4551</refmeta>
4552<refnamediv>
4553 <refname>snd_pcm_group_for_each_entry</refname>
4554 <refpurpose>
4555     iterate over the linked substreams
4556 </refpurpose>
4557</refnamediv>
4558<refsynopsisdiv>
4559 <title>Synopsis</title>
4560  <funcsynopsis><funcprototype>
4561   <funcdef> <function>snd_pcm_group_for_each_entry </function></funcdef>
4562   <paramdef> <parameter>s</parameter></paramdef>
4563   <paramdef> <parameter>substream</parameter></paramdef>
4564  </funcprototype></funcsynopsis>
4565</refsynopsisdiv>
4566<refsect1>
4567 <title>Arguments</title>
4568 <variablelist>
4569  <varlistentry>
4570   <term><parameter>s</parameter></term>
4571   <listitem>
4572    <para>
4573     the iterator
4574    </para>
4575   </listitem>
4576  </varlistentry>
4577  <varlistentry>
4578   <term><parameter>substream</parameter></term>
4579   <listitem>
4580    <para>
4581     the substream
4582    </para>
4583   </listitem>
4584  </varlistentry>
4585 </variablelist>
4586</refsect1>
4587<refsect1>
4588<title>Description</title>
4589<para>
4590   Iterate over the all linked substreams to the given <parameter>substream</parameter>.
4591   When <parameter>substream</parameter> isn't linked with any others, this gives returns <parameter>substream</parameter>
4592   itself once.
4593</para>
4594</refsect1>
4595</refentry>
4596
4597<refentry id="API-snd-pcm-running">
4598<refentryinfo>
4599 <title>LINUX</title>
4600 <productname>Kernel Hackers Manual</productname>
4601 <date>July 2017</date>
4602</refentryinfo>
4603<refmeta>
4604 <refentrytitle><phrase>snd_pcm_running</phrase></refentrytitle>
4605 <manvolnum>9</manvolnum>
4606 <refmiscinfo class="version">4.4.14</refmiscinfo>
4607</refmeta>
4608<refnamediv>
4609 <refname>snd_pcm_running</refname>
4610 <refpurpose>
4611     Check whether the substream is in a running state
4612 </refpurpose>
4613</refnamediv>
4614<refsynopsisdiv>
4615 <title>Synopsis</title>
4616  <funcsynopsis><funcprototype>
4617   <funcdef>int <function>snd_pcm_running </function></funcdef>
4618   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
4619  </funcprototype></funcsynopsis>
4620</refsynopsisdiv>
4621<refsect1>
4622 <title>Arguments</title>
4623 <variablelist>
4624  <varlistentry>
4625   <term><parameter>substream</parameter></term>
4626   <listitem>
4627    <para>
4628     substream to check
4629    </para>
4630   </listitem>
4631  </varlistentry>
4632 </variablelist>
4633</refsect1>
4634<refsect1>
4635<title>Description</title>
4636<para>
4637   Returns true if the given substream is in the state RUNNING, or in the
4638   state DRAINING for playback.
4639</para>
4640</refsect1>
4641</refentry>
4642
4643<refentry id="API-bytes-to-samples">
4644<refentryinfo>
4645 <title>LINUX</title>
4646 <productname>Kernel Hackers Manual</productname>
4647 <date>July 2017</date>
4648</refentryinfo>
4649<refmeta>
4650 <refentrytitle><phrase>bytes_to_samples</phrase></refentrytitle>
4651 <manvolnum>9</manvolnum>
4652 <refmiscinfo class="version">4.4.14</refmiscinfo>
4653</refmeta>
4654<refnamediv>
4655 <refname>bytes_to_samples</refname>
4656 <refpurpose>
4657     Unit conversion of the size from bytes to samples
4658 </refpurpose>
4659</refnamediv>
4660<refsynopsisdiv>
4661 <title>Synopsis</title>
4662  <funcsynopsis><funcprototype>
4663   <funcdef>ssize_t <function>bytes_to_samples </function></funcdef>
4664   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
4665   <paramdef>ssize_t <parameter>size</parameter></paramdef>
4666  </funcprototype></funcsynopsis>
4667</refsynopsisdiv>
4668<refsect1>
4669 <title>Arguments</title>
4670 <variablelist>
4671  <varlistentry>
4672   <term><parameter>runtime</parameter></term>
4673   <listitem>
4674    <para>
4675     PCM runtime instance
4676    </para>
4677   </listitem>
4678  </varlistentry>
4679  <varlistentry>
4680   <term><parameter>size</parameter></term>
4681   <listitem>
4682    <para>
4683     size in bytes
4684    </para>
4685   </listitem>
4686  </varlistentry>
4687 </variablelist>
4688</refsect1>
4689</refentry>
4690
4691<refentry id="API-bytes-to-frames">
4692<refentryinfo>
4693 <title>LINUX</title>
4694 <productname>Kernel Hackers Manual</productname>
4695 <date>July 2017</date>
4696</refentryinfo>
4697<refmeta>
4698 <refentrytitle><phrase>bytes_to_frames</phrase></refentrytitle>
4699 <manvolnum>9</manvolnum>
4700 <refmiscinfo class="version">4.4.14</refmiscinfo>
4701</refmeta>
4702<refnamediv>
4703 <refname>bytes_to_frames</refname>
4704 <refpurpose>
4705     Unit conversion of the size from bytes to frames
4706 </refpurpose>
4707</refnamediv>
4708<refsynopsisdiv>
4709 <title>Synopsis</title>
4710  <funcsynopsis><funcprototype>
4711   <funcdef>snd_pcm_sframes_t <function>bytes_to_frames </function></funcdef>
4712   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
4713   <paramdef>ssize_t <parameter>size</parameter></paramdef>
4714  </funcprototype></funcsynopsis>
4715</refsynopsisdiv>
4716<refsect1>
4717 <title>Arguments</title>
4718 <variablelist>
4719  <varlistentry>
4720   <term><parameter>runtime</parameter></term>
4721   <listitem>
4722    <para>
4723     PCM runtime instance
4724    </para>
4725   </listitem>
4726  </varlistentry>
4727  <varlistentry>
4728   <term><parameter>size</parameter></term>
4729   <listitem>
4730    <para>
4731     size in bytes
4732    </para>
4733   </listitem>
4734  </varlistentry>
4735 </variablelist>
4736</refsect1>
4737</refentry>
4738
4739<refentry id="API-samples-to-bytes">
4740<refentryinfo>
4741 <title>LINUX</title>
4742 <productname>Kernel Hackers Manual</productname>
4743 <date>July 2017</date>
4744</refentryinfo>
4745<refmeta>
4746 <refentrytitle><phrase>samples_to_bytes</phrase></refentrytitle>
4747 <manvolnum>9</manvolnum>
4748 <refmiscinfo class="version">4.4.14</refmiscinfo>
4749</refmeta>
4750<refnamediv>
4751 <refname>samples_to_bytes</refname>
4752 <refpurpose>
4753     Unit conversion of the size from samples to bytes
4754 </refpurpose>
4755</refnamediv>
4756<refsynopsisdiv>
4757 <title>Synopsis</title>
4758  <funcsynopsis><funcprototype>
4759   <funcdef>ssize_t <function>samples_to_bytes </function></funcdef>
4760   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
4761   <paramdef>ssize_t <parameter>size</parameter></paramdef>
4762  </funcprototype></funcsynopsis>
4763</refsynopsisdiv>
4764<refsect1>
4765 <title>Arguments</title>
4766 <variablelist>
4767  <varlistentry>
4768   <term><parameter>runtime</parameter></term>
4769   <listitem>
4770    <para>
4771     PCM runtime instance
4772    </para>
4773   </listitem>
4774  </varlistentry>
4775  <varlistentry>
4776   <term><parameter>size</parameter></term>
4777   <listitem>
4778    <para>
4779     size in samples
4780    </para>
4781   </listitem>
4782  </varlistentry>
4783 </variablelist>
4784</refsect1>
4785</refentry>
4786
4787<refentry id="API-frames-to-bytes">
4788<refentryinfo>
4789 <title>LINUX</title>
4790 <productname>Kernel Hackers Manual</productname>
4791 <date>July 2017</date>
4792</refentryinfo>
4793<refmeta>
4794 <refentrytitle><phrase>frames_to_bytes</phrase></refentrytitle>
4795 <manvolnum>9</manvolnum>
4796 <refmiscinfo class="version">4.4.14</refmiscinfo>
4797</refmeta>
4798<refnamediv>
4799 <refname>frames_to_bytes</refname>
4800 <refpurpose>
4801     Unit conversion of the size from frames to bytes
4802 </refpurpose>
4803</refnamediv>
4804<refsynopsisdiv>
4805 <title>Synopsis</title>
4806  <funcsynopsis><funcprototype>
4807   <funcdef>ssize_t <function>frames_to_bytes </function></funcdef>
4808   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
4809   <paramdef>snd_pcm_sframes_t <parameter>size</parameter></paramdef>
4810  </funcprototype></funcsynopsis>
4811</refsynopsisdiv>
4812<refsect1>
4813 <title>Arguments</title>
4814 <variablelist>
4815  <varlistentry>
4816   <term><parameter>runtime</parameter></term>
4817   <listitem>
4818    <para>
4819     PCM runtime instance
4820    </para>
4821   </listitem>
4822  </varlistentry>
4823  <varlistentry>
4824   <term><parameter>size</parameter></term>
4825   <listitem>
4826    <para>
4827     size in frames
4828    </para>
4829   </listitem>
4830  </varlistentry>
4831 </variablelist>
4832</refsect1>
4833</refentry>
4834
4835<refentry id="API-frame-aligned">
4836<refentryinfo>
4837 <title>LINUX</title>
4838 <productname>Kernel Hackers Manual</productname>
4839 <date>July 2017</date>
4840</refentryinfo>
4841<refmeta>
4842 <refentrytitle><phrase>frame_aligned</phrase></refentrytitle>
4843 <manvolnum>9</manvolnum>
4844 <refmiscinfo class="version">4.4.14</refmiscinfo>
4845</refmeta>
4846<refnamediv>
4847 <refname>frame_aligned</refname>
4848 <refpurpose>
4849     Check whether the byte size is aligned to frames
4850 </refpurpose>
4851</refnamediv>
4852<refsynopsisdiv>
4853 <title>Synopsis</title>
4854  <funcsynopsis><funcprototype>
4855   <funcdef>int <function>frame_aligned </function></funcdef>
4856   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
4857   <paramdef>ssize_t <parameter>bytes</parameter></paramdef>
4858  </funcprototype></funcsynopsis>
4859</refsynopsisdiv>
4860<refsect1>
4861 <title>Arguments</title>
4862 <variablelist>
4863  <varlistentry>
4864   <term><parameter>runtime</parameter></term>
4865   <listitem>
4866    <para>
4867     PCM runtime instance
4868    </para>
4869   </listitem>
4870  </varlistentry>
4871  <varlistentry>
4872   <term><parameter>bytes</parameter></term>
4873   <listitem>
4874    <para>
4875     size in bytes
4876    </para>
4877   </listitem>
4878  </varlistentry>
4879 </variablelist>
4880</refsect1>
4881</refentry>
4882
4883<refentry id="API-snd-pcm-lib-buffer-bytes">
4884<refentryinfo>
4885 <title>LINUX</title>
4886 <productname>Kernel Hackers Manual</productname>
4887 <date>July 2017</date>
4888</refentryinfo>
4889<refmeta>
4890 <refentrytitle><phrase>snd_pcm_lib_buffer_bytes</phrase></refentrytitle>
4891 <manvolnum>9</manvolnum>
4892 <refmiscinfo class="version">4.4.14</refmiscinfo>
4893</refmeta>
4894<refnamediv>
4895 <refname>snd_pcm_lib_buffer_bytes</refname>
4896 <refpurpose>
4897     Get the buffer size of the current PCM in bytes
4898 </refpurpose>
4899</refnamediv>
4900<refsynopsisdiv>
4901 <title>Synopsis</title>
4902  <funcsynopsis><funcprototype>
4903   <funcdef>size_t <function>snd_pcm_lib_buffer_bytes </function></funcdef>
4904   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
4905  </funcprototype></funcsynopsis>
4906</refsynopsisdiv>
4907<refsect1>
4908 <title>Arguments</title>
4909 <variablelist>
4910  <varlistentry>
4911   <term><parameter>substream</parameter></term>
4912   <listitem>
4913    <para>
4914     PCM substream
4915    </para>
4916   </listitem>
4917  </varlistentry>
4918 </variablelist>
4919</refsect1>
4920</refentry>
4921
4922<refentry id="API-snd-pcm-lib-period-bytes">
4923<refentryinfo>
4924 <title>LINUX</title>
4925 <productname>Kernel Hackers Manual</productname>
4926 <date>July 2017</date>
4927</refentryinfo>
4928<refmeta>
4929 <refentrytitle><phrase>snd_pcm_lib_period_bytes</phrase></refentrytitle>
4930 <manvolnum>9</manvolnum>
4931 <refmiscinfo class="version">4.4.14</refmiscinfo>
4932</refmeta>
4933<refnamediv>
4934 <refname>snd_pcm_lib_period_bytes</refname>
4935 <refpurpose>
4936     Get the period size of the current PCM in bytes
4937 </refpurpose>
4938</refnamediv>
4939<refsynopsisdiv>
4940 <title>Synopsis</title>
4941  <funcsynopsis><funcprototype>
4942   <funcdef>size_t <function>snd_pcm_lib_period_bytes </function></funcdef>
4943   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
4944  </funcprototype></funcsynopsis>
4945</refsynopsisdiv>
4946<refsect1>
4947 <title>Arguments</title>
4948 <variablelist>
4949  <varlistentry>
4950   <term><parameter>substream</parameter></term>
4951   <listitem>
4952    <para>
4953     PCM substream
4954    </para>
4955   </listitem>
4956  </varlistentry>
4957 </variablelist>
4958</refsect1>
4959</refentry>
4960
4961<refentry id="API-snd-pcm-playback-avail">
4962<refentryinfo>
4963 <title>LINUX</title>
4964 <productname>Kernel Hackers Manual</productname>
4965 <date>July 2017</date>
4966</refentryinfo>
4967<refmeta>
4968 <refentrytitle><phrase>snd_pcm_playback_avail</phrase></refentrytitle>
4969 <manvolnum>9</manvolnum>
4970 <refmiscinfo class="version">4.4.14</refmiscinfo>
4971</refmeta>
4972<refnamediv>
4973 <refname>snd_pcm_playback_avail</refname>
4974 <refpurpose>
4975     Get the available (writable) space for playback
4976 </refpurpose>
4977</refnamediv>
4978<refsynopsisdiv>
4979 <title>Synopsis</title>
4980  <funcsynopsis><funcprototype>
4981   <funcdef>snd_pcm_uframes_t <function>snd_pcm_playback_avail </function></funcdef>
4982   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
4983  </funcprototype></funcsynopsis>
4984</refsynopsisdiv>
4985<refsect1>
4986 <title>Arguments</title>
4987 <variablelist>
4988  <varlistentry>
4989   <term><parameter>runtime</parameter></term>
4990   <listitem>
4991    <para>
4992     PCM runtime instance
4993    </para>
4994   </listitem>
4995  </varlistentry>
4996 </variablelist>
4997</refsect1>
4998<refsect1>
4999<title>Description</title>
5000<para>
5001   Result is between 0 ... (boundary - 1)
5002</para>
5003</refsect1>
5004</refentry>
5005
5006<refentry id="API-snd-pcm-capture-avail">
5007<refentryinfo>
5008 <title>LINUX</title>
5009 <productname>Kernel Hackers Manual</productname>
5010 <date>July 2017</date>
5011</refentryinfo>
5012<refmeta>
5013 <refentrytitle><phrase>snd_pcm_capture_avail</phrase></refentrytitle>
5014 <manvolnum>9</manvolnum>
5015 <refmiscinfo class="version">4.4.14</refmiscinfo>
5016</refmeta>
5017<refnamediv>
5018 <refname>snd_pcm_capture_avail</refname>
5019 <refpurpose>
5020     Get the available (readable) space for capture
5021 </refpurpose>
5022</refnamediv>
5023<refsynopsisdiv>
5024 <title>Synopsis</title>
5025  <funcsynopsis><funcprototype>
5026   <funcdef>snd_pcm_uframes_t <function>snd_pcm_capture_avail </function></funcdef>
5027   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
5028  </funcprototype></funcsynopsis>
5029</refsynopsisdiv>
5030<refsect1>
5031 <title>Arguments</title>
5032 <variablelist>
5033  <varlistentry>
5034   <term><parameter>runtime</parameter></term>
5035   <listitem>
5036    <para>
5037     PCM runtime instance
5038    </para>
5039   </listitem>
5040  </varlistentry>
5041 </variablelist>
5042</refsect1>
5043<refsect1>
5044<title>Description</title>
5045<para>
5046   Result is between 0 ... (boundary - 1)
5047</para>
5048</refsect1>
5049</refentry>
5050
5051<refentry id="API-snd-pcm-playback-hw-avail">
5052<refentryinfo>
5053 <title>LINUX</title>
5054 <productname>Kernel Hackers Manual</productname>
5055 <date>July 2017</date>
5056</refentryinfo>
5057<refmeta>
5058 <refentrytitle><phrase>snd_pcm_playback_hw_avail</phrase></refentrytitle>
5059 <manvolnum>9</manvolnum>
5060 <refmiscinfo class="version">4.4.14</refmiscinfo>
5061</refmeta>
5062<refnamediv>
5063 <refname>snd_pcm_playback_hw_avail</refname>
5064 <refpurpose>
5065     Get the queued space for playback
5066 </refpurpose>
5067</refnamediv>
5068<refsynopsisdiv>
5069 <title>Synopsis</title>
5070  <funcsynopsis><funcprototype>
5071   <funcdef>snd_pcm_sframes_t <function>snd_pcm_playback_hw_avail </function></funcdef>
5072   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
5073  </funcprototype></funcsynopsis>
5074</refsynopsisdiv>
5075<refsect1>
5076 <title>Arguments</title>
5077 <variablelist>
5078  <varlistentry>
5079   <term><parameter>runtime</parameter></term>
5080   <listitem>
5081    <para>
5082     PCM runtime instance
5083    </para>
5084   </listitem>
5085  </varlistentry>
5086 </variablelist>
5087</refsect1>
5088</refentry>
5089
5090<refentry id="API-snd-pcm-capture-hw-avail">
5091<refentryinfo>
5092 <title>LINUX</title>
5093 <productname>Kernel Hackers Manual</productname>
5094 <date>July 2017</date>
5095</refentryinfo>
5096<refmeta>
5097 <refentrytitle><phrase>snd_pcm_capture_hw_avail</phrase></refentrytitle>
5098 <manvolnum>9</manvolnum>
5099 <refmiscinfo class="version">4.4.14</refmiscinfo>
5100</refmeta>
5101<refnamediv>
5102 <refname>snd_pcm_capture_hw_avail</refname>
5103 <refpurpose>
5104     Get the free space for capture
5105 </refpurpose>
5106</refnamediv>
5107<refsynopsisdiv>
5108 <title>Synopsis</title>
5109  <funcsynopsis><funcprototype>
5110   <funcdef>snd_pcm_sframes_t <function>snd_pcm_capture_hw_avail </function></funcdef>
5111   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
5112  </funcprototype></funcsynopsis>
5113</refsynopsisdiv>
5114<refsect1>
5115 <title>Arguments</title>
5116 <variablelist>
5117  <varlistentry>
5118   <term><parameter>runtime</parameter></term>
5119   <listitem>
5120    <para>
5121     PCM runtime instance
5122    </para>
5123   </listitem>
5124  </varlistentry>
5125 </variablelist>
5126</refsect1>
5127</refentry>
5128
5129<refentry id="API-snd-pcm-playback-ready">
5130<refentryinfo>
5131 <title>LINUX</title>
5132 <productname>Kernel Hackers Manual</productname>
5133 <date>July 2017</date>
5134</refentryinfo>
5135<refmeta>
5136 <refentrytitle><phrase>snd_pcm_playback_ready</phrase></refentrytitle>
5137 <manvolnum>9</manvolnum>
5138 <refmiscinfo class="version">4.4.14</refmiscinfo>
5139</refmeta>
5140<refnamediv>
5141 <refname>snd_pcm_playback_ready</refname>
5142 <refpurpose>
5143     check whether the playback buffer is available
5144 </refpurpose>
5145</refnamediv>
5146<refsynopsisdiv>
5147 <title>Synopsis</title>
5148  <funcsynopsis><funcprototype>
5149   <funcdef>int <function>snd_pcm_playback_ready </function></funcdef>
5150   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
5151  </funcprototype></funcsynopsis>
5152</refsynopsisdiv>
5153<refsect1>
5154 <title>Arguments</title>
5155 <variablelist>
5156  <varlistentry>
5157   <term><parameter>substream</parameter></term>
5158   <listitem>
5159    <para>
5160     the pcm substream instance
5161    </para>
5162   </listitem>
5163  </varlistentry>
5164 </variablelist>
5165</refsect1>
5166<refsect1>
5167<title>Description</title>
5168<para>
5169   Checks whether enough free space is available on the playback buffer.
5170</para>
5171</refsect1>
5172<refsect1>
5173<title>Return</title>
5174<para>
5175   Non-zero if available, or zero if not.
5176</para>
5177</refsect1>
5178</refentry>
5179
5180<refentry id="API-snd-pcm-capture-ready">
5181<refentryinfo>
5182 <title>LINUX</title>
5183 <productname>Kernel Hackers Manual</productname>
5184 <date>July 2017</date>
5185</refentryinfo>
5186<refmeta>
5187 <refentrytitle><phrase>snd_pcm_capture_ready</phrase></refentrytitle>
5188 <manvolnum>9</manvolnum>
5189 <refmiscinfo class="version">4.4.14</refmiscinfo>
5190</refmeta>
5191<refnamediv>
5192 <refname>snd_pcm_capture_ready</refname>
5193 <refpurpose>
5194     check whether the capture buffer is available
5195 </refpurpose>
5196</refnamediv>
5197<refsynopsisdiv>
5198 <title>Synopsis</title>
5199  <funcsynopsis><funcprototype>
5200   <funcdef>int <function>snd_pcm_capture_ready </function></funcdef>
5201   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
5202  </funcprototype></funcsynopsis>
5203</refsynopsisdiv>
5204<refsect1>
5205 <title>Arguments</title>
5206 <variablelist>
5207  <varlistentry>
5208   <term><parameter>substream</parameter></term>
5209   <listitem>
5210    <para>
5211     the pcm substream instance
5212    </para>
5213   </listitem>
5214  </varlistentry>
5215 </variablelist>
5216</refsect1>
5217<refsect1>
5218<title>Description</title>
5219<para>
5220   Checks whether enough capture data is available on the capture buffer.
5221</para>
5222</refsect1>
5223<refsect1>
5224<title>Return</title>
5225<para>
5226   Non-zero if available, or zero if not.
5227</para>
5228</refsect1>
5229</refentry>
5230
5231<refentry id="API-snd-pcm-playback-data">
5232<refentryinfo>
5233 <title>LINUX</title>
5234 <productname>Kernel Hackers Manual</productname>
5235 <date>July 2017</date>
5236</refentryinfo>
5237<refmeta>
5238 <refentrytitle><phrase>snd_pcm_playback_data</phrase></refentrytitle>
5239 <manvolnum>9</manvolnum>
5240 <refmiscinfo class="version">4.4.14</refmiscinfo>
5241</refmeta>
5242<refnamediv>
5243 <refname>snd_pcm_playback_data</refname>
5244 <refpurpose>
5245     check whether any data exists on the playback buffer
5246 </refpurpose>
5247</refnamediv>
5248<refsynopsisdiv>
5249 <title>Synopsis</title>
5250  <funcsynopsis><funcprototype>
5251   <funcdef>int <function>snd_pcm_playback_data </function></funcdef>
5252   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
5253  </funcprototype></funcsynopsis>
5254</refsynopsisdiv>
5255<refsect1>
5256 <title>Arguments</title>
5257 <variablelist>
5258  <varlistentry>
5259   <term><parameter>substream</parameter></term>
5260   <listitem>
5261    <para>
5262     the pcm substream instance
5263    </para>
5264   </listitem>
5265  </varlistentry>
5266 </variablelist>
5267</refsect1>
5268<refsect1>
5269<title>Description</title>
5270<para>
5271   Checks whether any data exists on the playback buffer.
5272</para>
5273</refsect1>
5274<refsect1>
5275<title>Return</title>
5276<para>
5277   Non-zero if any data exists, or zero if not. If stop_threshold
5278   is bigger or equal to boundary, then this function returns always non-zero.
5279</para>
5280</refsect1>
5281</refentry>
5282
5283<refentry id="API-snd-pcm-playback-empty">
5284<refentryinfo>
5285 <title>LINUX</title>
5286 <productname>Kernel Hackers Manual</productname>
5287 <date>July 2017</date>
5288</refentryinfo>
5289<refmeta>
5290 <refentrytitle><phrase>snd_pcm_playback_empty</phrase></refentrytitle>
5291 <manvolnum>9</manvolnum>
5292 <refmiscinfo class="version">4.4.14</refmiscinfo>
5293</refmeta>
5294<refnamediv>
5295 <refname>snd_pcm_playback_empty</refname>
5296 <refpurpose>
5297     check whether the playback buffer is empty
5298 </refpurpose>
5299</refnamediv>
5300<refsynopsisdiv>
5301 <title>Synopsis</title>
5302  <funcsynopsis><funcprototype>
5303   <funcdef>int <function>snd_pcm_playback_empty </function></funcdef>
5304   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
5305  </funcprototype></funcsynopsis>
5306</refsynopsisdiv>
5307<refsect1>
5308 <title>Arguments</title>
5309 <variablelist>
5310  <varlistentry>
5311   <term><parameter>substream</parameter></term>
5312   <listitem>
5313    <para>
5314     the pcm substream instance
5315    </para>
5316   </listitem>
5317  </varlistentry>
5318 </variablelist>
5319</refsect1>
5320<refsect1>
5321<title>Description</title>
5322<para>
5323   Checks whether the playback buffer is empty.
5324</para>
5325</refsect1>
5326<refsect1>
5327<title>Return</title>
5328<para>
5329   Non-zero if empty, or zero if not.
5330</para>
5331</refsect1>
5332</refentry>
5333
5334<refentry id="API-snd-pcm-capture-empty">
5335<refentryinfo>
5336 <title>LINUX</title>
5337 <productname>Kernel Hackers Manual</productname>
5338 <date>July 2017</date>
5339</refentryinfo>
5340<refmeta>
5341 <refentrytitle><phrase>snd_pcm_capture_empty</phrase></refentrytitle>
5342 <manvolnum>9</manvolnum>
5343 <refmiscinfo class="version">4.4.14</refmiscinfo>
5344</refmeta>
5345<refnamediv>
5346 <refname>snd_pcm_capture_empty</refname>
5347 <refpurpose>
5348     check whether the capture buffer is empty
5349 </refpurpose>
5350</refnamediv>
5351<refsynopsisdiv>
5352 <title>Synopsis</title>
5353  <funcsynopsis><funcprototype>
5354   <funcdef>int <function>snd_pcm_capture_empty </function></funcdef>
5355   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
5356  </funcprototype></funcsynopsis>
5357</refsynopsisdiv>
5358<refsect1>
5359 <title>Arguments</title>
5360 <variablelist>
5361  <varlistentry>
5362   <term><parameter>substream</parameter></term>
5363   <listitem>
5364    <para>
5365     the pcm substream instance
5366    </para>
5367   </listitem>
5368  </varlistentry>
5369 </variablelist>
5370</refsect1>
5371<refsect1>
5372<title>Description</title>
5373<para>
5374   Checks whether the capture buffer is empty.
5375</para>
5376</refsect1>
5377<refsect1>
5378<title>Return</title>
5379<para>
5380   Non-zero if empty, or zero if not.
5381</para>
5382</refsect1>
5383</refentry>
5384
5385<refentry id="API-snd-pcm-trigger-done">
5386<refentryinfo>
5387 <title>LINUX</title>
5388 <productname>Kernel Hackers Manual</productname>
5389 <date>July 2017</date>
5390</refentryinfo>
5391<refmeta>
5392 <refentrytitle><phrase>snd_pcm_trigger_done</phrase></refentrytitle>
5393 <manvolnum>9</manvolnum>
5394 <refmiscinfo class="version">4.4.14</refmiscinfo>
5395</refmeta>
5396<refnamediv>
5397 <refname>snd_pcm_trigger_done</refname>
5398 <refpurpose>
5399     Mark the master substream
5400 </refpurpose>
5401</refnamediv>
5402<refsynopsisdiv>
5403 <title>Synopsis</title>
5404  <funcsynopsis><funcprototype>
5405   <funcdef>void <function>snd_pcm_trigger_done </function></funcdef>
5406   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
5407   <paramdef>struct snd_pcm_substream * <parameter>master</parameter></paramdef>
5408  </funcprototype></funcsynopsis>
5409</refsynopsisdiv>
5410<refsect1>
5411 <title>Arguments</title>
5412 <variablelist>
5413  <varlistentry>
5414   <term><parameter>substream</parameter></term>
5415   <listitem>
5416    <para>
5417     the pcm substream instance
5418    </para>
5419   </listitem>
5420  </varlistentry>
5421  <varlistentry>
5422   <term><parameter>master</parameter></term>
5423   <listitem>
5424    <para>
5425     the linked master substream
5426    </para>
5427   </listitem>
5428  </varlistentry>
5429 </variablelist>
5430</refsect1>
5431<refsect1>
5432<title>Description</title>
5433<para>
5434   When multiple substreams of the same card are linked and the hardware
5435   supports the single-shot operation, the driver calls this in the loop
5436   in <function>snd_pcm_group_for_each_entry</function> for marking the substream as <quote>done</quote>.
5437   Then most of trigger operations are performed only to the given master
5438   substream.
5439   </para><para>
5440
5441   The trigger_master mark is cleared at timestamp updates at the end
5442   of trigger operations.
5443</para>
5444</refsect1>
5445</refentry>
5446
5447<refentry id="API-params-channels">
5448<refentryinfo>
5449 <title>LINUX</title>
5450 <productname>Kernel Hackers Manual</productname>
5451 <date>July 2017</date>
5452</refentryinfo>
5453<refmeta>
5454 <refentrytitle><phrase>params_channels</phrase></refentrytitle>
5455 <manvolnum>9</manvolnum>
5456 <refmiscinfo class="version">4.4.14</refmiscinfo>
5457</refmeta>
5458<refnamediv>
5459 <refname>params_channels</refname>
5460 <refpurpose>
5461     Get the number of channels from the hw params
5462 </refpurpose>
5463</refnamediv>
5464<refsynopsisdiv>
5465 <title>Synopsis</title>
5466  <funcsynopsis><funcprototype>
5467   <funcdef>unsigned int <function>params_channels </function></funcdef>
5468   <paramdef>const struct snd_pcm_hw_params * <parameter>p</parameter></paramdef>
5469  </funcprototype></funcsynopsis>
5470</refsynopsisdiv>
5471<refsect1>
5472 <title>Arguments</title>
5473 <variablelist>
5474  <varlistentry>
5475   <term><parameter>p</parameter></term>
5476   <listitem>
5477    <para>
5478     hw params
5479    </para>
5480   </listitem>
5481  </varlistentry>
5482 </variablelist>
5483</refsect1>
5484</refentry>
5485
5486<refentry id="API-params-rate">
5487<refentryinfo>
5488 <title>LINUX</title>
5489 <productname>Kernel Hackers Manual</productname>
5490 <date>July 2017</date>
5491</refentryinfo>
5492<refmeta>
5493 <refentrytitle><phrase>params_rate</phrase></refentrytitle>
5494 <manvolnum>9</manvolnum>
5495 <refmiscinfo class="version">4.4.14</refmiscinfo>
5496</refmeta>
5497<refnamediv>
5498 <refname>params_rate</refname>
5499 <refpurpose>
5500     Get the sample rate from the hw params
5501 </refpurpose>
5502</refnamediv>
5503<refsynopsisdiv>
5504 <title>Synopsis</title>
5505  <funcsynopsis><funcprototype>
5506   <funcdef>unsigned int <function>params_rate </function></funcdef>
5507   <paramdef>const struct snd_pcm_hw_params * <parameter>p</parameter></paramdef>
5508  </funcprototype></funcsynopsis>
5509</refsynopsisdiv>
5510<refsect1>
5511 <title>Arguments</title>
5512 <variablelist>
5513  <varlistentry>
5514   <term><parameter>p</parameter></term>
5515   <listitem>
5516    <para>
5517     hw params
5518    </para>
5519   </listitem>
5520  </varlistentry>
5521 </variablelist>
5522</refsect1>
5523</refentry>
5524
5525<refentry id="API-params-period-size">
5526<refentryinfo>
5527 <title>LINUX</title>
5528 <productname>Kernel Hackers Manual</productname>
5529 <date>July 2017</date>
5530</refentryinfo>
5531<refmeta>
5532 <refentrytitle><phrase>params_period_size</phrase></refentrytitle>
5533 <manvolnum>9</manvolnum>
5534 <refmiscinfo class="version">4.4.14</refmiscinfo>
5535</refmeta>
5536<refnamediv>
5537 <refname>params_period_size</refname>
5538 <refpurpose>
5539     Get the period size (in frames) from the hw params
5540 </refpurpose>
5541</refnamediv>
5542<refsynopsisdiv>
5543 <title>Synopsis</title>
5544  <funcsynopsis><funcprototype>
5545   <funcdef>unsigned int <function>params_period_size </function></funcdef>
5546   <paramdef>const struct snd_pcm_hw_params * <parameter>p</parameter></paramdef>
5547  </funcprototype></funcsynopsis>
5548</refsynopsisdiv>
5549<refsect1>
5550 <title>Arguments</title>
5551 <variablelist>
5552  <varlistentry>
5553   <term><parameter>p</parameter></term>
5554   <listitem>
5555    <para>
5556     hw params
5557    </para>
5558   </listitem>
5559  </varlistentry>
5560 </variablelist>
5561</refsect1>
5562</refentry>
5563
5564<refentry id="API-params-periods">
5565<refentryinfo>
5566 <title>LINUX</title>
5567 <productname>Kernel Hackers Manual</productname>
5568 <date>July 2017</date>
5569</refentryinfo>
5570<refmeta>
5571 <refentrytitle><phrase>params_periods</phrase></refentrytitle>
5572 <manvolnum>9</manvolnum>
5573 <refmiscinfo class="version">4.4.14</refmiscinfo>
5574</refmeta>
5575<refnamediv>
5576 <refname>params_periods</refname>
5577 <refpurpose>
5578     Get the number of periods from the hw params
5579 </refpurpose>
5580</refnamediv>
5581<refsynopsisdiv>
5582 <title>Synopsis</title>
5583  <funcsynopsis><funcprototype>
5584   <funcdef>unsigned int <function>params_periods </function></funcdef>
5585   <paramdef>const struct snd_pcm_hw_params * <parameter>p</parameter></paramdef>
5586  </funcprototype></funcsynopsis>
5587</refsynopsisdiv>
5588<refsect1>
5589 <title>Arguments</title>
5590 <variablelist>
5591  <varlistentry>
5592   <term><parameter>p</parameter></term>
5593   <listitem>
5594    <para>
5595     hw params
5596    </para>
5597   </listitem>
5598  </varlistentry>
5599 </variablelist>
5600</refsect1>
5601</refentry>
5602
5603<refentry id="API-params-buffer-size">
5604<refentryinfo>
5605 <title>LINUX</title>
5606 <productname>Kernel Hackers Manual</productname>
5607 <date>July 2017</date>
5608</refentryinfo>
5609<refmeta>
5610 <refentrytitle><phrase>params_buffer_size</phrase></refentrytitle>
5611 <manvolnum>9</manvolnum>
5612 <refmiscinfo class="version">4.4.14</refmiscinfo>
5613</refmeta>
5614<refnamediv>
5615 <refname>params_buffer_size</refname>
5616 <refpurpose>
5617     Get the buffer size (in frames) from the hw params
5618 </refpurpose>
5619</refnamediv>
5620<refsynopsisdiv>
5621 <title>Synopsis</title>
5622  <funcsynopsis><funcprototype>
5623   <funcdef>unsigned int <function>params_buffer_size </function></funcdef>
5624   <paramdef>const struct snd_pcm_hw_params * <parameter>p</parameter></paramdef>
5625  </funcprototype></funcsynopsis>
5626</refsynopsisdiv>
5627<refsect1>
5628 <title>Arguments</title>
5629 <variablelist>
5630  <varlistentry>
5631   <term><parameter>p</parameter></term>
5632   <listitem>
5633    <para>
5634     hw params
5635    </para>
5636   </listitem>
5637  </varlistentry>
5638 </variablelist>
5639</refsect1>
5640</refentry>
5641
5642<refentry id="API-params-buffer-bytes">
5643<refentryinfo>
5644 <title>LINUX</title>
5645 <productname>Kernel Hackers Manual</productname>
5646 <date>July 2017</date>
5647</refentryinfo>
5648<refmeta>
5649 <refentrytitle><phrase>params_buffer_bytes</phrase></refentrytitle>
5650 <manvolnum>9</manvolnum>
5651 <refmiscinfo class="version">4.4.14</refmiscinfo>
5652</refmeta>
5653<refnamediv>
5654 <refname>params_buffer_bytes</refname>
5655 <refpurpose>
5656     Get the buffer size (in bytes) from the hw params
5657 </refpurpose>
5658</refnamediv>
5659<refsynopsisdiv>
5660 <title>Synopsis</title>
5661  <funcsynopsis><funcprototype>
5662   <funcdef>unsigned int <function>params_buffer_bytes </function></funcdef>
5663   <paramdef>const struct snd_pcm_hw_params * <parameter>p</parameter></paramdef>
5664  </funcprototype></funcsynopsis>
5665</refsynopsisdiv>
5666<refsect1>
5667 <title>Arguments</title>
5668 <variablelist>
5669  <varlistentry>
5670   <term><parameter>p</parameter></term>
5671   <listitem>
5672    <para>
5673     hw params
5674    </para>
5675   </listitem>
5676  </varlistentry>
5677 </variablelist>
5678</refsect1>
5679</refentry>
5680
5681<refentry id="API-snd-pcm-hw-constraint-single">
5682<refentryinfo>
5683 <title>LINUX</title>
5684 <productname>Kernel Hackers Manual</productname>
5685 <date>July 2017</date>
5686</refentryinfo>
5687<refmeta>
5688 <refentrytitle><phrase>snd_pcm_hw_constraint_single</phrase></refentrytitle>
5689 <manvolnum>9</manvolnum>
5690 <refmiscinfo class="version">4.4.14</refmiscinfo>
5691</refmeta>
5692<refnamediv>
5693 <refname>snd_pcm_hw_constraint_single</refname>
5694 <refpurpose>
5695     Constrain parameter to a single value
5696 </refpurpose>
5697</refnamediv>
5698<refsynopsisdiv>
5699 <title>Synopsis</title>
5700  <funcsynopsis><funcprototype>
5701   <funcdef>int <function>snd_pcm_hw_constraint_single </function></funcdef>
5702   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
5703   <paramdef>snd_pcm_hw_param_t <parameter>var</parameter></paramdef>
5704   <paramdef>unsigned int <parameter>val</parameter></paramdef>
5705  </funcprototype></funcsynopsis>
5706</refsynopsisdiv>
5707<refsect1>
5708 <title>Arguments</title>
5709 <variablelist>
5710  <varlistentry>
5711   <term><parameter>runtime</parameter></term>
5712   <listitem>
5713    <para>
5714     PCM runtime instance
5715    </para>
5716   </listitem>
5717  </varlistentry>
5718  <varlistentry>
5719   <term><parameter>var</parameter></term>
5720   <listitem>
5721    <para>
5722     The hw_params variable to constrain
5723    </para>
5724   </listitem>
5725  </varlistentry>
5726  <varlistentry>
5727   <term><parameter>val</parameter></term>
5728   <listitem>
5729    <para>
5730     The value to constrain to
5731    </para>
5732   </listitem>
5733  </varlistentry>
5734 </variablelist>
5735</refsect1>
5736<refsect1>
5737<title>Return</title>
5738<para>
5739   Positive if the value is changed, zero if it's not changed, or a
5740   negative error code.
5741</para>
5742</refsect1>
5743</refentry>
5744
5745<refentry id="API-snd-pcm-format-cpu-endian">
5746<refentryinfo>
5747 <title>LINUX</title>
5748 <productname>Kernel Hackers Manual</productname>
5749 <date>July 2017</date>
5750</refentryinfo>
5751<refmeta>
5752 <refentrytitle><phrase>snd_pcm_format_cpu_endian</phrase></refentrytitle>
5753 <manvolnum>9</manvolnum>
5754 <refmiscinfo class="version">4.4.14</refmiscinfo>
5755</refmeta>
5756<refnamediv>
5757 <refname>snd_pcm_format_cpu_endian</refname>
5758 <refpurpose>
5759     Check the PCM format is CPU-endian
5760 </refpurpose>
5761</refnamediv>
5762<refsynopsisdiv>
5763 <title>Synopsis</title>
5764  <funcsynopsis><funcprototype>
5765   <funcdef>int <function>snd_pcm_format_cpu_endian </function></funcdef>
5766   <paramdef>snd_pcm_format_t <parameter>format</parameter></paramdef>
5767  </funcprototype></funcsynopsis>
5768</refsynopsisdiv>
5769<refsect1>
5770 <title>Arguments</title>
5771 <variablelist>
5772  <varlistentry>
5773   <term><parameter>format</parameter></term>
5774   <listitem>
5775    <para>
5776     the format to check
5777    </para>
5778   </listitem>
5779  </varlistentry>
5780 </variablelist>
5781</refsect1>
5782<refsect1>
5783<title>Return</title>
5784<para>
5785   1 if the given PCM format is CPU-endian, 0 if
5786   opposite, or a negative error code if endian not specified.
5787</para>
5788</refsect1>
5789</refentry>
5790
5791<refentry id="API-snd-pcm-set-runtime-buffer">
5792<refentryinfo>
5793 <title>LINUX</title>
5794 <productname>Kernel Hackers Manual</productname>
5795 <date>July 2017</date>
5796</refentryinfo>
5797<refmeta>
5798 <refentrytitle><phrase>snd_pcm_set_runtime_buffer</phrase></refentrytitle>
5799 <manvolnum>9</manvolnum>
5800 <refmiscinfo class="version">4.4.14</refmiscinfo>
5801</refmeta>
5802<refnamediv>
5803 <refname>snd_pcm_set_runtime_buffer</refname>
5804 <refpurpose>
5805     Set the PCM runtime buffer
5806 </refpurpose>
5807</refnamediv>
5808<refsynopsisdiv>
5809 <title>Synopsis</title>
5810  <funcsynopsis><funcprototype>
5811   <funcdef>void <function>snd_pcm_set_runtime_buffer </function></funcdef>
5812   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
5813   <paramdef>struct snd_dma_buffer * <parameter>bufp</parameter></paramdef>
5814  </funcprototype></funcsynopsis>
5815</refsynopsisdiv>
5816<refsect1>
5817 <title>Arguments</title>
5818 <variablelist>
5819  <varlistentry>
5820   <term><parameter>substream</parameter></term>
5821   <listitem>
5822    <para>
5823     PCM substream to set
5824    </para>
5825   </listitem>
5826  </varlistentry>
5827  <varlistentry>
5828   <term><parameter>bufp</parameter></term>
5829   <listitem>
5830    <para>
5831     the buffer information, NULL to clear
5832    </para>
5833   </listitem>
5834  </varlistentry>
5835 </variablelist>
5836</refsect1>
5837<refsect1>
5838<title>Description</title>
5839<para>
5840   Copy the buffer information to runtime-&gt;dma_buffer when <parameter>bufp</parameter> is non-NULL.
5841   Otherwise it clears the current buffer information.
5842</para>
5843</refsect1>
5844</refentry>
5845
5846<refentry id="API-snd-pcm-gettime">
5847<refentryinfo>
5848 <title>LINUX</title>
5849 <productname>Kernel Hackers Manual</productname>
5850 <date>July 2017</date>
5851</refentryinfo>
5852<refmeta>
5853 <refentrytitle><phrase>snd_pcm_gettime</phrase></refentrytitle>
5854 <manvolnum>9</manvolnum>
5855 <refmiscinfo class="version">4.4.14</refmiscinfo>
5856</refmeta>
5857<refnamediv>
5858 <refname>snd_pcm_gettime</refname>
5859 <refpurpose>
5860     Fill the timespec depending on the timestamp mode
5861 </refpurpose>
5862</refnamediv>
5863<refsynopsisdiv>
5864 <title>Synopsis</title>
5865  <funcsynopsis><funcprototype>
5866   <funcdef>void <function>snd_pcm_gettime </function></funcdef>
5867   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
5868   <paramdef>struct timespec * <parameter>tv</parameter></paramdef>
5869  </funcprototype></funcsynopsis>
5870</refsynopsisdiv>
5871<refsect1>
5872 <title>Arguments</title>
5873 <variablelist>
5874  <varlistentry>
5875   <term><parameter>runtime</parameter></term>
5876   <listitem>
5877    <para>
5878     PCM runtime instance
5879    </para>
5880   </listitem>
5881  </varlistentry>
5882  <varlistentry>
5883   <term><parameter>tv</parameter></term>
5884   <listitem>
5885    <para>
5886     timespec to fill
5887    </para>
5888   </listitem>
5889  </varlistentry>
5890 </variablelist>
5891</refsect1>
5892</refentry>
5893
5894<refentry id="API-snd-pcm-lib-alloc-vmalloc-buffer">
5895<refentryinfo>
5896 <title>LINUX</title>
5897 <productname>Kernel Hackers Manual</productname>
5898 <date>July 2017</date>
5899</refentryinfo>
5900<refmeta>
5901 <refentrytitle><phrase>snd_pcm_lib_alloc_vmalloc_buffer</phrase></refentrytitle>
5902 <manvolnum>9</manvolnum>
5903 <refmiscinfo class="version">4.4.14</refmiscinfo>
5904</refmeta>
5905<refnamediv>
5906 <refname>snd_pcm_lib_alloc_vmalloc_buffer</refname>
5907 <refpurpose>
5908     allocate virtual DMA buffer
5909 </refpurpose>
5910</refnamediv>
5911<refsynopsisdiv>
5912 <title>Synopsis</title>
5913  <funcsynopsis><funcprototype>
5914   <funcdef>int <function>snd_pcm_lib_alloc_vmalloc_buffer </function></funcdef>
5915   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
5916   <paramdef>size_t <parameter>size</parameter></paramdef>
5917  </funcprototype></funcsynopsis>
5918</refsynopsisdiv>
5919<refsect1>
5920 <title>Arguments</title>
5921 <variablelist>
5922  <varlistentry>
5923   <term><parameter>substream</parameter></term>
5924   <listitem>
5925    <para>
5926     the substream to allocate the buffer to
5927    </para>
5928   </listitem>
5929  </varlistentry>
5930  <varlistentry>
5931   <term><parameter>size</parameter></term>
5932   <listitem>
5933    <para>
5934     the requested buffer size, in bytes
5935    </para>
5936   </listitem>
5937  </varlistentry>
5938 </variablelist>
5939</refsect1>
5940<refsect1>
5941<title>Description</title>
5942<para>
5943   Allocates the PCM substream buffer using <function>vmalloc</function>, i.e., the memory is
5944   contiguous in kernel virtual space, but not in physical memory.  Use this
5945   if the buffer is accessed by kernel code but not by device DMA.
5946</para>
5947</refsect1>
5948<refsect1>
5949<title>Return</title>
5950<para>
5951   1 if the buffer was changed, 0 if not changed, or a negative error
5952   code.
5953</para>
5954</refsect1>
5955</refentry>
5956
5957<refentry id="API-snd-pcm-lib-alloc-vmalloc-32-buffer">
5958<refentryinfo>
5959 <title>LINUX</title>
5960 <productname>Kernel Hackers Manual</productname>
5961 <date>July 2017</date>
5962</refentryinfo>
5963<refmeta>
5964 <refentrytitle><phrase>snd_pcm_lib_alloc_vmalloc_32_buffer</phrase></refentrytitle>
5965 <manvolnum>9</manvolnum>
5966 <refmiscinfo class="version">4.4.14</refmiscinfo>
5967</refmeta>
5968<refnamediv>
5969 <refname>snd_pcm_lib_alloc_vmalloc_32_buffer</refname>
5970 <refpurpose>
5971     allocate 32-bit-addressable buffer
5972 </refpurpose>
5973</refnamediv>
5974<refsynopsisdiv>
5975 <title>Synopsis</title>
5976  <funcsynopsis><funcprototype>
5977   <funcdef>int <function>snd_pcm_lib_alloc_vmalloc_32_buffer </function></funcdef>
5978   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
5979   <paramdef>size_t <parameter>size</parameter></paramdef>
5980  </funcprototype></funcsynopsis>
5981</refsynopsisdiv>
5982<refsect1>
5983 <title>Arguments</title>
5984 <variablelist>
5985  <varlistentry>
5986   <term><parameter>substream</parameter></term>
5987   <listitem>
5988    <para>
5989     the substream to allocate the buffer to
5990    </para>
5991   </listitem>
5992  </varlistentry>
5993  <varlistentry>
5994   <term><parameter>size</parameter></term>
5995   <listitem>
5996    <para>
5997     the requested buffer size, in bytes
5998    </para>
5999   </listitem>
6000  </varlistentry>
6001 </variablelist>
6002</refsect1>
6003<refsect1>
6004<title>Description</title>
6005<para>
6006   This function works like <function>snd_pcm_lib_alloc_vmalloc_buffer</function>, but uses
6007   <function>vmalloc_32</function>, i.e., the pages are allocated from 32-bit-addressable memory.
6008</para>
6009</refsect1>
6010<refsect1>
6011<title>Return</title>
6012<para>
6013   1 if the buffer was changed, 0 if not changed, or a negative error
6014   code.
6015</para>
6016</refsect1>
6017</refentry>
6018
6019<refentry id="API-snd-pcm-sgbuf-get-addr">
6020<refentryinfo>
6021 <title>LINUX</title>
6022 <productname>Kernel Hackers Manual</productname>
6023 <date>July 2017</date>
6024</refentryinfo>
6025<refmeta>
6026 <refentrytitle><phrase>snd_pcm_sgbuf_get_addr</phrase></refentrytitle>
6027 <manvolnum>9</manvolnum>
6028 <refmiscinfo class="version">4.4.14</refmiscinfo>
6029</refmeta>
6030<refnamediv>
6031 <refname>snd_pcm_sgbuf_get_addr</refname>
6032 <refpurpose>
6033     Get the DMA address at the corresponding offset
6034 </refpurpose>
6035</refnamediv>
6036<refsynopsisdiv>
6037 <title>Synopsis</title>
6038  <funcsynopsis><funcprototype>
6039   <funcdef>dma_addr_t <function>snd_pcm_sgbuf_get_addr </function></funcdef>
6040   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
6041   <paramdef>unsigned int <parameter>ofs</parameter></paramdef>
6042  </funcprototype></funcsynopsis>
6043</refsynopsisdiv>
6044<refsect1>
6045 <title>Arguments</title>
6046 <variablelist>
6047  <varlistentry>
6048   <term><parameter>substream</parameter></term>
6049   <listitem>
6050    <para>
6051     PCM substream
6052    </para>
6053   </listitem>
6054  </varlistentry>
6055  <varlistentry>
6056   <term><parameter>ofs</parameter></term>
6057   <listitem>
6058    <para>
6059     byte offset
6060    </para>
6061   </listitem>
6062  </varlistentry>
6063 </variablelist>
6064</refsect1>
6065</refentry>
6066
6067<refentry id="API-snd-pcm-sgbuf-get-ptr">
6068<refentryinfo>
6069 <title>LINUX</title>
6070 <productname>Kernel Hackers Manual</productname>
6071 <date>July 2017</date>
6072</refentryinfo>
6073<refmeta>
6074 <refentrytitle><phrase>snd_pcm_sgbuf_get_ptr</phrase></refentrytitle>
6075 <manvolnum>9</manvolnum>
6076 <refmiscinfo class="version">4.4.14</refmiscinfo>
6077</refmeta>
6078<refnamediv>
6079 <refname>snd_pcm_sgbuf_get_ptr</refname>
6080 <refpurpose>
6081     Get the virtual address at the corresponding offset
6082 </refpurpose>
6083</refnamediv>
6084<refsynopsisdiv>
6085 <title>Synopsis</title>
6086  <funcsynopsis><funcprototype>
6087   <funcdef>void * <function>snd_pcm_sgbuf_get_ptr </function></funcdef>
6088   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
6089   <paramdef>unsigned int <parameter>ofs</parameter></paramdef>
6090  </funcprototype></funcsynopsis>
6091</refsynopsisdiv>
6092<refsect1>
6093 <title>Arguments</title>
6094 <variablelist>
6095  <varlistentry>
6096   <term><parameter>substream</parameter></term>
6097   <listitem>
6098    <para>
6099     PCM substream
6100    </para>
6101   </listitem>
6102  </varlistentry>
6103  <varlistentry>
6104   <term><parameter>ofs</parameter></term>
6105   <listitem>
6106    <para>
6107     byte offset
6108    </para>
6109   </listitem>
6110  </varlistentry>
6111 </variablelist>
6112</refsect1>
6113</refentry>
6114
6115<refentry id="API-snd-pcm-sgbuf-get-chunk-size">
6116<refentryinfo>
6117 <title>LINUX</title>
6118 <productname>Kernel Hackers Manual</productname>
6119 <date>July 2017</date>
6120</refentryinfo>
6121<refmeta>
6122 <refentrytitle><phrase>snd_pcm_sgbuf_get_chunk_size</phrase></refentrytitle>
6123 <manvolnum>9</manvolnum>
6124 <refmiscinfo class="version">4.4.14</refmiscinfo>
6125</refmeta>
6126<refnamediv>
6127 <refname>snd_pcm_sgbuf_get_chunk_size</refname>
6128 <refpurpose>
6129     Compute the max size that fits within the contig. page from the given size
6130 </refpurpose>
6131</refnamediv>
6132<refsynopsisdiv>
6133 <title>Synopsis</title>
6134  <funcsynopsis><funcprototype>
6135   <funcdef>unsigned int <function>snd_pcm_sgbuf_get_chunk_size </function></funcdef>
6136   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
6137   <paramdef>unsigned int <parameter>ofs</parameter></paramdef>
6138   <paramdef>unsigned int <parameter>size</parameter></paramdef>
6139  </funcprototype></funcsynopsis>
6140</refsynopsisdiv>
6141<refsect1>
6142 <title>Arguments</title>
6143 <variablelist>
6144  <varlistentry>
6145   <term><parameter>substream</parameter></term>
6146   <listitem>
6147    <para>
6148     PCM substream
6149    </para>
6150   </listitem>
6151  </varlistentry>
6152  <varlistentry>
6153   <term><parameter>ofs</parameter></term>
6154   <listitem>
6155    <para>
6156     byte offset
6157    </para>
6158   </listitem>
6159  </varlistentry>
6160  <varlistentry>
6161   <term><parameter>size</parameter></term>
6162   <listitem>
6163    <para>
6164     byte size to examine
6165    </para>
6166   </listitem>
6167  </varlistentry>
6168 </variablelist>
6169</refsect1>
6170</refentry>
6171
6172<refentry id="API-snd-pcm-mmap-data-open">
6173<refentryinfo>
6174 <title>LINUX</title>
6175 <productname>Kernel Hackers Manual</productname>
6176 <date>July 2017</date>
6177</refentryinfo>
6178<refmeta>
6179 <refentrytitle><phrase>snd_pcm_mmap_data_open</phrase></refentrytitle>
6180 <manvolnum>9</manvolnum>
6181 <refmiscinfo class="version">4.4.14</refmiscinfo>
6182</refmeta>
6183<refnamediv>
6184 <refname>snd_pcm_mmap_data_open</refname>
6185 <refpurpose>
6186     increase the mmap counter
6187 </refpurpose>
6188</refnamediv>
6189<refsynopsisdiv>
6190 <title>Synopsis</title>
6191  <funcsynopsis><funcprototype>
6192   <funcdef>void <function>snd_pcm_mmap_data_open </function></funcdef>
6193   <paramdef>struct vm_area_struct * <parameter>area</parameter></paramdef>
6194  </funcprototype></funcsynopsis>
6195</refsynopsisdiv>
6196<refsect1>
6197 <title>Arguments</title>
6198 <variablelist>
6199  <varlistentry>
6200   <term><parameter>area</parameter></term>
6201   <listitem>
6202    <para>
6203     VMA
6204    </para>
6205   </listitem>
6206  </varlistentry>
6207 </variablelist>
6208</refsect1>
6209<refsect1>
6210<title>Description</title>
6211<para>
6212   PCM mmap callback should handle this counter properly
6213</para>
6214</refsect1>
6215</refentry>
6216
6217<refentry id="API-snd-pcm-mmap-data-close">
6218<refentryinfo>
6219 <title>LINUX</title>
6220 <productname>Kernel Hackers Manual</productname>
6221 <date>July 2017</date>
6222</refentryinfo>
6223<refmeta>
6224 <refentrytitle><phrase>snd_pcm_mmap_data_close</phrase></refentrytitle>
6225 <manvolnum>9</manvolnum>
6226 <refmiscinfo class="version">4.4.14</refmiscinfo>
6227</refmeta>
6228<refnamediv>
6229 <refname>snd_pcm_mmap_data_close</refname>
6230 <refpurpose>
6231     decrease the mmap counter
6232 </refpurpose>
6233</refnamediv>
6234<refsynopsisdiv>
6235 <title>Synopsis</title>
6236  <funcsynopsis><funcprototype>
6237   <funcdef>void <function>snd_pcm_mmap_data_close </function></funcdef>
6238   <paramdef>struct vm_area_struct * <parameter>area</parameter></paramdef>
6239  </funcprototype></funcsynopsis>
6240</refsynopsisdiv>
6241<refsect1>
6242 <title>Arguments</title>
6243 <variablelist>
6244  <varlistentry>
6245   <term><parameter>area</parameter></term>
6246   <listitem>
6247    <para>
6248     VMA
6249    </para>
6250   </listitem>
6251  </varlistentry>
6252 </variablelist>
6253</refsect1>
6254<refsect1>
6255<title>Description</title>
6256<para>
6257   PCM mmap callback should handle this counter properly
6258</para>
6259</refsect1>
6260</refentry>
6261
6262<refentry id="API-snd-pcm-limit-isa-dma-size">
6263<refentryinfo>
6264 <title>LINUX</title>
6265 <productname>Kernel Hackers Manual</productname>
6266 <date>July 2017</date>
6267</refentryinfo>
6268<refmeta>
6269 <refentrytitle><phrase>snd_pcm_limit_isa_dma_size</phrase></refentrytitle>
6270 <manvolnum>9</manvolnum>
6271 <refmiscinfo class="version">4.4.14</refmiscinfo>
6272</refmeta>
6273<refnamediv>
6274 <refname>snd_pcm_limit_isa_dma_size</refname>
6275 <refpurpose>
6276     Get the max size fitting with ISA DMA transfer
6277 </refpurpose>
6278</refnamediv>
6279<refsynopsisdiv>
6280 <title>Synopsis</title>
6281  <funcsynopsis><funcprototype>
6282   <funcdef>void <function>snd_pcm_limit_isa_dma_size </function></funcdef>
6283   <paramdef>int <parameter>dma</parameter></paramdef>
6284   <paramdef>size_t * <parameter>max</parameter></paramdef>
6285  </funcprototype></funcsynopsis>
6286</refsynopsisdiv>
6287<refsect1>
6288 <title>Arguments</title>
6289 <variablelist>
6290  <varlistentry>
6291   <term><parameter>dma</parameter></term>
6292   <listitem>
6293    <para>
6294     DMA number
6295    </para>
6296   </listitem>
6297  </varlistentry>
6298  <varlistentry>
6299   <term><parameter>max</parameter></term>
6300   <listitem>
6301    <para>
6302     pointer to store the max size
6303    </para>
6304   </listitem>
6305  </varlistentry>
6306 </variablelist>
6307</refsect1>
6308</refentry>
6309
6310<refentry id="API-snd-pcm-stream-str">
6311<refentryinfo>
6312 <title>LINUX</title>
6313 <productname>Kernel Hackers Manual</productname>
6314 <date>July 2017</date>
6315</refentryinfo>
6316<refmeta>
6317 <refentrytitle><phrase>snd_pcm_stream_str</phrase></refentrytitle>
6318 <manvolnum>9</manvolnum>
6319 <refmiscinfo class="version">4.4.14</refmiscinfo>
6320</refmeta>
6321<refnamediv>
6322 <refname>snd_pcm_stream_str</refname>
6323 <refpurpose>
6324     Get a string naming the direction of a stream
6325 </refpurpose>
6326</refnamediv>
6327<refsynopsisdiv>
6328 <title>Synopsis</title>
6329  <funcsynopsis><funcprototype>
6330   <funcdef>const char * <function>snd_pcm_stream_str </function></funcdef>
6331   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
6332  </funcprototype></funcsynopsis>
6333</refsynopsisdiv>
6334<refsect1>
6335 <title>Arguments</title>
6336 <variablelist>
6337  <varlistentry>
6338   <term><parameter>substream</parameter></term>
6339   <listitem>
6340    <para>
6341     the pcm substream instance
6342    </para>
6343   </listitem>
6344  </varlistentry>
6345 </variablelist>
6346</refsect1>
6347<refsect1>
6348<title>Return</title>
6349<para>
6350   A string naming the direction of the stream.
6351</para>
6352</refsect1>
6353</refentry>
6354
6355<refentry id="API-snd-pcm-chmap-substream">
6356<refentryinfo>
6357 <title>LINUX</title>
6358 <productname>Kernel Hackers Manual</productname>
6359 <date>July 2017</date>
6360</refentryinfo>
6361<refmeta>
6362 <refentrytitle><phrase>snd_pcm_chmap_substream</phrase></refentrytitle>
6363 <manvolnum>9</manvolnum>
6364 <refmiscinfo class="version">4.4.14</refmiscinfo>
6365</refmeta>
6366<refnamediv>
6367 <refname>snd_pcm_chmap_substream</refname>
6368 <refpurpose>
6369     get the PCM substream assigned to the given chmap info
6370 </refpurpose>
6371</refnamediv>
6372<refsynopsisdiv>
6373 <title>Synopsis</title>
6374  <funcsynopsis><funcprototype>
6375   <funcdef>struct snd_pcm_substream * <function>snd_pcm_chmap_substream </function></funcdef>
6376   <paramdef>struct snd_pcm_chmap * <parameter>info</parameter></paramdef>
6377   <paramdef>unsigned int <parameter>idx</parameter></paramdef>
6378  </funcprototype></funcsynopsis>
6379</refsynopsisdiv>
6380<refsect1>
6381 <title>Arguments</title>
6382 <variablelist>
6383  <varlistentry>
6384   <term><parameter>info</parameter></term>
6385   <listitem>
6386    <para>
6387     chmap information
6388    </para>
6389   </listitem>
6390  </varlistentry>
6391  <varlistentry>
6392   <term><parameter>idx</parameter></term>
6393   <listitem>
6394    <para>
6395     the substream number index
6396    </para>
6397   </listitem>
6398  </varlistentry>
6399 </variablelist>
6400</refsect1>
6401</refentry>
6402
6403<refentry id="API-pcm-format-to-bits">
6404<refentryinfo>
6405 <title>LINUX</title>
6406 <productname>Kernel Hackers Manual</productname>
6407 <date>July 2017</date>
6408</refentryinfo>
6409<refmeta>
6410 <refentrytitle><phrase>pcm_format_to_bits</phrase></refentrytitle>
6411 <manvolnum>9</manvolnum>
6412 <refmiscinfo class="version">4.4.14</refmiscinfo>
6413</refmeta>
6414<refnamediv>
6415 <refname>pcm_format_to_bits</refname>
6416 <refpurpose>
6417     Strong-typed conversion of pcm_format to bitwise
6418 </refpurpose>
6419</refnamediv>
6420<refsynopsisdiv>
6421 <title>Synopsis</title>
6422  <funcsynopsis><funcprototype>
6423   <funcdef>u64 <function>pcm_format_to_bits </function></funcdef>
6424   <paramdef>snd_pcm_format_t <parameter>pcm_format</parameter></paramdef>
6425  </funcprototype></funcsynopsis>
6426</refsynopsisdiv>
6427<refsect1>
6428 <title>Arguments</title>
6429 <variablelist>
6430  <varlistentry>
6431   <term><parameter>pcm_format</parameter></term>
6432   <listitem>
6433    <para>
6434     PCM format
6435    </para>
6436   </listitem>
6437  </varlistentry>
6438 </variablelist>
6439</refsect1>
6440</refentry>
6441
6442     </sect1>
6443     <sect1><title>PCM Format Helpers</title>
6444<!-- sound/core/pcm_misc.c -->
6445<refentry id="API-snd-pcm-format-signed">
6446<refentryinfo>
6447 <title>LINUX</title>
6448 <productname>Kernel Hackers Manual</productname>
6449 <date>July 2017</date>
6450</refentryinfo>
6451<refmeta>
6452 <refentrytitle><phrase>snd_pcm_format_signed</phrase></refentrytitle>
6453 <manvolnum>9</manvolnum>
6454 <refmiscinfo class="version">4.4.14</refmiscinfo>
6455</refmeta>
6456<refnamediv>
6457 <refname>snd_pcm_format_signed</refname>
6458 <refpurpose>
6459  Check the PCM format is signed linear
6460 </refpurpose>
6461</refnamediv>
6462<refsynopsisdiv>
6463 <title>Synopsis</title>
6464  <funcsynopsis><funcprototype>
6465   <funcdef>int <function>snd_pcm_format_signed </function></funcdef>
6466   <paramdef>snd_pcm_format_t <parameter>format</parameter></paramdef>
6467  </funcprototype></funcsynopsis>
6468</refsynopsisdiv>
6469<refsect1>
6470 <title>Arguments</title>
6471 <variablelist>
6472  <varlistentry>
6473   <term><parameter>format</parameter></term>
6474   <listitem>
6475    <para>
6476     the format to check
6477    </para>
6478   </listitem>
6479  </varlistentry>
6480 </variablelist>
6481</refsect1>
6482<refsect1>
6483<title>Return</title>
6484<para>
6485   1 if the given PCM format is signed linear, 0 if unsigned
6486   linear, and a negative error code for non-linear formats.
6487</para>
6488</refsect1>
6489</refentry>
6490
6491<refentry id="API-snd-pcm-format-unsigned">
6492<refentryinfo>
6493 <title>LINUX</title>
6494 <productname>Kernel Hackers Manual</productname>
6495 <date>July 2017</date>
6496</refentryinfo>
6497<refmeta>
6498 <refentrytitle><phrase>snd_pcm_format_unsigned</phrase></refentrytitle>
6499 <manvolnum>9</manvolnum>
6500 <refmiscinfo class="version">4.4.14</refmiscinfo>
6501</refmeta>
6502<refnamediv>
6503 <refname>snd_pcm_format_unsigned</refname>
6504 <refpurpose>
6505     Check the PCM format is unsigned linear
6506 </refpurpose>
6507</refnamediv>
6508<refsynopsisdiv>
6509 <title>Synopsis</title>
6510  <funcsynopsis><funcprototype>
6511   <funcdef>int <function>snd_pcm_format_unsigned </function></funcdef>
6512   <paramdef>snd_pcm_format_t <parameter>format</parameter></paramdef>
6513  </funcprototype></funcsynopsis>
6514</refsynopsisdiv>
6515<refsect1>
6516 <title>Arguments</title>
6517 <variablelist>
6518  <varlistentry>
6519   <term><parameter>format</parameter></term>
6520   <listitem>
6521    <para>
6522     the format to check
6523    </para>
6524   </listitem>
6525  </varlistentry>
6526 </variablelist>
6527</refsect1>
6528<refsect1>
6529<title>Return</title>
6530<para>
6531   1 if the given PCM format is unsigned linear, 0 if signed
6532   linear, and a negative error code for non-linear formats.
6533</para>
6534</refsect1>
6535</refentry>
6536
6537<refentry id="API-snd-pcm-format-linear">
6538<refentryinfo>
6539 <title>LINUX</title>
6540 <productname>Kernel Hackers Manual</productname>
6541 <date>July 2017</date>
6542</refentryinfo>
6543<refmeta>
6544 <refentrytitle><phrase>snd_pcm_format_linear</phrase></refentrytitle>
6545 <manvolnum>9</manvolnum>
6546 <refmiscinfo class="version">4.4.14</refmiscinfo>
6547</refmeta>
6548<refnamediv>
6549 <refname>snd_pcm_format_linear</refname>
6550 <refpurpose>
6551     Check the PCM format is linear
6552 </refpurpose>
6553</refnamediv>
6554<refsynopsisdiv>
6555 <title>Synopsis</title>
6556  <funcsynopsis><funcprototype>
6557   <funcdef>int <function>snd_pcm_format_linear </function></funcdef>
6558   <paramdef>snd_pcm_format_t <parameter>format</parameter></paramdef>
6559  </funcprototype></funcsynopsis>
6560</refsynopsisdiv>
6561<refsect1>
6562 <title>Arguments</title>
6563 <variablelist>
6564  <varlistentry>
6565   <term><parameter>format</parameter></term>
6566   <listitem>
6567    <para>
6568     the format to check
6569    </para>
6570   </listitem>
6571  </varlistentry>
6572 </variablelist>
6573</refsect1>
6574<refsect1>
6575<title>Return</title>
6576<para>
6577   1 if the given PCM format is linear, 0 if not.
6578</para>
6579</refsect1>
6580</refentry>
6581
6582<refentry id="API-snd-pcm-format-little-endian">
6583<refentryinfo>
6584 <title>LINUX</title>
6585 <productname>Kernel Hackers Manual</productname>
6586 <date>July 2017</date>
6587</refentryinfo>
6588<refmeta>
6589 <refentrytitle><phrase>snd_pcm_format_little_endian</phrase></refentrytitle>
6590 <manvolnum>9</manvolnum>
6591 <refmiscinfo class="version">4.4.14</refmiscinfo>
6592</refmeta>
6593<refnamediv>
6594 <refname>snd_pcm_format_little_endian</refname>
6595 <refpurpose>
6596     Check the PCM format is little-endian
6597 </refpurpose>
6598</refnamediv>
6599<refsynopsisdiv>
6600 <title>Synopsis</title>
6601  <funcsynopsis><funcprototype>
6602   <funcdef>int <function>snd_pcm_format_little_endian </function></funcdef>
6603   <paramdef>snd_pcm_format_t <parameter>format</parameter></paramdef>
6604  </funcprototype></funcsynopsis>
6605</refsynopsisdiv>
6606<refsect1>
6607 <title>Arguments</title>
6608 <variablelist>
6609  <varlistentry>
6610   <term><parameter>format</parameter></term>
6611   <listitem>
6612    <para>
6613     the format to check
6614    </para>
6615   </listitem>
6616  </varlistentry>
6617 </variablelist>
6618</refsect1>
6619<refsect1>
6620<title>Return</title>
6621<para>
6622   1 if the given PCM format is little-endian, 0 if
6623   big-endian, or a negative error code if endian not specified.
6624</para>
6625</refsect1>
6626</refentry>
6627
6628<refentry id="API-snd-pcm-format-big-endian">
6629<refentryinfo>
6630 <title>LINUX</title>
6631 <productname>Kernel Hackers Manual</productname>
6632 <date>July 2017</date>
6633</refentryinfo>
6634<refmeta>
6635 <refentrytitle><phrase>snd_pcm_format_big_endian</phrase></refentrytitle>
6636 <manvolnum>9</manvolnum>
6637 <refmiscinfo class="version">4.4.14</refmiscinfo>
6638</refmeta>
6639<refnamediv>
6640 <refname>snd_pcm_format_big_endian</refname>
6641 <refpurpose>
6642     Check the PCM format is big-endian
6643 </refpurpose>
6644</refnamediv>
6645<refsynopsisdiv>
6646 <title>Synopsis</title>
6647  <funcsynopsis><funcprototype>
6648   <funcdef>int <function>snd_pcm_format_big_endian </function></funcdef>
6649   <paramdef>snd_pcm_format_t <parameter>format</parameter></paramdef>
6650  </funcprototype></funcsynopsis>
6651</refsynopsisdiv>
6652<refsect1>
6653 <title>Arguments</title>
6654 <variablelist>
6655  <varlistentry>
6656   <term><parameter>format</parameter></term>
6657   <listitem>
6658    <para>
6659     the format to check
6660    </para>
6661   </listitem>
6662  </varlistentry>
6663 </variablelist>
6664</refsect1>
6665<refsect1>
6666<title>Return</title>
6667<para>
6668   1 if the given PCM format is big-endian, 0 if
6669   little-endian, or a negative error code if endian not specified.
6670</para>
6671</refsect1>
6672</refentry>
6673
6674<refentry id="API-snd-pcm-format-width">
6675<refentryinfo>
6676 <title>LINUX</title>
6677 <productname>Kernel Hackers Manual</productname>
6678 <date>July 2017</date>
6679</refentryinfo>
6680<refmeta>
6681 <refentrytitle><phrase>snd_pcm_format_width</phrase></refentrytitle>
6682 <manvolnum>9</manvolnum>
6683 <refmiscinfo class="version">4.4.14</refmiscinfo>
6684</refmeta>
6685<refnamediv>
6686 <refname>snd_pcm_format_width</refname>
6687 <refpurpose>
6688     return the bit-width of the format
6689 </refpurpose>
6690</refnamediv>
6691<refsynopsisdiv>
6692 <title>Synopsis</title>
6693  <funcsynopsis><funcprototype>
6694   <funcdef>int <function>snd_pcm_format_width </function></funcdef>
6695   <paramdef>snd_pcm_format_t <parameter>format</parameter></paramdef>
6696  </funcprototype></funcsynopsis>
6697</refsynopsisdiv>
6698<refsect1>
6699 <title>Arguments</title>
6700 <variablelist>
6701  <varlistentry>
6702   <term><parameter>format</parameter></term>
6703   <listitem>
6704    <para>
6705     the format to check
6706    </para>
6707   </listitem>
6708  </varlistentry>
6709 </variablelist>
6710</refsect1>
6711<refsect1>
6712<title>Return</title>
6713<para>
6714   The bit-width of the format, or a negative error code
6715   if unknown format.
6716</para>
6717</refsect1>
6718</refentry>
6719
6720<refentry id="API-snd-pcm-format-physical-width">
6721<refentryinfo>
6722 <title>LINUX</title>
6723 <productname>Kernel Hackers Manual</productname>
6724 <date>July 2017</date>
6725</refentryinfo>
6726<refmeta>
6727 <refentrytitle><phrase>snd_pcm_format_physical_width</phrase></refentrytitle>
6728 <manvolnum>9</manvolnum>
6729 <refmiscinfo class="version">4.4.14</refmiscinfo>
6730</refmeta>
6731<refnamediv>
6732 <refname>snd_pcm_format_physical_width</refname>
6733 <refpurpose>
6734     return the physical bit-width of the format
6735 </refpurpose>
6736</refnamediv>
6737<refsynopsisdiv>
6738 <title>Synopsis</title>
6739  <funcsynopsis><funcprototype>
6740   <funcdef>int <function>snd_pcm_format_physical_width </function></funcdef>
6741   <paramdef>snd_pcm_format_t <parameter>format</parameter></paramdef>
6742  </funcprototype></funcsynopsis>
6743</refsynopsisdiv>
6744<refsect1>
6745 <title>Arguments</title>
6746 <variablelist>
6747  <varlistentry>
6748   <term><parameter>format</parameter></term>
6749   <listitem>
6750    <para>
6751     the format to check
6752    </para>
6753   </listitem>
6754  </varlistentry>
6755 </variablelist>
6756</refsect1>
6757<refsect1>
6758<title>Return</title>
6759<para>
6760   The physical bit-width of the format, or a negative error code
6761   if unknown format.
6762</para>
6763</refsect1>
6764</refentry>
6765
6766<refentry id="API-snd-pcm-format-size">
6767<refentryinfo>
6768 <title>LINUX</title>
6769 <productname>Kernel Hackers Manual</productname>
6770 <date>July 2017</date>
6771</refentryinfo>
6772<refmeta>
6773 <refentrytitle><phrase>snd_pcm_format_size</phrase></refentrytitle>
6774 <manvolnum>9</manvolnum>
6775 <refmiscinfo class="version">4.4.14</refmiscinfo>
6776</refmeta>
6777<refnamediv>
6778 <refname>snd_pcm_format_size</refname>
6779 <refpurpose>
6780     return the byte size of samples on the given format
6781 </refpurpose>
6782</refnamediv>
6783<refsynopsisdiv>
6784 <title>Synopsis</title>
6785  <funcsynopsis><funcprototype>
6786   <funcdef>ssize_t <function>snd_pcm_format_size </function></funcdef>
6787   <paramdef>snd_pcm_format_t <parameter>format</parameter></paramdef>
6788   <paramdef>size_t <parameter>samples</parameter></paramdef>
6789  </funcprototype></funcsynopsis>
6790</refsynopsisdiv>
6791<refsect1>
6792 <title>Arguments</title>
6793 <variablelist>
6794  <varlistentry>
6795   <term><parameter>format</parameter></term>
6796   <listitem>
6797    <para>
6798     the format to check
6799    </para>
6800   </listitem>
6801  </varlistentry>
6802  <varlistentry>
6803   <term><parameter>samples</parameter></term>
6804   <listitem>
6805    <para>
6806     sampling rate
6807    </para>
6808   </listitem>
6809  </varlistentry>
6810 </variablelist>
6811</refsect1>
6812<refsect1>
6813<title>Return</title>
6814<para>
6815   The byte size of the given samples for the format, or a
6816   negative error code if unknown format.
6817</para>
6818</refsect1>
6819</refentry>
6820
6821<refentry id="API-snd-pcm-format-silence-64">
6822<refentryinfo>
6823 <title>LINUX</title>
6824 <productname>Kernel Hackers Manual</productname>
6825 <date>July 2017</date>
6826</refentryinfo>
6827<refmeta>
6828 <refentrytitle><phrase>snd_pcm_format_silence_64</phrase></refentrytitle>
6829 <manvolnum>9</manvolnum>
6830 <refmiscinfo class="version">4.4.14</refmiscinfo>
6831</refmeta>
6832<refnamediv>
6833 <refname>snd_pcm_format_silence_64</refname>
6834 <refpurpose>
6835     return the silent data in 8 bytes array
6836 </refpurpose>
6837</refnamediv>
6838<refsynopsisdiv>
6839 <title>Synopsis</title>
6840  <funcsynopsis><funcprototype>
6841   <funcdef>const unsigned char * <function>snd_pcm_format_silence_64 </function></funcdef>
6842   <paramdef>snd_pcm_format_t <parameter>format</parameter></paramdef>
6843  </funcprototype></funcsynopsis>
6844</refsynopsisdiv>
6845<refsect1>
6846 <title>Arguments</title>
6847 <variablelist>
6848  <varlistentry>
6849   <term><parameter>format</parameter></term>
6850   <listitem>
6851    <para>
6852     the format to check
6853    </para>
6854   </listitem>
6855  </varlistentry>
6856 </variablelist>
6857</refsect1>
6858<refsect1>
6859<title>Return</title>
6860<para>
6861   The format pattern to fill or <constant>NULL</constant> if error.
6862</para>
6863</refsect1>
6864</refentry>
6865
6866<refentry id="API-snd-pcm-format-set-silence">
6867<refentryinfo>
6868 <title>LINUX</title>
6869 <productname>Kernel Hackers Manual</productname>
6870 <date>July 2017</date>
6871</refentryinfo>
6872<refmeta>
6873 <refentrytitle><phrase>snd_pcm_format_set_silence</phrase></refentrytitle>
6874 <manvolnum>9</manvolnum>
6875 <refmiscinfo class="version">4.4.14</refmiscinfo>
6876</refmeta>
6877<refnamediv>
6878 <refname>snd_pcm_format_set_silence</refname>
6879 <refpurpose>
6880     set the silence data on the buffer
6881 </refpurpose>
6882</refnamediv>
6883<refsynopsisdiv>
6884 <title>Synopsis</title>
6885  <funcsynopsis><funcprototype>
6886   <funcdef>int <function>snd_pcm_format_set_silence </function></funcdef>
6887   <paramdef>snd_pcm_format_t <parameter>format</parameter></paramdef>
6888   <paramdef>void * <parameter>data</parameter></paramdef>
6889   <paramdef>unsigned int <parameter>samples</parameter></paramdef>
6890  </funcprototype></funcsynopsis>
6891</refsynopsisdiv>
6892<refsect1>
6893 <title>Arguments</title>
6894 <variablelist>
6895  <varlistentry>
6896   <term><parameter>format</parameter></term>
6897   <listitem>
6898    <para>
6899     the PCM format
6900    </para>
6901   </listitem>
6902  </varlistentry>
6903  <varlistentry>
6904   <term><parameter>data</parameter></term>
6905   <listitem>
6906    <para>
6907     the buffer pointer
6908    </para>
6909   </listitem>
6910  </varlistentry>
6911  <varlistentry>
6912   <term><parameter>samples</parameter></term>
6913   <listitem>
6914    <para>
6915     the number of samples to set silence
6916    </para>
6917   </listitem>
6918  </varlistentry>
6919 </variablelist>
6920</refsect1>
6921<refsect1>
6922<title>Description</title>
6923<para>
6924   Sets the silence data on the buffer for the given samples.
6925</para>
6926</refsect1>
6927<refsect1>
6928<title>Return</title>
6929<para>
6930   Zero if successful, or a negative error code on failure.
6931</para>
6932</refsect1>
6933</refentry>
6934
6935<refentry id="API-snd-pcm-limit-hw-rates">
6936<refentryinfo>
6937 <title>LINUX</title>
6938 <productname>Kernel Hackers Manual</productname>
6939 <date>July 2017</date>
6940</refentryinfo>
6941<refmeta>
6942 <refentrytitle><phrase>snd_pcm_limit_hw_rates</phrase></refentrytitle>
6943 <manvolnum>9</manvolnum>
6944 <refmiscinfo class="version">4.4.14</refmiscinfo>
6945</refmeta>
6946<refnamediv>
6947 <refname>snd_pcm_limit_hw_rates</refname>
6948 <refpurpose>
6949     determine rate_min/rate_max fields
6950 </refpurpose>
6951</refnamediv>
6952<refsynopsisdiv>
6953 <title>Synopsis</title>
6954  <funcsynopsis><funcprototype>
6955   <funcdef>int <function>snd_pcm_limit_hw_rates </function></funcdef>
6956   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
6957  </funcprototype></funcsynopsis>
6958</refsynopsisdiv>
6959<refsect1>
6960 <title>Arguments</title>
6961 <variablelist>
6962  <varlistentry>
6963   <term><parameter>runtime</parameter></term>
6964   <listitem>
6965    <para>
6966     the runtime instance
6967    </para>
6968   </listitem>
6969  </varlistentry>
6970 </variablelist>
6971</refsect1>
6972<refsect1>
6973<title>Description</title>
6974<para>
6975   Determines the rate_min and rate_max fields from the rates bits of
6976   the given runtime-&gt;hw.
6977</para>
6978</refsect1>
6979<refsect1>
6980<title>Return</title>
6981<para>
6982   Zero if successful.
6983</para>
6984</refsect1>
6985</refentry>
6986
6987<refentry id="API-snd-pcm-rate-to-rate-bit">
6988<refentryinfo>
6989 <title>LINUX</title>
6990 <productname>Kernel Hackers Manual</productname>
6991 <date>July 2017</date>
6992</refentryinfo>
6993<refmeta>
6994 <refentrytitle><phrase>snd_pcm_rate_to_rate_bit</phrase></refentrytitle>
6995 <manvolnum>9</manvolnum>
6996 <refmiscinfo class="version">4.4.14</refmiscinfo>
6997</refmeta>
6998<refnamediv>
6999 <refname>snd_pcm_rate_to_rate_bit</refname>
7000 <refpurpose>
7001     converts sample rate to SNDRV_PCM_RATE_xxx bit
7002 </refpurpose>
7003</refnamediv>
7004<refsynopsisdiv>
7005 <title>Synopsis</title>
7006  <funcsynopsis><funcprototype>
7007   <funcdef>unsigned int <function>snd_pcm_rate_to_rate_bit </function></funcdef>
7008   <paramdef>unsigned int <parameter>rate</parameter></paramdef>
7009  </funcprototype></funcsynopsis>
7010</refsynopsisdiv>
7011<refsect1>
7012 <title>Arguments</title>
7013 <variablelist>
7014  <varlistentry>
7015   <term><parameter>rate</parameter></term>
7016   <listitem>
7017    <para>
7018     the sample rate to convert
7019    </para>
7020   </listitem>
7021  </varlistentry>
7022 </variablelist>
7023</refsect1>
7024<refsect1>
7025<title>Return</title>
7026<para>
7027   The SNDRV_PCM_RATE_xxx flag that corresponds to the given rate, or
7028   SNDRV_PCM_RATE_KNOT for an unknown rate.
7029</para>
7030</refsect1>
7031</refentry>
7032
7033<refentry id="API-snd-pcm-rate-bit-to-rate">
7034<refentryinfo>
7035 <title>LINUX</title>
7036 <productname>Kernel Hackers Manual</productname>
7037 <date>July 2017</date>
7038</refentryinfo>
7039<refmeta>
7040 <refentrytitle><phrase>snd_pcm_rate_bit_to_rate</phrase></refentrytitle>
7041 <manvolnum>9</manvolnum>
7042 <refmiscinfo class="version">4.4.14</refmiscinfo>
7043</refmeta>
7044<refnamediv>
7045 <refname>snd_pcm_rate_bit_to_rate</refname>
7046 <refpurpose>
7047     converts SNDRV_PCM_RATE_xxx bit to sample rate
7048 </refpurpose>
7049</refnamediv>
7050<refsynopsisdiv>
7051 <title>Synopsis</title>
7052  <funcsynopsis><funcprototype>
7053   <funcdef>unsigned int <function>snd_pcm_rate_bit_to_rate </function></funcdef>
7054   <paramdef>unsigned int <parameter>rate_bit</parameter></paramdef>
7055  </funcprototype></funcsynopsis>
7056</refsynopsisdiv>
7057<refsect1>
7058 <title>Arguments</title>
7059 <variablelist>
7060  <varlistentry>
7061   <term><parameter>rate_bit</parameter></term>
7062   <listitem>
7063    <para>
7064     the rate bit to convert
7065    </para>
7066   </listitem>
7067  </varlistentry>
7068 </variablelist>
7069</refsect1>
7070<refsect1>
7071<title>Return</title>
7072<para>
7073   The sample rate that corresponds to the given SNDRV_PCM_RATE_xxx flag
7074   or 0 for an unknown rate bit.
7075</para>
7076</refsect1>
7077</refentry>
7078
7079<refentry id="API-snd-pcm-rate-mask-intersect">
7080<refentryinfo>
7081 <title>LINUX</title>
7082 <productname>Kernel Hackers Manual</productname>
7083 <date>July 2017</date>
7084</refentryinfo>
7085<refmeta>
7086 <refentrytitle><phrase>snd_pcm_rate_mask_intersect</phrase></refentrytitle>
7087 <manvolnum>9</manvolnum>
7088 <refmiscinfo class="version">4.4.14</refmiscinfo>
7089</refmeta>
7090<refnamediv>
7091 <refname>snd_pcm_rate_mask_intersect</refname>
7092 <refpurpose>
7093     computes the intersection between two rate masks
7094 </refpurpose>
7095</refnamediv>
7096<refsynopsisdiv>
7097 <title>Synopsis</title>
7098  <funcsynopsis><funcprototype>
7099   <funcdef>unsigned int <function>snd_pcm_rate_mask_intersect </function></funcdef>
7100   <paramdef>unsigned int <parameter>rates_a</parameter></paramdef>
7101   <paramdef>unsigned int <parameter>rates_b</parameter></paramdef>
7102  </funcprototype></funcsynopsis>
7103</refsynopsisdiv>
7104<refsect1>
7105 <title>Arguments</title>
7106 <variablelist>
7107  <varlistentry>
7108   <term><parameter>rates_a</parameter></term>
7109   <listitem>
7110    <para>
7111     The first rate mask
7112    </para>
7113   </listitem>
7114  </varlistentry>
7115  <varlistentry>
7116   <term><parameter>rates_b</parameter></term>
7117   <listitem>
7118    <para>
7119     The second rate mask
7120    </para>
7121   </listitem>
7122  </varlistentry>
7123 </variablelist>
7124</refsect1>
7125<refsect1>
7126<title>Description</title>
7127<para>
7128   This function computes the rates that are supported by both rate masks passed
7129   to the function. It will take care of the special handling of
7130   SNDRV_PCM_RATE_CONTINUOUS and SNDRV_PCM_RATE_KNOT.
7131</para>
7132</refsect1>
7133<refsect1>
7134<title>Return</title>
7135<para>
7136   A rate mask containing the rates that are supported by both rates_a
7137   and rates_b.
7138</para>
7139</refsect1>
7140</refentry>
7141
7142     </sect1>
7143     <sect1><title>PCM Memory Management</title>
7144<!-- sound/core/pcm_memory.c -->
7145<refentry id="API-snd-pcm-lib-preallocate-free-for-all">
7146<refentryinfo>
7147 <title>LINUX</title>
7148 <productname>Kernel Hackers Manual</productname>
7149 <date>July 2017</date>
7150</refentryinfo>
7151<refmeta>
7152 <refentrytitle><phrase>snd_pcm_lib_preallocate_free_for_all</phrase></refentrytitle>
7153 <manvolnum>9</manvolnum>
7154 <refmiscinfo class="version">4.4.14</refmiscinfo>
7155</refmeta>
7156<refnamediv>
7157 <refname>snd_pcm_lib_preallocate_free_for_all</refname>
7158 <refpurpose>
7159  release all pre-allocated buffers on the pcm
7160 </refpurpose>
7161</refnamediv>
7162<refsynopsisdiv>
7163 <title>Synopsis</title>
7164  <funcsynopsis><funcprototype>
7165   <funcdef>int <function>snd_pcm_lib_preallocate_free_for_all </function></funcdef>
7166   <paramdef>struct snd_pcm * <parameter>pcm</parameter></paramdef>
7167  </funcprototype></funcsynopsis>
7168</refsynopsisdiv>
7169<refsect1>
7170 <title>Arguments</title>
7171 <variablelist>
7172  <varlistentry>
7173   <term><parameter>pcm</parameter></term>
7174   <listitem>
7175    <para>
7176     the pcm instance
7177    </para>
7178   </listitem>
7179  </varlistentry>
7180 </variablelist>
7181</refsect1>
7182<refsect1>
7183<title>Description</title>
7184<para>
7185   Releases all the pre-allocated buffers on the given pcm.
7186</para>
7187</refsect1>
7188<refsect1>
7189<title>Return</title>
7190<para>
7191   Zero if successful, or a negative error code on failure.
7192</para>
7193</refsect1>
7194</refentry>
7195
7196<refentry id="API-snd-pcm-lib-preallocate-pages">
7197<refentryinfo>
7198 <title>LINUX</title>
7199 <productname>Kernel Hackers Manual</productname>
7200 <date>July 2017</date>
7201</refentryinfo>
7202<refmeta>
7203 <refentrytitle><phrase>snd_pcm_lib_preallocate_pages</phrase></refentrytitle>
7204 <manvolnum>9</manvolnum>
7205 <refmiscinfo class="version">4.4.14</refmiscinfo>
7206</refmeta>
7207<refnamediv>
7208 <refname>snd_pcm_lib_preallocate_pages</refname>
7209 <refpurpose>
7210     pre-allocation for the given DMA type
7211 </refpurpose>
7212</refnamediv>
7213<refsynopsisdiv>
7214 <title>Synopsis</title>
7215  <funcsynopsis><funcprototype>
7216   <funcdef>int <function>snd_pcm_lib_preallocate_pages </function></funcdef>
7217   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
7218   <paramdef>int <parameter>type</parameter></paramdef>
7219   <paramdef>struct device * <parameter>data</parameter></paramdef>
7220   <paramdef>size_t <parameter>size</parameter></paramdef>
7221   <paramdef>size_t <parameter>max</parameter></paramdef>
7222  </funcprototype></funcsynopsis>
7223</refsynopsisdiv>
7224<refsect1>
7225 <title>Arguments</title>
7226 <variablelist>
7227  <varlistentry>
7228   <term><parameter>substream</parameter></term>
7229   <listitem>
7230    <para>
7231     the pcm substream instance
7232    </para>
7233   </listitem>
7234  </varlistentry>
7235  <varlistentry>
7236   <term><parameter>type</parameter></term>
7237   <listitem>
7238    <para>
7239     DMA type (SNDRV_DMA_TYPE_*)
7240    </para>
7241   </listitem>
7242  </varlistentry>
7243  <varlistentry>
7244   <term><parameter>data</parameter></term>
7245   <listitem>
7246    <para>
7247     DMA type dependent data
7248    </para>
7249   </listitem>
7250  </varlistentry>
7251  <varlistentry>
7252   <term><parameter>size</parameter></term>
7253   <listitem>
7254    <para>
7255     the requested pre-allocation size in bytes
7256    </para>
7257   </listitem>
7258  </varlistentry>
7259  <varlistentry>
7260   <term><parameter>max</parameter></term>
7261   <listitem>
7262    <para>
7263     the max. allowed pre-allocation size
7264    </para>
7265   </listitem>
7266  </varlistentry>
7267 </variablelist>
7268</refsect1>
7269<refsect1>
7270<title>Description</title>
7271<para>
7272   Do pre-allocation for the given DMA buffer type.
7273</para>
7274</refsect1>
7275<refsect1>
7276<title>Return</title>
7277<para>
7278   Zero if successful, or a negative error code on failure.
7279</para>
7280</refsect1>
7281</refentry>
7282
7283<refentry id="API-snd-pcm-lib-preallocate-pages-for-all">
7284<refentryinfo>
7285 <title>LINUX</title>
7286 <productname>Kernel Hackers Manual</productname>
7287 <date>July 2017</date>
7288</refentryinfo>
7289<refmeta>
7290 <refentrytitle><phrase>snd_pcm_lib_preallocate_pages_for_all</phrase></refentrytitle>
7291 <manvolnum>9</manvolnum>
7292 <refmiscinfo class="version">4.4.14</refmiscinfo>
7293</refmeta>
7294<refnamediv>
7295 <refname>snd_pcm_lib_preallocate_pages_for_all</refname>
7296 <refpurpose>
7297     pre-allocation for continuous memory type (all substreams)
7298 </refpurpose>
7299</refnamediv>
7300<refsynopsisdiv>
7301 <title>Synopsis</title>
7302  <funcsynopsis><funcprototype>
7303   <funcdef>int <function>snd_pcm_lib_preallocate_pages_for_all </function></funcdef>
7304   <paramdef>struct snd_pcm * <parameter>pcm</parameter></paramdef>
7305   <paramdef>int <parameter>type</parameter></paramdef>
7306   <paramdef>void * <parameter>data</parameter></paramdef>
7307   <paramdef>size_t <parameter>size</parameter></paramdef>
7308   <paramdef>size_t <parameter>max</parameter></paramdef>
7309  </funcprototype></funcsynopsis>
7310</refsynopsisdiv>
7311<refsect1>
7312 <title>Arguments</title>
7313 <variablelist>
7314  <varlistentry>
7315   <term><parameter>pcm</parameter></term>
7316   <listitem>
7317    <para>
7318     the pcm instance
7319    </para>
7320   </listitem>
7321  </varlistentry>
7322  <varlistentry>
7323   <term><parameter>type</parameter></term>
7324   <listitem>
7325    <para>
7326     DMA type (SNDRV_DMA_TYPE_*)
7327    </para>
7328   </listitem>
7329  </varlistentry>
7330  <varlistentry>
7331   <term><parameter>data</parameter></term>
7332   <listitem>
7333    <para>
7334     DMA type dependent data
7335    </para>
7336   </listitem>
7337  </varlistentry>
7338  <varlistentry>
7339   <term><parameter>size</parameter></term>
7340   <listitem>
7341    <para>
7342     the requested pre-allocation size in bytes
7343    </para>
7344   </listitem>
7345  </varlistentry>
7346  <varlistentry>
7347   <term><parameter>max</parameter></term>
7348   <listitem>
7349    <para>
7350     the max. allowed pre-allocation size
7351    </para>
7352   </listitem>
7353  </varlistentry>
7354 </variablelist>
7355</refsect1>
7356<refsect1>
7357<title>Description</title>
7358<para>
7359   Do pre-allocation to all substreams of the given pcm for the
7360   specified DMA type.
7361</para>
7362</refsect1>
7363<refsect1>
7364<title>Return</title>
7365<para>
7366   Zero if successful, or a negative error code on failure.
7367</para>
7368</refsect1>
7369</refentry>
7370
7371<refentry id="API-snd-pcm-sgbuf-ops-page">
7372<refentryinfo>
7373 <title>LINUX</title>
7374 <productname>Kernel Hackers Manual</productname>
7375 <date>July 2017</date>
7376</refentryinfo>
7377<refmeta>
7378 <refentrytitle><phrase>snd_pcm_sgbuf_ops_page</phrase></refentrytitle>
7379 <manvolnum>9</manvolnum>
7380 <refmiscinfo class="version">4.4.14</refmiscinfo>
7381</refmeta>
7382<refnamediv>
7383 <refname>snd_pcm_sgbuf_ops_page</refname>
7384 <refpurpose>
7385     get the page struct at the given offset
7386 </refpurpose>
7387</refnamediv>
7388<refsynopsisdiv>
7389 <title>Synopsis</title>
7390  <funcsynopsis><funcprototype>
7391   <funcdef>struct page * <function>snd_pcm_sgbuf_ops_page </function></funcdef>
7392   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
7393   <paramdef>unsigned long <parameter>offset</parameter></paramdef>
7394  </funcprototype></funcsynopsis>
7395</refsynopsisdiv>
7396<refsect1>
7397 <title>Arguments</title>
7398 <variablelist>
7399  <varlistentry>
7400   <term><parameter>substream</parameter></term>
7401   <listitem>
7402    <para>
7403     the pcm substream instance
7404    </para>
7405   </listitem>
7406  </varlistentry>
7407  <varlistentry>
7408   <term><parameter>offset</parameter></term>
7409   <listitem>
7410    <para>
7411     the buffer offset
7412    </para>
7413   </listitem>
7414  </varlistentry>
7415 </variablelist>
7416</refsect1>
7417<refsect1>
7418<title>Description</title>
7419<para>
7420   Used as the page callback of PCM ops.
7421</para>
7422</refsect1>
7423<refsect1>
7424<title>Return</title>
7425<para>
7426   The page struct at the given buffer offset. <constant>NULL</constant> on failure.
7427</para>
7428</refsect1>
7429</refentry>
7430
7431<refentry id="API-snd-pcm-lib-malloc-pages">
7432<refentryinfo>
7433 <title>LINUX</title>
7434 <productname>Kernel Hackers Manual</productname>
7435 <date>July 2017</date>
7436</refentryinfo>
7437<refmeta>
7438 <refentrytitle><phrase>snd_pcm_lib_malloc_pages</phrase></refentrytitle>
7439 <manvolnum>9</manvolnum>
7440 <refmiscinfo class="version">4.4.14</refmiscinfo>
7441</refmeta>
7442<refnamediv>
7443 <refname>snd_pcm_lib_malloc_pages</refname>
7444 <refpurpose>
7445     allocate the DMA buffer
7446 </refpurpose>
7447</refnamediv>
7448<refsynopsisdiv>
7449 <title>Synopsis</title>
7450  <funcsynopsis><funcprototype>
7451   <funcdef>int <function>snd_pcm_lib_malloc_pages </function></funcdef>
7452   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
7453   <paramdef>size_t <parameter>size</parameter></paramdef>
7454  </funcprototype></funcsynopsis>
7455</refsynopsisdiv>
7456<refsect1>
7457 <title>Arguments</title>
7458 <variablelist>
7459  <varlistentry>
7460   <term><parameter>substream</parameter></term>
7461   <listitem>
7462    <para>
7463     the substream to allocate the DMA buffer to
7464    </para>
7465   </listitem>
7466  </varlistentry>
7467  <varlistentry>
7468   <term><parameter>size</parameter></term>
7469   <listitem>
7470    <para>
7471     the requested buffer size in bytes
7472    </para>
7473   </listitem>
7474  </varlistentry>
7475 </variablelist>
7476</refsect1>
7477<refsect1>
7478<title>Description</title>
7479<para>
7480   Allocates the DMA buffer on the BUS type given earlier to
7481   <function>snd_pcm_lib_preallocate_xxx_pages</function>.
7482</para>
7483</refsect1>
7484<refsect1>
7485<title>Return</title>
7486<para>
7487   1 if the buffer is changed, 0 if not changed, or a negative
7488   code on failure.
7489</para>
7490</refsect1>
7491</refentry>
7492
7493<refentry id="API-snd-pcm-lib-free-pages">
7494<refentryinfo>
7495 <title>LINUX</title>
7496 <productname>Kernel Hackers Manual</productname>
7497 <date>July 2017</date>
7498</refentryinfo>
7499<refmeta>
7500 <refentrytitle><phrase>snd_pcm_lib_free_pages</phrase></refentrytitle>
7501 <manvolnum>9</manvolnum>
7502 <refmiscinfo class="version">4.4.14</refmiscinfo>
7503</refmeta>
7504<refnamediv>
7505 <refname>snd_pcm_lib_free_pages</refname>
7506 <refpurpose>
7507     release the allocated DMA buffer.
7508 </refpurpose>
7509</refnamediv>
7510<refsynopsisdiv>
7511 <title>Synopsis</title>
7512  <funcsynopsis><funcprototype>
7513   <funcdef>int <function>snd_pcm_lib_free_pages </function></funcdef>
7514   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
7515  </funcprototype></funcsynopsis>
7516</refsynopsisdiv>
7517<refsect1>
7518 <title>Arguments</title>
7519 <variablelist>
7520  <varlistentry>
7521   <term><parameter>substream</parameter></term>
7522   <listitem>
7523    <para>
7524     the substream to release the DMA buffer
7525    </para>
7526   </listitem>
7527  </varlistentry>
7528 </variablelist>
7529</refsect1>
7530<refsect1>
7531<title>Description</title>
7532<para>
7533   Releases the DMA buffer allocated via <function>snd_pcm_lib_malloc_pages</function>.
7534</para>
7535</refsect1>
7536<refsect1>
7537<title>Return</title>
7538<para>
7539   Zero if successful, or a negative error code on failure.
7540</para>
7541</refsect1>
7542</refentry>
7543
7544<refentry id="API-snd-pcm-lib-free-vmalloc-buffer">
7545<refentryinfo>
7546 <title>LINUX</title>
7547 <productname>Kernel Hackers Manual</productname>
7548 <date>July 2017</date>
7549</refentryinfo>
7550<refmeta>
7551 <refentrytitle><phrase>snd_pcm_lib_free_vmalloc_buffer</phrase></refentrytitle>
7552 <manvolnum>9</manvolnum>
7553 <refmiscinfo class="version">4.4.14</refmiscinfo>
7554</refmeta>
7555<refnamediv>
7556 <refname>snd_pcm_lib_free_vmalloc_buffer</refname>
7557 <refpurpose>
7558     free vmalloc buffer
7559 </refpurpose>
7560</refnamediv>
7561<refsynopsisdiv>
7562 <title>Synopsis</title>
7563  <funcsynopsis><funcprototype>
7564   <funcdef>int <function>snd_pcm_lib_free_vmalloc_buffer </function></funcdef>
7565   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
7566  </funcprototype></funcsynopsis>
7567</refsynopsisdiv>
7568<refsect1>
7569 <title>Arguments</title>
7570 <variablelist>
7571  <varlistentry>
7572   <term><parameter>substream</parameter></term>
7573   <listitem>
7574    <para>
7575     the substream with a buffer allocated by
7576     <function>snd_pcm_lib_alloc_vmalloc_buffer</function>
7577    </para>
7578   </listitem>
7579  </varlistentry>
7580 </variablelist>
7581</refsect1>
7582<refsect1>
7583<title>Return</title>
7584<para>
7585   Zero if successful, or a negative error code on failure.
7586</para>
7587</refsect1>
7588</refentry>
7589
7590<refentry id="API-snd-pcm-lib-get-vmalloc-page">
7591<refentryinfo>
7592 <title>LINUX</title>
7593 <productname>Kernel Hackers Manual</productname>
7594 <date>July 2017</date>
7595</refentryinfo>
7596<refmeta>
7597 <refentrytitle><phrase>snd_pcm_lib_get_vmalloc_page</phrase></refentrytitle>
7598 <manvolnum>9</manvolnum>
7599 <refmiscinfo class="version">4.4.14</refmiscinfo>
7600</refmeta>
7601<refnamediv>
7602 <refname>snd_pcm_lib_get_vmalloc_page</refname>
7603 <refpurpose>
7604     map vmalloc buffer offset to page struct
7605 </refpurpose>
7606</refnamediv>
7607<refsynopsisdiv>
7608 <title>Synopsis</title>
7609  <funcsynopsis><funcprototype>
7610   <funcdef>struct page * <function>snd_pcm_lib_get_vmalloc_page </function></funcdef>
7611   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
7612   <paramdef>unsigned long <parameter>offset</parameter></paramdef>
7613  </funcprototype></funcsynopsis>
7614</refsynopsisdiv>
7615<refsect1>
7616 <title>Arguments</title>
7617 <variablelist>
7618  <varlistentry>
7619   <term><parameter>substream</parameter></term>
7620   <listitem>
7621    <para>
7622     the substream with a buffer allocated by
7623     <function>snd_pcm_lib_alloc_vmalloc_buffer</function>
7624    </para>
7625   </listitem>
7626  </varlistentry>
7627  <varlistentry>
7628   <term><parameter>offset</parameter></term>
7629   <listitem>
7630    <para>
7631     offset in the buffer
7632    </para>
7633   </listitem>
7634  </varlistentry>
7635 </variablelist>
7636</refsect1>
7637<refsect1>
7638<title>Description</title>
7639<para>
7640   This function is to be used as the page callback in the PCM ops.
7641</para>
7642</refsect1>
7643<refsect1>
7644<title>Return</title>
7645<para>
7646   The page struct, or <constant>NULL</constant> on failure.
7647</para>
7648</refsect1>
7649</refentry>
7650
7651     </sect1>
7652     <sect1><title>PCM DMA Engine API</title>
7653<!-- sound/core/pcm_dmaengine.c -->
7654<refentry id="API-snd-hwparams-to-dma-slave-config">
7655<refentryinfo>
7656 <title>LINUX</title>
7657 <productname>Kernel Hackers Manual</productname>
7658 <date>July 2017</date>
7659</refentryinfo>
7660<refmeta>
7661 <refentrytitle><phrase>snd_hwparams_to_dma_slave_config</phrase></refentrytitle>
7662 <manvolnum>9</manvolnum>
7663 <refmiscinfo class="version">4.4.14</refmiscinfo>
7664</refmeta>
7665<refnamediv>
7666 <refname>snd_hwparams_to_dma_slave_config</refname>
7667 <refpurpose>
7668  Convert hw_params to dma_slave_config
7669 </refpurpose>
7670</refnamediv>
7671<refsynopsisdiv>
7672 <title>Synopsis</title>
7673  <funcsynopsis><funcprototype>
7674   <funcdef>int <function>snd_hwparams_to_dma_slave_config </function></funcdef>
7675   <paramdef>const struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
7676   <paramdef>const struct snd_pcm_hw_params * <parameter>params</parameter></paramdef>
7677   <paramdef>struct dma_slave_config * <parameter>slave_config</parameter></paramdef>
7678  </funcprototype></funcsynopsis>
7679</refsynopsisdiv>
7680<refsect1>
7681 <title>Arguments</title>
7682 <variablelist>
7683  <varlistentry>
7684   <term><parameter>substream</parameter></term>
7685   <listitem>
7686    <para>
7687     PCM substream
7688    </para>
7689   </listitem>
7690  </varlistentry>
7691  <varlistentry>
7692   <term><parameter>params</parameter></term>
7693   <listitem>
7694    <para>
7695     hw_params
7696    </para>
7697   </listitem>
7698  </varlistentry>
7699  <varlistentry>
7700   <term><parameter>slave_config</parameter></term>
7701   <listitem>
7702    <para>
7703     DMA slave config
7704    </para>
7705   </listitem>
7706  </varlistentry>
7707 </variablelist>
7708</refsect1>
7709<refsect1>
7710<title>Description</title>
7711<para>
7712   This function can be used to initialize a dma_slave_config from a substream
7713   and hw_params in a dmaengine based PCM driver implementation.
7714</para>
7715</refsect1>
7716</refentry>
7717
7718<refentry id="API-snd-dmaengine-pcm-set-config-from-dai-data">
7719<refentryinfo>
7720 <title>LINUX</title>
7721 <productname>Kernel Hackers Manual</productname>
7722 <date>July 2017</date>
7723</refentryinfo>
7724<refmeta>
7725 <refentrytitle><phrase>snd_dmaengine_pcm_set_config_from_dai_data</phrase></refentrytitle>
7726 <manvolnum>9</manvolnum>
7727 <refmiscinfo class="version">4.4.14</refmiscinfo>
7728</refmeta>
7729<refnamediv>
7730 <refname>snd_dmaengine_pcm_set_config_from_dai_data</refname>
7731 <refpurpose>
7732     Initializes a dma slave config using DAI DMA data.
7733 </refpurpose>
7734</refnamediv>
7735<refsynopsisdiv>
7736 <title>Synopsis</title>
7737  <funcsynopsis><funcprototype>
7738   <funcdef>void <function>snd_dmaengine_pcm_set_config_from_dai_data </function></funcdef>
7739   <paramdef>const struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
7740   <paramdef>const struct snd_dmaengine_dai_dma_data * <parameter>dma_data</parameter></paramdef>
7741   <paramdef>struct dma_slave_config * <parameter>slave_config</parameter></paramdef>
7742  </funcprototype></funcsynopsis>
7743</refsynopsisdiv>
7744<refsect1>
7745 <title>Arguments</title>
7746 <variablelist>
7747  <varlistentry>
7748   <term><parameter>substream</parameter></term>
7749   <listitem>
7750    <para>
7751     PCM substream
7752    </para>
7753   </listitem>
7754  </varlistentry>
7755  <varlistentry>
7756   <term><parameter>dma_data</parameter></term>
7757   <listitem>
7758    <para>
7759     DAI DMA data
7760    </para>
7761   </listitem>
7762  </varlistentry>
7763  <varlistentry>
7764   <term><parameter>slave_config</parameter></term>
7765   <listitem>
7766    <para>
7767     DMA slave configuration
7768    </para>
7769   </listitem>
7770  </varlistentry>
7771 </variablelist>
7772</refsect1>
7773<refsect1>
7774<title>Description</title>
7775<para>
7776   Initializes the {dst,src}_addr, {dst,src}_maxburst, {dst,src}_addr_width and
7777   slave_id fields of the DMA slave config from the same fields of the DAI DMA
7778   data struct. The src and dst fields will be initialized depending on the
7779   direction of the substream. If the substream is a playback stream the dst
7780   fields will be initialized, if it is a capture stream the src fields will be
7781   initialized. The {dst,src}_addr_width field will only be initialized if the
7782   addr_width field of the DAI DMA data struct is not equal to
7783   DMA_SLAVE_BUSWIDTH_UNDEFINED.
7784</para>
7785</refsect1>
7786</refentry>
7787
7788<refentry id="API-snd-dmaengine-pcm-trigger">
7789<refentryinfo>
7790 <title>LINUX</title>
7791 <productname>Kernel Hackers Manual</productname>
7792 <date>July 2017</date>
7793</refentryinfo>
7794<refmeta>
7795 <refentrytitle><phrase>snd_dmaengine_pcm_trigger</phrase></refentrytitle>
7796 <manvolnum>9</manvolnum>
7797 <refmiscinfo class="version">4.4.14</refmiscinfo>
7798</refmeta>
7799<refnamediv>
7800 <refname>snd_dmaengine_pcm_trigger</refname>
7801 <refpurpose>
7802     dmaengine based PCM trigger implementation
7803 </refpurpose>
7804</refnamediv>
7805<refsynopsisdiv>
7806 <title>Synopsis</title>
7807  <funcsynopsis><funcprototype>
7808   <funcdef>int <function>snd_dmaengine_pcm_trigger </function></funcdef>
7809   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
7810   <paramdef>int <parameter>cmd</parameter></paramdef>
7811  </funcprototype></funcsynopsis>
7812</refsynopsisdiv>
7813<refsect1>
7814 <title>Arguments</title>
7815 <variablelist>
7816  <varlistentry>
7817   <term><parameter>substream</parameter></term>
7818   <listitem>
7819    <para>
7820     PCM substream
7821    </para>
7822   </listitem>
7823  </varlistentry>
7824  <varlistentry>
7825   <term><parameter>cmd</parameter></term>
7826   <listitem>
7827    <para>
7828     Trigger command
7829    </para>
7830   </listitem>
7831  </varlistentry>
7832 </variablelist>
7833</refsect1>
7834<refsect1>
7835<title>Description</title>
7836<para>
7837   Returns 0 on success, a negative error code otherwise.
7838   </para><para>
7839
7840   This function can be used as the PCM trigger callback for dmaengine based PCM
7841   driver implementations.
7842</para>
7843</refsect1>
7844</refentry>
7845
7846<refentry id="API-snd-dmaengine-pcm-pointer-no-residue">
7847<refentryinfo>
7848 <title>LINUX</title>
7849 <productname>Kernel Hackers Manual</productname>
7850 <date>July 2017</date>
7851</refentryinfo>
7852<refmeta>
7853 <refentrytitle><phrase>snd_dmaengine_pcm_pointer_no_residue</phrase></refentrytitle>
7854 <manvolnum>9</manvolnum>
7855 <refmiscinfo class="version">4.4.14</refmiscinfo>
7856</refmeta>
7857<refnamediv>
7858 <refname>snd_dmaengine_pcm_pointer_no_residue</refname>
7859 <refpurpose>
7860     dmaengine based PCM pointer implementation
7861 </refpurpose>
7862</refnamediv>
7863<refsynopsisdiv>
7864 <title>Synopsis</title>
7865  <funcsynopsis><funcprototype>
7866   <funcdef>snd_pcm_uframes_t <function>snd_dmaengine_pcm_pointer_no_residue </function></funcdef>
7867   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
7868  </funcprototype></funcsynopsis>
7869</refsynopsisdiv>
7870<refsect1>
7871 <title>Arguments</title>
7872 <variablelist>
7873  <varlistentry>
7874   <term><parameter>substream</parameter></term>
7875   <listitem>
7876    <para>
7877     PCM substream
7878    </para>
7879   </listitem>
7880  </varlistentry>
7881 </variablelist>
7882</refsect1>
7883<refsect1>
7884<title>Description</title>
7885<para>
7886   This function is deprecated and should not be used by new drivers, as its
7887   results may be unreliable.
7888</para>
7889</refsect1>
7890</refentry>
7891
7892<refentry id="API-snd-dmaengine-pcm-pointer">
7893<refentryinfo>
7894 <title>LINUX</title>
7895 <productname>Kernel Hackers Manual</productname>
7896 <date>July 2017</date>
7897</refentryinfo>
7898<refmeta>
7899 <refentrytitle><phrase>snd_dmaengine_pcm_pointer</phrase></refentrytitle>
7900 <manvolnum>9</manvolnum>
7901 <refmiscinfo class="version">4.4.14</refmiscinfo>
7902</refmeta>
7903<refnamediv>
7904 <refname>snd_dmaengine_pcm_pointer</refname>
7905 <refpurpose>
7906     dmaengine based PCM pointer implementation
7907 </refpurpose>
7908</refnamediv>
7909<refsynopsisdiv>
7910 <title>Synopsis</title>
7911  <funcsynopsis><funcprototype>
7912   <funcdef>snd_pcm_uframes_t <function>snd_dmaengine_pcm_pointer </function></funcdef>
7913   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
7914  </funcprototype></funcsynopsis>
7915</refsynopsisdiv>
7916<refsect1>
7917 <title>Arguments</title>
7918 <variablelist>
7919  <varlistentry>
7920   <term><parameter>substream</parameter></term>
7921   <listitem>
7922    <para>
7923     PCM substream
7924    </para>
7925   </listitem>
7926  </varlistentry>
7927 </variablelist>
7928</refsect1>
7929<refsect1>
7930<title>Description</title>
7931<para>
7932   This function can be used as the PCM pointer callback for dmaengine based PCM
7933   driver implementations.
7934</para>
7935</refsect1>
7936</refentry>
7937
7938<refentry id="API-snd-dmaengine-pcm-request-channel">
7939<refentryinfo>
7940 <title>LINUX</title>
7941 <productname>Kernel Hackers Manual</productname>
7942 <date>July 2017</date>
7943</refentryinfo>
7944<refmeta>
7945 <refentrytitle><phrase>snd_dmaengine_pcm_request_channel</phrase></refentrytitle>
7946 <manvolnum>9</manvolnum>
7947 <refmiscinfo class="version">4.4.14</refmiscinfo>
7948</refmeta>
7949<refnamediv>
7950 <refname>snd_dmaengine_pcm_request_channel</refname>
7951 <refpurpose>
7952     Request channel for the dmaengine PCM
7953 </refpurpose>
7954</refnamediv>
7955<refsynopsisdiv>
7956 <title>Synopsis</title>
7957  <funcsynopsis><funcprototype>
7958   <funcdef>struct dma_chan * <function>snd_dmaengine_pcm_request_channel </function></funcdef>
7959   <paramdef>dma_filter_fn <parameter>filter_fn</parameter></paramdef>
7960   <paramdef>void * <parameter>filter_data</parameter></paramdef>
7961  </funcprototype></funcsynopsis>
7962</refsynopsisdiv>
7963<refsect1>
7964 <title>Arguments</title>
7965 <variablelist>
7966  <varlistentry>
7967   <term><parameter>filter_fn</parameter></term>
7968   <listitem>
7969    <para>
7970     Filter function used to request the DMA channel
7971    </para>
7972   </listitem>
7973  </varlistentry>
7974  <varlistentry>
7975   <term><parameter>filter_data</parameter></term>
7976   <listitem>
7977    <para>
7978     Data passed to the DMA filter function
7979    </para>
7980   </listitem>
7981  </varlistentry>
7982 </variablelist>
7983</refsect1>
7984<refsect1>
7985<title>Description</title>
7986<para>
7987   Returns NULL or the requested DMA channel.
7988   </para><para>
7989
7990   This function request a DMA channel for usage with dmaengine PCM.
7991</para>
7992</refsect1>
7993</refentry>
7994
7995<refentry id="API-snd-dmaengine-pcm-open">
7996<refentryinfo>
7997 <title>LINUX</title>
7998 <productname>Kernel Hackers Manual</productname>
7999 <date>July 2017</date>
8000</refentryinfo>
8001<refmeta>
8002 <refentrytitle><phrase>snd_dmaengine_pcm_open</phrase></refentrytitle>
8003 <manvolnum>9</manvolnum>
8004 <refmiscinfo class="version">4.4.14</refmiscinfo>
8005</refmeta>
8006<refnamediv>
8007 <refname>snd_dmaengine_pcm_open</refname>
8008 <refpurpose>
8009     Open a dmaengine based PCM substream
8010 </refpurpose>
8011</refnamediv>
8012<refsynopsisdiv>
8013 <title>Synopsis</title>
8014  <funcsynopsis><funcprototype>
8015   <funcdef>int <function>snd_dmaengine_pcm_open </function></funcdef>
8016   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
8017   <paramdef>struct dma_chan * <parameter>chan</parameter></paramdef>
8018  </funcprototype></funcsynopsis>
8019</refsynopsisdiv>
8020<refsect1>
8021 <title>Arguments</title>
8022 <variablelist>
8023  <varlistentry>
8024   <term><parameter>substream</parameter></term>
8025   <listitem>
8026    <para>
8027     PCM substream
8028    </para>
8029   </listitem>
8030  </varlistentry>
8031  <varlistentry>
8032   <term><parameter>chan</parameter></term>
8033   <listitem>
8034    <para>
8035     DMA channel to use for data transfers
8036    </para>
8037   </listitem>
8038  </varlistentry>
8039 </variablelist>
8040</refsect1>
8041<refsect1>
8042<title>Description</title>
8043<para>
8044   Returns 0 on success, a negative error code otherwise.
8045   </para><para>
8046
8047   The function should usually be called from the pcm open callback. Note that
8048   this function will use private_data field of the substream's runtime. So it
8049   is not available to your pcm driver implementation.
8050</para>
8051</refsect1>
8052</refentry>
8053
8054<refentry id="API-snd-dmaengine-pcm-open-request-chan">
8055<refentryinfo>
8056 <title>LINUX</title>
8057 <productname>Kernel Hackers Manual</productname>
8058 <date>July 2017</date>
8059</refentryinfo>
8060<refmeta>
8061 <refentrytitle><phrase>snd_dmaengine_pcm_open_request_chan</phrase></refentrytitle>
8062 <manvolnum>9</manvolnum>
8063 <refmiscinfo class="version">4.4.14</refmiscinfo>
8064</refmeta>
8065<refnamediv>
8066 <refname>snd_dmaengine_pcm_open_request_chan</refname>
8067 <refpurpose>
8068     Open a dmaengine based PCM substream and request channel
8069 </refpurpose>
8070</refnamediv>
8071<refsynopsisdiv>
8072 <title>Synopsis</title>
8073  <funcsynopsis><funcprototype>
8074   <funcdef>int <function>snd_dmaengine_pcm_open_request_chan </function></funcdef>
8075   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
8076   <paramdef>dma_filter_fn <parameter>filter_fn</parameter></paramdef>
8077   <paramdef>void * <parameter>filter_data</parameter></paramdef>
8078  </funcprototype></funcsynopsis>
8079</refsynopsisdiv>
8080<refsect1>
8081 <title>Arguments</title>
8082 <variablelist>
8083  <varlistentry>
8084   <term><parameter>substream</parameter></term>
8085   <listitem>
8086    <para>
8087     PCM substream
8088    </para>
8089   </listitem>
8090  </varlistentry>
8091  <varlistentry>
8092   <term><parameter>filter_fn</parameter></term>
8093   <listitem>
8094    <para>
8095     Filter function used to request the DMA channel
8096    </para>
8097   </listitem>
8098  </varlistentry>
8099  <varlistentry>
8100   <term><parameter>filter_data</parameter></term>
8101   <listitem>
8102    <para>
8103     Data passed to the DMA filter function
8104    </para>
8105   </listitem>
8106  </varlistentry>
8107 </variablelist>
8108</refsect1>
8109<refsect1>
8110<title>Description</title>
8111<para>
8112   Returns 0 on success, a negative error code otherwise.
8113   </para><para>
8114
8115   This function will request a DMA channel using the passed filter function and
8116   data. The function should usually be called from the pcm open callback. Note
8117   that this function will use private_data field of the substream's runtime. So
8118   it is not available to your pcm driver implementation.
8119</para>
8120</refsect1>
8121</refentry>
8122
8123<refentry id="API-snd-dmaengine-pcm-close">
8124<refentryinfo>
8125 <title>LINUX</title>
8126 <productname>Kernel Hackers Manual</productname>
8127 <date>July 2017</date>
8128</refentryinfo>
8129<refmeta>
8130 <refentrytitle><phrase>snd_dmaengine_pcm_close</phrase></refentrytitle>
8131 <manvolnum>9</manvolnum>
8132 <refmiscinfo class="version">4.4.14</refmiscinfo>
8133</refmeta>
8134<refnamediv>
8135 <refname>snd_dmaengine_pcm_close</refname>
8136 <refpurpose>
8137     Close a dmaengine based PCM substream
8138 </refpurpose>
8139</refnamediv>
8140<refsynopsisdiv>
8141 <title>Synopsis</title>
8142  <funcsynopsis><funcprototype>
8143   <funcdef>int <function>snd_dmaengine_pcm_close </function></funcdef>
8144   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
8145  </funcprototype></funcsynopsis>
8146</refsynopsisdiv>
8147<refsect1>
8148 <title>Arguments</title>
8149 <variablelist>
8150  <varlistentry>
8151   <term><parameter>substream</parameter></term>
8152   <listitem>
8153    <para>
8154     PCM substream
8155    </para>
8156   </listitem>
8157  </varlistentry>
8158 </variablelist>
8159</refsect1>
8160</refentry>
8161
8162<refentry id="API-snd-dmaengine-pcm-close-release-chan">
8163<refentryinfo>
8164 <title>LINUX</title>
8165 <productname>Kernel Hackers Manual</productname>
8166 <date>July 2017</date>
8167</refentryinfo>
8168<refmeta>
8169 <refentrytitle><phrase>snd_dmaengine_pcm_close_release_chan</phrase></refentrytitle>
8170 <manvolnum>9</manvolnum>
8171 <refmiscinfo class="version">4.4.14</refmiscinfo>
8172</refmeta>
8173<refnamediv>
8174 <refname>snd_dmaengine_pcm_close_release_chan</refname>
8175 <refpurpose>
8176     Close a dmaengine based PCM substream and release channel
8177 </refpurpose>
8178</refnamediv>
8179<refsynopsisdiv>
8180 <title>Synopsis</title>
8181  <funcsynopsis><funcprototype>
8182   <funcdef>int <function>snd_dmaengine_pcm_close_release_chan </function></funcdef>
8183   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
8184  </funcprototype></funcsynopsis>
8185</refsynopsisdiv>
8186<refsect1>
8187 <title>Arguments</title>
8188 <variablelist>
8189  <varlistentry>
8190   <term><parameter>substream</parameter></term>
8191   <listitem>
8192    <para>
8193     PCM substream
8194    </para>
8195   </listitem>
8196  </varlistentry>
8197 </variablelist>
8198</refsect1>
8199<refsect1>
8200<title>Description</title>
8201<para>
8202   Releases the DMA channel associated with the PCM substream.
8203</para>
8204</refsect1>
8205</refentry>
8206
8207<!-- include/sound/dmaengine_pcm.h -->
8208<refentry id="API-snd-pcm-substream-to-dma-direction">
8209<refentryinfo>
8210 <title>LINUX</title>
8211 <productname>Kernel Hackers Manual</productname>
8212 <date>July 2017</date>
8213</refentryinfo>
8214<refmeta>
8215 <refentrytitle><phrase>snd_pcm_substream_to_dma_direction</phrase></refentrytitle>
8216 <manvolnum>9</manvolnum>
8217 <refmiscinfo class="version">4.4.14</refmiscinfo>
8218</refmeta>
8219<refnamediv>
8220 <refname>snd_pcm_substream_to_dma_direction</refname>
8221 <refpurpose>
8222  Get dma_transfer_direction for a PCM substream
8223 </refpurpose>
8224</refnamediv>
8225<refsynopsisdiv>
8226 <title>Synopsis</title>
8227  <funcsynopsis><funcprototype>
8228   <funcdef>enum dma_transfer_direction <function>snd_pcm_substream_to_dma_direction </function></funcdef>
8229   <paramdef>const struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
8230  </funcprototype></funcsynopsis>
8231</refsynopsisdiv>
8232<refsect1>
8233 <title>Arguments</title>
8234 <variablelist>
8235  <varlistentry>
8236   <term><parameter>substream</parameter></term>
8237   <listitem>
8238    <para>
8239     PCM substream
8240    </para>
8241   </listitem>
8242  </varlistentry>
8243 </variablelist>
8244</refsect1>
8245</refentry>
8246
8247<refentry id="API-struct-snd-dmaengine-dai-dma-data">
8248<refentryinfo>
8249 <title>LINUX</title>
8250 <productname>Kernel Hackers Manual</productname>
8251 <date>July 2017</date>
8252</refentryinfo>
8253<refmeta>
8254 <refentrytitle><phrase>struct snd_dmaengine_dai_dma_data</phrase></refentrytitle>
8255 <manvolnum>9</manvolnum>
8256 <refmiscinfo class="version">4.4.14</refmiscinfo>
8257</refmeta>
8258<refnamediv>
8259 <refname>struct snd_dmaengine_dai_dma_data</refname>
8260 <refpurpose>
8261     DAI DMA configuration data
8262 </refpurpose>
8263</refnamediv>
8264<refsynopsisdiv>
8265 <title>Synopsis</title>
8266  <programlisting>
8267struct snd_dmaengine_dai_dma_data {
8268  dma_addr_t addr;
8269  enum dma_slave_buswidth addr_width;
8270  u32 maxburst;
8271  unsigned int slave_id;
8272  void * filter_data;
8273  const char * chan_name;
8274  unsigned int fifo_size;
8275};  </programlisting>
8276</refsynopsisdiv>
8277 <refsect1>
8278  <title>Members</title>
8279  <variablelist>
8280    <varlistentry>      <term>addr</term>
8281      <listitem><para>
8282   Address of the DAI data source or destination register.
8283      </para></listitem>
8284    </varlistentry>
8285    <varlistentry>      <term>addr_width</term>
8286      <listitem><para>
8287   Width of the DAI data source or destination register.
8288      </para></listitem>
8289    </varlistentry>
8290    <varlistentry>      <term>maxburst</term>
8291      <listitem><para>
8292   Maximum number of words(note: words, as in units of the
8293   src_addr_width member, not bytes) that can be send to or received from the
8294   DAI in one burst.
8295      </para></listitem>
8296    </varlistentry>
8297    <varlistentry>      <term>slave_id</term>
8298      <listitem><para>
8299   Slave requester id for the DMA channel.
8300      </para></listitem>
8301    </varlistentry>
8302    <varlistentry>      <term>filter_data</term>
8303      <listitem><para>
8304   Custom DMA channel filter data, this will usually be used when
8305   requesting the DMA channel.
8306      </para></listitem>
8307    </varlistentry>
8308    <varlistentry>      <term>chan_name</term>
8309      <listitem><para>
8310   Custom channel name to use when requesting DMA channel.
8311      </para></listitem>
8312    </varlistentry>
8313    <varlistentry>      <term>fifo_size</term>
8314      <listitem><para>
8315   FIFO size of the DAI controller in bytes
8316      </para></listitem>
8317    </varlistentry>
8318  </variablelist>
8319 </refsect1>
8320</refentry>
8321
8322<refentry id="API-struct-snd-dmaengine-pcm-config">
8323<refentryinfo>
8324 <title>LINUX</title>
8325 <productname>Kernel Hackers Manual</productname>
8326 <date>July 2017</date>
8327</refentryinfo>
8328<refmeta>
8329 <refentrytitle><phrase>struct snd_dmaengine_pcm_config</phrase></refentrytitle>
8330 <manvolnum>9</manvolnum>
8331 <refmiscinfo class="version">4.4.14</refmiscinfo>
8332</refmeta>
8333<refnamediv>
8334 <refname>struct snd_dmaengine_pcm_config</refname>
8335 <refpurpose>
8336     Configuration data for dmaengine based PCM
8337 </refpurpose>
8338</refnamediv>
8339<refsynopsisdiv>
8340 <title>Synopsis</title>
8341  <programlisting>
8342struct snd_dmaengine_pcm_config {
8343  int (* prepare_slave_config) (struct snd_pcm_substream *substream,struct snd_pcm_hw_params *params,struct dma_slave_config *slave_config);
8344  struct dma_chan *(* compat_request_channel) (struct snd_soc_pcm_runtime *rtd,struct snd_pcm_substream *substream);
8345  dma_filter_fn compat_filter_fn;
8346  struct device * dma_dev;
8347  const char * chan_names[SNDRV_PCM_STREAM_LAST + 1];
8348  const struct snd_pcm_hardware * pcm_hardware;
8349  unsigned int prealloc_buffer_size;
8350};  </programlisting>
8351</refsynopsisdiv>
8352 <refsect1>
8353  <title>Members</title>
8354  <variablelist>
8355    <varlistentry>      <term>prepare_slave_config</term>
8356      <listitem><para>
8357   Callback used to fill in the DMA slave_config for a
8358   PCM substream. Will be called from the PCM drivers hwparams callback.
8359      </para></listitem>
8360    </varlistentry>
8361    <varlistentry>      <term>compat_request_channel</term>
8362      <listitem><para>
8363   Callback to request a DMA channel for platforms
8364   which do not use devicetree.
8365      </para></listitem>
8366    </varlistentry>
8367    <varlistentry>      <term>compat_filter_fn</term>
8368      <listitem><para>
8369   Will be used as the filter function when requesting a
8370   channel for platforms which do not use devicetree. The filter parameter
8371   will be the DAI's DMA data.
8372      </para></listitem>
8373    </varlistentry>
8374    <varlistentry>      <term>dma_dev</term>
8375      <listitem><para>
8376   If set, request DMA channel on this device rather than the DAI
8377   device.
8378      </para></listitem>
8379    </varlistentry>
8380    <varlistentry>      <term>chan_names[SNDRV_PCM_STREAM_LAST + 1]</term>
8381      <listitem><para>
8382   If set, these custom DMA channel names will be requested at
8383   registration time.
8384      </para></listitem>
8385    </varlistentry>
8386    <varlistentry>      <term>pcm_hardware</term>
8387      <listitem><para>
8388   snd_pcm_hardware struct to be used for the PCM.
8389      </para></listitem>
8390    </varlistentry>
8391    <varlistentry>      <term>prealloc_buffer_size</term>
8392      <listitem><para>
8393   Size of the preallocated audio buffer.
8394      </para></listitem>
8395    </varlistentry>
8396  </variablelist>
8397 </refsect1>
8398<refsect1>
8399<title>Note</title>
8400<para>
8401   If both compat_request_channel and compat_filter_fn are set
8402   compat_request_channel will be used to request the channel and
8403   compat_filter_fn will be ignored. Otherwise the channel will be requested
8404   using dma_request_channel with compat_filter_fn as the filter function.
8405</para>
8406</refsect1>
8407</refentry>
8408
8409     </sect1>
8410  </chapter>
8411  <chapter><title>Control/Mixer API</title>
8412     <sect1><title>General Control Interface</title>
8413<!-- sound/core/control.c -->
8414<refentry id="API-snd-ctl-notify">
8415<refentryinfo>
8416 <title>LINUX</title>
8417 <productname>Kernel Hackers Manual</productname>
8418 <date>July 2017</date>
8419</refentryinfo>
8420<refmeta>
8421 <refentrytitle><phrase>snd_ctl_notify</phrase></refentrytitle>
8422 <manvolnum>9</manvolnum>
8423 <refmiscinfo class="version">4.4.14</refmiscinfo>
8424</refmeta>
8425<refnamediv>
8426 <refname>snd_ctl_notify</refname>
8427 <refpurpose>
8428  Send notification to user-space for a control change
8429 </refpurpose>
8430</refnamediv>
8431<refsynopsisdiv>
8432 <title>Synopsis</title>
8433  <funcsynopsis><funcprototype>
8434   <funcdef>void <function>snd_ctl_notify </function></funcdef>
8435   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
8436   <paramdef>unsigned int <parameter>mask</parameter></paramdef>
8437   <paramdef>struct snd_ctl_elem_id * <parameter>id</parameter></paramdef>
8438  </funcprototype></funcsynopsis>
8439</refsynopsisdiv>
8440<refsect1>
8441 <title>Arguments</title>
8442 <variablelist>
8443  <varlistentry>
8444   <term><parameter>card</parameter></term>
8445   <listitem>
8446    <para>
8447     the card to send notification
8448    </para>
8449   </listitem>
8450  </varlistentry>
8451  <varlistentry>
8452   <term><parameter>mask</parameter></term>
8453   <listitem>
8454    <para>
8455     the event mask, SNDRV_CTL_EVENT_*
8456    </para>
8457   </listitem>
8458  </varlistentry>
8459  <varlistentry>
8460   <term><parameter>id</parameter></term>
8461   <listitem>
8462    <para>
8463     the ctl element id to send notification
8464    </para>
8465   </listitem>
8466  </varlistentry>
8467 </variablelist>
8468</refsect1>
8469<refsect1>
8470<title>Description</title>
8471<para>
8472   This function adds an event record with the given id and mask, appends
8473   to the list and wakes up the user-space for notification.  This can be
8474   called in the atomic context.
8475</para>
8476</refsect1>
8477</refentry>
8478
8479<refentry id="API-snd-ctl-new1">
8480<refentryinfo>
8481 <title>LINUX</title>
8482 <productname>Kernel Hackers Manual</productname>
8483 <date>July 2017</date>
8484</refentryinfo>
8485<refmeta>
8486 <refentrytitle><phrase>snd_ctl_new1</phrase></refentrytitle>
8487 <manvolnum>9</manvolnum>
8488 <refmiscinfo class="version">4.4.14</refmiscinfo>
8489</refmeta>
8490<refnamediv>
8491 <refname>snd_ctl_new1</refname>
8492 <refpurpose>
8493     create a control instance from the template
8494 </refpurpose>
8495</refnamediv>
8496<refsynopsisdiv>
8497 <title>Synopsis</title>
8498  <funcsynopsis><funcprototype>
8499   <funcdef>struct snd_kcontrol * <function>snd_ctl_new1 </function></funcdef>
8500   <paramdef>const struct snd_kcontrol_new * <parameter>ncontrol</parameter></paramdef>
8501   <paramdef>void * <parameter>private_data</parameter></paramdef>
8502  </funcprototype></funcsynopsis>
8503</refsynopsisdiv>
8504<refsect1>
8505 <title>Arguments</title>
8506 <variablelist>
8507  <varlistentry>
8508   <term><parameter>ncontrol</parameter></term>
8509   <listitem>
8510    <para>
8511     the initialization record
8512    </para>
8513   </listitem>
8514  </varlistentry>
8515  <varlistentry>
8516   <term><parameter>private_data</parameter></term>
8517   <listitem>
8518    <para>
8519     the private data to set
8520    </para>
8521   </listitem>
8522  </varlistentry>
8523 </variablelist>
8524</refsect1>
8525<refsect1>
8526<title>Description</title>
8527<para>
8528   Allocates a new struct snd_kcontrol instance and initialize from the given 
8529   template.  When the access field of ncontrol is 0, it's assumed as
8530   READWRITE access. When the count field is 0, it's assumes as one.
8531</para>
8532</refsect1>
8533<refsect1>
8534<title>Return</title>
8535<para>
8536   The pointer of the newly generated instance, or <constant>NULL</constant> on failure.
8537</para>
8538</refsect1>
8539</refentry>
8540
8541<refentry id="API-snd-ctl-free-one">
8542<refentryinfo>
8543 <title>LINUX</title>
8544 <productname>Kernel Hackers Manual</productname>
8545 <date>July 2017</date>
8546</refentryinfo>
8547<refmeta>
8548 <refentrytitle><phrase>snd_ctl_free_one</phrase></refentrytitle>
8549 <manvolnum>9</manvolnum>
8550 <refmiscinfo class="version">4.4.14</refmiscinfo>
8551</refmeta>
8552<refnamediv>
8553 <refname>snd_ctl_free_one</refname>
8554 <refpurpose>
8555     release the control instance
8556 </refpurpose>
8557</refnamediv>
8558<refsynopsisdiv>
8559 <title>Synopsis</title>
8560  <funcsynopsis><funcprototype>
8561   <funcdef>void <function>snd_ctl_free_one </function></funcdef>
8562   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
8563  </funcprototype></funcsynopsis>
8564</refsynopsisdiv>
8565<refsect1>
8566 <title>Arguments</title>
8567 <variablelist>
8568  <varlistentry>
8569   <term><parameter>kcontrol</parameter></term>
8570   <listitem>
8571    <para>
8572     the control instance
8573    </para>
8574   </listitem>
8575  </varlistentry>
8576 </variablelist>
8577</refsect1>
8578<refsect1>
8579<title>Description</title>
8580<para>
8581   Releases the control instance created via <function>snd_ctl_new</function>
8582   or <function>snd_ctl_new1</function>.
8583   Don't call this after the control was added to the card.
8584</para>
8585</refsect1>
8586</refentry>
8587
8588<refentry id="API-snd-ctl-add">
8589<refentryinfo>
8590 <title>LINUX</title>
8591 <productname>Kernel Hackers Manual</productname>
8592 <date>July 2017</date>
8593</refentryinfo>
8594<refmeta>
8595 <refentrytitle><phrase>snd_ctl_add</phrase></refentrytitle>
8596 <manvolnum>9</manvolnum>
8597 <refmiscinfo class="version">4.4.14</refmiscinfo>
8598</refmeta>
8599<refnamediv>
8600 <refname>snd_ctl_add</refname>
8601 <refpurpose>
8602     add the control instance to the card
8603 </refpurpose>
8604</refnamediv>
8605<refsynopsisdiv>
8606 <title>Synopsis</title>
8607  <funcsynopsis><funcprototype>
8608   <funcdef>int <function>snd_ctl_add </function></funcdef>
8609   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
8610   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
8611  </funcprototype></funcsynopsis>
8612</refsynopsisdiv>
8613<refsect1>
8614 <title>Arguments</title>
8615 <variablelist>
8616  <varlistentry>
8617   <term><parameter>card</parameter></term>
8618   <listitem>
8619    <para>
8620     the card instance
8621    </para>
8622   </listitem>
8623  </varlistentry>
8624  <varlistentry>
8625   <term><parameter>kcontrol</parameter></term>
8626   <listitem>
8627    <para>
8628     the control instance to add
8629    </para>
8630   </listitem>
8631  </varlistentry>
8632 </variablelist>
8633</refsect1>
8634<refsect1>
8635<title>Description</title>
8636<para>
8637   Adds the control instance created via <function>snd_ctl_new</function> or
8638   <function>snd_ctl_new1</function> to the given card. Assigns also an unique
8639   numid used for fast search.
8640   </para><para>
8641
8642   It frees automatically the control which cannot be added.
8643</para>
8644</refsect1>
8645<refsect1>
8646<title>Return</title>
8647<para>
8648   Zero if successful, or a negative error code on failure.
8649</para>
8650</refsect1>
8651</refentry>
8652
8653<refentry id="API-snd-ctl-replace">
8654<refentryinfo>
8655 <title>LINUX</title>
8656 <productname>Kernel Hackers Manual</productname>
8657 <date>July 2017</date>
8658</refentryinfo>
8659<refmeta>
8660 <refentrytitle><phrase>snd_ctl_replace</phrase></refentrytitle>
8661 <manvolnum>9</manvolnum>
8662 <refmiscinfo class="version">4.4.14</refmiscinfo>
8663</refmeta>
8664<refnamediv>
8665 <refname>snd_ctl_replace</refname>
8666 <refpurpose>
8667     replace the control instance of the card
8668 </refpurpose>
8669</refnamediv>
8670<refsynopsisdiv>
8671 <title>Synopsis</title>
8672  <funcsynopsis><funcprototype>
8673   <funcdef>int <function>snd_ctl_replace </function></funcdef>
8674   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
8675   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
8676   <paramdef>bool <parameter>add_on_replace</parameter></paramdef>
8677  </funcprototype></funcsynopsis>
8678</refsynopsisdiv>
8679<refsect1>
8680 <title>Arguments</title>
8681 <variablelist>
8682  <varlistentry>
8683   <term><parameter>card</parameter></term>
8684   <listitem>
8685    <para>
8686     the card instance
8687    </para>
8688   </listitem>
8689  </varlistentry>
8690  <varlistentry>
8691   <term><parameter>kcontrol</parameter></term>
8692   <listitem>
8693    <para>
8694     the control instance to replace
8695    </para>
8696   </listitem>
8697  </varlistentry>
8698  <varlistentry>
8699   <term><parameter>add_on_replace</parameter></term>
8700   <listitem>
8701    <para>
8702     add the control if not already added
8703    </para>
8704   </listitem>
8705  </varlistentry>
8706 </variablelist>
8707</refsect1>
8708<refsect1>
8709<title>Description</title>
8710<para>
8711   Replaces the given control.  If the given control does not exist
8712   and the add_on_replace flag is set, the control is added.  If the
8713   control exists, it is destroyed first.
8714   </para><para>
8715
8716   It frees automatically the control which cannot be added or replaced.
8717</para>
8718</refsect1>
8719<refsect1>
8720<title>Return</title>
8721<para>
8722   Zero if successful, or a negative error code on failure.
8723</para>
8724</refsect1>
8725</refentry>
8726
8727<refentry id="API-snd-ctl-remove">
8728<refentryinfo>
8729 <title>LINUX</title>
8730 <productname>Kernel Hackers Manual</productname>
8731 <date>July 2017</date>
8732</refentryinfo>
8733<refmeta>
8734 <refentrytitle><phrase>snd_ctl_remove</phrase></refentrytitle>
8735 <manvolnum>9</manvolnum>
8736 <refmiscinfo class="version">4.4.14</refmiscinfo>
8737</refmeta>
8738<refnamediv>
8739 <refname>snd_ctl_remove</refname>
8740 <refpurpose>
8741     remove the control from the card and release it
8742 </refpurpose>
8743</refnamediv>
8744<refsynopsisdiv>
8745 <title>Synopsis</title>
8746  <funcsynopsis><funcprototype>
8747   <funcdef>int <function>snd_ctl_remove </function></funcdef>
8748   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
8749   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
8750  </funcprototype></funcsynopsis>
8751</refsynopsisdiv>
8752<refsect1>
8753 <title>Arguments</title>
8754 <variablelist>
8755  <varlistentry>
8756   <term><parameter>card</parameter></term>
8757   <listitem>
8758    <para>
8759     the card instance
8760    </para>
8761   </listitem>
8762  </varlistentry>
8763  <varlistentry>
8764   <term><parameter>kcontrol</parameter></term>
8765   <listitem>
8766    <para>
8767     the control instance to remove
8768    </para>
8769   </listitem>
8770  </varlistentry>
8771 </variablelist>
8772</refsect1>
8773<refsect1>
8774<title>Description</title>
8775<para>
8776   Removes the control from the card and then releases the instance.
8777   You don't need to call <function>snd_ctl_free_one</function>. You must be in
8778   the write lock - down_write(<structname>card</structname>-&gt;controls_rwsem).
8779</para>
8780</refsect1>
8781<refsect1>
8782<title>Return</title>
8783<para>
8784   0 if successful, or a negative error code on failure.
8785</para>
8786</refsect1>
8787</refentry>
8788
8789<refentry id="API-snd-ctl-remove-id">
8790<refentryinfo>
8791 <title>LINUX</title>
8792 <productname>Kernel Hackers Manual</productname>
8793 <date>July 2017</date>
8794</refentryinfo>
8795<refmeta>
8796 <refentrytitle><phrase>snd_ctl_remove_id</phrase></refentrytitle>
8797 <manvolnum>9</manvolnum>
8798 <refmiscinfo class="version">4.4.14</refmiscinfo>
8799</refmeta>
8800<refnamediv>
8801 <refname>snd_ctl_remove_id</refname>
8802 <refpurpose>
8803     remove the control of the given id and release it
8804 </refpurpose>
8805</refnamediv>
8806<refsynopsisdiv>
8807 <title>Synopsis</title>
8808  <funcsynopsis><funcprototype>
8809   <funcdef>int <function>snd_ctl_remove_id </function></funcdef>
8810   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
8811   <paramdef>struct snd_ctl_elem_id * <parameter>id</parameter></paramdef>
8812  </funcprototype></funcsynopsis>
8813</refsynopsisdiv>
8814<refsect1>
8815 <title>Arguments</title>
8816 <variablelist>
8817  <varlistentry>
8818   <term><parameter>card</parameter></term>
8819   <listitem>
8820    <para>
8821     the card instance
8822    </para>
8823   </listitem>
8824  </varlistentry>
8825  <varlistentry>
8826   <term><parameter>id</parameter></term>
8827   <listitem>
8828    <para>
8829     the control id to remove
8830    </para>
8831   </listitem>
8832  </varlistentry>
8833 </variablelist>
8834</refsect1>
8835<refsect1>
8836<title>Description</title>
8837<para>
8838   Finds the control instance with the given id, removes it from the
8839   card list and releases it.
8840</para>
8841</refsect1>
8842<refsect1>
8843<title>Return</title>
8844<para>
8845   0 if successful, or a negative error code on failure.
8846</para>
8847</refsect1>
8848</refentry>
8849
8850<refentry id="API-snd-ctl-activate-id">
8851<refentryinfo>
8852 <title>LINUX</title>
8853 <productname>Kernel Hackers Manual</productname>
8854 <date>July 2017</date>
8855</refentryinfo>
8856<refmeta>
8857 <refentrytitle><phrase>snd_ctl_activate_id</phrase></refentrytitle>
8858 <manvolnum>9</manvolnum>
8859 <refmiscinfo class="version">4.4.14</refmiscinfo>
8860</refmeta>
8861<refnamediv>
8862 <refname>snd_ctl_activate_id</refname>
8863 <refpurpose>
8864     activate/inactivate the control of the given id
8865 </refpurpose>
8866</refnamediv>
8867<refsynopsisdiv>
8868 <title>Synopsis</title>
8869  <funcsynopsis><funcprototype>
8870   <funcdef>int <function>snd_ctl_activate_id </function></funcdef>
8871   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
8872   <paramdef>struct snd_ctl_elem_id * <parameter>id</parameter></paramdef>
8873   <paramdef>int <parameter>active</parameter></paramdef>
8874  </funcprototype></funcsynopsis>
8875</refsynopsisdiv>
8876<refsect1>
8877 <title>Arguments</title>
8878 <variablelist>
8879  <varlistentry>
8880   <term><parameter>card</parameter></term>
8881   <listitem>
8882    <para>
8883     the card instance
8884    </para>
8885   </listitem>
8886  </varlistentry>
8887  <varlistentry>
8888   <term><parameter>id</parameter></term>
8889   <listitem>
8890    <para>
8891     the control id to activate/inactivate
8892    </para>
8893   </listitem>
8894  </varlistentry>
8895  <varlistentry>
8896   <term><parameter>active</parameter></term>
8897   <listitem>
8898    <para>
8899     non-zero to activate
8900    </para>
8901   </listitem>
8902  </varlistentry>
8903 </variablelist>
8904</refsect1>
8905<refsect1>
8906<title>Description</title>
8907<para>
8908   Finds the control instance with the given id, and activate or
8909   inactivate the control together with notification, if changed.
8910   The given ID data is filled with full information.
8911</para>
8912</refsect1>
8913<refsect1>
8914<title>Return</title>
8915<para>
8916   0 if unchanged, 1 if changed, or a negative error code on failure.
8917</para>
8918</refsect1>
8919</refentry>
8920
8921<refentry id="API-snd-ctl-rename-id">
8922<refentryinfo>
8923 <title>LINUX</title>
8924 <productname>Kernel Hackers Manual</productname>
8925 <date>July 2017</date>
8926</refentryinfo>
8927<refmeta>
8928 <refentrytitle><phrase>snd_ctl_rename_id</phrase></refentrytitle>
8929 <manvolnum>9</manvolnum>
8930 <refmiscinfo class="version">4.4.14</refmiscinfo>
8931</refmeta>
8932<refnamediv>
8933 <refname>snd_ctl_rename_id</refname>
8934 <refpurpose>
8935     replace the id of a control on the card
8936 </refpurpose>
8937</refnamediv>
8938<refsynopsisdiv>
8939 <title>Synopsis</title>
8940  <funcsynopsis><funcprototype>
8941   <funcdef>int <function>snd_ctl_rename_id </function></funcdef>
8942   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
8943   <paramdef>struct snd_ctl_elem_id * <parameter>src_id</parameter></paramdef>
8944   <paramdef>struct snd_ctl_elem_id * <parameter>dst_id</parameter></paramdef>
8945  </funcprototype></funcsynopsis>
8946</refsynopsisdiv>
8947<refsect1>
8948 <title>Arguments</title>
8949 <variablelist>
8950  <varlistentry>
8951   <term><parameter>card</parameter></term>
8952   <listitem>
8953    <para>
8954     the card instance
8955    </para>
8956   </listitem>
8957  </varlistentry>
8958  <varlistentry>
8959   <term><parameter>src_id</parameter></term>
8960   <listitem>
8961    <para>
8962     the old id
8963    </para>
8964   </listitem>
8965  </varlistentry>
8966  <varlistentry>
8967   <term><parameter>dst_id</parameter></term>
8968   <listitem>
8969    <para>
8970     the new id
8971    </para>
8972   </listitem>
8973  </varlistentry>
8974 </variablelist>
8975</refsect1>
8976<refsect1>
8977<title>Description</title>
8978<para>
8979   Finds the control with the old id from the card, and replaces the
8980   id with the new one.
8981</para>
8982</refsect1>
8983<refsect1>
8984<title>Return</title>
8985<para>
8986   Zero if successful, or a negative error code on failure.
8987</para>
8988</refsect1>
8989</refentry>
8990
8991<refentry id="API-snd-ctl-find-numid">
8992<refentryinfo>
8993 <title>LINUX</title>
8994 <productname>Kernel Hackers Manual</productname>
8995 <date>July 2017</date>
8996</refentryinfo>
8997<refmeta>
8998 <refentrytitle><phrase>snd_ctl_find_numid</phrase></refentrytitle>
8999 <manvolnum>9</manvolnum>
9000 <refmiscinfo class="version">4.4.14</refmiscinfo>
9001</refmeta>
9002<refnamediv>
9003 <refname>snd_ctl_find_numid</refname>
9004 <refpurpose>
9005     find the control instance with the given number-id
9006 </refpurpose>
9007</refnamediv>
9008<refsynopsisdiv>
9009 <title>Synopsis</title>
9010  <funcsynopsis><funcprototype>
9011   <funcdef>struct snd_kcontrol * <function>snd_ctl_find_numid </function></funcdef>
9012   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
9013   <paramdef>unsigned int <parameter>numid</parameter></paramdef>
9014  </funcprototype></funcsynopsis>
9015</refsynopsisdiv>
9016<refsect1>
9017 <title>Arguments</title>
9018 <variablelist>
9019  <varlistentry>
9020   <term><parameter>card</parameter></term>
9021   <listitem>
9022    <para>
9023     the card instance
9024    </para>
9025   </listitem>
9026  </varlistentry>
9027  <varlistentry>
9028   <term><parameter>numid</parameter></term>
9029   <listitem>
9030    <para>
9031     the number-id to search
9032    </para>
9033   </listitem>
9034  </varlistentry>
9035 </variablelist>
9036</refsect1>
9037<refsect1>
9038<title>Description</title>
9039<para>
9040   Finds the control instance with the given number-id from the card.
9041   </para><para>
9042
9043   The caller must down card-&gt;controls_rwsem before calling this function
9044   (if the race condition can happen).
9045</para>
9046</refsect1>
9047<refsect1>
9048<title>Return</title>
9049<para>
9050   The pointer of the instance if found, or <constant>NULL</constant> if not.
9051</para>
9052</refsect1>
9053</refentry>
9054
9055<refentry id="API-snd-ctl-find-id">
9056<refentryinfo>
9057 <title>LINUX</title>
9058 <productname>Kernel Hackers Manual</productname>
9059 <date>July 2017</date>
9060</refentryinfo>
9061<refmeta>
9062 <refentrytitle><phrase>snd_ctl_find_id</phrase></refentrytitle>
9063 <manvolnum>9</manvolnum>
9064 <refmiscinfo class="version">4.4.14</refmiscinfo>
9065</refmeta>
9066<refnamediv>
9067 <refname>snd_ctl_find_id</refname>
9068 <refpurpose>
9069     find the control instance with the given id
9070 </refpurpose>
9071</refnamediv>
9072<refsynopsisdiv>
9073 <title>Synopsis</title>
9074  <funcsynopsis><funcprototype>
9075   <funcdef>struct snd_kcontrol * <function>snd_ctl_find_id </function></funcdef>
9076   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
9077   <paramdef>struct snd_ctl_elem_id * <parameter>id</parameter></paramdef>
9078  </funcprototype></funcsynopsis>
9079</refsynopsisdiv>
9080<refsect1>
9081 <title>Arguments</title>
9082 <variablelist>
9083  <varlistentry>
9084   <term><parameter>card</parameter></term>
9085   <listitem>
9086    <para>
9087     the card instance
9088    </para>
9089   </listitem>
9090  </varlistentry>
9091  <varlistentry>
9092   <term><parameter>id</parameter></term>
9093   <listitem>
9094    <para>
9095     the id to search
9096    </para>
9097   </listitem>
9098  </varlistentry>
9099 </variablelist>
9100</refsect1>
9101<refsect1>
9102<title>Description</title>
9103<para>
9104   Finds the control instance with the given id from the card.
9105   </para><para>
9106
9107   The caller must down card-&gt;controls_rwsem before calling this function
9108   (if the race condition can happen).
9109</para>
9110</refsect1>
9111<refsect1>
9112<title>Return</title>
9113<para>
9114   The pointer of the instance if found, or <constant>NULL</constant> if not.
9115</para>
9116</refsect1>
9117</refentry>
9118
9119<refentry id="API-snd-ctl-register-ioctl">
9120<refentryinfo>
9121 <title>LINUX</title>
9122 <productname>Kernel Hackers Manual</productname>
9123 <date>July 2017</date>
9124</refentryinfo>
9125<refmeta>
9126 <refentrytitle><phrase>snd_ctl_register_ioctl</phrase></refentrytitle>
9127 <manvolnum>9</manvolnum>
9128 <refmiscinfo class="version">4.4.14</refmiscinfo>
9129</refmeta>
9130<refnamediv>
9131 <refname>snd_ctl_register_ioctl</refname>
9132 <refpurpose>
9133     register the device-specific control-ioctls
9134 </refpurpose>
9135</refnamediv>
9136<refsynopsisdiv>
9137 <title>Synopsis</title>
9138  <funcsynopsis><funcprototype>
9139   <funcdef>int <function>snd_ctl_register_ioctl </function></funcdef>
9140   <paramdef>snd_kctl_ioctl_func_t <parameter>fcn</parameter></paramdef>
9141  </funcprototype></funcsynopsis>
9142</refsynopsisdiv>
9143<refsect1>
9144 <title>Arguments</title>
9145 <variablelist>
9146  <varlistentry>
9147   <term><parameter>fcn</parameter></term>
9148   <listitem>
9149    <para>
9150     ioctl callback function
9151    </para>
9152   </listitem>
9153  </varlistentry>
9154 </variablelist>
9155</refsect1>
9156<refsect1>
9157<title>Description</title>
9158<para>
9159   called from each device manager like pcm.c, hwdep.c, etc.
9160</para>
9161</refsect1>
9162</refentry>
9163
9164<refentry id="API-snd-ctl-register-ioctl-compat">
9165<refentryinfo>
9166 <title>LINUX</title>
9167 <productname>Kernel Hackers Manual</productname>
9168 <date>July 2017</date>
9169</refentryinfo>
9170<refmeta>
9171 <refentrytitle><phrase>snd_ctl_register_ioctl_compat</phrase></refentrytitle>
9172 <manvolnum>9</manvolnum>
9173 <refmiscinfo class="version">4.4.14</refmiscinfo>
9174</refmeta>
9175<refnamediv>
9176 <refname>snd_ctl_register_ioctl_compat</refname>
9177 <refpurpose>
9178     register the device-specific 32bit compat control-ioctls
9179 </refpurpose>
9180</refnamediv>
9181<refsynopsisdiv>
9182 <title>Synopsis</title>
9183  <funcsynopsis><funcprototype>
9184   <funcdef>int <function>snd_ctl_register_ioctl_compat </function></funcdef>
9185   <paramdef>snd_kctl_ioctl_func_t <parameter>fcn</parameter></paramdef>
9186  </funcprototype></funcsynopsis>
9187</refsynopsisdiv>
9188<refsect1>
9189 <title>Arguments</title>
9190 <variablelist>
9191  <varlistentry>
9192   <term><parameter>fcn</parameter></term>
9193   <listitem>
9194    <para>
9195     ioctl callback function
9196    </para>
9197   </listitem>
9198  </varlistentry>
9199 </variablelist>
9200</refsect1>
9201</refentry>
9202
9203<refentry id="API-snd-ctl-unregister-ioctl">
9204<refentryinfo>
9205 <title>LINUX</title>
9206 <productname>Kernel Hackers Manual</productname>
9207 <date>July 2017</date>
9208</refentryinfo>
9209<refmeta>
9210 <refentrytitle><phrase>snd_ctl_unregister_ioctl</phrase></refentrytitle>
9211 <manvolnum>9</manvolnum>
9212 <refmiscinfo class="version">4.4.14</refmiscinfo>
9213</refmeta>
9214<refnamediv>
9215 <refname>snd_ctl_unregister_ioctl</refname>
9216 <refpurpose>
9217     de-register the device-specific control-ioctls
9218 </refpurpose>
9219</refnamediv>
9220<refsynopsisdiv>
9221 <title>Synopsis</title>
9222  <funcsynopsis><funcprototype>
9223   <funcdef>int <function>snd_ctl_unregister_ioctl </function></funcdef>
9224   <paramdef>snd_kctl_ioctl_func_t <parameter>fcn</parameter></paramdef>
9225  </funcprototype></funcsynopsis>
9226</refsynopsisdiv>
9227<refsect1>
9228 <title>Arguments</title>
9229 <variablelist>
9230  <varlistentry>
9231   <term><parameter>fcn</parameter></term>
9232   <listitem>
9233    <para>
9234     ioctl callback function to unregister
9235    </para>
9236   </listitem>
9237  </varlistentry>
9238 </variablelist>
9239</refsect1>
9240</refentry>
9241
9242<refentry id="API-snd-ctl-unregister-ioctl-compat">
9243<refentryinfo>
9244 <title>LINUX</title>
9245 <productname>Kernel Hackers Manual</productname>
9246 <date>July 2017</date>
9247</refentryinfo>
9248<refmeta>
9249 <refentrytitle><phrase>snd_ctl_unregister_ioctl_compat</phrase></refentrytitle>
9250 <manvolnum>9</manvolnum>
9251 <refmiscinfo class="version">4.4.14</refmiscinfo>
9252</refmeta>
9253<refnamediv>
9254 <refname>snd_ctl_unregister_ioctl_compat</refname>
9255 <refpurpose>
9256     de-register the device-specific compat 32bit control-ioctls
9257 </refpurpose>
9258</refnamediv>
9259<refsynopsisdiv>
9260 <title>Synopsis</title>
9261  <funcsynopsis><funcprototype>
9262   <funcdef>int <function>snd_ctl_unregister_ioctl_compat </function></funcdef>
9263   <paramdef>snd_kctl_ioctl_func_t <parameter>fcn</parameter></paramdef>
9264  </funcprototype></funcsynopsis>
9265</refsynopsisdiv>
9266<refsect1>
9267 <title>Arguments</title>
9268 <variablelist>
9269  <varlistentry>
9270   <term><parameter>fcn</parameter></term>
9271   <listitem>
9272    <para>
9273     ioctl callback function to unregister
9274    </para>
9275   </listitem>
9276  </varlistentry>
9277 </variablelist>
9278</refsect1>
9279</refentry>
9280
9281<refentry id="API-snd-ctl-boolean-mono-info">
9282<refentryinfo>
9283 <title>LINUX</title>
9284 <productname>Kernel Hackers Manual</productname>
9285 <date>July 2017</date>
9286</refentryinfo>
9287<refmeta>
9288 <refentrytitle><phrase>snd_ctl_boolean_mono_info</phrase></refentrytitle>
9289 <manvolnum>9</manvolnum>
9290 <refmiscinfo class="version">4.4.14</refmiscinfo>
9291</refmeta>
9292<refnamediv>
9293 <refname>snd_ctl_boolean_mono_info</refname>
9294 <refpurpose>
9295     Helper function for a standard boolean info callback with a mono channel
9296 </refpurpose>
9297</refnamediv>
9298<refsynopsisdiv>
9299 <title>Synopsis</title>
9300  <funcsynopsis><funcprototype>
9301   <funcdef>int <function>snd_ctl_boolean_mono_info </function></funcdef>
9302   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
9303   <paramdef>struct snd_ctl_elem_info * <parameter>uinfo</parameter></paramdef>
9304  </funcprototype></funcsynopsis>
9305</refsynopsisdiv>
9306<refsect1>
9307 <title>Arguments</title>
9308 <variablelist>
9309  <varlistentry>
9310   <term><parameter>kcontrol</parameter></term>
9311   <listitem>
9312    <para>
9313     the kcontrol instance
9314    </para>
9315   </listitem>
9316  </varlistentry>
9317  <varlistentry>
9318   <term><parameter>uinfo</parameter></term>
9319   <listitem>
9320    <para>
9321     info to store
9322    </para>
9323   </listitem>
9324  </varlistentry>
9325 </variablelist>
9326</refsect1>
9327<refsect1>
9328<title>Description</title>
9329<para>
9330   This is a function that can be used as info callback for a standard
9331   boolean control with a single mono channel.
9332</para>
9333</refsect1>
9334</refentry>
9335
9336<refentry id="API-snd-ctl-boolean-stereo-info">
9337<refentryinfo>
9338 <title>LINUX</title>
9339 <productname>Kernel Hackers Manual</productname>
9340 <date>July 2017</date>
9341</refentryinfo>
9342<refmeta>
9343 <refentrytitle><phrase>snd_ctl_boolean_stereo_info</phrase></refentrytitle>
9344 <manvolnum>9</manvolnum>
9345 <refmiscinfo class="version">4.4.14</refmiscinfo>
9346</refmeta>
9347<refnamediv>
9348 <refname>snd_ctl_boolean_stereo_info</refname>
9349 <refpurpose>
9350     Helper function for a standard boolean info callback with stereo two channels
9351 </refpurpose>
9352</refnamediv>
9353<refsynopsisdiv>
9354 <title>Synopsis</title>
9355  <funcsynopsis><funcprototype>
9356   <funcdef>int <function>snd_ctl_boolean_stereo_info </function></funcdef>
9357   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
9358   <paramdef>struct snd_ctl_elem_info * <parameter>uinfo</parameter></paramdef>
9359  </funcprototype></funcsynopsis>
9360</refsynopsisdiv>
9361<refsect1>
9362 <title>Arguments</title>
9363 <variablelist>
9364  <varlistentry>
9365   <term><parameter>kcontrol</parameter></term>
9366   <listitem>
9367    <para>
9368     the kcontrol instance
9369    </para>
9370   </listitem>
9371  </varlistentry>
9372  <varlistentry>
9373   <term><parameter>uinfo</parameter></term>
9374   <listitem>
9375    <para>
9376     info to store
9377    </para>
9378   </listitem>
9379  </varlistentry>
9380 </variablelist>
9381</refsect1>
9382<refsect1>
9383<title>Description</title>
9384<para>
9385   This is a function that can be used as info callback for a standard
9386   boolean control with stereo two channels.
9387</para>
9388</refsect1>
9389</refentry>
9390
9391<refentry id="API-snd-ctl-enum-info">
9392<refentryinfo>
9393 <title>LINUX</title>
9394 <productname>Kernel Hackers Manual</productname>
9395 <date>July 2017</date>
9396</refentryinfo>
9397<refmeta>
9398 <refentrytitle><phrase>snd_ctl_enum_info</phrase></refentrytitle>
9399 <manvolnum>9</manvolnum>
9400 <refmiscinfo class="version">4.4.14</refmiscinfo>
9401</refmeta>
9402<refnamediv>
9403 <refname>snd_ctl_enum_info</refname>
9404 <refpurpose>
9405     fills the info structure for an enumerated control
9406 </refpurpose>
9407</refnamediv>
9408<refsynopsisdiv>
9409 <title>Synopsis</title>
9410  <funcsynopsis><funcprototype>
9411   <funcdef>int <function>snd_ctl_enum_info </function></funcdef>
9412   <paramdef>struct snd_ctl_elem_info * <parameter>info</parameter></paramdef>
9413   <paramdef>unsigned int <parameter>channels</parameter></paramdef>
9414   <paramdef>unsigned int <parameter>items</parameter></paramdef>
9415   <paramdef>const char *const <parameter>names[]</parameter></paramdef>
9416  </funcprototype></funcsynopsis>
9417</refsynopsisdiv>
9418<refsect1>
9419 <title>Arguments</title>
9420 <variablelist>
9421  <varlistentry>
9422   <term><parameter>info</parameter></term>
9423   <listitem>
9424    <para>
9425     the structure to be filled
9426    </para>
9427   </listitem>
9428  </varlistentry>
9429  <varlistentry>
9430   <term><parameter>channels</parameter></term>
9431   <listitem>
9432    <para>
9433     the number of the control's channels; often one
9434    </para>
9435   </listitem>
9436  </varlistentry>
9437  <varlistentry>
9438   <term><parameter>items</parameter></term>
9439   <listitem>
9440    <para>
9441     the number of control values; also the size of <parameter>names</parameter>
9442    </para>
9443   </listitem>
9444  </varlistentry>
9445  <varlistentry>
9446   <term><parameter>names[]</parameter></term>
9447   <listitem>
9448    <para>
9449     an array containing the names of all control values
9450    </para>
9451   </listitem>
9452  </varlistentry>
9453 </variablelist>
9454</refsect1>
9455<refsect1>
9456<title>Description</title>
9457<para>
9458   Sets all required fields in <parameter>info</parameter> to their appropriate values.
9459   If the control's accessibility is not the default (readable and writable),
9460   the caller has to fill <parameter>info</parameter>-&gt;access.
9461</para>
9462</refsect1>
9463<refsect1>
9464<title>Return</title>
9465<para>
9466   Zero.
9467</para>
9468</refsect1>
9469</refentry>
9470
9471     </sect1>
9472     <sect1><title>AC97 Codec API</title>
9473<!-- sound/pci/ac97/ac97_codec.c -->
9474<refentry id="API-snd-ac97-write">
9475<refentryinfo>
9476 <title>LINUX</title>
9477 <productname>Kernel Hackers Manual</productname>
9478 <date>July 2017</date>
9479</refentryinfo>
9480<refmeta>
9481 <refentrytitle><phrase>snd_ac97_write</phrase></refentrytitle>
9482 <manvolnum>9</manvolnum>
9483 <refmiscinfo class="version">4.4.14</refmiscinfo>
9484</refmeta>
9485<refnamediv>
9486 <refname>snd_ac97_write</refname>
9487 <refpurpose>
9488  write a value on the given register
9489 </refpurpose>
9490</refnamediv>
9491<refsynopsisdiv>
9492 <title>Synopsis</title>
9493  <funcsynopsis><funcprototype>
9494   <funcdef>void <function>snd_ac97_write </function></funcdef>
9495   <paramdef>struct snd_ac97 * <parameter>ac97</parameter></paramdef>
9496   <paramdef>unsigned short <parameter>reg</parameter></paramdef>
9497   <paramdef>unsigned short <parameter>value</parameter></paramdef>
9498  </funcprototype></funcsynopsis>
9499</refsynopsisdiv>
9500<refsect1>
9501 <title>Arguments</title>
9502 <variablelist>
9503  <varlistentry>
9504   <term><parameter>ac97</parameter></term>
9505   <listitem>
9506    <para>
9507     the ac97 instance
9508    </para>
9509   </listitem>
9510  </varlistentry>
9511  <varlistentry>
9512   <term><parameter>reg</parameter></term>
9513   <listitem>
9514    <para>
9515     the register to change
9516    </para>
9517   </listitem>
9518  </varlistentry>
9519  <varlistentry>
9520   <term><parameter>value</parameter></term>
9521   <listitem>
9522    <para>
9523     the value to set
9524    </para>
9525   </listitem>
9526  </varlistentry>
9527 </variablelist>
9528</refsect1>
9529<refsect1>
9530<title>Description</title>
9531<para>
9532   Writes a value on the given register.  This will invoke the write
9533   callback directly after the register check.
9534   This function doesn't change the register cache unlike
9535   #<function>snd_ca97_write_cache</function>, so use this only when you don't want to
9536   reflect the change to the suspend/resume state.
9537</para>
9538</refsect1>
9539</refentry>
9540
9541<refentry id="API-snd-ac97-read">
9542<refentryinfo>
9543 <title>LINUX</title>
9544 <productname>Kernel Hackers Manual</productname>
9545 <date>July 2017</date>
9546</refentryinfo>
9547<refmeta>
9548 <refentrytitle><phrase>snd_ac97_read</phrase></refentrytitle>
9549 <manvolnum>9</manvolnum>
9550 <refmiscinfo class="version">4.4.14</refmiscinfo>
9551</refmeta>
9552<refnamediv>
9553 <refname>snd_ac97_read</refname>
9554 <refpurpose>
9555     read a value from the given register
9556 </refpurpose>
9557</refnamediv>
9558<refsynopsisdiv>
9559 <title>Synopsis</title>
9560  <funcsynopsis><funcprototype>
9561   <funcdef>unsigned short <function>snd_ac97_read </function></funcdef>
9562   <paramdef>struct snd_ac97 * <parameter>ac97</parameter></paramdef>
9563   <paramdef>unsigned short <parameter>reg</parameter></paramdef>
9564  </funcprototype></funcsynopsis>
9565</refsynopsisdiv>
9566<refsect1>
9567 <title>Arguments</title>
9568 <variablelist>
9569  <varlistentry>
9570   <term><parameter>ac97</parameter></term>
9571   <listitem>
9572    <para>
9573     the ac97 instance
9574    </para>
9575   </listitem>
9576  </varlistentry>
9577  <varlistentry>
9578   <term><parameter>reg</parameter></term>
9579   <listitem>
9580    <para>
9581     the register to read
9582    </para>
9583   </listitem>
9584  </varlistentry>
9585 </variablelist>
9586</refsect1>
9587<refsect1>
9588<title>Description</title>
9589<para>
9590   Reads a value from the given register.  This will invoke the read
9591   callback directly after the register check.
9592</para>
9593</refsect1>
9594<refsect1>
9595<title>Return</title>
9596<para>
9597   The read value.
9598</para>
9599</refsect1>
9600</refentry>
9601
9602<refentry id="API-snd-ac97-write-cache">
9603<refentryinfo>
9604 <title>LINUX</title>
9605 <productname>Kernel Hackers Manual</productname>
9606 <date>July 2017</date>
9607</refentryinfo>
9608<refmeta>
9609 <refentrytitle><phrase>snd_ac97_write_cache</phrase></refentrytitle>
9610 <manvolnum>9</manvolnum>
9611 <refmiscinfo class="version">4.4.14</refmiscinfo>
9612</refmeta>
9613<refnamediv>
9614 <refname>snd_ac97_write_cache</refname>
9615 <refpurpose>
9616     write a value on the given register and update the cache
9617 </refpurpose>
9618</refnamediv>
9619<refsynopsisdiv>
9620 <title>Synopsis</title>
9621  <funcsynopsis><funcprototype>
9622   <funcdef>void <function>snd_ac97_write_cache </function></funcdef>
9623   <paramdef>struct snd_ac97 * <parameter>ac97</parameter></paramdef>
9624   <paramdef>unsigned short <parameter>reg</parameter></paramdef>
9625   <paramdef>unsigned short <parameter>value</parameter></paramdef>
9626  </funcprototype></funcsynopsis>
9627</refsynopsisdiv>
9628<refsect1>
9629 <title>Arguments</title>
9630 <variablelist>
9631  <varlistentry>
9632   <term><parameter>ac97</parameter></term>
9633   <listitem>
9634    <para>
9635     the ac97 instance
9636    </para>
9637   </listitem>
9638  </varlistentry>
9639  <varlistentry>
9640   <term><parameter>reg</parameter></term>
9641   <listitem>
9642    <para>
9643     the register to change
9644    </para>
9645   </listitem>
9646  </varlistentry>
9647  <varlistentry>
9648   <term><parameter>value</parameter></term>
9649   <listitem>
9650    <para>
9651     the value to set
9652    </para>
9653   </listitem>
9654  </varlistentry>
9655 </variablelist>
9656</refsect1>
9657<refsect1>
9658<title>Description</title>
9659<para>
9660   Writes a value on the given register and updates the register
9661   cache.  The cached values are used for the cached-read and the
9662   suspend/resume.
9663</para>
9664</refsect1>
9665</refentry>
9666
9667<refentry id="API-snd-ac97-update">
9668<refentryinfo>
9669 <title>LINUX</title>
9670 <productname>Kernel Hackers Manual</productname>
9671 <date>July 2017</date>
9672</refentryinfo>
9673<refmeta>
9674 <refentrytitle><phrase>snd_ac97_update</phrase></refentrytitle>
9675 <manvolnum>9</manvolnum>
9676 <refmiscinfo class="version">4.4.14</refmiscinfo>
9677</refmeta>
9678<refnamediv>
9679 <refname>snd_ac97_update</refname>
9680 <refpurpose>
9681     update the value on the given register
9682 </refpurpose>
9683</refnamediv>
9684<refsynopsisdiv>
9685 <title>Synopsis</title>
9686  <funcsynopsis><funcprototype>
9687   <funcdef>int <function>snd_ac97_update </function></funcdef>
9688   <paramdef>struct snd_ac97 * <parameter>ac97</parameter></paramdef>
9689   <paramdef>unsigned short <parameter>reg</parameter></paramdef>
9690   <paramdef>unsigned short <parameter>value</parameter></paramdef>
9691  </funcprototype></funcsynopsis>
9692</refsynopsisdiv>
9693<refsect1>
9694 <title>Arguments</title>
9695 <variablelist>
9696  <varlistentry>
9697   <term><parameter>ac97</parameter></term>
9698   <listitem>
9699    <para>
9700     the ac97 instance
9701    </para>
9702   </listitem>
9703  </varlistentry>
9704  <varlistentry>
9705   <term><parameter>reg</parameter></term>
9706   <listitem>
9707    <para>
9708     the register to change
9709    </para>
9710   </listitem>
9711  </varlistentry>
9712  <varlistentry>
9713   <term><parameter>value</parameter></term>
9714   <listitem>
9715    <para>
9716     the value to set
9717    </para>
9718   </listitem>
9719  </varlistentry>
9720 </variablelist>
9721</refsect1>
9722<refsect1>
9723<title>Description</title>
9724<para>
9725   Compares the value with the register cache and updates the value
9726   only when the value is changed.
9727</para>
9728</refsect1>
9729<refsect1>
9730<title>Return</title>
9731<para>
9732   1 if the value is changed, 0 if no change, or a negative
9733   code on failure.
9734</para>
9735</refsect1>
9736</refentry>
9737
9738<refentry id="API-snd-ac97-update-bits">
9739<refentryinfo>
9740 <title>LINUX</title>
9741 <productname>Kernel Hackers Manual</productname>
9742 <date>July 2017</date>
9743</refentryinfo>
9744<refmeta>
9745 <refentrytitle><phrase>snd_ac97_update_bits</phrase></refentrytitle>
9746 <manvolnum>9</manvolnum>
9747 <refmiscinfo class="version">4.4.14</refmiscinfo>
9748</refmeta>
9749<refnamediv>
9750 <refname>snd_ac97_update_bits</refname>
9751 <refpurpose>
9752     update the bits on the given register
9753 </refpurpose>
9754</refnamediv>
9755<refsynopsisdiv>
9756 <title>Synopsis</title>
9757  <funcsynopsis><funcprototype>
9758   <funcdef>int <function>snd_ac97_update_bits </function></funcdef>
9759   <paramdef>struct snd_ac97 * <parameter>ac97</parameter></paramdef>
9760   <paramdef>unsigned short <parameter>reg</parameter></paramdef>
9761   <paramdef>unsigned short <parameter>mask</parameter></paramdef>
9762   <paramdef>unsigned short <parameter>value</parameter></paramdef>
9763  </funcprototype></funcsynopsis>
9764</refsynopsisdiv>
9765<refsect1>
9766 <title>Arguments</title>
9767 <variablelist>
9768  <varlistentry>
9769   <term><parameter>ac97</parameter></term>
9770   <listitem>
9771    <para>
9772     the ac97 instance
9773    </para>
9774   </listitem>
9775  </varlistentry>
9776  <varlistentry>
9777   <term><parameter>reg</parameter></term>
9778   <listitem>
9779    <para>
9780     the register to change
9781    </para>
9782   </listitem>
9783  </varlistentry>
9784  <varlistentry>
9785   <term><parameter>mask</parameter></term>
9786   <listitem>
9787    <para>
9788     the bit-mask to change
9789    </para>
9790   </listitem>
9791  </varlistentry>
9792  <varlistentry>
9793   <term><parameter>value</parameter></term>
9794   <listitem>
9795    <para>
9796     the value to set
9797    </para>
9798   </listitem>
9799  </varlistentry>
9800 </variablelist>
9801</refsect1>
9802<refsect1>
9803<title>Description</title>
9804<para>
9805   Updates the masked-bits on the given register only when the value
9806   is changed.
9807</para>
9808</refsect1>
9809<refsect1>
9810<title>Return</title>
9811<para>
9812   1 if the bits are changed, 0 if no change, or a negative
9813   code on failure.
9814</para>
9815</refsect1>
9816</refentry>
9817
9818<refentry id="API-snd-ac97-get-short-name">
9819<refentryinfo>
9820 <title>LINUX</title>
9821 <productname>Kernel Hackers Manual</productname>
9822 <date>July 2017</date>
9823</refentryinfo>
9824<refmeta>
9825 <refentrytitle><phrase>snd_ac97_get_short_name</phrase></refentrytitle>
9826 <manvolnum>9</manvolnum>
9827 <refmiscinfo class="version">4.4.14</refmiscinfo>
9828</refmeta>
9829<refnamediv>
9830 <refname>snd_ac97_get_short_name</refname>
9831 <refpurpose>
9832     retrieve codec name
9833 </refpurpose>
9834</refnamediv>
9835<refsynopsisdiv>
9836 <title>Synopsis</title>
9837  <funcsynopsis><funcprototype>
9838   <funcdef>const char * <function>snd_ac97_get_short_name </function></funcdef>
9839   <paramdef>struct snd_ac97 * <parameter>ac97</parameter></paramdef>
9840  </funcprototype></funcsynopsis>
9841</refsynopsisdiv>
9842<refsect1>
9843 <title>Arguments</title>
9844 <variablelist>
9845  <varlistentry>
9846   <term><parameter>ac97</parameter></term>
9847   <listitem>
9848    <para>
9849     the codec instance
9850    </para>
9851   </listitem>
9852  </varlistentry>
9853 </variablelist>
9854</refsect1>
9855<refsect1>
9856<title>Return</title>
9857<para>
9858   The short identifying name of the codec.
9859</para>
9860</refsect1>
9861</refentry>
9862
9863<refentry id="API-snd-ac97-bus">
9864<refentryinfo>
9865 <title>LINUX</title>
9866 <productname>Kernel Hackers Manual</productname>
9867 <date>July 2017</date>
9868</refentryinfo>
9869<refmeta>
9870 <refentrytitle><phrase>snd_ac97_bus</phrase></refentrytitle>
9871 <manvolnum>9</manvolnum>
9872 <refmiscinfo class="version">4.4.14</refmiscinfo>
9873</refmeta>
9874<refnamediv>
9875 <refname>snd_ac97_bus</refname>
9876 <refpurpose>
9877     create an AC97 bus component
9878 </refpurpose>
9879</refnamediv>
9880<refsynopsisdiv>
9881 <title>Synopsis</title>
9882  <funcsynopsis><funcprototype>
9883   <funcdef>int <function>snd_ac97_bus </function></funcdef>
9884   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
9885   <paramdef>int <parameter>num</parameter></paramdef>
9886   <paramdef>struct snd_ac97_bus_ops * <parameter>ops</parameter></paramdef>
9887   <paramdef>void * <parameter>private_data</parameter></paramdef>
9888   <paramdef>struct snd_ac97_bus ** <parameter>rbus</parameter></paramdef>
9889  </funcprototype></funcsynopsis>
9890</refsynopsisdiv>
9891<refsect1>
9892 <title>Arguments</title>
9893 <variablelist>
9894  <varlistentry>
9895   <term><parameter>card</parameter></term>
9896   <listitem>
9897    <para>
9898     the card instance
9899    </para>
9900   </listitem>
9901  </varlistentry>
9902  <varlistentry>
9903   <term><parameter>num</parameter></term>
9904   <listitem>
9905    <para>
9906     the bus number
9907    </para>
9908   </listitem>
9909  </varlistentry>
9910  <varlistentry>
9911   <term><parameter>ops</parameter></term>
9912   <listitem>
9913    <para>
9914     the bus callbacks table
9915    </para>
9916   </listitem>
9917  </varlistentry>
9918  <varlistentry>
9919   <term><parameter>private_data</parameter></term>
9920   <listitem>
9921    <para>
9922     private data pointer for the new instance
9923    </para>
9924   </listitem>
9925  </varlistentry>
9926  <varlistentry>
9927   <term><parameter>rbus</parameter></term>
9928   <listitem>
9929    <para>
9930     the pointer to store the new AC97 bus instance.
9931    </para>
9932   </listitem>
9933  </varlistentry>
9934 </variablelist>
9935</refsect1>
9936<refsect1>
9937<title>Description</title>
9938<para>
9939   Creates an AC97 bus component.  An struct snd_ac97_bus instance is newly
9940   allocated and initialized.
9941   </para><para>
9942
9943   The ops table must include valid callbacks (at least read and
9944   write).  The other callbacks, wait and reset, are not mandatory.
9945   </para><para>
9946
9947   The clock is set to 48000.  If another clock is needed, set
9948   (*rbus)-&gt;clock manually.
9949   </para><para>
9950
9951   The AC97 bus instance is registered as a low-level device, so you don't
9952   have to release it manually.
9953</para>
9954</refsect1>
9955<refsect1>
9956<title>Return</title>
9957<para>
9958   Zero if successful, or a negative error code on failure.
9959</para>
9960</refsect1>
9961</refentry>
9962
9963<refentry id="API-snd-ac97-mixer">
9964<refentryinfo>
9965 <title>LINUX</title>
9966 <productname>Kernel Hackers Manual</productname>
9967 <date>July 2017</date>
9968</refentryinfo>
9969<refmeta>
9970 <refentrytitle><phrase>snd_ac97_mixer</phrase></refentrytitle>
9971 <manvolnum>9</manvolnum>
9972 <refmiscinfo class="version">4.4.14</refmiscinfo>
9973</refmeta>
9974<refnamediv>
9975 <refname>snd_ac97_mixer</refname>
9976 <refpurpose>
9977     create an Codec97 component
9978 </refpurpose>
9979</refnamediv>
9980<refsynopsisdiv>
9981 <title>Synopsis</title>
9982  <funcsynopsis><funcprototype>
9983   <funcdef>int <function>snd_ac97_mixer </function></funcdef>
9984   <paramdef>struct snd_ac97_bus * <parameter>bus</parameter></paramdef>
9985   <paramdef>struct snd_ac97_template * <parameter>template</parameter></paramdef>
9986   <paramdef>struct snd_ac97 ** <parameter>rac97</parameter></paramdef>
9987  </funcprototype></funcsynopsis>
9988</refsynopsisdiv>
9989<refsect1>
9990 <title>Arguments</title>
9991 <variablelist>
9992  <varlistentry>
9993   <term><parameter>bus</parameter></term>
9994   <listitem>
9995    <para>
9996     the AC97 bus which codec is attached to
9997    </para>
9998   </listitem>
9999  </varlistentry>
10000  <varlistentry>
10001   <term><parameter>template</parameter></term>
10002   <listitem>
10003    <para>
10004     the template of ac97, including index, callbacks and
10005     the private data.
10006    </para>
10007   </listitem>
10008  </varlistentry>
10009  <varlistentry>
10010   <term><parameter>rac97</parameter></term>
10011   <listitem>
10012    <para>
10013     the pointer to store the new ac97 instance.
10014    </para>
10015   </listitem>
10016  </varlistentry>
10017 </variablelist>
10018</refsect1>
10019<refsect1>
10020<title>Description</title>
10021<para>
10022   Creates an Codec97 component.  An struct snd_ac97 instance is newly
10023   allocated and initialized from the template.  The codec
10024   is then initialized by the standard procedure.
10025   </para><para>
10026
10027   The template must include the codec number (num) and address (addr),
10028   and the private data (private_data).
10029   </para><para>
10030
10031   The ac97 instance is registered as a low-level device, so you don't
10032   have to release it manually.
10033</para>
10034</refsect1>
10035<refsect1>
10036<title>Return</title>
10037<para>
10038   Zero if successful, or a negative error code on failure.
10039</para>
10040</refsect1>
10041</refentry>
10042
10043<refentry id="API-snd-ac97-update-power">
10044<refentryinfo>
10045 <title>LINUX</title>
10046 <productname>Kernel Hackers Manual</productname>
10047 <date>July 2017</date>
10048</refentryinfo>
10049<refmeta>
10050 <refentrytitle><phrase>snd_ac97_update_power</phrase></refentrytitle>
10051 <manvolnum>9</manvolnum>
10052 <refmiscinfo class="version">4.4.14</refmiscinfo>
10053</refmeta>
10054<refnamediv>
10055 <refname>snd_ac97_update_power</refname>
10056 <refpurpose>
10057     update the powerdown register
10058 </refpurpose>
10059</refnamediv>
10060<refsynopsisdiv>
10061 <title>Synopsis</title>
10062  <funcsynopsis><funcprototype>
10063   <funcdef>int <function>snd_ac97_update_power </function></funcdef>
10064   <paramdef>struct snd_ac97 * <parameter>ac97</parameter></paramdef>
10065   <paramdef>int <parameter>reg</parameter></paramdef>
10066   <paramdef>int <parameter>powerup</parameter></paramdef>
10067  </funcprototype></funcsynopsis>
10068</refsynopsisdiv>
10069<refsect1>
10070 <title>Arguments</title>
10071 <variablelist>
10072  <varlistentry>
10073   <term><parameter>ac97</parameter></term>
10074   <listitem>
10075    <para>
10076     the codec instance
10077    </para>
10078   </listitem>
10079  </varlistentry>
10080  <varlistentry>
10081   <term><parameter>reg</parameter></term>
10082   <listitem>
10083    <para>
10084     the rate register, e.g. AC97_PCM_FRONT_DAC_RATE
10085    </para>
10086   </listitem>
10087  </varlistentry>
10088  <varlistentry>
10089   <term><parameter>powerup</parameter></term>
10090   <listitem>
10091    <para>
10092     non-zero when power up the part
10093    </para>
10094   </listitem>
10095  </varlistentry>
10096 </variablelist>
10097</refsect1>
10098<refsect1>
10099<title>Description</title>
10100<para>
10101   Update the AC97 powerdown register bits of the given part.
10102</para>
10103</refsect1>
10104<refsect1>
10105<title>Return</title>
10106<para>
10107   Zero.
10108</para>
10109</refsect1>
10110</refentry>
10111
10112<refentry id="API-snd-ac97-suspend">
10113<refentryinfo>
10114 <title>LINUX</title>
10115 <productname>Kernel Hackers Manual</productname>
10116 <date>July 2017</date>
10117</refentryinfo>
10118<refmeta>
10119 <refentrytitle><phrase>snd_ac97_suspend</phrase></refentrytitle>
10120 <manvolnum>9</manvolnum>
10121 <refmiscinfo class="version">4.4.14</refmiscinfo>
10122</refmeta>
10123<refnamediv>
10124 <refname>snd_ac97_suspend</refname>
10125 <refpurpose>
10126     General suspend function for AC97 codec
10127 </refpurpose>
10128</refnamediv>
10129<refsynopsisdiv>
10130 <title>Synopsis</title>
10131  <funcsynopsis><funcprototype>
10132   <funcdef>void <function>snd_ac97_suspend </function></funcdef>
10133   <paramdef>struct snd_ac97 * <parameter>ac97</parameter></paramdef>
10134  </funcprototype></funcsynopsis>
10135</refsynopsisdiv>
10136<refsect1>
10137 <title>Arguments</title>
10138 <variablelist>
10139  <varlistentry>
10140   <term><parameter>ac97</parameter></term>
10141   <listitem>
10142    <para>
10143     the ac97 instance
10144    </para>
10145   </listitem>
10146  </varlistentry>
10147 </variablelist>
10148</refsect1>
10149<refsect1>
10150<title>Description</title>
10151<para>
10152   Suspends the codec, power down the chip.
10153</para>
10154</refsect1>
10155</refentry>
10156
10157<refentry id="API-snd-ac97-resume">
10158<refentryinfo>
10159 <title>LINUX</title>
10160 <productname>Kernel Hackers Manual</productname>
10161 <date>July 2017</date>
10162</refentryinfo>
10163<refmeta>
10164 <refentrytitle><phrase>snd_ac97_resume</phrase></refentrytitle>
10165 <manvolnum>9</manvolnum>
10166 <refmiscinfo class="version">4.4.14</refmiscinfo>
10167</refmeta>
10168<refnamediv>
10169 <refname>snd_ac97_resume</refname>
10170 <refpurpose>
10171     General resume function for AC97 codec
10172 </refpurpose>
10173</refnamediv>
10174<refsynopsisdiv>
10175 <title>Synopsis</title>
10176  <funcsynopsis><funcprototype>
10177   <funcdef>void <function>snd_ac97_resume </function></funcdef>
10178   <paramdef>struct snd_ac97 * <parameter>ac97</parameter></paramdef>
10179  </funcprototype></funcsynopsis>
10180</refsynopsisdiv>
10181<refsect1>
10182 <title>Arguments</title>
10183 <variablelist>
10184  <varlistentry>
10185   <term><parameter>ac97</parameter></term>
10186   <listitem>
10187    <para>
10188     the ac97 instance
10189    </para>
10190   </listitem>
10191  </varlistentry>
10192 </variablelist>
10193</refsect1>
10194<refsect1>
10195<title>Description</title>
10196<para>
10197   Do the standard resume procedure, power up and restoring the
10198   old register values.
10199</para>
10200</refsect1>
10201</refentry>
10202
10203<refentry id="API-snd-ac97-tune-hardware">
10204<refentryinfo>
10205 <title>LINUX</title>
10206 <productname>Kernel Hackers Manual</productname>
10207 <date>July 2017</date>
10208</refentryinfo>
10209<refmeta>
10210 <refentrytitle><phrase>snd_ac97_tune_hardware</phrase></refentrytitle>
10211 <manvolnum>9</manvolnum>
10212 <refmiscinfo class="version">4.4.14</refmiscinfo>
10213</refmeta>
10214<refnamediv>
10215 <refname>snd_ac97_tune_hardware</refname>
10216 <refpurpose>
10217     tune up the hardware
10218 </refpurpose>
10219</refnamediv>
10220<refsynopsisdiv>
10221 <title>Synopsis</title>
10222  <funcsynopsis><funcprototype>
10223   <funcdef>int <function>snd_ac97_tune_hardware </function></funcdef>
10224   <paramdef>struct snd_ac97 * <parameter>ac97</parameter></paramdef>
10225   <paramdef>const struct ac97_quirk * <parameter>quirk</parameter></paramdef>
10226   <paramdef>const char * <parameter>override</parameter></paramdef>
10227  </funcprototype></funcsynopsis>
10228</refsynopsisdiv>
10229<refsect1>
10230 <title>Arguments</title>
10231 <variablelist>
10232  <varlistentry>
10233   <term><parameter>ac97</parameter></term>
10234   <listitem>
10235    <para>
10236     the ac97 instance
10237    </para>
10238   </listitem>
10239  </varlistentry>
10240  <varlistentry>
10241   <term><parameter>quirk</parameter></term>
10242   <listitem>
10243    <para>
10244     quirk list
10245    </para>
10246   </listitem>
10247  </varlistentry>
10248  <varlistentry>
10249   <term><parameter>override</parameter></term>
10250   <listitem>
10251    <para>
10252     explicit quirk value (overrides the list if non-NULL)
10253    </para>
10254   </listitem>
10255  </varlistentry>
10256 </variablelist>
10257</refsect1>
10258<refsect1>
10259<title>Description</title>
10260<para>
10261   Do some workaround for each pci device, such as renaming of the
10262   headphone (true line-out) control as <quote>Master</quote>.
10263   The quirk-list must be terminated with a zero-filled entry.
10264</para>
10265</refsect1>
10266<refsect1>
10267<title>Return</title>
10268<para>
10269   Zero if successful, or a negative error code on failure.
10270</para>
10271</refsect1>
10272</refentry>
10273
10274<!-- sound/pci/ac97/ac97_pcm.c -->
10275<refentry id="API-snd-ac97-set-rate">
10276<refentryinfo>
10277 <title>LINUX</title>
10278 <productname>Kernel Hackers Manual</productname>
10279 <date>July 2017</date>
10280</refentryinfo>
10281<refmeta>
10282 <refentrytitle><phrase>snd_ac97_set_rate</phrase></refentrytitle>
10283 <manvolnum>9</manvolnum>
10284 <refmiscinfo class="version">4.4.14</refmiscinfo>
10285</refmeta>
10286<refnamediv>
10287 <refname>snd_ac97_set_rate</refname>
10288 <refpurpose>
10289  change the rate of the given input/output.
10290 </refpurpose>
10291</refnamediv>
10292<refsynopsisdiv>
10293 <title>Synopsis</title>
10294  <funcsynopsis><funcprototype>
10295   <funcdef>int <function>snd_ac97_set_rate </function></funcdef>
10296   <paramdef>struct snd_ac97 * <parameter>ac97</parameter></paramdef>
10297   <paramdef>int <parameter>reg</parameter></paramdef>
10298   <paramdef>unsigned int <parameter>rate</parameter></paramdef>
10299  </funcprototype></funcsynopsis>
10300</refsynopsisdiv>
10301<refsect1>
10302 <title>Arguments</title>
10303 <variablelist>
10304  <varlistentry>
10305   <term><parameter>ac97</parameter></term>
10306   <listitem>
10307    <para>
10308     the ac97 instance
10309    </para>
10310   </listitem>
10311  </varlistentry>
10312  <varlistentry>
10313   <term><parameter>reg</parameter></term>
10314   <listitem>
10315    <para>
10316     the register to change
10317    </para>
10318   </listitem>
10319  </varlistentry>
10320  <varlistentry>
10321   <term><parameter>rate</parameter></term>
10322   <listitem>
10323    <para>
10324     the sample rate to set
10325    </para>
10326   </listitem>
10327  </varlistentry>
10328 </variablelist>
10329</refsect1>
10330<refsect1>
10331<title>Description</title>
10332<para>
10333   Changes the rate of the given input/output on the codec.
10334   If the codec doesn't support VAR, the rate must be 48000 (except
10335   for SPDIF).
10336   </para><para>
10337
10338   The valid registers are AC97_PMC_MIC_ADC_RATE,
10339   AC97_PCM_FRONT_DAC_RATE, AC97_PCM_LR_ADC_RATE.
10340   AC97_PCM_SURR_DAC_RATE and AC97_PCM_LFE_DAC_RATE are accepted
10341   if the codec supports them.
10342   AC97_SPDIF is accepted as a pseudo register to modify the SPDIF
10343   status bits.
10344</para>
10345</refsect1>
10346<refsect1>
10347<title>Return</title>
10348<para>
10349   Zero if successful, or a negative error code on failure.
10350</para>
10351</refsect1>
10352</refentry>
10353
10354<refentry id="API-snd-ac97-pcm-assign">
10355<refentryinfo>
10356 <title>LINUX</title>
10357 <productname>Kernel Hackers Manual</productname>
10358 <date>July 2017</date>
10359</refentryinfo>
10360<refmeta>
10361 <refentrytitle><phrase>snd_ac97_pcm_assign</phrase></refentrytitle>
10362 <manvolnum>9</manvolnum>
10363 <refmiscinfo class="version">4.4.14</refmiscinfo>
10364</refmeta>
10365<refnamediv>
10366 <refname>snd_ac97_pcm_assign</refname>
10367 <refpurpose>
10368     assign AC97 slots to given PCM streams
10369 </refpurpose>
10370</refnamediv>
10371<refsynopsisdiv>
10372 <title>Synopsis</title>
10373  <funcsynopsis><funcprototype>
10374   <funcdef>int <function>snd_ac97_pcm_assign </function></funcdef>
10375   <paramdef>struct snd_ac97_bus * <parameter>bus</parameter></paramdef>
10376   <paramdef>unsigned short <parameter>pcms_count</parameter></paramdef>
10377   <paramdef>const struct ac97_pcm * <parameter>pcms</parameter></paramdef>
10378  </funcprototype></funcsynopsis>
10379</refsynopsisdiv>
10380<refsect1>
10381 <title>Arguments</title>
10382 <variablelist>
10383  <varlistentry>
10384   <term><parameter>bus</parameter></term>
10385   <listitem>
10386    <para>
10387     the ac97 bus instance
10388    </para>
10389   </listitem>
10390  </varlistentry>
10391  <varlistentry>
10392   <term><parameter>pcms_count</parameter></term>
10393   <listitem>
10394    <para>
10395     count of PCMs to be assigned
10396    </para>
10397   </listitem>
10398  </varlistentry>
10399  <varlistentry>
10400   <term><parameter>pcms</parameter></term>
10401   <listitem>
10402    <para>
10403     PCMs to be assigned
10404    </para>
10405   </listitem>
10406  </varlistentry>
10407 </variablelist>
10408</refsect1>
10409<refsect1>
10410<title>Description</title>
10411<para>
10412   It assigns available AC97 slots for given PCMs. If none or only
10413   some slots are available, pcm-&gt;xxx.slots and pcm-&gt;xxx.rslots[] members
10414   are reduced and might be zero.
10415</para>
10416</refsect1>
10417<refsect1>
10418<title>Return</title>
10419<para>
10420   Zero if successful, or a negative error code on failure.
10421</para>
10422</refsect1>
10423</refentry>
10424
10425<refentry id="API-snd-ac97-pcm-open">
10426<refentryinfo>
10427 <title>LINUX</title>
10428 <productname>Kernel Hackers Manual</productname>
10429 <date>July 2017</date>
10430</refentryinfo>
10431<refmeta>
10432 <refentrytitle><phrase>snd_ac97_pcm_open</phrase></refentrytitle>
10433 <manvolnum>9</manvolnum>
10434 <refmiscinfo class="version">4.4.14</refmiscinfo>
10435</refmeta>
10436<refnamediv>
10437 <refname>snd_ac97_pcm_open</refname>
10438 <refpurpose>
10439     opens the given AC97 pcm
10440 </refpurpose>
10441</refnamediv>
10442<refsynopsisdiv>
10443 <title>Synopsis</title>
10444  <funcsynopsis><funcprototype>
10445   <funcdef>int <function>snd_ac97_pcm_open </function></funcdef>
10446   <paramdef>struct ac97_pcm * <parameter>pcm</parameter></paramdef>
10447   <paramdef>unsigned int <parameter>rate</parameter></paramdef>
10448   <paramdef>enum ac97_pcm_cfg <parameter>cfg</parameter></paramdef>
10449   <paramdef>unsigned short <parameter>slots</parameter></paramdef>
10450  </funcprototype></funcsynopsis>
10451</refsynopsisdiv>
10452<refsect1>
10453 <title>Arguments</title>
10454 <variablelist>
10455  <varlistentry>
10456   <term><parameter>pcm</parameter></term>
10457   <listitem>
10458    <para>
10459     the ac97 pcm instance
10460    </para>
10461   </listitem>
10462  </varlistentry>
10463  <varlistentry>
10464   <term><parameter>rate</parameter></term>
10465   <listitem>
10466    <para>
10467     rate in Hz, if codec does not support VRA, this value must be 48000Hz
10468    </para>
10469   </listitem>
10470  </varlistentry>
10471  <varlistentry>
10472   <term><parameter>cfg</parameter></term>
10473   <listitem>
10474    <para>
10475     output stream characteristics
10476    </para>
10477   </listitem>
10478  </varlistentry>
10479  <varlistentry>
10480   <term><parameter>slots</parameter></term>
10481   <listitem>
10482    <para>
10483     a subset of allocated slots (snd_ac97_pcm_assign) for this pcm
10484    </para>
10485   </listitem>
10486  </varlistentry>
10487 </variablelist>
10488</refsect1>
10489<refsect1>
10490<title>Description</title>
10491<para>
10492   It locks the specified slots and sets the given rate to AC97 registers.
10493</para>
10494</refsect1>
10495<refsect1>
10496<title>Return</title>
10497<para>
10498   Zero if successful, or a negative error code on failure.
10499</para>
10500</refsect1>
10501</refentry>
10502
10503<refentry id="API-snd-ac97-pcm-close">
10504<refentryinfo>
10505 <title>LINUX</title>
10506 <productname>Kernel Hackers Manual</productname>
10507 <date>July 2017</date>
10508</refentryinfo>
10509<refmeta>
10510 <refentrytitle><phrase>snd_ac97_pcm_close</phrase></refentrytitle>
10511 <manvolnum>9</manvolnum>
10512 <refmiscinfo class="version">4.4.14</refmiscinfo>
10513</refmeta>
10514<refnamediv>
10515 <refname>snd_ac97_pcm_close</refname>
10516 <refpurpose>
10517     closes the given AC97 pcm
10518 </refpurpose>
10519</refnamediv>
10520<refsynopsisdiv>
10521 <title>Synopsis</title>
10522  <funcsynopsis><funcprototype>
10523   <funcdef>int <function>snd_ac97_pcm_close </function></funcdef>
10524   <paramdef>struct ac97_pcm * <parameter>pcm</parameter></paramdef>
10525  </funcprototype></funcsynopsis>
10526</refsynopsisdiv>
10527<refsect1>
10528 <title>Arguments</title>
10529 <variablelist>
10530  <varlistentry>
10531   <term><parameter>pcm</parameter></term>
10532   <listitem>
10533    <para>
10534     the ac97 pcm instance
10535    </para>
10536   </listitem>
10537  </varlistentry>
10538 </variablelist>
10539</refsect1>
10540<refsect1>
10541<title>Description</title>
10542<para>
10543   It frees the locked AC97 slots.
10544</para>
10545</refsect1>
10546<refsect1>
10547<title>Return</title>
10548<para>
10549   Zero.
10550</para>
10551</refsect1>
10552</refentry>
10553
10554<refentry id="API-snd-ac97-pcm-double-rate-rules">
10555<refentryinfo>
10556 <title>LINUX</title>
10557 <productname>Kernel Hackers Manual</productname>
10558 <date>July 2017</date>
10559</refentryinfo>
10560<refmeta>
10561 <refentrytitle><phrase>snd_ac97_pcm_double_rate_rules</phrase></refentrytitle>
10562 <manvolnum>9</manvolnum>
10563 <refmiscinfo class="version">4.4.14</refmiscinfo>
10564</refmeta>
10565<refnamediv>
10566 <refname>snd_ac97_pcm_double_rate_rules</refname>
10567 <refpurpose>
10568     set double rate constraints
10569 </refpurpose>
10570</refnamediv>
10571<refsynopsisdiv>
10572 <title>Synopsis</title>
10573  <funcsynopsis><funcprototype>
10574   <funcdef>int <function>snd_ac97_pcm_double_rate_rules </function></funcdef>
10575   <paramdef>struct snd_pcm_runtime * <parameter>runtime</parameter></paramdef>
10576  </funcprototype></funcsynopsis>
10577</refsynopsisdiv>
10578<refsect1>
10579 <title>Arguments</title>
10580 <variablelist>
10581  <varlistentry>
10582   <term><parameter>runtime</parameter></term>
10583   <listitem>
10584    <para>
10585     the runtime of the ac97 front playback pcm
10586    </para>
10587   </listitem>
10588  </varlistentry>
10589 </variablelist>
10590</refsect1>
10591<refsect1>
10592<title>Description</title>
10593<para>
10594   Installs the hardware constraint rules to prevent using double rates and
10595   more than two channels at the same time.
10596</para>
10597</refsect1>
10598<refsect1>
10599<title>Return</title>
10600<para>
10601   Zero if successful, or a negative error code on failure.
10602</para>
10603</refsect1>
10604</refentry>
10605
10606     </sect1>
10607     <sect1><title>Virtual Master Control API</title>
10608<!-- sound/core/vmaster.c -->
10609<refentry id="API-snd-ctl-make-virtual-master">
10610<refentryinfo>
10611 <title>LINUX</title>
10612 <productname>Kernel Hackers Manual</productname>
10613 <date>July 2017</date>
10614</refentryinfo>
10615<refmeta>
10616 <refentrytitle><phrase>snd_ctl_make_virtual_master</phrase></refentrytitle>
10617 <manvolnum>9</manvolnum>
10618 <refmiscinfo class="version">4.4.14</refmiscinfo>
10619</refmeta>
10620<refnamediv>
10621 <refname>snd_ctl_make_virtual_master</refname>
10622 <refpurpose>
10623  Create a virtual master control
10624 </refpurpose>
10625</refnamediv>
10626<refsynopsisdiv>
10627 <title>Synopsis</title>
10628  <funcsynopsis><funcprototype>
10629   <funcdef>struct snd_kcontrol * <function>snd_ctl_make_virtual_master </function></funcdef>
10630   <paramdef>char * <parameter>name</parameter></paramdef>
10631   <paramdef>const unsigned int * <parameter>tlv</parameter></paramdef>
10632  </funcprototype></funcsynopsis>
10633</refsynopsisdiv>
10634<refsect1>
10635 <title>Arguments</title>
10636 <variablelist>
10637  <varlistentry>
10638   <term><parameter>name</parameter></term>
10639   <listitem>
10640    <para>
10641     name string of the control element to create
10642    </para>
10643   </listitem>
10644  </varlistentry>
10645  <varlistentry>
10646   <term><parameter>tlv</parameter></term>
10647   <listitem>
10648    <para>
10649     optional TLV int array for dB information
10650    </para>
10651   </listitem>
10652  </varlistentry>
10653 </variablelist>
10654</refsect1>
10655<refsect1>
10656<title>Description</title>
10657<para>
10658   Creates a virtual master control with the given name string.
10659   </para><para>
10660
10661   After creating a vmaster element, you can add the slave controls
10662   via <function>snd_ctl_add_slave</function> or <function>snd_ctl_add_slave_uncached</function>.
10663   </para><para>
10664
10665   The optional argument <parameter>tlv</parameter> can be used to specify the TLV information
10666   for dB scale of the master control.  It should be a single element
10667   with #SNDRV_CTL_TLVT_DB_SCALE, #SNDRV_CTL_TLV_DB_MINMAX or
10668   #SNDRV_CTL_TLVT_DB_MINMAX_MUTE type, and should be the max 0dB.
10669</para>
10670</refsect1>
10671<refsect1>
10672<title>Return</title>
10673<para>
10674   The created control element, or <constant>NULL</constant> for errors (ENOMEM).
10675</para>
10676</refsect1>
10677</refentry>
10678
10679<refentry id="API-snd-ctl-add-vmaster-hook">
10680<refentryinfo>
10681 <title>LINUX</title>
10682 <productname>Kernel Hackers Manual</productname>
10683 <date>July 2017</date>
10684</refentryinfo>
10685<refmeta>
10686 <refentrytitle><phrase>snd_ctl_add_vmaster_hook</phrase></refentrytitle>
10687 <manvolnum>9</manvolnum>
10688 <refmiscinfo class="version">4.4.14</refmiscinfo>
10689</refmeta>
10690<refnamediv>
10691 <refname>snd_ctl_add_vmaster_hook</refname>
10692 <refpurpose>
10693     Add a hook to a vmaster control
10694 </refpurpose>
10695</refnamediv>
10696<refsynopsisdiv>
10697 <title>Synopsis</title>
10698  <funcsynopsis><funcprototype>
10699   <funcdef>int <function>snd_ctl_add_vmaster_hook </function></funcdef>
10700   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
10701   <paramdef>void (*<parameter>hook</parameter>)
10702     <funcparams>void *private_data, int</funcparams></paramdef>
10703   <paramdef>void * <parameter>private_data</parameter></paramdef>
10704  </funcprototype></funcsynopsis>
10705</refsynopsisdiv>
10706<refsect1>
10707 <title>Arguments</title>
10708 <variablelist>
10709  <varlistentry>
10710   <term><parameter>kcontrol</parameter></term>
10711   <listitem>
10712    <para>
10713     vmaster kctl element
10714    </para>
10715   </listitem>
10716  </varlistentry>
10717  <varlistentry>
10718   <term><parameter>hook</parameter></term>
10719   <listitem>
10720    <para>
10721     the hook function
10722    </para>
10723   </listitem>
10724  </varlistentry>
10725  <varlistentry>
10726   <term><parameter>private_data</parameter></term>
10727   <listitem>
10728    <para>
10729     the private_data pointer to be saved
10730    </para>
10731   </listitem>
10732  </varlistentry>
10733 </variablelist>
10734</refsect1>
10735<refsect1>
10736<title>Description</title>
10737<para>
10738   Adds the given hook to the vmaster control element so that it's called
10739   at each time when the value is changed.
10740</para>
10741</refsect1>
10742<refsect1>
10743<title>Return</title>
10744<para>
10745   Zero.
10746</para>
10747</refsect1>
10748</refentry>
10749
10750<refentry id="API-snd-ctl-sync-vmaster">
10751<refentryinfo>
10752 <title>LINUX</title>
10753 <productname>Kernel Hackers Manual</productname>
10754 <date>July 2017</date>
10755</refentryinfo>
10756<refmeta>
10757 <refentrytitle><phrase>snd_ctl_sync_vmaster</phrase></refentrytitle>
10758 <manvolnum>9</manvolnum>
10759 <refmiscinfo class="version">4.4.14</refmiscinfo>
10760</refmeta>
10761<refnamediv>
10762 <refname>snd_ctl_sync_vmaster</refname>
10763 <refpurpose>
10764     Sync the vmaster slaves and hook
10765 </refpurpose>
10766</refnamediv>
10767<refsynopsisdiv>
10768 <title>Synopsis</title>
10769  <funcsynopsis><funcprototype>
10770   <funcdef>void <function>snd_ctl_sync_vmaster </function></funcdef>
10771   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
10772   <paramdef>bool <parameter>hook_only</parameter></paramdef>
10773  </funcprototype></funcsynopsis>
10774</refsynopsisdiv>
10775<refsect1>
10776 <title>Arguments</title>
10777 <variablelist>
10778  <varlistentry>
10779   <term><parameter>kcontrol</parameter></term>
10780   <listitem>
10781    <para>
10782     vmaster kctl element
10783    </para>
10784   </listitem>
10785  </varlistentry>
10786  <varlistentry>
10787   <term><parameter>hook_only</parameter></term>
10788   <listitem>
10789    <para>
10790     sync only the hook
10791    </para>
10792   </listitem>
10793  </varlistentry>
10794 </variablelist>
10795</refsect1>
10796<refsect1>
10797<title>Description</title>
10798<para>
10799   Forcibly call the put callback of each slave and call the hook function
10800   to synchronize with the current value of the given vmaster element.
10801   NOP when NULL is passed to <parameter>kcontrol</parameter>.
10802</para>
10803</refsect1>
10804</refentry>
10805
10806<!-- include/sound/control.h -->
10807<refentry id="API-snd-ctl-add-slave">
10808<refentryinfo>
10809 <title>LINUX</title>
10810 <productname>Kernel Hackers Manual</productname>
10811 <date>July 2017</date>
10812</refentryinfo>
10813<refmeta>
10814 <refentrytitle><phrase>snd_ctl_add_slave</phrase></refentrytitle>
10815 <manvolnum>9</manvolnum>
10816 <refmiscinfo class="version">4.4.14</refmiscinfo>
10817</refmeta>
10818<refnamediv>
10819 <refname>snd_ctl_add_slave</refname>
10820 <refpurpose>
10821  Add a virtual slave control
10822 </refpurpose>
10823</refnamediv>
10824<refsynopsisdiv>
10825 <title>Synopsis</title>
10826  <funcsynopsis><funcprototype>
10827   <funcdef>int <function>snd_ctl_add_slave </function></funcdef>
10828   <paramdef>struct snd_kcontrol * <parameter>master</parameter></paramdef>
10829   <paramdef>struct snd_kcontrol * <parameter>slave</parameter></paramdef>
10830  </funcprototype></funcsynopsis>
10831</refsynopsisdiv>
10832<refsect1>
10833 <title>Arguments</title>
10834 <variablelist>
10835  <varlistentry>
10836   <term><parameter>master</parameter></term>
10837   <listitem>
10838    <para>
10839     vmaster element
10840    </para>
10841   </listitem>
10842  </varlistentry>
10843  <varlistentry>
10844   <term><parameter>slave</parameter></term>
10845   <listitem>
10846    <para>
10847     slave element to add
10848    </para>
10849   </listitem>
10850  </varlistentry>
10851 </variablelist>
10852</refsect1>
10853<refsect1>
10854<title>Description</title>
10855<para>
10856   Add a virtual slave control to the given master element created via
10857   <function>snd_ctl_create_virtual_master</function> beforehand.
10858   </para><para>
10859
10860   All slaves must be the same type (returning the same information
10861   via info callback).  The function doesn't check it, so it's your
10862   responsibility.
10863   </para><para>
10864
10865   Also, some additional limitations:
10866   at most two channels,
10867   logarithmic volume control (dB level) thus no linear volume,
10868   master can only attenuate the volume without gain
10869</para>
10870</refsect1>
10871<refsect1>
10872<title>Return</title>
10873<para>
10874   Zero if successful or a negative error code.
10875</para>
10876</refsect1>
10877</refentry>
10878
10879<refentry id="API-snd-ctl-add-slave-uncached">
10880<refentryinfo>
10881 <title>LINUX</title>
10882 <productname>Kernel Hackers Manual</productname>
10883 <date>July 2017</date>
10884</refentryinfo>
10885<refmeta>
10886 <refentrytitle><phrase>snd_ctl_add_slave_uncached</phrase></refentrytitle>
10887 <manvolnum>9</manvolnum>
10888 <refmiscinfo class="version">4.4.14</refmiscinfo>
10889</refmeta>
10890<refnamediv>
10891 <refname>snd_ctl_add_slave_uncached</refname>
10892 <refpurpose>
10893     Add a virtual slave control
10894 </refpurpose>
10895</refnamediv>
10896<refsynopsisdiv>
10897 <title>Synopsis</title>
10898  <funcsynopsis><funcprototype>
10899   <funcdef>int <function>snd_ctl_add_slave_uncached </function></funcdef>
10900   <paramdef>struct snd_kcontrol * <parameter>master</parameter></paramdef>
10901   <paramdef>struct snd_kcontrol * <parameter>slave</parameter></paramdef>
10902  </funcprototype></funcsynopsis>
10903</refsynopsisdiv>
10904<refsect1>
10905 <title>Arguments</title>
10906 <variablelist>
10907  <varlistentry>
10908   <term><parameter>master</parameter></term>
10909   <listitem>
10910    <para>
10911     vmaster element
10912    </para>
10913   </listitem>
10914  </varlistentry>
10915  <varlistentry>
10916   <term><parameter>slave</parameter></term>
10917   <listitem>
10918    <para>
10919     slave element to add
10920    </para>
10921   </listitem>
10922  </varlistentry>
10923 </variablelist>
10924</refsect1>
10925<refsect1>
10926<title>Description</title>
10927<para>
10928   Add a virtual slave control to the given master.
10929   Unlike <function>snd_ctl_add_slave</function>, the element added via this function
10930   is supposed to have volatile values, and get callback is called
10931   at each time queried from the master.
10932   </para><para>
10933
10934   When the control peeks the hardware values directly and the value
10935   can be changed by other means than the put callback of the element,
10936   this function should be used to keep the value always up-to-date.
10937</para>
10938</refsect1>
10939<refsect1>
10940<title>Return</title>
10941<para>
10942   Zero if successful or a negative error code.
10943</para>
10944</refsect1>
10945</refentry>
10946
10947     </sect1>
10948  </chapter>
10949  <chapter><title>MIDI API</title>
10950     <sect1><title>Raw MIDI API</title>
10951<!-- sound/core/rawmidi.c -->
10952<refentry id="API-snd-rawmidi-receive">
10953<refentryinfo>
10954 <title>LINUX</title>
10955 <productname>Kernel Hackers Manual</productname>
10956 <date>July 2017</date>
10957</refentryinfo>
10958<refmeta>
10959 <refentrytitle><phrase>snd_rawmidi_receive</phrase></refentrytitle>
10960 <manvolnum>9</manvolnum>
10961 <refmiscinfo class="version">4.4.14</refmiscinfo>
10962</refmeta>
10963<refnamediv>
10964 <refname>snd_rawmidi_receive</refname>
10965 <refpurpose>
10966  receive the input data from the device
10967 </refpurpose>
10968</refnamediv>
10969<refsynopsisdiv>
10970 <title>Synopsis</title>
10971  <funcsynopsis><funcprototype>
10972   <funcdef>int <function>snd_rawmidi_receive </function></funcdef>
10973   <paramdef>struct snd_rawmidi_substream * <parameter>substream</parameter></paramdef>
10974   <paramdef>const unsigned char * <parameter>buffer</parameter></paramdef>
10975   <paramdef>int <parameter>count</parameter></paramdef>
10976  </funcprototype></funcsynopsis>
10977</refsynopsisdiv>
10978<refsect1>
10979 <title>Arguments</title>
10980 <variablelist>
10981  <varlistentry>
10982   <term><parameter>substream</parameter></term>
10983   <listitem>
10984    <para>
10985     the rawmidi substream
10986    </para>
10987   </listitem>
10988  </varlistentry>
10989  <varlistentry>
10990   <term><parameter>buffer</parameter></term>
10991   <listitem>
10992    <para>
10993     the buffer pointer
10994    </para>
10995   </listitem>
10996  </varlistentry>
10997  <varlistentry>
10998   <term><parameter>count</parameter></term>
10999   <listitem>
11000    <para>
11001     the data size to read
11002    </para>
11003   </listitem>
11004  </varlistentry>
11005 </variablelist>
11006</refsect1>
11007<refsect1>
11008<title>Description</title>
11009<para>
11010   Reads the data from the internal buffer.
11011</para>
11012</refsect1>
11013<refsect1>
11014<title>Return</title>
11015<para>
11016   The size of read data, or a negative error code on failure.
11017</para>
11018</refsect1>
11019</refentry>
11020
11021<refentry id="API-snd-rawmidi-transmit-empty">
11022<refentryinfo>
11023 <title>LINUX</title>
11024 <productname>Kernel Hackers Manual</productname>
11025 <date>July 2017</date>
11026</refentryinfo>
11027<refmeta>
11028 <refentrytitle><phrase>snd_rawmidi_transmit_empty</phrase></refentrytitle>
11029 <manvolnum>9</manvolnum>
11030 <refmiscinfo class="version">4.4.14</refmiscinfo>
11031</refmeta>
11032<refnamediv>
11033 <refname>snd_rawmidi_transmit_empty</refname>
11034 <refpurpose>
11035     check whether the output buffer is empty
11036 </refpurpose>
11037</refnamediv>
11038<refsynopsisdiv>
11039 <title>Synopsis</title>
11040  <funcsynopsis><funcprototype>
11041   <funcdef>int <function>snd_rawmidi_transmit_empty </function></funcdef>
11042   <paramdef>struct snd_rawmidi_substream * <parameter>substream</parameter></paramdef>
11043  </funcprototype></funcsynopsis>
11044</refsynopsisdiv>
11045<refsect1>
11046 <title>Arguments</title>
11047 <variablelist>
11048  <varlistentry>
11049   <term><parameter>substream</parameter></term>
11050   <listitem>
11051    <para>
11052     the rawmidi substream
11053    </para>
11054   </listitem>
11055  </varlistentry>
11056 </variablelist>
11057</refsect1>
11058<refsect1>
11059<title>Return</title>
11060<para>
11061   1 if the internal output buffer is empty, 0 if not.
11062</para>
11063</refsect1>
11064</refentry>
11065
11066<refentry id="API---snd-rawmidi-transmit-peek">
11067<refentryinfo>
11068 <title>LINUX</title>
11069 <productname>Kernel Hackers Manual</productname>
11070 <date>July 2017</date>
11071</refentryinfo>
11072<refmeta>
11073 <refentrytitle><phrase>__snd_rawmidi_transmit_peek</phrase></refentrytitle>
11074 <manvolnum>9</manvolnum>
11075 <refmiscinfo class="version">4.4.14</refmiscinfo>
11076</refmeta>
11077<refnamediv>
11078 <refname>__snd_rawmidi_transmit_peek</refname>
11079 <refpurpose>
11080     copy data from the internal buffer
11081 </refpurpose>
11082</refnamediv>
11083<refsynopsisdiv>
11084 <title>Synopsis</title>
11085  <funcsynopsis><funcprototype>
11086   <funcdef>int <function>__snd_rawmidi_transmit_peek </function></funcdef>
11087   <paramdef>struct snd_rawmidi_substream * <parameter>substream</parameter></paramdef>
11088   <paramdef>unsigned char * <parameter>buffer</parameter></paramdef>
11089   <paramdef>int <parameter>count</parameter></paramdef>
11090  </funcprototype></funcsynopsis>
11091</refsynopsisdiv>
11092<refsect1>
11093 <title>Arguments</title>
11094 <variablelist>
11095  <varlistentry>
11096   <term><parameter>substream</parameter></term>
11097   <listitem>
11098    <para>
11099     the rawmidi substream
11100    </para>
11101   </listitem>
11102  </varlistentry>
11103  <varlistentry>
11104   <term><parameter>buffer</parameter></term>
11105   <listitem>
11106    <para>
11107     the buffer pointer
11108    </para>
11109   </listitem>
11110  </varlistentry>
11111  <varlistentry>
11112   <term><parameter>count</parameter></term>
11113   <listitem>
11114    <para>
11115     data size to transfer
11116    </para>
11117   </listitem>
11118  </varlistentry>
11119 </variablelist>
11120</refsect1>
11121<refsect1>
11122<title>Description</title>
11123<para>
11124   This is a variant of <function>snd_rawmidi_transmit_peek</function> without spinlock.
11125</para>
11126</refsect1>
11127</refentry>
11128
11129<refentry id="API-snd-rawmidi-transmit-peek">
11130<refentryinfo>
11131 <title>LINUX</title>
11132 <productname>Kernel Hackers Manual</productname>
11133 <date>July 2017</date>
11134</refentryinfo>
11135<refmeta>
11136 <refentrytitle><phrase>snd_rawmidi_transmit_peek</phrase></refentrytitle>
11137 <manvolnum>9</manvolnum>
11138 <refmiscinfo class="version">4.4.14</refmiscinfo>
11139</refmeta>
11140<refnamediv>
11141 <refname>snd_rawmidi_transmit_peek</refname>
11142 <refpurpose>
11143     copy data from the internal buffer
11144 </refpurpose>
11145</refnamediv>
11146<refsynopsisdiv>
11147 <title>Synopsis</title>
11148  <funcsynopsis><funcprototype>
11149   <funcdef>int <function>snd_rawmidi_transmit_peek </function></funcdef>
11150   <paramdef>struct snd_rawmidi_substream * <parameter>substream</parameter></paramdef>
11151   <paramdef>unsigned char * <parameter>buffer</parameter></paramdef>
11152   <paramdef>int <parameter>count</parameter></paramdef>
11153  </funcprototype></funcsynopsis>
11154</refsynopsisdiv>
11155<refsect1>
11156 <title>Arguments</title>
11157 <variablelist>
11158  <varlistentry>
11159   <term><parameter>substream</parameter></term>
11160   <listitem>
11161    <para>
11162     the rawmidi substream
11163    </para>
11164   </listitem>
11165  </varlistentry>
11166  <varlistentry>
11167   <term><parameter>buffer</parameter></term>
11168   <listitem>
11169    <para>
11170     the buffer pointer
11171    </para>
11172   </listitem>
11173  </varlistentry>
11174  <varlistentry>
11175   <term><parameter>count</parameter></term>
11176   <listitem>
11177    <para>
11178     data size to transfer
11179    </para>
11180   </listitem>
11181  </varlistentry>
11182 </variablelist>
11183</refsect1>
11184<refsect1>
11185<title>Description</title>
11186<para>
11187   Copies data from the internal output buffer to the given buffer.
11188   </para><para>
11189
11190   Call this in the interrupt handler when the midi output is ready,
11191   and call <function>snd_rawmidi_transmit_ack</function> after the transmission is
11192   finished.
11193</para>
11194</refsect1>
11195<refsect1>
11196<title>Return</title>
11197<para>
11198   The size of copied data, or a negative error code on failure.
11199</para>
11200</refsect1>
11201</refentry>
11202
11203<refentry id="API---snd-rawmidi-transmit-ack">
11204<refentryinfo>
11205 <title>LINUX</title>
11206 <productname>Kernel Hackers Manual</productname>
11207 <date>July 2017</date>
11208</refentryinfo>
11209<refmeta>
11210 <refentrytitle><phrase>__snd_rawmidi_transmit_ack</phrase></refentrytitle>
11211 <manvolnum>9</manvolnum>
11212 <refmiscinfo class="version">4.4.14</refmiscinfo>
11213</refmeta>
11214<refnamediv>
11215 <refname>__snd_rawmidi_transmit_ack</refname>
11216 <refpurpose>
11217     acknowledge the transmission
11218 </refpurpose>
11219</refnamediv>
11220<refsynopsisdiv>
11221 <title>Synopsis</title>
11222  <funcsynopsis><funcprototype>
11223   <funcdef>int <function>__snd_rawmidi_transmit_ack </function></funcdef>
11224   <paramdef>struct snd_rawmidi_substream * <parameter>substream</parameter></paramdef>
11225   <paramdef>int <parameter>count</parameter></paramdef>
11226  </funcprototype></funcsynopsis>
11227</refsynopsisdiv>
11228<refsect1>
11229 <title>Arguments</title>
11230 <variablelist>
11231  <varlistentry>
11232   <term><parameter>substream</parameter></term>
11233   <listitem>
11234    <para>
11235     the rawmidi substream
11236    </para>
11237   </listitem>
11238  </varlistentry>
11239  <varlistentry>
11240   <term><parameter>count</parameter></term>
11241   <listitem>
11242    <para>
11243     the transferred count
11244    </para>
11245   </listitem>
11246  </varlistentry>
11247 </variablelist>
11248</refsect1>
11249<refsect1>
11250<title>Description</title>
11251<para>
11252   This is a variant of <function>__snd_rawmidi_transmit_ack</function> without spinlock.
11253</para>
11254</refsect1>
11255</refentry>
11256
11257<refentry id="API-snd-rawmidi-transmit-ack">
11258<refentryinfo>
11259 <title>LINUX</title>
11260 <productname>Kernel Hackers Manual</productname>
11261 <date>July 2017</date>
11262</refentryinfo>
11263<refmeta>
11264 <refentrytitle><phrase>snd_rawmidi_transmit_ack</phrase></refentrytitle>
11265 <manvolnum>9</manvolnum>
11266 <refmiscinfo class="version">4.4.14</refmiscinfo>
11267</refmeta>
11268<refnamediv>
11269 <refname>snd_rawmidi_transmit_ack</refname>
11270 <refpurpose>
11271     acknowledge the transmission
11272 </refpurpose>
11273</refnamediv>
11274<refsynopsisdiv>
11275 <title>Synopsis</title>
11276  <funcsynopsis><funcprototype>
11277   <funcdef>int <function>snd_rawmidi_transmit_ack </function></funcdef>
11278   <paramdef>struct snd_rawmidi_substream * <parameter>substream</parameter></paramdef>
11279   <paramdef>int <parameter>count</parameter></paramdef>
11280  </funcprototype></funcsynopsis>
11281</refsynopsisdiv>
11282<refsect1>
11283 <title>Arguments</title>
11284 <variablelist>
11285  <varlistentry>
11286   <term><parameter>substream</parameter></term>
11287   <listitem>
11288    <para>
11289     the rawmidi substream
11290    </para>
11291   </listitem>
11292  </varlistentry>
11293  <varlistentry>
11294   <term><parameter>count</parameter></term>
11295   <listitem>
11296    <para>
11297     the transferred count
11298    </para>
11299   </listitem>
11300  </varlistentry>
11301 </variablelist>
11302</refsect1>
11303<refsect1>
11304<title>Description</title>
11305<para>
11306   Advances the hardware pointer for the internal output buffer with
11307   the given size and updates the condition.
11308   Call after the transmission is finished.
11309</para>
11310</refsect1>
11311<refsect1>
11312<title>Return</title>
11313<para>
11314   The advanced size if successful, or a negative error code on failure.
11315</para>
11316</refsect1>
11317</refentry>
11318
11319<refentry id="API-snd-rawmidi-transmit">
11320<refentryinfo>
11321 <title>LINUX</title>
11322 <productname>Kernel Hackers Manual</productname>
11323 <date>July 2017</date>
11324</refentryinfo>
11325<refmeta>
11326 <refentrytitle><phrase>snd_rawmidi_transmit</phrase></refentrytitle>
11327 <manvolnum>9</manvolnum>
11328 <refmiscinfo class="version">4.4.14</refmiscinfo>
11329</refmeta>
11330<refnamediv>
11331 <refname>snd_rawmidi_transmit</refname>
11332 <refpurpose>
11333     copy from the buffer to the device
11334 </refpurpose>
11335</refnamediv>
11336<refsynopsisdiv>
11337 <title>Synopsis</title>
11338  <funcsynopsis><funcprototype>
11339   <funcdef>int <function>snd_rawmidi_transmit </function></funcdef>
11340   <paramdef>struct snd_rawmidi_substream * <parameter>substream</parameter></paramdef>
11341   <paramdef>unsigned char * <parameter>buffer</parameter></paramdef>
11342   <paramdef>int <parameter>count</parameter></paramdef>
11343  </funcprototype></funcsynopsis>
11344</refsynopsisdiv>
11345<refsect1>
11346 <title>Arguments</title>
11347 <variablelist>
11348  <varlistentry>
11349   <term><parameter>substream</parameter></term>
11350   <listitem>
11351    <para>
11352     the rawmidi substream
11353    </para>
11354   </listitem>
11355  </varlistentry>
11356  <varlistentry>
11357   <term><parameter>buffer</parameter></term>
11358   <listitem>
11359    <para>
11360     the buffer pointer
11361    </para>
11362   </listitem>
11363  </varlistentry>
11364  <varlistentry>
11365   <term><parameter>count</parameter></term>
11366   <listitem>
11367    <para>
11368     the data size to transfer
11369    </para>
11370   </listitem>
11371  </varlistentry>
11372 </variablelist>
11373</refsect1>
11374<refsect1>
11375<title>Description</title>
11376<para>
11377   Copies data from the buffer to the device and advances the pointer.
11378</para>
11379</refsect1>
11380<refsect1>
11381<title>Return</title>
11382<para>
11383   The copied size if successful, or a negative error code on failure.
11384</para>
11385</refsect1>
11386</refentry>
11387
11388<refentry id="API-snd-rawmidi-new">
11389<refentryinfo>
11390 <title>LINUX</title>
11391 <productname>Kernel Hackers Manual</productname>
11392 <date>July 2017</date>
11393</refentryinfo>
11394<refmeta>
11395 <refentrytitle><phrase>snd_rawmidi_new</phrase></refentrytitle>
11396 <manvolnum>9</manvolnum>
11397 <refmiscinfo class="version">4.4.14</refmiscinfo>
11398</refmeta>
11399<refnamediv>
11400 <refname>snd_rawmidi_new</refname>
11401 <refpurpose>
11402     create a rawmidi instance
11403 </refpurpose>
11404</refnamediv>
11405<refsynopsisdiv>
11406 <title>Synopsis</title>
11407  <funcsynopsis><funcprototype>
11408   <funcdef>int <function>snd_rawmidi_new </function></funcdef>
11409   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
11410   <paramdef>char * <parameter>id</parameter></paramdef>
11411   <paramdef>int <parameter>device</parameter></paramdef>
11412   <paramdef>int <parameter>output_count</parameter></paramdef>
11413   <paramdef>int <parameter>input_count</parameter></paramdef>
11414   <paramdef>struct snd_rawmidi ** <parameter>rrawmidi</parameter></paramdef>
11415  </funcprototype></funcsynopsis>
11416</refsynopsisdiv>
11417<refsect1>
11418 <title>Arguments</title>
11419 <variablelist>
11420  <varlistentry>
11421   <term><parameter>card</parameter></term>
11422   <listitem>
11423    <para>
11424     the card instance
11425    </para>
11426   </listitem>
11427  </varlistentry>
11428  <varlistentry>
11429   <term><parameter>id</parameter></term>
11430   <listitem>
11431    <para>
11432     the id string
11433    </para>
11434   </listitem>
11435  </varlistentry>
11436  <varlistentry>
11437   <term><parameter>device</parameter></term>
11438   <listitem>
11439    <para>
11440     the device index
11441    </para>
11442   </listitem>
11443  </varlistentry>
11444  <varlistentry>
11445   <term><parameter>output_count</parameter></term>
11446   <listitem>
11447    <para>
11448     the number of output streams
11449    </para>
11450   </listitem>
11451  </varlistentry>
11452  <varlistentry>
11453   <term><parameter>input_count</parameter></term>
11454   <listitem>
11455    <para>
11456     the number of input streams
11457    </para>
11458   </listitem>
11459  </varlistentry>
11460  <varlistentry>
11461   <term><parameter>rrawmidi</parameter></term>
11462   <listitem>
11463    <para>
11464     the pointer to store the new rawmidi instance
11465    </para>
11466   </listitem>
11467  </varlistentry>
11468 </variablelist>
11469</refsect1>
11470<refsect1>
11471<title>Description</title>
11472<para>
11473   Creates a new rawmidi instance.
11474   Use <function>snd_rawmidi_set_ops</function> to set the operators to the new instance.
11475</para>
11476</refsect1>
11477<refsect1>
11478<title>Return</title>
11479<para>
11480   Zero if successful, or a negative error code on failure.
11481</para>
11482</refsect1>
11483</refentry>
11484
11485<refentry id="API-snd-rawmidi-set-ops">
11486<refentryinfo>
11487 <title>LINUX</title>
11488 <productname>Kernel Hackers Manual</productname>
11489 <date>July 2017</date>
11490</refentryinfo>
11491<refmeta>
11492 <refentrytitle><phrase>snd_rawmidi_set_ops</phrase></refentrytitle>
11493 <manvolnum>9</manvolnum>
11494 <refmiscinfo class="version">4.4.14</refmiscinfo>
11495</refmeta>
11496<refnamediv>
11497 <refname>snd_rawmidi_set_ops</refname>
11498 <refpurpose>
11499     set the rawmidi operators
11500 </refpurpose>
11501</refnamediv>
11502<refsynopsisdiv>
11503 <title>Synopsis</title>
11504  <funcsynopsis><funcprototype>
11505   <funcdef>void <function>snd_rawmidi_set_ops </function></funcdef>
11506   <paramdef>struct snd_rawmidi * <parameter>rmidi</parameter></paramdef>
11507   <paramdef>int <parameter>stream</parameter></paramdef>
11508   <paramdef>struct snd_rawmidi_ops * <parameter>ops</parameter></paramdef>
11509  </funcprototype></funcsynopsis>
11510</refsynopsisdiv>
11511<refsect1>
11512 <title>Arguments</title>
11513 <variablelist>
11514  <varlistentry>
11515   <term><parameter>rmidi</parameter></term>
11516   <listitem>
11517    <para>
11518     the rawmidi instance
11519    </para>
11520   </listitem>
11521  </varlistentry>
11522  <varlistentry>
11523   <term><parameter>stream</parameter></term>
11524   <listitem>
11525    <para>
11526     the stream direction, SNDRV_RAWMIDI_STREAM_XXX
11527    </para>
11528   </listitem>
11529  </varlistentry>
11530  <varlistentry>
11531   <term><parameter>ops</parameter></term>
11532   <listitem>
11533    <para>
11534     the operator table
11535    </para>
11536   </listitem>
11537  </varlistentry>
11538 </variablelist>
11539</refsect1>
11540<refsect1>
11541<title>Description</title>
11542<para>
11543   Sets the rawmidi operators for the given stream direction.
11544</para>
11545</refsect1>
11546</refentry>
11547
11548     </sect1>
11549     <sect1><title>MPU401-UART API</title>
11550<!-- sound/drivers/mpu401/mpu401_uart.c -->
11551<refentry id="API-snd-mpu401-uart-interrupt">
11552<refentryinfo>
11553 <title>LINUX</title>
11554 <productname>Kernel Hackers Manual</productname>
11555 <date>July 2017</date>
11556</refentryinfo>
11557<refmeta>
11558 <refentrytitle><phrase>snd_mpu401_uart_interrupt</phrase></refentrytitle>
11559 <manvolnum>9</manvolnum>
11560 <refmiscinfo class="version">4.4.14</refmiscinfo>
11561</refmeta>
11562<refnamediv>
11563 <refname>snd_mpu401_uart_interrupt</refname>
11564 <refpurpose>
11565  generic MPU401-UART interrupt handler
11566 </refpurpose>
11567</refnamediv>
11568<refsynopsisdiv>
11569 <title>Synopsis</title>
11570  <funcsynopsis><funcprototype>
11571   <funcdef>irqreturn_t <function>snd_mpu401_uart_interrupt </function></funcdef>
11572   <paramdef>int <parameter>irq</parameter></paramdef>
11573   <paramdef>void * <parameter>dev_id</parameter></paramdef>
11574  </funcprototype></funcsynopsis>
11575</refsynopsisdiv>
11576<refsect1>
11577 <title>Arguments</title>
11578 <variablelist>
11579  <varlistentry>
11580   <term><parameter>irq</parameter></term>
11581   <listitem>
11582    <para>
11583     the irq number
11584    </para>
11585   </listitem>
11586  </varlistentry>
11587  <varlistentry>
11588   <term><parameter>dev_id</parameter></term>
11589   <listitem>
11590    <para>
11591     mpu401 instance
11592    </para>
11593   </listitem>
11594  </varlistentry>
11595 </variablelist>
11596</refsect1>
11597<refsect1>
11598<title>Description</title>
11599<para>
11600   Processes the interrupt for MPU401-UART i/o.
11601</para>
11602</refsect1>
11603<refsect1>
11604<title>Return</title>
11605<para>
11606   <constant>IRQ_HANDLED</constant> if the interrupt was handled. <constant>IRQ_NONE</constant> otherwise.
11607</para>
11608</refsect1>
11609</refentry>
11610
11611<refentry id="API-snd-mpu401-uart-interrupt-tx">
11612<refentryinfo>
11613 <title>LINUX</title>
11614 <productname>Kernel Hackers Manual</productname>
11615 <date>July 2017</date>
11616</refentryinfo>
11617<refmeta>
11618 <refentrytitle><phrase>snd_mpu401_uart_interrupt_tx</phrase></refentrytitle>
11619 <manvolnum>9</manvolnum>
11620 <refmiscinfo class="version">4.4.14</refmiscinfo>
11621</refmeta>
11622<refnamediv>
11623 <refname>snd_mpu401_uart_interrupt_tx</refname>
11624 <refpurpose>
11625     generic MPU401-UART transmit irq handler
11626 </refpurpose>
11627</refnamediv>
11628<refsynopsisdiv>
11629 <title>Synopsis</title>
11630  <funcsynopsis><funcprototype>
11631   <funcdef>irqreturn_t <function>snd_mpu401_uart_interrupt_tx </function></funcdef>
11632   <paramdef>int <parameter>irq</parameter></paramdef>
11633   <paramdef>void * <parameter>dev_id</parameter></paramdef>
11634  </funcprototype></funcsynopsis>
11635</refsynopsisdiv>
11636<refsect1>
11637 <title>Arguments</title>
11638 <variablelist>
11639  <varlistentry>
11640   <term><parameter>irq</parameter></term>
11641   <listitem>
11642    <para>
11643     the irq number
11644    </para>
11645   </listitem>
11646  </varlistentry>
11647  <varlistentry>
11648   <term><parameter>dev_id</parameter></term>
11649   <listitem>
11650    <para>
11651     mpu401 instance
11652    </para>
11653   </listitem>
11654  </varlistentry>
11655 </variablelist>
11656</refsect1>
11657<refsect1>
11658<title>Description</title>
11659<para>
11660   Processes the interrupt for MPU401-UART output.
11661</para>
11662</refsect1>
11663<refsect1>
11664<title>Return</title>
11665<para>
11666   <constant>IRQ_HANDLED</constant> if the interrupt was handled. <constant>IRQ_NONE</constant> otherwise.
11667</para>
11668</refsect1>
11669</refentry>
11670
11671<refentry id="API-snd-mpu401-uart-new">
11672<refentryinfo>
11673 <title>LINUX</title>
11674 <productname>Kernel Hackers Manual</productname>
11675 <date>July 2017</date>
11676</refentryinfo>
11677<refmeta>
11678 <refentrytitle><phrase>snd_mpu401_uart_new</phrase></refentrytitle>
11679 <manvolnum>9</manvolnum>
11680 <refmiscinfo class="version">4.4.14</refmiscinfo>
11681</refmeta>
11682<refnamediv>
11683 <refname>snd_mpu401_uart_new</refname>
11684 <refpurpose>
11685     create an MPU401-UART instance
11686 </refpurpose>
11687</refnamediv>
11688<refsynopsisdiv>
11689 <title>Synopsis</title>
11690  <funcsynopsis><funcprototype>
11691   <funcdef>int <function>snd_mpu401_uart_new </function></funcdef>
11692   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
11693   <paramdef>int <parameter>device</parameter></paramdef>
11694   <paramdef>unsigned short <parameter>hardware</parameter></paramdef>
11695   <paramdef>unsigned long <parameter>port</parameter></paramdef>
11696   <paramdef>unsigned int <parameter>info_flags</parameter></paramdef>
11697   <paramdef>int <parameter>irq</parameter></paramdef>
11698   <paramdef>struct snd_rawmidi ** <parameter>rrawmidi</parameter></paramdef>
11699  </funcprototype></funcsynopsis>
11700</refsynopsisdiv>
11701<refsect1>
11702 <title>Arguments</title>
11703 <variablelist>
11704  <varlistentry>
11705   <term><parameter>card</parameter></term>
11706   <listitem>
11707    <para>
11708     the card instance
11709    </para>
11710   </listitem>
11711  </varlistentry>
11712  <varlistentry>
11713   <term><parameter>device</parameter></term>
11714   <listitem>
11715    <para>
11716     the device index, zero-based
11717    </para>
11718   </listitem>
11719  </varlistentry>
11720  <varlistentry>
11721   <term><parameter>hardware</parameter></term>
11722   <listitem>
11723    <para>
11724     the hardware type, MPU401_HW_XXXX
11725    </para>
11726   </listitem>
11727  </varlistentry>
11728  <varlistentry>
11729   <term><parameter>port</parameter></term>
11730   <listitem>
11731    <para>
11732     the base address of MPU401 port
11733    </para>
11734   </listitem>
11735  </varlistentry>
11736  <varlistentry>
11737   <term><parameter>info_flags</parameter></term>
11738   <listitem>
11739    <para>
11740     bitflags MPU401_INFO_XXX
11741    </para>
11742   </listitem>
11743  </varlistentry>
11744  <varlistentry>
11745   <term><parameter>irq</parameter></term>
11746   <listitem>
11747    <para>
11748     the ISA irq number, -1 if not to be allocated
11749    </para>
11750   </listitem>
11751  </varlistentry>
11752  <varlistentry>
11753   <term><parameter>rrawmidi</parameter></term>
11754   <listitem>
11755    <para>
11756     the pointer to store the new rawmidi instance
11757    </para>
11758   </listitem>
11759  </varlistentry>
11760 </variablelist>
11761</refsect1>
11762<refsect1>
11763<title>Description</title>
11764<para>
11765   Creates a new MPU-401 instance.
11766   </para><para>
11767
11768   Note that the rawmidi instance is returned on the rrawmidi argument,
11769   not the mpu401 instance itself.  To access to the mpu401 instance,
11770   cast from rawmidi-&gt;private_data (with struct snd_mpu401 magic-cast).
11771</para>
11772</refsect1>
11773<refsect1>
11774<title>Return</title>
11775<para>
11776   Zero if successful, or a negative error code.
11777</para>
11778</refsect1>
11779</refentry>
11780
11781     </sect1>
11782  </chapter>
11783  <chapter><title>Proc Info API</title>
11784     <sect1><title>Proc Info Interface</title>
11785<!-- sound/core/info.c -->
11786<refentry id="API-snd-info-get-line">
11787<refentryinfo>
11788 <title>LINUX</title>
11789 <productname>Kernel Hackers Manual</productname>
11790 <date>July 2017</date>
11791</refentryinfo>
11792<refmeta>
11793 <refentrytitle><phrase>snd_info_get_line</phrase></refentrytitle>
11794 <manvolnum>9</manvolnum>
11795 <refmiscinfo class="version">4.4.14</refmiscinfo>
11796</refmeta>
11797<refnamediv>
11798 <refname>snd_info_get_line</refname>
11799 <refpurpose>
11800  read one line from the procfs buffer
11801 </refpurpose>
11802</refnamediv>
11803<refsynopsisdiv>
11804 <title>Synopsis</title>
11805  <funcsynopsis><funcprototype>
11806   <funcdef>int <function>snd_info_get_line </function></funcdef>
11807   <paramdef>struct snd_info_buffer * <parameter>buffer</parameter></paramdef>
11808   <paramdef>char * <parameter>line</parameter></paramdef>
11809   <paramdef>int <parameter>len</parameter></paramdef>
11810  </funcprototype></funcsynopsis>
11811</refsynopsisdiv>
11812<refsect1>
11813 <title>Arguments</title>
11814 <variablelist>
11815  <varlistentry>
11816   <term><parameter>buffer</parameter></term>
11817   <listitem>
11818    <para>
11819     the procfs buffer
11820    </para>
11821   </listitem>
11822  </varlistentry>
11823  <varlistentry>
11824   <term><parameter>line</parameter></term>
11825   <listitem>
11826    <para>
11827     the buffer to store
11828    </para>
11829   </listitem>
11830  </varlistentry>
11831  <varlistentry>
11832   <term><parameter>len</parameter></term>
11833   <listitem>
11834    <para>
11835     the max. buffer size
11836    </para>
11837   </listitem>
11838  </varlistentry>
11839 </variablelist>
11840</refsect1>
11841<refsect1>
11842<title>Description</title>
11843<para>
11844   Reads one line from the buffer and stores the string.
11845</para>
11846</refsect1>
11847<refsect1>
11848<title>Return</title>
11849<para>
11850   Zero if successful, or 1 if error or EOF.
11851</para>
11852</refsect1>
11853</refentry>
11854
11855<refentry id="API-snd-info-get-str">
11856<refentryinfo>
11857 <title>LINUX</title>
11858 <productname>Kernel Hackers Manual</productname>
11859 <date>July 2017</date>
11860</refentryinfo>
11861<refmeta>
11862 <refentrytitle><phrase>snd_info_get_str</phrase></refentrytitle>
11863 <manvolnum>9</manvolnum>
11864 <refmiscinfo class="version">4.4.14</refmiscinfo>
11865</refmeta>
11866<refnamediv>
11867 <refname>snd_info_get_str</refname>
11868 <refpurpose>
11869     parse a string token
11870 </refpurpose>
11871</refnamediv>
11872<refsynopsisdiv>
11873 <title>Synopsis</title>
11874  <funcsynopsis><funcprototype>
11875   <funcdef>const char * <function>snd_info_get_str </function></funcdef>
11876   <paramdef>char * <parameter>dest</parameter></paramdef>
11877   <paramdef>const char * <parameter>src</parameter></paramdef>
11878   <paramdef>int <parameter>len</parameter></paramdef>
11879  </funcprototype></funcsynopsis>
11880</refsynopsisdiv>
11881<refsect1>
11882 <title>Arguments</title>
11883 <variablelist>
11884  <varlistentry>
11885   <term><parameter>dest</parameter></term>
11886   <listitem>
11887    <para>
11888     the buffer to store the string token
11889    </para>
11890   </listitem>
11891  </varlistentry>
11892  <varlistentry>
11893   <term><parameter>src</parameter></term>
11894   <listitem>
11895    <para>
11896     the original string
11897    </para>
11898   </listitem>
11899  </varlistentry>
11900  <varlistentry>
11901   <term><parameter>len</parameter></term>
11902   <listitem>
11903    <para>
11904     the max. length of token - 1
11905    </para>
11906   </listitem>
11907  </varlistentry>
11908 </variablelist>
11909</refsect1>
11910<refsect1>
11911<title>Description</title>
11912<para>
11913   Parses the original string and copy a token to the given
11914   string buffer.
11915</para>
11916</refsect1>
11917<refsect1>
11918<title>Return</title>
11919<para>
11920   The updated pointer of the original string so that
11921   it can be used for the next call.
11922</para>
11923</refsect1>
11924</refentry>
11925
11926<refentry id="API-snd-info-create-module-entry">
11927<refentryinfo>
11928 <title>LINUX</title>
11929 <productname>Kernel Hackers Manual</productname>
11930 <date>July 2017</date>
11931</refentryinfo>
11932<refmeta>
11933 <refentrytitle><phrase>snd_info_create_module_entry</phrase></refentrytitle>
11934 <manvolnum>9</manvolnum>
11935 <refmiscinfo class="version">4.4.14</refmiscinfo>
11936</refmeta>
11937<refnamediv>
11938 <refname>snd_info_create_module_entry</refname>
11939 <refpurpose>
11940     create an info entry for the given module
11941 </refpurpose>
11942</refnamediv>
11943<refsynopsisdiv>
11944 <title>Synopsis</title>
11945  <funcsynopsis><funcprototype>
11946   <funcdef>struct snd_info_entry * <function>snd_info_create_module_entry </function></funcdef>
11947   <paramdef>struct module * <parameter>module</parameter></paramdef>
11948   <paramdef>const char * <parameter>name</parameter></paramdef>
11949   <paramdef>struct snd_info_entry * <parameter>parent</parameter></paramdef>
11950  </funcprototype></funcsynopsis>
11951</refsynopsisdiv>
11952<refsect1>
11953 <title>Arguments</title>
11954 <variablelist>
11955  <varlistentry>
11956   <term><parameter>module</parameter></term>
11957   <listitem>
11958    <para>
11959     the module pointer
11960    </para>
11961   </listitem>
11962  </varlistentry>
11963  <varlistentry>
11964   <term><parameter>name</parameter></term>
11965   <listitem>
11966    <para>
11967     the file name
11968    </para>
11969   </listitem>
11970  </varlistentry>
11971  <varlistentry>
11972   <term><parameter>parent</parameter></term>
11973   <listitem>
11974    <para>
11975     the parent directory
11976    </para>
11977   </listitem>
11978  </varlistentry>
11979 </variablelist>
11980</refsect1>
11981<refsect1>
11982<title>Description</title>
11983<para>
11984   Creates a new info entry and assigns it to the given module.
11985</para>
11986</refsect1>
11987<refsect1>
11988<title>Return</title>
11989<para>
11990   The pointer of the new instance, or <constant>NULL</constant> on failure.
11991</para>
11992</refsect1>
11993</refentry>
11994
11995<refentry id="API-snd-info-create-card-entry">
11996<refentryinfo>
11997 <title>LINUX</title>
11998 <productname>Kernel Hackers Manual</productname>
11999 <date>July 2017</date>
12000</refentryinfo>
12001<refmeta>
12002 <refentrytitle><phrase>snd_info_create_card_entry</phrase></refentrytitle>
12003 <manvolnum>9</manvolnum>
12004 <refmiscinfo class="version">4.4.14</refmiscinfo>
12005</refmeta>
12006<refnamediv>
12007 <refname>snd_info_create_card_entry</refname>
12008 <refpurpose>
12009     create an info entry for the given card
12010 </refpurpose>
12011</refnamediv>
12012<refsynopsisdiv>
12013 <title>Synopsis</title>
12014  <funcsynopsis><funcprototype>
12015   <funcdef>struct snd_info_entry * <function>snd_info_create_card_entry </function></funcdef>
12016   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
12017   <paramdef>const char * <parameter>name</parameter></paramdef>
12018   <paramdef>struct snd_info_entry * <parameter>parent</parameter></paramdef>
12019  </funcprototype></funcsynopsis>
12020</refsynopsisdiv>
12021<refsect1>
12022 <title>Arguments</title>
12023 <variablelist>
12024  <varlistentry>
12025   <term><parameter>card</parameter></term>
12026   <listitem>
12027    <para>
12028     the card instance
12029    </para>
12030   </listitem>
12031  </varlistentry>
12032  <varlistentry>
12033   <term><parameter>name</parameter></term>
12034   <listitem>
12035    <para>
12036     the file name
12037    </para>
12038   </listitem>
12039  </varlistentry>
12040  <varlistentry>
12041   <term><parameter>parent</parameter></term>
12042   <listitem>
12043    <para>
12044     the parent directory
12045    </para>
12046   </listitem>
12047  </varlistentry>
12048 </variablelist>
12049</refsect1>
12050<refsect1>
12051<title>Description</title>
12052<para>
12053   Creates a new info entry and assigns it to the given card.
12054</para>
12055</refsect1>
12056<refsect1>
12057<title>Return</title>
12058<para>
12059   The pointer of the new instance, or <constant>NULL</constant> on failure.
12060</para>
12061</refsect1>
12062</refentry>
12063
12064<refentry id="API-snd-info-free-entry">
12065<refentryinfo>
12066 <title>LINUX</title>
12067 <productname>Kernel Hackers Manual</productname>
12068 <date>July 2017</date>
12069</refentryinfo>
12070<refmeta>
12071 <refentrytitle><phrase>snd_info_free_entry</phrase></refentrytitle>
12072 <manvolnum>9</manvolnum>
12073 <refmiscinfo class="version">4.4.14</refmiscinfo>
12074</refmeta>
12075<refnamediv>
12076 <refname>snd_info_free_entry</refname>
12077 <refpurpose>
12078     release the info entry
12079 </refpurpose>
12080</refnamediv>
12081<refsynopsisdiv>
12082 <title>Synopsis</title>
12083  <funcsynopsis><funcprototype>
12084   <funcdef>void <function>snd_info_free_entry </function></funcdef>
12085   <paramdef>struct snd_info_entry * <parameter>entry</parameter></paramdef>
12086  </funcprototype></funcsynopsis>
12087</refsynopsisdiv>
12088<refsect1>
12089 <title>Arguments</title>
12090 <variablelist>
12091  <varlistentry>
12092   <term><parameter>entry</parameter></term>
12093   <listitem>
12094    <para>
12095     the info entry
12096    </para>
12097   </listitem>
12098  </varlistentry>
12099 </variablelist>
12100</refsect1>
12101<refsect1>
12102<title>Description</title>
12103<para>
12104   Releases the info entry.
12105</para>
12106</refsect1>
12107</refentry>
12108
12109<refentry id="API-snd-info-register">
12110<refentryinfo>
12111 <title>LINUX</title>
12112 <productname>Kernel Hackers Manual</productname>
12113 <date>July 2017</date>
12114</refentryinfo>
12115<refmeta>
12116 <refentrytitle><phrase>snd_info_register</phrase></refentrytitle>
12117 <manvolnum>9</manvolnum>
12118 <refmiscinfo class="version">4.4.14</refmiscinfo>
12119</refmeta>
12120<refnamediv>
12121 <refname>snd_info_register</refname>
12122 <refpurpose>
12123     register the info entry
12124 </refpurpose>
12125</refnamediv>
12126<refsynopsisdiv>
12127 <title>Synopsis</title>
12128  <funcsynopsis><funcprototype>
12129   <funcdef>int <function>snd_info_register </function></funcdef>
12130   <paramdef>struct snd_info_entry * <parameter>entry</parameter></paramdef>
12131  </funcprototype></funcsynopsis>
12132</refsynopsisdiv>
12133<refsect1>
12134 <title>Arguments</title>
12135 <variablelist>
12136  <varlistentry>
12137   <term><parameter>entry</parameter></term>
12138   <listitem>
12139    <para>
12140     the info entry
12141    </para>
12142   </listitem>
12143  </varlistentry>
12144 </variablelist>
12145</refsect1>
12146<refsect1>
12147<title>Description</title>
12148<para>
12149   Registers the proc info entry.
12150</para>
12151</refsect1>
12152<refsect1>
12153<title>Return</title>
12154<para>
12155   Zero if successful, or a negative error code on failure.
12156</para>
12157</refsect1>
12158</refentry>
12159
12160     </sect1>
12161  </chapter>
12162  <chapter><title>Compress Offload</title>
12163     <sect1><title>Compress Offload API</title>
12164<!-- sound/core/compress_offload.c -->
12165<refentry id="API-snd-compress-register">
12166<refentryinfo>
12167 <title>LINUX</title>
12168 <productname>Kernel Hackers Manual</productname>
12169 <date>July 2017</date>
12170</refentryinfo>
12171<refmeta>
12172 <refentrytitle><phrase>snd_compress_register</phrase></refentrytitle>
12173 <manvolnum>9</manvolnum>
12174 <refmiscinfo class="version">4.4.14</refmiscinfo>
12175</refmeta>
12176<refnamediv>
12177 <refname>snd_compress_register</refname>
12178 <refpurpose>
12179  register compressed device
12180 </refpurpose>
12181</refnamediv>
12182<refsynopsisdiv>
12183 <title>Synopsis</title>
12184  <funcsynopsis><funcprototype>
12185   <funcdef>int <function>snd_compress_register </function></funcdef>
12186   <paramdef>struct snd_compr * <parameter>device</parameter></paramdef>
12187  </funcprototype></funcsynopsis>
12188</refsynopsisdiv>
12189<refsect1>
12190 <title>Arguments</title>
12191 <variablelist>
12192  <varlistentry>
12193   <term><parameter>device</parameter></term>
12194   <listitem>
12195    <para>
12196     compressed device to register
12197    </para>
12198   </listitem>
12199  </varlistentry>
12200 </variablelist>
12201</refsect1>
12202</refentry>
12203
12204<!-- include/uapi/sound/compress_offload.h -->
12205<refentry id="API-struct-snd-compressed-buffer">
12206<refentryinfo>
12207 <title>LINUX</title>
12208 <productname>Kernel Hackers Manual</productname>
12209 <date>July 2017</date>
12210</refentryinfo>
12211<refmeta>
12212 <refentrytitle><phrase>struct snd_compressed_buffer</phrase></refentrytitle>
12213 <manvolnum>9</manvolnum>
12214 <refmiscinfo class="version">4.4.14</refmiscinfo>
12215</refmeta>
12216<refnamediv>
12217 <refname>struct snd_compressed_buffer</refname>
12218 <refpurpose>
12219  compressed buffer
12220 </refpurpose>
12221</refnamediv>
12222<refsynopsisdiv>
12223 <title>Synopsis</title>
12224  <programlisting>
12225struct snd_compressed_buffer {
12226  __u32 fragment_size;
12227  __u32 fragments;
12228};  </programlisting>
12229</refsynopsisdiv>
12230 <refsect1>
12231  <title>Members</title>
12232  <variablelist>
12233    <varlistentry>      <term>fragment_size</term>
12234      <listitem><para>
12235size of buffer fragment in bytes
12236      </para></listitem>
12237    </varlistentry>
12238    <varlistentry>      <term>fragments</term>
12239      <listitem><para>
12240number of such fragments
12241      </para></listitem>
12242    </varlistentry>
12243  </variablelist>
12244 </refsect1>
12245</refentry>
12246
12247<refentry id="API-struct-snd-compr-params">
12248<refentryinfo>
12249 <title>LINUX</title>
12250 <productname>Kernel Hackers Manual</productname>
12251 <date>July 2017</date>
12252</refentryinfo>
12253<refmeta>
12254 <refentrytitle><phrase>struct snd_compr_params</phrase></refentrytitle>
12255 <manvolnum>9</manvolnum>
12256 <refmiscinfo class="version">4.4.14</refmiscinfo>
12257</refmeta>
12258<refnamediv>
12259 <refname>struct snd_compr_params</refname>
12260 <refpurpose>
12261     compressed stream params
12262 </refpurpose>
12263</refnamediv>
12264<refsynopsisdiv>
12265 <title>Synopsis</title>
12266  <programlisting>
12267struct snd_compr_params {
12268  struct snd_compressed_buffer buffer;
12269  struct snd_codec codec;
12270  __u8 no_wake_mode;
12271};  </programlisting>
12272</refsynopsisdiv>
12273 <refsect1>
12274  <title>Members</title>
12275  <variablelist>
12276    <varlistentry>      <term>buffer</term>
12277      <listitem><para>
12278   buffer description
12279      </para></listitem>
12280    </varlistentry>
12281    <varlistentry>      <term>codec</term>
12282      <listitem><para>
12283   codec parameters
12284      </para></listitem>
12285    </varlistentry>
12286    <varlistentry>      <term>no_wake_mode</term>
12287      <listitem><para>
12288   dont wake on fragment elapsed
12289      </para></listitem>
12290    </varlistentry>
12291  </variablelist>
12292 </refsect1>
12293</refentry>
12294
12295<refentry id="API-struct-snd-compr-tstamp">
12296<refentryinfo>
12297 <title>LINUX</title>
12298 <productname>Kernel Hackers Manual</productname>
12299 <date>July 2017</date>
12300</refentryinfo>
12301<refmeta>
12302 <refentrytitle><phrase>struct snd_compr_tstamp</phrase></refentrytitle>
12303 <manvolnum>9</manvolnum>
12304 <refmiscinfo class="version">4.4.14</refmiscinfo>
12305</refmeta>
12306<refnamediv>
12307 <refname>struct snd_compr_tstamp</refname>
12308 <refpurpose>
12309     timestamp descriptor
12310 </refpurpose>
12311</refnamediv>
12312<refsynopsisdiv>
12313 <title>Synopsis</title>
12314  <programlisting>
12315struct snd_compr_tstamp {
12316  __u32 byte_offset;
12317  __u32 copied_total;
12318  __u32 pcm_frames;
12319  __u32 pcm_io_frames;
12320  __u32 sampling_rate;
12321};  </programlisting>
12322</refsynopsisdiv>
12323 <refsect1>
12324  <title>Members</title>
12325  <variablelist>
12326    <varlistentry>      <term>byte_offset</term>
12327      <listitem><para>
12328   Byte offset in ring buffer to DSP
12329      </para></listitem>
12330    </varlistentry>
12331    <varlistentry>      <term>copied_total</term>
12332      <listitem><para>
12333   Total number of bytes copied from/to ring buffer to/by DSP
12334      </para></listitem>
12335    </varlistentry>
12336    <varlistentry>      <term>pcm_frames</term>
12337      <listitem><para>
12338   Frames decoded or encoded by DSP. This field will evolve by
12339   large steps and should only be used to monitor encoding/decoding
12340   progress. It shall not be used for timing estimates.
12341      </para></listitem>
12342    </varlistentry>
12343    <varlistentry>      <term>pcm_io_frames</term>
12344      <listitem><para>
12345   Frames rendered or received by DSP into a mixer or an audio
12346   output/input. This field should be used for A/V sync or time estimates.
12347      </para></listitem>
12348    </varlistentry>
12349    <varlistentry>      <term>sampling_rate</term>
12350      <listitem><para>
12351   sampling rate of audio
12352      </para></listitem>
12353    </varlistentry>
12354  </variablelist>
12355 </refsect1>
12356</refentry>
12357
12358<refentry id="API-struct-snd-compr-avail">
12359<refentryinfo>
12360 <title>LINUX</title>
12361 <productname>Kernel Hackers Manual</productname>
12362 <date>July 2017</date>
12363</refentryinfo>
12364<refmeta>
12365 <refentrytitle><phrase>struct snd_compr_avail</phrase></refentrytitle>
12366 <manvolnum>9</manvolnum>
12367 <refmiscinfo class="version">4.4.14</refmiscinfo>
12368</refmeta>
12369<refnamediv>
12370 <refname>struct snd_compr_avail</refname>
12371 <refpurpose>
12372     avail descriptor
12373 </refpurpose>
12374</refnamediv>
12375<refsynopsisdiv>
12376 <title>Synopsis</title>
12377  <programlisting>
12378struct snd_compr_avail {
12379  __u64 avail;
12380  struct snd_compr_tstamp tstamp;
12381};  </programlisting>
12382</refsynopsisdiv>
12383 <refsect1>
12384  <title>Members</title>
12385  <variablelist>
12386    <varlistentry>      <term>avail</term>
12387      <listitem><para>
12388   Number of bytes available in ring buffer for writing/reading
12389      </para></listitem>
12390    </varlistentry>
12391    <varlistentry>      <term>tstamp</term>
12392      <listitem><para>
12393   timestamp information
12394      </para></listitem>
12395    </varlistentry>
12396  </variablelist>
12397 </refsect1>
12398</refentry>
12399
12400<refentry id="API-struct-snd-compr-caps">
12401<refentryinfo>
12402 <title>LINUX</title>
12403 <productname>Kernel Hackers Manual</productname>
12404 <date>July 2017</date>
12405</refentryinfo>
12406<refmeta>
12407 <refentrytitle><phrase>struct snd_compr_caps</phrase></refentrytitle>
12408 <manvolnum>9</manvolnum>
12409 <refmiscinfo class="version">4.4.14</refmiscinfo>
12410</refmeta>
12411<refnamediv>
12412 <refname>struct snd_compr_caps</refname>
12413 <refpurpose>
12414     caps descriptor
12415 </refpurpose>
12416</refnamediv>
12417<refsynopsisdiv>
12418 <title>Synopsis</title>
12419  <programlisting>
12420struct snd_compr_caps {
12421  __u32 num_codecs;
12422  __u32 direction;
12423  __u32 min_fragment_size;
12424  __u32 max_fragment_size;
12425  __u32 min_fragments;
12426  __u32 max_fragments;
12427  __u32 codecs[MAX_NUM_CODECS];
12428  __u32 reserved[11];
12429};  </programlisting>
12430</refsynopsisdiv>
12431 <refsect1>
12432  <title>Members</title>
12433  <variablelist>
12434    <varlistentry>      <term>num_codecs</term>
12435      <listitem><para>
12436   number of codecs supported
12437      </para></listitem>
12438    </varlistentry>
12439    <varlistentry>      <term>direction</term>
12440      <listitem><para>
12441   direction supported. Of type snd_compr_direction
12442      </para></listitem>
12443    </varlistentry>
12444    <varlistentry>      <term>min_fragment_size</term>
12445      <listitem><para>
12446   minimum fragment supported by DSP
12447      </para></listitem>
12448    </varlistentry>
12449    <varlistentry>      <term>max_fragment_size</term>
12450      <listitem><para>
12451   maximum fragment supported by DSP
12452      </para></listitem>
12453    </varlistentry>
12454    <varlistentry>      <term>min_fragments</term>
12455      <listitem><para>
12456   min fragments supported by DSP
12457      </para></listitem>
12458    </varlistentry>
12459    <varlistentry>      <term>max_fragments</term>
12460      <listitem><para>
12461   max fragments supported by DSP
12462      </para></listitem>
12463    </varlistentry>
12464    <varlistentry>      <term>codecs[MAX_NUM_CODECS]</term>
12465      <listitem><para>
12466   pointer to array of codecs
12467      </para></listitem>
12468    </varlistentry>
12469    <varlistentry>      <term>reserved[11]</term>
12470      <listitem><para>
12471   reserved field
12472      </para></listitem>
12473    </varlistentry>
12474  </variablelist>
12475 </refsect1>
12476</refentry>
12477
12478<refentry id="API-struct-snd-compr-codec-caps">
12479<refentryinfo>
12480 <title>LINUX</title>
12481 <productname>Kernel Hackers Manual</productname>
12482 <date>July 2017</date>
12483</refentryinfo>
12484<refmeta>
12485 <refentrytitle><phrase>struct snd_compr_codec_caps</phrase></refentrytitle>
12486 <manvolnum>9</manvolnum>
12487 <refmiscinfo class="version">4.4.14</refmiscinfo>
12488</refmeta>
12489<refnamediv>
12490 <refname>struct snd_compr_codec_caps</refname>
12491 <refpurpose>
12492     query capability of codec
12493 </refpurpose>
12494</refnamediv>
12495<refsynopsisdiv>
12496 <title>Synopsis</title>
12497  <programlisting>
12498struct snd_compr_codec_caps {
12499  __u32 codec;
12500  __u32 num_descriptors;
12501  struct snd_codec_desc descriptor[MAX_NUM_CODEC_DESCRIPTORS];
12502};  </programlisting>
12503</refsynopsisdiv>
12504 <refsect1>
12505  <title>Members</title>
12506  <variablelist>
12507    <varlistentry>      <term>codec</term>
12508      <listitem><para>
12509   codec for which capability is queried
12510      </para></listitem>
12511    </varlistentry>
12512    <varlistentry>      <term>num_descriptors</term>
12513      <listitem><para>
12514   number of codec descriptors
12515      </para></listitem>
12516    </varlistentry>
12517    <varlistentry>      <term>descriptor[MAX_NUM_CODEC_DESCRIPTORS]</term>
12518      <listitem><para>
12519   array of codec capability descriptor
12520      </para></listitem>
12521    </varlistentry>
12522  </variablelist>
12523 </refsect1>
12524</refentry>
12525
12526<refentry id="API-enum-sndrv-compress-encoder">
12527<refentryinfo>
12528 <title>LINUX</title>
12529 <productname>Kernel Hackers Manual</productname>
12530 <date>July 2017</date>
12531</refentryinfo>
12532<refmeta>
12533 <refentrytitle><phrase>enum sndrv_compress_encoder</phrase></refentrytitle>
12534 <manvolnum>9</manvolnum>
12535 <refmiscinfo class="version">4.4.14</refmiscinfo>
12536</refmeta>
12537<refnamediv>
12538 <refname>enum sndrv_compress_encoder</refname>
12539 <refpurpose>
12540   </refpurpose>
12541</refnamediv>
12542<refsynopsisdiv>
12543 <title>Synopsis</title>
12544  <programlisting>
12545enum sndrv_compress_encoder {
12546  SNDRV_COMPRESS_ENCODER_PADDING,
12547  SNDRV_COMPRESS_ENCODER_DELAY
12548};  </programlisting>
12549</refsynopsisdiv>
12550<refsect1>
12551 <title>Constants</title>
12552  <variablelist>
12553    <varlistentry>      <term>SNDRV_COMPRESS_ENCODER_PADDING</term>
12554      <listitem><para>
12555   no of samples appended by the encoder at the
12556   end of the track
12557      </para></listitem>
12558    </varlistentry>
12559    <varlistentry>      <term>SNDRV_COMPRESS_ENCODER_DELAY</term>
12560      <listitem><para>
12561   no of samples inserted by the encoder at the
12562   beginning of the track
12563      </para></listitem>
12564    </varlistentry>
12565  </variablelist>
12566</refsect1>
12567</refentry>
12568
12569<refentry id="API-struct-snd-compr-metadata">
12570<refentryinfo>
12571 <title>LINUX</title>
12572 <productname>Kernel Hackers Manual</productname>
12573 <date>July 2017</date>
12574</refentryinfo>
12575<refmeta>
12576 <refentrytitle><phrase>struct snd_compr_metadata</phrase></refentrytitle>
12577 <manvolnum>9</manvolnum>
12578 <refmiscinfo class="version">4.4.14</refmiscinfo>
12579</refmeta>
12580<refnamediv>
12581 <refname>struct snd_compr_metadata</refname>
12582 <refpurpose>
12583     compressed stream metadata
12584 </refpurpose>
12585</refnamediv>
12586<refsynopsisdiv>
12587 <title>Synopsis</title>
12588  <programlisting>
12589struct snd_compr_metadata {
12590  __u32 key;
12591  __u32 value[8];
12592};  </programlisting>
12593</refsynopsisdiv>
12594 <refsect1>
12595  <title>Members</title>
12596  <variablelist>
12597    <varlistentry>      <term>key</term>
12598      <listitem><para>
12599   key id
12600      </para></listitem>
12601    </varlistentry>
12602    <varlistentry>      <term>value[8]</term>
12603      <listitem><para>
12604   key value
12605      </para></listitem>
12606    </varlistentry>
12607  </variablelist>
12608 </refsect1>
12609</refentry>
12610
12611<refentry id="API-SNDRV-COMPRESS-IOCTL-VERSION">
12612<refentryinfo>
12613 <title>LINUX</title>
12614 <productname>Kernel Hackers Manual</productname>
12615 <date>July 2017</date>
12616</refentryinfo>
12617<refmeta>
12618 <refentrytitle><phrase>SNDRV_COMPRESS_IOCTL_VERSION</phrase></refentrytitle>
12619 <manvolnum>9</manvolnum>
12620 <refmiscinfo class="version">4.4.14</refmiscinfo>
12621</refmeta>
12622<refnamediv>
12623 <refname>SNDRV_COMPRESS_IOCTL_VERSION</refname>
12624 <refpurpose>
12625   </refpurpose>
12626</refnamediv>
12627<refsynopsisdiv>
12628 <title>Synopsis</title>
12629  <funcsynopsis><funcprototype>
12630   <funcdef> <function>SNDRV_COMPRESS_IOCTL_VERSION </function></funcdef>
12631  <void/>
12632  </funcprototype></funcsynopsis>
12633</refsynopsisdiv>
12634<refsect1>
12635 <title>Arguments</title>
12636 <para>
12637  None
12638 </para>
12639</refsect1>
12640<refsect1>
12641<title>SNDRV_COMPRESS_GET_CAPS</title>
12642<para>
12643   Query capability of DSP
12644</para>
12645</refsect1>
12646<refsect1>
12647<title>SNDRV_COMPRESS_GET_CODEC_CAPS</title>
12648<para>
12649   Query capability of a codec
12650</para>
12651</refsect1>
12652<refsect1>
12653<title>SNDRV_COMPRESS_SET_PARAMS</title>
12654<para>
12655   Set codec and stream parameters
12656</para>
12657</refsect1>
12658<refsect1>
12659<title>Note</title>
12660<para>
12661   only codec params can be changed runtime and stream params cant be
12662</para>
12663</refsect1>
12664<refsect1>
12665<title>SNDRV_COMPRESS_GET_PARAMS</title>
12666<para>
12667   Query codec params
12668</para>
12669</refsect1>
12670<refsect1>
12671<title>SNDRV_COMPRESS_TSTAMP</title>
12672<para>
12673   get the current timestamp value
12674</para>
12675</refsect1>
12676<refsect1>
12677<title>SNDRV_COMPRESS_AVAIL</title>
12678<para>
12679   get the current buffer avail value.
12680   This also queries the tstamp properties
12681</para>
12682</refsect1>
12683<refsect1>
12684<title>SNDRV_COMPRESS_PAUSE</title>
12685<para>
12686   Pause the running stream
12687</para>
12688</refsect1>
12689<refsect1>
12690<title>SNDRV_COMPRESS_RESUME</title>
12691<para>
12692   resume a paused stream
12693</para>
12694</refsect1>
12695<refsect1>
12696<title>SNDRV_COMPRESS_START</title>
12697<para>
12698   Start a stream
12699</para>
12700</refsect1>
12701<refsect1>
12702<title>SNDRV_COMPRESS_STOP</title>
12703<para>
12704   stop a running stream, discarding ring buffer content
12705   and the buffers currently with DSP
12706</para>
12707</refsect1>
12708<refsect1>
12709<title>SNDRV_COMPRESS_DRAIN</title>
12710<para>
12711   Play till end of buffers and stop after that
12712</para>
12713</refsect1>
12714<refsect1>
12715<title>SNDRV_COMPRESS_IOCTL_VERSION</title>
12716<para>
12717   Query the API version
12718</para>
12719</refsect1>
12720</refentry>
12721
12722<!-- include/uapi/sound/compress_params.h -->
12723<refentry id="API-struct-snd-enc-vorbis">
12724<refentryinfo>
12725 <title>LINUX</title>
12726 <productname>Kernel Hackers Manual</productname>
12727 <date>July 2017</date>
12728</refentryinfo>
12729<refmeta>
12730 <refentrytitle><phrase>struct snd_enc_vorbis</phrase></refentrytitle>
12731 <manvolnum>9</manvolnum>
12732 <refmiscinfo class="version">4.4.14</refmiscinfo>
12733</refmeta>
12734<refnamediv>
12735 <refname>struct snd_enc_vorbis</refname>
12736 <refpurpose>
12737   </refpurpose>
12738</refnamediv>
12739<refsynopsisdiv>
12740 <title>Synopsis</title>
12741  <programlisting>
12742struct snd_enc_vorbis {
12743  __s32 quality;
12744  __u32 managed;
12745  __u32 max_bit_rate;
12746  __u32 min_bit_rate;
12747  __u32 downmix;
12748};  </programlisting>
12749</refsynopsisdiv>
12750 <refsect1>
12751  <title>Members</title>
12752  <variablelist>
12753    <varlistentry>      <term>quality</term>
12754      <listitem><para>
12755Sets encoding quality to n, between -1 (low) and 10 (high).
12756In the default mode of operation, the quality level is 3.
12757Normal quality range is 0 - 10.
12758      </para></listitem>
12759    </varlistentry>
12760    <varlistentry>      <term>managed</term>
12761      <listitem><para>
12762Boolean. Set  bitrate  management  mode. This turns off the
12763normal VBR encoding, but allows hard or soft bitrate constraints to be
12764enforced by the encoder. This mode can be slower, and may also be
12765lower quality. It is primarily useful for streaming.
12766      </para></listitem>
12767    </varlistentry>
12768    <varlistentry>      <term>max_bit_rate</term>
12769      <listitem><para>
12770Enabled only if managed is TRUE
12771      </para></listitem>
12772    </varlistentry>
12773    <varlistentry>      <term>min_bit_rate</term>
12774      <listitem><para>
12775Enabled only if managed is TRUE
12776      </para></listitem>
12777    </varlistentry>
12778    <varlistentry>      <term>downmix</term>
12779      <listitem><para>
12780Boolean. Downmix input from stereo to mono (has no effect on
12781non-stereo streams). Useful for lower-bitrate encoding.
12782      </para></listitem>
12783    </varlistentry>
12784  </variablelist>
12785 </refsect1>
12786<refsect1>
12787<title>Description</title>
12788<para>
12789   These options were extracted from the OpenMAX IL spec and Gstreamer vorbisenc
12790   properties
12791   </para><para>
12792
12793   For best quality users should specify VBR mode and set quality levels.
12794</para>
12795</refsect1>
12796</refentry>
12797
12798<refentry id="API-struct-snd-enc-real">
12799<refentryinfo>
12800 <title>LINUX</title>
12801 <productname>Kernel Hackers Manual</productname>
12802 <date>July 2017</date>
12803</refentryinfo>
12804<refmeta>
12805 <refentrytitle><phrase>struct snd_enc_real</phrase></refentrytitle>
12806 <manvolnum>9</manvolnum>
12807 <refmiscinfo class="version">4.4.14</refmiscinfo>
12808</refmeta>
12809<refnamediv>
12810 <refname>struct snd_enc_real</refname>
12811 <refpurpose>
12812   </refpurpose>
12813</refnamediv>
12814<refsynopsisdiv>
12815 <title>Synopsis</title>
12816  <programlisting>
12817struct snd_enc_real {
12818  __u32 quant_bits;
12819  __u32 start_region;
12820  __u32 num_regions;
12821};  </programlisting>
12822</refsynopsisdiv>
12823 <refsect1>
12824  <title>Members</title>
12825  <variablelist>
12826    <varlistentry>      <term>quant_bits</term>
12827      <listitem><para>
12828   number of coupling quantization bits in the stream
12829      </para></listitem>
12830    </varlistentry>
12831    <varlistentry>      <term>start_region</term>
12832      <listitem><para>
12833   coupling start region in the stream
12834      </para></listitem>
12835    </varlistentry>
12836    <varlistentry>      <term>num_regions</term>
12837      <listitem><para>
12838   number of regions value
12839      </para></listitem>
12840    </varlistentry>
12841  </variablelist>
12842 </refsect1>
12843<refsect1>
12844<title>Description</title>
12845<para>
12846   These options were extracted from the OpenMAX IL spec
12847</para>
12848</refsect1>
12849</refentry>
12850
12851<refentry id="API-struct-snd-enc-flac">
12852<refentryinfo>
12853 <title>LINUX</title>
12854 <productname>Kernel Hackers Manual</productname>
12855 <date>July 2017</date>
12856</refentryinfo>
12857<refmeta>
12858 <refentrytitle><phrase>struct snd_enc_flac</phrase></refentrytitle>
12859 <manvolnum>9</manvolnum>
12860 <refmiscinfo class="version">4.4.14</refmiscinfo>
12861</refmeta>
12862<refnamediv>
12863 <refname>struct snd_enc_flac</refname>
12864 <refpurpose>
12865   </refpurpose>
12866</refnamediv>
12867<refsynopsisdiv>
12868 <title>Synopsis</title>
12869  <programlisting>
12870struct snd_enc_flac {
12871  __u32 num;
12872  __u32 gain;
12873};  </programlisting>
12874</refsynopsisdiv>
12875 <refsect1>
12876  <title>Members</title>
12877  <variablelist>
12878    <varlistentry>      <term>num</term>
12879      <listitem><para>
12880   serial number, valid only for OGG formats
12881   needs to be set by application
12882      </para></listitem>
12883    </varlistentry>
12884    <varlistentry>      <term>gain</term>
12885      <listitem><para>
12886   Add replay gain tags
12887      </para></listitem>
12888    </varlistentry>
12889  </variablelist>
12890 </refsect1>
12891<refsect1>
12892<title>Description</title>
12893<para>
12894   These options were extracted from the FLAC online documentation
12895</para>
12896</refsect1>
12897<refsect1>
12898<title>at http</title>
12899<para>
12900   //flac.sourceforge.net/documentation_tools_flac.html
12901   </para><para>
12902
12903   To make the API simpler, it is assumed that the user will select quality
12904   profiles. Additional options that affect encoding quality and speed can
12905   be added at a later stage if needed.
12906   </para><para>
12907
12908   By default the Subset format is used by encoders.
12909   </para><para>
12910
12911   TAGS such as pictures, etc, cannot be handled by an offloaded encoder and are
12912   not supported in this API.
12913</para>
12914</refsect1>
12915</refentry>
12916
12917<!-- include/sound/compress_driver.h -->
12918<refentry id="API-struct-snd-compr-runtime">
12919<refentryinfo>
12920 <title>LINUX</title>
12921 <productname>Kernel Hackers Manual</productname>
12922 <date>July 2017</date>
12923</refentryinfo>
12924<refmeta>
12925 <refentrytitle><phrase>struct snd_compr_runtime</phrase></refentrytitle>
12926 <manvolnum>9</manvolnum>
12927 <refmiscinfo class="version">4.4.14</refmiscinfo>
12928</refmeta>
12929<refnamediv>
12930 <refname>struct snd_compr_runtime</refname>
12931 <refpurpose>
12932   </refpurpose>
12933</refnamediv>
12934<refsynopsisdiv>
12935 <title>Synopsis</title>
12936  <programlisting>
12937struct snd_compr_runtime {
12938  snd_pcm_state_t state;
12939  struct snd_compr_ops * ops;
12940  void * buffer;
12941  u64 buffer_size;
12942  u32 fragment_size;
12943  u32 fragments;
12944  u64 total_bytes_available;
12945  u64 total_bytes_transferred;
12946  wait_queue_head_t sleep;
12947  void * private_data;
12948};  </programlisting>
12949</refsynopsisdiv>
12950 <refsect1>
12951  <title>Members</title>
12952  <variablelist>
12953    <varlistentry>      <term>state</term>
12954      <listitem><para>
12955stream state
12956      </para></listitem>
12957    </varlistentry>
12958    <varlistentry>      <term>ops</term>
12959      <listitem><para>
12960pointer to DSP callbacks
12961      </para></listitem>
12962    </varlistentry>
12963    <varlistentry>      <term>buffer</term>
12964      <listitem><para>
12965pointer to kernel buffer, valid only when not in mmap mode or
12966DSP doesn't implement copy
12967      </para></listitem>
12968    </varlistentry>
12969    <varlistentry>      <term>buffer_size</term>
12970      <listitem><para>
12971size of the above buffer
12972      </para></listitem>
12973    </varlistentry>
12974    <varlistentry>      <term>fragment_size</term>
12975      <listitem><para>
12976size of buffer fragment in bytes
12977      </para></listitem>
12978    </varlistentry>
12979    <varlistentry>      <term>fragments</term>
12980      <listitem><para>
12981number of such fragments
12982      </para></listitem>
12983    </varlistentry>
12984    <varlistentry>      <term>total_bytes_available</term>
12985      <listitem><para>
12986cumulative number of bytes made available in
12987the ring buffer
12988      </para></listitem>
12989    </varlistentry>
12990    <varlistentry>      <term>total_bytes_transferred</term>
12991      <listitem><para>
12992cumulative bytes transferred by offload DSP
12993      </para></listitem>
12994    </varlistentry>
12995    <varlistentry>      <term>sleep</term>
12996      <listitem><para>
12997poll sleep
12998      </para></listitem>
12999    </varlistentry>
13000    <varlistentry>      <term>private_data</term>
13001      <listitem><para>
13002driver private data pointer
13003      </para></listitem>
13004    </varlistentry>
13005  </variablelist>
13006 </refsect1>
13007</refentry>
13008
13009<refentry id="API-struct-snd-compr-stream">
13010<refentryinfo>
13011 <title>LINUX</title>
13012 <productname>Kernel Hackers Manual</productname>
13013 <date>July 2017</date>
13014</refentryinfo>
13015<refmeta>
13016 <refentrytitle><phrase>struct snd_compr_stream</phrase></refentrytitle>
13017 <manvolnum>9</manvolnum>
13018 <refmiscinfo class="version">4.4.14</refmiscinfo>
13019</refmeta>
13020<refnamediv>
13021 <refname>struct snd_compr_stream</refname>
13022 <refpurpose>
13023   </refpurpose>
13024</refnamediv>
13025<refsynopsisdiv>
13026 <title>Synopsis</title>
13027  <programlisting>
13028struct snd_compr_stream {
13029  const char * name;
13030  struct snd_compr_ops * ops;
13031  struct snd_compr_runtime * runtime;
13032  struct snd_compr * device;
13033  enum snd_compr_direction direction;
13034  bool metadata_set;
13035  bool next_track;
13036  void * private_data;
13037};  </programlisting>
13038</refsynopsisdiv>
13039 <refsect1>
13040  <title>Members</title>
13041  <variablelist>
13042    <varlistentry>      <term>name</term>
13043      <listitem><para>
13044   device name
13045      </para></listitem>
13046    </varlistentry>
13047    <varlistentry>      <term>ops</term>
13048      <listitem><para>
13049   pointer to DSP callbacks
13050      </para></listitem>
13051    </varlistentry>
13052    <varlistentry>      <term>runtime</term>
13053      <listitem><para>
13054   pointer to runtime structure
13055      </para></listitem>
13056    </varlistentry>
13057    <varlistentry>      <term>device</term>
13058      <listitem><para>
13059   device pointer
13060      </para></listitem>
13061    </varlistentry>
13062    <varlistentry>      <term>direction</term>
13063      <listitem><para>
13064   stream direction, playback/recording
13065      </para></listitem>
13066    </varlistentry>
13067    <varlistentry>      <term>metadata_set</term>
13068      <listitem><para>
13069   metadata set flag, true when set
13070      </para></listitem>
13071    </varlistentry>
13072    <varlistentry>      <term>next_track</term>
13073      <listitem><para>
13074   has userspace signal next track transition, true when set
13075      </para></listitem>
13076    </varlistentry>
13077    <varlistentry>      <term>private_data</term>
13078      <listitem><para>
13079   pointer to DSP private data
13080      </para></listitem>
13081    </varlistentry>
13082  </variablelist>
13083 </refsect1>
13084</refentry>
13085
13086<refentry id="API-struct-snd-compr-ops">
13087<refentryinfo>
13088 <title>LINUX</title>
13089 <productname>Kernel Hackers Manual</productname>
13090 <date>July 2017</date>
13091</refentryinfo>
13092<refmeta>
13093 <refentrytitle><phrase>struct snd_compr_ops</phrase></refentrytitle>
13094 <manvolnum>9</manvolnum>
13095 <refmiscinfo class="version">4.4.14</refmiscinfo>
13096</refmeta>
13097<refnamediv>
13098 <refname>struct snd_compr_ops</refname>
13099 <refpurpose>
13100   </refpurpose>
13101</refnamediv>
13102<refsynopsisdiv>
13103 <title>Synopsis</title>
13104  <programlisting>
13105struct snd_compr_ops {
13106  int (* open) (struct snd_compr_stream *stream);
13107  int (* free) (struct snd_compr_stream *stream);
13108  int (* set_params) (struct snd_compr_stream *stream,struct snd_compr_params *params);
13109  int (* get_params) (struct snd_compr_stream *stream,struct snd_codec *params);
13110  int (* set_metadata) (struct snd_compr_stream *stream,struct snd_compr_metadata *metadata);
13111  int (* get_metadata) (struct snd_compr_stream *stream,struct snd_compr_metadata *metadata);
13112  int (* trigger) (struct snd_compr_stream *stream, int cmd);
13113  int (* pointer) (struct snd_compr_stream *stream,struct snd_compr_tstamp *tstamp);
13114  int (* copy) (struct snd_compr_stream *stream, char __user *buf,size_t count);
13115  int (* mmap) (struct snd_compr_stream *stream,struct vm_area_struct *vma);
13116  int (* ack) (struct snd_compr_stream *stream, size_t bytes);
13117  int (* get_caps) (struct snd_compr_stream *stream,struct snd_compr_caps *caps);
13118  int (* get_codec_caps) (struct snd_compr_stream *stream,struct snd_compr_codec_caps *codec);
13119};  </programlisting>
13120</refsynopsisdiv>
13121 <refsect1>
13122  <title>Members</title>
13123  <variablelist>
13124    <varlistentry>      <term>open</term>
13125      <listitem><para>
13126   Open the compressed stream
13127   This callback is mandatory and shall keep dsp ready to receive the stream
13128   parameter
13129      </para></listitem>
13130    </varlistentry>
13131    <varlistentry>      <term>free</term>
13132      <listitem><para>
13133   Close the compressed stream, mandatory
13134      </para></listitem>
13135    </varlistentry>
13136    <varlistentry>      <term>set_params</term>
13137      <listitem><para>
13138   Sets the compressed stream parameters, mandatory
13139   This can be called in during stream creation only to set codec params
13140   and the stream properties
13141      </para></listitem>
13142    </varlistentry>
13143    <varlistentry>      <term>get_params</term>
13144      <listitem><para>
13145   retrieve the codec parameters, mandatory
13146      </para></listitem>
13147    </varlistentry>
13148    <varlistentry>      <term>set_metadata</term>
13149      <listitem><para>
13150   Set the metadata values for a stream
13151      </para></listitem>
13152    </varlistentry>
13153    <varlistentry>      <term>get_metadata</term>
13154      <listitem><para>
13155   retrieves the requested metadata values from stream
13156      </para></listitem>
13157    </varlistentry>
13158    <varlistentry>      <term>trigger</term>
13159      <listitem><para>
13160   Trigger operations like start, pause, resume, drain, stop.
13161   This callback is mandatory
13162      </para></listitem>
13163    </varlistentry>
13164    <varlistentry>      <term>pointer</term>
13165      <listitem><para>
13166   Retrieve current h/w pointer information. Mandatory
13167      </para></listitem>
13168    </varlistentry>
13169    <varlistentry>      <term>copy</term>
13170      <listitem><para>
13171   Copy the compressed data to/from userspace, Optional
13172   Can't be implemented if DSP supports mmap
13173      </para></listitem>
13174    </varlistentry>
13175    <varlistentry>      <term>mmap</term>
13176      <listitem><para>
13177   DSP mmap method to mmap DSP memory
13178      </para></listitem>
13179    </varlistentry>
13180    <varlistentry>      <term>ack</term>
13181      <listitem><para>
13182   Ack for DSP when data is written to audio buffer, Optional
13183   Not valid if copy is implemented
13184      </para></listitem>
13185    </varlistentry>
13186    <varlistentry>      <term>get_caps</term>
13187      <listitem><para>
13188   Retrieve DSP capabilities, mandatory
13189      </para></listitem>
13190    </varlistentry>
13191    <varlistentry>      <term>get_codec_caps</term>
13192      <listitem><para>
13193   Retrieve capabilities for a specific codec, mandatory
13194      </para></listitem>
13195    </varlistentry>
13196  </variablelist>
13197 </refsect1>
13198</refentry>
13199
13200<refentry id="API-struct-snd-compr">
13201<refentryinfo>
13202 <title>LINUX</title>
13203 <productname>Kernel Hackers Manual</productname>
13204 <date>July 2017</date>
13205</refentryinfo>
13206<refmeta>
13207 <refentrytitle><phrase>struct snd_compr</phrase></refentrytitle>
13208 <manvolnum>9</manvolnum>
13209 <refmiscinfo class="version">4.4.14</refmiscinfo>
13210</refmeta>
13211<refnamediv>
13212 <refname>struct snd_compr</refname>
13213 <refpurpose>
13214   </refpurpose>
13215</refnamediv>
13216<refsynopsisdiv>
13217 <title>Synopsis</title>
13218  <programlisting>
13219struct snd_compr {
13220  const char * name;
13221  struct device dev;
13222  struct snd_compr_ops * ops;
13223  void * private_data;
13224  struct snd_card * card;
13225  unsigned int direction;
13226  struct mutex lock;
13227  int device;
13228};  </programlisting>
13229</refsynopsisdiv>
13230 <refsect1>
13231  <title>Members</title>
13232  <variablelist>
13233    <varlistentry>      <term>name</term>
13234      <listitem><para>
13235   DSP device name
13236      </para></listitem>
13237    </varlistentry>
13238    <varlistentry>      <term>dev</term>
13239      <listitem><para>
13240   associated device instance
13241      </para></listitem>
13242    </varlistentry>
13243    <varlistentry>      <term>ops</term>
13244      <listitem><para>
13245   pointer to DSP callbacks
13246      </para></listitem>
13247    </varlistentry>
13248    <varlistentry>      <term>private_data</term>
13249      <listitem><para>
13250   pointer to DSP pvt data
13251      </para></listitem>
13252    </varlistentry>
13253    <varlistentry>      <term>card</term>
13254      <listitem><para>
13255   sound card pointer
13256      </para></listitem>
13257    </varlistentry>
13258    <varlistentry>      <term>direction</term>
13259      <listitem><para>
13260   Playback or capture direction
13261      </para></listitem>
13262    </varlistentry>
13263    <varlistentry>      <term>lock</term>
13264      <listitem><para>
13265   device lock
13266      </para></listitem>
13267    </varlistentry>
13268    <varlistentry>      <term>device</term>
13269      <listitem><para>
13270   device id
13271      </para></listitem>
13272    </varlistentry>
13273  </variablelist>
13274 </refsect1>
13275</refentry>
13276
13277     </sect1>
13278  </chapter>
13279  <chapter><title>ASoC</title>
13280     <sect1><title>ASoC Core API</title>
13281<!-- include/sound/soc.h -->
13282<refentry id="API-struct-snd-soc-jack-pin">
13283<refentryinfo>
13284 <title>LINUX</title>
13285 <productname>Kernel Hackers Manual</productname>
13286 <date>July 2017</date>
13287</refentryinfo>
13288<refmeta>
13289 <refentrytitle><phrase>struct snd_soc_jack_pin</phrase></refentrytitle>
13290 <manvolnum>9</manvolnum>
13291 <refmiscinfo class="version">4.4.14</refmiscinfo>
13292</refmeta>
13293<refnamediv>
13294 <refname>struct snd_soc_jack_pin</refname>
13295 <refpurpose>
13296  Describes a pin to update based on jack detection
13297 </refpurpose>
13298</refnamediv>
13299<refsynopsisdiv>
13300 <title>Synopsis</title>
13301  <programlisting>
13302struct snd_soc_jack_pin {
13303  struct list_head list;
13304  const char * pin;
13305  int mask;
13306  bool invert;
13307};  </programlisting>
13308</refsynopsisdiv>
13309 <refsect1>
13310  <title>Members</title>
13311  <variablelist>
13312    <varlistentry>      <term>list</term>
13313      <listitem><para>
13314internal list entry
13315      </para></listitem>
13316    </varlistentry>
13317    <varlistentry>      <term>pin</term>
13318      <listitem><para>
13319name of the pin to update
13320      </para></listitem>
13321    </varlistentry>
13322    <varlistentry>      <term>mask</term>
13323      <listitem><para>
13324bits to check for in reported jack status
13325      </para></listitem>
13326    </varlistentry>
13327    <varlistentry>      <term>invert</term>
13328      <listitem><para>
13329if non-zero then pin is enabled when status is not reported
13330      </para></listitem>
13331    </varlistentry>
13332  </variablelist>
13333 </refsect1>
13334</refentry>
13335
13336<refentry id="API-struct-snd-soc-jack-zone">
13337<refentryinfo>
13338 <title>LINUX</title>
13339 <productname>Kernel Hackers Manual</productname>
13340 <date>July 2017</date>
13341</refentryinfo>
13342<refmeta>
13343 <refentrytitle><phrase>struct snd_soc_jack_zone</phrase></refentrytitle>
13344 <manvolnum>9</manvolnum>
13345 <refmiscinfo class="version">4.4.14</refmiscinfo>
13346</refmeta>
13347<refnamediv>
13348 <refname>struct snd_soc_jack_zone</refname>
13349 <refpurpose>
13350     Describes voltage zones of jack detection
13351 </refpurpose>
13352</refnamediv>
13353<refsynopsisdiv>
13354 <title>Synopsis</title>
13355  <programlisting>
13356struct snd_soc_jack_zone {
13357  unsigned int min_mv;
13358  unsigned int max_mv;
13359  unsigned int jack_type;
13360  unsigned int debounce_time;
13361  struct list_head list;
13362};  </programlisting>
13363</refsynopsisdiv>
13364 <refsect1>
13365  <title>Members</title>
13366  <variablelist>
13367    <varlistentry>      <term>min_mv</term>
13368      <listitem><para>
13369   start voltage in mv
13370      </para></listitem>
13371    </varlistentry>
13372    <varlistentry>      <term>max_mv</term>
13373      <listitem><para>
13374   end voltage in mv
13375      </para></listitem>
13376    </varlistentry>
13377    <varlistentry>      <term>jack_type</term>
13378      <listitem><para>
13379   type of jack that is expected for this voltage
13380      </para></listitem>
13381    </varlistentry>
13382    <varlistentry>      <term>debounce_time</term>
13383      <listitem><para>
13384   debounce_time for jack, codec driver should wait for this
13385   duration before reading the adc for voltages
13386      </para></listitem>
13387    </varlistentry>
13388    <varlistentry>      <term>list</term>
13389      <listitem><para>
13390   internal list entry
13391      </para></listitem>
13392    </varlistentry>
13393  </variablelist>
13394 </refsect1>
13395</refentry>
13396
13397<refentry id="API-struct-snd-soc-jack-gpio">
13398<refentryinfo>
13399 <title>LINUX</title>
13400 <productname>Kernel Hackers Manual</productname>
13401 <date>July 2017</date>
13402</refentryinfo>
13403<refmeta>
13404 <refentrytitle><phrase>struct snd_soc_jack_gpio</phrase></refentrytitle>
13405 <manvolnum>9</manvolnum>
13406 <refmiscinfo class="version">4.4.14</refmiscinfo>
13407</refmeta>
13408<refnamediv>
13409 <refname>struct snd_soc_jack_gpio</refname>
13410 <refpurpose>
13411     Describes a gpio pin for jack detection
13412 </refpurpose>
13413</refnamediv>
13414<refsynopsisdiv>
13415 <title>Synopsis</title>
13416  <programlisting>
13417struct snd_soc_jack_gpio {
13418  unsigned int gpio;
13419  unsigned int idx;
13420  struct device * gpiod_dev;
13421  const char * name;
13422  int report;
13423  int invert;
13424  int debounce_time;
13425  bool wake;
13426  int (* jack_status_check) (void *data);
13427};  </programlisting>
13428</refsynopsisdiv>
13429 <refsect1>
13430  <title>Members</title>
13431  <variablelist>
13432    <varlistentry>      <term>gpio</term>
13433      <listitem><para>
13434   legacy gpio number
13435      </para></listitem>
13436    </varlistentry>
13437    <varlistentry>      <term>idx</term>
13438      <listitem><para>
13439   gpio descriptor index within the function of the GPIO
13440   consumer device
13441      </para></listitem>
13442    </varlistentry>
13443    <varlistentry>      <term>gpiod_dev</term>
13444      <listitem><para>
13445   GPIO consumer device
13446      </para></listitem>
13447    </varlistentry>
13448    <varlistentry>      <term>name</term>
13449      <listitem><para>
13450   gpio name. Also as connection ID for the GPIO consumer
13451   device function name lookup
13452      </para></listitem>
13453    </varlistentry>
13454    <varlistentry>      <term>report</term>
13455      <listitem><para>
13456   value to report when jack detected
13457      </para></listitem>
13458    </varlistentry>
13459    <varlistentry>      <term>invert</term>
13460      <listitem><para>
13461   report presence in low state
13462      </para></listitem>
13463    </varlistentry>
13464    <varlistentry>      <term>debounce_time</term>
13465      <listitem><para>
13466   debounce time in ms
13467      </para></listitem>
13468    </varlistentry>
13469    <varlistentry>      <term>wake</term>
13470      <listitem><para>
13471   enable as wake source
13472      </para></listitem>
13473    </varlistentry>
13474    <varlistentry>      <term>jack_status_check</term>
13475      <listitem><para>
13476   callback function which overrides the detection
13477   to provide more complex checks (eg, reading an
13478   ADC).
13479      </para></listitem>
13480    </varlistentry>
13481  </variablelist>
13482 </refsect1>
13483</refentry>
13484
13485<refentry id="API-snd-soc-component-to-codec">
13486<refentryinfo>
13487 <title>LINUX</title>
13488 <productname>Kernel Hackers Manual</productname>
13489 <date>July 2017</date>
13490</refentryinfo>
13491<refmeta>
13492 <refentrytitle><phrase>snd_soc_component_to_codec</phrase></refentrytitle>
13493 <manvolnum>9</manvolnum>
13494 <refmiscinfo class="version">4.4.14</refmiscinfo>
13495</refmeta>
13496<refnamediv>
13497 <refname>snd_soc_component_to_codec</refname>
13498 <refpurpose>
13499     Casts a component to the CODEC it is embedded in
13500 </refpurpose>
13501</refnamediv>
13502<refsynopsisdiv>
13503 <title>Synopsis</title>
13504  <funcsynopsis><funcprototype>
13505   <funcdef>struct snd_soc_codec * <function>snd_soc_component_to_codec </function></funcdef>
13506   <paramdef>struct snd_soc_component * <parameter>component</parameter></paramdef>
13507  </funcprototype></funcsynopsis>
13508</refsynopsisdiv>
13509<refsect1>
13510 <title>Arguments</title>
13511 <variablelist>
13512  <varlistentry>
13513   <term><parameter>component</parameter></term>
13514   <listitem>
13515    <para>
13516     The component to cast to a CODEC
13517    </para>
13518   </listitem>
13519  </varlistentry>
13520 </variablelist>
13521</refsect1>
13522<refsect1>
13523<title>Description</title>
13524<para>
13525   This function must only be used on components that are known to be CODECs.
13526   Otherwise the behavior is undefined.
13527</para>
13528</refsect1>
13529</refentry>
13530
13531<refentry id="API-snd-soc-component-to-platform">
13532<refentryinfo>
13533 <title>LINUX</title>
13534 <productname>Kernel Hackers Manual</productname>
13535 <date>July 2017</date>
13536</refentryinfo>
13537<refmeta>
13538 <refentrytitle><phrase>snd_soc_component_to_platform</phrase></refentrytitle>
13539 <manvolnum>9</manvolnum>
13540 <refmiscinfo class="version">4.4.14</refmiscinfo>
13541</refmeta>
13542<refnamediv>
13543 <refname>snd_soc_component_to_platform</refname>
13544 <refpurpose>
13545     Casts a component to the platform it is embedded in
13546 </refpurpose>
13547</refnamediv>
13548<refsynopsisdiv>
13549 <title>Synopsis</title>
13550  <funcsynopsis><funcprototype>
13551   <funcdef>struct snd_soc_platform * <function>snd_soc_component_to_platform </function></funcdef>
13552   <paramdef>struct snd_soc_component * <parameter>component</parameter></paramdef>
13553  </funcprototype></funcsynopsis>
13554</refsynopsisdiv>
13555<refsect1>
13556 <title>Arguments</title>
13557 <variablelist>
13558  <varlistentry>
13559   <term><parameter>component</parameter></term>
13560   <listitem>
13561    <para>
13562     The component to cast to a platform
13563    </para>
13564   </listitem>
13565  </varlistentry>
13566 </variablelist>
13567</refsect1>
13568<refsect1>
13569<title>Description</title>
13570<para>
13571   This function must only be used on components that are known to be platforms.
13572   Otherwise the behavior is undefined.
13573</para>
13574</refsect1>
13575</refentry>
13576
13577<refentry id="API-snd-soc-dapm-to-component">
13578<refentryinfo>
13579 <title>LINUX</title>
13580 <productname>Kernel Hackers Manual</productname>
13581 <date>July 2017</date>
13582</refentryinfo>
13583<refmeta>
13584 <refentrytitle><phrase>snd_soc_dapm_to_component</phrase></refentrytitle>
13585 <manvolnum>9</manvolnum>
13586 <refmiscinfo class="version">4.4.14</refmiscinfo>
13587</refmeta>
13588<refnamediv>
13589 <refname>snd_soc_dapm_to_component</refname>
13590 <refpurpose>
13591     Casts a DAPM context to the component it is embedded in
13592 </refpurpose>
13593</refnamediv>
13594<refsynopsisdiv>
13595 <title>Synopsis</title>
13596  <funcsynopsis><funcprototype>
13597   <funcdef>struct snd_soc_component * <function>snd_soc_dapm_to_component </function></funcdef>
13598   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
13599  </funcprototype></funcsynopsis>
13600</refsynopsisdiv>
13601<refsect1>
13602 <title>Arguments</title>
13603 <variablelist>
13604  <varlistentry>
13605   <term><parameter>dapm</parameter></term>
13606   <listitem>
13607    <para>
13608     The DAPM context to cast to the component
13609    </para>
13610   </listitem>
13611  </varlistentry>
13612 </variablelist>
13613</refsect1>
13614<refsect1>
13615<title>Description</title>
13616<para>
13617   This function must only be used on DAPM contexts that are known to be part of
13618   a component (e.g. in a component driver). Otherwise the behavior is
13619   undefined.
13620</para>
13621</refsect1>
13622</refentry>
13623
13624<refentry id="API-snd-soc-dapm-to-codec">
13625<refentryinfo>
13626 <title>LINUX</title>
13627 <productname>Kernel Hackers Manual</productname>
13628 <date>July 2017</date>
13629</refentryinfo>
13630<refmeta>
13631 <refentrytitle><phrase>snd_soc_dapm_to_codec</phrase></refentrytitle>
13632 <manvolnum>9</manvolnum>
13633 <refmiscinfo class="version">4.4.14</refmiscinfo>
13634</refmeta>
13635<refnamediv>
13636 <refname>snd_soc_dapm_to_codec</refname>
13637 <refpurpose>
13638     Casts a DAPM context to the CODEC it is embedded in
13639 </refpurpose>
13640</refnamediv>
13641<refsynopsisdiv>
13642 <title>Synopsis</title>
13643  <funcsynopsis><funcprototype>
13644   <funcdef>struct snd_soc_codec * <function>snd_soc_dapm_to_codec </function></funcdef>
13645   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
13646  </funcprototype></funcsynopsis>
13647</refsynopsisdiv>
13648<refsect1>
13649 <title>Arguments</title>
13650 <variablelist>
13651  <varlistentry>
13652   <term><parameter>dapm</parameter></term>
13653   <listitem>
13654    <para>
13655     The DAPM context to cast to the CODEC
13656    </para>
13657   </listitem>
13658  </varlistentry>
13659 </variablelist>
13660</refsect1>
13661<refsect1>
13662<title>Description</title>
13663<para>
13664   This function must only be used on DAPM contexts that are known to be part of
13665   a CODEC (e.g. in a CODEC driver). Otherwise the behavior is undefined.
13666</para>
13667</refsect1>
13668</refentry>
13669
13670<refentry id="API-snd-soc-dapm-to-platform">
13671<refentryinfo>
13672 <title>LINUX</title>
13673 <productname>Kernel Hackers Manual</productname>
13674 <date>July 2017</date>
13675</refentryinfo>
13676<refmeta>
13677 <refentrytitle><phrase>snd_soc_dapm_to_platform</phrase></refentrytitle>
13678 <manvolnum>9</manvolnum>
13679 <refmiscinfo class="version">4.4.14</refmiscinfo>
13680</refmeta>
13681<refnamediv>
13682 <refname>snd_soc_dapm_to_platform</refname>
13683 <refpurpose>
13684     Casts a DAPM context to the platform it is embedded in
13685 </refpurpose>
13686</refnamediv>
13687<refsynopsisdiv>
13688 <title>Synopsis</title>
13689  <funcsynopsis><funcprototype>
13690   <funcdef>struct snd_soc_platform * <function>snd_soc_dapm_to_platform </function></funcdef>
13691   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
13692  </funcprototype></funcsynopsis>
13693</refsynopsisdiv>
13694<refsect1>
13695 <title>Arguments</title>
13696 <variablelist>
13697  <varlistentry>
13698   <term><parameter>dapm</parameter></term>
13699   <listitem>
13700    <para>
13701     The DAPM context to cast to the platform.
13702    </para>
13703   </listitem>
13704  </varlistentry>
13705 </variablelist>
13706</refsect1>
13707<refsect1>
13708<title>Description</title>
13709<para>
13710   This function must only be used on DAPM contexts that are known to be part of
13711   a platform (e.g. in a platform driver). Otherwise the behavior is undefined.
13712</para>
13713</refsect1>
13714</refentry>
13715
13716<refentry id="API-snd-soc-component-get-dapm">
13717<refentryinfo>
13718 <title>LINUX</title>
13719 <productname>Kernel Hackers Manual</productname>
13720 <date>July 2017</date>
13721</refentryinfo>
13722<refmeta>
13723 <refentrytitle><phrase>snd_soc_component_get_dapm</phrase></refentrytitle>
13724 <manvolnum>9</manvolnum>
13725 <refmiscinfo class="version">4.4.14</refmiscinfo>
13726</refmeta>
13727<refnamediv>
13728 <refname>snd_soc_component_get_dapm</refname>
13729 <refpurpose>
13730     Returns the DAPM context associated with a component
13731 </refpurpose>
13732</refnamediv>
13733<refsynopsisdiv>
13734 <title>Synopsis</title>
13735  <funcsynopsis><funcprototype>
13736   <funcdef>struct snd_soc_dapm_context * <function>snd_soc_component_get_dapm </function></funcdef>
13737   <paramdef>struct snd_soc_component * <parameter>component</parameter></paramdef>
13738  </funcprototype></funcsynopsis>
13739</refsynopsisdiv>
13740<refsect1>
13741 <title>Arguments</title>
13742 <variablelist>
13743  <varlistentry>
13744   <term><parameter>component</parameter></term>
13745   <listitem>
13746    <para>
13747     The component for which to get the DAPM context
13748    </para>
13749   </listitem>
13750  </varlistentry>
13751 </variablelist>
13752</refsect1>
13753</refentry>
13754
13755<refentry id="API-snd-soc-codec-get-dapm">
13756<refentryinfo>
13757 <title>LINUX</title>
13758 <productname>Kernel Hackers Manual</productname>
13759 <date>July 2017</date>
13760</refentryinfo>
13761<refmeta>
13762 <refentrytitle><phrase>snd_soc_codec_get_dapm</phrase></refentrytitle>
13763 <manvolnum>9</manvolnum>
13764 <refmiscinfo class="version">4.4.14</refmiscinfo>
13765</refmeta>
13766<refnamediv>
13767 <refname>snd_soc_codec_get_dapm</refname>
13768 <refpurpose>
13769     Returns the DAPM context for the CODEC
13770 </refpurpose>
13771</refnamediv>
13772<refsynopsisdiv>
13773 <title>Synopsis</title>
13774  <funcsynopsis><funcprototype>
13775   <funcdef>struct snd_soc_dapm_context * <function>snd_soc_codec_get_dapm </function></funcdef>
13776   <paramdef>struct snd_soc_codec * <parameter>codec</parameter></paramdef>
13777  </funcprototype></funcsynopsis>
13778</refsynopsisdiv>
13779<refsect1>
13780 <title>Arguments</title>
13781 <variablelist>
13782  <varlistentry>
13783   <term><parameter>codec</parameter></term>
13784   <listitem>
13785    <para>
13786     The CODEC for which to get the DAPM context
13787    </para>
13788   </listitem>
13789  </varlistentry>
13790 </variablelist>
13791</refsect1>
13792<refsect1>
13793<title>Note</title>
13794<para>
13795   Use this function instead of directly accessing the CODEC's dapm field
13796</para>
13797</refsect1>
13798</refentry>
13799
13800<refentry id="API-snd-soc-codec-init-bias-level">
13801<refentryinfo>
13802 <title>LINUX</title>
13803 <productname>Kernel Hackers Manual</productname>
13804 <date>July 2017</date>
13805</refentryinfo>
13806<refmeta>
13807 <refentrytitle><phrase>snd_soc_codec_init_bias_level</phrase></refentrytitle>
13808 <manvolnum>9</manvolnum>
13809 <refmiscinfo class="version">4.4.14</refmiscinfo>
13810</refmeta>
13811<refnamediv>
13812 <refname>snd_soc_codec_init_bias_level</refname>
13813 <refpurpose>
13814     Initialize CODEC DAPM bias level
13815 </refpurpose>
13816</refnamediv>
13817<refsynopsisdiv>
13818 <title>Synopsis</title>
13819  <funcsynopsis><funcprototype>
13820   <funcdef>void <function>snd_soc_codec_init_bias_level </function></funcdef>
13821   <paramdef>struct snd_soc_codec * <parameter>codec</parameter></paramdef>
13822   <paramdef>enum snd_soc_bias_level <parameter>level</parameter></paramdef>
13823  </funcprototype></funcsynopsis>
13824</refsynopsisdiv>
13825<refsect1>
13826 <title>Arguments</title>
13827 <variablelist>
13828  <varlistentry>
13829   <term><parameter>codec</parameter></term>
13830   <listitem>
13831    <para>
13832     The CODEC for which to initialize the DAPM bias level
13833    </para>
13834   </listitem>
13835  </varlistentry>
13836  <varlistentry>
13837   <term><parameter>level</parameter></term>
13838   <listitem>
13839    <para>
13840     The DAPM level to initialize to
13841    </para>
13842   </listitem>
13843  </varlistentry>
13844 </variablelist>
13845</refsect1>
13846<refsect1>
13847<title>Description</title>
13848<para>
13849   Initializes the CODEC DAPM bias level. See <function>snd_soc_dapm_init_bias_level</function>.
13850</para>
13851</refsect1>
13852</refentry>
13853
13854<refentry id="API-snd-soc-codec-get-bias-level">
13855<refentryinfo>
13856 <title>LINUX</title>
13857 <productname>Kernel Hackers Manual</productname>
13858 <date>July 2017</date>
13859</refentryinfo>
13860<refmeta>
13861 <refentrytitle><phrase>snd_soc_codec_get_bias_level</phrase></refentrytitle>
13862 <manvolnum>9</manvolnum>
13863 <refmiscinfo class="version">4.4.14</refmiscinfo>
13864</refmeta>
13865<refnamediv>
13866 <refname>snd_soc_codec_get_bias_level</refname>
13867 <refpurpose>
13868     Get current CODEC DAPM bias level
13869 </refpurpose>
13870</refnamediv>
13871<refsynopsisdiv>
13872 <title>Synopsis</title>
13873  <funcsynopsis><funcprototype>
13874   <funcdef>enum snd_soc_bias_level <function>snd_soc_codec_get_bias_level </function></funcdef>
13875   <paramdef>struct snd_soc_codec * <parameter>codec</parameter></paramdef>
13876  </funcprototype></funcsynopsis>
13877</refsynopsisdiv>
13878<refsect1>
13879 <title>Arguments</title>
13880 <variablelist>
13881  <varlistentry>
13882   <term><parameter>codec</parameter></term>
13883   <listitem>
13884    <para>
13885     The CODEC for which to get the DAPM bias level
13886    </para>
13887   </listitem>
13888  </varlistentry>
13889 </variablelist>
13890</refsect1>
13891<refsect1>
13892<title>Returns</title>
13893<para>
13894   The current DAPM bias level of the CODEC.
13895</para>
13896</refsect1>
13897</refentry>
13898
13899<refentry id="API-snd-soc-codec-force-bias-level">
13900<refentryinfo>
13901 <title>LINUX</title>
13902 <productname>Kernel Hackers Manual</productname>
13903 <date>July 2017</date>
13904</refentryinfo>
13905<refmeta>
13906 <refentrytitle><phrase>snd_soc_codec_force_bias_level</phrase></refentrytitle>
13907 <manvolnum>9</manvolnum>
13908 <refmiscinfo class="version">4.4.14</refmiscinfo>
13909</refmeta>
13910<refnamediv>
13911 <refname>snd_soc_codec_force_bias_level</refname>
13912 <refpurpose>
13913     Set the CODEC DAPM bias level
13914 </refpurpose>
13915</refnamediv>
13916<refsynopsisdiv>
13917 <title>Synopsis</title>
13918  <funcsynopsis><funcprototype>
13919   <funcdef>int <function>snd_soc_codec_force_bias_level </function></funcdef>
13920   <paramdef>struct snd_soc_codec * <parameter>codec</parameter></paramdef>
13921   <paramdef>enum snd_soc_bias_level <parameter>level</parameter></paramdef>
13922  </funcprototype></funcsynopsis>
13923</refsynopsisdiv>
13924<refsect1>
13925 <title>Arguments</title>
13926 <variablelist>
13927  <varlistentry>
13928   <term><parameter>codec</parameter></term>
13929   <listitem>
13930    <para>
13931     The CODEC for which to set the level
13932    </para>
13933   </listitem>
13934  </varlistentry>
13935  <varlistentry>
13936   <term><parameter>level</parameter></term>
13937   <listitem>
13938    <para>
13939     The level to set to
13940    </para>
13941   </listitem>
13942  </varlistentry>
13943 </variablelist>
13944</refsect1>
13945<refsect1>
13946<title>Description</title>
13947<para>
13948   Forces the CODEC bias level to a specific state. See
13949   <function>snd_soc_dapm_force_bias_level</function>.
13950</para>
13951</refsect1>
13952</refentry>
13953
13954<refentry id="API-snd-soc-dapm-kcontrol-codec">
13955<refentryinfo>
13956 <title>LINUX</title>
13957 <productname>Kernel Hackers Manual</productname>
13958 <date>July 2017</date>
13959</refentryinfo>
13960<refmeta>
13961 <refentrytitle><phrase>snd_soc_dapm_kcontrol_codec</phrase></refentrytitle>
13962 <manvolnum>9</manvolnum>
13963 <refmiscinfo class="version">4.4.14</refmiscinfo>
13964</refmeta>
13965<refnamediv>
13966 <refname>snd_soc_dapm_kcontrol_codec</refname>
13967 <refpurpose>
13968     Returns the codec associated to a kcontrol
13969 </refpurpose>
13970</refnamediv>
13971<refsynopsisdiv>
13972 <title>Synopsis</title>
13973  <funcsynopsis><funcprototype>
13974   <funcdef>struct snd_soc_codec * <function>snd_soc_dapm_kcontrol_codec </function></funcdef>
13975   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
13976  </funcprototype></funcsynopsis>
13977</refsynopsisdiv>
13978<refsect1>
13979 <title>Arguments</title>
13980 <variablelist>
13981  <varlistentry>
13982   <term><parameter>kcontrol</parameter></term>
13983   <listitem>
13984    <para>
13985     The kcontrol
13986    </para>
13987   </listitem>
13988  </varlistentry>
13989 </variablelist>
13990</refsect1>
13991<refsect1>
13992<title>Description</title>
13993<para>
13994   This function must only be used on DAPM contexts that are known to be part of
13995   a CODEC (e.g. in a CODEC driver). Otherwise the behavior is undefined.
13996</para>
13997</refsect1>
13998</refentry>
13999
14000<refentry id="API-snd-soc-cache-sync">
14001<refentryinfo>
14002 <title>LINUX</title>
14003 <productname>Kernel Hackers Manual</productname>
14004 <date>July 2017</date>
14005</refentryinfo>
14006<refmeta>
14007 <refentrytitle><phrase>snd_soc_cache_sync</phrase></refentrytitle>
14008 <manvolnum>9</manvolnum>
14009 <refmiscinfo class="version">4.4.14</refmiscinfo>
14010</refmeta>
14011<refnamediv>
14012 <refname>snd_soc_cache_sync</refname>
14013 <refpurpose>
14014     Sync the register cache with the hardware
14015 </refpurpose>
14016</refnamediv>
14017<refsynopsisdiv>
14018 <title>Synopsis</title>
14019  <funcsynopsis><funcprototype>
14020   <funcdef>int <function>snd_soc_cache_sync </function></funcdef>
14021   <paramdef>struct snd_soc_codec * <parameter>codec</parameter></paramdef>
14022  </funcprototype></funcsynopsis>
14023</refsynopsisdiv>
14024<refsect1>
14025 <title>Arguments</title>
14026 <variablelist>
14027  <varlistentry>
14028   <term><parameter>codec</parameter></term>
14029   <listitem>
14030    <para>
14031     CODEC to sync
14032    </para>
14033   </listitem>
14034  </varlistentry>
14035 </variablelist>
14036</refsect1>
14037<refsect1>
14038<title>Note</title>
14039<para>
14040   This function will call <function>regcache_sync</function>
14041</para>
14042</refsect1>
14043</refentry>
14044
14045<refentry id="API-snd-soc-codec-init-regmap">
14046<refentryinfo>
14047 <title>LINUX</title>
14048 <productname>Kernel Hackers Manual</productname>
14049 <date>July 2017</date>
14050</refentryinfo>
14051<refmeta>
14052 <refentrytitle><phrase>snd_soc_codec_init_regmap</phrase></refentrytitle>
14053 <manvolnum>9</manvolnum>
14054 <refmiscinfo class="version">4.4.14</refmiscinfo>
14055</refmeta>
14056<refnamediv>
14057 <refname>snd_soc_codec_init_regmap</refname>
14058 <refpurpose>
14059     Initialize regmap instance for the CODEC
14060 </refpurpose>
14061</refnamediv>
14062<refsynopsisdiv>
14063 <title>Synopsis</title>
14064  <funcsynopsis><funcprototype>
14065   <funcdef>void <function>snd_soc_codec_init_regmap </function></funcdef>
14066   <paramdef>struct snd_soc_codec * <parameter>codec</parameter></paramdef>
14067   <paramdef>struct regmap * <parameter>regmap</parameter></paramdef>
14068  </funcprototype></funcsynopsis>
14069</refsynopsisdiv>
14070<refsect1>
14071 <title>Arguments</title>
14072 <variablelist>
14073  <varlistentry>
14074   <term><parameter>codec</parameter></term>
14075   <listitem>
14076    <para>
14077     The CODEC for which to initialize the regmap instance
14078    </para>
14079   </listitem>
14080  </varlistentry>
14081  <varlistentry>
14082   <term><parameter>regmap</parameter></term>
14083   <listitem>
14084    <para>
14085     The regmap instance that should be used by the CODEC
14086    </para>
14087   </listitem>
14088  </varlistentry>
14089 </variablelist>
14090</refsect1>
14091<refsect1>
14092<title>Description</title>
14093<para>
14094   This function allows deferred assignment of the regmap instance that is
14095   associated with the CODEC. Only use this if the regmap instance is not yet
14096   ready when the CODEC is registered. The function must also be called before
14097   the first IO attempt of the CODEC.
14098</para>
14099</refsect1>
14100</refentry>
14101
14102<refentry id="API-snd-soc-codec-exit-regmap">
14103<refentryinfo>
14104 <title>LINUX</title>
14105 <productname>Kernel Hackers Manual</productname>
14106 <date>July 2017</date>
14107</refentryinfo>
14108<refmeta>
14109 <refentrytitle><phrase>snd_soc_codec_exit_regmap</phrase></refentrytitle>
14110 <manvolnum>9</manvolnum>
14111 <refmiscinfo class="version">4.4.14</refmiscinfo>
14112</refmeta>
14113<refnamediv>
14114 <refname>snd_soc_codec_exit_regmap</refname>
14115 <refpurpose>
14116     De-initialize regmap instance for the CODEC
14117 </refpurpose>
14118</refnamediv>
14119<refsynopsisdiv>
14120 <title>Synopsis</title>
14121  <funcsynopsis><funcprototype>
14122   <funcdef>void <function>snd_soc_codec_exit_regmap </function></funcdef>
14123   <paramdef>struct snd_soc_codec * <parameter>codec</parameter></paramdef>
14124  </funcprototype></funcsynopsis>
14125</refsynopsisdiv>
14126<refsect1>
14127 <title>Arguments</title>
14128 <variablelist>
14129  <varlistentry>
14130   <term><parameter>codec</parameter></term>
14131   <listitem>
14132    <para>
14133     The CODEC for which to de-initialize the regmap instance
14134    </para>
14135   </listitem>
14136  </varlistentry>
14137 </variablelist>
14138</refsect1>
14139<refsect1>
14140<title>Description</title>
14141<para>
14142   Calls <function>regmap_exit</function> on the regmap instance associated to the CODEC and
14143   removes the regmap instance from the CODEC.
14144   </para><para>
14145
14146   This function should only be used if <function>snd_soc_codec_init_regmap</function> was used to
14147   initialize the regmap instance.
14148</para>
14149</refsect1>
14150</refentry>
14151
14152<refentry id="API-snd-soc-kcontrol-component">
14153<refentryinfo>
14154 <title>LINUX</title>
14155 <productname>Kernel Hackers Manual</productname>
14156 <date>July 2017</date>
14157</refentryinfo>
14158<refmeta>
14159 <refentrytitle><phrase>snd_soc_kcontrol_component</phrase></refentrytitle>
14160 <manvolnum>9</manvolnum>
14161 <refmiscinfo class="version">4.4.14</refmiscinfo>
14162</refmeta>
14163<refnamediv>
14164 <refname>snd_soc_kcontrol_component</refname>
14165 <refpurpose>
14166     Returns the component that registered the control
14167 </refpurpose>
14168</refnamediv>
14169<refsynopsisdiv>
14170 <title>Synopsis</title>
14171  <funcsynopsis><funcprototype>
14172   <funcdef>struct snd_soc_component * <function>snd_soc_kcontrol_component </function></funcdef>
14173   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
14174  </funcprototype></funcsynopsis>
14175</refsynopsisdiv>
14176<refsect1>
14177 <title>Arguments</title>
14178 <variablelist>
14179  <varlistentry>
14180   <term><parameter>kcontrol</parameter></term>
14181   <listitem>
14182    <para>
14183     The control for which to get the component
14184    </para>
14185   </listitem>
14186  </varlistentry>
14187 </variablelist>
14188</refsect1>
14189<refsect1>
14190<title>Note</title>
14191<para>
14192   This function will work correctly if the control has been registered
14193   for a component. Either with <function>snd_soc_add_codec_controls</function> or
14194   <function>snd_soc_add_platform_controls</function> or via  table based setup for either a
14195   CODEC, a platform or component driver. Otherwise the behavior is undefined.
14196</para>
14197</refsect1>
14198</refentry>
14199
14200<refentry id="API-snd-soc-kcontrol-codec">
14201<refentryinfo>
14202 <title>LINUX</title>
14203 <productname>Kernel Hackers Manual</productname>
14204 <date>July 2017</date>
14205</refentryinfo>
14206<refmeta>
14207 <refentrytitle><phrase>snd_soc_kcontrol_codec</phrase></refentrytitle>
14208 <manvolnum>9</manvolnum>
14209 <refmiscinfo class="version">4.4.14</refmiscinfo>
14210</refmeta>
14211<refnamediv>
14212 <refname>snd_soc_kcontrol_codec</refname>
14213 <refpurpose>
14214     Returns the CODEC that registered the control
14215 </refpurpose>
14216</refnamediv>
14217<refsynopsisdiv>
14218 <title>Synopsis</title>
14219  <funcsynopsis><funcprototype>
14220   <funcdef>struct snd_soc_codec * <function>snd_soc_kcontrol_codec </function></funcdef>
14221   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
14222  </funcprototype></funcsynopsis>
14223</refsynopsisdiv>
14224<refsect1>
14225 <title>Arguments</title>
14226 <variablelist>
14227  <varlistentry>
14228   <term><parameter>kcontrol</parameter></term>
14229   <listitem>
14230    <para>
14231     The control for which to get the CODEC
14232    </para>
14233   </listitem>
14234  </varlistentry>
14235 </variablelist>
14236</refsect1>
14237<refsect1>
14238<title>Note</title>
14239<para>
14240   This function will only work correctly if the control has been
14241   registered with <function>snd_soc_add_codec_controls</function> or via table based setup of
14242   snd_soc_codec_driver. Otherwise the behavior is undefined.
14243</para>
14244</refsect1>
14245</refentry>
14246
14247<refentry id="API-snd-soc-kcontrol-platform">
14248<refentryinfo>
14249 <title>LINUX</title>
14250 <productname>Kernel Hackers Manual</productname>
14251 <date>July 2017</date>
14252</refentryinfo>
14253<refmeta>
14254 <refentrytitle><phrase>snd_soc_kcontrol_platform</phrase></refentrytitle>
14255 <manvolnum>9</manvolnum>
14256 <refmiscinfo class="version">4.4.14</refmiscinfo>
14257</refmeta>
14258<refnamediv>
14259 <refname>snd_soc_kcontrol_platform</refname>
14260 <refpurpose>
14261     Returns the platform that registered the control
14262 </refpurpose>
14263</refnamediv>
14264<refsynopsisdiv>
14265 <title>Synopsis</title>
14266  <funcsynopsis><funcprototype>
14267   <funcdef>struct snd_soc_platform * <function>snd_soc_kcontrol_platform </function></funcdef>
14268   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
14269  </funcprototype></funcsynopsis>
14270</refsynopsisdiv>
14271<refsect1>
14272 <title>Arguments</title>
14273 <variablelist>
14274  <varlistentry>
14275   <term><parameter>kcontrol</parameter></term>
14276   <listitem>
14277    <para>
14278     The control for which to get the platform
14279    </para>
14280   </listitem>
14281  </varlistentry>
14282 </variablelist>
14283</refsect1>
14284<refsect1>
14285<title>Note</title>
14286<para>
14287   This function will only work correctly if the control has been
14288   registered with <function>snd_soc_add_platform_controls</function> or via table based setup of
14289   a snd_soc_platform_driver. Otherwise the behavior is undefined.
14290</para>
14291</refsect1>
14292</refentry>
14293
14294<!-- sound/soc/soc-core.c -->
14295<refentry id="API-snd-soc-runtime-set-dai-fmt">
14296<refentryinfo>
14297 <title>LINUX</title>
14298 <productname>Kernel Hackers Manual</productname>
14299 <date>July 2017</date>
14300</refentryinfo>
14301<refmeta>
14302 <refentrytitle><phrase>snd_soc_runtime_set_dai_fmt</phrase></refentrytitle>
14303 <manvolnum>9</manvolnum>
14304 <refmiscinfo class="version">4.4.14</refmiscinfo>
14305</refmeta>
14306<refnamediv>
14307 <refname>snd_soc_runtime_set_dai_fmt</refname>
14308 <refpurpose>
14309  Change DAI link format for a ASoC runtime
14310 </refpurpose>
14311</refnamediv>
14312<refsynopsisdiv>
14313 <title>Synopsis</title>
14314  <funcsynopsis><funcprototype>
14315   <funcdef>int <function>snd_soc_runtime_set_dai_fmt </function></funcdef>
14316   <paramdef>struct snd_soc_pcm_runtime * <parameter>rtd</parameter></paramdef>
14317   <paramdef>unsigned int <parameter>dai_fmt</parameter></paramdef>
14318  </funcprototype></funcsynopsis>
14319</refsynopsisdiv>
14320<refsect1>
14321 <title>Arguments</title>
14322 <variablelist>
14323  <varlistentry>
14324   <term><parameter>rtd</parameter></term>
14325   <listitem>
14326    <para>
14327     The runtime for which the DAI link format should be changed
14328    </para>
14329   </listitem>
14330  </varlistentry>
14331  <varlistentry>
14332   <term><parameter>dai_fmt</parameter></term>
14333   <listitem>
14334    <para>
14335     The new DAI link format
14336    </para>
14337   </listitem>
14338  </varlistentry>
14339 </variablelist>
14340</refsect1>
14341<refsect1>
14342<title>Description</title>
14343<para>
14344   This function updates the DAI link format for all DAIs connected to the DAI
14345   link for the specified runtime.
14346</para>
14347</refsect1>
14348<refsect1>
14349<title>Note</title>
14350<para>
14351   For setups with a static format set the dai_fmt field in the
14352   corresponding snd_dai_link struct instead of using this function.
14353   </para><para>
14354
14355   Returns 0 on success, otherwise a negative error code.
14356</para>
14357</refsect1>
14358</refentry>
14359
14360<refentry id="API-snd-soc-cnew">
14361<refentryinfo>
14362 <title>LINUX</title>
14363 <productname>Kernel Hackers Manual</productname>
14364 <date>July 2017</date>
14365</refentryinfo>
14366<refmeta>
14367 <refentrytitle><phrase>snd_soc_cnew</phrase></refentrytitle>
14368 <manvolnum>9</manvolnum>
14369 <refmiscinfo class="version">4.4.14</refmiscinfo>
14370</refmeta>
14371<refnamediv>
14372 <refname>snd_soc_cnew</refname>
14373 <refpurpose>
14374     create new control
14375 </refpurpose>
14376</refnamediv>
14377<refsynopsisdiv>
14378 <title>Synopsis</title>
14379  <funcsynopsis><funcprototype>
14380   <funcdef>struct snd_kcontrol * <function>snd_soc_cnew </function></funcdef>
14381   <paramdef>const struct snd_kcontrol_new * <parameter>_template</parameter></paramdef>
14382   <paramdef>void * <parameter>data</parameter></paramdef>
14383   <paramdef>const char * <parameter>long_name</parameter></paramdef>
14384   <paramdef>const char * <parameter>prefix</parameter></paramdef>
14385  </funcprototype></funcsynopsis>
14386</refsynopsisdiv>
14387<refsect1>
14388 <title>Arguments</title>
14389 <variablelist>
14390  <varlistentry>
14391   <term><parameter>_template</parameter></term>
14392   <listitem>
14393    <para>
14394     control template
14395    </para>
14396   </listitem>
14397  </varlistentry>
14398  <varlistentry>
14399   <term><parameter>data</parameter></term>
14400   <listitem>
14401    <para>
14402     control private data
14403    </para>
14404   </listitem>
14405  </varlistentry>
14406  <varlistentry>
14407   <term><parameter>long_name</parameter></term>
14408   <listitem>
14409    <para>
14410     control long name
14411    </para>
14412   </listitem>
14413  </varlistentry>
14414  <varlistentry>
14415   <term><parameter>prefix</parameter></term>
14416   <listitem>
14417    <para>
14418     control name prefix
14419    </para>
14420   </listitem>
14421  </varlistentry>
14422 </variablelist>
14423</refsect1>
14424<refsect1>
14425<title>Description</title>
14426<para>
14427   Create a new mixer control from a template control.
14428   </para><para>
14429
14430   Returns 0 for success, else error.
14431</para>
14432</refsect1>
14433</refentry>
14434
14435<refentry id="API-snd-soc-add-component-controls">
14436<refentryinfo>
14437 <title>LINUX</title>
14438 <productname>Kernel Hackers Manual</productname>
14439 <date>July 2017</date>
14440</refentryinfo>
14441<refmeta>
14442 <refentrytitle><phrase>snd_soc_add_component_controls</phrase></refentrytitle>
14443 <manvolnum>9</manvolnum>
14444 <refmiscinfo class="version">4.4.14</refmiscinfo>
14445</refmeta>
14446<refnamediv>
14447 <refname>snd_soc_add_component_controls</refname>
14448 <refpurpose>
14449     Add an array of controls to a component.
14450 </refpurpose>
14451</refnamediv>
14452<refsynopsisdiv>
14453 <title>Synopsis</title>
14454  <funcsynopsis><funcprototype>
14455   <funcdef>int <function>snd_soc_add_component_controls </function></funcdef>
14456   <paramdef>struct snd_soc_component * <parameter>component</parameter></paramdef>
14457   <paramdef>const struct snd_kcontrol_new * <parameter>controls</parameter></paramdef>
14458   <paramdef>unsigned int <parameter>num_controls</parameter></paramdef>
14459  </funcprototype></funcsynopsis>
14460</refsynopsisdiv>
14461<refsect1>
14462 <title>Arguments</title>
14463 <variablelist>
14464  <varlistentry>
14465   <term><parameter>component</parameter></term>
14466   <listitem>
14467    <para>
14468     Component to add controls to
14469    </para>
14470   </listitem>
14471  </varlistentry>
14472  <varlistentry>
14473   <term><parameter>controls</parameter></term>
14474   <listitem>
14475    <para>
14476     Array of controls to add
14477    </para>
14478   </listitem>
14479  </varlistentry>
14480  <varlistentry>
14481   <term><parameter>num_controls</parameter></term>
14482   <listitem>
14483    <para>
14484     Number of elements in the array
14485    </para>
14486   </listitem>
14487  </varlistentry>
14488 </variablelist>
14489</refsect1>
14490<refsect1>
14491<title>Return</title>
14492<para>
14493   0 for success, else error.
14494</para>
14495</refsect1>
14496</refentry>
14497
14498<refentry id="API-snd-soc-add-codec-controls">
14499<refentryinfo>
14500 <title>LINUX</title>
14501 <productname>Kernel Hackers Manual</productname>
14502 <date>July 2017</date>
14503</refentryinfo>
14504<refmeta>
14505 <refentrytitle><phrase>snd_soc_add_codec_controls</phrase></refentrytitle>
14506 <manvolnum>9</manvolnum>
14507 <refmiscinfo class="version">4.4.14</refmiscinfo>
14508</refmeta>
14509<refnamediv>
14510 <refname>snd_soc_add_codec_controls</refname>
14511 <refpurpose>
14512     add an array of controls to a codec. Convenience function to add a list of controls. Many codecs were duplicating this code.
14513 </refpurpose>
14514</refnamediv>
14515<refsynopsisdiv>
14516 <title>Synopsis</title>
14517  <funcsynopsis><funcprototype>
14518   <funcdef>int <function>snd_soc_add_codec_controls </function></funcdef>
14519   <paramdef>struct snd_soc_codec * <parameter>codec</parameter></paramdef>
14520   <paramdef>const struct snd_kcontrol_new * <parameter>controls</parameter></paramdef>
14521   <paramdef>unsigned int <parameter>num_controls</parameter></paramdef>
14522  </funcprototype></funcsynopsis>
14523</refsynopsisdiv>
14524<refsect1>
14525 <title>Arguments</title>
14526 <variablelist>
14527  <varlistentry>
14528   <term><parameter>codec</parameter></term>
14529   <listitem>
14530    <para>
14531     codec to add controls to
14532    </para>
14533   </listitem>
14534  </varlistentry>
14535  <varlistentry>
14536   <term><parameter>controls</parameter></term>
14537   <listitem>
14538    <para>
14539     array of controls to add
14540    </para>
14541   </listitem>
14542  </varlistentry>
14543  <varlistentry>
14544   <term><parameter>num_controls</parameter></term>
14545   <listitem>
14546    <para>
14547     number of elements in the array
14548    </para>
14549   </listitem>
14550  </varlistentry>
14551 </variablelist>
14552</refsect1>
14553<refsect1>
14554<title>Description</title>
14555<para>
14556   Return 0 for success, else error.
14557</para>
14558</refsect1>
14559</refentry>
14560
14561<refentry id="API-snd-soc-add-platform-controls">
14562<refentryinfo>
14563 <title>LINUX</title>
14564 <productname>Kernel Hackers Manual</productname>
14565 <date>July 2017</date>
14566</refentryinfo>
14567<refmeta>
14568 <refentrytitle><phrase>snd_soc_add_platform_controls</phrase></refentrytitle>
14569 <manvolnum>9</manvolnum>
14570 <refmiscinfo class="version">4.4.14</refmiscinfo>
14571</refmeta>
14572<refnamediv>
14573 <refname>snd_soc_add_platform_controls</refname>
14574 <refpurpose>
14575     add an array of controls to a platform. Convenience function to add a list of controls.
14576 </refpurpose>
14577</refnamediv>
14578<refsynopsisdiv>
14579 <title>Synopsis</title>
14580  <funcsynopsis><funcprototype>
14581   <funcdef>int <function>snd_soc_add_platform_controls </function></funcdef>
14582   <paramdef>struct snd_soc_platform * <parameter>platform</parameter></paramdef>
14583   <paramdef>const struct snd_kcontrol_new * <parameter>controls</parameter></paramdef>
14584   <paramdef>unsigned int <parameter>num_controls</parameter></paramdef>
14585  </funcprototype></funcsynopsis>
14586</refsynopsisdiv>
14587<refsect1>
14588 <title>Arguments</title>
14589 <variablelist>
14590  <varlistentry>
14591   <term><parameter>platform</parameter></term>
14592   <listitem>
14593    <para>
14594     platform to add controls to
14595    </para>
14596   </listitem>
14597  </varlistentry>
14598  <varlistentry>
14599   <term><parameter>controls</parameter></term>
14600   <listitem>
14601    <para>
14602     array of controls to add
14603    </para>
14604   </listitem>
14605  </varlistentry>
14606  <varlistentry>
14607   <term><parameter>num_controls</parameter></term>
14608   <listitem>
14609    <para>
14610     number of elements in the array
14611    </para>
14612   </listitem>
14613  </varlistentry>
14614 </variablelist>
14615</refsect1>
14616<refsect1>
14617<title>Description</title>
14618<para>
14619   Return 0 for success, else error.
14620</para>
14621</refsect1>
14622</refentry>
14623
14624<refentry id="API-snd-soc-add-card-controls">
14625<refentryinfo>
14626 <title>LINUX</title>
14627 <productname>Kernel Hackers Manual</productname>
14628 <date>July 2017</date>
14629</refentryinfo>
14630<refmeta>
14631 <refentrytitle><phrase>snd_soc_add_card_controls</phrase></refentrytitle>
14632 <manvolnum>9</manvolnum>
14633 <refmiscinfo class="version">4.4.14</refmiscinfo>
14634</refmeta>
14635<refnamediv>
14636 <refname>snd_soc_add_card_controls</refname>
14637 <refpurpose>
14638     add an array of controls to a SoC card. Convenience function to add a list of controls.
14639 </refpurpose>
14640</refnamediv>
14641<refsynopsisdiv>
14642 <title>Synopsis</title>
14643  <funcsynopsis><funcprototype>
14644   <funcdef>int <function>snd_soc_add_card_controls </function></funcdef>
14645   <paramdef>struct snd_soc_card * <parameter>soc_card</parameter></paramdef>
14646   <paramdef>const struct snd_kcontrol_new * <parameter>controls</parameter></paramdef>
14647   <paramdef>int <parameter>num_controls</parameter></paramdef>
14648  </funcprototype></funcsynopsis>
14649</refsynopsisdiv>
14650<refsect1>
14651 <title>Arguments</title>
14652 <variablelist>
14653  <varlistentry>
14654   <term><parameter>soc_card</parameter></term>
14655   <listitem>
14656    <para>
14657     SoC card to add controls to
14658    </para>
14659   </listitem>
14660  </varlistentry>
14661  <varlistentry>
14662   <term><parameter>controls</parameter></term>
14663   <listitem>
14664    <para>
14665     array of controls to add
14666    </para>
14667   </listitem>
14668  </varlistentry>
14669  <varlistentry>
14670   <term><parameter>num_controls</parameter></term>
14671   <listitem>
14672    <para>
14673     number of elements in the array
14674    </para>
14675   </listitem>
14676  </varlistentry>
14677 </variablelist>
14678</refsect1>
14679<refsect1>
14680<title>Description</title>
14681<para>
14682   Return 0 for success, else error.
14683</para>
14684</refsect1>
14685</refentry>
14686
14687<refentry id="API-snd-soc-add-dai-controls">
14688<refentryinfo>
14689 <title>LINUX</title>
14690 <productname>Kernel Hackers Manual</productname>
14691 <date>July 2017</date>
14692</refentryinfo>
14693<refmeta>
14694 <refentrytitle><phrase>snd_soc_add_dai_controls</phrase></refentrytitle>
14695 <manvolnum>9</manvolnum>
14696 <refmiscinfo class="version">4.4.14</refmiscinfo>
14697</refmeta>
14698<refnamediv>
14699 <refname>snd_soc_add_dai_controls</refname>
14700 <refpurpose>
14701     add an array of controls to a DAI. Convienience function to add a list of controls.
14702 </refpurpose>
14703</refnamediv>
14704<refsynopsisdiv>
14705 <title>Synopsis</title>
14706  <funcsynopsis><funcprototype>
14707   <funcdef>int <function>snd_soc_add_dai_controls </function></funcdef>
14708   <paramdef>struct snd_soc_dai * <parameter>dai</parameter></paramdef>
14709   <paramdef>const struct snd_kcontrol_new * <parameter>controls</parameter></paramdef>
14710   <paramdef>int <parameter>num_controls</parameter></paramdef>
14711  </funcprototype></funcsynopsis>
14712</refsynopsisdiv>
14713<refsect1>
14714 <title>Arguments</title>
14715 <variablelist>
14716  <varlistentry>
14717   <term><parameter>dai</parameter></term>
14718   <listitem>
14719    <para>
14720     DAI to add controls to
14721    </para>
14722   </listitem>
14723  </varlistentry>
14724  <varlistentry>
14725   <term><parameter>controls</parameter></term>
14726   <listitem>
14727    <para>
14728     array of controls to add
14729    </para>
14730   </listitem>
14731  </varlistentry>
14732  <varlistentry>
14733   <term><parameter>num_controls</parameter></term>
14734   <listitem>
14735    <para>
14736     number of elements in the array
14737    </para>
14738   </listitem>
14739  </varlistentry>
14740 </variablelist>
14741</refsect1>
14742<refsect1>
14743<title>Description</title>
14744<para>
14745   Return 0 for success, else error.
14746</para>
14747</refsect1>
14748</refentry>
14749
14750<refentry id="API-snd-soc-dai-set-sysclk">
14751<refentryinfo>
14752 <title>LINUX</title>
14753 <productname>Kernel Hackers Manual</productname>
14754 <date>July 2017</date>
14755</refentryinfo>
14756<refmeta>
14757 <refentrytitle><phrase>snd_soc_dai_set_sysclk</phrase></refentrytitle>
14758 <manvolnum>9</manvolnum>
14759 <refmiscinfo class="version">4.4.14</refmiscinfo>
14760</refmeta>
14761<refnamediv>
14762 <refname>snd_soc_dai_set_sysclk</refname>
14763 <refpurpose>
14764     configure DAI system or master clock.
14765 </refpurpose>
14766</refnamediv>
14767<refsynopsisdiv>
14768 <title>Synopsis</title>
14769  <funcsynopsis><funcprototype>
14770   <funcdef>int <function>snd_soc_dai_set_sysclk </function></funcdef>
14771   <paramdef>struct snd_soc_dai * <parameter>dai</parameter></paramdef>
14772   <paramdef>int <parameter>clk_id</parameter></paramdef>
14773   <paramdef>unsigned int <parameter>freq</parameter></paramdef>
14774   <paramdef>int <parameter>dir</parameter></paramdef>
14775  </funcprototype></funcsynopsis>
14776</refsynopsisdiv>
14777<refsect1>
14778 <title>Arguments</title>
14779 <variablelist>
14780  <varlistentry>
14781   <term><parameter>dai</parameter></term>
14782   <listitem>
14783    <para>
14784     DAI
14785    </para>
14786   </listitem>
14787  </varlistentry>
14788  <varlistentry>
14789   <term><parameter>clk_id</parameter></term>
14790   <listitem>
14791    <para>
14792     DAI specific clock ID
14793    </para>
14794   </listitem>
14795  </varlistentry>
14796  <varlistentry>
14797   <term><parameter>freq</parameter></term>
14798   <listitem>
14799    <para>
14800     new clock frequency in Hz
14801    </para>
14802   </listitem>
14803  </varlistentry>
14804  <varlistentry>
14805   <term><parameter>dir</parameter></term>
14806   <listitem>
14807    <para>
14808     new clock direction - input/output.
14809    </para>
14810   </listitem>
14811  </varlistentry>
14812 </variablelist>
14813</refsect1>
14814<refsect1>
14815<title>Description</title>
14816<para>
14817   Configures the DAI master (MCLK) or system (SYSCLK) clocking.
14818</para>
14819</refsect1>
14820</refentry>
14821
14822<refentry id="API-snd-soc-codec-set-sysclk">
14823<refentryinfo>
14824 <title>LINUX</title>
14825 <productname>Kernel Hackers Manual</productname>
14826 <date>July 2017</date>
14827</refentryinfo>
14828<refmeta>
14829 <refentrytitle><phrase>snd_soc_codec_set_sysclk</phrase></refentrytitle>
14830 <manvolnum>9</manvolnum>
14831 <refmiscinfo class="version">4.4.14</refmiscinfo>
14832</refmeta>
14833<refnamediv>
14834 <refname>snd_soc_codec_set_sysclk</refname>
14835 <refpurpose>
14836     configure CODEC system or master clock.
14837 </refpurpose>
14838</refnamediv>
14839<refsynopsisdiv>
14840 <title>Synopsis</title>
14841  <funcsynopsis><funcprototype>
14842   <funcdef>int <function>snd_soc_codec_set_sysclk </function></funcdef>
14843   <paramdef>struct snd_soc_codec * <parameter>codec</parameter></paramdef>
14844   <paramdef>int <parameter>clk_id</parameter></paramdef>
14845   <paramdef>int <parameter>source</parameter></paramdef>
14846   <paramdef>unsigned int <parameter>freq</parameter></paramdef>
14847   <paramdef>int <parameter>dir</parameter></paramdef>
14848  </funcprototype></funcsynopsis>
14849</refsynopsisdiv>
14850<refsect1>
14851 <title>Arguments</title>
14852 <variablelist>
14853  <varlistentry>
14854   <term><parameter>codec</parameter></term>
14855   <listitem>
14856    <para>
14857     CODEC
14858    </para>
14859   </listitem>
14860  </varlistentry>
14861  <varlistentry>
14862   <term><parameter>clk_id</parameter></term>
14863   <listitem>
14864    <para>
14865     DAI specific clock ID
14866    </para>
14867   </listitem>
14868  </varlistentry>
14869  <varlistentry>
14870   <term><parameter>source</parameter></term>
14871   <listitem>
14872    <para>
14873     Source for the clock
14874    </para>
14875   </listitem>
14876  </varlistentry>
14877  <varlistentry>
14878   <term><parameter>freq</parameter></term>
14879   <listitem>
14880    <para>
14881     new clock frequency in Hz
14882    </para>
14883   </listitem>
14884  </varlistentry>
14885  <varlistentry>
14886   <term><parameter>dir</parameter></term>
14887   <listitem>
14888    <para>
14889     new clock direction - input/output.
14890    </para>
14891   </listitem>
14892  </varlistentry>
14893 </variablelist>
14894</refsect1>
14895<refsect1>
14896<title>Description</title>
14897<para>
14898   Configures the CODEC master (MCLK) or system (SYSCLK) clocking.
14899</para>
14900</refsect1>
14901</refentry>
14902
14903<refentry id="API-snd-soc-dai-set-clkdiv">
14904<refentryinfo>
14905 <title>LINUX</title>
14906 <productname>Kernel Hackers Manual</productname>
14907 <date>July 2017</date>
14908</refentryinfo>
14909<refmeta>
14910 <refentrytitle><phrase>snd_soc_dai_set_clkdiv</phrase></refentrytitle>
14911 <manvolnum>9</manvolnum>
14912 <refmiscinfo class="version">4.4.14</refmiscinfo>
14913</refmeta>
14914<refnamediv>
14915 <refname>snd_soc_dai_set_clkdiv</refname>
14916 <refpurpose>
14917     configure DAI clock dividers.
14918 </refpurpose>
14919</refnamediv>
14920<refsynopsisdiv>
14921 <title>Synopsis</title>
14922  <funcsynopsis><funcprototype>
14923   <funcdef>int <function>snd_soc_dai_set_clkdiv </function></funcdef>
14924   <paramdef>struct snd_soc_dai * <parameter>dai</parameter></paramdef>
14925   <paramdef>int <parameter>div_id</parameter></paramdef>
14926   <paramdef>int <parameter>div</parameter></paramdef>
14927  </funcprototype></funcsynopsis>
14928</refsynopsisdiv>
14929<refsect1>
14930 <title>Arguments</title>
14931 <variablelist>
14932  <varlistentry>
14933   <term><parameter>dai</parameter></term>
14934   <listitem>
14935    <para>
14936     DAI
14937    </para>
14938   </listitem>
14939  </varlistentry>
14940  <varlistentry>
14941   <term><parameter>div_id</parameter></term>
14942   <listitem>
14943    <para>
14944     DAI specific clock divider ID
14945    </para>
14946   </listitem>
14947  </varlistentry>
14948  <varlistentry>
14949   <term><parameter>div</parameter></term>
14950   <listitem>
14951    <para>
14952     new clock divisor.
14953    </para>
14954   </listitem>
14955  </varlistentry>
14956 </variablelist>
14957</refsect1>
14958<refsect1>
14959<title>Description</title>
14960<para>
14961   Configures the clock dividers. This is used to derive the best DAI bit and
14962   frame clocks from the system or master clock. It's best to set the DAI bit
14963   and frame clocks as low as possible to save system power.
14964</para>
14965</refsect1>
14966</refentry>
14967
14968<refentry id="API-snd-soc-dai-set-pll">
14969<refentryinfo>
14970 <title>LINUX</title>
14971 <productname>Kernel Hackers Manual</productname>
14972 <date>July 2017</date>
14973</refentryinfo>
14974<refmeta>
14975 <refentrytitle><phrase>snd_soc_dai_set_pll</phrase></refentrytitle>
14976 <manvolnum>9</manvolnum>
14977 <refmiscinfo class="version">4.4.14</refmiscinfo>
14978</refmeta>
14979<refnamediv>
14980 <refname>snd_soc_dai_set_pll</refname>
14981 <refpurpose>
14982     configure DAI PLL.
14983 </refpurpose>
14984</refnamediv>
14985<refsynopsisdiv>
14986 <title>Synopsis</title>
14987  <funcsynopsis><funcprototype>
14988   <funcdef>int <function>snd_soc_dai_set_pll </function></funcdef>
14989   <paramdef>struct snd_soc_dai * <parameter>dai</parameter></paramdef>
14990   <paramdef>int <parameter>pll_id</parameter></paramdef>
14991   <paramdef>int <parameter>source</parameter></paramdef>
14992   <paramdef>unsigned int <parameter>freq_in</parameter></paramdef>
14993   <paramdef>unsigned int <parameter>freq_out</parameter></paramdef>
14994  </funcprototype></funcsynopsis>
14995</refsynopsisdiv>
14996<refsect1>
14997 <title>Arguments</title>
14998 <variablelist>
14999  <varlistentry>
15000   <term><parameter>dai</parameter></term>
15001   <listitem>
15002    <para>
15003     DAI
15004    </para>
15005   </listitem>
15006  </varlistentry>
15007  <varlistentry>
15008   <term><parameter>pll_id</parameter></term>
15009   <listitem>
15010    <para>
15011     DAI specific PLL ID
15012    </para>
15013   </listitem>
15014  </varlistentry>
15015  <varlistentry>
15016   <term><parameter>source</parameter></term>
15017   <listitem>
15018    <para>
15019     DAI specific source for the PLL
15020    </para>
15021   </listitem>
15022  </varlistentry>
15023  <varlistentry>
15024   <term><parameter>freq_in</parameter></term>
15025   <listitem>
15026    <para>
15027     PLL input clock frequency in Hz
15028    </para>
15029   </listitem>
15030  </varlistentry>
15031  <varlistentry>
15032   <term><parameter>freq_out</parameter></term>
15033   <listitem>
15034    <para>
15035     requested PLL output clock frequency in Hz
15036    </para>
15037   </listitem>
15038  </varlistentry>
15039 </variablelist>
15040</refsect1>
15041<refsect1>
15042<title>Description</title>
15043<para>
15044   Configures and enables PLL to generate output clock based on input clock.
15045</para>
15046</refsect1>
15047</refentry>
15048
15049<refentry id="API-snd-soc-dai-set-bclk-ratio">
15050<refentryinfo>
15051 <title>LINUX</title>
15052 <productname>Kernel Hackers Manual</productname>
15053 <date>July 2017</date>
15054</refentryinfo>
15055<refmeta>
15056 <refentrytitle><phrase>snd_soc_dai_set_bclk_ratio</phrase></refentrytitle>
15057 <manvolnum>9</manvolnum>
15058 <refmiscinfo class="version">4.4.14</refmiscinfo>
15059</refmeta>
15060<refnamediv>
15061 <refname>snd_soc_dai_set_bclk_ratio</refname>
15062 <refpurpose>
15063     configure BCLK to sample rate ratio.
15064 </refpurpose>
15065</refnamediv>
15066<refsynopsisdiv>
15067 <title>Synopsis</title>
15068  <funcsynopsis><funcprototype>
15069   <funcdef>int <function>snd_soc_dai_set_bclk_ratio </function></funcdef>
15070   <paramdef>struct snd_soc_dai * <parameter>dai</parameter></paramdef>
15071   <paramdef>unsigned int <parameter>ratio</parameter></paramdef>
15072  </funcprototype></funcsynopsis>
15073</refsynopsisdiv>
15074<refsect1>
15075 <title>Arguments</title>
15076 <variablelist>
15077  <varlistentry>
15078   <term><parameter>dai</parameter></term>
15079   <listitem>
15080    <para>
15081     DAI
15082    </para>
15083   </listitem>
15084  </varlistentry>
15085  <varlistentry>
15086   <term><parameter>ratio</parameter></term>
15087   <listitem>
15088    <para>
15089     Ratio of BCLK to Sample rate.
15090    </para>
15091   </listitem>
15092  </varlistentry>
15093 </variablelist>
15094</refsect1>
15095<refsect1>
15096<title>Description</title>
15097<para>
15098   Configures the DAI for a preset BCLK to sample rate ratio.
15099</para>
15100</refsect1>
15101</refentry>
15102
15103<refentry id="API-snd-soc-dai-set-fmt">
15104<refentryinfo>
15105 <title>LINUX</title>
15106 <productname>Kernel Hackers Manual</productname>
15107 <date>July 2017</date>
15108</refentryinfo>
15109<refmeta>
15110 <refentrytitle><phrase>snd_soc_dai_set_fmt</phrase></refentrytitle>
15111 <manvolnum>9</manvolnum>
15112 <refmiscinfo class="version">4.4.14</refmiscinfo>
15113</refmeta>
15114<refnamediv>
15115 <refname>snd_soc_dai_set_fmt</refname>
15116 <refpurpose>
15117     configure DAI hardware audio format.
15118 </refpurpose>
15119</refnamediv>
15120<refsynopsisdiv>
15121 <title>Synopsis</title>
15122  <funcsynopsis><funcprototype>
15123   <funcdef>int <function>snd_soc_dai_set_fmt </function></funcdef>
15124   <paramdef>struct snd_soc_dai * <parameter>dai</parameter></paramdef>
15125   <paramdef>unsigned int <parameter>fmt</parameter></paramdef>
15126  </funcprototype></funcsynopsis>
15127</refsynopsisdiv>
15128<refsect1>
15129 <title>Arguments</title>
15130 <variablelist>
15131  <varlistentry>
15132   <term><parameter>dai</parameter></term>
15133   <listitem>
15134    <para>
15135     DAI
15136    </para>
15137   </listitem>
15138  </varlistentry>
15139  <varlistentry>
15140   <term><parameter>fmt</parameter></term>
15141   <listitem>
15142    <para>
15143     SND_SOC_DAIFMT_ format value.
15144    </para>
15145   </listitem>
15146  </varlistentry>
15147 </variablelist>
15148</refsect1>
15149<refsect1>
15150<title>Description</title>
15151<para>
15152   Configures the DAI hardware format and clocking.
15153</para>
15154</refsect1>
15155</refentry>
15156
15157<refentry id="API-snd-soc-dai-set-tdm-slot">
15158<refentryinfo>
15159 <title>LINUX</title>
15160 <productname>Kernel Hackers Manual</productname>
15161 <date>July 2017</date>
15162</refentryinfo>
15163<refmeta>
15164 <refentrytitle><phrase>snd_soc_dai_set_tdm_slot</phrase></refentrytitle>
15165 <manvolnum>9</manvolnum>
15166 <refmiscinfo class="version">4.4.14</refmiscinfo>
15167</refmeta>
15168<refnamediv>
15169 <refname>snd_soc_dai_set_tdm_slot</refname>
15170 <refpurpose>
15171     Configures a DAI for TDM operation
15172 </refpurpose>
15173</refnamediv>
15174<refsynopsisdiv>
15175 <title>Synopsis</title>
15176  <funcsynopsis><funcprototype>
15177   <funcdef>int <function>snd_soc_dai_set_tdm_slot </function></funcdef>
15178   <paramdef>struct snd_soc_dai * <parameter>dai</parameter></paramdef>
15179   <paramdef>unsigned int <parameter>tx_mask</parameter></paramdef>
15180   <paramdef>unsigned int <parameter>rx_mask</parameter></paramdef>
15181   <paramdef>int <parameter>slots</parameter></paramdef>
15182   <paramdef>int <parameter>slot_width</parameter></paramdef>
15183  </funcprototype></funcsynopsis>
15184</refsynopsisdiv>
15185<refsect1>
15186 <title>Arguments</title>
15187 <variablelist>
15188  <varlistentry>
15189   <term><parameter>dai</parameter></term>
15190   <listitem>
15191    <para>
15192     The DAI to configure
15193    </para>
15194   </listitem>
15195  </varlistentry>
15196  <varlistentry>
15197   <term><parameter>tx_mask</parameter></term>
15198   <listitem>
15199    <para>
15200     bitmask representing active TX slots.
15201    </para>
15202   </listitem>
15203  </varlistentry>
15204  <varlistentry>
15205   <term><parameter>rx_mask</parameter></term>
15206   <listitem>
15207    <para>
15208     bitmask representing active RX slots.
15209    </para>
15210   </listitem>
15211  </varlistentry>
15212  <varlistentry>
15213   <term><parameter>slots</parameter></term>
15214   <listitem>
15215    <para>
15216     Number of slots in use.
15217    </para>
15218   </listitem>
15219  </varlistentry>
15220  <varlistentry>
15221   <term><parameter>slot_width</parameter></term>
15222   <listitem>
15223    <para>
15224     Width in bits for each slot.
15225    </para>
15226   </listitem>
15227  </varlistentry>
15228 </variablelist>
15229</refsect1>
15230<refsect1>
15231<title>Description</title>
15232<para>
15233   This function configures the specified DAI for TDM operation. <parameter>slot</parameter> contains
15234   the total number of slots of the TDM stream and <parameter>slot_with</parameter> the width of each
15235   slot in bit clock cycles. <parameter>tx_mask</parameter> and <parameter>rx_mask</parameter> are bitmasks specifying the
15236   active slots of the TDM stream for the specified DAI, i.e. which slots the
15237   DAI should write to or read from. If a bit is set the corresponding slot is
15238   active, if a bit is cleared the corresponding slot is inactive. Bit 0 maps to
15239   the first slot, bit 1 to the second slot and so on. The first active slot
15240   maps to the first channel of the DAI, the second active slot to the second
15241   channel and so on.
15242   </para><para>
15243
15244   TDM mode can be disabled by passing 0 for <parameter>slots</parameter>. In this case <parameter>tx_mask</parameter>,
15245   <parameter>rx_mask</parameter> and <parameter>slot_width</parameter> will be ignored.
15246   </para><para>
15247
15248   Returns 0 on success, a negative error code otherwise.
15249</para>
15250</refsect1>
15251</refentry>
15252
15253<refentry id="API-snd-soc-dai-set-channel-map">
15254<refentryinfo>
15255 <title>LINUX</title>
15256 <productname>Kernel Hackers Manual</productname>
15257 <date>July 2017</date>
15258</refentryinfo>
15259<refmeta>
15260 <refentrytitle><phrase>snd_soc_dai_set_channel_map</phrase></refentrytitle>
15261 <manvolnum>9</manvolnum>
15262 <refmiscinfo class="version">4.4.14</refmiscinfo>
15263</refmeta>
15264<refnamediv>
15265 <refname>snd_soc_dai_set_channel_map</refname>
15266 <refpurpose>
15267     configure DAI audio channel map
15268 </refpurpose>
15269</refnamediv>
15270<refsynopsisdiv>
15271 <title>Synopsis</title>
15272  <funcsynopsis><funcprototype>
15273   <funcdef>int <function>snd_soc_dai_set_channel_map </function></funcdef>
15274   <paramdef>struct snd_soc_dai * <parameter>dai</parameter></paramdef>
15275   <paramdef>unsigned int <parameter>tx_num</parameter></paramdef>
15276   <paramdef>unsigned int * <parameter>tx_slot</parameter></paramdef>
15277   <paramdef>unsigned int <parameter>rx_num</parameter></paramdef>
15278   <paramdef>unsigned int * <parameter>rx_slot</parameter></paramdef>
15279  </funcprototype></funcsynopsis>
15280</refsynopsisdiv>
15281<refsect1>
15282 <title>Arguments</title>
15283 <variablelist>
15284  <varlistentry>
15285   <term><parameter>dai</parameter></term>
15286   <listitem>
15287    <para>
15288     DAI
15289    </para>
15290   </listitem>
15291  </varlistentry>
15292  <varlistentry>
15293   <term><parameter>tx_num</parameter></term>
15294   <listitem>
15295    <para>
15296     how many TX channels
15297    </para>
15298   </listitem>
15299  </varlistentry>
15300  <varlistentry>
15301   <term><parameter>tx_slot</parameter></term>
15302   <listitem>
15303    <para>
15304     pointer to an array which imply the TX slot number channel
15305     0~num-1 uses
15306    </para>
15307   </listitem>
15308  </varlistentry>
15309  <varlistentry>
15310   <term><parameter>rx_num</parameter></term>
15311   <listitem>
15312    <para>
15313     how many RX channels
15314    </para>
15315   </listitem>
15316  </varlistentry>
15317  <varlistentry>
15318   <term><parameter>rx_slot</parameter></term>
15319   <listitem>
15320    <para>
15321     pointer to an array which imply the RX slot number channel
15322     0~num-1 uses
15323    </para>
15324   </listitem>
15325  </varlistentry>
15326 </variablelist>
15327</refsect1>
15328<refsect1>
15329<title>Description</title>
15330<para>
15331   configure the relationship between channel number and TDM slot number.
15332</para>
15333</refsect1>
15334</refentry>
15335
15336<refentry id="API-snd-soc-dai-set-tristate">
15337<refentryinfo>
15338 <title>LINUX</title>
15339 <productname>Kernel Hackers Manual</productname>
15340 <date>July 2017</date>
15341</refentryinfo>
15342<refmeta>
15343 <refentrytitle><phrase>snd_soc_dai_set_tristate</phrase></refentrytitle>
15344 <manvolnum>9</manvolnum>
15345 <refmiscinfo class="version">4.4.14</refmiscinfo>
15346</refmeta>
15347<refnamediv>
15348 <refname>snd_soc_dai_set_tristate</refname>
15349 <refpurpose>
15350     configure DAI system or master clock.
15351 </refpurpose>
15352</refnamediv>
15353<refsynopsisdiv>
15354 <title>Synopsis</title>
15355  <funcsynopsis><funcprototype>
15356   <funcdef>int <function>snd_soc_dai_set_tristate </function></funcdef>
15357   <paramdef>struct snd_soc_dai * <parameter>dai</parameter></paramdef>
15358   <paramdef>int <parameter>tristate</parameter></paramdef>
15359  </funcprototype></funcsynopsis>
15360</refsynopsisdiv>
15361<refsect1>
15362 <title>Arguments</title>
15363 <variablelist>
15364  <varlistentry>
15365   <term><parameter>dai</parameter></term>
15366   <listitem>
15367    <para>
15368     DAI
15369    </para>
15370   </listitem>
15371  </varlistentry>
15372  <varlistentry>
15373   <term><parameter>tristate</parameter></term>
15374   <listitem>
15375    <para>
15376     tristate enable
15377    </para>
15378   </listitem>
15379  </varlistentry>
15380 </variablelist>
15381</refsect1>
15382<refsect1>
15383<title>Description</title>
15384<para>
15385   Tristates the DAI so that others can use it.
15386</para>
15387</refsect1>
15388</refentry>
15389
15390<refentry id="API-snd-soc-dai-digital-mute">
15391<refentryinfo>
15392 <title>LINUX</title>
15393 <productname>Kernel Hackers Manual</productname>
15394 <date>July 2017</date>
15395</refentryinfo>
15396<refmeta>
15397 <refentrytitle><phrase>snd_soc_dai_digital_mute</phrase></refentrytitle>
15398 <manvolnum>9</manvolnum>
15399 <refmiscinfo class="version">4.4.14</refmiscinfo>
15400</refmeta>
15401<refnamediv>
15402 <refname>snd_soc_dai_digital_mute</refname>
15403 <refpurpose>
15404     configure DAI system or master clock.
15405 </refpurpose>
15406</refnamediv>
15407<refsynopsisdiv>
15408 <title>Synopsis</title>
15409  <funcsynopsis><funcprototype>
15410   <funcdef>int <function>snd_soc_dai_digital_mute </function></funcdef>
15411   <paramdef>struct snd_soc_dai * <parameter>dai</parameter></paramdef>
15412   <paramdef>int <parameter>mute</parameter></paramdef>
15413   <paramdef>int <parameter>direction</parameter></paramdef>
15414  </funcprototype></funcsynopsis>
15415</refsynopsisdiv>
15416<refsect1>
15417 <title>Arguments</title>
15418 <variablelist>
15419  <varlistentry>
15420   <term><parameter>dai</parameter></term>
15421   <listitem>
15422    <para>
15423     DAI
15424    </para>
15425   </listitem>
15426  </varlistentry>
15427  <varlistentry>
15428   <term><parameter>mute</parameter></term>
15429   <listitem>
15430    <para>
15431     mute enable
15432    </para>
15433   </listitem>
15434  </varlistentry>
15435  <varlistentry>
15436   <term><parameter>direction</parameter></term>
15437   <listitem>
15438    <para>
15439     stream to mute
15440    </para>
15441   </listitem>
15442  </varlistentry>
15443 </variablelist>
15444</refsect1>
15445<refsect1>
15446<title>Description</title>
15447<para>
15448   Mutes the DAI DAC.
15449</para>
15450</refsect1>
15451</refentry>
15452
15453<refentry id="API-snd-soc-register-card">
15454<refentryinfo>
15455 <title>LINUX</title>
15456 <productname>Kernel Hackers Manual</productname>
15457 <date>July 2017</date>
15458</refentryinfo>
15459<refmeta>
15460 <refentrytitle><phrase>snd_soc_register_card</phrase></refentrytitle>
15461 <manvolnum>9</manvolnum>
15462 <refmiscinfo class="version">4.4.14</refmiscinfo>
15463</refmeta>
15464<refnamediv>
15465 <refname>snd_soc_register_card</refname>
15466 <refpurpose>
15467     Register a card with the ASoC core
15468 </refpurpose>
15469</refnamediv>
15470<refsynopsisdiv>
15471 <title>Synopsis</title>
15472  <funcsynopsis><funcprototype>
15473   <funcdef>int <function>snd_soc_register_card </function></funcdef>
15474   <paramdef>struct snd_soc_card * <parameter>card</parameter></paramdef>
15475  </funcprototype></funcsynopsis>
15476</refsynopsisdiv>
15477<refsect1>
15478 <title>Arguments</title>
15479 <variablelist>
15480  <varlistentry>
15481   <term><parameter>card</parameter></term>
15482   <listitem>
15483    <para>
15484     Card to register
15485    </para>
15486   </listitem>
15487  </varlistentry>
15488 </variablelist>
15489</refsect1>
15490</refentry>
15491
15492<refentry id="API-snd-soc-unregister-card">
15493<refentryinfo>
15494 <title>LINUX</title>
15495 <productname>Kernel Hackers Manual</productname>
15496 <date>July 2017</date>
15497</refentryinfo>
15498<refmeta>
15499 <refentrytitle><phrase>snd_soc_unregister_card</phrase></refentrytitle>
15500 <manvolnum>9</manvolnum>
15501 <refmiscinfo class="version">4.4.14</refmiscinfo>
15502</refmeta>
15503<refnamediv>
15504 <refname>snd_soc_unregister_card</refname>
15505 <refpurpose>
15506     Unregister a card with the ASoC core
15507 </refpurpose>
15508</refnamediv>
15509<refsynopsisdiv>
15510 <title>Synopsis</title>
15511  <funcsynopsis><funcprototype>
15512   <funcdef>int <function>snd_soc_unregister_card </function></funcdef>
15513   <paramdef>struct snd_soc_card * <parameter>card</parameter></paramdef>
15514  </funcprototype></funcsynopsis>
15515</refsynopsisdiv>
15516<refsect1>
15517 <title>Arguments</title>
15518 <variablelist>
15519  <varlistentry>
15520   <term><parameter>card</parameter></term>
15521   <listitem>
15522    <para>
15523     Card to unregister
15524    </para>
15525   </listitem>
15526  </varlistentry>
15527 </variablelist>
15528</refsect1>
15529</refentry>
15530
15531<refentry id="API-snd-soc-component-init-regmap">
15532<refentryinfo>
15533 <title>LINUX</title>
15534 <productname>Kernel Hackers Manual</productname>
15535 <date>July 2017</date>
15536</refentryinfo>
15537<refmeta>
15538 <refentrytitle><phrase>snd_soc_component_init_regmap</phrase></refentrytitle>
15539 <manvolnum>9</manvolnum>
15540 <refmiscinfo class="version">4.4.14</refmiscinfo>
15541</refmeta>
15542<refnamediv>
15543 <refname>snd_soc_component_init_regmap</refname>
15544 <refpurpose>
15545     Initialize regmap instance for the component
15546 </refpurpose>
15547</refnamediv>
15548<refsynopsisdiv>
15549 <title>Synopsis</title>
15550  <funcsynopsis><funcprototype>
15551   <funcdef>void <function>snd_soc_component_init_regmap </function></funcdef>
15552   <paramdef>struct snd_soc_component * <parameter>component</parameter></paramdef>
15553   <paramdef>struct regmap * <parameter>regmap</parameter></paramdef>
15554  </funcprototype></funcsynopsis>
15555</refsynopsisdiv>
15556<refsect1>
15557 <title>Arguments</title>
15558 <variablelist>
15559  <varlistentry>
15560   <term><parameter>component</parameter></term>
15561   <listitem>
15562    <para>
15563     The component for which to initialize the regmap instance
15564    </para>
15565   </listitem>
15566  </varlistentry>
15567  <varlistentry>
15568   <term><parameter>regmap</parameter></term>
15569   <listitem>
15570    <para>
15571     The regmap instance that should be used by the component
15572    </para>
15573   </listitem>
15574  </varlistentry>
15575 </variablelist>
15576</refsect1>
15577<refsect1>
15578<title>Description</title>
15579<para>
15580   This function allows deferred assignment of the regmap instance that is
15581   associated with the component. Only use this if the regmap instance is not
15582   yet ready when the component is registered. The function must also be called
15583   before the first IO attempt of the component.
15584</para>
15585</refsect1>
15586</refentry>
15587
15588<refentry id="API-snd-soc-component-exit-regmap">
15589<refentryinfo>
15590 <title>LINUX</title>
15591 <productname>Kernel Hackers Manual</productname>
15592 <date>July 2017</date>
15593</refentryinfo>
15594<refmeta>
15595 <refentrytitle><phrase>snd_soc_component_exit_regmap</phrase></refentrytitle>
15596 <manvolnum>9</manvolnum>
15597 <refmiscinfo class="version">4.4.14</refmiscinfo>
15598</refmeta>
15599<refnamediv>
15600 <refname>snd_soc_component_exit_regmap</refname>
15601 <refpurpose>
15602     De-initialize regmap instance for the component
15603 </refpurpose>
15604</refnamediv>
15605<refsynopsisdiv>
15606 <title>Synopsis</title>
15607  <funcsynopsis><funcprototype>
15608   <funcdef>void <function>snd_soc_component_exit_regmap </function></funcdef>
15609   <paramdef>struct snd_soc_component * <parameter>component</parameter></paramdef>
15610  </funcprototype></funcsynopsis>
15611</refsynopsisdiv>
15612<refsect1>
15613 <title>Arguments</title>
15614 <variablelist>
15615  <varlistentry>
15616   <term><parameter>component</parameter></term>
15617   <listitem>
15618    <para>
15619     The component for which to de-initialize the regmap instance
15620    </para>
15621   </listitem>
15622  </varlistentry>
15623 </variablelist>
15624</refsect1>
15625<refsect1>
15626<title>Description</title>
15627<para>
15628   Calls <function>regmap_exit</function> on the regmap instance associated to the component and
15629   removes the regmap instance from the component.
15630   </para><para>
15631
15632   This function should only be used if <function>snd_soc_component_init_regmap</function> was used
15633   to initialize the regmap instance.
15634</para>
15635</refsect1>
15636</refentry>
15637
15638<refentry id="API-snd-soc-unregister-component">
15639<refentryinfo>
15640 <title>LINUX</title>
15641 <productname>Kernel Hackers Manual</productname>
15642 <date>July 2017</date>
15643</refentryinfo>
15644<refmeta>
15645 <refentrytitle><phrase>snd_soc_unregister_component</phrase></refentrytitle>
15646 <manvolnum>9</manvolnum>
15647 <refmiscinfo class="version">4.4.14</refmiscinfo>
15648</refmeta>
15649<refnamediv>
15650 <refname>snd_soc_unregister_component</refname>
15651 <refpurpose>
15652     Unregister a component from the ASoC core
15653 </refpurpose>
15654</refnamediv>
15655<refsynopsisdiv>
15656 <title>Synopsis</title>
15657  <funcsynopsis><funcprototype>
15658   <funcdef>void <function>snd_soc_unregister_component </function></funcdef>
15659   <paramdef>struct device * <parameter>dev</parameter></paramdef>
15660  </funcprototype></funcsynopsis>
15661</refsynopsisdiv>
15662<refsect1>
15663 <title>Arguments</title>
15664 <variablelist>
15665  <varlistentry>
15666   <term><parameter>dev</parameter></term>
15667   <listitem>
15668    <para>
15669     The device to unregister
15670    </para>
15671   </listitem>
15672  </varlistentry>
15673 </variablelist>
15674</refsect1>
15675</refentry>
15676
15677<refentry id="API-snd-soc-add-platform">
15678<refentryinfo>
15679 <title>LINUX</title>
15680 <productname>Kernel Hackers Manual</productname>
15681 <date>July 2017</date>
15682</refentryinfo>
15683<refmeta>
15684 <refentrytitle><phrase>snd_soc_add_platform</phrase></refentrytitle>
15685 <manvolnum>9</manvolnum>
15686 <refmiscinfo class="version">4.4.14</refmiscinfo>
15687</refmeta>
15688<refnamediv>
15689 <refname>snd_soc_add_platform</refname>
15690 <refpurpose>
15691     Add a platform to the ASoC core
15692 </refpurpose>
15693</refnamediv>
15694<refsynopsisdiv>
15695 <title>Synopsis</title>
15696  <funcsynopsis><funcprototype>
15697   <funcdef>int <function>snd_soc_add_platform </function></funcdef>
15698   <paramdef>struct device * <parameter>dev</parameter></paramdef>
15699   <paramdef>struct snd_soc_platform * <parameter>platform</parameter></paramdef>
15700   <paramdef>const struct snd_soc_platform_driver * <parameter>platform_drv</parameter></paramdef>
15701  </funcprototype></funcsynopsis>
15702</refsynopsisdiv>
15703<refsect1>
15704 <title>Arguments</title>
15705 <variablelist>
15706  <varlistentry>
15707   <term><parameter>dev</parameter></term>
15708   <listitem>
15709    <para>
15710     The parent device for the platform
15711    </para>
15712   </listitem>
15713  </varlistentry>
15714  <varlistentry>
15715   <term><parameter>platform</parameter></term>
15716   <listitem>
15717    <para>
15718     The platform to add
15719    </para>
15720   </listitem>
15721  </varlistentry>
15722  <varlistentry>
15723   <term><parameter>platform_drv</parameter></term>
15724   <listitem>
15725    <para>
15726     The driver for the platform
15727    </para>
15728   </listitem>
15729  </varlistentry>
15730 </variablelist>
15731</refsect1>
15732</refentry>
15733
15734<refentry id="API-snd-soc-register-platform">
15735<refentryinfo>
15736 <title>LINUX</title>
15737 <productname>Kernel Hackers Manual</productname>
15738 <date>July 2017</date>
15739</refentryinfo>
15740<refmeta>
15741 <refentrytitle><phrase>snd_soc_register_platform</phrase></refentrytitle>
15742 <manvolnum>9</manvolnum>
15743 <refmiscinfo class="version">4.4.14</refmiscinfo>
15744</refmeta>
15745<refnamediv>
15746 <refname>snd_soc_register_platform</refname>
15747 <refpurpose>
15748     Register a platform with the ASoC core
15749 </refpurpose>
15750</refnamediv>
15751<refsynopsisdiv>
15752 <title>Synopsis</title>
15753  <funcsynopsis><funcprototype>
15754   <funcdef>int <function>snd_soc_register_platform </function></funcdef>
15755   <paramdef>struct device * <parameter>dev</parameter></paramdef>
15756   <paramdef>const struct snd_soc_platform_driver * <parameter>platform_drv</parameter></paramdef>
15757  </funcprototype></funcsynopsis>
15758</refsynopsisdiv>
15759<refsect1>
15760 <title>Arguments</title>
15761 <variablelist>
15762  <varlistentry>
15763   <term><parameter>dev</parameter></term>
15764   <listitem>
15765    <para>
15766     The device for the platform
15767    </para>
15768   </listitem>
15769  </varlistentry>
15770  <varlistentry>
15771   <term><parameter>platform_drv</parameter></term>
15772   <listitem>
15773    <para>
15774     The driver for the platform
15775    </para>
15776   </listitem>
15777  </varlistentry>
15778 </variablelist>
15779</refsect1>
15780</refentry>
15781
15782<refentry id="API-snd-soc-remove-platform">
15783<refentryinfo>
15784 <title>LINUX</title>
15785 <productname>Kernel Hackers Manual</productname>
15786 <date>July 2017</date>
15787</refentryinfo>
15788<refmeta>
15789 <refentrytitle><phrase>snd_soc_remove_platform</phrase></refentrytitle>
15790 <manvolnum>9</manvolnum>
15791 <refmiscinfo class="version">4.4.14</refmiscinfo>
15792</refmeta>
15793<refnamediv>
15794 <refname>snd_soc_remove_platform</refname>
15795 <refpurpose>
15796     Remove a platform from the ASoC core
15797 </refpurpose>
15798</refnamediv>
15799<refsynopsisdiv>
15800 <title>Synopsis</title>
15801  <funcsynopsis><funcprototype>
15802   <funcdef>void <function>snd_soc_remove_platform </function></funcdef>
15803   <paramdef>struct snd_soc_platform * <parameter>platform</parameter></paramdef>
15804  </funcprototype></funcsynopsis>
15805</refsynopsisdiv>
15806<refsect1>
15807 <title>Arguments</title>
15808 <variablelist>
15809  <varlistentry>
15810   <term><parameter>platform</parameter></term>
15811   <listitem>
15812    <para>
15813     the platform to remove
15814    </para>
15815   </listitem>
15816  </varlistentry>
15817 </variablelist>
15818</refsect1>
15819</refentry>
15820
15821<refentry id="API-snd-soc-unregister-platform">
15822<refentryinfo>
15823 <title>LINUX</title>
15824 <productname>Kernel Hackers Manual</productname>
15825 <date>July 2017</date>
15826</refentryinfo>
15827<refmeta>
15828 <refentrytitle><phrase>snd_soc_unregister_platform</phrase></refentrytitle>
15829 <manvolnum>9</manvolnum>
15830 <refmiscinfo class="version">4.4.14</refmiscinfo>
15831</refmeta>
15832<refnamediv>
15833 <refname>snd_soc_unregister_platform</refname>
15834 <refpurpose>
15835     Unregister a platform from the ASoC core
15836 </refpurpose>
15837</refnamediv>
15838<refsynopsisdiv>
15839 <title>Synopsis</title>
15840  <funcsynopsis><funcprototype>
15841   <funcdef>void <function>snd_soc_unregister_platform </function></funcdef>
15842   <paramdef>struct device * <parameter>dev</parameter></paramdef>
15843  </funcprototype></funcsynopsis>
15844</refsynopsisdiv>
15845<refsect1>
15846 <title>Arguments</title>
15847 <variablelist>
15848  <varlistentry>
15849   <term><parameter>dev</parameter></term>
15850   <listitem>
15851    <para>
15852     platform to unregister
15853    </para>
15854   </listitem>
15855  </varlistentry>
15856 </variablelist>
15857</refsect1>
15858</refentry>
15859
15860<refentry id="API-snd-soc-register-codec">
15861<refentryinfo>
15862 <title>LINUX</title>
15863 <productname>Kernel Hackers Manual</productname>
15864 <date>July 2017</date>
15865</refentryinfo>
15866<refmeta>
15867 <refentrytitle><phrase>snd_soc_register_codec</phrase></refentrytitle>
15868 <manvolnum>9</manvolnum>
15869 <refmiscinfo class="version">4.4.14</refmiscinfo>
15870</refmeta>
15871<refnamediv>
15872 <refname>snd_soc_register_codec</refname>
15873 <refpurpose>
15874     Register a codec with the ASoC core
15875 </refpurpose>
15876</refnamediv>
15877<refsynopsisdiv>
15878 <title>Synopsis</title>
15879  <funcsynopsis><funcprototype>
15880   <funcdef>int <function>snd_soc_register_codec </function></funcdef>
15881   <paramdef>struct device * <parameter>dev</parameter></paramdef>
15882   <paramdef>const struct snd_soc_codec_driver * <parameter>codec_drv</parameter></paramdef>
15883   <paramdef>struct snd_soc_dai_driver * <parameter>dai_drv</parameter></paramdef>
15884   <paramdef>int <parameter>num_dai</parameter></paramdef>
15885  </funcprototype></funcsynopsis>
15886</refsynopsisdiv>
15887<refsect1>
15888 <title>Arguments</title>
15889 <variablelist>
15890  <varlistentry>
15891   <term><parameter>dev</parameter></term>
15892   <listitem>
15893    <para>
15894     The parent device for this codec
15895    </para>
15896   </listitem>
15897  </varlistentry>
15898  <varlistentry>
15899   <term><parameter>codec_drv</parameter></term>
15900   <listitem>
15901    <para>
15902     Codec driver
15903    </para>
15904   </listitem>
15905  </varlistentry>
15906  <varlistentry>
15907   <term><parameter>dai_drv</parameter></term>
15908   <listitem>
15909    <para>
15910     The associated DAI driver
15911    </para>
15912   </listitem>
15913  </varlistentry>
15914  <varlistentry>
15915   <term><parameter>num_dai</parameter></term>
15916   <listitem>
15917    <para>
15918     Number of DAIs
15919    </para>
15920   </listitem>
15921  </varlistentry>
15922 </variablelist>
15923</refsect1>
15924</refentry>
15925
15926<refentry id="API-snd-soc-unregister-codec">
15927<refentryinfo>
15928 <title>LINUX</title>
15929 <productname>Kernel Hackers Manual</productname>
15930 <date>July 2017</date>
15931</refentryinfo>
15932<refmeta>
15933 <refentrytitle><phrase>snd_soc_unregister_codec</phrase></refentrytitle>
15934 <manvolnum>9</manvolnum>
15935 <refmiscinfo class="version">4.4.14</refmiscinfo>
15936</refmeta>
15937<refnamediv>
15938 <refname>snd_soc_unregister_codec</refname>
15939 <refpurpose>
15940     Unregister a codec from the ASoC core
15941 </refpurpose>
15942</refnamediv>
15943<refsynopsisdiv>
15944 <title>Synopsis</title>
15945  <funcsynopsis><funcprototype>
15946   <funcdef>void <function>snd_soc_unregister_codec </function></funcdef>
15947   <paramdef>struct device * <parameter>dev</parameter></paramdef>
15948  </funcprototype></funcsynopsis>
15949</refsynopsisdiv>
15950<refsect1>
15951 <title>Arguments</title>
15952 <variablelist>
15953  <varlistentry>
15954   <term><parameter>dev</parameter></term>
15955   <listitem>
15956    <para>
15957     codec to unregister
15958    </para>
15959   </listitem>
15960  </varlistentry>
15961 </variablelist>
15962</refsect1>
15963</refentry>
15964
15965<!-- !Esound/soc/soc-cache.c no docbook comments here -->
15966<!-- sound/soc/soc-devres.c -->
15967<refentry id="API-devm-snd-soc-register-component">
15968<refentryinfo>
15969 <title>LINUX</title>
15970 <productname>Kernel Hackers Manual</productname>
15971 <date>July 2017</date>
15972</refentryinfo>
15973<refmeta>
15974 <refentrytitle><phrase>devm_snd_soc_register_component</phrase></refentrytitle>
15975 <manvolnum>9</manvolnum>
15976 <refmiscinfo class="version">4.4.14</refmiscinfo>
15977</refmeta>
15978<refnamediv>
15979 <refname>devm_snd_soc_register_component</refname>
15980 <refpurpose>
15981  resource managed component registration
15982 </refpurpose>
15983</refnamediv>
15984<refsynopsisdiv>
15985 <title>Synopsis</title>
15986  <funcsynopsis><funcprototype>
15987   <funcdef>int <function>devm_snd_soc_register_component </function></funcdef>
15988   <paramdef>struct device * <parameter>dev</parameter></paramdef>
15989   <paramdef>const struct snd_soc_component_driver * <parameter>cmpnt_drv</parameter></paramdef>
15990   <paramdef>struct snd_soc_dai_driver * <parameter>dai_drv</parameter></paramdef>
15991   <paramdef>int <parameter>num_dai</parameter></paramdef>
15992  </funcprototype></funcsynopsis>
15993</refsynopsisdiv>
15994<refsect1>
15995 <title>Arguments</title>
15996 <variablelist>
15997  <varlistentry>
15998   <term><parameter>dev</parameter></term>
15999   <listitem>
16000    <para>
16001     Device used to manage component
16002    </para>
16003   </listitem>
16004  </varlistentry>
16005  <varlistentry>
16006   <term><parameter>cmpnt_drv</parameter></term>
16007   <listitem>
16008    <para>
16009     Component driver
16010    </para>
16011   </listitem>
16012  </varlistentry>
16013  <varlistentry>
16014   <term><parameter>dai_drv</parameter></term>
16015   <listitem>
16016    <para>
16017     DAI driver
16018    </para>
16019   </listitem>
16020  </varlistentry>
16021  <varlistentry>
16022   <term><parameter>num_dai</parameter></term>
16023   <listitem>
16024    <para>
16025     Number of DAIs to register
16026    </para>
16027   </listitem>
16028  </varlistentry>
16029 </variablelist>
16030</refsect1>
16031<refsect1>
16032<title>Description</title>
16033<para>
16034   Register a component with automatic unregistration when the device is
16035   unregistered.
16036</para>
16037</refsect1>
16038</refentry>
16039
16040<refentry id="API-devm-snd-soc-register-platform">
16041<refentryinfo>
16042 <title>LINUX</title>
16043 <productname>Kernel Hackers Manual</productname>
16044 <date>July 2017</date>
16045</refentryinfo>
16046<refmeta>
16047 <refentrytitle><phrase>devm_snd_soc_register_platform</phrase></refentrytitle>
16048 <manvolnum>9</manvolnum>
16049 <refmiscinfo class="version">4.4.14</refmiscinfo>
16050</refmeta>
16051<refnamediv>
16052 <refname>devm_snd_soc_register_platform</refname>
16053 <refpurpose>
16054     resource managed platform registration
16055 </refpurpose>
16056</refnamediv>
16057<refsynopsisdiv>
16058 <title>Synopsis</title>
16059  <funcsynopsis><funcprototype>
16060   <funcdef>int <function>devm_snd_soc_register_platform </function></funcdef>
16061   <paramdef>struct device * <parameter>dev</parameter></paramdef>
16062   <paramdef>const struct snd_soc_platform_driver * <parameter>platform_drv</parameter></paramdef>
16063  </funcprototype></funcsynopsis>
16064</refsynopsisdiv>
16065<refsect1>
16066 <title>Arguments</title>
16067 <variablelist>
16068  <varlistentry>
16069   <term><parameter>dev</parameter></term>
16070   <listitem>
16071    <para>
16072     Device used to manage platform
16073    </para>
16074   </listitem>
16075  </varlistentry>
16076  <varlistentry>
16077   <term><parameter>platform_drv</parameter></term>
16078   <listitem>
16079    <para>
16080     platform to register
16081    </para>
16082   </listitem>
16083  </varlistentry>
16084 </variablelist>
16085</refsect1>
16086<refsect1>
16087<title>Description</title>
16088<para>
16089   Register a platform driver with automatic unregistration when the device is
16090   unregistered.
16091</para>
16092</refsect1>
16093</refentry>
16094
16095<refentry id="API-devm-snd-soc-register-card">
16096<refentryinfo>
16097 <title>LINUX</title>
16098 <productname>Kernel Hackers Manual</productname>
16099 <date>July 2017</date>
16100</refentryinfo>
16101<refmeta>
16102 <refentrytitle><phrase>devm_snd_soc_register_card</phrase></refentrytitle>
16103 <manvolnum>9</manvolnum>
16104 <refmiscinfo class="version">4.4.14</refmiscinfo>
16105</refmeta>
16106<refnamediv>
16107 <refname>devm_snd_soc_register_card</refname>
16108 <refpurpose>
16109     resource managed card registration
16110 </refpurpose>
16111</refnamediv>
16112<refsynopsisdiv>
16113 <title>Synopsis</title>
16114  <funcsynopsis><funcprototype>
16115   <funcdef>int <function>devm_snd_soc_register_card </function></funcdef>
16116   <paramdef>struct device * <parameter>dev</parameter></paramdef>
16117   <paramdef>struct snd_soc_card * <parameter>card</parameter></paramdef>
16118  </funcprototype></funcsynopsis>
16119</refsynopsisdiv>
16120<refsect1>
16121 <title>Arguments</title>
16122 <variablelist>
16123  <varlistentry>
16124   <term><parameter>dev</parameter></term>
16125   <listitem>
16126    <para>
16127     Device used to manage card
16128    </para>
16129   </listitem>
16130  </varlistentry>
16131  <varlistentry>
16132   <term><parameter>card</parameter></term>
16133   <listitem>
16134    <para>
16135     Card to register
16136    </para>
16137   </listitem>
16138  </varlistentry>
16139 </variablelist>
16140</refsect1>
16141<refsect1>
16142<title>Description</title>
16143<para>
16144   Register a card with automatic unregistration when the device is
16145   unregistered.
16146</para>
16147</refsect1>
16148</refentry>
16149
16150<refentry id="API-devm-snd-dmaengine-pcm-register">
16151<refentryinfo>
16152 <title>LINUX</title>
16153 <productname>Kernel Hackers Manual</productname>
16154 <date>July 2017</date>
16155</refentryinfo>
16156<refmeta>
16157 <refentrytitle><phrase>devm_snd_dmaengine_pcm_register</phrase></refentrytitle>
16158 <manvolnum>9</manvolnum>
16159 <refmiscinfo class="version">4.4.14</refmiscinfo>
16160</refmeta>
16161<refnamediv>
16162 <refname>devm_snd_dmaengine_pcm_register</refname>
16163 <refpurpose>
16164     resource managed dmaengine PCM registration
16165 </refpurpose>
16166</refnamediv>
16167<refsynopsisdiv>
16168 <title>Synopsis</title>
16169  <funcsynopsis><funcprototype>
16170   <funcdef>int <function>devm_snd_dmaengine_pcm_register </function></funcdef>
16171   <paramdef>struct device * <parameter>dev</parameter></paramdef>
16172   <paramdef>const struct snd_dmaengine_pcm_config * <parameter>config</parameter></paramdef>
16173   <paramdef>unsigned int <parameter>flags</parameter></paramdef>
16174  </funcprototype></funcsynopsis>
16175</refsynopsisdiv>
16176<refsect1>
16177 <title>Arguments</title>
16178 <variablelist>
16179  <varlistentry>
16180   <term><parameter>dev</parameter></term>
16181   <listitem>
16182    <para>
16183     The parent device for the PCM device
16184    </para>
16185   </listitem>
16186  </varlistentry>
16187  <varlistentry>
16188   <term><parameter>config</parameter></term>
16189   <listitem>
16190    <para>
16191     Platform specific PCM configuration
16192    </para>
16193   </listitem>
16194  </varlistentry>
16195  <varlistentry>
16196   <term><parameter>flags</parameter></term>
16197   <listitem>
16198    <para>
16199     Platform specific quirks
16200    </para>
16201   </listitem>
16202  </varlistentry>
16203 </variablelist>
16204</refsect1>
16205<refsect1>
16206<title>Description</title>
16207<para>
16208   Register a dmaengine based PCM device with automatic unregistration when the
16209   device is unregistered.
16210</para>
16211</refsect1>
16212</refentry>
16213
16214<!-- sound/soc/soc-io.c -->
16215<refentry id="API-snd-soc-component-read">
16216<refentryinfo>
16217 <title>LINUX</title>
16218 <productname>Kernel Hackers Manual</productname>
16219 <date>July 2017</date>
16220</refentryinfo>
16221<refmeta>
16222 <refentrytitle><phrase>snd_soc_component_read</phrase></refentrytitle>
16223 <manvolnum>9</manvolnum>
16224 <refmiscinfo class="version">4.4.14</refmiscinfo>
16225</refmeta>
16226<refnamediv>
16227 <refname>snd_soc_component_read</refname>
16228 <refpurpose>
16229  Read register value
16230 </refpurpose>
16231</refnamediv>
16232<refsynopsisdiv>
16233 <title>Synopsis</title>
16234  <funcsynopsis><funcprototype>
16235   <funcdef>int <function>snd_soc_component_read </function></funcdef>
16236   <paramdef>struct snd_soc_component * <parameter>component</parameter></paramdef>
16237   <paramdef>unsigned int <parameter>reg</parameter></paramdef>
16238   <paramdef>unsigned int * <parameter>val</parameter></paramdef>
16239  </funcprototype></funcsynopsis>
16240</refsynopsisdiv>
16241<refsect1>
16242 <title>Arguments</title>
16243 <variablelist>
16244  <varlistentry>
16245   <term><parameter>component</parameter></term>
16246   <listitem>
16247    <para>
16248     Component to read from
16249    </para>
16250   </listitem>
16251  </varlistentry>
16252  <varlistentry>
16253   <term><parameter>reg</parameter></term>
16254   <listitem>
16255    <para>
16256     Register to read
16257    </para>
16258   </listitem>
16259  </varlistentry>
16260  <varlistentry>
16261   <term><parameter>val</parameter></term>
16262   <listitem>
16263    <para>
16264     Pointer to where the read value is stored
16265    </para>
16266   </listitem>
16267  </varlistentry>
16268 </variablelist>
16269</refsect1>
16270<refsect1>
16271<title>Return</title>
16272<para>
16273   0 on success, a negative error code otherwise.
16274</para>
16275</refsect1>
16276</refentry>
16277
16278<refentry id="API-snd-soc-component-write">
16279<refentryinfo>
16280 <title>LINUX</title>
16281 <productname>Kernel Hackers Manual</productname>
16282 <date>July 2017</date>
16283</refentryinfo>
16284<refmeta>
16285 <refentrytitle><phrase>snd_soc_component_write</phrase></refentrytitle>
16286 <manvolnum>9</manvolnum>
16287 <refmiscinfo class="version">4.4.14</refmiscinfo>
16288</refmeta>
16289<refnamediv>
16290 <refname>snd_soc_component_write</refname>
16291 <refpurpose>
16292     Write register value
16293 </refpurpose>
16294</refnamediv>
16295<refsynopsisdiv>
16296 <title>Synopsis</title>
16297  <funcsynopsis><funcprototype>
16298   <funcdef>int <function>snd_soc_component_write </function></funcdef>
16299   <paramdef>struct snd_soc_component * <parameter>component</parameter></paramdef>
16300   <paramdef>unsigned int <parameter>reg</parameter></paramdef>
16301   <paramdef>unsigned int <parameter>val</parameter></paramdef>
16302  </funcprototype></funcsynopsis>
16303</refsynopsisdiv>
16304<refsect1>
16305 <title>Arguments</title>
16306 <variablelist>
16307  <varlistentry>
16308   <term><parameter>component</parameter></term>
16309   <listitem>
16310    <para>
16311     Component to write to
16312    </para>
16313   </listitem>
16314  </varlistentry>
16315  <varlistentry>
16316   <term><parameter>reg</parameter></term>
16317   <listitem>
16318    <para>
16319     Register to write
16320    </para>
16321   </listitem>
16322  </varlistentry>
16323  <varlistentry>
16324   <term><parameter>val</parameter></term>
16325   <listitem>
16326    <para>
16327     Value to write to the register
16328    </para>
16329   </listitem>
16330  </varlistentry>
16331 </variablelist>
16332</refsect1>
16333<refsect1>
16334<title>Return</title>
16335<para>
16336   0 on success, a negative error code otherwise.
16337</para>
16338</refsect1>
16339</refentry>
16340
16341<refentry id="API-snd-soc-component-update-bits">
16342<refentryinfo>
16343 <title>LINUX</title>
16344 <productname>Kernel Hackers Manual</productname>
16345 <date>July 2017</date>
16346</refentryinfo>
16347<refmeta>
16348 <refentrytitle><phrase>snd_soc_component_update_bits</phrase></refentrytitle>
16349 <manvolnum>9</manvolnum>
16350 <refmiscinfo class="version">4.4.14</refmiscinfo>
16351</refmeta>
16352<refnamediv>
16353 <refname>snd_soc_component_update_bits</refname>
16354 <refpurpose>
16355     Perform read/modify/write cycle
16356 </refpurpose>
16357</refnamediv>
16358<refsynopsisdiv>
16359 <title>Synopsis</title>
16360  <funcsynopsis><funcprototype>
16361   <funcdef>int <function>snd_soc_component_update_bits </function></funcdef>
16362   <paramdef>struct snd_soc_component * <parameter>component</parameter></paramdef>
16363   <paramdef>unsigned int <parameter>reg</parameter></paramdef>
16364   <paramdef>unsigned int <parameter>mask</parameter></paramdef>
16365   <paramdef>unsigned int <parameter>val</parameter></paramdef>
16366  </funcprototype></funcsynopsis>
16367</refsynopsisdiv>
16368<refsect1>
16369 <title>Arguments</title>
16370 <variablelist>
16371  <varlistentry>
16372   <term><parameter>component</parameter></term>
16373   <listitem>
16374    <para>
16375     Component to update
16376    </para>
16377   </listitem>
16378  </varlistentry>
16379  <varlistentry>
16380   <term><parameter>reg</parameter></term>
16381   <listitem>
16382    <para>
16383     Register to update
16384    </para>
16385   </listitem>
16386  </varlistentry>
16387  <varlistentry>
16388   <term><parameter>mask</parameter></term>
16389   <listitem>
16390    <para>
16391     Mask that specifies which bits to update
16392    </para>
16393   </listitem>
16394  </varlistentry>
16395  <varlistentry>
16396   <term><parameter>val</parameter></term>
16397   <listitem>
16398    <para>
16399     New value for the bits specified by mask
16400    </para>
16401   </listitem>
16402  </varlistentry>
16403 </variablelist>
16404</refsect1>
16405<refsect1>
16406<title>Return</title>
16407<para>
16408   1 if the operation was successful and the value of the register
16409   changed, 0 if the operation was successful, but the value did not change.
16410   Returns a negative error code otherwise.
16411</para>
16412</refsect1>
16413</refentry>
16414
16415<refentry id="API-snd-soc-component-update-bits-async">
16416<refentryinfo>
16417 <title>LINUX</title>
16418 <productname>Kernel Hackers Manual</productname>
16419 <date>July 2017</date>
16420</refentryinfo>
16421<refmeta>
16422 <refentrytitle><phrase>snd_soc_component_update_bits_async</phrase></refentrytitle>
16423 <manvolnum>9</manvolnum>
16424 <refmiscinfo class="version">4.4.14</refmiscinfo>
16425</refmeta>
16426<refnamediv>
16427 <refname>snd_soc_component_update_bits_async</refname>
16428 <refpurpose>
16429     Perform asynchronous read/modify/write cycle
16430 </refpurpose>
16431</refnamediv>
16432<refsynopsisdiv>
16433 <title>Synopsis</title>
16434  <funcsynopsis><funcprototype>
16435   <funcdef>int <function>snd_soc_component_update_bits_async </function></funcdef>
16436   <paramdef>struct snd_soc_component * <parameter>component</parameter></paramdef>
16437   <paramdef>unsigned int <parameter>reg</parameter></paramdef>
16438   <paramdef>unsigned int <parameter>mask</parameter></paramdef>
16439   <paramdef>unsigned int <parameter>val</parameter></paramdef>
16440  </funcprototype></funcsynopsis>
16441</refsynopsisdiv>
16442<refsect1>
16443 <title>Arguments</title>
16444 <variablelist>
16445  <varlistentry>
16446   <term><parameter>component</parameter></term>
16447   <listitem>
16448    <para>
16449     Component to update
16450    </para>
16451   </listitem>
16452  </varlistentry>
16453  <varlistentry>
16454   <term><parameter>reg</parameter></term>
16455   <listitem>
16456    <para>
16457     Register to update
16458    </para>
16459   </listitem>
16460  </varlistentry>
16461  <varlistentry>
16462   <term><parameter>mask</parameter></term>
16463   <listitem>
16464    <para>
16465     Mask that specifies which bits to update
16466    </para>
16467   </listitem>
16468  </varlistentry>
16469  <varlistentry>
16470   <term><parameter>val</parameter></term>
16471   <listitem>
16472    <para>
16473     New value for the bits specified by mask
16474    </para>
16475   </listitem>
16476  </varlistentry>
16477 </variablelist>
16478</refsect1>
16479<refsect1>
16480<title>Description</title>
16481<para>
16482   This function is similar to <function>snd_soc_component_update_bits</function>, but the update
16483   operation is scheduled asynchronously. This means it may not be completed
16484   when the function returns. To make sure that all scheduled updates have been
16485   completed <function>snd_soc_component_async_complete</function> must be called.
16486</para>
16487</refsect1>
16488<refsect1>
16489<title>Return</title>
16490<para>
16491   1 if the operation was successful and the value of the register
16492   changed, 0 if the operation was successful, but the value did not change.
16493   Returns a negative error code otherwise.
16494</para>
16495</refsect1>
16496</refentry>
16497
16498<refentry id="API-snd-soc-component-async-complete">
16499<refentryinfo>
16500 <title>LINUX</title>
16501 <productname>Kernel Hackers Manual</productname>
16502 <date>July 2017</date>
16503</refentryinfo>
16504<refmeta>
16505 <refentrytitle><phrase>snd_soc_component_async_complete</phrase></refentrytitle>
16506 <manvolnum>9</manvolnum>
16507 <refmiscinfo class="version">4.4.14</refmiscinfo>
16508</refmeta>
16509<refnamediv>
16510 <refname>snd_soc_component_async_complete</refname>
16511 <refpurpose>
16512     Ensure asynchronous I/O has completed
16513 </refpurpose>
16514</refnamediv>
16515<refsynopsisdiv>
16516 <title>Synopsis</title>
16517  <funcsynopsis><funcprototype>
16518   <funcdef>void <function>snd_soc_component_async_complete </function></funcdef>
16519   <paramdef>struct snd_soc_component * <parameter>component</parameter></paramdef>
16520  </funcprototype></funcsynopsis>
16521</refsynopsisdiv>
16522<refsect1>
16523 <title>Arguments</title>
16524 <variablelist>
16525  <varlistentry>
16526   <term><parameter>component</parameter></term>
16527   <listitem>
16528    <para>
16529     Component for which to wait
16530    </para>
16531   </listitem>
16532  </varlistentry>
16533 </variablelist>
16534</refsect1>
16535<refsect1>
16536<title>Description</title>
16537<para>
16538   This function blocks until all asynchronous I/O which has previously been
16539   scheduled using <function>snd_soc_component_update_bits_async</function> has completed.
16540</para>
16541</refsect1>
16542</refentry>
16543
16544<refentry id="API-snd-soc-component-test-bits">
16545<refentryinfo>
16546 <title>LINUX</title>
16547 <productname>Kernel Hackers Manual</productname>
16548 <date>July 2017</date>
16549</refentryinfo>
16550<refmeta>
16551 <refentrytitle><phrase>snd_soc_component_test_bits</phrase></refentrytitle>
16552 <manvolnum>9</manvolnum>
16553 <refmiscinfo class="version">4.4.14</refmiscinfo>
16554</refmeta>
16555<refnamediv>
16556 <refname>snd_soc_component_test_bits</refname>
16557 <refpurpose>
16558     Test register for change
16559 </refpurpose>
16560</refnamediv>
16561<refsynopsisdiv>
16562 <title>Synopsis</title>
16563  <funcsynopsis><funcprototype>
16564   <funcdef>int <function>snd_soc_component_test_bits </function></funcdef>
16565   <paramdef>struct snd_soc_component * <parameter>component</parameter></paramdef>
16566   <paramdef>unsigned int <parameter>reg</parameter></paramdef>
16567   <paramdef>unsigned int <parameter>mask</parameter></paramdef>
16568   <paramdef>unsigned int <parameter>value</parameter></paramdef>
16569  </funcprototype></funcsynopsis>
16570</refsynopsisdiv>
16571<refsect1>
16572 <title>Arguments</title>
16573 <variablelist>
16574  <varlistentry>
16575   <term><parameter>component</parameter></term>
16576   <listitem>
16577    <para>
16578     component
16579    </para>
16580   </listitem>
16581  </varlistentry>
16582  <varlistentry>
16583   <term><parameter>reg</parameter></term>
16584   <listitem>
16585    <para>
16586     Register to test
16587    </para>
16588   </listitem>
16589  </varlistentry>
16590  <varlistentry>
16591   <term><parameter>mask</parameter></term>
16592   <listitem>
16593    <para>
16594     Mask that specifies which bits to test
16595    </para>
16596   </listitem>
16597  </varlistentry>
16598  <varlistentry>
16599   <term><parameter>value</parameter></term>
16600   <listitem>
16601    <para>
16602     Value to test against
16603    </para>
16604   </listitem>
16605  </varlistentry>
16606 </variablelist>
16607</refsect1>
16608<refsect1>
16609<title>Description</title>
16610<para>
16611   Tests a register with a new value and checks if the new value is
16612   different from the old value.
16613</para>
16614</refsect1>
16615<refsect1>
16616<title>Return</title>
16617<para>
16618   1 for change, otherwise 0.
16619</para>
16620</refsect1>
16621</refentry>
16622
16623<refentry id="API-snd-soc-update-bits">
16624<refentryinfo>
16625 <title>LINUX</title>
16626 <productname>Kernel Hackers Manual</productname>
16627 <date>July 2017</date>
16628</refentryinfo>
16629<refmeta>
16630 <refentrytitle><phrase>snd_soc_update_bits</phrase></refentrytitle>
16631 <manvolnum>9</manvolnum>
16632 <refmiscinfo class="version">4.4.14</refmiscinfo>
16633</refmeta>
16634<refnamediv>
16635 <refname>snd_soc_update_bits</refname>
16636 <refpurpose>
16637     update codec register bits
16638 </refpurpose>
16639</refnamediv>
16640<refsynopsisdiv>
16641 <title>Synopsis</title>
16642  <funcsynopsis><funcprototype>
16643   <funcdef>int <function>snd_soc_update_bits </function></funcdef>
16644   <paramdef>struct snd_soc_codec * <parameter>codec</parameter></paramdef>
16645   <paramdef>unsigned int <parameter>reg</parameter></paramdef>
16646   <paramdef>unsigned int <parameter>mask</parameter></paramdef>
16647   <paramdef>unsigned int <parameter>value</parameter></paramdef>
16648  </funcprototype></funcsynopsis>
16649</refsynopsisdiv>
16650<refsect1>
16651 <title>Arguments</title>
16652 <variablelist>
16653  <varlistentry>
16654   <term><parameter>codec</parameter></term>
16655   <listitem>
16656    <para>
16657     audio codec
16658    </para>
16659   </listitem>
16660  </varlistentry>
16661  <varlistentry>
16662   <term><parameter>reg</parameter></term>
16663   <listitem>
16664    <para>
16665     codec register
16666    </para>
16667   </listitem>
16668  </varlistentry>
16669  <varlistentry>
16670   <term><parameter>mask</parameter></term>
16671   <listitem>
16672    <para>
16673     register mask
16674    </para>
16675   </listitem>
16676  </varlistentry>
16677  <varlistentry>
16678   <term><parameter>value</parameter></term>
16679   <listitem>
16680    <para>
16681     new value
16682    </para>
16683   </listitem>
16684  </varlistentry>
16685 </variablelist>
16686</refsect1>
16687<refsect1>
16688<title>Description</title>
16689<para>
16690   Writes new register value.
16691   </para><para>
16692
16693   Returns 1 for change, 0 for no change, or negative error code.
16694</para>
16695</refsect1>
16696</refentry>
16697
16698<refentry id="API-snd-soc-test-bits">
16699<refentryinfo>
16700 <title>LINUX</title>
16701 <productname>Kernel Hackers Manual</productname>
16702 <date>July 2017</date>
16703</refentryinfo>
16704<refmeta>
16705 <refentrytitle><phrase>snd_soc_test_bits</phrase></refentrytitle>
16706 <manvolnum>9</manvolnum>
16707 <refmiscinfo class="version">4.4.14</refmiscinfo>
16708</refmeta>
16709<refnamediv>
16710 <refname>snd_soc_test_bits</refname>
16711 <refpurpose>
16712     test register for change
16713 </refpurpose>
16714</refnamediv>
16715<refsynopsisdiv>
16716 <title>Synopsis</title>
16717  <funcsynopsis><funcprototype>
16718   <funcdef>int <function>snd_soc_test_bits </function></funcdef>
16719   <paramdef>struct snd_soc_codec * <parameter>codec</parameter></paramdef>
16720   <paramdef>unsigned int <parameter>reg</parameter></paramdef>
16721   <paramdef>unsigned int <parameter>mask</parameter></paramdef>
16722   <paramdef>unsigned int <parameter>value</parameter></paramdef>
16723  </funcprototype></funcsynopsis>
16724</refsynopsisdiv>
16725<refsect1>
16726 <title>Arguments</title>
16727 <variablelist>
16728  <varlistentry>
16729   <term><parameter>codec</parameter></term>
16730   <listitem>
16731    <para>
16732     audio codec
16733    </para>
16734   </listitem>
16735  </varlistentry>
16736  <varlistentry>
16737   <term><parameter>reg</parameter></term>
16738   <listitem>
16739    <para>
16740     codec register
16741    </para>
16742   </listitem>
16743  </varlistentry>
16744  <varlistentry>
16745   <term><parameter>mask</parameter></term>
16746   <listitem>
16747    <para>
16748     register mask
16749    </para>
16750   </listitem>
16751  </varlistentry>
16752  <varlistentry>
16753   <term><parameter>value</parameter></term>
16754   <listitem>
16755    <para>
16756     new value
16757    </para>
16758   </listitem>
16759  </varlistentry>
16760 </variablelist>
16761</refsect1>
16762<refsect1>
16763<title>Description</title>
16764<para>
16765   Tests a register with a new value and checks if the new value is
16766   different from the old value.
16767   </para><para>
16768
16769   Returns 1 for change else 0.
16770</para>
16771</refsect1>
16772</refentry>
16773
16774<!-- sound/soc/soc-pcm.c -->
16775<refentry id="API-snd-soc-set-runtime-hwparams">
16776<refentryinfo>
16777 <title>LINUX</title>
16778 <productname>Kernel Hackers Manual</productname>
16779 <date>July 2017</date>
16780</refentryinfo>
16781<refmeta>
16782 <refentrytitle><phrase>snd_soc_set_runtime_hwparams</phrase></refentrytitle>
16783 <manvolnum>9</manvolnum>
16784 <refmiscinfo class="version">4.4.14</refmiscinfo>
16785</refmeta>
16786<refnamediv>
16787 <refname>snd_soc_set_runtime_hwparams</refname>
16788 <refpurpose>
16789  set the runtime hardware parameters
16790 </refpurpose>
16791</refnamediv>
16792<refsynopsisdiv>
16793 <title>Synopsis</title>
16794  <funcsynopsis><funcprototype>
16795   <funcdef>int <function>snd_soc_set_runtime_hwparams </function></funcdef>
16796   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
16797   <paramdef>const struct snd_pcm_hardware * <parameter>hw</parameter></paramdef>
16798  </funcprototype></funcsynopsis>
16799</refsynopsisdiv>
16800<refsect1>
16801 <title>Arguments</title>
16802 <variablelist>
16803  <varlistentry>
16804   <term><parameter>substream</parameter></term>
16805   <listitem>
16806    <para>
16807     the pcm substream
16808    </para>
16809   </listitem>
16810  </varlistentry>
16811  <varlistentry>
16812   <term><parameter>hw</parameter></term>
16813   <listitem>
16814    <para>
16815     the hardware parameters
16816    </para>
16817   </listitem>
16818  </varlistentry>
16819 </variablelist>
16820</refsect1>
16821<refsect1>
16822<title>Description</title>
16823<para>
16824   Sets the substream runtime hardware parameters.
16825</para>
16826</refsect1>
16827</refentry>
16828
16829<!-- sound/soc/soc-ops.c -->
16830<refentry id="API-snd-soc-info-enum-double">
16831<refentryinfo>
16832 <title>LINUX</title>
16833 <productname>Kernel Hackers Manual</productname>
16834 <date>July 2017</date>
16835</refentryinfo>
16836<refmeta>
16837 <refentrytitle><phrase>snd_soc_info_enum_double</phrase></refentrytitle>
16838 <manvolnum>9</manvolnum>
16839 <refmiscinfo class="version">4.4.14</refmiscinfo>
16840</refmeta>
16841<refnamediv>
16842 <refname>snd_soc_info_enum_double</refname>
16843 <refpurpose>
16844  enumerated double mixer info callback
16845 </refpurpose>
16846</refnamediv>
16847<refsynopsisdiv>
16848 <title>Synopsis</title>
16849  <funcsynopsis><funcprototype>
16850   <funcdef>int <function>snd_soc_info_enum_double </function></funcdef>
16851   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
16852   <paramdef>struct snd_ctl_elem_info * <parameter>uinfo</parameter></paramdef>
16853  </funcprototype></funcsynopsis>
16854</refsynopsisdiv>
16855<refsect1>
16856 <title>Arguments</title>
16857 <variablelist>
16858  <varlistentry>
16859   <term><parameter>kcontrol</parameter></term>
16860   <listitem>
16861    <para>
16862     mixer control
16863    </para>
16864   </listitem>
16865  </varlistentry>
16866  <varlistentry>
16867   <term><parameter>uinfo</parameter></term>
16868   <listitem>
16869    <para>
16870     control element information
16871    </para>
16872   </listitem>
16873  </varlistentry>
16874 </variablelist>
16875</refsect1>
16876<refsect1>
16877<title>Description</title>
16878<para>
16879   Callback to provide information about a double enumerated
16880   mixer control.
16881   </para><para>
16882
16883   Returns 0 for success.
16884</para>
16885</refsect1>
16886</refentry>
16887
16888<refentry id="API-snd-soc-get-enum-double">
16889<refentryinfo>
16890 <title>LINUX</title>
16891 <productname>Kernel Hackers Manual</productname>
16892 <date>July 2017</date>
16893</refentryinfo>
16894<refmeta>
16895 <refentrytitle><phrase>snd_soc_get_enum_double</phrase></refentrytitle>
16896 <manvolnum>9</manvolnum>
16897 <refmiscinfo class="version">4.4.14</refmiscinfo>
16898</refmeta>
16899<refnamediv>
16900 <refname>snd_soc_get_enum_double</refname>
16901 <refpurpose>
16902     enumerated double mixer get callback
16903 </refpurpose>
16904</refnamediv>
16905<refsynopsisdiv>
16906 <title>Synopsis</title>
16907  <funcsynopsis><funcprototype>
16908   <funcdef>int <function>snd_soc_get_enum_double </function></funcdef>
16909   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
16910   <paramdef>struct snd_ctl_elem_value * <parameter>ucontrol</parameter></paramdef>
16911  </funcprototype></funcsynopsis>
16912</refsynopsisdiv>
16913<refsect1>
16914 <title>Arguments</title>
16915 <variablelist>
16916  <varlistentry>
16917   <term><parameter>kcontrol</parameter></term>
16918   <listitem>
16919    <para>
16920     mixer control
16921    </para>
16922   </listitem>
16923  </varlistentry>
16924  <varlistentry>
16925   <term><parameter>ucontrol</parameter></term>
16926   <listitem>
16927    <para>
16928     control element information
16929    </para>
16930   </listitem>
16931  </varlistentry>
16932 </variablelist>
16933</refsect1>
16934<refsect1>
16935<title>Description</title>
16936<para>
16937   Callback to get the value of a double enumerated mixer.
16938   </para><para>
16939
16940   Returns 0 for success.
16941</para>
16942</refsect1>
16943</refentry>
16944
16945<refentry id="API-snd-soc-put-enum-double">
16946<refentryinfo>
16947 <title>LINUX</title>
16948 <productname>Kernel Hackers Manual</productname>
16949 <date>July 2017</date>
16950</refentryinfo>
16951<refmeta>
16952 <refentrytitle><phrase>snd_soc_put_enum_double</phrase></refentrytitle>
16953 <manvolnum>9</manvolnum>
16954 <refmiscinfo class="version">4.4.14</refmiscinfo>
16955</refmeta>
16956<refnamediv>
16957 <refname>snd_soc_put_enum_double</refname>
16958 <refpurpose>
16959     enumerated double mixer put callback
16960 </refpurpose>
16961</refnamediv>
16962<refsynopsisdiv>
16963 <title>Synopsis</title>
16964  <funcsynopsis><funcprototype>
16965   <funcdef>int <function>snd_soc_put_enum_double </function></funcdef>
16966   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
16967   <paramdef>struct snd_ctl_elem_value * <parameter>ucontrol</parameter></paramdef>
16968  </funcprototype></funcsynopsis>
16969</refsynopsisdiv>
16970<refsect1>
16971 <title>Arguments</title>
16972 <variablelist>
16973  <varlistentry>
16974   <term><parameter>kcontrol</parameter></term>
16975   <listitem>
16976    <para>
16977     mixer control
16978    </para>
16979   </listitem>
16980  </varlistentry>
16981  <varlistentry>
16982   <term><parameter>ucontrol</parameter></term>
16983   <listitem>
16984    <para>
16985     control element information
16986    </para>
16987   </listitem>
16988  </varlistentry>
16989 </variablelist>
16990</refsect1>
16991<refsect1>
16992<title>Description</title>
16993<para>
16994   Callback to set the value of a double enumerated mixer.
16995   </para><para>
16996
16997   Returns 0 for success.
16998</para>
16999</refsect1>
17000</refentry>
17001
17002<refentry id="API-snd-soc-info-volsw">
17003<refentryinfo>
17004 <title>LINUX</title>
17005 <productname>Kernel Hackers Manual</productname>
17006 <date>July 2017</date>
17007</refentryinfo>
17008<refmeta>
17009 <refentrytitle><phrase>snd_soc_info_volsw</phrase></refentrytitle>
17010 <manvolnum>9</manvolnum>
17011 <refmiscinfo class="version">4.4.14</refmiscinfo>
17012</refmeta>
17013<refnamediv>
17014 <refname>snd_soc_info_volsw</refname>
17015 <refpurpose>
17016     single mixer info callback
17017 </refpurpose>
17018</refnamediv>
17019<refsynopsisdiv>
17020 <title>Synopsis</title>
17021  <funcsynopsis><funcprototype>
17022   <funcdef>int <function>snd_soc_info_volsw </function></funcdef>
17023   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
17024   <paramdef>struct snd_ctl_elem_info * <parameter>uinfo</parameter></paramdef>
17025  </funcprototype></funcsynopsis>
17026</refsynopsisdiv>
17027<refsect1>
17028 <title>Arguments</title>
17029 <variablelist>
17030  <varlistentry>
17031   <term><parameter>kcontrol</parameter></term>
17032   <listitem>
17033    <para>
17034     mixer control
17035    </para>
17036   </listitem>
17037  </varlistentry>
17038  <varlistentry>
17039   <term><parameter>uinfo</parameter></term>
17040   <listitem>
17041    <para>
17042     control element information
17043    </para>
17044   </listitem>
17045  </varlistentry>
17046 </variablelist>
17047</refsect1>
17048<refsect1>
17049<title>Description</title>
17050<para>
17051   Callback to provide information about a single mixer control, or a double
17052   mixer control that spans 2 registers.
17053   </para><para>
17054
17055   Returns 0 for success.
17056</para>
17057</refsect1>
17058</refentry>
17059
17060<refentry id="API-snd-soc-info-volsw-sx">
17061<refentryinfo>
17062 <title>LINUX</title>
17063 <productname>Kernel Hackers Manual</productname>
17064 <date>July 2017</date>
17065</refentryinfo>
17066<refmeta>
17067 <refentrytitle><phrase>snd_soc_info_volsw_sx</phrase></refentrytitle>
17068 <manvolnum>9</manvolnum>
17069 <refmiscinfo class="version">4.4.14</refmiscinfo>
17070</refmeta>
17071<refnamediv>
17072 <refname>snd_soc_info_volsw_sx</refname>
17073 <refpurpose>
17074     Mixer info callback for SX TLV controls
17075 </refpurpose>
17076</refnamediv>
17077<refsynopsisdiv>
17078 <title>Synopsis</title>
17079  <funcsynopsis><funcprototype>
17080   <funcdef>int <function>snd_soc_info_volsw_sx </function></funcdef>
17081   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
17082   <paramdef>struct snd_ctl_elem_info * <parameter>uinfo</parameter></paramdef>
17083  </funcprototype></funcsynopsis>
17084</refsynopsisdiv>
17085<refsect1>
17086 <title>Arguments</title>
17087 <variablelist>
17088  <varlistentry>
17089   <term><parameter>kcontrol</parameter></term>
17090   <listitem>
17091    <para>
17092     mixer control
17093    </para>
17094   </listitem>
17095  </varlistentry>
17096  <varlistentry>
17097   <term><parameter>uinfo</parameter></term>
17098   <listitem>
17099    <para>
17100     control element information
17101    </para>
17102   </listitem>
17103  </varlistentry>
17104 </variablelist>
17105</refsect1>
17106<refsect1>
17107<title>Description</title>
17108<para>
17109   Callback to provide information about a single mixer control, or a double
17110   mixer control that spans 2 registers of the SX TLV type. SX TLV controls
17111   have a range that represents both positive and negative values either side
17112   of zero but without a sign bit.
17113   </para><para>
17114
17115   Returns 0 for success.
17116</para>
17117</refsect1>
17118</refentry>
17119
17120<refentry id="API-snd-soc-get-volsw">
17121<refentryinfo>
17122 <title>LINUX</title>
17123 <productname>Kernel Hackers Manual</productname>
17124 <date>July 2017</date>
17125</refentryinfo>
17126<refmeta>
17127 <refentrytitle><phrase>snd_soc_get_volsw</phrase></refentrytitle>
17128 <manvolnum>9</manvolnum>
17129 <refmiscinfo class="version">4.4.14</refmiscinfo>
17130</refmeta>
17131<refnamediv>
17132 <refname>snd_soc_get_volsw</refname>
17133 <refpurpose>
17134     single mixer get callback
17135 </refpurpose>
17136</refnamediv>
17137<refsynopsisdiv>
17138 <title>Synopsis</title>
17139  <funcsynopsis><funcprototype>
17140   <funcdef>int <function>snd_soc_get_volsw </function></funcdef>
17141   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
17142   <paramdef>struct snd_ctl_elem_value * <parameter>ucontrol</parameter></paramdef>
17143  </funcprototype></funcsynopsis>
17144</refsynopsisdiv>
17145<refsect1>
17146 <title>Arguments</title>
17147 <variablelist>
17148  <varlistentry>
17149   <term><parameter>kcontrol</parameter></term>
17150   <listitem>
17151    <para>
17152     mixer control
17153    </para>
17154   </listitem>
17155  </varlistentry>
17156  <varlistentry>
17157   <term><parameter>ucontrol</parameter></term>
17158   <listitem>
17159    <para>
17160     control element information
17161    </para>
17162   </listitem>
17163  </varlistentry>
17164 </variablelist>
17165</refsect1>
17166<refsect1>
17167<title>Description</title>
17168<para>
17169   Callback to get the value of a single mixer control, or a double mixer
17170   control that spans 2 registers.
17171   </para><para>
17172
17173   Returns 0 for success.
17174</para>
17175</refsect1>
17176</refentry>
17177
17178<refentry id="API-snd-soc-put-volsw">
17179<refentryinfo>
17180 <title>LINUX</title>
17181 <productname>Kernel Hackers Manual</productname>
17182 <date>July 2017</date>
17183</refentryinfo>
17184<refmeta>
17185 <refentrytitle><phrase>snd_soc_put_volsw</phrase></refentrytitle>
17186 <manvolnum>9</manvolnum>
17187 <refmiscinfo class="version">4.4.14</refmiscinfo>
17188</refmeta>
17189<refnamediv>
17190 <refname>snd_soc_put_volsw</refname>
17191 <refpurpose>
17192     single mixer put callback
17193 </refpurpose>
17194</refnamediv>
17195<refsynopsisdiv>
17196 <title>Synopsis</title>
17197  <funcsynopsis><funcprototype>
17198   <funcdef>int <function>snd_soc_put_volsw </function></funcdef>
17199   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
17200   <paramdef>struct snd_ctl_elem_value * <parameter>ucontrol</parameter></paramdef>
17201  </funcprototype></funcsynopsis>
17202</refsynopsisdiv>
17203<refsect1>
17204 <title>Arguments</title>
17205 <variablelist>
17206  <varlistentry>
17207   <term><parameter>kcontrol</parameter></term>
17208   <listitem>
17209    <para>
17210     mixer control
17211    </para>
17212   </listitem>
17213  </varlistentry>
17214  <varlistentry>
17215   <term><parameter>ucontrol</parameter></term>
17216   <listitem>
17217    <para>
17218     control element information
17219    </para>
17220   </listitem>
17221  </varlistentry>
17222 </variablelist>
17223</refsect1>
17224<refsect1>
17225<title>Description</title>
17226<para>
17227   Callback to set the value of a single mixer control, or a double mixer
17228   control that spans 2 registers.
17229   </para><para>
17230
17231   Returns 0 for success.
17232</para>
17233</refsect1>
17234</refentry>
17235
17236<refentry id="API-snd-soc-get-volsw-sx">
17237<refentryinfo>
17238 <title>LINUX</title>
17239 <productname>Kernel Hackers Manual</productname>
17240 <date>July 2017</date>
17241</refentryinfo>
17242<refmeta>
17243 <refentrytitle><phrase>snd_soc_get_volsw_sx</phrase></refentrytitle>
17244 <manvolnum>9</manvolnum>
17245 <refmiscinfo class="version">4.4.14</refmiscinfo>
17246</refmeta>
17247<refnamediv>
17248 <refname>snd_soc_get_volsw_sx</refname>
17249 <refpurpose>
17250     single mixer get callback
17251 </refpurpose>
17252</refnamediv>
17253<refsynopsisdiv>
17254 <title>Synopsis</title>
17255  <funcsynopsis><funcprototype>
17256   <funcdef>int <function>snd_soc_get_volsw_sx </function></funcdef>
17257   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
17258   <paramdef>struct snd_ctl_elem_value * <parameter>ucontrol</parameter></paramdef>
17259  </funcprototype></funcsynopsis>
17260</refsynopsisdiv>
17261<refsect1>
17262 <title>Arguments</title>
17263 <variablelist>
17264  <varlistentry>
17265   <term><parameter>kcontrol</parameter></term>
17266   <listitem>
17267    <para>
17268     mixer control
17269    </para>
17270   </listitem>
17271  </varlistentry>
17272  <varlistentry>
17273   <term><parameter>ucontrol</parameter></term>
17274   <listitem>
17275    <para>
17276     control element information
17277    </para>
17278   </listitem>
17279  </varlistentry>
17280 </variablelist>
17281</refsect1>
17282<refsect1>
17283<title>Description</title>
17284<para>
17285   Callback to get the value of a single mixer control, or a double mixer
17286   control that spans 2 registers.
17287   </para><para>
17288
17289   Returns 0 for success.
17290</para>
17291</refsect1>
17292</refentry>
17293
17294<refentry id="API-snd-soc-put-volsw-sx">
17295<refentryinfo>
17296 <title>LINUX</title>
17297 <productname>Kernel Hackers Manual</productname>
17298 <date>July 2017</date>
17299</refentryinfo>
17300<refmeta>
17301 <refentrytitle><phrase>snd_soc_put_volsw_sx</phrase></refentrytitle>
17302 <manvolnum>9</manvolnum>
17303 <refmiscinfo class="version">4.4.14</refmiscinfo>
17304</refmeta>
17305<refnamediv>
17306 <refname>snd_soc_put_volsw_sx</refname>
17307 <refpurpose>
17308     double mixer set callback
17309 </refpurpose>
17310</refnamediv>
17311<refsynopsisdiv>
17312 <title>Synopsis</title>
17313  <funcsynopsis><funcprototype>
17314   <funcdef>int <function>snd_soc_put_volsw_sx </function></funcdef>
17315   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
17316   <paramdef>struct snd_ctl_elem_value * <parameter>ucontrol</parameter></paramdef>
17317  </funcprototype></funcsynopsis>
17318</refsynopsisdiv>
17319<refsect1>
17320 <title>Arguments</title>
17321 <variablelist>
17322  <varlistentry>
17323   <term><parameter>kcontrol</parameter></term>
17324   <listitem>
17325    <para>
17326     mixer control
17327    </para>
17328   </listitem>
17329  </varlistentry>
17330  <varlistentry>
17331   <term><parameter>ucontrol</parameter></term>
17332   <listitem>
17333    <para>
17334     control element information
17335    </para>
17336   </listitem>
17337  </varlistentry>
17338 </variablelist>
17339</refsect1>
17340<refsect1>
17341<title>Description</title>
17342<para>
17343   Callback to set the value of a double mixer control that spans 2 registers.
17344   </para><para>
17345
17346   Returns 0 for success.
17347</para>
17348</refsect1>
17349</refentry>
17350
17351<refentry id="API-snd-soc-info-volsw-range">
17352<refentryinfo>
17353 <title>LINUX</title>
17354 <productname>Kernel Hackers Manual</productname>
17355 <date>July 2017</date>
17356</refentryinfo>
17357<refmeta>
17358 <refentrytitle><phrase>snd_soc_info_volsw_range</phrase></refentrytitle>
17359 <manvolnum>9</manvolnum>
17360 <refmiscinfo class="version">4.4.14</refmiscinfo>
17361</refmeta>
17362<refnamediv>
17363 <refname>snd_soc_info_volsw_range</refname>
17364 <refpurpose>
17365     single mixer info callback with range.
17366 </refpurpose>
17367</refnamediv>
17368<refsynopsisdiv>
17369 <title>Synopsis</title>
17370  <funcsynopsis><funcprototype>
17371   <funcdef>int <function>snd_soc_info_volsw_range </function></funcdef>
17372   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
17373   <paramdef>struct snd_ctl_elem_info * <parameter>uinfo</parameter></paramdef>
17374  </funcprototype></funcsynopsis>
17375</refsynopsisdiv>
17376<refsect1>
17377 <title>Arguments</title>
17378 <variablelist>
17379  <varlistentry>
17380   <term><parameter>kcontrol</parameter></term>
17381   <listitem>
17382    <para>
17383     mixer control
17384    </para>
17385   </listitem>
17386  </varlistentry>
17387  <varlistentry>
17388   <term><parameter>uinfo</parameter></term>
17389   <listitem>
17390    <para>
17391     control element information
17392    </para>
17393   </listitem>
17394  </varlistentry>
17395 </variablelist>
17396</refsect1>
17397<refsect1>
17398<title>Description</title>
17399<para>
17400   Callback to provide information, within a range, about a single
17401   mixer control.
17402   </para><para>
17403
17404   returns 0 for success.
17405</para>
17406</refsect1>
17407</refentry>
17408
17409<refentry id="API-snd-soc-put-volsw-range">
17410<refentryinfo>
17411 <title>LINUX</title>
17412 <productname>Kernel Hackers Manual</productname>
17413 <date>July 2017</date>
17414</refentryinfo>
17415<refmeta>
17416 <refentrytitle><phrase>snd_soc_put_volsw_range</phrase></refentrytitle>
17417 <manvolnum>9</manvolnum>
17418 <refmiscinfo class="version">4.4.14</refmiscinfo>
17419</refmeta>
17420<refnamediv>
17421 <refname>snd_soc_put_volsw_range</refname>
17422 <refpurpose>
17423     single mixer put value callback with range.
17424 </refpurpose>
17425</refnamediv>
17426<refsynopsisdiv>
17427 <title>Synopsis</title>
17428  <funcsynopsis><funcprototype>
17429   <funcdef>int <function>snd_soc_put_volsw_range </function></funcdef>
17430   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
17431   <paramdef>struct snd_ctl_elem_value * <parameter>ucontrol</parameter></paramdef>
17432  </funcprototype></funcsynopsis>
17433</refsynopsisdiv>
17434<refsect1>
17435 <title>Arguments</title>
17436 <variablelist>
17437  <varlistentry>
17438   <term><parameter>kcontrol</parameter></term>
17439   <listitem>
17440    <para>
17441     mixer control
17442    </para>
17443   </listitem>
17444  </varlistentry>
17445  <varlistentry>
17446   <term><parameter>ucontrol</parameter></term>
17447   <listitem>
17448    <para>
17449     control element information
17450    </para>
17451   </listitem>
17452  </varlistentry>
17453 </variablelist>
17454</refsect1>
17455<refsect1>
17456<title>Description</title>
17457<para>
17458   Callback to set the value, within a range, for a single mixer control.
17459   </para><para>
17460
17461   Returns 0 for success.
17462</para>
17463</refsect1>
17464</refentry>
17465
17466<refentry id="API-snd-soc-get-volsw-range">
17467<refentryinfo>
17468 <title>LINUX</title>
17469 <productname>Kernel Hackers Manual</productname>
17470 <date>July 2017</date>
17471</refentryinfo>
17472<refmeta>
17473 <refentrytitle><phrase>snd_soc_get_volsw_range</phrase></refentrytitle>
17474 <manvolnum>9</manvolnum>
17475 <refmiscinfo class="version">4.4.14</refmiscinfo>
17476</refmeta>
17477<refnamediv>
17478 <refname>snd_soc_get_volsw_range</refname>
17479 <refpurpose>
17480     single mixer get callback with range
17481 </refpurpose>
17482</refnamediv>
17483<refsynopsisdiv>
17484 <title>Synopsis</title>
17485  <funcsynopsis><funcprototype>
17486   <funcdef>int <function>snd_soc_get_volsw_range </function></funcdef>
17487   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
17488   <paramdef>struct snd_ctl_elem_value * <parameter>ucontrol</parameter></paramdef>
17489  </funcprototype></funcsynopsis>
17490</refsynopsisdiv>
17491<refsect1>
17492 <title>Arguments</title>
17493 <variablelist>
17494  <varlistentry>
17495   <term><parameter>kcontrol</parameter></term>
17496   <listitem>
17497    <para>
17498     mixer control
17499    </para>
17500   </listitem>
17501  </varlistentry>
17502  <varlistentry>
17503   <term><parameter>ucontrol</parameter></term>
17504   <listitem>
17505    <para>
17506     control element information
17507    </para>
17508   </listitem>
17509  </varlistentry>
17510 </variablelist>
17511</refsect1>
17512<refsect1>
17513<title>Description</title>
17514<para>
17515   Callback to get the value, within a range, of a single mixer control.
17516   </para><para>
17517
17518   Returns 0 for success.
17519</para>
17520</refsect1>
17521</refentry>
17522
17523<refentry id="API-snd-soc-limit-volume">
17524<refentryinfo>
17525 <title>LINUX</title>
17526 <productname>Kernel Hackers Manual</productname>
17527 <date>July 2017</date>
17528</refentryinfo>
17529<refmeta>
17530 <refentrytitle><phrase>snd_soc_limit_volume</phrase></refentrytitle>
17531 <manvolnum>9</manvolnum>
17532 <refmiscinfo class="version">4.4.14</refmiscinfo>
17533</refmeta>
17534<refnamediv>
17535 <refname>snd_soc_limit_volume</refname>
17536 <refpurpose>
17537     Set new limit to an existing volume control.
17538 </refpurpose>
17539</refnamediv>
17540<refsynopsisdiv>
17541 <title>Synopsis</title>
17542  <funcsynopsis><funcprototype>
17543   <funcdef>int <function>snd_soc_limit_volume </function></funcdef>
17544   <paramdef>struct snd_soc_card * <parameter>card</parameter></paramdef>
17545   <paramdef>const char * <parameter>name</parameter></paramdef>
17546   <paramdef>int <parameter>max</parameter></paramdef>
17547  </funcprototype></funcsynopsis>
17548</refsynopsisdiv>
17549<refsect1>
17550 <title>Arguments</title>
17551 <variablelist>
17552  <varlistentry>
17553   <term><parameter>card</parameter></term>
17554   <listitem>
17555    <para>
17556     where to look for the control
17557    </para>
17558   </listitem>
17559  </varlistentry>
17560  <varlistentry>
17561   <term><parameter>name</parameter></term>
17562   <listitem>
17563    <para>
17564     Name of the control
17565    </para>
17566   </listitem>
17567  </varlistentry>
17568  <varlistentry>
17569   <term><parameter>max</parameter></term>
17570   <listitem>
17571    <para>
17572     new maximum limit
17573    </para>
17574   </listitem>
17575  </varlistentry>
17576 </variablelist>
17577</refsect1>
17578<refsect1>
17579<title>Description</title>
17580<para>
17581   Return 0 for success, else error.
17582</para>
17583</refsect1>
17584</refentry>
17585
17586<refentry id="API-snd-soc-info-xr-sx">
17587<refentryinfo>
17588 <title>LINUX</title>
17589 <productname>Kernel Hackers Manual</productname>
17590 <date>July 2017</date>
17591</refentryinfo>
17592<refmeta>
17593 <refentrytitle><phrase>snd_soc_info_xr_sx</phrase></refentrytitle>
17594 <manvolnum>9</manvolnum>
17595 <refmiscinfo class="version">4.4.14</refmiscinfo>
17596</refmeta>
17597<refnamediv>
17598 <refname>snd_soc_info_xr_sx</refname>
17599 <refpurpose>
17600     signed multi register info callback
17601 </refpurpose>
17602</refnamediv>
17603<refsynopsisdiv>
17604 <title>Synopsis</title>
17605  <funcsynopsis><funcprototype>
17606   <funcdef>int <function>snd_soc_info_xr_sx </function></funcdef>
17607   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
17608   <paramdef>struct snd_ctl_elem_info * <parameter>uinfo</parameter></paramdef>
17609  </funcprototype></funcsynopsis>
17610</refsynopsisdiv>
17611<refsect1>
17612 <title>Arguments</title>
17613 <variablelist>
17614  <varlistentry>
17615   <term><parameter>kcontrol</parameter></term>
17616   <listitem>
17617    <para>
17618     mreg control
17619    </para>
17620   </listitem>
17621  </varlistentry>
17622  <varlistentry>
17623   <term><parameter>uinfo</parameter></term>
17624   <listitem>
17625    <para>
17626     control element information
17627    </para>
17628   </listitem>
17629  </varlistentry>
17630 </variablelist>
17631</refsect1>
17632<refsect1>
17633<title>Description</title>
17634<para>
17635   Callback to provide information of a control that can
17636   span multiple codec registers which together
17637   forms a single signed value in a MSB/LSB manner.
17638   </para><para>
17639
17640   Returns 0 for success.
17641</para>
17642</refsect1>
17643</refentry>
17644
17645<refentry id="API-snd-soc-get-xr-sx">
17646<refentryinfo>
17647 <title>LINUX</title>
17648 <productname>Kernel Hackers Manual</productname>
17649 <date>July 2017</date>
17650</refentryinfo>
17651<refmeta>
17652 <refentrytitle><phrase>snd_soc_get_xr_sx</phrase></refentrytitle>
17653 <manvolnum>9</manvolnum>
17654 <refmiscinfo class="version">4.4.14</refmiscinfo>
17655</refmeta>
17656<refnamediv>
17657 <refname>snd_soc_get_xr_sx</refname>
17658 <refpurpose>
17659     signed multi register get callback
17660 </refpurpose>
17661</refnamediv>
17662<refsynopsisdiv>
17663 <title>Synopsis</title>
17664  <funcsynopsis><funcprototype>
17665   <funcdef>int <function>snd_soc_get_xr_sx </function></funcdef>
17666   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
17667   <paramdef>struct snd_ctl_elem_value * <parameter>ucontrol</parameter></paramdef>
17668  </funcprototype></funcsynopsis>
17669</refsynopsisdiv>
17670<refsect1>
17671 <title>Arguments</title>
17672 <variablelist>
17673  <varlistentry>
17674   <term><parameter>kcontrol</parameter></term>
17675   <listitem>
17676    <para>
17677     mreg control
17678    </para>
17679   </listitem>
17680  </varlistentry>
17681  <varlistentry>
17682   <term><parameter>ucontrol</parameter></term>
17683   <listitem>
17684    <para>
17685     control element information
17686    </para>
17687   </listitem>
17688  </varlistentry>
17689 </variablelist>
17690</refsect1>
17691<refsect1>
17692<title>Description</title>
17693<para>
17694   Callback to get the value of a control that can span
17695   multiple codec registers which together forms a single
17696   signed value in a MSB/LSB manner. The control supports
17697   specifying total no of bits used to allow for bitfields
17698   across the multiple codec registers.
17699   </para><para>
17700
17701   Returns 0 for success.
17702</para>
17703</refsect1>
17704</refentry>
17705
17706<refentry id="API-snd-soc-put-xr-sx">
17707<refentryinfo>
17708 <title>LINUX</title>
17709 <productname>Kernel Hackers Manual</productname>
17710 <date>July 2017</date>
17711</refentryinfo>
17712<refmeta>
17713 <refentrytitle><phrase>snd_soc_put_xr_sx</phrase></refentrytitle>
17714 <manvolnum>9</manvolnum>
17715 <refmiscinfo class="version">4.4.14</refmiscinfo>
17716</refmeta>
17717<refnamediv>
17718 <refname>snd_soc_put_xr_sx</refname>
17719 <refpurpose>
17720     signed multi register get callback
17721 </refpurpose>
17722</refnamediv>
17723<refsynopsisdiv>
17724 <title>Synopsis</title>
17725  <funcsynopsis><funcprototype>
17726   <funcdef>int <function>snd_soc_put_xr_sx </function></funcdef>
17727   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
17728   <paramdef>struct snd_ctl_elem_value * <parameter>ucontrol</parameter></paramdef>
17729  </funcprototype></funcsynopsis>
17730</refsynopsisdiv>
17731<refsect1>
17732 <title>Arguments</title>
17733 <variablelist>
17734  <varlistentry>
17735   <term><parameter>kcontrol</parameter></term>
17736   <listitem>
17737    <para>
17738     mreg control
17739    </para>
17740   </listitem>
17741  </varlistentry>
17742  <varlistentry>
17743   <term><parameter>ucontrol</parameter></term>
17744   <listitem>
17745    <para>
17746     control element information
17747    </para>
17748   </listitem>
17749  </varlistentry>
17750 </variablelist>
17751</refsect1>
17752<refsect1>
17753<title>Description</title>
17754<para>
17755   Callback to set the value of a control that can span
17756   multiple codec registers which together forms a single
17757   signed value in a MSB/LSB manner. The control supports
17758   specifying total no of bits used to allow for bitfields
17759   across the multiple codec registers.
17760   </para><para>
17761
17762   Returns 0 for success.
17763</para>
17764</refsect1>
17765</refentry>
17766
17767<refentry id="API-snd-soc-get-strobe">
17768<refentryinfo>
17769 <title>LINUX</title>
17770 <productname>Kernel Hackers Manual</productname>
17771 <date>July 2017</date>
17772</refentryinfo>
17773<refmeta>
17774 <refentrytitle><phrase>snd_soc_get_strobe</phrase></refentrytitle>
17775 <manvolnum>9</manvolnum>
17776 <refmiscinfo class="version">4.4.14</refmiscinfo>
17777</refmeta>
17778<refnamediv>
17779 <refname>snd_soc_get_strobe</refname>
17780 <refpurpose>
17781     strobe get callback
17782 </refpurpose>
17783</refnamediv>
17784<refsynopsisdiv>
17785 <title>Synopsis</title>
17786  <funcsynopsis><funcprototype>
17787   <funcdef>int <function>snd_soc_get_strobe </function></funcdef>
17788   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
17789   <paramdef>struct snd_ctl_elem_value * <parameter>ucontrol</parameter></paramdef>
17790  </funcprototype></funcsynopsis>
17791</refsynopsisdiv>
17792<refsect1>
17793 <title>Arguments</title>
17794 <variablelist>
17795  <varlistentry>
17796   <term><parameter>kcontrol</parameter></term>
17797   <listitem>
17798    <para>
17799     mixer control
17800    </para>
17801   </listitem>
17802  </varlistentry>
17803  <varlistentry>
17804   <term><parameter>ucontrol</parameter></term>
17805   <listitem>
17806    <para>
17807     control element information
17808    </para>
17809   </listitem>
17810  </varlistentry>
17811 </variablelist>
17812</refsect1>
17813<refsect1>
17814<title>Description</title>
17815<para>
17816   Callback get the value of a strobe mixer control.
17817   </para><para>
17818
17819   Returns 0 for success.
17820</para>
17821</refsect1>
17822</refentry>
17823
17824<refentry id="API-snd-soc-put-strobe">
17825<refentryinfo>
17826 <title>LINUX</title>
17827 <productname>Kernel Hackers Manual</productname>
17828 <date>July 2017</date>
17829</refentryinfo>
17830<refmeta>
17831 <refentrytitle><phrase>snd_soc_put_strobe</phrase></refentrytitle>
17832 <manvolnum>9</manvolnum>
17833 <refmiscinfo class="version">4.4.14</refmiscinfo>
17834</refmeta>
17835<refnamediv>
17836 <refname>snd_soc_put_strobe</refname>
17837 <refpurpose>
17838     strobe put callback
17839 </refpurpose>
17840</refnamediv>
17841<refsynopsisdiv>
17842 <title>Synopsis</title>
17843  <funcsynopsis><funcprototype>
17844   <funcdef>int <function>snd_soc_put_strobe </function></funcdef>
17845   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
17846   <paramdef>struct snd_ctl_elem_value * <parameter>ucontrol</parameter></paramdef>
17847  </funcprototype></funcsynopsis>
17848</refsynopsisdiv>
17849<refsect1>
17850 <title>Arguments</title>
17851 <variablelist>
17852  <varlistentry>
17853   <term><parameter>kcontrol</parameter></term>
17854   <listitem>
17855    <para>
17856     mixer control
17857    </para>
17858   </listitem>
17859  </varlistentry>
17860  <varlistentry>
17861   <term><parameter>ucontrol</parameter></term>
17862   <listitem>
17863    <para>
17864     control element information
17865    </para>
17866   </listitem>
17867  </varlistentry>
17868 </variablelist>
17869</refsect1>
17870<refsect1>
17871<title>Description</title>
17872<para>
17873   Callback strobe a register bit to high then low (or the inverse)
17874   in one pass of a single mixer enum control.
17875   </para><para>
17876
17877   Returns 1 for success.
17878</para>
17879</refsect1>
17880</refentry>
17881
17882<!-- sound/soc/soc-compress.c -->
17883<refentry id="API-snd-soc-new-compress">
17884<refentryinfo>
17885 <title>LINUX</title>
17886 <productname>Kernel Hackers Manual</productname>
17887 <date>July 2017</date>
17888</refentryinfo>
17889<refmeta>
17890 <refentrytitle><phrase>snd_soc_new_compress</phrase></refentrytitle>
17891 <manvolnum>9</manvolnum>
17892 <refmiscinfo class="version">4.4.14</refmiscinfo>
17893</refmeta>
17894<refnamediv>
17895 <refname>snd_soc_new_compress</refname>
17896 <refpurpose>
17897  create a new compress.
17898 </refpurpose>
17899</refnamediv>
17900<refsynopsisdiv>
17901 <title>Synopsis</title>
17902  <funcsynopsis><funcprototype>
17903   <funcdef>int <function>snd_soc_new_compress </function></funcdef>
17904   <paramdef>struct snd_soc_pcm_runtime * <parameter>rtd</parameter></paramdef>
17905   <paramdef>int <parameter>num</parameter></paramdef>
17906  </funcprototype></funcsynopsis>
17907</refsynopsisdiv>
17908<refsect1>
17909 <title>Arguments</title>
17910 <variablelist>
17911  <varlistentry>
17912   <term><parameter>rtd</parameter></term>
17913   <listitem>
17914    <para>
17915     The runtime for which we will create compress
17916    </para>
17917   </listitem>
17918  </varlistentry>
17919  <varlistentry>
17920   <term><parameter>num</parameter></term>
17921   <listitem>
17922    <para>
17923     the device index number (zero based - shared with normal PCMs)
17924    </para>
17925   </listitem>
17926  </varlistentry>
17927 </variablelist>
17928</refsect1>
17929<refsect1>
17930<title>Return</title>
17931<para>
17932   0 for success, else error.
17933</para>
17934</refsect1>
17935</refentry>
17936
17937     </sect1>
17938     <sect1><title>ASoC DAPM API</title>
17939<!-- sound/soc/soc-dapm.c -->
17940<refentry id="API-snd-soc-dapm-kcontrol-widget">
17941<refentryinfo>
17942 <title>LINUX</title>
17943 <productname>Kernel Hackers Manual</productname>
17944 <date>July 2017</date>
17945</refentryinfo>
17946<refmeta>
17947 <refentrytitle><phrase>snd_soc_dapm_kcontrol_widget</phrase></refentrytitle>
17948 <manvolnum>9</manvolnum>
17949 <refmiscinfo class="version">4.4.14</refmiscinfo>
17950</refmeta>
17951<refnamediv>
17952 <refname>snd_soc_dapm_kcontrol_widget</refname>
17953 <refpurpose>
17954  Returns the widget associated to a kcontrol
17955 </refpurpose>
17956</refnamediv>
17957<refsynopsisdiv>
17958 <title>Synopsis</title>
17959  <funcsynopsis><funcprototype>
17960   <funcdef>struct snd_soc_dapm_widget * <function>snd_soc_dapm_kcontrol_widget </function></funcdef>
17961   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
17962  </funcprototype></funcsynopsis>
17963</refsynopsisdiv>
17964<refsect1>
17965 <title>Arguments</title>
17966 <variablelist>
17967  <varlistentry>
17968   <term><parameter>kcontrol</parameter></term>
17969   <listitem>
17970    <para>
17971     The kcontrol
17972    </para>
17973   </listitem>
17974  </varlistentry>
17975 </variablelist>
17976</refsect1>
17977</refentry>
17978
17979<refentry id="API-snd-soc-dapm-kcontrol-dapm">
17980<refentryinfo>
17981 <title>LINUX</title>
17982 <productname>Kernel Hackers Manual</productname>
17983 <date>July 2017</date>
17984</refentryinfo>
17985<refmeta>
17986 <refentrytitle><phrase>snd_soc_dapm_kcontrol_dapm</phrase></refentrytitle>
17987 <manvolnum>9</manvolnum>
17988 <refmiscinfo class="version">4.4.14</refmiscinfo>
17989</refmeta>
17990<refnamediv>
17991 <refname>snd_soc_dapm_kcontrol_dapm</refname>
17992 <refpurpose>
17993     Returns the dapm context associated to a kcontrol
17994 </refpurpose>
17995</refnamediv>
17996<refsynopsisdiv>
17997 <title>Synopsis</title>
17998  <funcsynopsis><funcprototype>
17999   <funcdef>struct snd_soc_dapm_context * <function>snd_soc_dapm_kcontrol_dapm </function></funcdef>
18000   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
18001  </funcprototype></funcsynopsis>
18002</refsynopsisdiv>
18003<refsect1>
18004 <title>Arguments</title>
18005 <variablelist>
18006  <varlistentry>
18007   <term><parameter>kcontrol</parameter></term>
18008   <listitem>
18009    <para>
18010     The kcontrol
18011    </para>
18012   </listitem>
18013  </varlistentry>
18014 </variablelist>
18015</refsect1>
18016<refsect1>
18017<title>Note</title>
18018<para>
18019   This function must only be used on kcontrols that are known to have
18020   been registered for a CODEC. Otherwise the behaviour is undefined.
18021</para>
18022</refsect1>
18023</refentry>
18024
18025<refentry id="API-snd-soc-dapm-force-bias-level">
18026<refentryinfo>
18027 <title>LINUX</title>
18028 <productname>Kernel Hackers Manual</productname>
18029 <date>July 2017</date>
18030</refentryinfo>
18031<refmeta>
18032 <refentrytitle><phrase>snd_soc_dapm_force_bias_level</phrase></refentrytitle>
18033 <manvolnum>9</manvolnum>
18034 <refmiscinfo class="version">4.4.14</refmiscinfo>
18035</refmeta>
18036<refnamediv>
18037 <refname>snd_soc_dapm_force_bias_level</refname>
18038 <refpurpose>
18039     Sets the DAPM bias level
18040 </refpurpose>
18041</refnamediv>
18042<refsynopsisdiv>
18043 <title>Synopsis</title>
18044  <funcsynopsis><funcprototype>
18045   <funcdef>int <function>snd_soc_dapm_force_bias_level </function></funcdef>
18046   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
18047   <paramdef>enum snd_soc_bias_level <parameter>level</parameter></paramdef>
18048  </funcprototype></funcsynopsis>
18049</refsynopsisdiv>
18050<refsect1>
18051 <title>Arguments</title>
18052 <variablelist>
18053  <varlistentry>
18054   <term><parameter>dapm</parameter></term>
18055   <listitem>
18056    <para>
18057     The DAPM context for which to set the level
18058    </para>
18059   </listitem>
18060  </varlistentry>
18061  <varlistentry>
18062   <term><parameter>level</parameter></term>
18063   <listitem>
18064    <para>
18065     The level to set
18066    </para>
18067   </listitem>
18068  </varlistentry>
18069 </variablelist>
18070</refsect1>
18071<refsect1>
18072<title>Description</title>
18073<para>
18074   Forces the DAPM bias level to a specific state. It will call the bias level
18075   callback of DAPM context with the specified level. This will even happen if
18076   the context is already at the same level. Furthermore it will not go through
18077   the normal bias level sequencing, meaning any intermediate states between the
18078   current and the target state will not be entered.
18079   </para><para>
18080
18081   Note that the change in bias level is only temporary and the next time
18082   <function>snd_soc_dapm_sync</function> is called the state will be set to the level as
18083   determined by the DAPM core. The function is mainly intended to be used to
18084   used during probe or resume from suspend to power up the device so
18085   initialization can be done, before the DAPM core takes over.
18086</para>
18087</refsect1>
18088</refentry>
18089
18090<refentry id="API-snd-soc-dapm-sync-unlocked">
18091<refentryinfo>
18092 <title>LINUX</title>
18093 <productname>Kernel Hackers Manual</productname>
18094 <date>July 2017</date>
18095</refentryinfo>
18096<refmeta>
18097 <refentrytitle><phrase>snd_soc_dapm_sync_unlocked</phrase></refentrytitle>
18098 <manvolnum>9</manvolnum>
18099 <refmiscinfo class="version">4.4.14</refmiscinfo>
18100</refmeta>
18101<refnamediv>
18102 <refname>snd_soc_dapm_sync_unlocked</refname>
18103 <refpurpose>
18104     scan and power dapm paths
18105 </refpurpose>
18106</refnamediv>
18107<refsynopsisdiv>
18108 <title>Synopsis</title>
18109  <funcsynopsis><funcprototype>
18110   <funcdef>int <function>snd_soc_dapm_sync_unlocked </function></funcdef>
18111   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
18112  </funcprototype></funcsynopsis>
18113</refsynopsisdiv>
18114<refsect1>
18115 <title>Arguments</title>
18116 <variablelist>
18117  <varlistentry>
18118   <term><parameter>dapm</parameter></term>
18119   <listitem>
18120    <para>
18121     DAPM context
18122    </para>
18123   </listitem>
18124  </varlistentry>
18125 </variablelist>
18126</refsect1>
18127<refsect1>
18128<title>Description</title>
18129<para>
18130   Walks all dapm audio paths and powers widgets according to their
18131   stream or path usage.
18132   </para><para>
18133
18134   Requires external locking.
18135   </para><para>
18136
18137   Returns 0 for success.
18138</para>
18139</refsect1>
18140</refentry>
18141
18142<refentry id="API-snd-soc-dapm-sync">
18143<refentryinfo>
18144 <title>LINUX</title>
18145 <productname>Kernel Hackers Manual</productname>
18146 <date>July 2017</date>
18147</refentryinfo>
18148<refmeta>
18149 <refentrytitle><phrase>snd_soc_dapm_sync</phrase></refentrytitle>
18150 <manvolnum>9</manvolnum>
18151 <refmiscinfo class="version">4.4.14</refmiscinfo>
18152</refmeta>
18153<refnamediv>
18154 <refname>snd_soc_dapm_sync</refname>
18155 <refpurpose>
18156     scan and power dapm paths
18157 </refpurpose>
18158</refnamediv>
18159<refsynopsisdiv>
18160 <title>Synopsis</title>
18161  <funcsynopsis><funcprototype>
18162   <funcdef>int <function>snd_soc_dapm_sync </function></funcdef>
18163   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
18164  </funcprototype></funcsynopsis>
18165</refsynopsisdiv>
18166<refsect1>
18167 <title>Arguments</title>
18168 <variablelist>
18169  <varlistentry>
18170   <term><parameter>dapm</parameter></term>
18171   <listitem>
18172    <para>
18173     DAPM context
18174    </para>
18175   </listitem>
18176  </varlistentry>
18177 </variablelist>
18178</refsect1>
18179<refsect1>
18180<title>Description</title>
18181<para>
18182   Walks all dapm audio paths and powers widgets according to their
18183   stream or path usage.
18184   </para><para>
18185
18186   Returns 0 for success.
18187</para>
18188</refsect1>
18189</refentry>
18190
18191<refentry id="API-snd-soc-dapm-add-routes">
18192<refentryinfo>
18193 <title>LINUX</title>
18194 <productname>Kernel Hackers Manual</productname>
18195 <date>July 2017</date>
18196</refentryinfo>
18197<refmeta>
18198 <refentrytitle><phrase>snd_soc_dapm_add_routes</phrase></refentrytitle>
18199 <manvolnum>9</manvolnum>
18200 <refmiscinfo class="version">4.4.14</refmiscinfo>
18201</refmeta>
18202<refnamediv>
18203 <refname>snd_soc_dapm_add_routes</refname>
18204 <refpurpose>
18205     Add routes between DAPM widgets
18206 </refpurpose>
18207</refnamediv>
18208<refsynopsisdiv>
18209 <title>Synopsis</title>
18210  <funcsynopsis><funcprototype>
18211   <funcdef>int <function>snd_soc_dapm_add_routes </function></funcdef>
18212   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
18213   <paramdef>const struct snd_soc_dapm_route * <parameter>route</parameter></paramdef>
18214   <paramdef>int <parameter>num</parameter></paramdef>
18215  </funcprototype></funcsynopsis>
18216</refsynopsisdiv>
18217<refsect1>
18218 <title>Arguments</title>
18219 <variablelist>
18220  <varlistentry>
18221   <term><parameter>dapm</parameter></term>
18222   <listitem>
18223    <para>
18224     DAPM context
18225    </para>
18226   </listitem>
18227  </varlistentry>
18228  <varlistentry>
18229   <term><parameter>route</parameter></term>
18230   <listitem>
18231    <para>
18232     audio routes
18233    </para>
18234   </listitem>
18235  </varlistentry>
18236  <varlistentry>
18237   <term><parameter>num</parameter></term>
18238   <listitem>
18239    <para>
18240     number of routes
18241    </para>
18242   </listitem>
18243  </varlistentry>
18244 </variablelist>
18245</refsect1>
18246<refsect1>
18247<title>Description</title>
18248<para>
18249   Connects 2 dapm widgets together via a named audio path. The sink is
18250   the widget receiving the audio signal, whilst the source is the sender
18251   of the audio signal.
18252   </para><para>
18253
18254   Returns 0 for success else error. On error all resources can be freed
18255   with a call to <function>snd_soc_card_free</function>.
18256</para>
18257</refsect1>
18258</refentry>
18259
18260<refentry id="API-snd-soc-dapm-del-routes">
18261<refentryinfo>
18262 <title>LINUX</title>
18263 <productname>Kernel Hackers Manual</productname>
18264 <date>July 2017</date>
18265</refentryinfo>
18266<refmeta>
18267 <refentrytitle><phrase>snd_soc_dapm_del_routes</phrase></refentrytitle>
18268 <manvolnum>9</manvolnum>
18269 <refmiscinfo class="version">4.4.14</refmiscinfo>
18270</refmeta>
18271<refnamediv>
18272 <refname>snd_soc_dapm_del_routes</refname>
18273 <refpurpose>
18274     Remove routes between DAPM widgets
18275 </refpurpose>
18276</refnamediv>
18277<refsynopsisdiv>
18278 <title>Synopsis</title>
18279  <funcsynopsis><funcprototype>
18280   <funcdef>int <function>snd_soc_dapm_del_routes </function></funcdef>
18281   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
18282   <paramdef>const struct snd_soc_dapm_route * <parameter>route</parameter></paramdef>
18283   <paramdef>int <parameter>num</parameter></paramdef>
18284  </funcprototype></funcsynopsis>
18285</refsynopsisdiv>
18286<refsect1>
18287 <title>Arguments</title>
18288 <variablelist>
18289  <varlistentry>
18290   <term><parameter>dapm</parameter></term>
18291   <listitem>
18292    <para>
18293     DAPM context
18294    </para>
18295   </listitem>
18296  </varlistentry>
18297  <varlistentry>
18298   <term><parameter>route</parameter></term>
18299   <listitem>
18300    <para>
18301     audio routes
18302    </para>
18303   </listitem>
18304  </varlistentry>
18305  <varlistentry>
18306   <term><parameter>num</parameter></term>
18307   <listitem>
18308    <para>
18309     number of routes
18310    </para>
18311   </listitem>
18312  </varlistentry>
18313 </variablelist>
18314</refsect1>
18315<refsect1>
18316<title>Description</title>
18317<para>
18318   Removes routes from the DAPM context.
18319</para>
18320</refsect1>
18321</refentry>
18322
18323<refentry id="API-snd-soc-dapm-weak-routes">
18324<refentryinfo>
18325 <title>LINUX</title>
18326 <productname>Kernel Hackers Manual</productname>
18327 <date>July 2017</date>
18328</refentryinfo>
18329<refmeta>
18330 <refentrytitle><phrase>snd_soc_dapm_weak_routes</phrase></refentrytitle>
18331 <manvolnum>9</manvolnum>
18332 <refmiscinfo class="version">4.4.14</refmiscinfo>
18333</refmeta>
18334<refnamediv>
18335 <refname>snd_soc_dapm_weak_routes</refname>
18336 <refpurpose>
18337     Mark routes between DAPM widgets as weak
18338 </refpurpose>
18339</refnamediv>
18340<refsynopsisdiv>
18341 <title>Synopsis</title>
18342  <funcsynopsis><funcprototype>
18343   <funcdef>int <function>snd_soc_dapm_weak_routes </function></funcdef>
18344   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
18345   <paramdef>const struct snd_soc_dapm_route * <parameter>route</parameter></paramdef>
18346   <paramdef>int <parameter>num</parameter></paramdef>
18347  </funcprototype></funcsynopsis>
18348</refsynopsisdiv>
18349<refsect1>
18350 <title>Arguments</title>
18351 <variablelist>
18352  <varlistentry>
18353   <term><parameter>dapm</parameter></term>
18354   <listitem>
18355    <para>
18356     DAPM context
18357    </para>
18358   </listitem>
18359  </varlistentry>
18360  <varlistentry>
18361   <term><parameter>route</parameter></term>
18362   <listitem>
18363    <para>
18364     audio routes
18365    </para>
18366   </listitem>
18367  </varlistentry>
18368  <varlistentry>
18369   <term><parameter>num</parameter></term>
18370   <listitem>
18371    <para>
18372     number of routes
18373    </para>
18374   </listitem>
18375  </varlistentry>
18376 </variablelist>
18377</refsect1>
18378<refsect1>
18379<title>Description</title>
18380<para>
18381   Mark existing routes matching those specified in the passed array
18382   as being weak, meaning that they are ignored for the purpose of
18383   power decisions.  The main intended use case is for sidetone paths
18384   which couple audio between other independent paths if they are both
18385   active in order to make the combination work better at the user
18386   level but which aren't intended to be <quote>used</quote>.
18387   </para><para>
18388
18389   Note that CODEC drivers should not use this as sidetone type paths
18390   can frequently also be used as bypass paths.
18391</para>
18392</refsect1>
18393</refentry>
18394
18395<refentry id="API-snd-soc-dapm-new-widgets">
18396<refentryinfo>
18397 <title>LINUX</title>
18398 <productname>Kernel Hackers Manual</productname>
18399 <date>July 2017</date>
18400</refentryinfo>
18401<refmeta>
18402 <refentrytitle><phrase>snd_soc_dapm_new_widgets</phrase></refentrytitle>
18403 <manvolnum>9</manvolnum>
18404 <refmiscinfo class="version">4.4.14</refmiscinfo>
18405</refmeta>
18406<refnamediv>
18407 <refname>snd_soc_dapm_new_widgets</refname>
18408 <refpurpose>
18409     add new dapm widgets
18410 </refpurpose>
18411</refnamediv>
18412<refsynopsisdiv>
18413 <title>Synopsis</title>
18414  <funcsynopsis><funcprototype>
18415   <funcdef>int <function>snd_soc_dapm_new_widgets </function></funcdef>
18416   <paramdef>struct snd_soc_card * <parameter>card</parameter></paramdef>
18417  </funcprototype></funcsynopsis>
18418</refsynopsisdiv>
18419<refsect1>
18420 <title>Arguments</title>
18421 <variablelist>
18422  <varlistentry>
18423   <term><parameter>card</parameter></term>
18424   <listitem>
18425    <para>
18426     card to be checked for new dapm widgets
18427    </para>
18428   </listitem>
18429  </varlistentry>
18430 </variablelist>
18431</refsect1>
18432<refsect1>
18433<title>Description</title>
18434<para>
18435   Checks the codec for any new dapm widgets and creates them if found.
18436   </para><para>
18437
18438   Returns 0 for success.
18439</para>
18440</refsect1>
18441</refentry>
18442
18443<refentry id="API-snd-soc-dapm-get-volsw">
18444<refentryinfo>
18445 <title>LINUX</title>
18446 <productname>Kernel Hackers Manual</productname>
18447 <date>July 2017</date>
18448</refentryinfo>
18449<refmeta>
18450 <refentrytitle><phrase>snd_soc_dapm_get_volsw</phrase></refentrytitle>
18451 <manvolnum>9</manvolnum>
18452 <refmiscinfo class="version">4.4.14</refmiscinfo>
18453</refmeta>
18454<refnamediv>
18455 <refname>snd_soc_dapm_get_volsw</refname>
18456 <refpurpose>
18457     dapm mixer get callback
18458 </refpurpose>
18459</refnamediv>
18460<refsynopsisdiv>
18461 <title>Synopsis</title>
18462  <funcsynopsis><funcprototype>
18463   <funcdef>int <function>snd_soc_dapm_get_volsw </function></funcdef>
18464   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
18465   <paramdef>struct snd_ctl_elem_value * <parameter>ucontrol</parameter></paramdef>
18466  </funcprototype></funcsynopsis>
18467</refsynopsisdiv>
18468<refsect1>
18469 <title>Arguments</title>
18470 <variablelist>
18471  <varlistentry>
18472   <term><parameter>kcontrol</parameter></term>
18473   <listitem>
18474    <para>
18475     mixer control
18476    </para>
18477   </listitem>
18478  </varlistentry>
18479  <varlistentry>
18480   <term><parameter>ucontrol</parameter></term>
18481   <listitem>
18482    <para>
18483     control element information
18484    </para>
18485   </listitem>
18486  </varlistentry>
18487 </variablelist>
18488</refsect1>
18489<refsect1>
18490<title>Description</title>
18491<para>
18492   Callback to get the value of a dapm mixer control.
18493   </para><para>
18494
18495   Returns 0 for success.
18496</para>
18497</refsect1>
18498</refentry>
18499
18500<refentry id="API-snd-soc-dapm-put-volsw">
18501<refentryinfo>
18502 <title>LINUX</title>
18503 <productname>Kernel Hackers Manual</productname>
18504 <date>July 2017</date>
18505</refentryinfo>
18506<refmeta>
18507 <refentrytitle><phrase>snd_soc_dapm_put_volsw</phrase></refentrytitle>
18508 <manvolnum>9</manvolnum>
18509 <refmiscinfo class="version">4.4.14</refmiscinfo>
18510</refmeta>
18511<refnamediv>
18512 <refname>snd_soc_dapm_put_volsw</refname>
18513 <refpurpose>
18514     dapm mixer set callback
18515 </refpurpose>
18516</refnamediv>
18517<refsynopsisdiv>
18518 <title>Synopsis</title>
18519  <funcsynopsis><funcprototype>
18520   <funcdef>int <function>snd_soc_dapm_put_volsw </function></funcdef>
18521   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
18522   <paramdef>struct snd_ctl_elem_value * <parameter>ucontrol</parameter></paramdef>
18523  </funcprototype></funcsynopsis>
18524</refsynopsisdiv>
18525<refsect1>
18526 <title>Arguments</title>
18527 <variablelist>
18528  <varlistentry>
18529   <term><parameter>kcontrol</parameter></term>
18530   <listitem>
18531    <para>
18532     mixer control
18533    </para>
18534   </listitem>
18535  </varlistentry>
18536  <varlistentry>
18537   <term><parameter>ucontrol</parameter></term>
18538   <listitem>
18539    <para>
18540     control element information
18541    </para>
18542   </listitem>
18543  </varlistentry>
18544 </variablelist>
18545</refsect1>
18546<refsect1>
18547<title>Description</title>
18548<para>
18549   Callback to set the value of a dapm mixer control.
18550   </para><para>
18551
18552   Returns 0 for success.
18553</para>
18554</refsect1>
18555</refentry>
18556
18557<refentry id="API-snd-soc-dapm-get-enum-double">
18558<refentryinfo>
18559 <title>LINUX</title>
18560 <productname>Kernel Hackers Manual</productname>
18561 <date>July 2017</date>
18562</refentryinfo>
18563<refmeta>
18564 <refentrytitle><phrase>snd_soc_dapm_get_enum_double</phrase></refentrytitle>
18565 <manvolnum>9</manvolnum>
18566 <refmiscinfo class="version">4.4.14</refmiscinfo>
18567</refmeta>
18568<refnamediv>
18569 <refname>snd_soc_dapm_get_enum_double</refname>
18570 <refpurpose>
18571     dapm enumerated double mixer get callback
18572 </refpurpose>
18573</refnamediv>
18574<refsynopsisdiv>
18575 <title>Synopsis</title>
18576  <funcsynopsis><funcprototype>
18577   <funcdef>int <function>snd_soc_dapm_get_enum_double </function></funcdef>
18578   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
18579   <paramdef>struct snd_ctl_elem_value * <parameter>ucontrol</parameter></paramdef>
18580  </funcprototype></funcsynopsis>
18581</refsynopsisdiv>
18582<refsect1>
18583 <title>Arguments</title>
18584 <variablelist>
18585  <varlistentry>
18586   <term><parameter>kcontrol</parameter></term>
18587   <listitem>
18588    <para>
18589     mixer control
18590    </para>
18591   </listitem>
18592  </varlistentry>
18593  <varlistentry>
18594   <term><parameter>ucontrol</parameter></term>
18595   <listitem>
18596    <para>
18597     control element information
18598    </para>
18599   </listitem>
18600  </varlistentry>
18601 </variablelist>
18602</refsect1>
18603<refsect1>
18604<title>Description</title>
18605<para>
18606   Callback to get the value of a dapm enumerated double mixer control.
18607   </para><para>
18608
18609   Returns 0 for success.
18610</para>
18611</refsect1>
18612</refentry>
18613
18614<refentry id="API-snd-soc-dapm-put-enum-double">
18615<refentryinfo>
18616 <title>LINUX</title>
18617 <productname>Kernel Hackers Manual</productname>
18618 <date>July 2017</date>
18619</refentryinfo>
18620<refmeta>
18621 <refentrytitle><phrase>snd_soc_dapm_put_enum_double</phrase></refentrytitle>
18622 <manvolnum>9</manvolnum>
18623 <refmiscinfo class="version">4.4.14</refmiscinfo>
18624</refmeta>
18625<refnamediv>
18626 <refname>snd_soc_dapm_put_enum_double</refname>
18627 <refpurpose>
18628     dapm enumerated double mixer set callback
18629 </refpurpose>
18630</refnamediv>
18631<refsynopsisdiv>
18632 <title>Synopsis</title>
18633  <funcsynopsis><funcprototype>
18634   <funcdef>int <function>snd_soc_dapm_put_enum_double </function></funcdef>
18635   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
18636   <paramdef>struct snd_ctl_elem_value * <parameter>ucontrol</parameter></paramdef>
18637  </funcprototype></funcsynopsis>
18638</refsynopsisdiv>
18639<refsect1>
18640 <title>Arguments</title>
18641 <variablelist>
18642  <varlistentry>
18643   <term><parameter>kcontrol</parameter></term>
18644   <listitem>
18645    <para>
18646     mixer control
18647    </para>
18648   </listitem>
18649  </varlistentry>
18650  <varlistentry>
18651   <term><parameter>ucontrol</parameter></term>
18652   <listitem>
18653    <para>
18654     control element information
18655    </para>
18656   </listitem>
18657  </varlistentry>
18658 </variablelist>
18659</refsect1>
18660<refsect1>
18661<title>Description</title>
18662<para>
18663   Callback to set the value of a dapm enumerated double mixer control.
18664   </para><para>
18665
18666   Returns 0 for success.
18667</para>
18668</refsect1>
18669</refentry>
18670
18671<refentry id="API-snd-soc-dapm-info-pin-switch">
18672<refentryinfo>
18673 <title>LINUX</title>
18674 <productname>Kernel Hackers Manual</productname>
18675 <date>July 2017</date>
18676</refentryinfo>
18677<refmeta>
18678 <refentrytitle><phrase>snd_soc_dapm_info_pin_switch</phrase></refentrytitle>
18679 <manvolnum>9</manvolnum>
18680 <refmiscinfo class="version">4.4.14</refmiscinfo>
18681</refmeta>
18682<refnamediv>
18683 <refname>snd_soc_dapm_info_pin_switch</refname>
18684 <refpurpose>
18685     Info for a pin switch
18686 </refpurpose>
18687</refnamediv>
18688<refsynopsisdiv>
18689 <title>Synopsis</title>
18690  <funcsynopsis><funcprototype>
18691   <funcdef>int <function>snd_soc_dapm_info_pin_switch </function></funcdef>
18692   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
18693   <paramdef>struct snd_ctl_elem_info * <parameter>uinfo</parameter></paramdef>
18694  </funcprototype></funcsynopsis>
18695</refsynopsisdiv>
18696<refsect1>
18697 <title>Arguments</title>
18698 <variablelist>
18699  <varlistentry>
18700   <term><parameter>kcontrol</parameter></term>
18701   <listitem>
18702    <para>
18703     mixer control
18704    </para>
18705   </listitem>
18706  </varlistentry>
18707  <varlistentry>
18708   <term><parameter>uinfo</parameter></term>
18709   <listitem>
18710    <para>
18711     control element information
18712    </para>
18713   </listitem>
18714  </varlistentry>
18715 </variablelist>
18716</refsect1>
18717<refsect1>
18718<title>Description</title>
18719<para>
18720   Callback to provide information about a pin switch control.
18721</para>
18722</refsect1>
18723</refentry>
18724
18725<refentry id="API-snd-soc-dapm-get-pin-switch">
18726<refentryinfo>
18727 <title>LINUX</title>
18728 <productname>Kernel Hackers Manual</productname>
18729 <date>July 2017</date>
18730</refentryinfo>
18731<refmeta>
18732 <refentrytitle><phrase>snd_soc_dapm_get_pin_switch</phrase></refentrytitle>
18733 <manvolnum>9</manvolnum>
18734 <refmiscinfo class="version">4.4.14</refmiscinfo>
18735</refmeta>
18736<refnamediv>
18737 <refname>snd_soc_dapm_get_pin_switch</refname>
18738 <refpurpose>
18739     Get information for a pin switch
18740 </refpurpose>
18741</refnamediv>
18742<refsynopsisdiv>
18743 <title>Synopsis</title>
18744  <funcsynopsis><funcprototype>
18745   <funcdef>int <function>snd_soc_dapm_get_pin_switch </function></funcdef>
18746   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
18747   <paramdef>struct snd_ctl_elem_value * <parameter>ucontrol</parameter></paramdef>
18748  </funcprototype></funcsynopsis>
18749</refsynopsisdiv>
18750<refsect1>
18751 <title>Arguments</title>
18752 <variablelist>
18753  <varlistentry>
18754   <term><parameter>kcontrol</parameter></term>
18755   <listitem>
18756    <para>
18757     mixer control
18758    </para>
18759   </listitem>
18760  </varlistentry>
18761  <varlistentry>
18762   <term><parameter>ucontrol</parameter></term>
18763   <listitem>
18764    <para>
18765     Value
18766    </para>
18767   </listitem>
18768  </varlistentry>
18769 </variablelist>
18770</refsect1>
18771</refentry>
18772
18773<refentry id="API-snd-soc-dapm-put-pin-switch">
18774<refentryinfo>
18775 <title>LINUX</title>
18776 <productname>Kernel Hackers Manual</productname>
18777 <date>July 2017</date>
18778</refentryinfo>
18779<refmeta>
18780 <refentrytitle><phrase>snd_soc_dapm_put_pin_switch</phrase></refentrytitle>
18781 <manvolnum>9</manvolnum>
18782 <refmiscinfo class="version">4.4.14</refmiscinfo>
18783</refmeta>
18784<refnamediv>
18785 <refname>snd_soc_dapm_put_pin_switch</refname>
18786 <refpurpose>
18787     Set information for a pin switch
18788 </refpurpose>
18789</refnamediv>
18790<refsynopsisdiv>
18791 <title>Synopsis</title>
18792  <funcsynopsis><funcprototype>
18793   <funcdef>int <function>snd_soc_dapm_put_pin_switch </function></funcdef>
18794   <paramdef>struct snd_kcontrol * <parameter>kcontrol</parameter></paramdef>
18795   <paramdef>struct snd_ctl_elem_value * <parameter>ucontrol</parameter></paramdef>
18796  </funcprototype></funcsynopsis>
18797</refsynopsisdiv>
18798<refsect1>
18799 <title>Arguments</title>
18800 <variablelist>
18801  <varlistentry>
18802   <term><parameter>kcontrol</parameter></term>
18803   <listitem>
18804    <para>
18805     mixer control
18806    </para>
18807   </listitem>
18808  </varlistentry>
18809  <varlistentry>
18810   <term><parameter>ucontrol</parameter></term>
18811   <listitem>
18812    <para>
18813     Value
18814    </para>
18815   </listitem>
18816  </varlistentry>
18817 </variablelist>
18818</refsect1>
18819</refentry>
18820
18821<refentry id="API-snd-soc-dapm-new-controls">
18822<refentryinfo>
18823 <title>LINUX</title>
18824 <productname>Kernel Hackers Manual</productname>
18825 <date>July 2017</date>
18826</refentryinfo>
18827<refmeta>
18828 <refentrytitle><phrase>snd_soc_dapm_new_controls</phrase></refentrytitle>
18829 <manvolnum>9</manvolnum>
18830 <refmiscinfo class="version">4.4.14</refmiscinfo>
18831</refmeta>
18832<refnamediv>
18833 <refname>snd_soc_dapm_new_controls</refname>
18834 <refpurpose>
18835     create new dapm controls
18836 </refpurpose>
18837</refnamediv>
18838<refsynopsisdiv>
18839 <title>Synopsis</title>
18840  <funcsynopsis><funcprototype>
18841   <funcdef>int <function>snd_soc_dapm_new_controls </function></funcdef>
18842   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
18843   <paramdef>const struct snd_soc_dapm_widget * <parameter>widget</parameter></paramdef>
18844   <paramdef>int <parameter>num</parameter></paramdef>
18845  </funcprototype></funcsynopsis>
18846</refsynopsisdiv>
18847<refsect1>
18848 <title>Arguments</title>
18849 <variablelist>
18850  <varlistentry>
18851   <term><parameter>dapm</parameter></term>
18852   <listitem>
18853    <para>
18854     DAPM context
18855    </para>
18856   </listitem>
18857  </varlistentry>
18858  <varlistentry>
18859   <term><parameter>widget</parameter></term>
18860   <listitem>
18861    <para>
18862     widget array
18863    </para>
18864   </listitem>
18865  </varlistentry>
18866  <varlistentry>
18867   <term><parameter>num</parameter></term>
18868   <listitem>
18869    <para>
18870     number of widgets
18871    </para>
18872   </listitem>
18873  </varlistentry>
18874 </variablelist>
18875</refsect1>
18876<refsect1>
18877<title>Description</title>
18878<para>
18879   Creates new DAPM controls based upon the templates.
18880   </para><para>
18881
18882   Returns 0 for success else error.
18883</para>
18884</refsect1>
18885</refentry>
18886
18887<refentry id="API-snd-soc-dapm-enable-pin-unlocked">
18888<refentryinfo>
18889 <title>LINUX</title>
18890 <productname>Kernel Hackers Manual</productname>
18891 <date>July 2017</date>
18892</refentryinfo>
18893<refmeta>
18894 <refentrytitle><phrase>snd_soc_dapm_enable_pin_unlocked</phrase></refentrytitle>
18895 <manvolnum>9</manvolnum>
18896 <refmiscinfo class="version">4.4.14</refmiscinfo>
18897</refmeta>
18898<refnamediv>
18899 <refname>snd_soc_dapm_enable_pin_unlocked</refname>
18900 <refpurpose>
18901     enable pin.
18902 </refpurpose>
18903</refnamediv>
18904<refsynopsisdiv>
18905 <title>Synopsis</title>
18906  <funcsynopsis><funcprototype>
18907   <funcdef>int <function>snd_soc_dapm_enable_pin_unlocked </function></funcdef>
18908   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
18909   <paramdef>const char * <parameter>pin</parameter></paramdef>
18910  </funcprototype></funcsynopsis>
18911</refsynopsisdiv>
18912<refsect1>
18913 <title>Arguments</title>
18914 <variablelist>
18915  <varlistentry>
18916   <term><parameter>dapm</parameter></term>
18917   <listitem>
18918    <para>
18919     DAPM context
18920    </para>
18921   </listitem>
18922  </varlistentry>
18923  <varlistentry>
18924   <term><parameter>pin</parameter></term>
18925   <listitem>
18926    <para>
18927     pin name
18928    </para>
18929   </listitem>
18930  </varlistentry>
18931 </variablelist>
18932</refsect1>
18933<refsect1>
18934<title>Description</title>
18935<para>
18936   Enables input/output pin and its parents or children widgets iff there is
18937   a valid audio route and active audio stream.
18938   </para><para>
18939
18940   Requires external locking.
18941</para>
18942</refsect1>
18943<refsect1>
18944<title>NOTE</title>
18945<para>
18946   <function>snd_soc_dapm_sync</function> needs to be called after this for DAPM to
18947   do any widget power switching.
18948</para>
18949</refsect1>
18950</refentry>
18951
18952<refentry id="API-snd-soc-dapm-enable-pin">
18953<refentryinfo>
18954 <title>LINUX</title>
18955 <productname>Kernel Hackers Manual</productname>
18956 <date>July 2017</date>
18957</refentryinfo>
18958<refmeta>
18959 <refentrytitle><phrase>snd_soc_dapm_enable_pin</phrase></refentrytitle>
18960 <manvolnum>9</manvolnum>
18961 <refmiscinfo class="version">4.4.14</refmiscinfo>
18962</refmeta>
18963<refnamediv>
18964 <refname>snd_soc_dapm_enable_pin</refname>
18965 <refpurpose>
18966     enable pin.
18967 </refpurpose>
18968</refnamediv>
18969<refsynopsisdiv>
18970 <title>Synopsis</title>
18971  <funcsynopsis><funcprototype>
18972   <funcdef>int <function>snd_soc_dapm_enable_pin </function></funcdef>
18973   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
18974   <paramdef>const char * <parameter>pin</parameter></paramdef>
18975  </funcprototype></funcsynopsis>
18976</refsynopsisdiv>
18977<refsect1>
18978 <title>Arguments</title>
18979 <variablelist>
18980  <varlistentry>
18981   <term><parameter>dapm</parameter></term>
18982   <listitem>
18983    <para>
18984     DAPM context
18985    </para>
18986   </listitem>
18987  </varlistentry>
18988  <varlistentry>
18989   <term><parameter>pin</parameter></term>
18990   <listitem>
18991    <para>
18992     pin name
18993    </para>
18994   </listitem>
18995  </varlistentry>
18996 </variablelist>
18997</refsect1>
18998<refsect1>
18999<title>Description</title>
19000<para>
19001   Enables input/output pin and its parents or children widgets iff there is
19002   a valid audio route and active audio stream.
19003</para>
19004</refsect1>
19005<refsect1>
19006<title>NOTE</title>
19007<para>
19008   <function>snd_soc_dapm_sync</function> needs to be called after this for DAPM to
19009   do any widget power switching.
19010</para>
19011</refsect1>
19012</refentry>
19013
19014<refentry id="API-snd-soc-dapm-force-enable-pin-unlocked">
19015<refentryinfo>
19016 <title>LINUX</title>
19017 <productname>Kernel Hackers Manual</productname>
19018 <date>July 2017</date>
19019</refentryinfo>
19020<refmeta>
19021 <refentrytitle><phrase>snd_soc_dapm_force_enable_pin_unlocked</phrase></refentrytitle>
19022 <manvolnum>9</manvolnum>
19023 <refmiscinfo class="version">4.4.14</refmiscinfo>
19024</refmeta>
19025<refnamediv>
19026 <refname>snd_soc_dapm_force_enable_pin_unlocked</refname>
19027 <refpurpose>
19028     force a pin to be enabled
19029 </refpurpose>
19030</refnamediv>
19031<refsynopsisdiv>
19032 <title>Synopsis</title>
19033  <funcsynopsis><funcprototype>
19034   <funcdef>int <function>snd_soc_dapm_force_enable_pin_unlocked </function></funcdef>
19035   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
19036   <paramdef>const char * <parameter>pin</parameter></paramdef>
19037  </funcprototype></funcsynopsis>
19038</refsynopsisdiv>
19039<refsect1>
19040 <title>Arguments</title>
19041 <variablelist>
19042  <varlistentry>
19043   <term><parameter>dapm</parameter></term>
19044   <listitem>
19045    <para>
19046     DAPM context
19047    </para>
19048   </listitem>
19049  </varlistentry>
19050  <varlistentry>
19051   <term><parameter>pin</parameter></term>
19052   <listitem>
19053    <para>
19054     pin name
19055    </para>
19056   </listitem>
19057  </varlistentry>
19058 </variablelist>
19059</refsect1>
19060<refsect1>
19061<title>Description</title>
19062<para>
19063   Enables input/output pin regardless of any other state.  This is
19064   intended for use with microphone bias supplies used in microphone
19065   jack detection.
19066   </para><para>
19067
19068   Requires external locking.
19069</para>
19070</refsect1>
19071<refsect1>
19072<title>NOTE</title>
19073<para>
19074   <function>snd_soc_dapm_sync</function> needs to be called after this for DAPM to
19075   do any widget power switching.
19076</para>
19077</refsect1>
19078</refentry>
19079
19080<refentry id="API-snd-soc-dapm-force-enable-pin">
19081<refentryinfo>
19082 <title>LINUX</title>
19083 <productname>Kernel Hackers Manual</productname>
19084 <date>July 2017</date>
19085</refentryinfo>
19086<refmeta>
19087 <refentrytitle><phrase>snd_soc_dapm_force_enable_pin</phrase></refentrytitle>
19088 <manvolnum>9</manvolnum>
19089 <refmiscinfo class="version">4.4.14</refmiscinfo>
19090</refmeta>
19091<refnamediv>
19092 <refname>snd_soc_dapm_force_enable_pin</refname>
19093 <refpurpose>
19094     force a pin to be enabled
19095 </refpurpose>
19096</refnamediv>
19097<refsynopsisdiv>
19098 <title>Synopsis</title>
19099  <funcsynopsis><funcprototype>
19100   <funcdef>int <function>snd_soc_dapm_force_enable_pin </function></funcdef>
19101   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
19102   <paramdef>const char * <parameter>pin</parameter></paramdef>
19103  </funcprototype></funcsynopsis>
19104</refsynopsisdiv>
19105<refsect1>
19106 <title>Arguments</title>
19107 <variablelist>
19108  <varlistentry>
19109   <term><parameter>dapm</parameter></term>
19110   <listitem>
19111    <para>
19112     DAPM context
19113    </para>
19114   </listitem>
19115  </varlistentry>
19116  <varlistentry>
19117   <term><parameter>pin</parameter></term>
19118   <listitem>
19119    <para>
19120     pin name
19121    </para>
19122   </listitem>
19123  </varlistentry>
19124 </variablelist>
19125</refsect1>
19126<refsect1>
19127<title>Description</title>
19128<para>
19129   Enables input/output pin regardless of any other state.  This is
19130   intended for use with microphone bias supplies used in microphone
19131   jack detection.
19132</para>
19133</refsect1>
19134<refsect1>
19135<title>NOTE</title>
19136<para>
19137   <function>snd_soc_dapm_sync</function> needs to be called after this for DAPM to
19138   do any widget power switching.
19139</para>
19140</refsect1>
19141</refentry>
19142
19143<refentry id="API-snd-soc-dapm-disable-pin-unlocked">
19144<refentryinfo>
19145 <title>LINUX</title>
19146 <productname>Kernel Hackers Manual</productname>
19147 <date>July 2017</date>
19148</refentryinfo>
19149<refmeta>
19150 <refentrytitle><phrase>snd_soc_dapm_disable_pin_unlocked</phrase></refentrytitle>
19151 <manvolnum>9</manvolnum>
19152 <refmiscinfo class="version">4.4.14</refmiscinfo>
19153</refmeta>
19154<refnamediv>
19155 <refname>snd_soc_dapm_disable_pin_unlocked</refname>
19156 <refpurpose>
19157     disable pin.
19158 </refpurpose>
19159</refnamediv>
19160<refsynopsisdiv>
19161 <title>Synopsis</title>
19162  <funcsynopsis><funcprototype>
19163   <funcdef>int <function>snd_soc_dapm_disable_pin_unlocked </function></funcdef>
19164   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
19165   <paramdef>const char * <parameter>pin</parameter></paramdef>
19166  </funcprototype></funcsynopsis>
19167</refsynopsisdiv>
19168<refsect1>
19169 <title>Arguments</title>
19170 <variablelist>
19171  <varlistentry>
19172   <term><parameter>dapm</parameter></term>
19173   <listitem>
19174    <para>
19175     DAPM context
19176    </para>
19177   </listitem>
19178  </varlistentry>
19179  <varlistentry>
19180   <term><parameter>pin</parameter></term>
19181   <listitem>
19182    <para>
19183     pin name
19184    </para>
19185   </listitem>
19186  </varlistentry>
19187 </variablelist>
19188</refsect1>
19189<refsect1>
19190<title>Description</title>
19191<para>
19192   Disables input/output pin and its parents or children widgets.
19193   </para><para>
19194
19195   Requires external locking.
19196</para>
19197</refsect1>
19198<refsect1>
19199<title>NOTE</title>
19200<para>
19201   <function>snd_soc_dapm_sync</function> needs to be called after this for DAPM to
19202   do any widget power switching.
19203</para>
19204</refsect1>
19205</refentry>
19206
19207<refentry id="API-snd-soc-dapm-disable-pin">
19208<refentryinfo>
19209 <title>LINUX</title>
19210 <productname>Kernel Hackers Manual</productname>
19211 <date>July 2017</date>
19212</refentryinfo>
19213<refmeta>
19214 <refentrytitle><phrase>snd_soc_dapm_disable_pin</phrase></refentrytitle>
19215 <manvolnum>9</manvolnum>
19216 <refmiscinfo class="version">4.4.14</refmiscinfo>
19217</refmeta>
19218<refnamediv>
19219 <refname>snd_soc_dapm_disable_pin</refname>
19220 <refpurpose>
19221     disable pin.
19222 </refpurpose>
19223</refnamediv>
19224<refsynopsisdiv>
19225 <title>Synopsis</title>
19226  <funcsynopsis><funcprototype>
19227   <funcdef>int <function>snd_soc_dapm_disable_pin </function></funcdef>
19228   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
19229   <paramdef>const char * <parameter>pin</parameter></paramdef>
19230  </funcprototype></funcsynopsis>
19231</refsynopsisdiv>
19232<refsect1>
19233 <title>Arguments</title>
19234 <variablelist>
19235  <varlistentry>
19236   <term><parameter>dapm</parameter></term>
19237   <listitem>
19238    <para>
19239     DAPM context
19240    </para>
19241   </listitem>
19242  </varlistentry>
19243  <varlistentry>
19244   <term><parameter>pin</parameter></term>
19245   <listitem>
19246    <para>
19247     pin name
19248    </para>
19249   </listitem>
19250  </varlistentry>
19251 </variablelist>
19252</refsect1>
19253<refsect1>
19254<title>Description</title>
19255<para>
19256   Disables input/output pin and its parents or children widgets.
19257</para>
19258</refsect1>
19259<refsect1>
19260<title>NOTE</title>
19261<para>
19262   <function>snd_soc_dapm_sync</function> needs to be called after this for DAPM to
19263   do any widget power switching.
19264</para>
19265</refsect1>
19266</refentry>
19267
19268<refentry id="API-snd-soc-dapm-nc-pin-unlocked">
19269<refentryinfo>
19270 <title>LINUX</title>
19271 <productname>Kernel Hackers Manual</productname>
19272 <date>July 2017</date>
19273</refentryinfo>
19274<refmeta>
19275 <refentrytitle><phrase>snd_soc_dapm_nc_pin_unlocked</phrase></refentrytitle>
19276 <manvolnum>9</manvolnum>
19277 <refmiscinfo class="version">4.4.14</refmiscinfo>
19278</refmeta>
19279<refnamediv>
19280 <refname>snd_soc_dapm_nc_pin_unlocked</refname>
19281 <refpurpose>
19282     permanently disable pin.
19283 </refpurpose>
19284</refnamediv>
19285<refsynopsisdiv>
19286 <title>Synopsis</title>
19287  <funcsynopsis><funcprototype>
19288   <funcdef>int <function>snd_soc_dapm_nc_pin_unlocked </function></funcdef>
19289   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
19290   <paramdef>const char * <parameter>pin</parameter></paramdef>
19291  </funcprototype></funcsynopsis>
19292</refsynopsisdiv>
19293<refsect1>
19294 <title>Arguments</title>
19295 <variablelist>
19296  <varlistentry>
19297   <term><parameter>dapm</parameter></term>
19298   <listitem>
19299    <para>
19300     DAPM context
19301    </para>
19302   </listitem>
19303  </varlistentry>
19304  <varlistentry>
19305   <term><parameter>pin</parameter></term>
19306   <listitem>
19307    <para>
19308     pin name
19309    </para>
19310   </listitem>
19311  </varlistentry>
19312 </variablelist>
19313</refsect1>
19314<refsect1>
19315<title>Description</title>
19316<para>
19317   Marks the specified pin as being not connected, disabling it along
19318   any parent or child widgets.  At present this is identical to
19319   <function>snd_soc_dapm_disable_pin</function> but in future it will be extended to do
19320   additional things such as disabling controls which only affect
19321   paths through the pin.
19322   </para><para>
19323
19324   Requires external locking.
19325</para>
19326</refsect1>
19327<refsect1>
19328<title>NOTE</title>
19329<para>
19330   <function>snd_soc_dapm_sync</function> needs to be called after this for DAPM to
19331   do any widget power switching.
19332</para>
19333</refsect1>
19334</refentry>
19335
19336<refentry id="API-snd-soc-dapm-nc-pin">
19337<refentryinfo>
19338 <title>LINUX</title>
19339 <productname>Kernel Hackers Manual</productname>
19340 <date>July 2017</date>
19341</refentryinfo>
19342<refmeta>
19343 <refentrytitle><phrase>snd_soc_dapm_nc_pin</phrase></refentrytitle>
19344 <manvolnum>9</manvolnum>
19345 <refmiscinfo class="version">4.4.14</refmiscinfo>
19346</refmeta>
19347<refnamediv>
19348 <refname>snd_soc_dapm_nc_pin</refname>
19349 <refpurpose>
19350     permanently disable pin.
19351 </refpurpose>
19352</refnamediv>
19353<refsynopsisdiv>
19354 <title>Synopsis</title>
19355  <funcsynopsis><funcprototype>
19356   <funcdef>int <function>snd_soc_dapm_nc_pin </function></funcdef>
19357   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
19358   <paramdef>const char * <parameter>pin</parameter></paramdef>
19359  </funcprototype></funcsynopsis>
19360</refsynopsisdiv>
19361<refsect1>
19362 <title>Arguments</title>
19363 <variablelist>
19364  <varlistentry>
19365   <term><parameter>dapm</parameter></term>
19366   <listitem>
19367    <para>
19368     DAPM context
19369    </para>
19370   </listitem>
19371  </varlistentry>
19372  <varlistentry>
19373   <term><parameter>pin</parameter></term>
19374   <listitem>
19375    <para>
19376     pin name
19377    </para>
19378   </listitem>
19379  </varlistentry>
19380 </variablelist>
19381</refsect1>
19382<refsect1>
19383<title>Description</title>
19384<para>
19385   Marks the specified pin as being not connected, disabling it along
19386   any parent or child widgets.  At present this is identical to
19387   <function>snd_soc_dapm_disable_pin</function> but in future it will be extended to do
19388   additional things such as disabling controls which only affect
19389   paths through the pin.
19390</para>
19391</refsect1>
19392<refsect1>
19393<title>NOTE</title>
19394<para>
19395   <function>snd_soc_dapm_sync</function> needs to be called after this for DAPM to
19396   do any widget power switching.
19397</para>
19398</refsect1>
19399</refentry>
19400
19401<refentry id="API-snd-soc-dapm-get-pin-status">
19402<refentryinfo>
19403 <title>LINUX</title>
19404 <productname>Kernel Hackers Manual</productname>
19405 <date>July 2017</date>
19406</refentryinfo>
19407<refmeta>
19408 <refentrytitle><phrase>snd_soc_dapm_get_pin_status</phrase></refentrytitle>
19409 <manvolnum>9</manvolnum>
19410 <refmiscinfo class="version">4.4.14</refmiscinfo>
19411</refmeta>
19412<refnamediv>
19413 <refname>snd_soc_dapm_get_pin_status</refname>
19414 <refpurpose>
19415     get audio pin status
19416 </refpurpose>
19417</refnamediv>
19418<refsynopsisdiv>
19419 <title>Synopsis</title>
19420  <funcsynopsis><funcprototype>
19421   <funcdef>int <function>snd_soc_dapm_get_pin_status </function></funcdef>
19422   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
19423   <paramdef>const char * <parameter>pin</parameter></paramdef>
19424  </funcprototype></funcsynopsis>
19425</refsynopsisdiv>
19426<refsect1>
19427 <title>Arguments</title>
19428 <variablelist>
19429  <varlistentry>
19430   <term><parameter>dapm</parameter></term>
19431   <listitem>
19432    <para>
19433     DAPM context
19434    </para>
19435   </listitem>
19436  </varlistentry>
19437  <varlistentry>
19438   <term><parameter>pin</parameter></term>
19439   <listitem>
19440    <para>
19441     audio signal pin endpoint (or start point)
19442    </para>
19443   </listitem>
19444  </varlistentry>
19445 </variablelist>
19446</refsect1>
19447<refsect1>
19448<title>Description</title>
19449<para>
19450   Get audio pin status - connected or disconnected.
19451   </para><para>
19452
19453   Returns 1 for connected otherwise 0.
19454</para>
19455</refsect1>
19456</refentry>
19457
19458<refentry id="API-snd-soc-dapm-ignore-suspend">
19459<refentryinfo>
19460 <title>LINUX</title>
19461 <productname>Kernel Hackers Manual</productname>
19462 <date>July 2017</date>
19463</refentryinfo>
19464<refmeta>
19465 <refentrytitle><phrase>snd_soc_dapm_ignore_suspend</phrase></refentrytitle>
19466 <manvolnum>9</manvolnum>
19467 <refmiscinfo class="version">4.4.14</refmiscinfo>
19468</refmeta>
19469<refnamediv>
19470 <refname>snd_soc_dapm_ignore_suspend</refname>
19471 <refpurpose>
19472     ignore suspend status for DAPM endpoint
19473 </refpurpose>
19474</refnamediv>
19475<refsynopsisdiv>
19476 <title>Synopsis</title>
19477  <funcsynopsis><funcprototype>
19478   <funcdef>int <function>snd_soc_dapm_ignore_suspend </function></funcdef>
19479   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
19480   <paramdef>const char * <parameter>pin</parameter></paramdef>
19481  </funcprototype></funcsynopsis>
19482</refsynopsisdiv>
19483<refsect1>
19484 <title>Arguments</title>
19485 <variablelist>
19486  <varlistentry>
19487   <term><parameter>dapm</parameter></term>
19488   <listitem>
19489    <para>
19490     DAPM context
19491    </para>
19492   </listitem>
19493  </varlistentry>
19494  <varlistentry>
19495   <term><parameter>pin</parameter></term>
19496   <listitem>
19497    <para>
19498     audio signal pin endpoint (or start point)
19499    </para>
19500   </listitem>
19501  </varlistentry>
19502 </variablelist>
19503</refsect1>
19504<refsect1>
19505<title>Description</title>
19506<para>
19507   Mark the given endpoint or pin as ignoring suspend.  When the
19508   system is disabled a path between two endpoints flagged as ignoring
19509   suspend will not be disabled.  The path must already be enabled via
19510   normal means at suspend time, it will not be turned on if it was not
19511   already enabled.
19512</para>
19513</refsect1>
19514</refentry>
19515
19516<refentry id="API-snd-soc-dapm-free">
19517<refentryinfo>
19518 <title>LINUX</title>
19519 <productname>Kernel Hackers Manual</productname>
19520 <date>July 2017</date>
19521</refentryinfo>
19522<refmeta>
19523 <refentrytitle><phrase>snd_soc_dapm_free</phrase></refentrytitle>
19524 <manvolnum>9</manvolnum>
19525 <refmiscinfo class="version">4.4.14</refmiscinfo>
19526</refmeta>
19527<refnamediv>
19528 <refname>snd_soc_dapm_free</refname>
19529 <refpurpose>
19530     free dapm resources
19531 </refpurpose>
19532</refnamediv>
19533<refsynopsisdiv>
19534 <title>Synopsis</title>
19535  <funcsynopsis><funcprototype>
19536   <funcdef>void <function>snd_soc_dapm_free </function></funcdef>
19537   <paramdef>struct snd_soc_dapm_context * <parameter>dapm</parameter></paramdef>
19538  </funcprototype></funcsynopsis>
19539</refsynopsisdiv>
19540<refsect1>
19541 <title>Arguments</title>
19542 <variablelist>
19543  <varlistentry>
19544   <term><parameter>dapm</parameter></term>
19545   <listitem>
19546    <para>
19547     DAPM context
19548    </para>
19549   </listitem>
19550  </varlistentry>
19551 </variablelist>
19552</refsect1>
19553<refsect1>
19554<title>Description</title>
19555<para>
19556   Free all dapm widgets and resources.
19557</para>
19558</refsect1>
19559</refentry>
19560
19561     </sect1>
19562     <sect1><title>ASoC DMA Engine API</title>
19563<!-- sound/soc/soc-generic-dmaengine-pcm.c -->
19564<refentry id="API-snd-dmaengine-pcm-prepare-slave-config">
19565<refentryinfo>
19566 <title>LINUX</title>
19567 <productname>Kernel Hackers Manual</productname>
19568 <date>July 2017</date>
19569</refentryinfo>
19570<refmeta>
19571 <refentrytitle><phrase>snd_dmaengine_pcm_prepare_slave_config</phrase></refentrytitle>
19572 <manvolnum>9</manvolnum>
19573 <refmiscinfo class="version">4.4.14</refmiscinfo>
19574</refmeta>
19575<refnamediv>
19576 <refname>snd_dmaengine_pcm_prepare_slave_config</refname>
19577 <refpurpose>
19578  Generic prepare_slave_config callback
19579 </refpurpose>
19580</refnamediv>
19581<refsynopsisdiv>
19582 <title>Synopsis</title>
19583  <funcsynopsis><funcprototype>
19584   <funcdef>int <function>snd_dmaengine_pcm_prepare_slave_config </function></funcdef>
19585   <paramdef>struct snd_pcm_substream * <parameter>substream</parameter></paramdef>
19586   <paramdef>struct snd_pcm_hw_params * <parameter>params</parameter></paramdef>
19587   <paramdef>struct dma_slave_config * <parameter>slave_config</parameter></paramdef>
19588  </funcprototype></funcsynopsis>
19589</refsynopsisdiv>
19590<refsect1>
19591 <title>Arguments</title>
19592 <variablelist>
19593  <varlistentry>
19594   <term><parameter>substream</parameter></term>
19595   <listitem>
19596    <para>
19597     PCM substream
19598    </para>
19599   </listitem>
19600  </varlistentry>
19601  <varlistentry>
19602   <term><parameter>params</parameter></term>
19603   <listitem>
19604    <para>
19605     hw_params
19606    </para>
19607   </listitem>
19608  </varlistentry>
19609  <varlistentry>
19610   <term><parameter>slave_config</parameter></term>
19611   <listitem>
19612    <para>
19613     DMA slave config to prepare
19614    </para>
19615   </listitem>
19616  </varlistentry>
19617 </variablelist>
19618</refsect1>
19619<refsect1>
19620<title>Description</title>
19621<para>
19622   This function can be used as a generic prepare_slave_config callback for
19623   platforms which make use of the snd_dmaengine_dai_dma_data struct for their
19624   DAI DMA data. Internally the function will first call
19625   snd_hwparams_to_dma_slave_config to fill in the slave config based on the
19626   hw_params, followed by snd_dmaengine_set_config_from_dai_data to fill in the
19627   remaining fields based on the DAI DMA data.
19628</para>
19629</refsect1>
19630</refentry>
19631
19632<refentry id="API-snd-dmaengine-pcm-register">
19633<refentryinfo>
19634 <title>LINUX</title>
19635 <productname>Kernel Hackers Manual</productname>
19636 <date>July 2017</date>
19637</refentryinfo>
19638<refmeta>
19639 <refentrytitle><phrase>snd_dmaengine_pcm_register</phrase></refentrytitle>
19640 <manvolnum>9</manvolnum>
19641 <refmiscinfo class="version">4.4.14</refmiscinfo>
19642</refmeta>
19643<refnamediv>
19644 <refname>snd_dmaengine_pcm_register</refname>
19645 <refpurpose>
19646     Register a dmaengine based PCM device
19647 </refpurpose>
19648</refnamediv>
19649<refsynopsisdiv>
19650 <title>Synopsis</title>
19651  <funcsynopsis><funcprototype>
19652   <funcdef>int <function>snd_dmaengine_pcm_register </function></funcdef>
19653   <paramdef>struct device * <parameter>dev</parameter></paramdef>
19654   <paramdef>const struct snd_dmaengine_pcm_config * <parameter>config</parameter></paramdef>
19655   <paramdef>unsigned int <parameter>flags</parameter></paramdef>
19656  </funcprototype></funcsynopsis>
19657</refsynopsisdiv>
19658<refsect1>
19659 <title>Arguments</title>
19660 <variablelist>
19661  <varlistentry>
19662   <term><parameter>dev</parameter></term>
19663   <listitem>
19664    <para>
19665     The parent device for the PCM device
19666    </para>
19667   </listitem>
19668  </varlistentry>
19669  <varlistentry>
19670   <term><parameter>config</parameter></term>
19671   <listitem>
19672    <para>
19673     Platform specific PCM configuration
19674    </para>
19675   </listitem>
19676  </varlistentry>
19677  <varlistentry>
19678   <term><parameter>flags</parameter></term>
19679   <listitem>
19680    <para>
19681     Platform specific quirks
19682    </para>
19683   </listitem>
19684  </varlistentry>
19685 </variablelist>
19686</refsect1>
19687</refentry>
19688
19689<refentry id="API-snd-dmaengine-pcm-unregister">
19690<refentryinfo>
19691 <title>LINUX</title>
19692 <productname>Kernel Hackers Manual</productname>
19693 <date>July 2017</date>
19694</refentryinfo>
19695<refmeta>
19696 <refentrytitle><phrase>snd_dmaengine_pcm_unregister</phrase></refentrytitle>
19697 <manvolnum>9</manvolnum>
19698 <refmiscinfo class="version">4.4.14</refmiscinfo>
19699</refmeta>
19700<refnamediv>
19701 <refname>snd_dmaengine_pcm_unregister</refname>
19702 <refpurpose>
19703     Removes a dmaengine based PCM device
19704 </refpurpose>
19705</refnamediv>
19706<refsynopsisdiv>
19707 <title>Synopsis</title>
19708  <funcsynopsis><funcprototype>
19709   <funcdef>void <function>snd_dmaengine_pcm_unregister </function></funcdef>
19710   <paramdef>struct device * <parameter>dev</parameter></paramdef>
19711  </funcprototype></funcsynopsis>
19712</refsynopsisdiv>
19713<refsect1>
19714 <title>Arguments</title>
19715 <variablelist>
19716  <varlistentry>
19717   <term><parameter>dev</parameter></term>
19718   <listitem>
19719    <para>
19720     Parent device the PCM was register with
19721    </para>
19722   </listitem>
19723  </varlistentry>
19724 </variablelist>
19725</refsect1>
19726<refsect1>
19727<title>Description</title>
19728<para>
19729   Removes a dmaengine based PCM device previously registered with
19730   snd_dmaengine_pcm_register.
19731</para>
19732</refsect1>
19733</refentry>
19734
19735     </sect1>
19736  </chapter>
19737  <chapter><title>Miscellaneous Functions</title>
19738     <sect1><title>Hardware-Dependent Devices API</title>
19739<!-- sound/core/hwdep.c -->
19740<refentry id="API-snd-hwdep-new">
19741<refentryinfo>
19742 <title>LINUX</title>
19743 <productname>Kernel Hackers Manual</productname>
19744 <date>July 2017</date>
19745</refentryinfo>
19746<refmeta>
19747 <refentrytitle><phrase>snd_hwdep_new</phrase></refentrytitle>
19748 <manvolnum>9</manvolnum>
19749 <refmiscinfo class="version">4.4.14</refmiscinfo>
19750</refmeta>
19751<refnamediv>
19752 <refname>snd_hwdep_new</refname>
19753 <refpurpose>
19754  create a new hwdep instance
19755 </refpurpose>
19756</refnamediv>
19757<refsynopsisdiv>
19758 <title>Synopsis</title>
19759  <funcsynopsis><funcprototype>
19760   <funcdef>int <function>snd_hwdep_new </function></funcdef>
19761   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
19762   <paramdef>char * <parameter>id</parameter></paramdef>
19763   <paramdef>int <parameter>device</parameter></paramdef>
19764   <paramdef>struct snd_hwdep ** <parameter>rhwdep</parameter></paramdef>
19765  </funcprototype></funcsynopsis>
19766</refsynopsisdiv>
19767<refsect1>
19768 <title>Arguments</title>
19769 <variablelist>
19770  <varlistentry>
19771   <term><parameter>card</parameter></term>
19772   <listitem>
19773    <para>
19774     the card instance
19775    </para>
19776   </listitem>
19777  </varlistentry>
19778  <varlistentry>
19779   <term><parameter>id</parameter></term>
19780   <listitem>
19781    <para>
19782     the id string
19783    </para>
19784   </listitem>
19785  </varlistentry>
19786  <varlistentry>
19787   <term><parameter>device</parameter></term>
19788   <listitem>
19789    <para>
19790     the device index (zero-based)
19791    </para>
19792   </listitem>
19793  </varlistentry>
19794  <varlistentry>
19795   <term><parameter>rhwdep</parameter></term>
19796   <listitem>
19797    <para>
19798     the pointer to store the new hwdep instance
19799    </para>
19800   </listitem>
19801  </varlistentry>
19802 </variablelist>
19803</refsect1>
19804<refsect1>
19805<title>Description</title>
19806<para>
19807   Creates a new hwdep instance with the given index on the card.
19808   The callbacks (hwdep-&gt;ops) must be set on the returned instance
19809   after this call manually by the caller.
19810</para>
19811</refsect1>
19812<refsect1>
19813<title>Return</title>
19814<para>
19815   Zero if successful, or a negative error code on failure.
19816</para>
19817</refsect1>
19818</refentry>
19819
19820     </sect1>
19821     <sect1><title>Jack Abstraction Layer API</title>
19822<!-- include/sound/jack.h -->
19823<refentry id="API-enum-snd-jack-types">
19824<refentryinfo>
19825 <title>LINUX</title>
19826 <productname>Kernel Hackers Manual</productname>
19827 <date>July 2017</date>
19828</refentryinfo>
19829<refmeta>
19830 <refentrytitle><phrase>enum snd_jack_types</phrase></refentrytitle>
19831 <manvolnum>9</manvolnum>
19832 <refmiscinfo class="version">4.4.14</refmiscinfo>
19833</refmeta>
19834<refnamediv>
19835 <refname>enum snd_jack_types</refname>
19836 <refpurpose>
19837  Jack types which can be reported
19838 </refpurpose>
19839</refnamediv>
19840<refsynopsisdiv>
19841 <title>Synopsis</title>
19842  <programlisting>
19843enum snd_jack_types {
19844  SND_JACK_HEADPHONE,
19845  SND_JACK_MICROPHONE,
19846  SND_JACK_HEADSET,
19847  SND_JACK_LINEOUT,
19848  SND_JACK_MECHANICAL,
19849  SND_JACK_VIDEOOUT,
19850  SND_JACK_AVOUT,
19851  SND_JACK_LINEIN,
19852  SND_JACK_BTN_0,
19853  SND_JACK_BTN_1,
19854  SND_JACK_BTN_2,
19855  SND_JACK_BTN_3,
19856  SND_JACK_BTN_4,
19857  SND_JACK_BTN_5
19858};  </programlisting>
19859</refsynopsisdiv>
19860<refsect1>
19861 <title>Constants</title>
19862  <variablelist>
19863    <varlistentry>      <term>SND_JACK_HEADPHONE</term>
19864      <listitem><para>
19865Headphone
19866      </para></listitem>
19867    </varlistentry>
19868    <varlistentry>      <term>SND_JACK_MICROPHONE</term>
19869      <listitem><para>
19870Microphone
19871      </para></listitem>
19872    </varlistentry>
19873    <varlistentry>      <term>SND_JACK_HEADSET</term>
19874      <listitem><para>
19875Headset
19876      </para></listitem>
19877    </varlistentry>
19878    <varlistentry>      <term>SND_JACK_LINEOUT</term>
19879      <listitem><para>
19880Line out
19881      </para></listitem>
19882    </varlistentry>
19883    <varlistentry>      <term>SND_JACK_MECHANICAL</term>
19884      <listitem><para>
19885Mechanical switch
19886      </para></listitem>
19887    </varlistentry>
19888    <varlistentry>      <term>SND_JACK_VIDEOOUT</term>
19889      <listitem><para>
19890Video out
19891      </para></listitem>
19892    </varlistentry>
19893    <varlistentry>      <term>SND_JACK_AVOUT</term>
19894      <listitem><para>
19895AV (Audio Video) out
19896      </para></listitem>
19897    </varlistentry>
19898    <varlistentry>      <term>SND_JACK_LINEIN</term>
19899      <listitem><para>
19900Line in
19901      </para></listitem>
19902    </varlistentry>
19903    <varlistentry>      <term>SND_JACK_BTN_0</term>
19904      <listitem><para>
19905Button 0
19906      </para></listitem>
19907    </varlistentry>
19908    <varlistentry>      <term>SND_JACK_BTN_1</term>
19909      <listitem><para>
19910Button 1
19911      </para></listitem>
19912    </varlistentry>
19913    <varlistentry>      <term>SND_JACK_BTN_2</term>
19914      <listitem><para>
19915Button 2
19916      </para></listitem>
19917    </varlistentry>
19918    <varlistentry>      <term>SND_JACK_BTN_3</term>
19919      <listitem><para>
19920Button 3
19921      </para></listitem>
19922    </varlistentry>
19923    <varlistentry>      <term>SND_JACK_BTN_4</term>
19924      <listitem><para>
19925Button 4
19926      </para></listitem>
19927    </varlistentry>
19928    <varlistentry>      <term>SND_JACK_BTN_5</term>
19929      <listitem><para>
19930Button 5
19931      </para></listitem>
19932    </varlistentry>
19933  </variablelist>
19934</refsect1>
19935<refsect1>
19936<title>Description</title>
19937<para>
19938   These values are used as a bitmask.
19939   </para><para>
19940
19941   Note that this must be kept in sync with the lookup table in
19942   sound/core/jack.c.
19943</para>
19944</refsect1>
19945</refentry>
19946
19947<!-- sound/core/jack.c -->
19948<refentry id="API-snd-jack-add-new-kctl">
19949<refentryinfo>
19950 <title>LINUX</title>
19951 <productname>Kernel Hackers Manual</productname>
19952 <date>July 2017</date>
19953</refentryinfo>
19954<refmeta>
19955 <refentrytitle><phrase>snd_jack_add_new_kctl</phrase></refentrytitle>
19956 <manvolnum>9</manvolnum>
19957 <refmiscinfo class="version">4.4.14</refmiscinfo>
19958</refmeta>
19959<refnamediv>
19960 <refname>snd_jack_add_new_kctl</refname>
19961 <refpurpose>
19962  Create a new snd_jack_kctl and add it to jack
19963 </refpurpose>
19964</refnamediv>
19965<refsynopsisdiv>
19966 <title>Synopsis</title>
19967  <funcsynopsis><funcprototype>
19968   <funcdef>int <function>snd_jack_add_new_kctl </function></funcdef>
19969   <paramdef>struct snd_jack * <parameter>jack</parameter></paramdef>
19970   <paramdef>const char * <parameter>name</parameter></paramdef>
19971   <paramdef>int <parameter>mask</parameter></paramdef>
19972  </funcprototype></funcsynopsis>
19973</refsynopsisdiv>
19974<refsect1>
19975 <title>Arguments</title>
19976 <variablelist>
19977  <varlistentry>
19978   <term><parameter>jack</parameter></term>
19979   <listitem>
19980    <para>
19981     the jack instance which the kctl will attaching to
19982    </para>
19983   </listitem>
19984  </varlistentry>
19985  <varlistentry>
19986   <term><parameter>name</parameter></term>
19987   <listitem>
19988    <para>
19989     the name for the snd_kcontrol object
19990    </para>
19991   </listitem>
19992  </varlistentry>
19993  <varlistentry>
19994   <term><parameter>mask</parameter></term>
19995   <listitem>
19996    <para>
19997     a bitmask of enum snd_jack_type values that can be detected
19998     by this snd_jack_kctl object.
19999    </para>
20000   </listitem>
20001  </varlistentry>
20002 </variablelist>
20003</refsect1>
20004<refsect1>
20005<title>Description</title>
20006<para>
20007   Creates a new snd_kcontrol object and adds it to the jack kctl_list.
20008</para>
20009</refsect1>
20010<refsect1>
20011<title>Return</title>
20012<para>
20013   Zero if successful, or a negative error code on failure.
20014</para>
20015</refsect1>
20016</refentry>
20017
20018<refentry id="API-snd-jack-new">
20019<refentryinfo>
20020 <title>LINUX</title>
20021 <productname>Kernel Hackers Manual</productname>
20022 <date>July 2017</date>
20023</refentryinfo>
20024<refmeta>
20025 <refentrytitle><phrase>snd_jack_new</phrase></refentrytitle>
20026 <manvolnum>9</manvolnum>
20027 <refmiscinfo class="version">4.4.14</refmiscinfo>
20028</refmeta>
20029<refnamediv>
20030 <refname>snd_jack_new</refname>
20031 <refpurpose>
20032     Create a new jack
20033 </refpurpose>
20034</refnamediv>
20035<refsynopsisdiv>
20036 <title>Synopsis</title>
20037  <funcsynopsis><funcprototype>
20038   <funcdef>int <function>snd_jack_new </function></funcdef>
20039   <paramdef>struct snd_card * <parameter>card</parameter></paramdef>
20040   <paramdef>const char * <parameter>id</parameter></paramdef>
20041   <paramdef>int <parameter>type</parameter></paramdef>
20042   <paramdef>struct snd_jack ** <parameter>jjack</parameter></paramdef>
20043   <paramdef>bool <parameter>initial_kctl</parameter></paramdef>
20044   <paramdef>bool <parameter>phantom_jack</parameter></paramdef>
20045  </funcprototype></funcsynopsis>
20046</refsynopsisdiv>
20047<refsect1>
20048 <title>Arguments</title>
20049 <variablelist>
20050  <varlistentry>
20051   <term><parameter>card</parameter></term>
20052   <listitem>
20053    <para>
20054     the card instance
20055    </para>
20056   </listitem>
20057  </varlistentry>
20058  <varlistentry>
20059   <term><parameter>id</parameter></term>
20060   <listitem>
20061    <para>
20062     an identifying string for this jack
20063    </para>
20064   </listitem>
20065  </varlistentry>
20066  <varlistentry>
20067   <term><parameter>type</parameter></term>
20068   <listitem>
20069    <para>
20070     a bitmask of enum snd_jack_type values that can be detected by
20071     this jack
20072    </para>
20073   </listitem>
20074  </varlistentry>
20075  <varlistentry>
20076   <term><parameter>jjack</parameter></term>
20077   <listitem>
20078    <para>
20079     Used to provide the allocated jack object to the caller.
20080    </para>
20081   </listitem>
20082  </varlistentry>
20083  <varlistentry>
20084   <term><parameter>initial_kctl</parameter></term>
20085   <listitem>
20086    <para>
20087     if true, create a kcontrol and add it to the jack list.
20088    </para>
20089   </listitem>
20090  </varlistentry>
20091  <varlistentry>
20092   <term><parameter>phantom_jack</parameter></term>
20093   <listitem>
20094    <para>
20095     Don't create a input device for phantom jacks.
20096    </para>
20097   </listitem>
20098  </varlistentry>
20099 </variablelist>
20100</refsect1>
20101<refsect1>
20102<title>Description</title>
20103<para>
20104   Creates a new jack object.
20105</para>
20106</refsect1>
20107<refsect1>
20108<title>Return</title>
20109<para>
20110   Zero if successful, or a negative error code on failure.
20111   On success <parameter>jjack</parameter> will be initialised.
20112</para>
20113</refsect1>
20114</refentry>
20115
20116<refentry id="API-snd-jack-set-parent">
20117<refentryinfo>
20118 <title>LINUX</title>
20119 <productname>Kernel Hackers Manual</productname>
20120 <date>July 2017</date>
20121</refentryinfo>
20122<refmeta>
20123 <refentrytitle><phrase>snd_jack_set_parent</phrase></refentrytitle>
20124 <manvolnum>9</manvolnum>
20125 <refmiscinfo class="version">4.4.14</refmiscinfo>
20126</refmeta>
20127<refnamediv>
20128 <refname>snd_jack_set_parent</refname>
20129 <refpurpose>
20130     Set the parent device for a jack
20131 </refpurpose>
20132</refnamediv>
20133<refsynopsisdiv>
20134 <title>Synopsis</title>
20135  <funcsynopsis><funcprototype>
20136   <funcdef>void <function>snd_jack_set_parent </function></funcdef>
20137   <paramdef>struct snd_jack * <parameter>jack</parameter></paramdef>
20138   <paramdef>struct device * <parameter>parent</parameter></paramdef>
20139  </funcprototype></funcsynopsis>
20140</refsynopsisdiv>
20141<refsect1>
20142 <title>Arguments</title>
20143 <variablelist>
20144  <varlistentry>
20145   <term><parameter>jack</parameter></term>
20146   <listitem>
20147    <para>
20148     The jack to configure
20149    </para>
20150   </listitem>
20151  </varlistentry>
20152  <varlistentry>
20153   <term><parameter>parent</parameter></term>
20154   <listitem>
20155    <para>
20156     The device to set as parent for the jack.
20157    </para>
20158   </listitem>
20159  </varlistentry>
20160 </variablelist>
20161</refsect1>
20162<refsect1>
20163<title>Description</title>
20164<para>
20165   Set the parent for the jack devices in the device tree.  This
20166   function is only valid prior to registration of the jack.  If no
20167   parent is configured then the parent device will be the sound card.
20168</para>
20169</refsect1>
20170</refentry>
20171
20172<refentry id="API-snd-jack-set-key">
20173<refentryinfo>
20174 <title>LINUX</title>
20175 <productname>Kernel Hackers Manual</productname>
20176 <date>July 2017</date>
20177</refentryinfo>
20178<refmeta>
20179 <refentrytitle><phrase>snd_jack_set_key</phrase></refentrytitle>
20180 <manvolnum>9</manvolnum>
20181 <refmiscinfo class="version">4.4.14</refmiscinfo>
20182</refmeta>
20183<refnamediv>
20184 <refname>snd_jack_set_key</refname>
20185 <refpurpose>
20186     Set a key mapping on a jack
20187 </refpurpose>
20188</refnamediv>
20189<refsynopsisdiv>
20190 <title>Synopsis</title>
20191  <funcsynopsis><funcprototype>
20192   <funcdef>int <function>snd_jack_set_key </function></funcdef>
20193   <paramdef>struct snd_jack * <parameter>jack</parameter></paramdef>
20194   <paramdef>enum snd_jack_types <parameter>type</parameter></paramdef>
20195   <paramdef>int <parameter>keytype</parameter></paramdef>
20196  </funcprototype></funcsynopsis>
20197</refsynopsisdiv>
20198<refsect1>
20199 <title>Arguments</title>
20200 <variablelist>
20201  <varlistentry>
20202   <term><parameter>jack</parameter></term>
20203   <listitem>
20204    <para>
20205     The jack to configure
20206    </para>
20207   </listitem>
20208  </varlistentry>
20209  <varlistentry>
20210   <term><parameter>type</parameter></term>
20211   <listitem>
20212    <para>
20213     Jack report type for this key
20214    </para>
20215   </listitem>
20216  </varlistentry>
20217  <varlistentry>
20218   <term><parameter>keytype</parameter></term>
20219   <listitem>
20220    <para>
20221     Input layer key type to be reported
20222    </para>
20223   </listitem>
20224  </varlistentry>
20225 </variablelist>
20226</refsect1>
20227<refsect1>
20228<title>Description</title>
20229<para>
20230   Map a SND_JACK_BTN_ button type to an input layer key, allowing
20231   reporting of keys on accessories via the jack abstraction.  If no
20232   mapping is provided but keys are enabled in the jack type then
20233   BTN_n numeric buttons will be reported.
20234   </para><para>
20235
20236   If jacks are not reporting via the input API this call will have no
20237   effect.
20238   </para><para>
20239
20240   Note that this is intended to be use by simple devices with small
20241   numbers of keys that can be reported.  It is also possible to
20242   access the input device directly - devices with complex input
20243   capabilities on accessories should consider doing this rather than
20244   using this abstraction.
20245   </para><para>
20246
20247   This function may only be called prior to registration of the jack.
20248</para>
20249</refsect1>
20250<refsect1>
20251<title>Return</title>
20252<para>
20253   Zero if successful, or a negative error code on failure.
20254</para>
20255</refsect1>
20256</refentry>
20257
20258<refentry id="API-snd-jack-report">
20259<refentryinfo>
20260 <title>LINUX</title>
20261 <productname>Kernel Hackers Manual</productname>
20262 <date>July 2017</date>
20263</refentryinfo>
20264<refmeta>
20265 <refentrytitle><phrase>snd_jack_report</phrase></refentrytitle>
20266 <manvolnum>9</manvolnum>
20267 <refmiscinfo class="version">4.4.14</refmiscinfo>
20268</refmeta>
20269<refnamediv>
20270 <refname>snd_jack_report</refname>
20271 <refpurpose>
20272     Report the current status of a jack
20273 </refpurpose>
20274</refnamediv>
20275<refsynopsisdiv>
20276 <title>Synopsis</title>
20277  <funcsynopsis><funcprototype>
20278   <funcdef>void <function>snd_jack_report </function></funcdef>
20279   <paramdef>struct snd_jack * <parameter>jack</parameter></paramdef>
20280   <paramdef>int <parameter>status</parameter></paramdef>
20281  </funcprototype></funcsynopsis>
20282</refsynopsisdiv>
20283<refsect1>
20284 <title>Arguments</title>
20285 <variablelist>
20286  <varlistentry>
20287   <term><parameter>jack</parameter></term>
20288   <listitem>
20289    <para>
20290     The jack to report status for
20291    </para>
20292   </listitem>
20293  </varlistentry>
20294  <varlistentry>
20295   <term><parameter>status</parameter></term>
20296   <listitem>
20297    <para>
20298     The current status of the jack
20299    </para>
20300   </listitem>
20301  </varlistentry>
20302 </variablelist>
20303</refsect1>
20304</refentry>
20305
20306<!-- sound/soc/soc-jack.c -->
20307<refentry id="API-snd-soc-card-jack-new">
20308<refentryinfo>
20309 <title>LINUX</title>
20310 <productname>Kernel Hackers Manual</productname>
20311 <date>July 2017</date>
20312</refentryinfo>
20313<refmeta>
20314 <refentrytitle><phrase>snd_soc_card_jack_new</phrase></refentrytitle>
20315 <manvolnum>9</manvolnum>
20316 <refmiscinfo class="version">4.4.14</refmiscinfo>
20317</refmeta>
20318<refnamediv>
20319 <refname>snd_soc_card_jack_new</refname>
20320 <refpurpose>
20321  Create a new jack
20322 </refpurpose>
20323</refnamediv>
20324<refsynopsisdiv>
20325 <title>Synopsis</title>
20326  <funcsynopsis><funcprototype>
20327   <funcdef>int <function>snd_soc_card_jack_new </function></funcdef>
20328   <paramdef>struct snd_soc_card * <parameter>card</parameter></paramdef>
20329   <paramdef>const char * <parameter>id</parameter></paramdef>
20330   <paramdef>int <parameter>type</parameter></paramdef>
20331   <paramdef>struct snd_soc_jack * <parameter>jack</parameter></paramdef>
20332   <paramdef>struct snd_soc_jack_pin * <parameter>pins</parameter></paramdef>
20333   <paramdef>unsigned int <parameter>num_pins</parameter></paramdef>
20334  </funcprototype></funcsynopsis>
20335</refsynopsisdiv>
20336<refsect1>
20337 <title>Arguments</title>
20338 <variablelist>
20339  <varlistentry>
20340   <term><parameter>card</parameter></term>
20341   <listitem>
20342    <para>
20343     ASoC card
20344    </para>
20345   </listitem>
20346  </varlistentry>
20347  <varlistentry>
20348   <term><parameter>id</parameter></term>
20349   <listitem>
20350    <para>
20351     an identifying string for this jack
20352    </para>
20353   </listitem>
20354  </varlistentry>
20355  <varlistentry>
20356   <term><parameter>type</parameter></term>
20357   <listitem>
20358    <para>
20359     a bitmask of enum snd_jack_type values that can be detected by
20360     this jack
20361    </para>
20362   </listitem>
20363  </varlistentry>
20364  <varlistentry>
20365   <term><parameter>jack</parameter></term>
20366   <listitem>
20367    <para>
20368     structure to use for the jack
20369    </para>
20370   </listitem>
20371  </varlistentry>
20372  <varlistentry>
20373   <term><parameter>pins</parameter></term>
20374   <listitem>
20375    <para>
20376     Array of jack pins to be added to the jack or NULL
20377    </para>
20378   </listitem>
20379  </varlistentry>
20380  <varlistentry>
20381   <term><parameter>num_pins</parameter></term>
20382   <listitem>
20383    <para>
20384     Number of elements in the <parameter>pins</parameter> array
20385    </para>
20386   </listitem>
20387  </varlistentry>
20388 </variablelist>
20389</refsect1>
20390<refsect1>
20391<title>Description</title>
20392<para>
20393   Creates a new jack object.
20394   </para><para>
20395
20396   Returns zero if successful, or a negative error code on failure.
20397   On success jack will be initialised.
20398</para>
20399</refsect1>
20400</refentry>
20401
20402<refentry id="API-snd-soc-jack-report">
20403<refentryinfo>
20404 <title>LINUX</title>
20405 <productname>Kernel Hackers Manual</productname>
20406 <date>July 2017</date>
20407</refentryinfo>
20408<refmeta>
20409 <refentrytitle><phrase>snd_soc_jack_report</phrase></refentrytitle>
20410 <manvolnum>9</manvolnum>
20411 <refmiscinfo class="version">4.4.14</refmiscinfo>
20412</refmeta>
20413<refnamediv>
20414 <refname>snd_soc_jack_report</refname>
20415 <refpurpose>
20416     Report the current status for a jack
20417 </refpurpose>
20418</refnamediv>
20419<refsynopsisdiv>
20420 <title>Synopsis</title>
20421  <funcsynopsis><funcprototype>
20422   <funcdef>void <function>snd_soc_jack_report </function></funcdef>
20423   <paramdef>struct snd_soc_jack * <parameter>jack</parameter></paramdef>
20424   <paramdef>int <parameter>status</parameter></paramdef>
20425   <paramdef>int <parameter>mask</parameter></paramdef>
20426  </funcprototype></funcsynopsis>
20427</refsynopsisdiv>
20428<refsect1>
20429 <title>Arguments</title>
20430 <variablelist>
20431  <varlistentry>
20432   <term><parameter>jack</parameter></term>
20433   <listitem>
20434    <para>
20435     the jack
20436    </para>
20437   </listitem>
20438  </varlistentry>
20439  <varlistentry>
20440   <term><parameter>status</parameter></term>
20441   <listitem>
20442    <para>
20443     a bitmask of enum snd_jack_type values that are currently detected.
20444    </para>
20445   </listitem>
20446  </varlistentry>
20447  <varlistentry>
20448   <term><parameter>mask</parameter></term>
20449   <listitem>
20450    <para>
20451     a bitmask of enum snd_jack_type values that being reported.
20452    </para>
20453   </listitem>
20454  </varlistentry>
20455 </variablelist>
20456</refsect1>
20457<refsect1>
20458<title>Description</title>
20459<para>
20460   If configured using <function>snd_soc_jack_add_pins</function> then the associated
20461   DAPM pins will be enabled or disabled as appropriate and DAPM
20462   synchronised.
20463</para>
20464</refsect1>
20465<refsect1>
20466<title>Note</title>
20467<para>
20468   This function uses mutexes and should be called from a
20469   context which can sleep (such as a workqueue).
20470</para>
20471</refsect1>
20472</refentry>
20473
20474<refentry id="API-snd-soc-jack-add-zones">
20475<refentryinfo>
20476 <title>LINUX</title>
20477 <productname>Kernel Hackers Manual</productname>
20478 <date>July 2017</date>
20479</refentryinfo>
20480<refmeta>
20481 <refentrytitle><phrase>snd_soc_jack_add_zones</phrase></refentrytitle>
20482 <manvolnum>9</manvolnum>
20483 <refmiscinfo class="version">4.4.14</refmiscinfo>
20484</refmeta>
20485<refnamediv>
20486 <refname>snd_soc_jack_add_zones</refname>
20487 <refpurpose>
20488     Associate voltage zones with jack
20489 </refpurpose>
20490</refnamediv>
20491<refsynopsisdiv>
20492 <title>Synopsis</title>
20493  <funcsynopsis><funcprototype>
20494   <funcdef>int <function>snd_soc_jack_add_zones </function></funcdef>
20495   <paramdef>struct snd_soc_jack * <parameter>jack</parameter></paramdef>
20496   <paramdef>int <parameter>count</parameter></paramdef>
20497   <paramdef>struct snd_soc_jack_zone * <parameter>zones</parameter></paramdef>
20498  </funcprototype></funcsynopsis>
20499</refsynopsisdiv>
20500<refsect1>
20501 <title>Arguments</title>
20502 <variablelist>
20503  <varlistentry>
20504   <term><parameter>jack</parameter></term>
20505   <listitem>
20506    <para>
20507     ASoC jack
20508    </para>
20509   </listitem>
20510  </varlistentry>
20511  <varlistentry>
20512   <term><parameter>count</parameter></term>
20513   <listitem>
20514    <para>
20515     Number of zones
20516    </para>
20517   </listitem>
20518  </varlistentry>
20519  <varlistentry>
20520   <term><parameter>zones</parameter></term>
20521   <listitem>
20522    <para>
20523     Array of zones
20524    </para>
20525   </listitem>
20526  </varlistentry>
20527 </variablelist>
20528</refsect1>
20529<refsect1>
20530<title>Description</title>
20531<para>
20532   After this function has been called the zones specified in the
20533   array will be associated with the jack.
20534</para>
20535</refsect1>
20536</refentry>
20537
20538<refentry id="API-snd-soc-jack-get-type">
20539<refentryinfo>
20540 <title>LINUX</title>
20541 <productname>Kernel Hackers Manual</productname>
20542 <date>July 2017</date>
20543</refentryinfo>
20544<refmeta>
20545 <refentrytitle><phrase>snd_soc_jack_get_type</phrase></refentrytitle>
20546 <manvolnum>9</manvolnum>
20547 <refmiscinfo class="version">4.4.14</refmiscinfo>
20548</refmeta>
20549<refnamediv>
20550 <refname>snd_soc_jack_get_type</refname>
20551 <refpurpose>
20552     Based on the mic bias value, this function returns the type of jack from the zones declared in the jack type
20553 </refpurpose>
20554</refnamediv>
20555<refsynopsisdiv>
20556 <title>Synopsis</title>
20557  <funcsynopsis><funcprototype>
20558   <funcdef>int <function>snd_soc_jack_get_type </function></funcdef>
20559   <paramdef>struct snd_soc_jack * <parameter>jack</parameter></paramdef>
20560   <paramdef>int <parameter>micbias_voltage</parameter></paramdef>
20561  </funcprototype></funcsynopsis>
20562</refsynopsisdiv>
20563<refsect1>
20564 <title>Arguments</title>
20565 <variablelist>
20566  <varlistentry>
20567   <term><parameter>jack</parameter></term>
20568   <listitem>
20569    <para>
20570     ASoC jack
20571    </para>
20572   </listitem>
20573  </varlistentry>
20574  <varlistentry>
20575   <term><parameter>micbias_voltage</parameter></term>
20576   <listitem>
20577    <para>
20578     mic bias voltage at adc channel when jack is plugged in
20579    </para>
20580   </listitem>
20581  </varlistentry>
20582 </variablelist>
20583</refsect1>
20584<refsect1>
20585<title>Description</title>
20586<para>
20587   Based on the mic bias value passed, this function helps identify
20588   the type of jack from the already declared jack zones
20589</para>
20590</refsect1>
20591</refentry>
20592
20593<refentry id="API-snd-soc-jack-add-pins">
20594<refentryinfo>
20595 <title>LINUX</title>
20596 <productname>Kernel Hackers Manual</productname>
20597 <date>July 2017</date>
20598</refentryinfo>
20599<refmeta>
20600 <refentrytitle><phrase>snd_soc_jack_add_pins</phrase></refentrytitle>
20601 <manvolnum>9</manvolnum>
20602 <refmiscinfo class="version">4.4.14</refmiscinfo>
20603</refmeta>
20604<refnamediv>
20605 <refname>snd_soc_jack_add_pins</refname>
20606 <refpurpose>
20607     Associate DAPM pins with an ASoC jack
20608 </refpurpose>
20609</refnamediv>
20610<refsynopsisdiv>
20611 <title>Synopsis</title>
20612  <funcsynopsis><funcprototype>
20613   <funcdef>int <function>snd_soc_jack_add_pins </function></funcdef>
20614   <paramdef>struct snd_soc_jack * <parameter>jack</parameter></paramdef>
20615   <paramdef>int <parameter>count</parameter></paramdef>
20616   <paramdef>struct snd_soc_jack_pin * <parameter>pins</parameter></paramdef>
20617  </funcprototype></funcsynopsis>
20618</refsynopsisdiv>
20619<refsect1>
20620 <title>Arguments</title>
20621 <variablelist>
20622  <varlistentry>
20623   <term><parameter>jack</parameter></term>
20624   <listitem>
20625    <para>
20626     ASoC jack
20627    </para>
20628   </listitem>
20629  </varlistentry>
20630  <varlistentry>
20631   <term><parameter>count</parameter></term>
20632   <listitem>
20633    <para>
20634     Number of pins
20635    </para>
20636   </listitem>
20637  </varlistentry>
20638  <varlistentry>
20639   <term><parameter>pins</parameter></term>
20640   <listitem>
20641    <para>
20642     Array of pins
20643    </para>
20644   </listitem>
20645  </varlistentry>
20646 </variablelist>
20647</refsect1>
20648<refsect1>
20649<title>Description</title>
20650<para>
20651   After this function has been called the DAPM pins specified in the
20652   pins array will have their status updated to reflect the current
20653   state of the jack whenever the jack status is updated.
20654</para>
20655</refsect1>
20656</refentry>
20657
20658<refentry id="API-snd-soc-jack-notifier-register">
20659<refentryinfo>
20660 <title>LINUX</title>
20661 <productname>Kernel Hackers Manual</productname>
20662 <date>July 2017</date>
20663</refentryinfo>
20664<refmeta>
20665 <refentrytitle><phrase>snd_soc_jack_notifier_register</phrase></refentrytitle>
20666 <manvolnum>9</manvolnum>
20667 <refmiscinfo class="version">4.4.14</refmiscinfo>
20668</refmeta>
20669<refnamediv>
20670 <refname>snd_soc_jack_notifier_register</refname>
20671 <refpurpose>
20672     Register a notifier for jack status
20673 </refpurpose>
20674</refnamediv>
20675<refsynopsisdiv>
20676 <title>Synopsis</title>
20677  <funcsynopsis><funcprototype>
20678   <funcdef>void <function>snd_soc_jack_notifier_register </function></funcdef>
20679   <paramdef>struct snd_soc_jack * <parameter>jack</parameter></paramdef>
20680   <paramdef>struct notifier_block * <parameter>nb</parameter></paramdef>
20681  </funcprototype></funcsynopsis>
20682</refsynopsisdiv>
20683<refsect1>
20684 <title>Arguments</title>
20685 <variablelist>
20686  <varlistentry>
20687   <term><parameter>jack</parameter></term>
20688   <listitem>
20689    <para>
20690     ASoC jack
20691    </para>
20692   </listitem>
20693  </varlistentry>
20694  <varlistentry>
20695   <term><parameter>nb</parameter></term>
20696   <listitem>
20697    <para>
20698     Notifier block to register
20699    </para>
20700   </listitem>
20701  </varlistentry>
20702 </variablelist>
20703</refsect1>
20704<refsect1>
20705<title>Description</title>
20706<para>
20707   Register for notification of the current status of the jack.  Note
20708   that it is not possible to report additional jack events in the
20709   callback from the notifier, this is intended to support
20710   applications such as enabling electrical detection only when a
20711   mechanical detection event has occurred.
20712</para>
20713</refsect1>
20714</refentry>
20715
20716<refentry id="API-snd-soc-jack-notifier-unregister">
20717<refentryinfo>
20718 <title>LINUX</title>
20719 <productname>Kernel Hackers Manual</productname>
20720 <date>July 2017</date>
20721</refentryinfo>
20722<refmeta>
20723 <refentrytitle><phrase>snd_soc_jack_notifier_unregister</phrase></refentrytitle>
20724 <manvolnum>9</manvolnum>
20725 <refmiscinfo class="version">4.4.14</refmiscinfo>
20726</refmeta>
20727<refnamediv>
20728 <refname>snd_soc_jack_notifier_unregister</refname>
20729 <refpurpose>
20730     Unregister a notifier for jack status
20731 </refpurpose>
20732</refnamediv>
20733<refsynopsisdiv>
20734 <title>Synopsis</title>
20735  <funcsynopsis><funcprototype>
20736   <funcdef>void <function>snd_soc_jack_notifier_unregister </function></funcdef>
20737   <paramdef>struct snd_soc_jack * <parameter>jack</parameter></paramdef>
20738   <paramdef>struct notifier_block * <parameter>nb</parameter></paramdef>
20739  </funcprototype></funcsynopsis>
20740</refsynopsisdiv>
20741<refsect1>
20742 <title>Arguments</title>
20743 <variablelist>
20744  <varlistentry>
20745   <term><parameter>jack</parameter></term>
20746   <listitem>
20747    <para>
20748     ASoC jack
20749    </para>
20750   </listitem>
20751  </varlistentry>
20752  <varlistentry>
20753   <term><parameter>nb</parameter></term>
20754   <listitem>
20755    <para>
20756     Notifier block to unregister
20757    </para>
20758   </listitem>
20759  </varlistentry>
20760 </variablelist>
20761</refsect1>
20762<refsect1>
20763<title>Description</title>
20764<para>
20765   Stop notifying for status changes.
20766</para>
20767</refsect1>
20768</refentry>
20769
20770<refentry id="API-snd-soc-jack-add-gpios">
20771<refentryinfo>
20772 <title>LINUX</title>
20773 <productname>Kernel Hackers Manual</productname>
20774 <date>July 2017</date>
20775</refentryinfo>
20776<refmeta>
20777 <refentrytitle><phrase>snd_soc_jack_add_gpios</phrase></refentrytitle>
20778 <manvolnum>9</manvolnum>
20779 <refmiscinfo class="version">4.4.14</refmiscinfo>
20780</refmeta>
20781<refnamediv>
20782 <refname>snd_soc_jack_add_gpios</refname>
20783 <refpurpose>
20784     Associate GPIO pins with an ASoC jack
20785 </refpurpose>
20786</refnamediv>
20787<refsynopsisdiv>
20788 <title>Synopsis</title>
20789  <funcsynopsis><funcprototype>
20790   <funcdef>int <function>snd_soc_jack_add_gpios </function></funcdef>
20791   <paramdef>struct snd_soc_jack * <parameter>jack</parameter></paramdef>
20792   <paramdef>int <parameter>count</parameter></paramdef>
20793   <paramdef>struct snd_soc_jack_gpio * <parameter>gpios</parameter></paramdef>
20794  </funcprototype></funcsynopsis>
20795</refsynopsisdiv>
20796<refsect1>
20797 <title>Arguments</title>
20798 <variablelist>
20799  <varlistentry>
20800   <term><parameter>jack</parameter></term>
20801   <listitem>
20802    <para>
20803     ASoC jack
20804    </para>
20805   </listitem>
20806  </varlistentry>
20807  <varlistentry>
20808   <term><parameter>count</parameter></term>
20809   <listitem>
20810    <para>
20811     number of pins
20812    </para>
20813   </listitem>
20814  </varlistentry>
20815  <varlistentry>
20816   <term><parameter>gpios</parameter></term>
20817   <listitem>
20818    <para>
20819     array of gpio pins
20820    </para>
20821   </listitem>
20822  </varlistentry>
20823 </variablelist>
20824</refsect1>
20825<refsect1>
20826<title>Description</title>
20827<para>
20828   This function will request gpio, set data direction and request irq
20829   for each gpio in the array.
20830</para>
20831</refsect1>
20832</refentry>
20833
20834<refentry id="API-snd-soc-jack-add-gpiods">
20835<refentryinfo>
20836 <title>LINUX</title>
20837 <productname>Kernel Hackers Manual</productname>
20838 <date>July 2017</date>
20839</refentryinfo>
20840<refmeta>
20841 <refentrytitle><phrase>snd_soc_jack_add_gpiods</phrase></refentrytitle>
20842 <manvolnum>9</manvolnum>
20843 <refmiscinfo class="version">4.4.14</refmiscinfo>
20844</refmeta>
20845<refnamediv>
20846 <refname>snd_soc_jack_add_gpiods</refname>
20847 <refpurpose>
20848     Associate GPIO descriptor pins with an ASoC jack
20849 </refpurpose>
20850</refnamediv>
20851<refsynopsisdiv>
20852 <title>Synopsis</title>
20853  <funcsynopsis><funcprototype>
20854   <funcdef>int <function>snd_soc_jack_add_gpiods </function></funcdef>
20855   <paramdef>struct device * <parameter>gpiod_dev</parameter></paramdef>
20856   <paramdef>struct snd_soc_jack * <parameter>jack</parameter></paramdef>
20857   <paramdef>int <parameter>count</parameter></paramdef>
20858   <paramdef>struct snd_soc_jack_gpio * <parameter>gpios</parameter></paramdef>
20859  </funcprototype></funcsynopsis>
20860</refsynopsisdiv>
20861<refsect1>
20862 <title>Arguments</title>
20863 <variablelist>
20864  <varlistentry>
20865   <term><parameter>gpiod_dev</parameter></term>
20866   <listitem>
20867    <para>
20868     GPIO consumer device
20869    </para>
20870   </listitem>
20871  </varlistentry>
20872  <varlistentry>
20873   <term><parameter>jack</parameter></term>
20874   <listitem>
20875    <para>
20876     ASoC jack
20877    </para>
20878   </listitem>
20879  </varlistentry>
20880  <varlistentry>
20881   <term><parameter>count</parameter></term>
20882   <listitem>
20883    <para>
20884     number of pins
20885    </para>
20886   </listitem>
20887  </varlistentry>
20888  <varlistentry>
20889   <term><parameter>gpios</parameter></term>
20890   <listitem>
20891    <para>
20892     array of gpio pins
20893    </para>
20894   </listitem>
20895  </varlistentry>
20896 </variablelist>
20897</refsect1>
20898<refsect1>
20899<title>Description</title>
20900<para>
20901   This function will request gpio, set data direction and request irq
20902   for each gpio in the array.
20903</para>
20904</refsect1>
20905</refentry>
20906
20907<refentry id="API-snd-soc-jack-free-gpios">
20908<refentryinfo>
20909 <title>LINUX</title>
20910 <productname>Kernel Hackers Manual</productname>
20911 <date>July 2017</date>
20912</refentryinfo>
20913<refmeta>
20914 <refentrytitle><phrase>snd_soc_jack_free_gpios</phrase></refentrytitle>
20915 <manvolnum>9</manvolnum>
20916 <refmiscinfo class="version">4.4.14</refmiscinfo>
20917</refmeta>
20918<refnamediv>
20919 <refname>snd_soc_jack_free_gpios</refname>
20920 <refpurpose>
20921     Release GPIO pins' resources of an ASoC jack
20922 </refpurpose>
20923</refnamediv>
20924<refsynopsisdiv>
20925 <title>Synopsis</title>
20926  <funcsynopsis><funcprototype>
20927   <funcdef>void <function>snd_soc_jack_free_gpios </function></funcdef>
20928   <paramdef>struct snd_soc_jack * <parameter>jack</parameter></paramdef>
20929   <paramdef>int <parameter>count</parameter></paramdef>
20930   <paramdef>struct snd_soc_jack_gpio * <parameter>gpios</parameter></paramdef>
20931  </funcprototype></funcsynopsis>
20932</refsynopsisdiv>
20933<refsect1>
20934 <title>Arguments</title>
20935 <variablelist>
20936  <varlistentry>
20937   <term><parameter>jack</parameter></term>
20938   <listitem>
20939    <para>
20940     ASoC jack
20941    </para>
20942   </listitem>
20943  </varlistentry>
20944  <varlistentry>
20945   <term><parameter>count</parameter></term>
20946   <listitem>
20947    <para>
20948     number of pins
20949    </para>
20950   </listitem>
20951  </varlistentry>
20952  <varlistentry>
20953   <term><parameter>gpios</parameter></term>
20954   <listitem>
20955    <para>
20956     array of gpio pins
20957    </para>
20958   </listitem>
20959  </varlistentry>
20960 </variablelist>
20961</refsect1>
20962<refsect1>
20963<title>Description</title>
20964<para>
20965   Release gpio and irq resources for gpio pins associated with an ASoC jack.
20966</para>
20967</refsect1>
20968</refentry>
20969
20970     </sect1>
20971     <sect1><title>ISA DMA Helpers</title>
20972<!-- sound/core/isadma.c -->
20973<refentry id="API-snd-dma-program">
20974<refentryinfo>
20975 <title>LINUX</title>
20976 <productname>Kernel Hackers Manual</productname>
20977 <date>July 2017</date>
20978</refentryinfo>
20979<refmeta>
20980 <refentrytitle><phrase>snd_dma_program</phrase></refentrytitle>
20981 <manvolnum>9</manvolnum>
20982 <refmiscinfo class="version">4.4.14</refmiscinfo>
20983</refmeta>
20984<refnamediv>
20985 <refname>snd_dma_program</refname>
20986 <refpurpose>
20987  program an ISA DMA transfer
20988 </refpurpose>
20989</refnamediv>
20990<refsynopsisdiv>
20991 <title>Synopsis</title>
20992  <funcsynopsis><funcprototype>
20993   <funcdef>void <function>snd_dma_program </function></funcdef>
20994   <paramdef>unsigned long <parameter>dma</parameter></paramdef>
20995   <paramdef>unsigned long <parameter>addr</parameter></paramdef>
20996   <paramdef>unsigned int <parameter>size</parameter></paramdef>
20997   <paramdef>unsigned short <parameter>mode</parameter></paramdef>
20998  </funcprototype></funcsynopsis>
20999</refsynopsisdiv>
21000<refsect1>
21001 <title>Arguments</title>
21002 <variablelist>
21003  <varlistentry>
21004   <term><parameter>dma</parameter></term>
21005   <listitem>
21006    <para>
21007     the dma number
21008    </para>
21009   </listitem>
21010  </varlistentry>
21011  <varlistentry>
21012   <term><parameter>addr</parameter></term>
21013   <listitem>
21014    <para>
21015     the physical address of the buffer
21016    </para>
21017   </listitem>
21018  </varlistentry>
21019  <varlistentry>
21020   <term><parameter>size</parameter></term>
21021   <listitem>
21022    <para>
21023     the DMA transfer size
21024    </para>
21025   </listitem>
21026  </varlistentry>
21027  <varlistentry>
21028   <term><parameter>mode</parameter></term>
21029   <listitem>
21030    <para>
21031     the DMA transfer mode, DMA_MODE_XXX
21032    </para>
21033   </listitem>
21034  </varlistentry>
21035 </variablelist>
21036</refsect1>
21037<refsect1>
21038<title>Description</title>
21039<para>
21040   Programs an ISA DMA transfer for the given buffer.
21041</para>
21042</refsect1>
21043</refentry>
21044
21045<refentry id="API-snd-dma-disable">
21046<refentryinfo>
21047 <title>LINUX</title>
21048 <productname>Kernel Hackers Manual</productname>
21049 <date>July 2017</date>
21050</refentryinfo>
21051<refmeta>
21052 <refentrytitle><phrase>snd_dma_disable</phrase></refentrytitle>
21053 <manvolnum>9</manvolnum>
21054 <refmiscinfo class="version">4.4.14</refmiscinfo>
21055</refmeta>
21056<refnamediv>
21057 <refname>snd_dma_disable</refname>
21058 <refpurpose>
21059     stop the ISA DMA transfer
21060 </refpurpose>
21061</refnamediv>
21062<refsynopsisdiv>
21063 <title>Synopsis</title>
21064  <funcsynopsis><funcprototype>
21065   <funcdef>void <function>snd_dma_disable </function></funcdef>
21066   <paramdef>unsigned long <parameter>dma</parameter></paramdef>
21067  </funcprototype></funcsynopsis>
21068</refsynopsisdiv>
21069<refsect1>
21070 <title>Arguments</title>
21071 <variablelist>
21072  <varlistentry>
21073   <term><parameter>dma</parameter></term>
21074   <listitem>
21075    <para>
21076     the dma number
21077    </para>
21078   </listitem>
21079  </varlistentry>
21080 </variablelist>
21081</refsect1>
21082<refsect1>
21083<title>Description</title>
21084<para>
21085   Stops the ISA DMA transfer.
21086</para>
21087</refsect1>
21088</refentry>
21089
21090<refentry id="API-snd-dma-pointer">
21091<refentryinfo>
21092 <title>LINUX</title>
21093 <productname>Kernel Hackers Manual</productname>
21094 <date>July 2017</date>
21095</refentryinfo>
21096<refmeta>
21097 <refentrytitle><phrase>snd_dma_pointer</phrase></refentrytitle>
21098 <manvolnum>9</manvolnum>
21099 <refmiscinfo class="version">4.4.14</refmiscinfo>
21100</refmeta>
21101<refnamediv>
21102 <refname>snd_dma_pointer</refname>
21103 <refpurpose>
21104     return the current pointer to DMA transfer buffer in bytes
21105 </refpurpose>
21106</refnamediv>
21107<refsynopsisdiv>
21108 <title>Synopsis</title>
21109  <funcsynopsis><funcprototype>
21110   <funcdef>unsigned int <function>snd_dma_pointer </function></funcdef>
21111   <paramdef>unsigned long <parameter>dma</parameter></paramdef>
21112   <paramdef>unsigned int <parameter>size</parameter></paramdef>
21113  </funcprototype></funcsynopsis>
21114</refsynopsisdiv>
21115<refsect1>
21116 <title>Arguments</title>
21117 <variablelist>
21118  <varlistentry>
21119   <term><parameter>dma</parameter></term>
21120   <listitem>
21121    <para>
21122     the dma number
21123    </para>
21124   </listitem>
21125  </varlistentry>
21126  <varlistentry>
21127   <term><parameter>size</parameter></term>
21128   <listitem>
21129    <para>
21130     the dma transfer size
21131    </para>
21132   </listitem>
21133  </varlistentry>
21134 </variablelist>
21135</refsect1>
21136<refsect1>
21137<title>Return</title>
21138<para>
21139   The current pointer in DMA transfer buffer in bytes.
21140</para>
21141</refsect1>
21142</refentry>
21143
21144     </sect1>
21145     <sect1><title>Other Helper Macros</title>
21146<!-- include/sound/core.h -->
21147<refentry id="API-snd-printk">
21148<refentryinfo>
21149 <title>LINUX</title>
21150 <productname>Kernel Hackers Manual</productname>
21151 <date>July 2017</date>
21152</refentryinfo>
21153<refmeta>
21154 <refentrytitle><phrase>snd_printk</phrase></refentrytitle>
21155 <manvolnum>9</manvolnum>
21156 <refmiscinfo class="version">4.4.14</refmiscinfo>
21157</refmeta>
21158<refnamediv>
21159 <refname>snd_printk</refname>
21160 <refpurpose>
21161  printk wrapper
21162 </refpurpose>
21163</refnamediv>
21164<refsynopsisdiv>
21165 <title>Synopsis</title>
21166  <funcsynopsis><funcprototype>
21167   <funcdef> <function>snd_printk </function></funcdef>
21168   <paramdef> <parameter>fmt</parameter></paramdef>
21169   <paramdef> <parameter>args...</parameter></paramdef>
21170  </funcprototype></funcsynopsis>
21171</refsynopsisdiv>
21172<refsect1>
21173 <title>Arguments</title>
21174 <variablelist>
21175  <varlistentry>
21176   <term><parameter>fmt</parameter></term>
21177   <listitem>
21178    <para>
21179     format string
21180    </para>
21181   </listitem>
21182  </varlistentry>
21183  <varlistentry>
21184   <term><parameter>args...</parameter></term>
21185   <listitem>
21186    <para>
21187     variable arguments
21188    </para>
21189   </listitem>
21190  </varlistentry>
21191 </variablelist>
21192</refsect1>
21193<refsect1>
21194<title>Description</title>
21195<para>
21196   Works like <function>printk</function> but prints the file and the line of the caller
21197   when configured with CONFIG_SND_VERBOSE_PRINTK.
21198</para>
21199</refsect1>
21200</refentry>
21201
21202<refentry id="API-snd-printd">
21203<refentryinfo>
21204 <title>LINUX</title>
21205 <productname>Kernel Hackers Manual</productname>
21206 <date>July 2017</date>
21207</refentryinfo>
21208<refmeta>
21209 <refentrytitle><phrase>snd_printd</phrase></refentrytitle>
21210 <manvolnum>9</manvolnum>
21211 <refmiscinfo class="version">4.4.14</refmiscinfo>
21212</refmeta>
21213<refnamediv>
21214 <refname>snd_printd</refname>
21215 <refpurpose>
21216     debug printk
21217 </refpurpose>
21218</refnamediv>
21219<refsynopsisdiv>
21220 <title>Synopsis</title>
21221  <funcsynopsis><funcprototype>
21222   <funcdef> <function>snd_printd </function></funcdef>
21223   <paramdef> <parameter>fmt</parameter></paramdef>
21224   <paramdef> <parameter>args...</parameter></paramdef>
21225  </funcprototype></funcsynopsis>
21226</refsynopsisdiv>
21227<refsect1>
21228 <title>Arguments</title>
21229 <variablelist>
21230  <varlistentry>
21231   <term><parameter>fmt</parameter></term>
21232   <listitem>
21233    <para>
21234     format string
21235    </para>
21236   </listitem>
21237  </varlistentry>
21238  <varlistentry>
21239   <term><parameter>args...</parameter></term>
21240   <listitem>
21241    <para>
21242     variable arguments
21243    </para>
21244   </listitem>
21245  </varlistentry>
21246 </variablelist>
21247</refsect1>
21248<refsect1>
21249<title>Description</title>
21250<para>
21251   Works like <function>snd_printk</function> for debugging purposes.
21252   Ignored when CONFIG_SND_DEBUG is not set.
21253</para>
21254</refsect1>
21255</refentry>
21256
21257<refentry id="API-snd-BUG">
21258<refentryinfo>
21259 <title>LINUX</title>
21260 <productname>Kernel Hackers Manual</productname>
21261 <date>July 2017</date>
21262</refentryinfo>
21263<refmeta>
21264 <refentrytitle><phrase>snd_BUG</phrase></refentrytitle>
21265 <manvolnum>9</manvolnum>
21266 <refmiscinfo class="version">4.4.14</refmiscinfo>
21267</refmeta>
21268<refnamediv>
21269 <refname>snd_BUG</refname>
21270 <refpurpose>
21271     give a BUG warning message and stack trace
21272 </refpurpose>
21273</refnamediv>
21274<refsynopsisdiv>
21275 <title>Synopsis</title>
21276  <funcsynopsis><funcprototype>
21277   <funcdef> <function>snd_BUG </function></funcdef>
21278  <void/>
21279  </funcprototype></funcsynopsis>
21280</refsynopsisdiv>
21281<refsect1>
21282 <title>Arguments</title>
21283 <para>
21284  None
21285 </para>
21286</refsect1>
21287<refsect1>
21288<title>Description</title>
21289<para>
21290   </para><para>
21291
21292   Calls <function>WARN</function> if CONFIG_SND_DEBUG is set.
21293   Ignored when CONFIG_SND_DEBUG is not set.
21294</para>
21295</refsect1>
21296</refentry>
21297
21298<refentry id="API-snd-printd-ratelimit">
21299<refentryinfo>
21300 <title>LINUX</title>
21301 <productname>Kernel Hackers Manual</productname>
21302 <date>July 2017</date>
21303</refentryinfo>
21304<refmeta>
21305 <refentrytitle><phrase>snd_printd_ratelimit</phrase></refentrytitle>
21306 <manvolnum>9</manvolnum>
21307 <refmiscinfo class="version">4.4.14</refmiscinfo>
21308</refmeta>
21309<refnamediv>
21310 <refname>snd_printd_ratelimit</refname>
21311 <refpurpose>
21312   </refpurpose>
21313</refnamediv>
21314<refsynopsisdiv>
21315 <title>Synopsis</title>
21316  <funcsynopsis><funcprototype>
21317   <funcdef> <function>snd_printd_ratelimit </function></funcdef>
21318  <void/>
21319  </funcprototype></funcsynopsis>
21320</refsynopsisdiv>
21321<refsect1>
21322 <title>Arguments</title>
21323 <para>
21324  None
21325 </para>
21326</refsect1>
21327</refentry>
21328
21329<refentry id="API-snd-BUG-ON">
21330<refentryinfo>
21331 <title>LINUX</title>
21332 <productname>Kernel Hackers Manual</productname>
21333 <date>July 2017</date>
21334</refentryinfo>
21335<refmeta>
21336 <refentrytitle><phrase>snd_BUG_ON</phrase></refentrytitle>
21337 <manvolnum>9</manvolnum>
21338 <refmiscinfo class="version">4.4.14</refmiscinfo>
21339</refmeta>
21340<refnamediv>
21341 <refname>snd_BUG_ON</refname>
21342 <refpurpose>
21343     debugging check macro
21344 </refpurpose>
21345</refnamediv>
21346<refsynopsisdiv>
21347 <title>Synopsis</title>
21348  <funcsynopsis><funcprototype>
21349   <funcdef> <function>snd_BUG_ON </function></funcdef>
21350   <paramdef> <parameter>cond</parameter></paramdef>
21351  </funcprototype></funcsynopsis>
21352</refsynopsisdiv>
21353<refsect1>
21354 <title>Arguments</title>
21355 <variablelist>
21356  <varlistentry>
21357   <term><parameter>cond</parameter></term>
21358   <listitem>
21359    <para>
21360     condition to evaluate
21361    </para>
21362   </listitem>
21363  </varlistentry>
21364 </variablelist>
21365</refsect1>
21366<refsect1>
21367<title>Description</title>
21368<para>
21369   Has the same behavior as WARN_ON when CONFIG_SND_DEBUG is set,
21370   otherwise just evaluates the conditional and returns the value.
21371</para>
21372</refsect1>
21373</refentry>
21374
21375<refentry id="API-snd-printdd">
21376<refentryinfo>
21377 <title>LINUX</title>
21378 <productname>Kernel Hackers Manual</productname>
21379 <date>July 2017</date>
21380</refentryinfo>
21381<refmeta>
21382 <refentrytitle><phrase>snd_printdd</phrase></refentrytitle>
21383 <manvolnum>9</manvolnum>
21384 <refmiscinfo class="version">4.4.14</refmiscinfo>
21385</refmeta>
21386<refnamediv>
21387 <refname>snd_printdd</refname>
21388 <refpurpose>
21389     debug printk
21390 </refpurpose>
21391</refnamediv>
21392<refsynopsisdiv>
21393 <title>Synopsis</title>
21394  <funcsynopsis><funcprototype>
21395   <funcdef> <function>snd_printdd </function></funcdef>
21396   <paramdef> <parameter>format</parameter></paramdef>
21397   <paramdef> <parameter>args...</parameter></paramdef>
21398  </funcprototype></funcsynopsis>
21399</refsynopsisdiv>
21400<refsect1>
21401 <title>Arguments</title>
21402 <variablelist>
21403  <varlistentry>
21404   <term><parameter>format</parameter></term>
21405   <listitem>
21406    <para>
21407     format string
21408    </para>
21409   </listitem>
21410  </varlistentry>
21411  <varlistentry>
21412   <term><parameter>args...</parameter></term>
21413   <listitem>
21414    <para>
21415     variable arguments
21416    </para>
21417   </listitem>
21418  </varlistentry>
21419 </variablelist>
21420</refsect1>
21421<refsect1>
21422<title>Description</title>
21423<para>
21424   Works like <function>snd_printk</function> for debugging purposes.
21425   Ignored when CONFIG_SND_DEBUG_VERBOSE is not set.
21426</para>
21427</refsect1>
21428</refentry>
21429
21430     </sect1>
21431  </chapter>
21432
21433</book>
21434