diff options
author | Takashi Iwai <tiwai@suse.de> | 2012-01-12 03:59:14 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2012-01-12 03:59:14 -0500 |
commit | 627b79628f56c3deeb17dec1edf6899b49552fa4 (patch) | |
tree | deac8b2cce5d70708fa944a270ee031f069226d8 /include/sound | |
parent | 29abceb67f8a230da806db4ed73899595bd2ae76 (diff) | |
parent | 8c3f5d8a9b7d0d8506bc2a0525e012eae02b1853 (diff) |
Merge branch 'topic/misc' into for-linus
Diffstat (limited to 'include/sound')
-rw-r--r-- | include/sound/Kbuild | 2 | ||||
-rw-r--r-- | include/sound/compress_driver.h | 167 | ||||
-rw-r--r-- | include/sound/compress_offload.h | 161 | ||||
-rw-r--r-- | include/sound/compress_params.h | 397 | ||||
-rw-r--r-- | include/sound/core.h | 1 | ||||
-rw-r--r-- | include/sound/minors.h | 4 |
6 files changed, 731 insertions, 1 deletions
diff --git a/include/sound/Kbuild b/include/sound/Kbuild index 802947f6091..6df30ed1581 100644 --- a/include/sound/Kbuild +++ b/include/sound/Kbuild | |||
@@ -6,3 +6,5 @@ header-y += hdsp.h | |||
6 | header-y += hdspm.h | 6 | header-y += hdspm.h |
7 | header-y += sb16_csp.h | 7 | header-y += sb16_csp.h |
8 | header-y += sfnt_info.h | 8 | header-y += sfnt_info.h |
9 | header-y += compress_params.h | ||
10 | header-y += compress_offload.h | ||
diff --git a/include/sound/compress_driver.h b/include/sound/compress_driver.h new file mode 100644 index 00000000000..48f2a1ff2bb --- /dev/null +++ b/include/sound/compress_driver.h | |||
@@ -0,0 +1,167 @@ | |||
1 | /* | ||
2 | * compress_driver.h - compress offload driver definations | ||
3 | * | ||
4 | * Copyright (C) 2011 Intel Corporation | ||
5 | * Authors: Vinod Koul <vinod.koul@linux.intel.com> | ||
6 | * Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> | ||
7 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; version 2 of the License. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, but | ||
14 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
16 | * General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License along | ||
19 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
20 | * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. | ||
21 | * | ||
22 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
23 | * | ||
24 | */ | ||
25 | #ifndef __COMPRESS_DRIVER_H | ||
26 | #define __COMPRESS_DRIVER_H | ||
27 | |||
28 | #include <linux/types.h> | ||
29 | #include <linux/sched.h> | ||
30 | #include <sound/compress_offload.h> | ||
31 | #include <sound/asound.h> | ||
32 | #include <sound/pcm.h> | ||
33 | |||
34 | struct snd_compr_ops; | ||
35 | |||
36 | /** | ||
37 | * struct snd_compr_runtime: runtime stream description | ||
38 | * @state: stream state | ||
39 | * @ops: pointer to DSP callbacks | ||
40 | * @buffer: pointer to kernel buffer, valid only when not in mmap mode or | ||
41 | * DSP doesn't implement copy | ||
42 | * @buffer_size: size of the above buffer | ||
43 | * @fragment_size: size of buffer fragment in bytes | ||
44 | * @fragments: number of such fragments | ||
45 | * @hw_pointer: offset of last location in buffer where DSP copied data | ||
46 | * @app_pointer: offset of last location in buffer where app wrote data | ||
47 | * @total_bytes_available: cumulative number of bytes made available in | ||
48 | * the ring buffer | ||
49 | * @total_bytes_transferred: cumulative bytes transferred by offload DSP | ||
50 | * @sleep: poll sleep | ||
51 | */ | ||
52 | struct snd_compr_runtime { | ||
53 | snd_pcm_state_t state; | ||
54 | struct snd_compr_ops *ops; | ||
55 | void *buffer; | ||
56 | u64 buffer_size; | ||
57 | u32 fragment_size; | ||
58 | u32 fragments; | ||
59 | u64 hw_pointer; | ||
60 | u64 app_pointer; | ||
61 | u64 total_bytes_available; | ||
62 | u64 total_bytes_transferred; | ||
63 | wait_queue_head_t sleep; | ||
64 | }; | ||
65 | |||
66 | /** | ||
67 | * struct snd_compr_stream: compressed stream | ||
68 | * @name: device name | ||
69 | * @ops: pointer to DSP callbacks | ||
70 | * @runtime: pointer to runtime structure | ||
71 | * @device: device pointer | ||
72 | * @direction: stream direction, playback/recording | ||
73 | * @private_data: pointer to DSP private data | ||
74 | */ | ||
75 | struct snd_compr_stream { | ||
76 | const char *name; | ||
77 | struct snd_compr_ops *ops; | ||
78 | struct snd_compr_runtime *runtime; | ||
79 | struct snd_compr *device; | ||
80 | enum snd_compr_direction direction; | ||
81 | void *private_data; | ||
82 | }; | ||
83 | |||
84 | /** | ||
85 | * struct snd_compr_ops: compressed path DSP operations | ||
86 | * @open: Open the compressed stream | ||
87 | * This callback is mandatory and shall keep dsp ready to receive the stream | ||
88 | * parameter | ||
89 | * @free: Close the compressed stream, mandatory | ||
90 | * @set_params: Sets the compressed stream parameters, mandatory | ||
91 | * This can be called in during stream creation only to set codec params | ||
92 | * and the stream properties | ||
93 | * @get_params: retrieve the codec parameters, mandatory | ||
94 | * @trigger: Trigger operations like start, pause, resume, drain, stop. | ||
95 | * This callback is mandatory | ||
96 | * @pointer: Retrieve current h/w pointer information. Mandatory | ||
97 | * @copy: Copy the compressed data to/from userspace, Optional | ||
98 | * Can't be implemented if DSP supports mmap | ||
99 | * @mmap: DSP mmap method to mmap DSP memory | ||
100 | * @ack: Ack for DSP when data is written to audio buffer, Optional | ||
101 | * Not valid if copy is implemented | ||
102 | * @get_caps: Retrieve DSP capabilities, mandatory | ||
103 | * @get_codec_caps: Retrieve capabilities for a specific codec, mandatory | ||
104 | */ | ||
105 | struct snd_compr_ops { | ||
106 | int (*open)(struct snd_compr_stream *stream); | ||
107 | int (*free)(struct snd_compr_stream *stream); | ||
108 | int (*set_params)(struct snd_compr_stream *stream, | ||
109 | struct snd_compr_params *params); | ||
110 | int (*get_params)(struct snd_compr_stream *stream, | ||
111 | struct snd_codec *params); | ||
112 | int (*trigger)(struct snd_compr_stream *stream, int cmd); | ||
113 | int (*pointer)(struct snd_compr_stream *stream, | ||
114 | struct snd_compr_tstamp *tstamp); | ||
115 | int (*copy)(struct snd_compr_stream *stream, const char __user *buf, | ||
116 | size_t count); | ||
117 | int (*mmap)(struct snd_compr_stream *stream, | ||
118 | struct vm_area_struct *vma); | ||
119 | int (*ack)(struct snd_compr_stream *stream, size_t bytes); | ||
120 | int (*get_caps) (struct snd_compr_stream *stream, | ||
121 | struct snd_compr_caps *caps); | ||
122 | int (*get_codec_caps) (struct snd_compr_stream *stream, | ||
123 | struct snd_compr_codec_caps *codec); | ||
124 | }; | ||
125 | |||
126 | /** | ||
127 | * struct snd_compr: Compressed device | ||
128 | * @name: DSP device name | ||
129 | * @dev: Device pointer | ||
130 | * @ops: pointer to DSP callbacks | ||
131 | * @private_data: pointer to DSP pvt data | ||
132 | * @card: sound card pointer | ||
133 | * @direction: Playback or capture direction | ||
134 | * @lock: device lock | ||
135 | * @device: device id | ||
136 | */ | ||
137 | struct snd_compr { | ||
138 | const char *name; | ||
139 | struct device *dev; | ||
140 | struct snd_compr_ops *ops; | ||
141 | void *private_data; | ||
142 | struct snd_card *card; | ||
143 | unsigned int direction; | ||
144 | struct mutex lock; | ||
145 | int device; | ||
146 | }; | ||
147 | |||
148 | /* compress device register APIs */ | ||
149 | int snd_compress_register(struct snd_compr *device); | ||
150 | int snd_compress_deregister(struct snd_compr *device); | ||
151 | int snd_compress_new(struct snd_card *card, int device, | ||
152 | int type, struct snd_compr *compr); | ||
153 | |||
154 | /* dsp driver callback apis | ||
155 | * For playback: driver should call snd_compress_fragment_elapsed() to let the | ||
156 | * framework know that a fragment has been consumed from the ring buffer | ||
157 | * | ||
158 | * For recording: we want to know when a frame is available or when | ||
159 | * at least one frame is available so snd_compress_frame_elapsed() | ||
160 | * callback should be called when a encodeded frame is available | ||
161 | */ | ||
162 | static inline void snd_compr_fragment_elapsed(struct snd_compr_stream *stream) | ||
163 | { | ||
164 | wake_up(&stream->runtime->sleep); | ||
165 | } | ||
166 | |||
167 | #endif | ||
diff --git a/include/sound/compress_offload.h b/include/sound/compress_offload.h new file mode 100644 index 00000000000..05341a43fed --- /dev/null +++ b/include/sound/compress_offload.h | |||
@@ -0,0 +1,161 @@ | |||
1 | /* | ||
2 | * compress_offload.h - compress offload header definations | ||
3 | * | ||
4 | * Copyright (C) 2011 Intel Corporation | ||
5 | * Authors: Vinod Koul <vinod.koul@linux.intel.com> | ||
6 | * Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> | ||
7 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; version 2 of the License. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, but | ||
14 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
16 | * General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License along | ||
19 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
20 | * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. | ||
21 | * | ||
22 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
23 | * | ||
24 | */ | ||
25 | #ifndef __COMPRESS_OFFLOAD_H | ||
26 | #define __COMPRESS_OFFLOAD_H | ||
27 | |||
28 | #include <linux/types.h> | ||
29 | #include <sound/asound.h> | ||
30 | #include <sound/compress_params.h> | ||
31 | |||
32 | |||
33 | #define SNDRV_COMPRESS_VERSION SNDRV_PROTOCOL_VERSION(0, 1, 0) | ||
34 | /** | ||
35 | * struct snd_compressed_buffer: compressed buffer | ||
36 | * @fragment_size: size of buffer fragment in bytes | ||
37 | * @fragments: number of such fragments | ||
38 | */ | ||
39 | struct snd_compressed_buffer { | ||
40 | __u32 fragment_size; | ||
41 | __u32 fragments; | ||
42 | }; | ||
43 | |||
44 | /** | ||
45 | * struct snd_compr_params: compressed stream params | ||
46 | * @buffer: buffer description | ||
47 | * @codec: codec parameters | ||
48 | * @no_wake_mode: dont wake on fragment elapsed | ||
49 | */ | ||
50 | struct snd_compr_params { | ||
51 | struct snd_compressed_buffer buffer; | ||
52 | struct snd_codec codec; | ||
53 | __u8 no_wake_mode; | ||
54 | }; | ||
55 | |||
56 | /** | ||
57 | * struct snd_compr_tstamp: timestamp descriptor | ||
58 | * @byte_offset: Byte offset in ring buffer to DSP | ||
59 | * @copied_total: Total number of bytes copied from/to ring buffer to/by DSP | ||
60 | * @pcm_frames: Frames decoded or encoded by DSP. This field will evolve by | ||
61 | * large steps and should only be used to monitor encoding/decoding | ||
62 | * progress. It shall not be used for timing estimates. | ||
63 | * @pcm_io_frames: Frames rendered or received by DSP into a mixer or an audio | ||
64 | * output/input. This field should be used for A/V sync or time estimates. | ||
65 | * @sampling_rate: sampling rate of audio | ||
66 | */ | ||
67 | struct snd_compr_tstamp { | ||
68 | __u32 byte_offset; | ||
69 | __u32 copied_total; | ||
70 | snd_pcm_uframes_t pcm_frames; | ||
71 | snd_pcm_uframes_t pcm_io_frames; | ||
72 | __u32 sampling_rate; | ||
73 | }; | ||
74 | |||
75 | /** | ||
76 | * struct snd_compr_avail: avail descriptor | ||
77 | * @avail: Number of bytes available in ring buffer for writing/reading | ||
78 | * @tstamp: timestamp infomation | ||
79 | */ | ||
80 | struct snd_compr_avail { | ||
81 | __u64 avail; | ||
82 | struct snd_compr_tstamp tstamp; | ||
83 | }; | ||
84 | |||
85 | enum snd_compr_direction { | ||
86 | SND_COMPRESS_PLAYBACK = 0, | ||
87 | SND_COMPRESS_CAPTURE | ||
88 | }; | ||
89 | |||
90 | /** | ||
91 | * struct snd_compr_caps: caps descriptor | ||
92 | * @codecs: pointer to array of codecs | ||
93 | * @direction: direction supported. Of type snd_compr_direction | ||
94 | * @min_fragment_size: minimum fragment supported by DSP | ||
95 | * @max_fragment_size: maximum fragment supported by DSP | ||
96 | * @min_fragments: min fragments supported by DSP | ||
97 | * @max_fragments: max fragments supported by DSP | ||
98 | * @num_codecs: number of codecs supported | ||
99 | * @reserved: reserved field | ||
100 | */ | ||
101 | struct snd_compr_caps { | ||
102 | __u32 num_codecs; | ||
103 | __u32 direction; | ||
104 | __u32 min_fragment_size; | ||
105 | __u32 max_fragment_size; | ||
106 | __u32 min_fragments; | ||
107 | __u32 max_fragments; | ||
108 | __u32 codecs[MAX_NUM_CODECS]; | ||
109 | __u32 reserved[11]; | ||
110 | }; | ||
111 | |||
112 | /** | ||
113 | * struct snd_compr_codec_caps: query capability of codec | ||
114 | * @codec: codec for which capability is queried | ||
115 | * @num_descriptors: number of codec descriptors | ||
116 | * @descriptor: array of codec capability descriptor | ||
117 | */ | ||
118 | struct snd_compr_codec_caps { | ||
119 | __u32 codec; | ||
120 | __u32 num_descriptors; | ||
121 | struct snd_codec_desc descriptor[MAX_NUM_CODEC_DESCRIPTORS]; | ||
122 | }; | ||
123 | |||
124 | /** | ||
125 | * compress path ioctl definitions | ||
126 | * SNDRV_COMPRESS_GET_CAPS: Query capability of DSP | ||
127 | * SNDRV_COMPRESS_GET_CODEC_CAPS: Query capability of a codec | ||
128 | * SNDRV_COMPRESS_SET_PARAMS: Set codec and stream parameters | ||
129 | * Note: only codec params can be changed runtime and stream params cant be | ||
130 | * SNDRV_COMPRESS_GET_PARAMS: Query codec params | ||
131 | * SNDRV_COMPRESS_TSTAMP: get the current timestamp value | ||
132 | * SNDRV_COMPRESS_AVAIL: get the current buffer avail value. | ||
133 | * This also queries the tstamp properties | ||
134 | * SNDRV_COMPRESS_PAUSE: Pause the running stream | ||
135 | * SNDRV_COMPRESS_RESUME: resume a paused stream | ||
136 | * SNDRV_COMPRESS_START: Start a stream | ||
137 | * SNDRV_COMPRESS_STOP: stop a running stream, discarding ring buffer content | ||
138 | * and the buffers currently with DSP | ||
139 | * SNDRV_COMPRESS_DRAIN: Play till end of buffers and stop after that | ||
140 | * SNDRV_COMPRESS_IOCTL_VERSION: Query the API version | ||
141 | */ | ||
142 | #define SNDRV_COMPRESS_IOCTL_VERSION _IOR('C', 0x00, int) | ||
143 | #define SNDRV_COMPRESS_GET_CAPS _IOWR('C', 0x10, struct snd_compr_caps) | ||
144 | #define SNDRV_COMPRESS_GET_CODEC_CAPS _IOWR('C', 0x11,\ | ||
145 | struct snd_compr_codec_caps) | ||
146 | #define SNDRV_COMPRESS_SET_PARAMS _IOW('C', 0x12, struct snd_compr_params) | ||
147 | #define SNDRV_COMPRESS_GET_PARAMS _IOR('C', 0x13, struct snd_codec) | ||
148 | #define SNDRV_COMPRESS_TSTAMP _IOR('C', 0x20, struct snd_compr_tstamp) | ||
149 | #define SNDRV_COMPRESS_AVAIL _IOR('C', 0x21, struct snd_compr_avail) | ||
150 | #define SNDRV_COMPRESS_PAUSE _IO('C', 0x30) | ||
151 | #define SNDRV_COMPRESS_RESUME _IO('C', 0x31) | ||
152 | #define SNDRV_COMPRESS_START _IO('C', 0x32) | ||
153 | #define SNDRV_COMPRESS_STOP _IO('C', 0x33) | ||
154 | #define SNDRV_COMPRESS_DRAIN _IO('C', 0x34) | ||
155 | /* | ||
156 | * TODO | ||
157 | * 1. add mmap support | ||
158 | * | ||
159 | */ | ||
160 | #define SND_COMPR_TRIGGER_DRAIN 7 /*FIXME move this to pcm.h */ | ||
161 | #endif | ||
diff --git a/include/sound/compress_params.h b/include/sound/compress_params.h new file mode 100644 index 00000000000..d97d69f81a7 --- /dev/null +++ b/include/sound/compress_params.h | |||
@@ -0,0 +1,397 @@ | |||
1 | /* | ||
2 | * compress_params.h - codec types and parameters for compressed data | ||
3 | * streaming interface | ||
4 | * | ||
5 | * Copyright (C) 2011 Intel Corporation | ||
6 | * Authors: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> | ||
7 | * Vinod Koul <vinod.koul@linux.intel.com> | ||
8 | * | ||
9 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or modify | ||
12 | * it under the terms of the GNU General Public License as published by | ||
13 | * the Free Software Foundation; version 2 of the License. | ||
14 | * | ||
15 | * This program is distributed in the hope that it will be useful, but | ||
16 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
18 | * General Public License for more details. | ||
19 | * | ||
20 | * You should have received a copy of the GNU General Public License along | ||
21 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
22 | * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. | ||
23 | * | ||
24 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
25 | * | ||
26 | * The definitions in this file are derived from the OpenMAX AL version 1.1 | ||
27 | * and OpenMAX IL v 1.1.2 header files which contain the copyright notice below. | ||
28 | * | ||
29 | * Copyright (c) 2007-2010 The Khronos Group Inc. | ||
30 | * | ||
31 | * Permission is hereby granted, free of charge, to any person obtaining | ||
32 | * a copy of this software and/or associated documentation files (the | ||
33 | * "Materials "), to deal in the Materials without restriction, including | ||
34 | * without limitation the rights to use, copy, modify, merge, publish, | ||
35 | * distribute, sublicense, and/or sell copies of the Materials, and to | ||
36 | * permit persons to whom the Materials are furnished to do so, subject to | ||
37 | * the following conditions: | ||
38 | * | ||
39 | * The above copyright notice and this permission notice shall be included | ||
40 | * in all copies or substantial portions of the Materials. | ||
41 | * | ||
42 | * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||
43 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
44 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||
45 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | ||
46 | * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | ||
47 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | ||
48 | * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. | ||
49 | * | ||
50 | */ | ||
51 | #ifndef __SND_COMPRESS_PARAMS_H | ||
52 | #define __SND_COMPRESS_PARAMS_H | ||
53 | |||
54 | /* AUDIO CODECS SUPPORTED */ | ||
55 | #define MAX_NUM_CODECS 32 | ||
56 | #define MAX_NUM_CODEC_DESCRIPTORS 32 | ||
57 | #define MAX_NUM_BITRATES 32 | ||
58 | |||
59 | /* Codecs are listed linearly to allow for extensibility */ | ||
60 | #define SND_AUDIOCODEC_PCM ((__u32) 0x00000001) | ||
61 | #define SND_AUDIOCODEC_MP3 ((__u32) 0x00000002) | ||
62 | #define SND_AUDIOCODEC_AMR ((__u32) 0x00000003) | ||
63 | #define SND_AUDIOCODEC_AMRWB ((__u32) 0x00000004) | ||
64 | #define SND_AUDIOCODEC_AMRWBPLUS ((__u32) 0x00000005) | ||
65 | #define SND_AUDIOCODEC_AAC ((__u32) 0x00000006) | ||
66 | #define SND_AUDIOCODEC_WMA ((__u32) 0x00000007) | ||
67 | #define SND_AUDIOCODEC_REAL ((__u32) 0x00000008) | ||
68 | #define SND_AUDIOCODEC_VORBIS ((__u32) 0x00000009) | ||
69 | #define SND_AUDIOCODEC_FLAC ((__u32) 0x0000000A) | ||
70 | #define SND_AUDIOCODEC_IEC61937 ((__u32) 0x0000000B) | ||
71 | #define SND_AUDIOCODEC_G723_1 ((__u32) 0x0000000C) | ||
72 | #define SND_AUDIOCODEC_G729 ((__u32) 0x0000000D) | ||
73 | |||
74 | /* | ||
75 | * Profile and modes are listed with bit masks. This allows for a | ||
76 | * more compact representation of fields that will not evolve | ||
77 | * (in contrast to the list of codecs) | ||
78 | */ | ||
79 | |||
80 | #define SND_AUDIOPROFILE_PCM ((__u32) 0x00000001) | ||
81 | |||
82 | /* MP3 modes are only useful for encoders */ | ||
83 | #define SND_AUDIOCHANMODE_MP3_MONO ((__u32) 0x00000001) | ||
84 | #define SND_AUDIOCHANMODE_MP3_STEREO ((__u32) 0x00000002) | ||
85 | #define SND_AUDIOCHANMODE_MP3_JOINTSTEREO ((__u32) 0x00000004) | ||
86 | #define SND_AUDIOCHANMODE_MP3_DUAL ((__u32) 0x00000008) | ||
87 | |||
88 | #define SND_AUDIOPROFILE_AMR ((__u32) 0x00000001) | ||
89 | |||
90 | /* AMR modes are only useful for encoders */ | ||
91 | #define SND_AUDIOMODE_AMR_DTX_OFF ((__u32) 0x00000001) | ||
92 | #define SND_AUDIOMODE_AMR_VAD1 ((__u32) 0x00000002) | ||
93 | #define SND_AUDIOMODE_AMR_VAD2 ((__u32) 0x00000004) | ||
94 | |||
95 | #define SND_AUDIOSTREAMFORMAT_UNDEFINED ((__u32) 0x00000000) | ||
96 | #define SND_AUDIOSTREAMFORMAT_CONFORMANCE ((__u32) 0x00000001) | ||
97 | #define SND_AUDIOSTREAMFORMAT_IF1 ((__u32) 0x00000002) | ||
98 | #define SND_AUDIOSTREAMFORMAT_IF2 ((__u32) 0x00000004) | ||
99 | #define SND_AUDIOSTREAMFORMAT_FSF ((__u32) 0x00000008) | ||
100 | #define SND_AUDIOSTREAMFORMAT_RTPPAYLOAD ((__u32) 0x00000010) | ||
101 | #define SND_AUDIOSTREAMFORMAT_ITU ((__u32) 0x00000020) | ||
102 | |||
103 | #define SND_AUDIOPROFILE_AMRWB ((__u32) 0x00000001) | ||
104 | |||
105 | /* AMRWB modes are only useful for encoders */ | ||
106 | #define SND_AUDIOMODE_AMRWB_DTX_OFF ((__u32) 0x00000001) | ||
107 | #define SND_AUDIOMODE_AMRWB_VAD1 ((__u32) 0x00000002) | ||
108 | #define SND_AUDIOMODE_AMRWB_VAD2 ((__u32) 0x00000004) | ||
109 | |||
110 | #define SND_AUDIOPROFILE_AMRWBPLUS ((__u32) 0x00000001) | ||
111 | |||
112 | #define SND_AUDIOPROFILE_AAC ((__u32) 0x00000001) | ||
113 | |||
114 | /* AAC modes are required for encoders and decoders */ | ||
115 | #define SND_AUDIOMODE_AAC_MAIN ((__u32) 0x00000001) | ||
116 | #define SND_AUDIOMODE_AAC_LC ((__u32) 0x00000002) | ||
117 | #define SND_AUDIOMODE_AAC_SSR ((__u32) 0x00000004) | ||
118 | #define SND_AUDIOMODE_AAC_LTP ((__u32) 0x00000008) | ||
119 | #define SND_AUDIOMODE_AAC_HE ((__u32) 0x00000010) | ||
120 | #define SND_AUDIOMODE_AAC_SCALABLE ((__u32) 0x00000020) | ||
121 | #define SND_AUDIOMODE_AAC_ERLC ((__u32) 0x00000040) | ||
122 | #define SND_AUDIOMODE_AAC_LD ((__u32) 0x00000080) | ||
123 | #define SND_AUDIOMODE_AAC_HE_PS ((__u32) 0x00000100) | ||
124 | #define SND_AUDIOMODE_AAC_HE_MPS ((__u32) 0x00000200) | ||
125 | |||
126 | /* AAC formats are required for encoders and decoders */ | ||
127 | #define SND_AUDIOSTREAMFORMAT_MP2ADTS ((__u32) 0x00000001) | ||
128 | #define SND_AUDIOSTREAMFORMAT_MP4ADTS ((__u32) 0x00000002) | ||
129 | #define SND_AUDIOSTREAMFORMAT_MP4LOAS ((__u32) 0x00000004) | ||
130 | #define SND_AUDIOSTREAMFORMAT_MP4LATM ((__u32) 0x00000008) | ||
131 | #define SND_AUDIOSTREAMFORMAT_ADIF ((__u32) 0x00000010) | ||
132 | #define SND_AUDIOSTREAMFORMAT_MP4FF ((__u32) 0x00000020) | ||
133 | #define SND_AUDIOSTREAMFORMAT_RAW ((__u32) 0x00000040) | ||
134 | |||
135 | #define SND_AUDIOPROFILE_WMA7 ((__u32) 0x00000001) | ||
136 | #define SND_AUDIOPROFILE_WMA8 ((__u32) 0x00000002) | ||
137 | #define SND_AUDIOPROFILE_WMA9 ((__u32) 0x00000004) | ||
138 | #define SND_AUDIOPROFILE_WMA10 ((__u32) 0x00000008) | ||
139 | |||
140 | #define SND_AUDIOMODE_WMA_LEVEL1 ((__u32) 0x00000001) | ||
141 | #define SND_AUDIOMODE_WMA_LEVEL2 ((__u32) 0x00000002) | ||
142 | #define SND_AUDIOMODE_WMA_LEVEL3 ((__u32) 0x00000004) | ||
143 | #define SND_AUDIOMODE_WMA_LEVEL4 ((__u32) 0x00000008) | ||
144 | #define SND_AUDIOMODE_WMAPRO_LEVELM0 ((__u32) 0x00000010) | ||
145 | #define SND_AUDIOMODE_WMAPRO_LEVELM1 ((__u32) 0x00000020) | ||
146 | #define SND_AUDIOMODE_WMAPRO_LEVELM2 ((__u32) 0x00000040) | ||
147 | #define SND_AUDIOMODE_WMAPRO_LEVELM3 ((__u32) 0x00000080) | ||
148 | |||
149 | #define SND_AUDIOSTREAMFORMAT_WMA_ASF ((__u32) 0x00000001) | ||
150 | /* | ||
151 | * Some implementations strip the ASF header and only send ASF packets | ||
152 | * to the DSP | ||
153 | */ | ||
154 | #define SND_AUDIOSTREAMFORMAT_WMA_NOASF_HDR ((__u32) 0x00000002) | ||
155 | |||
156 | #define SND_AUDIOPROFILE_REALAUDIO ((__u32) 0x00000001) | ||
157 | |||
158 | #define SND_AUDIOMODE_REALAUDIO_G2 ((__u32) 0x00000001) | ||
159 | #define SND_AUDIOMODE_REALAUDIO_8 ((__u32) 0x00000002) | ||
160 | #define SND_AUDIOMODE_REALAUDIO_10 ((__u32) 0x00000004) | ||
161 | #define SND_AUDIOMODE_REALAUDIO_SURROUND ((__u32) 0x00000008) | ||
162 | |||
163 | #define SND_AUDIOPROFILE_VORBIS ((__u32) 0x00000001) | ||
164 | |||
165 | #define SND_AUDIOMODE_VORBIS ((__u32) 0x00000001) | ||
166 | |||
167 | #define SND_AUDIOPROFILE_FLAC ((__u32) 0x00000001) | ||
168 | |||
169 | /* | ||
170 | * Define quality levels for FLAC encoders, from LEVEL0 (fast) | ||
171 | * to LEVEL8 (best) | ||
172 | */ | ||
173 | #define SND_AUDIOMODE_FLAC_LEVEL0 ((__u32) 0x00000001) | ||
174 | #define SND_AUDIOMODE_FLAC_LEVEL1 ((__u32) 0x00000002) | ||
175 | #define SND_AUDIOMODE_FLAC_LEVEL2 ((__u32) 0x00000004) | ||
176 | #define SND_AUDIOMODE_FLAC_LEVEL3 ((__u32) 0x00000008) | ||
177 | #define SND_AUDIOMODE_FLAC_LEVEL4 ((__u32) 0x00000010) | ||
178 | #define SND_AUDIOMODE_FLAC_LEVEL5 ((__u32) 0x00000020) | ||
179 | #define SND_AUDIOMODE_FLAC_LEVEL6 ((__u32) 0x00000040) | ||
180 | #define SND_AUDIOMODE_FLAC_LEVEL7 ((__u32) 0x00000080) | ||
181 | #define SND_AUDIOMODE_FLAC_LEVEL8 ((__u32) 0x00000100) | ||
182 | |||
183 | #define SND_AUDIOSTREAMFORMAT_FLAC ((__u32) 0x00000001) | ||
184 | #define SND_AUDIOSTREAMFORMAT_FLAC_OGG ((__u32) 0x00000002) | ||
185 | |||
186 | /* IEC61937 payloads without CUVP and preambles */ | ||
187 | #define SND_AUDIOPROFILE_IEC61937 ((__u32) 0x00000001) | ||
188 | /* IEC61937 with S/PDIF preambles+CUVP bits in 32-bit containers */ | ||
189 | #define SND_AUDIOPROFILE_IEC61937_SPDIF ((__u32) 0x00000002) | ||
190 | |||
191 | /* | ||
192 | * IEC modes are mandatory for decoders. Format autodetection | ||
193 | * will only happen on the DSP side with mode 0. The PCM mode should | ||
194 | * not be used, the PCM codec should be used instead. | ||
195 | */ | ||
196 | #define SND_AUDIOMODE_IEC_REF_STREAM_HEADER ((__u32) 0x00000000) | ||
197 | #define SND_AUDIOMODE_IEC_LPCM ((__u32) 0x00000001) | ||
198 | #define SND_AUDIOMODE_IEC_AC3 ((__u32) 0x00000002) | ||
199 | #define SND_AUDIOMODE_IEC_MPEG1 ((__u32) 0x00000004) | ||
200 | #define SND_AUDIOMODE_IEC_MP3 ((__u32) 0x00000008) | ||
201 | #define SND_AUDIOMODE_IEC_MPEG2 ((__u32) 0x00000010) | ||
202 | #define SND_AUDIOMODE_IEC_AACLC ((__u32) 0x00000020) | ||
203 | #define SND_AUDIOMODE_IEC_DTS ((__u32) 0x00000040) | ||
204 | #define SND_AUDIOMODE_IEC_ATRAC ((__u32) 0x00000080) | ||
205 | #define SND_AUDIOMODE_IEC_SACD ((__u32) 0x00000100) | ||
206 | #define SND_AUDIOMODE_IEC_EAC3 ((__u32) 0x00000200) | ||
207 | #define SND_AUDIOMODE_IEC_DTS_HD ((__u32) 0x00000400) | ||
208 | #define SND_AUDIOMODE_IEC_MLP ((__u32) 0x00000800) | ||
209 | #define SND_AUDIOMODE_IEC_DST ((__u32) 0x00001000) | ||
210 | #define SND_AUDIOMODE_IEC_WMAPRO ((__u32) 0x00002000) | ||
211 | #define SND_AUDIOMODE_IEC_REF_CXT ((__u32) 0x00004000) | ||
212 | #define SND_AUDIOMODE_IEC_HE_AAC ((__u32) 0x00008000) | ||
213 | #define SND_AUDIOMODE_IEC_HE_AAC2 ((__u32) 0x00010000) | ||
214 | #define SND_AUDIOMODE_IEC_MPEG_SURROUND ((__u32) 0x00020000) | ||
215 | |||
216 | #define SND_AUDIOPROFILE_G723_1 ((__u32) 0x00000001) | ||
217 | |||
218 | #define SND_AUDIOMODE_G723_1_ANNEX_A ((__u32) 0x00000001) | ||
219 | #define SND_AUDIOMODE_G723_1_ANNEX_B ((__u32) 0x00000002) | ||
220 | #define SND_AUDIOMODE_G723_1_ANNEX_C ((__u32) 0x00000004) | ||
221 | |||
222 | #define SND_AUDIOPROFILE_G729 ((__u32) 0x00000001) | ||
223 | |||
224 | #define SND_AUDIOMODE_G729_ANNEX_A ((__u32) 0x00000001) | ||
225 | #define SND_AUDIOMODE_G729_ANNEX_B ((__u32) 0x00000002) | ||
226 | |||
227 | /* <FIXME: multichannel encoders aren't supported for now. Would need | ||
228 | an additional definition of channel arrangement> */ | ||
229 | |||
230 | /* VBR/CBR definitions */ | ||
231 | #define SND_RATECONTROLMODE_CONSTANTBITRATE ((__u32) 0x00000001) | ||
232 | #define SND_RATECONTROLMODE_VARIABLEBITRATE ((__u32) 0x00000002) | ||
233 | |||
234 | /* Encoder options */ | ||
235 | |||
236 | struct snd_enc_wma { | ||
237 | __u32 super_block_align; /* WMA Type-specific data */ | ||
238 | }; | ||
239 | |||
240 | |||
241 | /** | ||
242 | * struct snd_enc_vorbis | ||
243 | * @quality: Sets encoding quality to n, between -1 (low) and 10 (high). | ||
244 | * In the default mode of operation, the quality level is 3. | ||
245 | * Normal quality range is 0 - 10. | ||
246 | * @managed: Boolean. Set bitrate management mode. This turns off the | ||
247 | * normal VBR encoding, but allows hard or soft bitrate constraints to be | ||
248 | * enforced by the encoder. This mode can be slower, and may also be | ||
249 | * lower quality. It is primarily useful for streaming. | ||
250 | * @max_bit_rate: Enabled only if managed is TRUE | ||
251 | * @min_bit_rate: Enabled only if managed is TRUE | ||
252 | * @downmix: Boolean. Downmix input from stereo to mono (has no effect on | ||
253 | * non-stereo streams). Useful for lower-bitrate encoding. | ||
254 | * | ||
255 | * These options were extracted from the OpenMAX IL spec and Gstreamer vorbisenc | ||
256 | * properties | ||
257 | * | ||
258 | * For best quality users should specify VBR mode and set quality levels. | ||
259 | */ | ||
260 | |||
261 | struct snd_enc_vorbis { | ||
262 | __s32 quality; | ||
263 | __u32 managed; | ||
264 | __u32 max_bit_rate; | ||
265 | __u32 min_bit_rate; | ||
266 | __u32 downmix; | ||
267 | }; | ||
268 | |||
269 | |||
270 | /** | ||
271 | * struct snd_enc_real | ||
272 | * @quant_bits: number of coupling quantization bits in the stream | ||
273 | * @start_region: coupling start region in the stream | ||
274 | * @num_regions: number of regions value | ||
275 | * | ||
276 | * These options were extracted from the OpenMAX IL spec | ||
277 | */ | ||
278 | |||
279 | struct snd_enc_real { | ||
280 | __u32 quant_bits; | ||
281 | __u32 start_region; | ||
282 | __u32 num_regions; | ||
283 | }; | ||
284 | |||
285 | /** | ||
286 | * struct snd_enc_flac | ||
287 | * @num: serial number, valid only for OGG formats | ||
288 | * needs to be set by application | ||
289 | * @gain: Add replay gain tags | ||
290 | * | ||
291 | * These options were extracted from the FLAC online documentation | ||
292 | * at http://flac.sourceforge.net/documentation_tools_flac.html | ||
293 | * | ||
294 | * To make the API simpler, it is assumed that the user will select quality | ||
295 | * profiles. Additional options that affect encoding quality and speed can | ||
296 | * be added at a later stage if needed. | ||
297 | * | ||
298 | * By default the Subset format is used by encoders. | ||
299 | * | ||
300 | * TAGS such as pictures, etc, cannot be handled by an offloaded encoder and are | ||
301 | * not supported in this API. | ||
302 | */ | ||
303 | |||
304 | struct snd_enc_flac { | ||
305 | __u32 num; | ||
306 | __u32 gain; | ||
307 | }; | ||
308 | |||
309 | struct snd_enc_generic { | ||
310 | __u32 bw; /* encoder bandwidth */ | ||
311 | __s32 reserved[15]; | ||
312 | }; | ||
313 | |||
314 | union snd_codec_options { | ||
315 | struct snd_enc_wma wma; | ||
316 | struct snd_enc_vorbis vorbis; | ||
317 | struct snd_enc_real real; | ||
318 | struct snd_enc_flac flac; | ||
319 | struct snd_enc_generic generic; | ||
320 | }; | ||
321 | |||
322 | /** struct snd_codec_desc - description of codec capabilities | ||
323 | * @max_ch: Maximum number of audio channels | ||
324 | * @sample_rates: Sampling rates in Hz, use SNDRV_PCM_RATE_xxx for this | ||
325 | * @bit_rate: Indexed array containing supported bit rates | ||
326 | * @num_bitrates: Number of valid values in bit_rate array | ||
327 | * @rate_control: value is specified by SND_RATECONTROLMODE defines. | ||
328 | * @profiles: Supported profiles. See SND_AUDIOPROFILE defines. | ||
329 | * @modes: Supported modes. See SND_AUDIOMODE defines | ||
330 | * @formats: Supported formats. See SND_AUDIOSTREAMFORMAT defines | ||
331 | * @min_buffer: Minimum buffer size handled by codec implementation | ||
332 | * @reserved: reserved for future use | ||
333 | * | ||
334 | * This structure provides a scalar value for profiles, modes and stream | ||
335 | * format fields. | ||
336 | * If an implementation supports multiple combinations, they will be listed as | ||
337 | * codecs with different descriptors, for example there would be 2 descriptors | ||
338 | * for AAC-RAW and AAC-ADTS. | ||
339 | * This entails some redundancy but makes it easier to avoid invalid | ||
340 | * configurations. | ||
341 | * | ||
342 | */ | ||
343 | |||
344 | struct snd_codec_desc { | ||
345 | __u32 max_ch; | ||
346 | __u32 sample_rates; | ||
347 | __u32 bit_rate[MAX_NUM_BITRATES]; | ||
348 | __u32 num_bitrates; | ||
349 | __u32 rate_control; | ||
350 | __u32 profiles; | ||
351 | __u32 modes; | ||
352 | __u32 formats; | ||
353 | __u32 min_buffer; | ||
354 | __u32 reserved[15]; | ||
355 | }; | ||
356 | |||
357 | /** struct snd_codec | ||
358 | * @id: Identifies the supported audio encoder/decoder. | ||
359 | * See SND_AUDIOCODEC macros. | ||
360 | * @ch_in: Number of input audio channels | ||
361 | * @ch_out: Number of output channels. In case of contradiction between | ||
362 | * this field and the channelMode field, the channelMode field | ||
363 | * overrides. | ||
364 | * @sample_rate: Audio sample rate of input data | ||
365 | * @bit_rate: Bitrate of encoded data. May be ignored by decoders | ||
366 | * @rate_control: Encoding rate control. See SND_RATECONTROLMODE defines. | ||
367 | * Encoders may rely on profiles for quality levels. | ||
368 | * May be ignored by decoders. | ||
369 | * @profile: Mandatory for encoders, can be mandatory for specific | ||
370 | * decoders as well. See SND_AUDIOPROFILE defines. | ||
371 | * @level: Supported level (Only used by WMA at the moment) | ||
372 | * @ch_mode: Channel mode for encoder. See SND_AUDIOCHANMODE defines | ||
373 | * @format: Format of encoded bistream. Mandatory when defined. | ||
374 | * See SND_AUDIOSTREAMFORMAT defines. | ||
375 | * @align: Block alignment in bytes of an audio sample. | ||
376 | * Only required for PCM or IEC formats. | ||
377 | * @options: encoder-specific settings | ||
378 | * @reserved: reserved for future use | ||
379 | */ | ||
380 | |||
381 | struct snd_codec { | ||
382 | __u32 id; | ||
383 | __u32 ch_in; | ||
384 | __u32 ch_out; | ||
385 | __u32 sample_rate; | ||
386 | __u32 bit_rate; | ||
387 | __u32 rate_control; | ||
388 | __u32 profile; | ||
389 | __u32 level; | ||
390 | __u32 ch_mode; | ||
391 | __u32 format; | ||
392 | __u32 align; | ||
393 | union snd_codec_options options; | ||
394 | __u32 reserved[3]; | ||
395 | }; | ||
396 | |||
397 | #endif | ||
diff --git a/include/sound/core.h b/include/sound/core.h index 3be5ab782b9..5ab255f196c 100644 --- a/include/sound/core.h +++ b/include/sound/core.h | |||
@@ -62,6 +62,7 @@ typedef int __bitwise snd_device_type_t; | |||
62 | #define SNDRV_DEV_BUS ((__force snd_device_type_t) 0x1007) | 62 | #define SNDRV_DEV_BUS ((__force snd_device_type_t) 0x1007) |
63 | #define SNDRV_DEV_CODEC ((__force snd_device_type_t) 0x1008) | 63 | #define SNDRV_DEV_CODEC ((__force snd_device_type_t) 0x1008) |
64 | #define SNDRV_DEV_JACK ((__force snd_device_type_t) 0x1009) | 64 | #define SNDRV_DEV_JACK ((__force snd_device_type_t) 0x1009) |
65 | #define SNDRV_DEV_COMPRESS ((__force snd_device_type_t) 0x100A) | ||
65 | #define SNDRV_DEV_LOWLEVEL ((__force snd_device_type_t) 0x2000) | 66 | #define SNDRV_DEV_LOWLEVEL ((__force snd_device_type_t) 0x2000) |
66 | 67 | ||
67 | typedef int __bitwise snd_device_state_t; | 68 | typedef int __bitwise snd_device_state_t; |
diff --git a/include/sound/minors.h b/include/sound/minors.h index 8f764204a85..5978f9a8c8b 100644 --- a/include/sound/minors.h +++ b/include/sound/minors.h | |||
@@ -35,7 +35,7 @@ | |||
35 | #define SNDRV_MINOR_TIMER 33 /* SNDRV_MINOR_GLOBAL + 1 * 32 */ | 35 | #define SNDRV_MINOR_TIMER 33 /* SNDRV_MINOR_GLOBAL + 1 * 32 */ |
36 | 36 | ||
37 | #ifndef CONFIG_SND_DYNAMIC_MINORS | 37 | #ifndef CONFIG_SND_DYNAMIC_MINORS |
38 | /* 2 - 3 (reserved) */ | 38 | #define SNDRV_MINOR_COMPRESS 2 /* 2 - 3 */ |
39 | #define SNDRV_MINOR_HWDEP 4 /* 4 - 7 */ | 39 | #define SNDRV_MINOR_HWDEP 4 /* 4 - 7 */ |
40 | #define SNDRV_MINOR_RAWMIDI 8 /* 8 - 15 */ | 40 | #define SNDRV_MINOR_RAWMIDI 8 /* 8 - 15 */ |
41 | #define SNDRV_MINOR_PCM_PLAYBACK 16 /* 16 - 23 */ | 41 | #define SNDRV_MINOR_PCM_PLAYBACK 16 /* 16 - 23 */ |
@@ -49,6 +49,7 @@ | |||
49 | #define SNDRV_DEVICE_TYPE_PCM_CAPTURE SNDRV_MINOR_PCM_CAPTURE | 49 | #define SNDRV_DEVICE_TYPE_PCM_CAPTURE SNDRV_MINOR_PCM_CAPTURE |
50 | #define SNDRV_DEVICE_TYPE_SEQUENCER SNDRV_MINOR_SEQUENCER | 50 | #define SNDRV_DEVICE_TYPE_SEQUENCER SNDRV_MINOR_SEQUENCER |
51 | #define SNDRV_DEVICE_TYPE_TIMER SNDRV_MINOR_TIMER | 51 | #define SNDRV_DEVICE_TYPE_TIMER SNDRV_MINOR_TIMER |
52 | #define SNDRV_DEVICE_TYPE_COMPRESS SNDRV_MINOR_COMPRESS | ||
52 | 53 | ||
53 | #else /* CONFIG_SND_DYNAMIC_MINORS */ | 54 | #else /* CONFIG_SND_DYNAMIC_MINORS */ |
54 | 55 | ||
@@ -60,6 +61,7 @@ enum { | |||
60 | SNDRV_DEVICE_TYPE_RAWMIDI, | 61 | SNDRV_DEVICE_TYPE_RAWMIDI, |
61 | SNDRV_DEVICE_TYPE_PCM_PLAYBACK, | 62 | SNDRV_DEVICE_TYPE_PCM_PLAYBACK, |
62 | SNDRV_DEVICE_TYPE_PCM_CAPTURE, | 63 | SNDRV_DEVICE_TYPE_PCM_CAPTURE, |
64 | SNDRV_DEVICE_TYPE_COMPRESS, | ||
63 | }; | 65 | }; |
64 | 66 | ||
65 | #endif /* CONFIG_SND_DYNAMIC_MINORS */ | 67 | #endif /* CONFIG_SND_DYNAMIC_MINORS */ |