Blame view
include/sound/soc.h
31.3 KB
808db4a45 [ALSA] ASoC: core... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* * linux/sound/soc.h -- ALSA SoC Layer * * Author: Liam Girdwood * Created: Aug 11th 2005 * Copyright: Wolfson Microelectronics. PLC. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #ifndef __LINUX_SND_SOC_H #define __LINUX_SND_SOC_H #include <linux/platform_device.h> #include <linux/types.h> |
d5021ec9f ASoC: Add a notif... |
18 |
#include <linux/notifier.h> |
4484bb2e9 [ALSA] Fix the so... |
19 |
#include <linux/workqueue.h> |
ec67624d3 ASoC: Add GPIO su... |
20 21 |
#include <linux/interrupt.h> #include <linux/kernel.h> |
808db4a45 [ALSA] ASoC: core... |
22 23 24 25 |
#include <sound/core.h> #include <sound/pcm.h> #include <sound/control.h> #include <sound/ac97_codec.h> |
808db4a45 [ALSA] ASoC: core... |
26 27 28 |
/* * Convenience kcontrol builders */ |
4eaa9819d ALSA: ASoC: Conve... |
29 30 |
#define SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert) \ ((unsigned long)&(struct soc_mixer_control) \ |
762b8df74 ALSA: ASoC: Fix m... |
31 |
{.reg = xreg, .shift = xshift, .rshift = xshift, .max = xmax, \ |
d11bb4a92 ASoC: core: Fix f... |
32 |
.platform_max = xmax, .invert = xinvert}) |
4eaa9819d ALSA: ASoC: Conve... |
33 34 |
#define SOC_SINGLE_VALUE_EXT(xreg, xmax, xinvert) \ ((unsigned long)&(struct soc_mixer_control) \ |
d11bb4a92 ASoC: core: Fix f... |
35 |
{.reg = xreg, .max = xmax, .platform_max = xmax, .invert = xinvert}) |
a7a4ac86b [ALSA] ASoC TLV s... |
36 |
#define SOC_SINGLE(xname, reg, shift, max, invert) \ |
808db4a45 [ALSA] ASoC: core... |
37 38 39 |
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ .info = snd_soc_info_volsw, .get = snd_soc_get_volsw,\ .put = snd_soc_put_volsw, \ |
a7a4ac86b [ALSA] ASoC TLV s... |
40 41 42 43 44 45 46 47 48 |
.private_value = SOC_SINGLE_VALUE(reg, shift, max, invert) } #define SOC_SINGLE_TLV(xname, reg, shift, max, invert, tlv_array) \ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\ SNDRV_CTL_ELEM_ACCESS_READWRITE,\ .tlv.p = (tlv_array), \ .info = snd_soc_info_volsw, .get = snd_soc_get_volsw,\ .put = snd_soc_put_volsw, \ .private_value = SOC_SINGLE_VALUE(reg, shift, max, invert) } |
4eaa9819d ALSA: ASoC: Conve... |
49 |
#define SOC_DOUBLE(xname, xreg, shift_left, shift_right, xmax, xinvert) \ |
808db4a45 [ALSA] ASoC: core... |
50 51 52 |
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\ .info = snd_soc_info_volsw, .get = snd_soc_get_volsw, \ .put = snd_soc_put_volsw, \ |
4eaa9819d ALSA: ASoC: Conve... |
53 54 |
.private_value = (unsigned long)&(struct soc_mixer_control) \ {.reg = xreg, .shift = shift_left, .rshift = shift_right, \ |
d11bb4a92 ASoC: core: Fix f... |
55 |
.max = xmax, .platform_max = xmax, .invert = xinvert} } |
4eaa9819d ALSA: ASoC: Conve... |
56 |
#define SOC_DOUBLE_R(xname, reg_left, reg_right, xshift, xmax, xinvert) \ |
808db4a45 [ALSA] ASoC: core... |
57 58 59 |
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ .info = snd_soc_info_volsw_2r, \ .get = snd_soc_get_volsw_2r, .put = snd_soc_put_volsw_2r, \ |
4eaa9819d ALSA: ASoC: Conve... |
60 61 |
.private_value = (unsigned long)&(struct soc_mixer_control) \ {.reg = reg_left, .rreg = reg_right, .shift = xshift, \ |
d11bb4a92 ASoC: core: Fix f... |
62 |
.max = xmax, .platform_max = xmax, .invert = xinvert} } |
4eaa9819d ALSA: ASoC: Conve... |
63 |
#define SOC_DOUBLE_TLV(xname, xreg, shift_left, shift_right, xmax, xinvert, tlv_array) \ |
a7a4ac86b [ALSA] ASoC TLV s... |
64 65 66 67 68 69 |
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\ .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\ SNDRV_CTL_ELEM_ACCESS_READWRITE,\ .tlv.p = (tlv_array), \ .info = snd_soc_info_volsw, .get = snd_soc_get_volsw, \ .put = snd_soc_put_volsw, \ |
4eaa9819d ALSA: ASoC: Conve... |
70 71 |
.private_value = (unsigned long)&(struct soc_mixer_control) \ {.reg = xreg, .shift = shift_left, .rshift = shift_right,\ |
d11bb4a92 ASoC: core: Fix f... |
72 |
.max = xmax, .platform_max = xmax, .invert = xinvert} } |
4eaa9819d ALSA: ASoC: Conve... |
73 |
#define SOC_DOUBLE_R_TLV(xname, reg_left, reg_right, xshift, xmax, xinvert, tlv_array) \ |
a7a4ac86b [ALSA] ASoC TLV s... |
74 75 76 77 78 79 |
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\ .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\ SNDRV_CTL_ELEM_ACCESS_READWRITE,\ .tlv.p = (tlv_array), \ .info = snd_soc_info_volsw_2r, \ .get = snd_soc_get_volsw_2r, .put = snd_soc_put_volsw_2r, \ |
4eaa9819d ALSA: ASoC: Conve... |
80 81 |
.private_value = (unsigned long)&(struct soc_mixer_control) \ {.reg = reg_left, .rreg = reg_right, .shift = xshift, \ |
d11bb4a92 ASoC: core: Fix f... |
82 |
.max = xmax, .platform_max = xmax, .invert = xinvert} } |
4eaa9819d ALSA: ASoC: Conve... |
83 |
#define SOC_DOUBLE_S8_TLV(xname, xreg, xmin, xmax, tlv_array) \ |
e13ac2e9b [ALSA] ASoC: Add ... |
84 85 86 87 88 89 |
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \ SNDRV_CTL_ELEM_ACCESS_READWRITE, \ .tlv.p = (tlv_array), \ .info = snd_soc_info_volsw_s8, .get = snd_soc_get_volsw_s8, \ .put = snd_soc_put_volsw_s8, \ |
4eaa9819d ALSA: ASoC: Conve... |
90 |
.private_value = (unsigned long)&(struct soc_mixer_control) \ |
d11bb4a92 ASoC: core: Fix f... |
91 92 |
{.reg = xreg, .min = xmin, .max = xmax, \ .platform_max = xmax} } |
f8ba0b7bf ALSA: ASoC: Renam... |
93 |
#define SOC_ENUM_DOUBLE(xreg, xshift_l, xshift_r, xmax, xtexts) \ |
808db4a45 [ALSA] ASoC: core... |
94 |
{ .reg = xreg, .shift_l = xshift_l, .shift_r = xshift_r, \ |
f8ba0b7bf ALSA: ASoC: Renam... |
95 96 97 98 99 |
.max = xmax, .texts = xtexts } #define SOC_ENUM_SINGLE(xreg, xshift, xmax, xtexts) \ SOC_ENUM_DOUBLE(xreg, xshift, xshift, xmax, xtexts) #define SOC_ENUM_SINGLE_EXT(xmax, xtexts) \ { .max = xmax, .texts = xtexts } |
2e72f8e37 ASoC: New enum ty... |
100 101 102 103 104 |
#define SOC_VALUE_ENUM_DOUBLE(xreg, xshift_l, xshift_r, xmask, xmax, xtexts, xvalues) \ { .reg = xreg, .shift_l = xshift_l, .shift_r = xshift_r, \ .mask = xmask, .max = xmax, .texts = xtexts, .values = xvalues} #define SOC_VALUE_ENUM_SINGLE(xreg, xshift, xmask, xmax, xtexts, xvalues) \ SOC_VALUE_ENUM_DOUBLE(xreg, xshift, xshift, xmask, xmax, xtexts, xvalues) |
808db4a45 [ALSA] ASoC: core... |
105 106 107 108 109 |
#define SOC_ENUM(xname, xenum) \ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname,\ .info = snd_soc_info_enum_double, \ .get = snd_soc_get_enum_double, .put = snd_soc_put_enum_double, \ .private_value = (unsigned long)&xenum } |
2e72f8e37 ASoC: New enum ty... |
110 111 |
#define SOC_VALUE_ENUM(xname, xenum) \ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname,\ |
741555568 ASoC: Merge the s... |
112 |
.info = snd_soc_info_enum_double, \ |
2e72f8e37 ASoC: New enum ty... |
113 114 115 |
.get = snd_soc_get_value_enum_double, \ .put = snd_soc_put_value_enum_double, \ .private_value = (unsigned long)&xenum } |
f8ba0b7bf ALSA: ASoC: Renam... |
116 |
#define SOC_SINGLE_EXT(xname, xreg, xshift, xmax, xinvert,\ |
808db4a45 [ALSA] ASoC: core... |
117 118 |
xhandler_get, xhandler_put) \ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ |
1c433fbda [ALSA] soc - 0.13... |
119 |
.info = snd_soc_info_volsw, \ |
808db4a45 [ALSA] ASoC: core... |
120 |
.get = xhandler_get, .put = xhandler_put, \ |
f8ba0b7bf ALSA: ASoC: Renam... |
121 |
.private_value = SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert) } |
7629ad24f ASoC: add SOC_DOU... |
122 123 124 125 126 127 128 |
#define SOC_DOUBLE_EXT(xname, xreg, shift_left, shift_right, xmax, xinvert,\ xhandler_get, xhandler_put) \ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\ .info = snd_soc_info_volsw, \ .get = xhandler_get, .put = xhandler_put, \ .private_value = (unsigned long)&(struct soc_mixer_control) \ {.reg = xreg, .shift = shift_left, .rshift = shift_right, \ |
d11bb4a92 ASoC: core: Fix f... |
129 |
.max = xmax, .platform_max = xmax, .invert = xinvert} } |
f8ba0b7bf ALSA: ASoC: Renam... |
130 |
#define SOC_SINGLE_EXT_TLV(xname, xreg, xshift, xmax, xinvert,\ |
10144c09a ALSA: ASoC: Add S... |
131 132 133 134 135 136 137 |
xhandler_get, xhandler_put, tlv_array) \ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\ SNDRV_CTL_ELEM_ACCESS_READWRITE,\ .tlv.p = (tlv_array), \ .info = snd_soc_info_volsw, \ .get = xhandler_get, .put = xhandler_put, \ |
f8ba0b7bf ALSA: ASoC: Renam... |
138 |
.private_value = SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert) } |
d0af93db1 ASoC: add SOC_DOU... |
139 140 141 142 143 144 145 146 147 148 |
#define SOC_DOUBLE_EXT_TLV(xname, xreg, shift_left, shift_right, xmax, xinvert,\ xhandler_get, xhandler_put, tlv_array) \ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \ SNDRV_CTL_ELEM_ACCESS_READWRITE, \ .tlv.p = (tlv_array), \ .info = snd_soc_info_volsw, \ .get = xhandler_get, .put = xhandler_put, \ .private_value = (unsigned long)&(struct soc_mixer_control) \ {.reg = xreg, .shift = shift_left, .rshift = shift_right, \ |
d11bb4a92 ASoC: core: Fix f... |
149 |
.max = xmax, .platform_max = xmax, .invert = xinvert} } |
3ce91d5a5 ASoC: add SOC_DOU... |
150 151 152 153 154 155 156 157 158 159 |
#define SOC_DOUBLE_R_EXT_TLV(xname, reg_left, reg_right, xshift, xmax, xinvert,\ xhandler_get, xhandler_put, tlv_array) \ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \ SNDRV_CTL_ELEM_ACCESS_READWRITE, \ .tlv.p = (tlv_array), \ .info = snd_soc_info_volsw_2r, \ .get = xhandler_get, .put = xhandler_put, \ .private_value = (unsigned long)&(struct soc_mixer_control) \ {.reg = reg_left, .rreg = reg_right, .shift = xshift, \ |
d11bb4a92 ASoC: core: Fix f... |
160 |
.max = xmax, .platform_max = xmax, .invert = xinvert} } |
808db4a45 [ALSA] ASoC: core... |
161 162 163 164 165 166 167 168 169 170 |
#define SOC_SINGLE_BOOL_EXT(xname, xdata, xhandler_get, xhandler_put) \ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ .info = snd_soc_info_bool_ext, \ .get = xhandler_get, .put = xhandler_put, \ .private_value = xdata } #define SOC_ENUM_EXT(xname, xenum, xhandler_get, xhandler_put) \ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ .info = snd_soc_info_enum_ext, \ .get = xhandler_get, .put = xhandler_put, \ .private_value = (unsigned long)&xenum } |
b6f4bb383 ASoC: Add SOC_DOU... |
171 172 173 174 175 176 177 178 179 180 181 182 183 |
#define SOC_DOUBLE_R_SX_TLV(xname, xreg_left, xreg_right, xshift,\ xmin, xmax, tlv_array) \ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \ SNDRV_CTL_ELEM_ACCESS_READWRITE, \ .tlv.p = (tlv_array), \ .info = snd_soc_info_volsw_2r_sx, \ .get = snd_soc_get_volsw_2r_sx, \ .put = snd_soc_put_volsw_2r_sx, \ .private_value = (unsigned long)&(struct soc_mixer_control) \ {.reg = xreg_left, \ .rreg = xreg_right, .shift = xshift, \ .min = xmin, .max = xmax} } |
808db4a45 [ALSA] ASoC: core... |
184 |
/* |
6c2fb6a8d ASoC: add helper ... |
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
* Simplified versions of above macros, declaring a struct and calculating * ARRAY_SIZE internally */ #define SOC_ENUM_DOUBLE_DECL(name, xreg, xshift_l, xshift_r, xtexts) \ struct soc_enum name = SOC_ENUM_DOUBLE(xreg, xshift_l, xshift_r, \ ARRAY_SIZE(xtexts), xtexts) #define SOC_ENUM_SINGLE_DECL(name, xreg, xshift, xtexts) \ SOC_ENUM_DOUBLE_DECL(name, xreg, xshift, xshift, xtexts) #define SOC_ENUM_SINGLE_EXT_DECL(name, xtexts) \ struct soc_enum name = SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(xtexts), xtexts) #define SOC_VALUE_ENUM_DOUBLE_DECL(name, xreg, xshift_l, xshift_r, xmask, xtexts, xvalues) \ struct soc_enum name = SOC_VALUE_ENUM_DOUBLE(xreg, xshift_l, xshift_r, xmask, \ ARRAY_SIZE(xtexts), xtexts, xvalues) #define SOC_VALUE_ENUM_SINGLE_DECL(name, xreg, xshift, xmask, xtexts, xvalues) \ SOC_VALUE_ENUM_DOUBLE_DECL(name, xreg, xshift, xshift, xmask, xtexts, xvalues) /* |
0168bf0d1 ASoC: core - Allo... |
202 203 204 205 206 207 208 209 210 211 |
* Component probe and remove ordering levels for components with runtime * dependencies. */ #define SND_SOC_COMP_ORDER_FIRST -2 #define SND_SOC_COMP_ORDER_EARLY -1 #define SND_SOC_COMP_ORDER_NORMAL 0 #define SND_SOC_COMP_ORDER_LATE 1 #define SND_SOC_COMP_ORDER_LAST 2 /* |
0be9898ad [ALSA] ASoC: Clar... |
212 213 214 215 216 217 218 219 220 221 222 |
* Bias levels * * @ON: Bias is fully on for audio playback and capture operations. * @PREPARE: Prepare for audio operations. Called before DAPM switching for * stream start and stop operations. * @STANDBY: Low power standby state when no playback/capture operations are * in progress. NOTE: The transition time between STANDBY and ON * should be as fast as possible and no longer than 10ms. * @OFF: Power Off. No restrictions on transition times. */ enum snd_soc_bias_level { |
56fba41f8 ASoC: Specify tar... |
223 224 225 226 |
SND_SOC_BIAS_OFF = 0, SND_SOC_BIAS_STANDBY = 1, SND_SOC_BIAS_PREPARE = 2, SND_SOC_BIAS_ON = 3, |
0be9898ad [ALSA] ASoC: Clar... |
227 |
}; |
8a2cd6180 ASoC: Add jack re... |
228 229 |
struct snd_jack; struct snd_soc_card; |
808db4a45 [ALSA] ASoC: core... |
230 231 |
struct snd_soc_pcm_stream; struct snd_soc_ops; |
808db4a45 [ALSA] ASoC: core... |
232 |
struct snd_soc_pcm_runtime; |
3c4b266fe ALSA: asoc: core ... |
233 |
struct snd_soc_dai; |
f0fba2ad1 ASoC: multi-compo... |
234 |
struct snd_soc_dai_driver; |
12a48a8c0 ASoC: Add platfor... |
235 |
struct snd_soc_platform; |
d273ebe77 ASoC: Pass dai_li... |
236 |
struct snd_soc_dai_link; |
f0fba2ad1 ASoC: multi-compo... |
237 |
struct snd_soc_platform_driver; |
808db4a45 [ALSA] ASoC: core... |
238 |
struct snd_soc_codec; |
f0fba2ad1 ASoC: multi-compo... |
239 |
struct snd_soc_codec_driver; |
808db4a45 [ALSA] ASoC: core... |
240 |
struct soc_enum; |
8a2cd6180 ASoC: Add jack re... |
241 |
struct snd_soc_jack; |
fa9879ede ASoC: add support... |
242 |
struct snd_soc_jack_zone; |
8a2cd6180 ASoC: Add jack re... |
243 |
struct snd_soc_jack_pin; |
7a30a3db3 ASoC: soc-cache: ... |
244 |
struct snd_soc_cache_ops; |
ce6120cca ASoC: Decouple DA... |
245 |
#include <sound/soc-dapm.h> |
f0fba2ad1 ASoC: multi-compo... |
246 |
|
ec67624d3 ASoC: Add GPIO su... |
247 248 249 |
#ifdef CONFIG_GPIOLIB struct snd_soc_jack_gpio; #endif |
808db4a45 [ALSA] ASoC: core... |
250 251 |
typedef int (*hw_write_t)(void *,const char* ,int); |
808db4a45 [ALSA] ASoC: core... |
252 253 |
extern struct snd_ac97_bus_ops soc_ac97_ops; |
7084a42b9 ASoC: Add I/O con... |
254 |
enum snd_soc_control_type { |
e9c039052 ASoC: Remove unus... |
255 |
SND_SOC_I2C = 1, |
7084a42b9 ASoC: Add I/O con... |
256 257 |
SND_SOC_SPI, }; |
7a30a3db3 ASoC: soc-cache: ... |
258 |
enum snd_soc_compress_type { |
119bd789f ASoC: Change the ... |
259 |
SND_SOC_FLAT_COMPRESSION = 1, |
a7f387d5a ASoC: soc-cache: ... |
260 261 |
SND_SOC_LZO_COMPRESSION, SND_SOC_RBTREE_COMPRESSION |
7a30a3db3 ASoC: soc-cache: ... |
262 |
}; |
b8c0dab9b ASoC: core - PCM ... |
263 264 265 266 |
enum snd_soc_pcm_subclass { SND_SOC_PCM_CLASS_PCM = 0, SND_SOC_PCM_CLASS_BE = 1, }; |
ec4ee52a8 ASoC: Provide COD... |
267 268 269 270 |
int snd_soc_codec_set_sysclk(struct snd_soc_codec *codec, int clk_id, unsigned int freq, int dir); int snd_soc_codec_set_pll(struct snd_soc_codec *codec, int pll_id, int source, unsigned int freq_in, unsigned int freq_out); |
70a7ca34d ASoC: soc core al... |
271 272 |
int snd_soc_register_card(struct snd_soc_card *card); int snd_soc_unregister_card(struct snd_soc_card *card); |
6f8ab4ac2 ASoC: Export card... |
273 274 275 |
int snd_soc_suspend(struct device *dev); int snd_soc_resume(struct device *dev); int snd_soc_poweroff(struct device *dev); |
f0fba2ad1 ASoC: multi-compo... |
276 277 278 279 |
int snd_soc_register_platform(struct device *dev, struct snd_soc_platform_driver *platform_drv); void snd_soc_unregister_platform(struct device *dev); int snd_soc_register_codec(struct device *dev, |
001ae4c03 ASoC: Constify st... |
280 |
const struct snd_soc_codec_driver *codec_drv, |
f0fba2ad1 ASoC: multi-compo... |
281 282 |
struct snd_soc_dai_driver *dai_drv, int num_dai); void snd_soc_unregister_codec(struct device *dev); |
181e055e6 ASoC: Fix type fo... |
283 284 |
int snd_soc_codec_volatile_register(struct snd_soc_codec *codec, unsigned int reg); |
239c97062 ASoC: Add snd_soc... |
285 286 287 288 |
int snd_soc_codec_readable_register(struct snd_soc_codec *codec, unsigned int reg); int snd_soc_codec_writable_register(struct snd_soc_codec *codec, unsigned int reg); |
17a52fd60 ASoC: Begin to fa... |
289 |
int snd_soc_codec_set_cache_io(struct snd_soc_codec *codec, |
7084a42b9 ASoC: Add I/O con... |
290 291 |
int addr_bits, int data_bits, enum snd_soc_control_type control); |
7a30a3db3 ASoC: soc-cache: ... |
292 293 294 295 296 297 298 |
int snd_soc_cache_sync(struct snd_soc_codec *codec); int snd_soc_cache_init(struct snd_soc_codec *codec); int snd_soc_cache_exit(struct snd_soc_codec *codec); int snd_soc_cache_write(struct snd_soc_codec *codec, unsigned int reg, unsigned int value); int snd_soc_cache_read(struct snd_soc_codec *codec, unsigned int reg, unsigned int *value); |
066d16c3e ASoC: soc-cache: ... |
299 300 301 302 |
int snd_soc_default_volatile_register(struct snd_soc_codec *codec, unsigned int reg); int snd_soc_default_readable_register(struct snd_soc_codec *codec, unsigned int reg); |
8020454c9 ASoC: Add default... |
303 304 |
int snd_soc_default_writable_register(struct snd_soc_codec *codec, unsigned int reg); |
f1442bc1e ASoC: core - Add ... |
305 306 307 308 |
int snd_soc_platform_read(struct snd_soc_platform *platform, unsigned int reg); int snd_soc_platform_write(struct snd_soc_platform *platform, unsigned int reg, unsigned int val); |
12a48a8c0 ASoC: Add platfor... |
309 |
|
7aae816da ASoC: Add bit clo... |
310 311 312 |
/* Utility functions to get clock rates from various things */ int snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots); int snd_soc_params_to_frame_size(struct snd_pcm_hw_params *params); |
c0fa59df7 ASoC: Add BCLK ca... |
313 |
int snd_soc_calc_bclk(int fs, int sample_size, int channels, int tdm_slots); |
7aae816da ASoC: Add bit clo... |
314 |
int snd_soc_params_to_bclk(struct snd_pcm_hw_params *parms); |
808db4a45 [ALSA] ASoC: core... |
315 316 317 |
/* set runtime hw params */ int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream, const struct snd_pcm_hardware *hw); |
808db4a45 [ALSA] ASoC: core... |
318 |
|
8a2cd6180 ASoC: Add jack re... |
319 |
/* Jack reporting */ |
f0fba2ad1 ASoC: multi-compo... |
320 |
int snd_soc_jack_new(struct snd_soc_codec *codec, const char *id, int type, |
8a2cd6180 ASoC: Add jack re... |
321 322 323 324 |
struct snd_soc_jack *jack); void snd_soc_jack_report(struct snd_soc_jack *jack, int status, int mask); int snd_soc_jack_add_pins(struct snd_soc_jack *jack, int count, struct snd_soc_jack_pin *pins); |
d5021ec9f ASoC: Add a notif... |
325 326 327 328 |
void snd_soc_jack_notifier_register(struct snd_soc_jack *jack, struct notifier_block *nb); void snd_soc_jack_notifier_unregister(struct snd_soc_jack *jack, struct notifier_block *nb); |
fa9879ede ASoC: add support... |
329 330 331 |
int snd_soc_jack_add_zones(struct snd_soc_jack *jack, int count, struct snd_soc_jack_zone *zones); int snd_soc_jack_get_type(struct snd_soc_jack *jack, int micbias_voltage); |
ec67624d3 ASoC: Add GPIO su... |
332 333 334 335 336 337 |
#ifdef CONFIG_GPIOLIB int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count, struct snd_soc_jack_gpio *gpios); void snd_soc_jack_free_gpios(struct snd_soc_jack *jack, int count, struct snd_soc_jack_gpio *gpios); #endif |
8a2cd6180 ASoC: Add jack re... |
338 |
|
808db4a45 [ALSA] ASoC: core... |
339 340 |
/* codec register bit access */ int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg, |
46f5822f7 ASoC: Allow 32 bi... |
341 |
unsigned int mask, unsigned int value); |
dd1b3d53c ASoC: Export snd_... |
342 343 344 |
int snd_soc_update_bits_locked(struct snd_soc_codec *codec, unsigned short reg, unsigned int mask, unsigned int value); |
808db4a45 [ALSA] ASoC: core... |
345 |
int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned short reg, |
46f5822f7 ASoC: Allow 32 bi... |
346 |
unsigned int mask, unsigned int value); |
808db4a45 [ALSA] ASoC: core... |
347 348 349 350 351 352 353 354 355 |
int snd_soc_new_ac97_codec(struct snd_soc_codec *codec, struct snd_ac97_bus_ops *ops, int num); void snd_soc_free_ac97_codec(struct snd_soc_codec *codec); /* *Controls */ struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template, |
efb7ac3f9 ASoC: Fix prefixi... |
356 357 |
void *data, char *long_name, const char *prefix); |
3e8e1952e ASoC: cleanup dup... |
358 359 |
int snd_soc_add_controls(struct snd_soc_codec *codec, const struct snd_kcontrol_new *controls, int num_controls); |
a491a5c84 ASoC: core - Add ... |
360 361 |
int snd_soc_add_platform_controls(struct snd_soc_platform *platform, const struct snd_kcontrol_new *controls, int num_controls); |
808db4a45 [ALSA] ASoC: core... |
362 363 364 365 366 367 368 369 |
int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo); int snd_soc_info_enum_ext(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo); int snd_soc_get_enum_double(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); |
2e72f8e37 ASoC: New enum ty... |
370 371 372 373 |
int snd_soc_get_value_enum_double(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); int snd_soc_put_value_enum_double(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); |
808db4a45 [ALSA] ASoC: core... |
374 375 376 377 |
int snd_soc_info_volsw(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo); int snd_soc_info_volsw_ext(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo); |
392abe9cb [ALSA] ASoC: buil... |
378 |
#define snd_soc_info_bool_ext snd_ctl_boolean_mono_info |
808db4a45 [ALSA] ASoC: core... |
379 380 381 382 383 384 385 386 387 388 |
int snd_soc_get_volsw(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); int snd_soc_put_volsw(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); int snd_soc_info_volsw_2r(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo); int snd_soc_get_volsw_2r(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); int snd_soc_put_volsw_2r(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); |
e13ac2e9b [ALSA] ASoC: Add ... |
389 390 391 392 393 394 |
int snd_soc_info_volsw_s8(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo); int snd_soc_get_volsw_s8(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); |
637d3847b ASoC: core: Suppo... |
395 396 |
int snd_soc_limit_volume(struct snd_soc_codec *codec, const char *name, int max); |
b6f4bb383 ASoC: Add SOC_DOU... |
397 398 399 400 401 402 |
int snd_soc_info_volsw_2r_sx(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo); int snd_soc_get_volsw_2r_sx(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); int snd_soc_put_volsw_2r_sx(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); |
808db4a45 [ALSA] ASoC: core... |
403 |
|
8a2cd6180 ASoC: Add jack re... |
404 |
/** |
066d16c3e ASoC: soc-cache: ... |
405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 |
* struct snd_soc_reg_access - Describes whether a given register is * readable, writable or volatile. * * @reg: the register number * @read: whether this register is readable * @write: whether this register is writable * @vol: whether this register is volatile */ struct snd_soc_reg_access { u16 reg; u16 read; u16 write; u16 vol; }; /** |
8a2cd6180 ASoC: Add jack re... |
421 422 423 424 425 426 427 428 429 430 431 432 |
* struct snd_soc_jack_pin - Describes a pin to update based on jack detection * * @pin: name of the pin to update * @mask: bits to check for in reported jack status * @invert: if non-zero then pin is enabled when status is not reported */ struct snd_soc_jack_pin { struct list_head list; const char *pin; int mask; bool invert; }; |
ec67624d3 ASoC: Add GPIO su... |
433 |
/** |
fa9879ede ASoC: add support... |
434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 |
* struct snd_soc_jack_zone - Describes voltage zones of jack detection * * @min_mv: start voltage in mv * @max_mv: end voltage in mv * @jack_type: type of jack that is expected for this voltage * @debounce_time: debounce_time for jack, codec driver should wait for this * duration before reading the adc for voltages * @:list: list container */ struct snd_soc_jack_zone { unsigned int min_mv; unsigned int max_mv; unsigned int jack_type; unsigned int debounce_time; struct list_head list; }; /** |
ec67624d3 ASoC: Add GPIO su... |
452 453 454 455 456 457 458 |
* struct snd_soc_jack_gpio - Describes a gpio pin for jack detection * * @gpio: gpio number * @name: gpio name * @report: value to report when jack detected * @invert: report presence in low state * @debouce_time: debouce time in ms |
7887ab3a2 ASoC: Allow GPIO ... |
459 |
* @wake: enable as wake source |
fadddc875 ASoC: Add kerneld... |
460 461 462 |
* @jack_status_check: callback function which overrides the detection * to provide more complex checks (eg, reading an * ADC). |
ec67624d3 ASoC: Add GPIO su... |
463 464 465 466 467 468 469 470 |
*/ #ifdef CONFIG_GPIOLIB struct snd_soc_jack_gpio { unsigned int gpio; const char *name; int report; int invert; int debounce_time; |
7887ab3a2 ASoC: Allow GPIO ... |
471 |
bool wake; |
ec67624d3 ASoC: Add GPIO su... |
472 |
struct snd_soc_jack *jack; |
4c14d78e8 ASoC: Use delayed... |
473 |
struct delayed_work work; |
c871a0531 ASoC: Add jack_st... |
474 475 |
int (*jack_status_check)(void); |
ec67624d3 ASoC: Add GPIO su... |
476 477 |
}; #endif |
8a2cd6180 ASoC: Add jack re... |
478 479 |
struct snd_soc_jack { struct snd_jack *jack; |
f0fba2ad1 ASoC: multi-compo... |
480 |
struct snd_soc_codec *codec; |
8a2cd6180 ASoC: Add jack re... |
481 482 |
struct list_head pins; int status; |
d5021ec9f ASoC: Add a notif... |
483 |
struct blocking_notifier_head notifier; |
fa9879ede ASoC: add support... |
484 |
struct list_head jack_zones; |
8a2cd6180 ASoC: Add jack re... |
485 |
}; |
808db4a45 [ALSA] ASoC: core... |
486 487 |
/* SoC PCM stream information */ struct snd_soc_pcm_stream { |
f0fba2ad1 ASoC: multi-compo... |
488 |
const char *stream_name; |
1c433fbda [ALSA] soc - 0.13... |
489 490 |
u64 formats; /* SNDRV_PCM_FMTBIT_* */ unsigned int rates; /* SNDRV_PCM_RATE_* */ |
808db4a45 [ALSA] ASoC: core... |
491 492 493 494 |
unsigned int rate_min; /* min rate */ unsigned int rate_max; /* max rate */ unsigned int channels_min; /* min channels */ unsigned int channels_max; /* max channels */ |
808db4a45 [ALSA] ASoC: core... |
495 496 497 498 499 500 501 502 503 504 505 |
}; /* SoC audio ops */ struct snd_soc_ops { int (*startup)(struct snd_pcm_substream *); void (*shutdown)(struct snd_pcm_substream *); int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *); int (*hw_free)(struct snd_pcm_substream *); int (*prepare)(struct snd_pcm_substream *); int (*trigger)(struct snd_pcm_substream *, int); }; |
7a30a3db3 ASoC: soc-cache: ... |
506 507 |
/* SoC cache ops */ struct snd_soc_cache_ops { |
0d735eaa2 ASoC: soc-cache: ... |
508 |
const char *name; |
7a30a3db3 ASoC: soc-cache: ... |
509 510 511 512 513 514 515 516 517 |
enum snd_soc_compress_type id; int (*init)(struct snd_soc_codec *codec); int (*exit)(struct snd_soc_codec *codec); int (*read)(struct snd_soc_codec *codec, unsigned int reg, unsigned int *value); int (*write)(struct snd_soc_codec *codec, unsigned int reg, unsigned int value); int (*sync)(struct snd_soc_codec *codec); }; |
f0fba2ad1 ASoC: multi-compo... |
518 |
/* SoC Audio Codec device */ |
808db4a45 [ALSA] ASoC: core... |
519 |
struct snd_soc_codec { |
f0fba2ad1 ASoC: multi-compo... |
520 |
const char *name; |
ead9b9199 ASoC: Add optiona... |
521 |
const char *name_prefix; |
f0fba2ad1 ASoC: multi-compo... |
522 |
int id; |
0d0cf00a7 ASoC: Add codec r... |
523 |
struct device *dev; |
001ae4c03 ASoC: Constify st... |
524 |
const struct snd_soc_codec_driver *driver; |
0d0cf00a7 ASoC: Add codec r... |
525 |
|
f0fba2ad1 ASoC: multi-compo... |
526 527 |
struct mutex mutex; struct snd_soc_card *card; |
0d0cf00a7 ASoC: Add codec r... |
528 |
struct list_head list; |
f0fba2ad1 ASoC: multi-compo... |
529 530 |
struct list_head card_list; int num_dai; |
23bbce34f ASoC: Add compres... |
531 |
enum snd_soc_compress_type compress_type; |
aea170a09 ASoC: soc-cache: ... |
532 |
size_t reg_size; /* reg_cache_size * reg_word_size */ |
1500b7b5f ASoC: Automatical... |
533 534 |
int (*volatile_register)(struct snd_soc_codec *, unsigned int); int (*readable_register)(struct snd_soc_codec *, unsigned int); |
8020454c9 ASoC: Add default... |
535 |
int (*writable_register)(struct snd_soc_codec *, unsigned int); |
808db4a45 [ALSA] ASoC: core... |
536 537 |
/* runtime */ |
808db4a45 [ALSA] ASoC: core... |
538 539 |
struct snd_ac97 *ac97; /* for ad-hoc ac97 devices */ unsigned int active; |
dad8e7aee ASoC: soc-cache: ... |
540 |
unsigned int cache_bypass:1; /* Suppress access to the cache */ |
f0fba2ad1 ASoC: multi-compo... |
541 542 543 |
unsigned int suspended:1; /* Codec is in suspend PM state */ unsigned int probed:1; /* Codec has been probed */ unsigned int ac97_registered:1; /* Codec has been AC97 registered */ |
0562f7882 ASoC: don't regis... |
544 |
unsigned int ac97_created:1; /* Codec has been created by SoC */ |
f0fba2ad1 ASoC: multi-compo... |
545 |
unsigned int sysfs_registered:1; /* codec has been sysfs registered */ |
fdf0f54da ASoC: soc-core: A... |
546 |
unsigned int cache_init:1; /* codec cache has been initialized */ |
aaee8ef14 ASoC: Make cache ... |
547 548 |
u32 cache_only; /* Suppress writes to hardware */ u32 cache_sync; /* Cache needs to be synced to hardware */ |
808db4a45 [ALSA] ASoC: core... |
549 550 551 |
/* codec IO */ void *control_data; /* codec control (i2c/3wire) data */ |
67850a892 ASoC: Add control... |
552 |
enum snd_soc_control_type control_type; |
808db4a45 [ALSA] ASoC: core... |
553 |
hw_write_t hw_write; |
afa2f1066 ASoC: Factor out ... |
554 |
unsigned int (*hw_read)(struct snd_soc_codec *, unsigned int); |
c3acec267 ASoC: Move active... |
555 556 |
unsigned int (*read)(struct snd_soc_codec *, unsigned int); int (*write)(struct snd_soc_codec *, unsigned int, unsigned int); |
5fb609d43 ASoC: soc-cache: ... |
557 |
int (*bulk_write_raw)(struct snd_soc_codec *, unsigned int, const void *, size_t); |
808db4a45 [ALSA] ASoC: core... |
558 |
void *reg_cache; |
3335ddca9 ASoC: soc-cache: ... |
559 |
const void *reg_def_copy; |
7a30a3db3 ASoC: soc-cache: ... |
560 561 |
const struct snd_soc_cache_ops *cache_ops; struct mutex cache_rw_mutex; |
a96ca3387 ASoC: Support tur... |
562 |
|
808db4a45 [ALSA] ASoC: core... |
563 |
/* dapm */ |
ce6120cca ASoC: Decouple DA... |
564 |
struct snd_soc_dapm_context dapm; |
808db4a45 [ALSA] ASoC: core... |
565 |
|
384c89e2e ASoC: Push debugf... |
566 |
#ifdef CONFIG_DEBUG_FS |
88439ac79 ASoC: add support... |
567 |
struct dentry *debugfs_codec_root; |
384c89e2e ASoC: Push debugf... |
568 |
struct dentry *debugfs_reg; |
79fb9387f ASoC: Add DAPM wi... |
569 |
struct dentry *debugfs_dapm; |
384c89e2e ASoC: Push debugf... |
570 |
#endif |
808db4a45 [ALSA] ASoC: core... |
571 |
}; |
f0fba2ad1 ASoC: multi-compo... |
572 573 574 575 576 577 578 579 580 |
/* codec driver */ struct snd_soc_codec_driver { /* driver ops */ int (*probe)(struct snd_soc_codec *); int (*remove)(struct snd_soc_codec *); int (*suspend)(struct snd_soc_codec *, pm_message_t state); int (*resume)(struct snd_soc_codec *); |
b7af1dafd ASoC: Add data ba... |
581 582 583 |
/* Default control and setup, added after probe() is run */ const struct snd_kcontrol_new *controls; int num_controls; |
89b95ac09 ASoC: Add DAPM wi... |
584 585 586 587 |
const struct snd_soc_dapm_widget *dapm_widgets; int num_dapm_widgets; const struct snd_soc_dapm_route *dapm_routes; int num_dapm_routes; |
ec4ee52a8 ASoC: Provide COD... |
588 589 590 591 592 |
/* codec wide operations */ int (*set_sysclk)(struct snd_soc_codec *codec, int clk_id, unsigned int freq, int dir); int (*set_pll)(struct snd_soc_codec *codec, int pll_id, int source, unsigned int freq_in, unsigned int freq_out); |
f0fba2ad1 ASoC: multi-compo... |
593 594 595 596 597 |
/* codec IO */ unsigned int (*read)(struct snd_soc_codec *, unsigned int); int (*write)(struct snd_soc_codec *, unsigned int, unsigned int); int (*display_register)(struct snd_soc_codec *, char *, size_t, unsigned int); |
d4754ec91 ASoC: Update user... |
598 599 |
int (*volatile_register)(struct snd_soc_codec *, unsigned int); int (*readable_register)(struct snd_soc_codec *, unsigned int); |
8020454c9 ASoC: Add default... |
600 |
int (*writable_register)(struct snd_soc_codec *, unsigned int); |
f0fba2ad1 ASoC: multi-compo... |
601 602 603 604 |
short reg_cache_size; short reg_cache_step; short reg_word_size; const void *reg_cache_default; |
066d16c3e ASoC: soc-cache: ... |
605 606 |
short reg_access_size; const struct snd_soc_reg_access *reg_access_default; |
7a30a3db3 ASoC: soc-cache: ... |
607 |
enum snd_soc_compress_type compress_type; |
f0fba2ad1 ASoC: multi-compo... |
608 609 610 611 |
/* codec bias level */ int (*set_bias_level)(struct snd_soc_codec *, enum snd_soc_bias_level level); |
474b62d6e ASoC: Provide per... |
612 613 |
void (*seq_notifier)(struct snd_soc_dapm_context *, |
f85a9e0d2 ASoC: Add subsequ... |
614 |
enum snd_soc_dapm_type, int); |
0168bf0d1 ASoC: core - Allo... |
615 616 617 618 |
/* probe ordering - for components with runtime dependencies */ int probe_order; int remove_order; |
808db4a45 [ALSA] ASoC: core... |
619 620 621 |
}; /* SoC platform interface */ |
f0fba2ad1 ASoC: multi-compo... |
622 |
struct snd_soc_platform_driver { |
808db4a45 [ALSA] ASoC: core... |
623 |
|
f0fba2ad1 ASoC: multi-compo... |
624 625 626 627 |
int (*probe)(struct snd_soc_platform *); int (*remove)(struct snd_soc_platform *); int (*suspend)(struct snd_soc_dai *dai); int (*resume)(struct snd_soc_dai *dai); |
808db4a45 [ALSA] ASoC: core... |
628 629 |
/* pcm creation and destruction */ |
552d1ef6b ASoC: core - Opti... |
630 |
int (*pcm_new)(struct snd_soc_pcm_runtime *); |
808db4a45 [ALSA] ASoC: core... |
631 |
void (*pcm_free)(struct snd_pcm *); |
cb2cf612f ASoC: core - Add ... |
632 633 634 635 636 637 638 |
/* Default control and setup, added after probe() is run */ const struct snd_kcontrol_new *controls; int num_controls; const struct snd_soc_dapm_widget *dapm_widgets; int num_dapm_widgets; const struct snd_soc_dapm_route *dapm_routes; int num_dapm_routes; |
258020d08 ASoC: core: Add d... |
639 640 641 642 643 644 |
/* * For platform caused delay reporting. * Optional. */ snd_pcm_sframes_t (*delay)(struct snd_pcm_substream *, struct snd_soc_dai *); |
808db4a45 [ALSA] ASoC: core... |
645 |
/* platform stream ops */ |
f0fba2ad1 ASoC: multi-compo... |
646 |
struct snd_pcm_ops *ops; |
0168bf0d1 ASoC: core - Allo... |
647 648 649 650 |
/* probe ordering - for components with runtime dependencies */ int probe_order; int remove_order; |
f1442bc1e ASoC: core - Add ... |
651 652 653 654 |
/* platform IO - used for platform DAPM */ unsigned int (*read)(struct snd_soc_platform *, unsigned int); int (*write)(struct snd_soc_platform *, unsigned int, unsigned int); |
808db4a45 [ALSA] ASoC: core... |
655 |
}; |
f0fba2ad1 ASoC: multi-compo... |
656 657 658 659 660 |
struct snd_soc_platform { const char *name; int id; struct device *dev; struct snd_soc_platform_driver *driver; |
808db4a45 [ALSA] ASoC: core... |
661 |
|
f0fba2ad1 ASoC: multi-compo... |
662 663 |
unsigned int suspended:1; /* platform is suspended */ unsigned int probed:1; |
1c433fbda [ALSA] soc - 0.13... |
664 |
|
f0fba2ad1 ASoC: multi-compo... |
665 666 667 |
struct snd_soc_card *card; struct list_head list; struct list_head card_list; |
b79506413 ASoC: core - Add ... |
668 669 |
struct snd_soc_dapm_context dapm; |
f0fba2ad1 ASoC: multi-compo... |
670 |
}; |
808db4a45 [ALSA] ASoC: core... |
671 |
|
f0fba2ad1 ASoC: multi-compo... |
672 673 674 675 676 677 678 679 |
struct snd_soc_dai_link { /* config - must be set by machine driver */ const char *name; /* Codec name */ const char *stream_name; /* Stream name */ const char *codec_name; /* for multi-codec */ const char *platform_name; /* for multi-platform */ const char *cpu_dai_name; const char *codec_dai_name; |
4ccab3e72 [ALSA] soc - Ensu... |
680 |
|
3efab7dcc ASoC: Allow DAI l... |
681 682 |
/* Keep DAI active over suspend */ unsigned int ignore_suspend:1; |
06f409d76 ASoC: Provide cor... |
683 684 |
/* Symmetry requirements */ unsigned int symmetric_rates:1; |
f0fba2ad1 ASoC: multi-compo... |
685 686 |
/* codec/machine specific init - e.g. add machine controls */ int (*init)(struct snd_soc_pcm_runtime *rtd); |
06f409d76 ASoC: Provide cor... |
687 |
|
f0fba2ad1 ASoC: multi-compo... |
688 689 |
/* machine stream operations */ struct snd_soc_ops *ops; |
808db4a45 [ALSA] ASoC: core... |
690 |
}; |
ff819b835 ASoC: soc-core: G... |
691 |
struct snd_soc_codec_conf { |
ead9b9199 ASoC: Add optiona... |
692 |
const char *dev_name; |
ff819b835 ASoC: soc-core: G... |
693 694 695 696 697 |
/* * optional map of kcontrol, widget and path name prefixes that are * associated per device */ |
ead9b9199 ASoC: Add optiona... |
698 |
const char *name_prefix; |
ff819b835 ASoC: soc-core: G... |
699 700 701 702 703 704 |
/* * set this to the desired compression type if you want to * override the one supplied in codec->driver->compress_type */ enum snd_soc_compress_type compress_type; |
ead9b9199 ASoC: Add optiona... |
705 |
}; |
2eea392d0 ASoC: Add support... |
706 707 708 709 710 711 712 |
struct snd_soc_aux_dev { const char *name; /* Codec name */ const char *codec_name; /* for multi-codec */ /* codec/machine specific init - e.g. add machine controls */ int (*init)(struct snd_soc_dapm_context *dapm); }; |
875065491 ASoC: Rename snd_... |
713 714 |
/* SoC card */ struct snd_soc_card { |
f0fba2ad1 ASoC: multi-compo... |
715 |
const char *name; |
22de71ba0 ASoC: core - allo... |
716 717 |
const char *long_name; const char *driver_name; |
c5af3a2e1 ASoC: Add card re... |
718 |
struct device *dev; |
f0fba2ad1 ASoC: multi-compo... |
719 720 |
struct snd_card *snd_card; struct module *owner; |
c5af3a2e1 ASoC: Add card re... |
721 722 |
struct list_head list; |
f0fba2ad1 ASoC: multi-compo... |
723 |
struct mutex mutex; |
c5af3a2e1 ASoC: Add card re... |
724 |
|
f0fba2ad1 ASoC: multi-compo... |
725 |
bool instantiated; |
808db4a45 [ALSA] ASoC: core... |
726 |
|
e7361ec49 ASoC: Replace pde... |
727 |
int (*probe)(struct snd_soc_card *card); |
28e9ad921 ASoC: Add a late_... |
728 |
int (*late_probe)(struct snd_soc_card *card); |
e7361ec49 ASoC: Replace pde... |
729 |
int (*remove)(struct snd_soc_card *card); |
808db4a45 [ALSA] ASoC: core... |
730 731 732 |
/* the pre and post PM functions are used to do any PM work before and * after the codec and DAI's do any PM work. */ |
70b2ac126 ASoC: Use card ra... |
733 734 735 736 |
int (*suspend_pre)(struct snd_soc_card *card); int (*suspend_post)(struct snd_soc_card *card); int (*resume_pre)(struct snd_soc_card *card); int (*resume_post)(struct snd_soc_card *card); |
808db4a45 [ALSA] ASoC: core... |
737 |
|
0b4d221b8 [ALSA] soc - Add ... |
738 |
/* callbacks */ |
875065491 ASoC: Rename snd_... |
739 |
int (*set_bias_level)(struct snd_soc_card *, |
d4c6005f8 ASoC: Add context... |
740 |
struct snd_soc_dapm_context *dapm, |
0be9898ad [ALSA] ASoC: Clar... |
741 |
enum snd_soc_bias_level level); |
1badabd98 ASoC: Add post-CO... |
742 |
int (*set_bias_level_post)(struct snd_soc_card *, |
d4c6005f8 ASoC: Add context... |
743 |
struct snd_soc_dapm_context *dapm, |
1badabd98 ASoC: Add post-CO... |
744 |
enum snd_soc_bias_level level); |
0b4d221b8 [ALSA] soc - Add ... |
745 |
|
6c5f1fed4 ASoC: Make pmdown... |
746 |
long pmdown_time; |
96dd36228 ASoC: Make pmdown... |
747 |
|
808db4a45 [ALSA] ASoC: core... |
748 749 750 |
/* CPU <--> Codec DAI links */ struct snd_soc_dai_link *dai_link; int num_links; |
f0fba2ad1 ASoC: multi-compo... |
751 752 |
struct snd_soc_pcm_runtime *rtd; int num_rtd; |
6308419a1 ASoC: Push workqu... |
753 |
|
ff819b835 ASoC: soc-core: G... |
754 755 756 |
/* optional codec specific configuration */ struct snd_soc_codec_conf *codec_conf; int num_configs; |
ead9b9199 ASoC: Add optiona... |
757 |
|
2eea392d0 ASoC: Add support... |
758 759 760 761 762 763 764 765 |
/* * optional auxiliary devices such as amplifiers or codecs with DAI * link unused */ struct snd_soc_aux_dev *aux_dev; int num_aux_devs; struct snd_soc_pcm_runtime *rtd_aux; int num_aux_rtd; |
b7af1dafd ASoC: Add data ba... |
766 767 |
const struct snd_kcontrol_new *controls; int num_controls; |
b8ad29deb ASoC: Allow card ... |
768 769 770 |
/* * Card-specific routes and widgets. */ |
d06e48db1 ASoC: Make struct... |
771 |
const struct snd_soc_dapm_widget *dapm_widgets; |
b8ad29deb ASoC: Allow card ... |
772 |
int num_dapm_widgets; |
d06e48db1 ASoC: Make struct... |
773 |
const struct snd_soc_dapm_route *dapm_routes; |
b8ad29deb ASoC: Allow card ... |
774 |
int num_dapm_routes; |
6308419a1 ASoC: Push workqu... |
775 |
struct work_struct deferred_resume_work; |
f0fba2ad1 ASoC: multi-compo... |
776 777 778 779 780 |
/* lists of probed devices belonging to this card */ struct list_head codec_dev_list; struct list_head platform_dev_list; struct list_head dai_dev_list; |
a60521549 ASoC: Add sound c... |
781 |
|
97c866def ASoC: Move widget... |
782 |
struct list_head widgets; |
8ddab3f51 ASoC: Move DAPM p... |
783 |
struct list_head paths; |
7be31be88 ASoC: Extend DAPM... |
784 |
struct list_head dapm_list; |
8ddab3f51 ASoC: Move DAPM p... |
785 |
|
e37a4970c ASoC: Add a per-c... |
786 787 |
/* Generic DAPM context for the card */ struct snd_soc_dapm_context dapm; |
a60521549 ASoC: Add sound c... |
788 789 |
#ifdef CONFIG_DEBUG_FS struct dentry *debugfs_card_root; |
3a45b8672 ASoC: Move pop ti... |
790 |
struct dentry *debugfs_pop_time; |
a60521549 ASoC: Add sound c... |
791 |
#endif |
3a45b8672 ASoC: Move pop ti... |
792 |
u32 pop_time; |
dddf3e4c2 ASoC: Add card dr... |
793 794 |
void *drvdata; |
808db4a45 [ALSA] ASoC: core... |
795 |
}; |
f0fba2ad1 ASoC: multi-compo... |
796 797 798 |
/* SoC machine DAI configuration, glues a codec and cpu DAI together */ struct snd_soc_pcm_runtime { struct device dev; |
875065491 ASoC: Rename snd_... |
799 |
struct snd_soc_card *card; |
f0fba2ad1 ASoC: multi-compo... |
800 |
struct snd_soc_dai_link *dai_link; |
b8c0dab9b ASoC: core - PCM ... |
801 802 803 |
struct mutex pcm_mutex; enum snd_soc_pcm_subclass pcm_subclass; struct snd_pcm_ops ops; |
f0fba2ad1 ASoC: multi-compo... |
804 805 806 |
unsigned int complete:1; unsigned int dev_registered:1; |
808db4a45 [ALSA] ASoC: core... |
807 |
|
f0fba2ad1 ASoC: multi-compo... |
808 809 810 811 812 813 814 815 816 817 818 819 |
/* Symmetry data - only valid if symmetry is being enforced */ unsigned int rate; long pmdown_time; /* runtime devices */ struct snd_pcm *pcm; struct snd_soc_codec *codec; struct snd_soc_platform *platform; struct snd_soc_dai *codec_dai; struct snd_soc_dai *cpu_dai; struct delayed_work delayed_work; |
808db4a45 [ALSA] ASoC: core... |
820 |
}; |
4eaa9819d ALSA: ASoC: Conve... |
821 822 |
/* mixer control */ struct soc_mixer_control { |
d11bb4a92 ASoC: core: Fix f... |
823 |
int min, max, platform_max; |
815ecf8de ALSA: ASoC: conve... |
824 |
unsigned int reg, rreg, shift, rshift, invert; |
4eaa9819d ALSA: ASoC: Conve... |
825 |
}; |
808db4a45 [ALSA] ASoC: core... |
826 827 828 829 830 831 |
/* enumerated kcontrol */ struct soc_enum { unsigned short reg; unsigned short reg2; unsigned char shift_l; unsigned char shift_r; |
f8ba0b7bf ALSA: ASoC: Renam... |
832 |
unsigned int max; |
2e72f8e37 ASoC: New enum ty... |
833 |
unsigned int mask; |
87023ff74 ASoC: Declare con... |
834 |
const char * const *texts; |
2e72f8e37 ASoC: New enum ty... |
835 836 837 |
const unsigned int *values; void *dapm; }; |
5c82f5673 AsoC: Make snd_so... |
838 |
/* codec IO */ |
c37537079 ASoC: Push snd_so... |
839 840 841 |
unsigned int snd_soc_read(struct snd_soc_codec *codec, unsigned int reg); unsigned int snd_soc_write(struct snd_soc_codec *codec, unsigned int reg, unsigned int val); |
5fb609d43 ASoC: soc-cache: ... |
842 843 |
unsigned int snd_soc_bulk_write_raw(struct snd_soc_codec *codec, unsigned int reg, const void *data, size_t len); |
5c82f5673 AsoC: Make snd_so... |
844 |
|
f0fba2ad1 ASoC: multi-compo... |
845 |
/* device driver data */ |
dddf3e4c2 ASoC: Add card dr... |
846 847 848 849 850 851 852 853 854 855 |
static inline void snd_soc_card_set_drvdata(struct snd_soc_card *card, void *data) { card->drvdata = data; } static inline void *snd_soc_card_get_drvdata(struct snd_soc_card *card) { return card->drvdata; } |
b2c812e22 ASoC: Add indirec... |
856 |
static inline void snd_soc_codec_set_drvdata(struct snd_soc_codec *codec, |
f0fba2ad1 ASoC: multi-compo... |
857 |
void *data) |
b2c812e22 ASoC: Add indirec... |
858 |
{ |
f0fba2ad1 ASoC: multi-compo... |
859 |
dev_set_drvdata(codec->dev, data); |
b2c812e22 ASoC: Add indirec... |
860 861 862 863 |
} static inline void *snd_soc_codec_get_drvdata(struct snd_soc_codec *codec) { |
f0fba2ad1 ASoC: multi-compo... |
864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 |
return dev_get_drvdata(codec->dev); } static inline void snd_soc_platform_set_drvdata(struct snd_soc_platform *platform, void *data) { dev_set_drvdata(platform->dev, data); } static inline void *snd_soc_platform_get_drvdata(struct snd_soc_platform *platform) { return dev_get_drvdata(platform->dev); } static inline void snd_soc_pcm_set_drvdata(struct snd_soc_pcm_runtime *rtd, void *data) { dev_set_drvdata(&rtd->dev, data); } static inline void *snd_soc_pcm_get_drvdata(struct snd_soc_pcm_runtime *rtd) { return dev_get_drvdata(&rtd->dev); |
b2c812e22 ASoC: Add indirec... |
887 |
} |
4e10bda05 ASoC: soc core ad... |
888 889 890 891 892 893 894 895 896 |
static inline void snd_soc_initialize_card_lists(struct snd_soc_card *card) { INIT_LIST_HEAD(&card->dai_dev_list); INIT_LIST_HEAD(&card->codec_dev_list); INIT_LIST_HEAD(&card->platform_dev_list); INIT_LIST_HEAD(&card->widgets); INIT_LIST_HEAD(&card->paths); INIT_LIST_HEAD(&card->dapm_list); } |
fb257897b ASoC: Work around... |
897 898 |
int snd_soc_util_init(void); void snd_soc_util_exit(void); |
a47cbe726 ASoC: Move DAI st... |
899 |
#include <sound/soc-dai.h> |
faff4bb06 ASoC: Export debu... |
900 |
#ifdef CONFIG_DEBUG_FS |
8a9dab1a5 ASoC: Update name... |
901 |
extern struct dentry *snd_soc_debugfs_root; |
faff4bb06 ASoC: Export debu... |
902 |
#endif |
6f8ab4ac2 ASoC: Export card... |
903 |
extern const struct dev_pm_ops snd_soc_pm_ops; |
808db4a45 [ALSA] ASoC: core... |
904 |
#endif |