1 | /* SPDX-License-Identifier: GPL-2.0
|
---|
2 | *
|
---|
3 | * soc-component.h
|
---|
4 | *
|
---|
5 | * Copyright (C) 2019 Renesas Electronics Corp.
|
---|
6 | * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
|
---|
7 | */
|
---|
8 | #ifndef __SOC_COMPONENT_H
|
---|
9 | #define __SOC_COMPONENT_H
|
---|
10 |
|
---|
11 | #include <sound/soc.h>
|
---|
12 |
|
---|
13 | /*
|
---|
14 | * Component probe and remove ordering levels for components with runtime
|
---|
15 | * dependencies.
|
---|
16 | */
|
---|
17 | #define SND_SOC_COMP_ORDER_FIRST -2
|
---|
18 | #define SND_SOC_COMP_ORDER_EARLY -1
|
---|
19 | #define SND_SOC_COMP_ORDER_NORMAL 0
|
---|
20 | #define SND_SOC_COMP_ORDER_LATE 1
|
---|
21 | #define SND_SOC_COMP_ORDER_LAST 2
|
---|
22 |
|
---|
23 | #define for_each_comp_order(order) \
|
---|
24 | for (order = SND_SOC_COMP_ORDER_FIRST; \
|
---|
25 | order <= SND_SOC_COMP_ORDER_LAST; \
|
---|
26 | order++)
|
---|
27 |
|
---|
28 | /* component interface */
|
---|
29 | struct snd_compress_ops {
|
---|
30 | int (*open)(struct snd_soc_component *component,
|
---|
31 | struct snd_compr_stream *stream);
|
---|
32 | int (*free)(struct snd_soc_component *component,
|
---|
33 | struct snd_compr_stream *stream);
|
---|
34 | int (*set_params)(struct snd_soc_component *component,
|
---|
35 | struct snd_compr_stream *stream,
|
---|
36 | struct snd_compr_params *params);
|
---|
37 | int (*get_params)(struct snd_soc_component *component,
|
---|
38 | struct snd_compr_stream *stream,
|
---|
39 | struct snd_codec *params);
|
---|
40 | int (*set_metadata)(struct snd_soc_component *component,
|
---|
41 | struct snd_compr_stream *stream,
|
---|
42 | struct snd_compr_metadata *metadata);
|
---|
43 | int (*get_metadata)(struct snd_soc_component *component,
|
---|
44 | struct snd_compr_stream *stream,
|
---|
45 | struct snd_compr_metadata *metadata);
|
---|
46 | int (*trigger)(struct snd_soc_component *component,
|
---|
47 | struct snd_compr_stream *stream, int cmd);
|
---|
48 | int (*pointer)(struct snd_soc_component *component,
|
---|
49 | struct snd_compr_stream *stream,
|
---|
50 | struct snd_compr_tstamp *tstamp);
|
---|
51 | int (*copy)(struct snd_soc_component *component,
|
---|
52 | struct snd_compr_stream *stream, char __user *buf,
|
---|
53 | size_t count);
|
---|
54 | int (*mmap)(struct snd_soc_component *component,
|
---|
55 | struct snd_compr_stream *stream,
|
---|
56 | struct vm_area_struct *vma);
|
---|
57 | int (*ack)(struct snd_soc_component *component,
|
---|
58 | struct snd_compr_stream *stream, size_t bytes);
|
---|
59 | int (*get_caps)(struct snd_soc_component *component,
|
---|
60 | struct snd_compr_stream *stream,
|
---|
61 | struct snd_compr_caps *caps);
|
---|
62 | int (*get_codec_caps)(struct snd_soc_component *component,
|
---|
63 | struct snd_compr_stream *stream,
|
---|
64 | struct snd_compr_codec_caps *codec);
|
---|
65 | };
|
---|
66 |
|
---|
67 | struct snd_soc_component_driver {
|
---|
68 | const char *name;
|
---|
69 |
|
---|
70 | /* Default control and setup, added after probe() is run */
|
---|
71 | const struct snd_kcontrol_new *controls;
|
---|
72 | unsigned int num_controls;
|
---|
73 | const struct snd_soc_dapm_widget *dapm_widgets;
|
---|
74 | unsigned int num_dapm_widgets;
|
---|
75 | const struct snd_soc_dapm_route *dapm_routes;
|
---|
76 | unsigned int num_dapm_routes;
|
---|
77 |
|
---|
78 | int (*probe)(struct snd_soc_component *component);
|
---|
79 | void (*remove)(struct snd_soc_component *component);
|
---|
80 | int (*suspend)(struct snd_soc_component *component);
|
---|
81 | int (*resume)(struct snd_soc_component *component);
|
---|
82 |
|
---|
83 | unsigned int (*read)(struct snd_soc_component *component,
|
---|
84 | unsigned int reg);
|
---|
85 | int (*write)(struct snd_soc_component *component,
|
---|
86 | unsigned int reg, unsigned int val);
|
---|
87 |
|
---|
88 | /* pcm creation and destruction */
|
---|
89 | int (*pcm_construct)(struct snd_soc_component *component,
|
---|
90 | struct snd_soc_pcm_runtime *rtd);
|
---|
91 | void (*pcm_destruct)(struct snd_soc_component *component,
|
---|
92 | struct snd_pcm *pcm);
|
---|
93 |
|
---|
94 | /* component wide operations */
|
---|
95 | int (*set_sysclk)(struct snd_soc_component *component,
|
---|
96 | int clk_id, int source, unsigned int freq, int dir);
|
---|
97 | int (*set_pll)(struct snd_soc_component *component, int pll_id,
|
---|
98 | int source, unsigned int freq_in, unsigned int freq_out);
|
---|
99 | int (*set_jack)(struct snd_soc_component *component,
|
---|
100 | struct snd_soc_jack *jack, void *data);
|
---|
101 | int (*get_jack_type)(struct snd_soc_component *component);
|
---|
102 |
|
---|
103 | /* DT */
|
---|
104 | int (*of_xlate_dai_name)(struct snd_soc_component *component,
|
---|
105 | const struct of_phandle_args *args,
|
---|
106 | const char **dai_name);
|
---|
107 | int (*of_xlate_dai_id)(struct snd_soc_component *comment,
|
---|
108 | struct device_node *endpoint);
|
---|
109 | void (*seq_notifier)(struct snd_soc_component *component,
|
---|
110 | enum snd_soc_dapm_type type, int subseq);
|
---|
111 | int (*stream_event)(struct snd_soc_component *component, int event);
|
---|
112 | int (*set_bias_level)(struct snd_soc_component *component,
|
---|
113 | enum snd_soc_bias_level level);
|
---|
114 |
|
---|
115 | int (*open)(struct snd_soc_component *component,
|
---|
116 | struct snd_pcm_substream *substream);
|
---|
117 | int (*close)(struct snd_soc_component *component,
|
---|
118 | struct snd_pcm_substream *substream);
|
---|
119 | int (*ioctl)(struct snd_soc_component *component,
|
---|
120 | struct snd_pcm_substream *substream,
|
---|
121 | unsigned int cmd, void *arg);
|
---|
122 | int (*hw_params)(struct snd_soc_component *component,
|
---|
123 | struct snd_pcm_substream *substream,
|
---|
124 | struct snd_pcm_hw_params *params);
|
---|
125 | int (*hw_free)(struct snd_soc_component *component,
|
---|
126 | struct snd_pcm_substream *substream);
|
---|
127 | int (*prepare)(struct snd_soc_component *component,
|
---|
128 | struct snd_pcm_substream *substream);
|
---|
129 | int (*trigger)(struct snd_soc_component *component,
|
---|
130 | struct snd_pcm_substream *substream, int cmd);
|
---|
131 | int (*sync_stop)(struct snd_soc_component *component,
|
---|
132 | struct snd_pcm_substream *substream);
|
---|
133 | snd_pcm_uframes_t (*pointer)(struct snd_soc_component *component,
|
---|
134 | struct snd_pcm_substream *substream);
|
---|
135 | int (*get_time_info)(struct snd_soc_component *component,
|
---|
136 | struct snd_pcm_substream *substream, struct timespec64 *system_ts,
|
---|
137 | struct timespec64 *audio_ts,
|
---|
138 | struct snd_pcm_audio_tstamp_config *audio_tstamp_config,
|
---|
139 | struct snd_pcm_audio_tstamp_report *audio_tstamp_report);
|
---|
140 | int (*copy)(struct snd_soc_component *component,
|
---|
141 | struct snd_pcm_substream *substream, int channel,
|
---|
142 | unsigned long pos, struct iov_iter *iter,
|
---|
143 | unsigned long bytes);
|
---|
144 | struct page *(*page)(struct snd_soc_component *component,
|
---|
145 | struct snd_pcm_substream *substream,
|
---|
146 | unsigned long offset);
|
---|
147 | int (*mmap)(struct snd_soc_component *component,
|
---|
148 | struct snd_pcm_substream *substream,
|
---|
149 | struct vm_area_struct *vma);
|
---|
150 | int (*ack)(struct snd_soc_component *component,
|
---|
151 | struct snd_pcm_substream *substream);
|
---|
152 | snd_pcm_sframes_t (*delay)(struct snd_soc_component *component,
|
---|
153 | struct snd_pcm_substream *substream);
|
---|
154 |
|
---|
155 | const struct snd_compress_ops *compress_ops;
|
---|
156 |
|
---|
157 | /* probe ordering - for components with runtime dependencies */
|
---|
158 | int probe_order;
|
---|
159 | int remove_order;
|
---|
160 |
|
---|
161 | /*
|
---|
162 | * soc_pcm_trigger() start/stop sequence.
|
---|
163 | * see also
|
---|
164 | * snd_soc_dai_link
|
---|
165 | * soc_pcm_trigger()
|
---|
166 | */
|
---|
167 | enum snd_soc_trigger_order trigger_start;
|
---|
168 | enum snd_soc_trigger_order trigger_stop;
|
---|
169 |
|
---|
170 | /*
|
---|
171 | * signal if the module handling the component should not be removed
|
---|
172 | * if a pcm is open. Setting this would prevent the module
|
---|
173 | * refcount being incremented in probe() but allow it be incremented
|
---|
174 | * when a pcm is opened and decremented when it is closed.
|
---|
175 | */
|
---|
176 | unsigned int module_get_upon_open:1;
|
---|
177 |
|
---|
178 | /* bits */
|
---|
179 | unsigned int idle_bias_on:1;
|
---|
180 | unsigned int suspend_bias_off:1;
|
---|
181 | unsigned int use_pmdown_time:1; /* care pmdown_time at stop */
|
---|
182 | /*
|
---|
183 | * Indicates that the component does not care about the endianness of
|
---|
184 | * PCM audio data and the core will ensure that both LE and BE variants
|
---|
185 | * of each used format are present. Typically this is because the
|
---|
186 | * component sits behind a bus that abstracts away the endian of the
|
---|
187 | * original data, ie. one for which the transmission endian is defined
|
---|
188 | * (I2S/SLIMbus/SoundWire), or the concept of endian doesn't exist (PDM,
|
---|
189 | * analogue).
|
---|
190 | */
|
---|
191 | unsigned int endianness:1;
|
---|
192 | unsigned int legacy_dai_naming:1;
|
---|
193 |
|
---|
194 | /* this component uses topology and ignore machine driver FEs */
|
---|
195 | const char *ignore_machine;
|
---|
196 | const char *topology_name_prefix;
|
---|
197 | int (*be_hw_params_fixup)(struct snd_soc_pcm_runtime *rtd,
|
---|
198 | struct snd_pcm_hw_params *params);
|
---|
199 | bool use_dai_pcm_id; /* use DAI link PCM ID as PCM device number */
|
---|
200 | int be_pcm_base; /* base device ID for all BE PCMs */
|
---|
201 |
|
---|
202 | #ifdef CONFIG_DEBUG_FS
|
---|
203 | const char *debugfs_prefix;
|
---|
204 | #endif
|
---|
205 | };
|
---|
206 |
|
---|
207 | struct snd_soc_component {
|
---|
208 | const char *name;
|
---|
209 | int id;
|
---|
210 | const char *name_prefix;
|
---|
211 | struct device *dev;
|
---|
212 | struct snd_soc_card *card;
|
---|
213 |
|
---|
214 | unsigned int active;
|
---|
215 |
|
---|
216 | unsigned int suspended:1; /* is in suspend PM state */
|
---|
217 |
|
---|
218 | struct list_head list;
|
---|
219 | struct list_head card_aux_list; /* for auxiliary bound components */
|
---|
220 | struct list_head card_list;
|
---|
221 |
|
---|
222 | const struct snd_soc_component_driver *driver;
|
---|
223 |
|
---|
224 | struct list_head dai_list;
|
---|
225 | int num_dai;
|
---|
226 |
|
---|
227 | struct regmap *regmap;
|
---|
228 | int val_bytes;
|
---|
229 |
|
---|
230 | struct mutex io_mutex;
|
---|
231 |
|
---|
232 | /* attached dynamic objects */
|
---|
233 | struct list_head dobj_list;
|
---|
234 |
|
---|
235 | /*
|
---|
236 | * DO NOT use any of the fields below in drivers, they are temporary and
|
---|
237 | * are going to be removed again soon. If you use them in driver code
|
---|
238 | * the driver will be marked as BROKEN when these fields are removed.
|
---|
239 | */
|
---|
240 |
|
---|
241 | /* Don't use these, use snd_soc_component_get_dapm() */
|
---|
242 | struct snd_soc_dapm_context dapm;
|
---|
243 |
|
---|
244 | /* machine specific init */
|
---|
245 | int (*init)(struct snd_soc_component *component);
|
---|
246 |
|
---|
247 | /* function mark */
|
---|
248 | void *mark_module;
|
---|
249 | struct snd_pcm_substream *mark_open;
|
---|
250 | struct snd_pcm_substream *mark_hw_params;
|
---|
251 | struct snd_pcm_substream *mark_trigger;
|
---|
252 | struct snd_compr_stream *mark_compr_open;
|
---|
253 | void *mark_pm;
|
---|
254 |
|
---|
255 | struct dentry *debugfs_root;
|
---|
256 | const char *debugfs_prefix;
|
---|
257 | };
|
---|
258 |
|
---|
259 | #define for_each_component_dais(component, dai)\
|
---|
260 | list_for_each_entry(dai, &(component)->dai_list, list)
|
---|
261 | #define for_each_component_dais_safe(component, dai, _dai)\
|
---|
262 | list_for_each_entry_safe(dai, _dai, &(component)->dai_list, list)
|
---|
263 |
|
---|
264 | /**
|
---|
265 | * snd_soc_dapm_to_component() - Casts a DAPM context to the component it is
|
---|
266 | * embedded in
|
---|
267 | * @dapm: The DAPM context to cast to the component
|
---|
268 | *
|
---|
269 | * This function must only be used on DAPM contexts that are known to be part of
|
---|
270 | * a component (e.g. in a component driver). Otherwise the behavior is
|
---|
271 | * undefined.
|
---|
272 | */
|
---|
273 | static inline struct snd_soc_component *snd_soc_dapm_to_component(
|
---|
274 | struct snd_soc_dapm_context *dapm)
|
---|
275 | {
|
---|
276 | return container_of(dapm, struct snd_soc_component, dapm);
|
---|
277 | }
|
---|
278 |
|
---|
279 | /**
|
---|
280 | * snd_soc_component_get_dapm() - Returns the DAPM context associated with a
|
---|
281 | * component
|
---|
282 | * @component: The component for which to get the DAPM context
|
---|
283 | */
|
---|
284 | static inline struct snd_soc_dapm_context *snd_soc_component_get_dapm(
|
---|
285 | struct snd_soc_component *component)
|
---|
286 | {
|
---|
287 | return &component->dapm;
|
---|
288 | }
|
---|
289 |
|
---|
290 | /**
|
---|
291 | * snd_soc_component_init_bias_level() - Initialize COMPONENT DAPM bias level
|
---|
292 | * @component: The COMPONENT for which to initialize the DAPM bias level
|
---|
293 | * @level: The DAPM level to initialize to
|
---|
294 | *
|
---|
295 | * Initializes the COMPONENT DAPM bias level. See snd_soc_dapm_init_bias_level()
|
---|
296 | */
|
---|
297 | static inline void
|
---|
298 | snd_soc_component_init_bias_level(struct snd_soc_component *component,
|
---|
299 | enum snd_soc_bias_level level)
|
---|
300 | {
|
---|
301 | snd_soc_dapm_init_bias_level(
|
---|
302 | snd_soc_component_get_dapm(component), level);
|
---|
303 | }
|
---|
304 |
|
---|
305 | /**
|
---|
306 | * snd_soc_component_get_bias_level() - Get current COMPONENT DAPM bias level
|
---|
307 | * @component: The COMPONENT for which to get the DAPM bias level
|
---|
308 | *
|
---|
309 | * Returns: The current DAPM bias level of the COMPONENT.
|
---|
310 | */
|
---|
311 | static inline enum snd_soc_bias_level
|
---|
312 | snd_soc_component_get_bias_level(struct snd_soc_component *component)
|
---|
313 | {
|
---|
314 | return snd_soc_dapm_get_bias_level(
|
---|
315 | snd_soc_component_get_dapm(component));
|
---|
316 | }
|
---|
317 |
|
---|
318 | /**
|
---|
319 | * snd_soc_component_force_bias_level() - Set the COMPONENT DAPM bias level
|
---|
320 | * @component: The COMPONENT for which to set the level
|
---|
321 | * @level: The level to set to
|
---|
322 | *
|
---|
323 | * Forces the COMPONENT bias level to a specific state. See
|
---|
324 | * snd_soc_dapm_force_bias_level().
|
---|
325 | */
|
---|
326 | static inline int
|
---|
327 | snd_soc_component_force_bias_level(struct snd_soc_component *component,
|
---|
328 | enum snd_soc_bias_level level)
|
---|
329 | {
|
---|
330 | return snd_soc_dapm_force_bias_level(
|
---|
331 | snd_soc_component_get_dapm(component),
|
---|
332 | level);
|
---|
333 | }
|
---|
334 |
|
---|
335 | /**
|
---|
336 | * snd_soc_dapm_kcontrol_component() - Returns the component associated to a
|
---|
337 | * kcontrol
|
---|
338 | * @kcontrol: The kcontrol
|
---|
339 | *
|
---|
340 | * This function must only be used on DAPM contexts that are known to be part of
|
---|
341 | * a COMPONENT (e.g. in a COMPONENT driver). Otherwise the behavior is undefined
|
---|
342 | */
|
---|
343 | static inline struct snd_soc_component *snd_soc_dapm_kcontrol_component(
|
---|
344 | struct snd_kcontrol *kcontrol)
|
---|
345 | {
|
---|
346 | return snd_soc_dapm_to_component(snd_soc_dapm_kcontrol_dapm(kcontrol));
|
---|
347 | }
|
---|
348 |
|
---|
349 | /**
|
---|
350 | * snd_soc_component_cache_sync() - Sync the register cache with the hardware
|
---|
351 | * @component: COMPONENT to sync
|
---|
352 | *
|
---|
353 | * Note: This function will call regcache_sync()
|
---|
354 | */
|
---|
355 | static inline int snd_soc_component_cache_sync(
|
---|
356 | struct snd_soc_component *component)
|
---|
357 | {
|
---|
358 | return regcache_sync(component->regmap);
|
---|
359 | }
|
---|
360 |
|
---|
361 | void snd_soc_component_set_aux(struct snd_soc_component *component,
|
---|
362 | struct snd_soc_aux_dev *aux);
|
---|
363 | int snd_soc_component_init(struct snd_soc_component *component);
|
---|
364 | int snd_soc_component_is_dummy(struct snd_soc_component *component);
|
---|
365 |
|
---|
366 | /* component IO */
|
---|
367 | unsigned int snd_soc_component_read(struct snd_soc_component *component,
|
---|
368 | unsigned int reg);
|
---|
369 | int snd_soc_component_write(struct snd_soc_component *component,
|
---|
370 | unsigned int reg, unsigned int val);
|
---|
371 | int snd_soc_component_update_bits(struct snd_soc_component *component,
|
---|
372 | unsigned int reg, unsigned int mask,
|
---|
373 | unsigned int val);
|
---|
374 | int snd_soc_component_update_bits_async(struct snd_soc_component *component,
|
---|
375 | unsigned int reg, unsigned int mask,
|
---|
376 | unsigned int val);
|
---|
377 | void snd_soc_component_async_complete(struct snd_soc_component *component);
|
---|
378 | int snd_soc_component_test_bits(struct snd_soc_component *component,
|
---|
379 | unsigned int reg, unsigned int mask,
|
---|
380 | unsigned int value);
|
---|
381 |
|
---|
382 | unsigned int snd_soc_component_read_field(struct snd_soc_component *component,
|
---|
383 | unsigned int reg, unsigned int mask);
|
---|
384 | int snd_soc_component_write_field(struct snd_soc_component *component,
|
---|
385 | unsigned int reg, unsigned int mask,
|
---|
386 | unsigned int val);
|
---|
387 |
|
---|
388 | /* component wide operations */
|
---|
389 | int snd_soc_component_set_sysclk(struct snd_soc_component *component,
|
---|
390 | int clk_id, int source,
|
---|
391 | unsigned int freq, int dir);
|
---|
392 | int snd_soc_component_set_pll(struct snd_soc_component *component, int pll_id,
|
---|
393 | int source, unsigned int freq_in,
|
---|
394 | unsigned int freq_out);
|
---|
395 | int snd_soc_component_set_jack(struct snd_soc_component *component,
|
---|
396 | struct snd_soc_jack *jack, void *data);
|
---|
397 | int snd_soc_component_get_jack_type(struct snd_soc_component *component);
|
---|
398 |
|
---|
399 | void snd_soc_component_seq_notifier(struct snd_soc_component *component,
|
---|
400 | enum snd_soc_dapm_type type, int subseq);
|
---|
401 | int snd_soc_component_stream_event(struct snd_soc_component *component,
|
---|
402 | int event);
|
---|
403 | int snd_soc_component_set_bias_level(struct snd_soc_component *component,
|
---|
404 | enum snd_soc_bias_level level);
|
---|
405 |
|
---|
406 | void snd_soc_component_setup_regmap(struct snd_soc_component *component);
|
---|
407 | #ifdef CONFIG_REGMAP
|
---|
408 | void snd_soc_component_init_regmap(struct snd_soc_component *component,
|
---|
409 | struct regmap *regmap);
|
---|
410 | void snd_soc_component_exit_regmap(struct snd_soc_component *component);
|
---|
411 | #endif
|
---|
412 |
|
---|
413 | #define snd_soc_component_module_get_when_probe(component)\
|
---|
414 | snd_soc_component_module_get(component, NULL, 0)
|
---|
415 | #define snd_soc_component_module_get_when_open(component, substream) \
|
---|
416 | snd_soc_component_module_get(component, substream, 1)
|
---|
417 | int snd_soc_component_module_get(struct snd_soc_component *component,
|
---|
418 | void *mark, int upon_open);
|
---|
419 | #define snd_soc_component_module_put_when_remove(component) \
|
---|
420 | snd_soc_component_module_put(component, NULL, 0, 0)
|
---|
421 | #define snd_soc_component_module_put_when_close(component, substream, rollback) \
|
---|
422 | snd_soc_component_module_put(component, substream, 1, rollback)
|
---|
423 | void snd_soc_component_module_put(struct snd_soc_component *component,
|
---|
424 | void *mark, int upon_open, int rollback);
|
---|
425 |
|
---|
426 | static inline void snd_soc_component_set_drvdata(struct snd_soc_component *c,
|
---|
427 | void *data)
|
---|
428 | {
|
---|
429 | dev_set_drvdata(c->dev, data);
|
---|
430 | }
|
---|
431 |
|
---|
432 | static inline void *snd_soc_component_get_drvdata(struct snd_soc_component *c)
|
---|
433 | {
|
---|
434 | return dev_get_drvdata(c->dev);
|
---|
435 | }
|
---|
436 |
|
---|
437 | static inline unsigned int
|
---|
438 | snd_soc_component_active(struct snd_soc_component *component)
|
---|
439 | {
|
---|
440 | return component->active;
|
---|
441 | }
|
---|
442 |
|
---|
443 | /* component pin */
|
---|
444 | int snd_soc_component_enable_pin(struct snd_soc_component *component,
|
---|
445 | const char *pin);
|
---|
446 | int snd_soc_component_enable_pin_unlocked(struct snd_soc_component *component,
|
---|
447 | const char *pin);
|
---|
448 | int snd_soc_component_disable_pin(struct snd_soc_component *component,
|
---|
449 | const char *pin);
|
---|
450 | int snd_soc_component_disable_pin_unlocked(struct snd_soc_component *component,
|
---|
451 | const char *pin);
|
---|
452 | int snd_soc_component_nc_pin(struct snd_soc_component *component,
|
---|
453 | const char *pin);
|
---|
454 | int snd_soc_component_nc_pin_unlocked(struct snd_soc_component *component,
|
---|
455 | const char *pin);
|
---|
456 | int snd_soc_component_get_pin_status(struct snd_soc_component *component,
|
---|
457 | const char *pin);
|
---|
458 | int snd_soc_component_force_enable_pin(struct snd_soc_component *component,
|
---|
459 | const char *pin);
|
---|
460 | int snd_soc_component_force_enable_pin_unlocked(
|
---|
461 | struct snd_soc_component *component,
|
---|
462 | const char *pin);
|
---|
463 |
|
---|
464 | /* component controls */
|
---|
465 | struct snd_kcontrol *snd_soc_component_get_kcontrol(struct snd_soc_component *component,
|
---|
466 | const char * const ctl);
|
---|
467 | int snd_soc_component_notify_control(struct snd_soc_component *component,
|
---|
468 | const char * const ctl);
|
---|
469 |
|
---|
470 | /* component driver ops */
|
---|
471 | int snd_soc_component_open(struct snd_soc_component *component,
|
---|
472 | struct snd_pcm_substream *substream);
|
---|
473 | int snd_soc_component_close(struct snd_soc_component *component,
|
---|
474 | struct snd_pcm_substream *substream,
|
---|
475 | int rollback);
|
---|
476 | void snd_soc_component_suspend(struct snd_soc_component *component);
|
---|
477 | void snd_soc_component_resume(struct snd_soc_component *component);
|
---|
478 | int snd_soc_component_is_suspended(struct snd_soc_component *component);
|
---|
479 | int snd_soc_component_probe(struct snd_soc_component *component);
|
---|
480 | void snd_soc_component_remove(struct snd_soc_component *component);
|
---|
481 | int snd_soc_component_of_xlate_dai_id(struct snd_soc_component *component,
|
---|
482 | struct device_node *ep);
|
---|
483 | int snd_soc_component_of_xlate_dai_name(struct snd_soc_component *component,
|
---|
484 | const struct of_phandle_args *args,
|
---|
485 | const char **dai_name);
|
---|
486 | int snd_soc_component_compr_open(struct snd_soc_component *component,
|
---|
487 | struct snd_compr_stream *cstream);
|
---|
488 | void snd_soc_component_compr_free(struct snd_soc_component *component,
|
---|
489 | struct snd_compr_stream *cstream,
|
---|
490 | int rollback);
|
---|
491 | int snd_soc_component_compr_trigger(struct snd_compr_stream *cstream, int cmd);
|
---|
492 | int snd_soc_component_compr_set_params(struct snd_compr_stream *cstream,
|
---|
493 | struct snd_compr_params *params);
|
---|
494 | int snd_soc_component_compr_get_params(struct snd_compr_stream *cstream,
|
---|
495 | struct snd_codec *params);
|
---|
496 | int snd_soc_component_compr_get_caps(struct snd_compr_stream *cstream,
|
---|
497 | struct snd_compr_caps *caps);
|
---|
498 | int snd_soc_component_compr_get_codec_caps(struct snd_compr_stream *cstream,
|
---|
499 | struct snd_compr_codec_caps *codec);
|
---|
500 | int snd_soc_component_compr_ack(struct snd_compr_stream *cstream, size_t bytes);
|
---|
501 | int snd_soc_component_compr_pointer(struct snd_compr_stream *cstream,
|
---|
502 | struct snd_compr_tstamp *tstamp);
|
---|
503 | int snd_soc_component_compr_copy(struct snd_compr_stream *cstream,
|
---|
504 | char __user *buf, size_t count);
|
---|
505 | int snd_soc_component_compr_set_metadata(struct snd_compr_stream *cstream,
|
---|
506 | struct snd_compr_metadata *metadata);
|
---|
507 | int snd_soc_component_compr_get_metadata(struct snd_compr_stream *cstream,
|
---|
508 | struct snd_compr_metadata *metadata);
|
---|
509 |
|
---|
510 | int snd_soc_pcm_component_pointer(struct snd_pcm_substream *substream);
|
---|
511 | int snd_soc_pcm_component_ioctl(struct snd_pcm_substream *substream,
|
---|
512 | unsigned int cmd, void *arg);
|
---|
513 | int snd_soc_pcm_component_sync_stop(struct snd_pcm_substream *substream);
|
---|
514 | int snd_soc_pcm_component_copy(struct snd_pcm_substream *substream,
|
---|
515 | int channel, unsigned long pos,
|
---|
516 | struct iov_iter *iter, unsigned long bytes);
|
---|
517 | struct page *snd_soc_pcm_component_page(struct snd_pcm_substream *substream,
|
---|
518 | unsigned long offset);
|
---|
519 | int snd_soc_pcm_component_mmap(struct snd_pcm_substream *substream,
|
---|
520 | struct vm_area_struct *vma);
|
---|
521 | int snd_soc_pcm_component_new(struct snd_soc_pcm_runtime *rtd);
|
---|
522 | void snd_soc_pcm_component_free(struct snd_soc_pcm_runtime *rtd);
|
---|
523 | int snd_soc_pcm_component_prepare(struct snd_pcm_substream *substream);
|
---|
524 | int snd_soc_pcm_component_hw_params(struct snd_pcm_substream *substream,
|
---|
525 | struct snd_pcm_hw_params *params);
|
---|
526 | void snd_soc_pcm_component_hw_free(struct snd_pcm_substream *substream,
|
---|
527 | int rollback);
|
---|
528 | int snd_soc_pcm_component_trigger(struct snd_pcm_substream *substream,
|
---|
529 | int cmd, int rollback);
|
---|
530 | int snd_soc_pcm_component_pm_runtime_get(struct snd_soc_pcm_runtime *rtd,
|
---|
531 | void *stream);
|
---|
532 | void snd_soc_pcm_component_pm_runtime_put(struct snd_soc_pcm_runtime *rtd,
|
---|
533 | void *stream, int rollback);
|
---|
534 | int snd_soc_pcm_component_ack(struct snd_pcm_substream *substream);
|
---|
535 | void snd_soc_pcm_component_delay(struct snd_pcm_substream *substream,
|
---|
536 | snd_pcm_sframes_t *cpu_delay, snd_pcm_sframes_t *codec_delay);
|
---|
537 |
|
---|
538 | #endif /* __SOC_COMPONENT_H */
|
---|