]> git.karo-electronics.de Git - karo-tx-linux.git/blob - include/sound/soc.h
fecde5b4d97865fee59a29ac7477f9ceebf530e5
[karo-tx-linux.git] / include / sound / soc.h
1 /*
2  * linux/sound/soc.h -- ALSA SoC Layer
3  *
4  * Author:              Liam Girdwood
5  * Created:             Aug 11th 2005
6  * Copyright:   Wolfson Microelectronics. PLC.
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  */
12
13 #ifndef __LINUX_SND_SOC_H
14 #define __LINUX_SND_SOC_H
15
16 #include <linux/of.h>
17 #include <linux/platform_device.h>
18 #include <linux/types.h>
19 #include <linux/notifier.h>
20 #include <linux/workqueue.h>
21 #include <linux/interrupt.h>
22 #include <linux/kernel.h>
23 #include <linux/regmap.h>
24 #include <linux/log2.h>
25 #include <sound/core.h>
26 #include <sound/pcm.h>
27 #include <sound/compress_driver.h>
28 #include <sound/control.h>
29 #include <sound/ac97_codec.h>
30 #include <sound/soc-topology.h>
31
32 /*
33  * Convenience kcontrol builders
34  */
35 #define SOC_DOUBLE_VALUE(xreg, shift_left, shift_right, xmax, xinvert, xautodisable) \
36         ((unsigned long)&(struct soc_mixer_control) \
37         {.reg = xreg, .rreg = xreg, .shift = shift_left, \
38         .rshift = shift_right, .max = xmax, .platform_max = xmax, \
39         .invert = xinvert, .autodisable = xautodisable})
40 #define SOC_DOUBLE_S_VALUE(xreg, shift_left, shift_right, xmin, xmax, xsign_bit, xinvert, xautodisable) \
41         ((unsigned long)&(struct soc_mixer_control) \
42         {.reg = xreg, .rreg = xreg, .shift = shift_left, \
43         .rshift = shift_right, .min = xmin, .max = xmax, .platform_max = xmax, \
44         .sign_bit = xsign_bit, .invert = xinvert, .autodisable = xautodisable})
45 #define SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert, xautodisable) \
46         SOC_DOUBLE_VALUE(xreg, xshift, xshift, xmax, xinvert, xautodisable)
47 #define SOC_SINGLE_VALUE_EXT(xreg, xmax, xinvert) \
48         ((unsigned long)&(struct soc_mixer_control) \
49         {.reg = xreg, .max = xmax, .platform_max = xmax, .invert = xinvert})
50 #define SOC_DOUBLE_R_VALUE(xlreg, xrreg, xshift, xmax, xinvert) \
51         ((unsigned long)&(struct soc_mixer_control) \
52         {.reg = xlreg, .rreg = xrreg, .shift = xshift, .rshift = xshift, \
53         .max = xmax, .platform_max = xmax, .invert = xinvert})
54 #define SOC_DOUBLE_R_S_VALUE(xlreg, xrreg, xshift, xmin, xmax, xsign_bit, xinvert) \
55         ((unsigned long)&(struct soc_mixer_control) \
56         {.reg = xlreg, .rreg = xrreg, .shift = xshift, .rshift = xshift, \
57         .max = xmax, .min = xmin, .platform_max = xmax, .sign_bit = xsign_bit, \
58         .invert = xinvert})
59 #define SOC_DOUBLE_R_RANGE_VALUE(xlreg, xrreg, xshift, xmin, xmax, xinvert) \
60         ((unsigned long)&(struct soc_mixer_control) \
61         {.reg = xlreg, .rreg = xrreg, .shift = xshift, .rshift = xshift, \
62         .min = xmin, .max = xmax, .platform_max = xmax, .invert = xinvert})
63 #define SOC_SINGLE(xname, reg, shift, max, invert) \
64 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
65         .info = snd_soc_info_volsw, .get = snd_soc_get_volsw,\
66         .put = snd_soc_put_volsw, \
67         .private_value = SOC_SINGLE_VALUE(reg, shift, max, invert, 0) }
68 #define SOC_SINGLE_RANGE(xname, xreg, xshift, xmin, xmax, xinvert) \
69 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
70         .info = snd_soc_info_volsw_range, .get = snd_soc_get_volsw_range, \
71         .put = snd_soc_put_volsw_range, \
72         .private_value = (unsigned long)&(struct soc_mixer_control) \
73                 {.reg = xreg, .rreg = xreg, .shift = xshift, \
74                  .rshift = xshift,  .min = xmin, .max = xmax, \
75                  .platform_max = xmax, .invert = xinvert} }
76 #define SOC_SINGLE_TLV(xname, reg, shift, max, invert, tlv_array) \
77 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
78         .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
79                  SNDRV_CTL_ELEM_ACCESS_READWRITE,\
80         .tlv.p = (tlv_array), \
81         .info = snd_soc_info_volsw, .get = snd_soc_get_volsw,\
82         .put = snd_soc_put_volsw, \
83         .private_value = SOC_SINGLE_VALUE(reg, shift, max, invert, 0) }
84 #define SOC_SINGLE_SX_TLV(xname, xreg, xshift, xmin, xmax, tlv_array) \
85 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
86         .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \
87         SNDRV_CTL_ELEM_ACCESS_READWRITE, \
88         .tlv.p  = (tlv_array),\
89         .info = snd_soc_info_volsw_sx, \
90         .get = snd_soc_get_volsw_sx,\
91         .put = snd_soc_put_volsw_sx, \
92         .private_value = (unsigned long)&(struct soc_mixer_control) \
93                 {.reg = xreg, .rreg = xreg, \
94                 .shift = xshift, .rshift = xshift, \
95                 .max = xmax, .min = xmin} }
96 #define SOC_SINGLE_RANGE_TLV(xname, xreg, xshift, xmin, xmax, xinvert, tlv_array) \
97 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
98         .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
99                  SNDRV_CTL_ELEM_ACCESS_READWRITE,\
100         .tlv.p = (tlv_array), \
101         .info = snd_soc_info_volsw_range, \
102         .get = snd_soc_get_volsw_range, .put = snd_soc_put_volsw_range, \
103         .private_value = (unsigned long)&(struct soc_mixer_control) \
104                 {.reg = xreg, .rreg = xreg, .shift = xshift, \
105                  .rshift = xshift, .min = xmin, .max = xmax, \
106                  .platform_max = xmax, .invert = xinvert} }
107 #define SOC_DOUBLE(xname, reg, shift_left, shift_right, max, invert) \
108 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
109         .info = snd_soc_info_volsw, .get = snd_soc_get_volsw, \
110         .put = snd_soc_put_volsw, \
111         .private_value = SOC_DOUBLE_VALUE(reg, shift_left, shift_right, \
112                                           max, invert, 0) }
113 #define SOC_DOUBLE_R(xname, reg_left, reg_right, xshift, xmax, xinvert) \
114 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
115         .info = snd_soc_info_volsw, \
116         .get = snd_soc_get_volsw, .put = snd_soc_put_volsw, \
117         .private_value = SOC_DOUBLE_R_VALUE(reg_left, reg_right, xshift, \
118                                             xmax, xinvert) }
119 #define SOC_DOUBLE_R_RANGE(xname, reg_left, reg_right, xshift, xmin, \
120                            xmax, xinvert)               \
121 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
122         .info = snd_soc_info_volsw_range, \
123         .get = snd_soc_get_volsw_range, .put = snd_soc_put_volsw_range, \
124         .private_value = SOC_DOUBLE_R_RANGE_VALUE(reg_left, reg_right, \
125                                             xshift, xmin, xmax, xinvert) }
126 #define SOC_DOUBLE_TLV(xname, reg, shift_left, shift_right, max, invert, tlv_array) \
127 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
128         .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
129                  SNDRV_CTL_ELEM_ACCESS_READWRITE,\
130         .tlv.p = (tlv_array), \
131         .info = snd_soc_info_volsw, .get = snd_soc_get_volsw, \
132         .put = snd_soc_put_volsw, \
133         .private_value = SOC_DOUBLE_VALUE(reg, shift_left, shift_right, \
134                                           max, invert, 0) }
135 #define SOC_DOUBLE_R_TLV(xname, reg_left, reg_right, xshift, xmax, xinvert, tlv_array) \
136 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
137         .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
138                  SNDRV_CTL_ELEM_ACCESS_READWRITE,\
139         .tlv.p = (tlv_array), \
140         .info = snd_soc_info_volsw, \
141         .get = snd_soc_get_volsw, .put = snd_soc_put_volsw, \
142         .private_value = SOC_DOUBLE_R_VALUE(reg_left, reg_right, xshift, \
143                                             xmax, xinvert) }
144 #define SOC_DOUBLE_R_RANGE_TLV(xname, reg_left, reg_right, xshift, xmin, \
145                                xmax, xinvert, tlv_array)                \
146 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
147         .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
148                  SNDRV_CTL_ELEM_ACCESS_READWRITE,\
149         .tlv.p = (tlv_array), \
150         .info = snd_soc_info_volsw_range, \
151         .get = snd_soc_get_volsw_range, .put = snd_soc_put_volsw_range, \
152         .private_value = SOC_DOUBLE_R_RANGE_VALUE(reg_left, reg_right, \
153                                             xshift, xmin, xmax, xinvert) }
154 #define SOC_DOUBLE_R_SX_TLV(xname, xreg, xrreg, xshift, xmin, xmax, tlv_array) \
155 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
156         .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \
157         SNDRV_CTL_ELEM_ACCESS_READWRITE, \
158         .tlv.p  = (tlv_array), \
159         .info = snd_soc_info_volsw_sx, \
160         .get = snd_soc_get_volsw_sx, \
161         .put = snd_soc_put_volsw_sx, \
162         .private_value = (unsigned long)&(struct soc_mixer_control) \
163                 {.reg = xreg, .rreg = xrreg, \
164                 .shift = xshift, .rshift = xshift, \
165                 .max = xmax, .min = xmin} }
166 #define SOC_DOUBLE_R_S_TLV(xname, reg_left, reg_right, xshift, xmin, xmax, xsign_bit, xinvert, tlv_array) \
167 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
168         .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
169                  SNDRV_CTL_ELEM_ACCESS_READWRITE,\
170         .tlv.p = (tlv_array), \
171         .info = snd_soc_info_volsw, \
172         .get = snd_soc_get_volsw, .put = snd_soc_put_volsw, \
173         .private_value = SOC_DOUBLE_R_S_VALUE(reg_left, reg_right, xshift, \
174                                             xmin, xmax, xsign_bit, xinvert) }
175 #define SOC_SINGLE_S8_TLV(xname, xreg, xmin, xmax, tlv_array) \
176 {       .iface  = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
177         .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \
178                   SNDRV_CTL_ELEM_ACCESS_READWRITE, \
179         .tlv.p  = (tlv_array), \
180         .info = snd_soc_info_volsw, .get = snd_soc_get_volsw,\
181         .put = snd_soc_put_volsw, \
182         .private_value = (unsigned long)&(struct soc_mixer_control) \
183         {.reg = xreg, .rreg = xreg,  \
184          .min = xmin, .max = xmax, .platform_max = xmax, \
185         .sign_bit = 7,} }
186 #define SOC_DOUBLE_S8_TLV(xname, xreg, xmin, xmax, tlv_array) \
187 {       .iface  = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
188         .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \
189                   SNDRV_CTL_ELEM_ACCESS_READWRITE, \
190         .tlv.p  = (tlv_array), \
191         .info = snd_soc_info_volsw, .get = snd_soc_get_volsw,\
192         .put = snd_soc_put_volsw, \
193         .private_value = SOC_DOUBLE_S_VALUE(xreg, 0, 8, xmin, xmax, 7, 0, 0) }
194 #define SOC_ENUM_DOUBLE(xreg, xshift_l, xshift_r, xitems, xtexts) \
195 {       .reg = xreg, .shift_l = xshift_l, .shift_r = xshift_r, \
196         .items = xitems, .texts = xtexts, \
197         .mask = xitems ? roundup_pow_of_two(xitems) - 1 : 0}
198 #define SOC_ENUM_SINGLE(xreg, xshift, xitems, xtexts) \
199         SOC_ENUM_DOUBLE(xreg, xshift, xshift, xitems, xtexts)
200 #define SOC_ENUM_SINGLE_EXT(xitems, xtexts) \
201 {       .items = xitems, .texts = xtexts }
202 #define SOC_VALUE_ENUM_DOUBLE(xreg, xshift_l, xshift_r, xmask, xitems, xtexts, xvalues) \
203 {       .reg = xreg, .shift_l = xshift_l, .shift_r = xshift_r, \
204         .mask = xmask, .items = xitems, .texts = xtexts, .values = xvalues}
205 #define SOC_VALUE_ENUM_SINGLE(xreg, xshift, xmask, xitems, xtexts, xvalues) \
206         SOC_VALUE_ENUM_DOUBLE(xreg, xshift, xshift, xmask, xitems, xtexts, xvalues)
207 #define SOC_VALUE_ENUM_SINGLE_AUTODISABLE(xreg, xshift, xmask, xitems, xtexts, xvalues) \
208 {       .reg = xreg, .shift_l = xshift, .shift_r = xshift, \
209         .mask = xmask, .items = xitems, .texts = xtexts, \
210         .values = xvalues, .autodisable = 1}
211 #define SOC_ENUM_SINGLE_VIRT(xitems, xtexts) \
212         SOC_ENUM_SINGLE(SND_SOC_NOPM, 0, xitems, xtexts)
213 #define SOC_ENUM(xname, xenum) \
214 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname,\
215         .info = snd_soc_info_enum_double, \
216         .get = snd_soc_get_enum_double, .put = snd_soc_put_enum_double, \
217         .private_value = (unsigned long)&xenum }
218 #define SOC_SINGLE_EXT(xname, xreg, xshift, xmax, xinvert,\
219          xhandler_get, xhandler_put) \
220 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
221         .info = snd_soc_info_volsw, \
222         .get = xhandler_get, .put = xhandler_put, \
223         .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert, 0) }
224 #define SOC_DOUBLE_EXT(xname, reg, shift_left, shift_right, max, invert,\
225          xhandler_get, xhandler_put) \
226 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
227         .info = snd_soc_info_volsw, \
228         .get = xhandler_get, .put = xhandler_put, \
229         .private_value = \
230                 SOC_DOUBLE_VALUE(reg, shift_left, shift_right, max, invert, 0) }
231 #define SOC_DOUBLE_R_EXT(xname, reg_left, reg_right, xshift, xmax, xinvert,\
232          xhandler_get, xhandler_put) \
233 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
234         .info = snd_soc_info_volsw, \
235         .get = xhandler_get, .put = xhandler_put, \
236         .private_value = SOC_DOUBLE_R_VALUE(reg_left, reg_right, xshift, \
237                                             xmax, xinvert) }
238 #define SOC_SINGLE_EXT_TLV(xname, xreg, xshift, xmax, xinvert,\
239          xhandler_get, xhandler_put, tlv_array) \
240 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
241         .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
242                  SNDRV_CTL_ELEM_ACCESS_READWRITE,\
243         .tlv.p = (tlv_array), \
244         .info = snd_soc_info_volsw, \
245         .get = xhandler_get, .put = xhandler_put, \
246         .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert, 0) }
247 #define SOC_SINGLE_RANGE_EXT_TLV(xname, xreg, xshift, xmin, xmax, xinvert, \
248                                  xhandler_get, xhandler_put, tlv_array) \
249 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
250         .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
251                  SNDRV_CTL_ELEM_ACCESS_READWRITE,\
252         .tlv.p = (tlv_array), \
253         .info = snd_soc_info_volsw_range, \
254         .get = xhandler_get, .put = xhandler_put, \
255         .private_value = (unsigned long)&(struct soc_mixer_control) \
256                 {.reg = xreg, .rreg = xreg, .shift = xshift, \
257                  .rshift = xshift, .min = xmin, .max = xmax, \
258                  .platform_max = xmax, .invert = xinvert} }
259 #define SOC_DOUBLE_EXT_TLV(xname, xreg, shift_left, shift_right, xmax, xinvert,\
260          xhandler_get, xhandler_put, tlv_array) \
261 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
262         .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \
263                  SNDRV_CTL_ELEM_ACCESS_READWRITE, \
264         .tlv.p = (tlv_array), \
265         .info = snd_soc_info_volsw, \
266         .get = xhandler_get, .put = xhandler_put, \
267         .private_value = SOC_DOUBLE_VALUE(xreg, shift_left, shift_right, \
268                                           xmax, xinvert, 0) }
269 #define SOC_DOUBLE_R_EXT_TLV(xname, reg_left, reg_right, xshift, xmax, xinvert,\
270          xhandler_get, xhandler_put, tlv_array) \
271 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
272         .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \
273                  SNDRV_CTL_ELEM_ACCESS_READWRITE, \
274         .tlv.p = (tlv_array), \
275         .info = snd_soc_info_volsw, \
276         .get = xhandler_get, .put = xhandler_put, \
277         .private_value = SOC_DOUBLE_R_VALUE(reg_left, reg_right, xshift, \
278                                             xmax, xinvert) }
279 #define SOC_SINGLE_BOOL_EXT(xname, xdata, xhandler_get, xhandler_put) \
280 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
281         .info = snd_soc_info_bool_ext, \
282         .get = xhandler_get, .put = xhandler_put, \
283         .private_value = xdata }
284 #define SOC_ENUM_EXT(xname, xenum, xhandler_get, xhandler_put) \
285 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
286         .info = snd_soc_info_enum_double, \
287         .get = xhandler_get, .put = xhandler_put, \
288         .private_value = (unsigned long)&xenum }
289 #define SOC_VALUE_ENUM_EXT(xname, xenum, xhandler_get, xhandler_put) \
290         SOC_ENUM_EXT(xname, xenum, xhandler_get, xhandler_put)
291
292 #define SND_SOC_BYTES(xname, xbase, xregs)                    \
293 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname,   \
294         .info = snd_soc_bytes_info, .get = snd_soc_bytes_get, \
295         .put = snd_soc_bytes_put, .private_value =            \
296                 ((unsigned long)&(struct soc_bytes)           \
297                 {.base = xbase, .num_regs = xregs }) }
298
299 #define SND_SOC_BYTES_MASK(xname, xbase, xregs, xmask)        \
300 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname,   \
301         .info = snd_soc_bytes_info, .get = snd_soc_bytes_get, \
302         .put = snd_soc_bytes_put, .private_value =            \
303                 ((unsigned long)&(struct soc_bytes)           \
304                 {.base = xbase, .num_regs = xregs,            \
305                  .mask = xmask }) }
306
307 #define SND_SOC_BYTES_EXT(xname, xcount, xhandler_get, xhandler_put) \
308 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
309         .info = snd_soc_bytes_info_ext, \
310         .get = xhandler_get, .put = xhandler_put, \
311         .private_value = (unsigned long)&(struct soc_bytes_ext) \
312                 {.max = xcount} }
313 #define SND_SOC_BYTES_TLV(xname, xcount, xhandler_get, xhandler_put) \
314 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
315         .access = SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE | \
316                   SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK, \
317         .tlv.c = (snd_soc_bytes_tlv_callback), \
318         .info = snd_soc_bytes_info_ext, \
319         .private_value = (unsigned long)&(struct soc_bytes_ext) \
320                 {.max = xcount, .get = xhandler_get, .put = xhandler_put, } }
321 #define SOC_SINGLE_XR_SX(xname, xregbase, xregcount, xnbits, \
322                 xmin, xmax, xinvert) \
323 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
324         .info = snd_soc_info_xr_sx, .get = snd_soc_get_xr_sx, \
325         .put = snd_soc_put_xr_sx, \
326         .private_value = (unsigned long)&(struct soc_mreg_control) \
327                 {.regbase = xregbase, .regcount = xregcount, .nbits = xnbits, \
328                 .invert = xinvert, .min = xmin, .max = xmax} }
329
330 #define SOC_SINGLE_STROBE(xname, xreg, xshift, xinvert) \
331         SOC_SINGLE_EXT(xname, xreg, xshift, 1, xinvert, \
332                 snd_soc_get_strobe, snd_soc_put_strobe)
333
334 /*
335  * Simplified versions of above macros, declaring a struct and calculating
336  * ARRAY_SIZE internally
337  */
338 #define SOC_ENUM_DOUBLE_DECL(name, xreg, xshift_l, xshift_r, xtexts) \
339         const struct soc_enum name = SOC_ENUM_DOUBLE(xreg, xshift_l, xshift_r, \
340                                                 ARRAY_SIZE(xtexts), xtexts)
341 #define SOC_ENUM_SINGLE_DECL(name, xreg, xshift, xtexts) \
342         SOC_ENUM_DOUBLE_DECL(name, xreg, xshift, xshift, xtexts)
343 #define SOC_ENUM_SINGLE_EXT_DECL(name, xtexts) \
344         const struct soc_enum name = SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(xtexts), xtexts)
345 #define SOC_VALUE_ENUM_DOUBLE_DECL(name, xreg, xshift_l, xshift_r, xmask, xtexts, xvalues) \
346         const struct soc_enum name = SOC_VALUE_ENUM_DOUBLE(xreg, xshift_l, xshift_r, xmask, \
347                                                         ARRAY_SIZE(xtexts), xtexts, xvalues)
348 #define SOC_VALUE_ENUM_SINGLE_DECL(name, xreg, xshift, xmask, xtexts, xvalues) \
349         SOC_VALUE_ENUM_DOUBLE_DECL(name, xreg, xshift, xshift, xmask, xtexts, xvalues)
350
351 #define SOC_VALUE_ENUM_SINGLE_AUTODISABLE_DECL(name, xreg, xshift, xmask, xtexts, xvalues) \
352         const struct soc_enum name = SOC_VALUE_ENUM_SINGLE_AUTODISABLE(xreg, \
353                 xshift, xmask, ARRAY_SIZE(xtexts), xtexts, xvalues)
354
355 #define SOC_ENUM_SINGLE_VIRT_DECL(name, xtexts) \
356         const struct soc_enum name = SOC_ENUM_SINGLE_VIRT(ARRAY_SIZE(xtexts), xtexts)
357
358 /*
359  * Component probe and remove ordering levels for components with runtime
360  * dependencies.
361  */
362 #define SND_SOC_COMP_ORDER_FIRST                -2
363 #define SND_SOC_COMP_ORDER_EARLY                -1
364 #define SND_SOC_COMP_ORDER_NORMAL               0
365 #define SND_SOC_COMP_ORDER_LATE         1
366 #define SND_SOC_COMP_ORDER_LAST         2
367
368 /*
369  * Bias levels
370  *
371  * @ON:      Bias is fully on for audio playback and capture operations.
372  * @PREPARE: Prepare for audio operations. Called before DAPM switching for
373  *           stream start and stop operations.
374  * @STANDBY: Low power standby state when no playback/capture operations are
375  *           in progress. NOTE: The transition time between STANDBY and ON
376  *           should be as fast as possible and no longer than 10ms.
377  * @OFF:     Power Off. No restrictions on transition times.
378  */
379 enum snd_soc_bias_level {
380         SND_SOC_BIAS_OFF = 0,
381         SND_SOC_BIAS_STANDBY = 1,
382         SND_SOC_BIAS_PREPARE = 2,
383         SND_SOC_BIAS_ON = 3,
384 };
385
386 struct device_node;
387 struct snd_jack;
388 struct snd_soc_card;
389 struct snd_soc_pcm_stream;
390 struct snd_soc_ops;
391 struct snd_soc_pcm_runtime;
392 struct snd_soc_dai;
393 struct snd_soc_dai_driver;
394 struct snd_soc_platform;
395 struct snd_soc_dai_link;
396 struct snd_soc_platform_driver;
397 struct snd_soc_codec;
398 struct snd_soc_codec_driver;
399 struct snd_soc_component;
400 struct snd_soc_component_driver;
401 struct soc_enum;
402 struct snd_soc_jack;
403 struct snd_soc_jack_zone;
404 struct snd_soc_jack_pin;
405 #include <sound/soc-dapm.h>
406 #include <sound/soc-dpcm.h>
407
408 struct snd_soc_jack_gpio;
409
410 typedef int (*hw_write_t)(void *,const char* ,int);
411
412 enum snd_soc_pcm_subclass {
413         SND_SOC_PCM_CLASS_PCM   = 0,
414         SND_SOC_PCM_CLASS_BE    = 1,
415 };
416
417 enum snd_soc_card_subclass {
418         SND_SOC_CARD_CLASS_INIT         = 0,
419         SND_SOC_CARD_CLASS_RUNTIME      = 1,
420 };
421
422 int snd_soc_codec_set_sysclk(struct snd_soc_codec *codec, int clk_id,
423                              int source, unsigned int freq, int dir);
424 int snd_soc_codec_set_pll(struct snd_soc_codec *codec, int pll_id, int source,
425                           unsigned int freq_in, unsigned int freq_out);
426
427 int snd_soc_register_card(struct snd_soc_card *card);
428 int snd_soc_unregister_card(struct snd_soc_card *card);
429 int devm_snd_soc_register_card(struct device *dev, struct snd_soc_card *card);
430 #ifdef CONFIG_PM_SLEEP
431 int snd_soc_suspend(struct device *dev);
432 int snd_soc_resume(struct device *dev);
433 #else
434 static inline int snd_soc_suspend(struct device *dev)
435 {
436         return 0;
437 }
438
439 static inline int snd_soc_resume(struct device *dev)
440 {
441         return 0;
442 }
443 #endif
444 int snd_soc_poweroff(struct device *dev);
445 int snd_soc_register_platform(struct device *dev,
446                 const struct snd_soc_platform_driver *platform_drv);
447 int devm_snd_soc_register_platform(struct device *dev,
448                 const struct snd_soc_platform_driver *platform_drv);
449 void snd_soc_unregister_platform(struct device *dev);
450 int snd_soc_add_platform(struct device *dev, struct snd_soc_platform *platform,
451                 const struct snd_soc_platform_driver *platform_drv);
452 void snd_soc_remove_platform(struct snd_soc_platform *platform);
453 struct snd_soc_platform *snd_soc_lookup_platform(struct device *dev);
454 int snd_soc_register_codec(struct device *dev,
455                 const struct snd_soc_codec_driver *codec_drv,
456                 struct snd_soc_dai_driver *dai_drv, int num_dai);
457 void snd_soc_unregister_codec(struct device *dev);
458 int snd_soc_register_component(struct device *dev,
459                          const struct snd_soc_component_driver *cmpnt_drv,
460                          struct snd_soc_dai_driver *dai_drv, int num_dai);
461 int devm_snd_soc_register_component(struct device *dev,
462                          const struct snd_soc_component_driver *cmpnt_drv,
463                          struct snd_soc_dai_driver *dai_drv, int num_dai);
464 void snd_soc_unregister_component(struct device *dev);
465 int snd_soc_cache_init(struct snd_soc_codec *codec);
466 int snd_soc_cache_exit(struct snd_soc_codec *codec);
467
468 int snd_soc_platform_read(struct snd_soc_platform *platform,
469                                         unsigned int reg);
470 int snd_soc_platform_write(struct snd_soc_platform *platform,
471                                         unsigned int reg, unsigned int val);
472 int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num);
473 #ifdef CONFIG_SND_SOC_COMPRESS
474 int snd_soc_new_compress(struct snd_soc_pcm_runtime *rtd, int num);
475 #endif
476
477 struct snd_pcm_substream *snd_soc_get_dai_substream(struct snd_soc_card *card,
478                 const char *dai_link, int stream);
479 struct snd_soc_pcm_runtime *snd_soc_get_pcm_runtime(struct snd_soc_card *card,
480                 const char *dai_link);
481
482 bool snd_soc_runtime_ignore_pmdown_time(struct snd_soc_pcm_runtime *rtd);
483 void snd_soc_runtime_activate(struct snd_soc_pcm_runtime *rtd, int stream);
484 void snd_soc_runtime_deactivate(struct snd_soc_pcm_runtime *rtd, int stream);
485
486 int snd_soc_runtime_set_dai_fmt(struct snd_soc_pcm_runtime *rtd,
487         unsigned int dai_fmt);
488
489 /* Utility functions to get clock rates from various things */
490 int snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots);
491 int snd_soc_params_to_frame_size(struct snd_pcm_hw_params *params);
492 int snd_soc_calc_bclk(int fs, int sample_size, int channels, int tdm_slots);
493 int snd_soc_params_to_bclk(struct snd_pcm_hw_params *parms);
494
495 /* set runtime hw params */
496 int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream,
497         const struct snd_pcm_hardware *hw);
498
499 int snd_soc_platform_trigger(struct snd_pcm_substream *substream,
500                 int cmd, struct snd_soc_platform *platform);
501
502 int soc_dai_hw_params(struct snd_pcm_substream *substream,
503                       struct snd_pcm_hw_params *params,
504                       struct snd_soc_dai *dai);
505
506 /* Jack reporting */
507 int snd_soc_card_jack_new(struct snd_soc_card *card, const char *id, int type,
508         struct snd_soc_jack *jack, struct snd_soc_jack_pin *pins,
509         unsigned int num_pins);
510
511 void snd_soc_jack_report(struct snd_soc_jack *jack, int status, int mask);
512 int snd_soc_jack_add_pins(struct snd_soc_jack *jack, int count,
513                           struct snd_soc_jack_pin *pins);
514 void snd_soc_jack_notifier_register(struct snd_soc_jack *jack,
515                                     struct notifier_block *nb);
516 void snd_soc_jack_notifier_unregister(struct snd_soc_jack *jack,
517                                       struct notifier_block *nb);
518 int snd_soc_jack_add_zones(struct snd_soc_jack *jack, int count,
519                           struct snd_soc_jack_zone *zones);
520 int snd_soc_jack_get_type(struct snd_soc_jack *jack, int micbias_voltage);
521 #ifdef CONFIG_GPIOLIB
522 int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count,
523                         struct snd_soc_jack_gpio *gpios);
524 int snd_soc_jack_add_gpiods(struct device *gpiod_dev,
525                             struct snd_soc_jack *jack,
526                             int count, struct snd_soc_jack_gpio *gpios);
527 void snd_soc_jack_free_gpios(struct snd_soc_jack *jack, int count,
528                         struct snd_soc_jack_gpio *gpios);
529 #else
530 static inline int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count,
531                                          struct snd_soc_jack_gpio *gpios)
532 {
533         return 0;
534 }
535
536 static inline int snd_soc_jack_add_gpiods(struct device *gpiod_dev,
537                                           struct snd_soc_jack *jack,
538                                           int count,
539                                           struct snd_soc_jack_gpio *gpios)
540 {
541         return 0;
542 }
543
544 static inline void snd_soc_jack_free_gpios(struct snd_soc_jack *jack, int count,
545                                            struct snd_soc_jack_gpio *gpios)
546 {
547 }
548 #endif
549
550 /* codec register bit access */
551 int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned int reg,
552                                 unsigned int mask, unsigned int value);
553 int snd_soc_update_bits_locked(struct snd_soc_codec *codec,
554                                unsigned int reg, unsigned int mask,
555                                unsigned int value);
556 int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned int reg,
557                                 unsigned int mask, unsigned int value);
558
559 #ifdef CONFIG_SND_SOC_AC97_BUS
560 struct snd_ac97 *snd_soc_alloc_ac97_codec(struct snd_soc_codec *codec);
561 struct snd_ac97 *snd_soc_new_ac97_codec(struct snd_soc_codec *codec,
562         unsigned int id, unsigned int id_mask);
563 void snd_soc_free_ac97_codec(struct snd_ac97 *ac97);
564
565 int snd_soc_set_ac97_ops(struct snd_ac97_bus_ops *ops);
566 int snd_soc_set_ac97_ops_of_reset(struct snd_ac97_bus_ops *ops,
567                 struct platform_device *pdev);
568
569 extern struct snd_ac97_bus_ops *soc_ac97_ops;
570 #else
571 static inline int snd_soc_set_ac97_ops_of_reset(struct snd_ac97_bus_ops *ops,
572         struct platform_device *pdev)
573 {
574         return 0;
575 }
576
577 static inline int snd_soc_set_ac97_ops(struct snd_ac97_bus_ops *ops)
578 {
579         return 0;
580 }
581 #endif
582
583 /*
584  *Controls
585  */
586 struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template,
587                                   void *data, const char *long_name,
588                                   const char *prefix);
589 struct snd_kcontrol *snd_soc_card_get_kcontrol(struct snd_soc_card *soc_card,
590                                                const char *name);
591 int snd_soc_add_component_controls(struct snd_soc_component *component,
592         const struct snd_kcontrol_new *controls, unsigned int num_controls);
593 int snd_soc_add_codec_controls(struct snd_soc_codec *codec,
594         const struct snd_kcontrol_new *controls, unsigned int num_controls);
595 int snd_soc_add_platform_controls(struct snd_soc_platform *platform,
596         const struct snd_kcontrol_new *controls, unsigned int num_controls);
597 int snd_soc_add_card_controls(struct snd_soc_card *soc_card,
598         const struct snd_kcontrol_new *controls, int num_controls);
599 int snd_soc_add_dai_controls(struct snd_soc_dai *dai,
600         const struct snd_kcontrol_new *controls, int num_controls);
601 int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol,
602         struct snd_ctl_elem_info *uinfo);
603 int snd_soc_get_enum_double(struct snd_kcontrol *kcontrol,
604         struct snd_ctl_elem_value *ucontrol);
605 int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol,
606         struct snd_ctl_elem_value *ucontrol);
607 int snd_soc_info_volsw(struct snd_kcontrol *kcontrol,
608         struct snd_ctl_elem_info *uinfo);
609 int snd_soc_info_volsw_sx(struct snd_kcontrol *kcontrol,
610                           struct snd_ctl_elem_info *uinfo);
611 #define snd_soc_info_bool_ext           snd_ctl_boolean_mono_info
612 int snd_soc_get_volsw(struct snd_kcontrol *kcontrol,
613         struct snd_ctl_elem_value *ucontrol);
614 int snd_soc_put_volsw(struct snd_kcontrol *kcontrol,
615         struct snd_ctl_elem_value *ucontrol);
616 #define snd_soc_get_volsw_2r snd_soc_get_volsw
617 #define snd_soc_put_volsw_2r snd_soc_put_volsw
618 int snd_soc_get_volsw_sx(struct snd_kcontrol *kcontrol,
619         struct snd_ctl_elem_value *ucontrol);
620 int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol,
621         struct snd_ctl_elem_value *ucontrol);
622 int snd_soc_info_volsw_range(struct snd_kcontrol *kcontrol,
623         struct snd_ctl_elem_info *uinfo);
624 int snd_soc_put_volsw_range(struct snd_kcontrol *kcontrol,
625         struct snd_ctl_elem_value *ucontrol);
626 int snd_soc_get_volsw_range(struct snd_kcontrol *kcontrol,
627         struct snd_ctl_elem_value *ucontrol);
628 int snd_soc_limit_volume(struct snd_soc_card *card,
629         const char *name, int max);
630 int snd_soc_bytes_info(struct snd_kcontrol *kcontrol,
631                        struct snd_ctl_elem_info *uinfo);
632 int snd_soc_bytes_get(struct snd_kcontrol *kcontrol,
633                       struct snd_ctl_elem_value *ucontrol);
634 int snd_soc_bytes_put(struct snd_kcontrol *kcontrol,
635                       struct snd_ctl_elem_value *ucontrol);
636 int snd_soc_bytes_info_ext(struct snd_kcontrol *kcontrol,
637         struct snd_ctl_elem_info *ucontrol);
638 int snd_soc_bytes_tlv_callback(struct snd_kcontrol *kcontrol, int op_flag,
639         unsigned int size, unsigned int __user *tlv);
640 int snd_soc_info_xr_sx(struct snd_kcontrol *kcontrol,
641         struct snd_ctl_elem_info *uinfo);
642 int snd_soc_get_xr_sx(struct snd_kcontrol *kcontrol,
643         struct snd_ctl_elem_value *ucontrol);
644 int snd_soc_put_xr_sx(struct snd_kcontrol *kcontrol,
645         struct snd_ctl_elem_value *ucontrol);
646 int snd_soc_get_strobe(struct snd_kcontrol *kcontrol,
647         struct snd_ctl_elem_value *ucontrol);
648 int snd_soc_put_strobe(struct snd_kcontrol *kcontrol,
649         struct snd_ctl_elem_value *ucontrol);
650
651 /**
652  * struct snd_soc_jack_pin - Describes a pin to update based on jack detection
653  *
654  * @pin:    name of the pin to update
655  * @mask:   bits to check for in reported jack status
656  * @invert: if non-zero then pin is enabled when status is not reported
657  * @list:   internal list entry
658  */
659 struct snd_soc_jack_pin {
660         struct list_head list;
661         const char *pin;
662         int mask;
663         bool invert;
664 };
665
666 /**
667  * struct snd_soc_jack_zone - Describes voltage zones of jack detection
668  *
669  * @min_mv: start voltage in mv
670  * @max_mv: end voltage in mv
671  * @jack_type: type of jack that is expected for this voltage
672  * @debounce_time: debounce_time for jack, codec driver should wait for this
673  *              duration before reading the adc for voltages
674  * @list:   internal list entry
675  */
676 struct snd_soc_jack_zone {
677         unsigned int min_mv;
678         unsigned int max_mv;
679         unsigned int jack_type;
680         unsigned int debounce_time;
681         struct list_head list;
682 };
683
684 /**
685  * struct snd_soc_jack_gpio - Describes a gpio pin for jack detection
686  *
687  * @gpio:         legacy gpio number
688  * @idx:          gpio descriptor index within the function of the GPIO
689  *                consumer device
690  * @gpiod_dev:    GPIO consumer device
691  * @name:         gpio name. Also as connection ID for the GPIO consumer
692  *                device function name lookup
693  * @report:       value to report when jack detected
694  * @invert:       report presence in low state
695  * @debounce_time: debounce time in ms
696  * @wake:         enable as wake source
697  * @jack_status_check: callback function which overrides the detection
698  *                     to provide more complex checks (eg, reading an
699  *                     ADC).
700  */
701 struct snd_soc_jack_gpio {
702         unsigned int gpio;
703         unsigned int idx;
704         struct device *gpiod_dev;
705         const char *name;
706         int report;
707         int invert;
708         int debounce_time;
709         bool wake;
710
711         /* private: */
712         struct snd_soc_jack *jack;
713         struct delayed_work work;
714         struct gpio_desc *desc;
715
716         void *data;
717         /* public: */
718         int (*jack_status_check)(void *data);
719 };
720
721 struct snd_soc_jack {
722         struct mutex mutex;
723         struct snd_jack *jack;
724         struct snd_soc_card *card;
725         struct list_head pins;
726         int status;
727         struct blocking_notifier_head notifier;
728         struct list_head jack_zones;
729 };
730
731 /* SoC PCM stream information */
732 struct snd_soc_pcm_stream {
733         const char *stream_name;
734         u64 formats;                    /* SNDRV_PCM_FMTBIT_* */
735         unsigned int rates;             /* SNDRV_PCM_RATE_* */
736         unsigned int rate_min;          /* min rate */
737         unsigned int rate_max;          /* max rate */
738         unsigned int channels_min;      /* min channels */
739         unsigned int channels_max;      /* max channels */
740         unsigned int sig_bits;          /* number of bits of content */
741 };
742
743 /* SoC audio ops */
744 struct snd_soc_ops {
745         int (*startup)(struct snd_pcm_substream *);
746         void (*shutdown)(struct snd_pcm_substream *);
747         int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *);
748         int (*hw_free)(struct snd_pcm_substream *);
749         int (*prepare)(struct snd_pcm_substream *);
750         int (*trigger)(struct snd_pcm_substream *, int);
751 };
752
753 struct snd_soc_compr_ops {
754         int (*startup)(struct snd_compr_stream *);
755         void (*shutdown)(struct snd_compr_stream *);
756         int (*set_params)(struct snd_compr_stream *);
757         int (*trigger)(struct snd_compr_stream *);
758 };
759
760 /* component interface */
761 struct snd_soc_component_driver {
762         const char *name;
763
764         /* Default control and setup, added after probe() is run */
765         const struct snd_kcontrol_new *controls;
766         unsigned int num_controls;
767         const struct snd_soc_dapm_widget *dapm_widgets;
768         unsigned int num_dapm_widgets;
769         const struct snd_soc_dapm_route *dapm_routes;
770         unsigned int num_dapm_routes;
771
772         int (*probe)(struct snd_soc_component *);
773         void (*remove)(struct snd_soc_component *);
774
775         /* DT */
776         int (*of_xlate_dai_name)(struct snd_soc_component *component,
777                                  struct of_phandle_args *args,
778                                  const char **dai_name);
779         void (*seq_notifier)(struct snd_soc_component *, enum snd_soc_dapm_type,
780                 int subseq);
781         int (*stream_event)(struct snd_soc_component *, int event);
782
783         /* probe ordering - for components with runtime dependencies */
784         int probe_order;
785         int remove_order;
786 };
787
788 struct snd_soc_component {
789         const char *name;
790         int id;
791         const char *name_prefix;
792         struct device *dev;
793         struct snd_soc_card *card;
794
795         unsigned int active;
796
797         unsigned int ignore_pmdown_time:1; /* pmdown_time is ignored at stop */
798         unsigned int registered_as_component:1;
799
800         struct list_head list;
801
802         struct snd_soc_dai_driver *dai_drv;
803         int num_dai;
804
805         const struct snd_soc_component_driver *driver;
806
807         struct list_head dai_list;
808
809         int (*read)(struct snd_soc_component *, unsigned int, unsigned int *);
810         int (*write)(struct snd_soc_component *, unsigned int, unsigned int);
811
812         struct regmap *regmap;
813         int val_bytes;
814
815         struct mutex io_mutex;
816
817         /* attached dynamic objects */
818         struct list_head dobj_list;
819
820 #ifdef CONFIG_DEBUG_FS
821         struct dentry *debugfs_root;
822 #endif
823
824         /*
825         * DO NOT use any of the fields below in drivers, they are temporary and
826         * are going to be removed again soon. If you use them in driver code the
827         * driver will be marked as BROKEN when these fields are removed.
828         */
829
830         /* Don't use these, use snd_soc_component_get_dapm() */
831         struct snd_soc_dapm_context dapm;
832
833         const struct snd_kcontrol_new *controls;
834         unsigned int num_controls;
835         const struct snd_soc_dapm_widget *dapm_widgets;
836         unsigned int num_dapm_widgets;
837         const struct snd_soc_dapm_route *dapm_routes;
838         unsigned int num_dapm_routes;
839         struct snd_soc_codec *codec;
840
841         int (*probe)(struct snd_soc_component *);
842         void (*remove)(struct snd_soc_component *);
843
844 #ifdef CONFIG_DEBUG_FS
845         void (*init_debugfs)(struct snd_soc_component *component);
846         const char *debugfs_prefix;
847 #endif
848 };
849
850 /* SoC Audio Codec device */
851 struct snd_soc_codec {
852         struct device *dev;
853         const struct snd_soc_codec_driver *driver;
854
855         struct list_head list;
856         struct list_head card_list;
857
858         /* runtime */
859         unsigned int cache_bypass:1; /* Suppress access to the cache */
860         unsigned int suspended:1; /* Codec is in suspend PM state */
861         unsigned int cache_init:1; /* codec cache has been initialized */
862
863         /* codec IO */
864         void *control_data; /* codec control (i2c/3wire) data */
865         hw_write_t hw_write;
866         void *reg_cache;
867
868         /* component */
869         struct snd_soc_component component;
870
871 #ifdef CONFIG_DEBUG_FS
872         struct dentry *debugfs_reg;
873 #endif
874 };
875
876 /* codec driver */
877 struct snd_soc_codec_driver {
878
879         /* driver ops */
880         int (*probe)(struct snd_soc_codec *);
881         int (*remove)(struct snd_soc_codec *);
882         int (*suspend)(struct snd_soc_codec *);
883         int (*resume)(struct snd_soc_codec *);
884         struct snd_soc_component_driver component_driver;
885
886         /* Default control and setup, added after probe() is run */
887         const struct snd_kcontrol_new *controls;
888         int num_controls;
889         const struct snd_soc_dapm_widget *dapm_widgets;
890         int num_dapm_widgets;
891         const struct snd_soc_dapm_route *dapm_routes;
892         int num_dapm_routes;
893
894         /* codec wide operations */
895         int (*set_sysclk)(struct snd_soc_codec *codec,
896                           int clk_id, int source, unsigned int freq, int dir);
897         int (*set_pll)(struct snd_soc_codec *codec, int pll_id, int source,
898                 unsigned int freq_in, unsigned int freq_out);
899
900         /* codec IO */
901         struct regmap *(*get_regmap)(struct device *);
902         unsigned int (*read)(struct snd_soc_codec *, unsigned int);
903         int (*write)(struct snd_soc_codec *, unsigned int, unsigned int);
904         unsigned int reg_cache_size;
905         short reg_cache_step;
906         short reg_word_size;
907         const void *reg_cache_default;
908
909         /* codec bias level */
910         int (*set_bias_level)(struct snd_soc_codec *,
911                               enum snd_soc_bias_level level);
912         bool idle_bias_off;
913         bool suspend_bias_off;
914
915         void (*seq_notifier)(struct snd_soc_dapm_context *,
916                              enum snd_soc_dapm_type, int);
917
918         bool ignore_pmdown_time;  /* Doesn't benefit from pmdown delay */
919 };
920
921 /* SoC platform interface */
922 struct snd_soc_platform_driver {
923
924         int (*probe)(struct snd_soc_platform *);
925         int (*remove)(struct snd_soc_platform *);
926         struct snd_soc_component_driver component_driver;
927
928         /* pcm creation and destruction */
929         int (*pcm_new)(struct snd_soc_pcm_runtime *);
930         void (*pcm_free)(struct snd_pcm *);
931
932         /*
933          * For platform caused delay reporting.
934          * Optional.
935          */
936         snd_pcm_sframes_t (*delay)(struct snd_pcm_substream *,
937                 struct snd_soc_dai *);
938
939         /* platform stream pcm ops */
940         const struct snd_pcm_ops *ops;
941
942         /* platform stream compress ops */
943         const struct snd_compr_ops *compr_ops;
944
945         int (*bespoke_trigger)(struct snd_pcm_substream *, int);
946 };
947
948 struct snd_soc_dai_link_component {
949         const char *name;
950         struct device_node *of_node;
951         const char *dai_name;
952 };
953
954 struct snd_soc_platform {
955         struct device *dev;
956         const struct snd_soc_platform_driver *driver;
957
958         struct list_head list;
959
960         struct snd_soc_component component;
961 };
962
963 struct snd_soc_dai_link {
964         /* config - must be set by machine driver */
965         const char *name;                       /* Codec name */
966         const char *stream_name;                /* Stream name */
967         /*
968          * You MAY specify the link's CPU-side device, either by device name,
969          * or by DT/OF node, but not both. If this information is omitted,
970          * the CPU-side DAI is matched using .cpu_dai_name only, which hence
971          * must be globally unique. These fields are currently typically used
972          * only for codec to codec links, or systems using device tree.
973          */
974         const char *cpu_name;
975         struct device_node *cpu_of_node;
976         /*
977          * You MAY specify the DAI name of the CPU DAI. If this information is
978          * omitted, the CPU-side DAI is matched using .cpu_name/.cpu_of_node
979          * only, which only works well when that device exposes a single DAI.
980          */
981         const char *cpu_dai_name;
982         /*
983          * You MUST specify the link's codec, either by device name, or by
984          * DT/OF node, but not both.
985          */
986         const char *codec_name;
987         struct device_node *codec_of_node;
988         /* You MUST specify the DAI name within the codec */
989         const char *codec_dai_name;
990
991         struct snd_soc_dai_link_component *codecs;
992         unsigned int num_codecs;
993
994         /*
995          * You MAY specify the link's platform/PCM/DMA driver, either by
996          * device name, or by DT/OF node, but not both. Some forms of link
997          * do not need a platform.
998          */
999         const char *platform_name;
1000         struct device_node *platform_of_node;
1001         int be_id;      /* optional ID for machine driver BE identification */
1002
1003         const struct snd_soc_pcm_stream *params;
1004         unsigned int num_params;
1005
1006         unsigned int dai_fmt;           /* format to set on init */
1007
1008         enum snd_soc_dpcm_trigger trigger[2]; /* trigger type for DPCM */
1009
1010         /* codec/machine specific init - e.g. add machine controls */
1011         int (*init)(struct snd_soc_pcm_runtime *rtd);
1012
1013         /* optional hw_params re-writing for BE and FE sync */
1014         int (*be_hw_params_fixup)(struct snd_soc_pcm_runtime *rtd,
1015                         struct snd_pcm_hw_params *params);
1016
1017         /* machine stream operations */
1018         const struct snd_soc_ops *ops;
1019         const struct snd_soc_compr_ops *compr_ops;
1020
1021         /* For unidirectional dai links */
1022         bool playback_only;
1023         bool capture_only;
1024
1025         /* Mark this pcm with non atomic ops */
1026         bool nonatomic;
1027
1028         /* Keep DAI active over suspend */
1029         unsigned int ignore_suspend:1;
1030
1031         /* Symmetry requirements */
1032         unsigned int symmetric_rates:1;
1033         unsigned int symmetric_channels:1;
1034         unsigned int symmetric_samplebits:1;
1035
1036         /* Do not create a PCM for this DAI link (Backend link) */
1037         unsigned int no_pcm:1;
1038
1039         /* This DAI link can route to other DAI links at runtime (Frontend)*/
1040         unsigned int dynamic:1;
1041
1042         /* DPCM capture and Playback support */
1043         unsigned int dpcm_capture:1;
1044         unsigned int dpcm_playback:1;
1045
1046         /* DPCM used FE & BE merged format */
1047         unsigned int dpcm_merged_format:1;
1048
1049         /* pmdown_time is ignored at stop */
1050         unsigned int ignore_pmdown_time:1;
1051 };
1052
1053 struct snd_soc_codec_conf {
1054         /*
1055          * specify device either by device name, or by
1056          * DT/OF node, but not both.
1057          */
1058         const char *dev_name;
1059         struct device_node *of_node;
1060
1061         /*
1062          * optional map of kcontrol, widget and path name prefixes that are
1063          * associated per device
1064          */
1065         const char *name_prefix;
1066 };
1067
1068 struct snd_soc_aux_dev {
1069         const char *name;               /* Codec name */
1070
1071         /*
1072          * specify multi-codec either by device name, or by
1073          * DT/OF node, but not both.
1074          */
1075         const char *codec_name;
1076         struct device_node *codec_of_node;
1077
1078         /* codec/machine specific init - e.g. add machine controls */
1079         int (*init)(struct snd_soc_component *component);
1080 };
1081
1082 /* SoC card */
1083 struct snd_soc_card {
1084         const char *name;
1085         const char *long_name;
1086         const char *driver_name;
1087         struct device *dev;
1088         struct snd_card *snd_card;
1089         struct module *owner;
1090
1091         struct mutex mutex;
1092         struct mutex dapm_mutex;
1093
1094         bool instantiated;
1095
1096         int (*probe)(struct snd_soc_card *card);
1097         int (*late_probe)(struct snd_soc_card *card);
1098         int (*remove)(struct snd_soc_card *card);
1099
1100         /* the pre and post PM functions are used to do any PM work before and
1101          * after the codec and DAI's do any PM work. */
1102         int (*suspend_pre)(struct snd_soc_card *card);
1103         int (*suspend_post)(struct snd_soc_card *card);
1104         int (*resume_pre)(struct snd_soc_card *card);
1105         int (*resume_post)(struct snd_soc_card *card);
1106
1107         /* callbacks */
1108         int (*set_bias_level)(struct snd_soc_card *,
1109                               struct snd_soc_dapm_context *dapm,
1110                               enum snd_soc_bias_level level);
1111         int (*set_bias_level_post)(struct snd_soc_card *,
1112                                    struct snd_soc_dapm_context *dapm,
1113                                    enum snd_soc_bias_level level);
1114
1115         long pmdown_time;
1116
1117         /* CPU <--> Codec DAI links  */
1118         struct snd_soc_dai_link *dai_link;
1119         int num_links;
1120         struct snd_soc_pcm_runtime *rtd;
1121         int num_rtd;
1122
1123         /* optional codec specific configuration */
1124         struct snd_soc_codec_conf *codec_conf;
1125         int num_configs;
1126
1127         /*
1128          * optional auxiliary devices such as amplifiers or codecs with DAI
1129          * link unused
1130          */
1131         struct snd_soc_aux_dev *aux_dev;
1132         int num_aux_devs;
1133         struct snd_soc_pcm_runtime *rtd_aux;
1134         int num_aux_rtd;
1135
1136         const struct snd_kcontrol_new *controls;
1137         int num_controls;
1138
1139         /*
1140          * Card-specific routes and widgets.
1141          * Note: of_dapm_xxx for Device Tree; Otherwise for driver build-in.
1142          */
1143         const struct snd_soc_dapm_widget *dapm_widgets;
1144         int num_dapm_widgets;
1145         const struct snd_soc_dapm_route *dapm_routes;
1146         int num_dapm_routes;
1147         const struct snd_soc_dapm_widget *of_dapm_widgets;
1148         int num_of_dapm_widgets;
1149         const struct snd_soc_dapm_route *of_dapm_routes;
1150         int num_of_dapm_routes;
1151         bool fully_routed;
1152
1153         struct work_struct deferred_resume_work;
1154
1155         /* lists of probed devices belonging to this card */
1156         struct list_head codec_dev_list;
1157
1158         struct list_head widgets;
1159         struct list_head paths;
1160         struct list_head dapm_list;
1161         struct list_head dapm_dirty;
1162
1163         /* attached dynamic objects */
1164         struct list_head dobj_list;
1165
1166         /* Generic DAPM context for the card */
1167         struct snd_soc_dapm_context dapm;
1168         struct snd_soc_dapm_stats dapm_stats;
1169         struct snd_soc_dapm_update *update;
1170
1171 #ifdef CONFIG_DEBUG_FS
1172         struct dentry *debugfs_card_root;
1173         struct dentry *debugfs_pop_time;
1174 #endif
1175         u32 pop_time;
1176
1177         void *drvdata;
1178 };
1179
1180 /* SoC machine DAI configuration, glues a codec and cpu DAI together */
1181 struct snd_soc_pcm_runtime {
1182         struct device *dev;
1183         struct snd_soc_card *card;
1184         struct snd_soc_dai_link *dai_link;
1185         struct mutex pcm_mutex;
1186         enum snd_soc_pcm_subclass pcm_subclass;
1187         struct snd_pcm_ops ops;
1188
1189         unsigned int dev_registered:1;
1190
1191         /* Dynamic PCM BE runtime data */
1192         struct snd_soc_dpcm_runtime dpcm[2];
1193         int fe_compr;
1194
1195         long pmdown_time;
1196         unsigned char pop_wait:1;
1197
1198         /* runtime devices */
1199         struct snd_pcm *pcm;
1200         struct snd_compr *compr;
1201         struct snd_soc_codec *codec;
1202         struct snd_soc_platform *platform;
1203         struct snd_soc_dai *codec_dai;
1204         struct snd_soc_dai *cpu_dai;
1205         struct snd_soc_component *component; /* Only valid for AUX dev rtds */
1206
1207         struct snd_soc_dai **codec_dais;
1208         unsigned int num_codecs;
1209
1210         struct delayed_work delayed_work;
1211 #ifdef CONFIG_DEBUG_FS
1212         struct dentry *debugfs_dpcm_root;
1213         struct dentry *debugfs_dpcm_state;
1214 #endif
1215 };
1216
1217 /* mixer control */
1218 struct soc_mixer_control {
1219         int min, max, platform_max;
1220         int reg, rreg;
1221         unsigned int shift, rshift;
1222         unsigned int sign_bit;
1223         unsigned int invert:1;
1224         unsigned int autodisable:1;
1225         struct snd_soc_dobj dobj;
1226 };
1227
1228 struct soc_bytes {
1229         int base;
1230         int num_regs;
1231         u32 mask;
1232 };
1233
1234 struct soc_bytes_ext {
1235         int max;
1236         struct snd_soc_dobj dobj;
1237
1238         /* used for TLV byte control */
1239         int (*get)(unsigned int __user *bytes, unsigned int size);
1240         int (*put)(const unsigned int __user *bytes, unsigned int size);
1241 };
1242
1243 /* multi register control */
1244 struct soc_mreg_control {
1245         long min, max;
1246         unsigned int regbase, regcount, nbits, invert;
1247 };
1248
1249 /* enumerated kcontrol */
1250 struct soc_enum {
1251         int reg;
1252         unsigned char shift_l;
1253         unsigned char shift_r;
1254         unsigned int items;
1255         unsigned int mask;
1256         const char * const *texts;
1257         const unsigned int *values;
1258         unsigned int autodisable:1;
1259         struct snd_soc_dobj dobj;
1260 };
1261
1262 /**
1263  * snd_soc_component_to_codec() - Casts a component to the CODEC it is embedded in
1264  * @component: The component to cast to a CODEC
1265  *
1266  * This function must only be used on components that are known to be CODECs.
1267  * Otherwise the behavior is undefined.
1268  */
1269 static inline struct snd_soc_codec *snd_soc_component_to_codec(
1270         struct snd_soc_component *component)
1271 {
1272         return container_of(component, struct snd_soc_codec, component);
1273 }
1274
1275 /**
1276  * snd_soc_component_to_platform() - Casts a component to the platform it is embedded in
1277  * @component: The component to cast to a platform
1278  *
1279  * This function must only be used on components that are known to be platforms.
1280  * Otherwise the behavior is undefined.
1281  */
1282 static inline struct snd_soc_platform *snd_soc_component_to_platform(
1283         struct snd_soc_component *component)
1284 {
1285         return container_of(component, struct snd_soc_platform, component);
1286 }
1287
1288 /**
1289  * snd_soc_dapm_to_component() - Casts a DAPM context to the component it is
1290  *  embedded in
1291  * @dapm: The DAPM context to cast to the component
1292  *
1293  * This function must only be used on DAPM contexts that are known to be part of
1294  * a component (e.g. in a component driver). Otherwise the behavior is
1295  * undefined.
1296  */
1297 static inline struct snd_soc_component *snd_soc_dapm_to_component(
1298         struct snd_soc_dapm_context *dapm)
1299 {
1300         return container_of(dapm, struct snd_soc_component, dapm);
1301 }
1302
1303 /**
1304  * snd_soc_dapm_to_codec() - Casts a DAPM context to the CODEC it is embedded in
1305  * @dapm: The DAPM context to cast to the CODEC
1306  *
1307  * This function must only be used on DAPM contexts that are known to be part of
1308  * a CODEC (e.g. in a CODEC driver). Otherwise the behavior is undefined.
1309  */
1310 static inline struct snd_soc_codec *snd_soc_dapm_to_codec(
1311         struct snd_soc_dapm_context *dapm)
1312 {
1313         return snd_soc_component_to_codec(snd_soc_dapm_to_component(dapm));
1314 }
1315
1316 /**
1317  * snd_soc_dapm_to_platform() - Casts a DAPM context to the platform it is
1318  *  embedded in
1319  * @dapm: The DAPM context to cast to the platform.
1320  *
1321  * This function must only be used on DAPM contexts that are known to be part of
1322  * a platform (e.g. in a platform driver). Otherwise the behavior is undefined.
1323  */
1324 static inline struct snd_soc_platform *snd_soc_dapm_to_platform(
1325         struct snd_soc_dapm_context *dapm)
1326 {
1327         return snd_soc_component_to_platform(snd_soc_dapm_to_component(dapm));
1328 }
1329
1330 /**
1331  * snd_soc_component_get_dapm() - Returns the DAPM context associated with a
1332  *  component
1333  * @component: The component for which to get the DAPM context
1334  */
1335 static inline struct snd_soc_dapm_context *snd_soc_component_get_dapm(
1336         struct snd_soc_component *component)
1337 {
1338         return &component->dapm;
1339 }
1340
1341 /**
1342  * snd_soc_codec_get_dapm() - Returns the DAPM context for the CODEC
1343  * @codec: The CODEC for which to get the DAPM context
1344  *
1345  * Note: Use this function instead of directly accessing the CODEC's dapm field
1346  */
1347 static inline struct snd_soc_dapm_context *snd_soc_codec_get_dapm(
1348         struct snd_soc_codec *codec)
1349 {
1350         return snd_soc_component_get_dapm(&codec->component);
1351 }
1352
1353 /**
1354  * snd_soc_dapm_init_bias_level() - Initialize CODEC DAPM bias level
1355  * @codec: The CODEC for which to initialize the DAPM bias level
1356  * @level: The DAPM level to initialize to
1357  *
1358  * Initializes the CODEC DAPM bias level. See snd_soc_dapm_init_bias_level().
1359  */
1360 static inline void snd_soc_codec_init_bias_level(struct snd_soc_codec *codec,
1361         enum snd_soc_bias_level level)
1362 {
1363         snd_soc_dapm_init_bias_level(snd_soc_codec_get_dapm(codec), level);
1364 }
1365
1366 /**
1367  * snd_soc_dapm_get_bias_level() - Get current CODEC DAPM bias level
1368  * @codec: The CODEC for which to get the DAPM bias level
1369  *
1370  * Returns: The current DAPM bias level of the CODEC.
1371  */
1372 static inline enum snd_soc_bias_level snd_soc_codec_get_bias_level(
1373         struct snd_soc_codec *codec)
1374 {
1375         return snd_soc_dapm_get_bias_level(snd_soc_codec_get_dapm(codec));
1376 }
1377
1378 /**
1379  * snd_soc_codec_force_bias_level() - Set the CODEC DAPM bias level
1380  * @codec: The CODEC for which to set the level
1381  * @level: The level to set to
1382  *
1383  * Forces the CODEC bias level to a specific state. See
1384  * snd_soc_dapm_force_bias_level().
1385  */
1386 static inline int snd_soc_codec_force_bias_level(struct snd_soc_codec *codec,
1387         enum snd_soc_bias_level level)
1388 {
1389         return snd_soc_dapm_force_bias_level(snd_soc_codec_get_dapm(codec),
1390                 level);
1391 }
1392
1393 /**
1394  * snd_soc_dapm_kcontrol_codec() - Returns the codec associated to a kcontrol
1395  * @kcontrol: The kcontrol
1396  *
1397  * This function must only be used on DAPM contexts that are known to be part of
1398  * a CODEC (e.g. in a CODEC driver). Otherwise the behavior is undefined.
1399  */
1400 static inline struct snd_soc_codec *snd_soc_dapm_kcontrol_codec(
1401         struct snd_kcontrol *kcontrol)
1402 {
1403         return snd_soc_dapm_to_codec(snd_soc_dapm_kcontrol_dapm(kcontrol));
1404 }
1405
1406 /* codec IO */
1407 unsigned int snd_soc_read(struct snd_soc_codec *codec, unsigned int reg);
1408 int snd_soc_write(struct snd_soc_codec *codec, unsigned int reg,
1409         unsigned int val);
1410
1411 /**
1412  * snd_soc_cache_sync() - Sync the register cache with the hardware
1413  * @codec: CODEC to sync
1414  *
1415  * Note: This function will call regcache_sync()
1416  */
1417 static inline int snd_soc_cache_sync(struct snd_soc_codec *codec)
1418 {
1419         return regcache_sync(codec->component.regmap);
1420 }
1421
1422 /* component IO */
1423 int snd_soc_component_read(struct snd_soc_component *component,
1424         unsigned int reg, unsigned int *val);
1425 int snd_soc_component_write(struct snd_soc_component *component,
1426         unsigned int reg, unsigned int val);
1427 int snd_soc_component_update_bits(struct snd_soc_component *component,
1428         unsigned int reg, unsigned int mask, unsigned int val);
1429 int snd_soc_component_update_bits_async(struct snd_soc_component *component,
1430         unsigned int reg, unsigned int mask, unsigned int val);
1431 void snd_soc_component_async_complete(struct snd_soc_component *component);
1432 int snd_soc_component_test_bits(struct snd_soc_component *component,
1433         unsigned int reg, unsigned int mask, unsigned int value);
1434
1435 #ifdef CONFIG_REGMAP
1436
1437 void snd_soc_component_init_regmap(struct snd_soc_component *component,
1438         struct regmap *regmap);
1439 void snd_soc_component_exit_regmap(struct snd_soc_component *component);
1440
1441 /**
1442  * snd_soc_codec_init_regmap() - Initialize regmap instance for the CODEC
1443  * @codec: The CODEC for which to initialize the regmap instance
1444  * @regmap: The regmap instance that should be used by the CODEC
1445  *
1446  * This function allows deferred assignment of the regmap instance that is
1447  * associated with the CODEC. Only use this if the regmap instance is not yet
1448  * ready when the CODEC is registered. The function must also be called before
1449  * the first IO attempt of the CODEC.
1450  */
1451 static inline void snd_soc_codec_init_regmap(struct snd_soc_codec *codec,
1452         struct regmap *regmap)
1453 {
1454         snd_soc_component_init_regmap(&codec->component, regmap);
1455 }
1456
1457 /**
1458  * snd_soc_codec_exit_regmap() - De-initialize regmap instance for the CODEC
1459  * @codec: The CODEC for which to de-initialize the regmap instance
1460  *
1461  * Calls regmap_exit() on the regmap instance associated to the CODEC and
1462  * removes the regmap instance from the CODEC.
1463  *
1464  * This function should only be used if snd_soc_codec_init_regmap() was used to
1465  * initialize the regmap instance.
1466  */
1467 static inline void snd_soc_codec_exit_regmap(struct snd_soc_codec *codec)
1468 {
1469         snd_soc_component_exit_regmap(&codec->component);
1470 }
1471
1472 #endif
1473
1474 /* device driver data */
1475
1476 static inline void snd_soc_card_set_drvdata(struct snd_soc_card *card,
1477                 void *data)
1478 {
1479         card->drvdata = data;
1480 }
1481
1482 static inline void *snd_soc_card_get_drvdata(struct snd_soc_card *card)
1483 {
1484         return card->drvdata;
1485 }
1486
1487 static inline void snd_soc_component_set_drvdata(struct snd_soc_component *c,
1488                 void *data)
1489 {
1490         dev_set_drvdata(c->dev, data);
1491 }
1492
1493 static inline void *snd_soc_component_get_drvdata(struct snd_soc_component *c)
1494 {
1495         return dev_get_drvdata(c->dev);
1496 }
1497
1498 static inline void snd_soc_codec_set_drvdata(struct snd_soc_codec *codec,
1499                 void *data)
1500 {
1501         snd_soc_component_set_drvdata(&codec->component, data);
1502 }
1503
1504 static inline void *snd_soc_codec_get_drvdata(struct snd_soc_codec *codec)
1505 {
1506         return snd_soc_component_get_drvdata(&codec->component);
1507 }
1508
1509 static inline void snd_soc_platform_set_drvdata(struct snd_soc_platform *platform,
1510                 void *data)
1511 {
1512         snd_soc_component_set_drvdata(&platform->component, data);
1513 }
1514
1515 static inline void *snd_soc_platform_get_drvdata(struct snd_soc_platform *platform)
1516 {
1517         return snd_soc_component_get_drvdata(&platform->component);
1518 }
1519
1520 static inline void snd_soc_pcm_set_drvdata(struct snd_soc_pcm_runtime *rtd,
1521                 void *data)
1522 {
1523         dev_set_drvdata(rtd->dev, data);
1524 }
1525
1526 static inline void *snd_soc_pcm_get_drvdata(struct snd_soc_pcm_runtime *rtd)
1527 {
1528         return dev_get_drvdata(rtd->dev);
1529 }
1530
1531 static inline void snd_soc_initialize_card_lists(struct snd_soc_card *card)
1532 {
1533         INIT_LIST_HEAD(&card->codec_dev_list);
1534         INIT_LIST_HEAD(&card->widgets);
1535         INIT_LIST_HEAD(&card->paths);
1536         INIT_LIST_HEAD(&card->dapm_list);
1537 }
1538
1539 static inline bool snd_soc_volsw_is_stereo(struct soc_mixer_control *mc)
1540 {
1541         if (mc->reg == mc->rreg && mc->shift == mc->rshift)
1542                 return 0;
1543         /*
1544          * mc->reg == mc->rreg && mc->shift != mc->rshift, or
1545          * mc->reg != mc->rreg means that the control is
1546          * stereo (bits in one register or in two registers)
1547          */
1548         return 1;
1549 }
1550
1551 static inline unsigned int snd_soc_enum_val_to_item(struct soc_enum *e,
1552         unsigned int val)
1553 {
1554         unsigned int i;
1555
1556         if (!e->values)
1557                 return val;
1558
1559         for (i = 0; i < e->items; i++)
1560                 if (val == e->values[i])
1561                         return i;
1562
1563         return 0;
1564 }
1565
1566 static inline unsigned int snd_soc_enum_item_to_val(struct soc_enum *e,
1567         unsigned int item)
1568 {
1569         if (!e->values)
1570                 return item;
1571
1572         return e->values[item];
1573 }
1574
1575 static inline bool snd_soc_component_is_active(
1576         struct snd_soc_component *component)
1577 {
1578         return component->active != 0;
1579 }
1580
1581 static inline bool snd_soc_codec_is_active(struct snd_soc_codec *codec)
1582 {
1583         return snd_soc_component_is_active(&codec->component);
1584 }
1585
1586 /**
1587  * snd_soc_kcontrol_component() - Returns the component that registered the
1588  *  control
1589  * @kcontrol: The control for which to get the component
1590  *
1591  * Note: This function will work correctly if the control has been registered
1592  * for a component. Either with snd_soc_add_codec_controls() or
1593  * snd_soc_add_platform_controls() or via  table based setup for either a
1594  * CODEC, a platform or component driver. Otherwise the behavior is undefined.
1595  */
1596 static inline struct snd_soc_component *snd_soc_kcontrol_component(
1597         struct snd_kcontrol *kcontrol)
1598 {
1599         return snd_kcontrol_chip(kcontrol);
1600 }
1601
1602 /**
1603  * snd_soc_kcontrol_codec() - Returns the CODEC that registered the control
1604  * @kcontrol: The control for which to get the CODEC
1605  *
1606  * Note: This function will only work correctly if the control has been
1607  * registered with snd_soc_add_codec_controls() or via table based setup of
1608  * snd_soc_codec_driver. Otherwise the behavior is undefined.
1609  */
1610 static inline struct snd_soc_codec *snd_soc_kcontrol_codec(
1611         struct snd_kcontrol *kcontrol)
1612 {
1613         return snd_soc_component_to_codec(snd_soc_kcontrol_component(kcontrol));
1614 }
1615
1616 /**
1617  * snd_soc_kcontrol_platform() - Returns the platform that registered the control
1618  * @kcontrol: The control for which to get the platform
1619  *
1620  * Note: This function will only work correctly if the control has been
1621  * registered with snd_soc_add_platform_controls() or via table based setup of
1622  * a snd_soc_platform_driver. Otherwise the behavior is undefined.
1623  */
1624 static inline struct snd_soc_platform *snd_soc_kcontrol_platform(
1625         struct snd_kcontrol *kcontrol)
1626 {
1627         return snd_soc_component_to_platform(snd_soc_kcontrol_component(kcontrol));
1628 }
1629
1630 int snd_soc_util_init(void);
1631 void snd_soc_util_exit(void);
1632
1633 int snd_soc_of_parse_card_name(struct snd_soc_card *card,
1634                                const char *propname);
1635 int snd_soc_of_parse_audio_simple_widgets(struct snd_soc_card *card,
1636                                           const char *propname);
1637 int snd_soc_of_parse_tdm_slot(struct device_node *np,
1638                               unsigned int *tx_mask,
1639                               unsigned int *rx_mask,
1640                               unsigned int *slots,
1641                               unsigned int *slot_width);
1642 void snd_soc_of_parse_audio_prefix(struct snd_soc_card *card,
1643                                    struct snd_soc_codec_conf *codec_conf,
1644                                    struct device_node *of_node,
1645                                    const char *propname);
1646 int snd_soc_of_parse_audio_routing(struct snd_soc_card *card,
1647                                    const char *propname);
1648 unsigned int snd_soc_of_parse_daifmt(struct device_node *np,
1649                                      const char *prefix,
1650                                      struct device_node **bitclkmaster,
1651                                      struct device_node **framemaster);
1652 int snd_soc_of_get_dai_name(struct device_node *of_node,
1653                             const char **dai_name);
1654 int snd_soc_of_get_dai_link_codecs(struct device *dev,
1655                                    struct device_node *of_node,
1656                                    struct snd_soc_dai_link *dai_link);
1657
1658 #include <sound/soc-dai.h>
1659
1660 #ifdef CONFIG_DEBUG_FS
1661 extern struct dentry *snd_soc_debugfs_root;
1662 #endif
1663
1664 extern const struct dev_pm_ops snd_soc_pm_ops;
1665
1666 /* Helper functions */
1667 static inline void snd_soc_dapm_mutex_lock(struct snd_soc_dapm_context *dapm)
1668 {
1669         mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME);
1670 }
1671
1672 static inline void snd_soc_dapm_mutex_unlock(struct snd_soc_dapm_context *dapm)
1673 {
1674         mutex_unlock(&dapm->card->dapm_mutex);
1675 }
1676
1677 #endif