Lines Matching full:component
3 // soc-component.c
16 static inline int _soc_component_ret(struct snd_soc_component *component, in _soc_component_ret() argument
29 dev_err(component->dev, in _soc_component_ret()
31 func, component->name, ret); in _soc_component_ret()
41 #define soc_component_mark_push(component, substream, tgt) ((component)->mark_##tgt = substream) argument
42 #define soc_component_mark_pop(component, substream, tgt) ((component)->mark_##tgt = NULL) argument
43 #define soc_component_mark_match(component, substream, tgt) ((component)->mark_##tgt == substream) argument
45 void snd_soc_component_set_aux(struct snd_soc_component *component, in snd_soc_component_set_aux() argument
48 component->init = (aux) ? aux->init : NULL; in snd_soc_component_set_aux()
51 int snd_soc_component_init(struct snd_soc_component *component) in snd_soc_component_init() argument
55 if (component->init) in snd_soc_component_init()
56 ret = component->init(component); in snd_soc_component_init()
58 return soc_component_ret(component, ret); in snd_soc_component_init()
62 * snd_soc_component_set_sysclk - configure COMPONENT system or master clock.
63 * @component: COMPONENT
71 int snd_soc_component_set_sysclk(struct snd_soc_component *component, in snd_soc_component_set_sysclk() argument
77 if (component->driver->set_sysclk) in snd_soc_component_set_sysclk()
78 ret = component->driver->set_sysclk(component, clk_id, source, in snd_soc_component_set_sysclk()
81 return soc_component_ret(component, ret); in snd_soc_component_set_sysclk()
86 * snd_soc_component_set_pll - configure component PLL.
87 * @component: COMPONENT
95 int snd_soc_component_set_pll(struct snd_soc_component *component, int pll_id, in snd_soc_component_set_pll() argument
101 if (component->driver->set_pll) in snd_soc_component_set_pll()
102 ret = component->driver->set_pll(component, pll_id, source, in snd_soc_component_set_pll()
105 return soc_component_ret(component, ret); in snd_soc_component_set_pll()
109 void snd_soc_component_seq_notifier(struct snd_soc_component *component, in snd_soc_component_seq_notifier() argument
112 if (component->driver->seq_notifier) in snd_soc_component_seq_notifier()
113 component->driver->seq_notifier(component, type, subseq); in snd_soc_component_seq_notifier()
116 int snd_soc_component_stream_event(struct snd_soc_component *component, in snd_soc_component_stream_event() argument
121 if (component->driver->stream_event) in snd_soc_component_stream_event()
122 ret = component->driver->stream_event(component, event); in snd_soc_component_stream_event()
124 return soc_component_ret(component, ret); in snd_soc_component_stream_event()
127 int snd_soc_component_set_bias_level(struct snd_soc_component *component, in snd_soc_component_set_bias_level() argument
132 if (component->driver->set_bias_level) in snd_soc_component_set_bias_level()
133 ret = component->driver->set_bias_level(component, level); in snd_soc_component_set_bias_level()
135 return soc_component_ret(component, ret); in snd_soc_component_set_bias_level()
138 static int soc_component_pin(struct snd_soc_component *component, in soc_component_pin() argument
144 snd_soc_component_get_dapm(component); in soc_component_pin()
148 if (!component->name_prefix) { in soc_component_pin()
153 full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin); in soc_component_pin()
162 return soc_component_ret(component, ret); in soc_component_pin()
165 int snd_soc_component_enable_pin(struct snd_soc_component *component, in snd_soc_component_enable_pin() argument
168 return soc_component_pin(component, pin, snd_soc_dapm_enable_pin); in snd_soc_component_enable_pin()
172 int snd_soc_component_enable_pin_unlocked(struct snd_soc_component *component, in snd_soc_component_enable_pin_unlocked() argument
175 return soc_component_pin(component, pin, snd_soc_dapm_enable_pin_unlocked); in snd_soc_component_enable_pin_unlocked()
179 int snd_soc_component_disable_pin(struct snd_soc_component *component, in snd_soc_component_disable_pin() argument
182 return soc_component_pin(component, pin, snd_soc_dapm_disable_pin); in snd_soc_component_disable_pin()
186 int snd_soc_component_disable_pin_unlocked(struct snd_soc_component *component, in snd_soc_component_disable_pin_unlocked() argument
189 return soc_component_pin(component, pin, snd_soc_dapm_disable_pin_unlocked); in snd_soc_component_disable_pin_unlocked()
193 int snd_soc_component_nc_pin(struct snd_soc_component *component, in snd_soc_component_nc_pin() argument
196 return soc_component_pin(component, pin, snd_soc_dapm_nc_pin); in snd_soc_component_nc_pin()
200 int snd_soc_component_nc_pin_unlocked(struct snd_soc_component *component, in snd_soc_component_nc_pin_unlocked() argument
203 return soc_component_pin(component, pin, snd_soc_dapm_nc_pin_unlocked); in snd_soc_component_nc_pin_unlocked()
207 int snd_soc_component_get_pin_status(struct snd_soc_component *component, in snd_soc_component_get_pin_status() argument
210 return soc_component_pin(component, pin, snd_soc_dapm_get_pin_status); in snd_soc_component_get_pin_status()
214 int snd_soc_component_force_enable_pin(struct snd_soc_component *component, in snd_soc_component_force_enable_pin() argument
217 return soc_component_pin(component, pin, snd_soc_dapm_force_enable_pin); in snd_soc_component_force_enable_pin()
222 struct snd_soc_component *component, in snd_soc_component_force_enable_pin_unlocked() argument
225 return soc_component_pin(component, pin, snd_soc_dapm_force_enable_pin_unlocked); in snd_soc_component_force_enable_pin_unlocked()
230 * snd_soc_component_set_jack - configure component jack.
231 * @component: COMPONENTs
237 int snd_soc_component_set_jack(struct snd_soc_component *component, in snd_soc_component_set_jack() argument
242 if (component->driver->set_jack) in snd_soc_component_set_jack()
243 ret = component->driver->set_jack(component, jack, data); in snd_soc_component_set_jack()
245 return soc_component_ret(component, ret); in snd_soc_component_set_jack()
249 int snd_soc_component_module_get(struct snd_soc_component *component, in snd_soc_component_module_get() argument
255 if (component->driver->module_get_upon_open == !!upon_open && in snd_soc_component_module_get()
256 !try_module_get(component->dev->driver->owner)) in snd_soc_component_module_get()
261 soc_component_mark_push(component, substream, module); in snd_soc_component_module_get()
263 return soc_component_ret(component, ret); in snd_soc_component_module_get()
266 void snd_soc_component_module_put(struct snd_soc_component *component, in snd_soc_component_module_put() argument
270 if (rollback && !soc_component_mark_match(component, substream, module)) in snd_soc_component_module_put()
273 if (component->driver->module_get_upon_open == !!upon_open) in snd_soc_component_module_put()
274 module_put(component->dev->driver->owner); in snd_soc_component_module_put()
277 soc_component_mark_pop(component, substream, module); in snd_soc_component_module_put()
280 int snd_soc_component_open(struct snd_soc_component *component, in snd_soc_component_open() argument
285 if (component->driver->open) in snd_soc_component_open()
286 ret = component->driver->open(component, substream); in snd_soc_component_open()
290 soc_component_mark_push(component, substream, open); in snd_soc_component_open()
292 return soc_component_ret(component, ret); in snd_soc_component_open()
295 int snd_soc_component_close(struct snd_soc_component *component, in snd_soc_component_close() argument
301 if (rollback && !soc_component_mark_match(component, substream, open)) in snd_soc_component_close()
304 if (component->driver->close) in snd_soc_component_close()
305 ret = component->driver->close(component, substream); in snd_soc_component_close()
308 soc_component_mark_pop(component, substream, open); in snd_soc_component_close()
310 return soc_component_ret(component, ret); in snd_soc_component_close()
313 void snd_soc_component_suspend(struct snd_soc_component *component) in snd_soc_component_suspend() argument
315 if (component->driver->suspend) in snd_soc_component_suspend()
316 component->driver->suspend(component); in snd_soc_component_suspend()
317 component->suspended = 1; in snd_soc_component_suspend()
320 void snd_soc_component_resume(struct snd_soc_component *component) in snd_soc_component_resume() argument
322 if (component->driver->resume) in snd_soc_component_resume()
323 component->driver->resume(component); in snd_soc_component_resume()
324 component->suspended = 0; in snd_soc_component_resume()
327 int snd_soc_component_is_suspended(struct snd_soc_component *component) in snd_soc_component_is_suspended() argument
329 return component->suspended; in snd_soc_component_is_suspended()
332 int snd_soc_component_probe(struct snd_soc_component *component) in snd_soc_component_probe() argument
336 if (component->driver->probe) in snd_soc_component_probe()
337 ret = component->driver->probe(component); in snd_soc_component_probe()
339 return soc_component_ret(component, ret); in snd_soc_component_probe()
342 void snd_soc_component_remove(struct snd_soc_component *component) in snd_soc_component_remove() argument
344 if (component->driver->remove) in snd_soc_component_remove()
345 component->driver->remove(component); in snd_soc_component_remove()
348 int snd_soc_component_of_xlate_dai_id(struct snd_soc_component *component, in snd_soc_component_of_xlate_dai_id() argument
353 if (component->driver->of_xlate_dai_id) in snd_soc_component_of_xlate_dai_id()
354 ret = component->driver->of_xlate_dai_id(component, ep); in snd_soc_component_of_xlate_dai_id()
356 return soc_component_ret(component, ret); in snd_soc_component_of_xlate_dai_id()
359 int snd_soc_component_of_xlate_dai_name(struct snd_soc_component *component, in snd_soc_component_of_xlate_dai_name() argument
363 if (component->driver->of_xlate_dai_name) in snd_soc_component_of_xlate_dai_name()
364 return component->driver->of_xlate_dai_name(component, in snd_soc_component_of_xlate_dai_name()
368 * the error just yet. If a device has more than one component, the in snd_soc_component_of_xlate_dai_name()
374 void snd_soc_component_setup_regmap(struct snd_soc_component *component) in snd_soc_component_setup_regmap() argument
376 int val_bytes = regmap_get_val_bytes(component->regmap); in snd_soc_component_setup_regmap()
380 component->val_bytes = val_bytes; in snd_soc_component_setup_regmap()
387 * component
388 * @component: The component for which to initialize the regmap instance
389 * @regmap: The regmap instance that should be used by the component
392 * associated with the component. Only use this if the regmap instance is not
393 * yet ready when the component is registered. The function must also be called
394 * before the first IO attempt of the component.
396 void snd_soc_component_init_regmap(struct snd_soc_component *component, in snd_soc_component_init_regmap() argument
399 component->regmap = regmap; in snd_soc_component_init_regmap()
400 snd_soc_component_setup_regmap(component); in snd_soc_component_init_regmap()
406 * component
407 * @component: The component for which to de-initialize the regmap instance
409 * Calls regmap_exit() on the regmap instance associated to the component and
410 * removes the regmap instance from the component.
415 void snd_soc_component_exit_regmap(struct snd_soc_component *component) in snd_soc_component_exit_regmap() argument
417 regmap_exit(component->regmap); in snd_soc_component_exit_regmap()
418 component->regmap = NULL; in snd_soc_component_exit_regmap()
425 struct snd_soc_component *component, in soc_component_read_no_lock() argument
431 if (component->regmap) in soc_component_read_no_lock()
432 ret = regmap_read(component->regmap, reg, &val); in soc_component_read_no_lock()
433 else if (component->driver->read) { in soc_component_read_no_lock()
435 val = component->driver->read(component, reg); in soc_component_read_no_lock()
441 return soc_component_ret(component, ret); in soc_component_read_no_lock()
448 * @component: Component to read from
453 unsigned int snd_soc_component_read(struct snd_soc_component *component, in snd_soc_component_read() argument
458 mutex_lock(&component->io_mutex); in snd_soc_component_read()
459 val = soc_component_read_no_lock(component, reg); in snd_soc_component_read()
460 mutex_unlock(&component->io_mutex); in snd_soc_component_read()
467 struct snd_soc_component *component, in soc_component_write_no_lock() argument
472 if (component->regmap) in soc_component_write_no_lock()
473 ret = regmap_write(component->regmap, reg, val); in soc_component_write_no_lock()
474 else if (component->driver->write) in soc_component_write_no_lock()
475 ret = component->driver->write(component, reg, val); in soc_component_write_no_lock()
477 return soc_component_ret(component, ret); in soc_component_write_no_lock()
482 * @component: Component to write to
488 int snd_soc_component_write(struct snd_soc_component *component, in snd_soc_component_write() argument
493 mutex_lock(&component->io_mutex); in snd_soc_component_write()
494 ret = soc_component_write_no_lock(component, reg, val); in snd_soc_component_write()
495 mutex_unlock(&component->io_mutex); in snd_soc_component_write()
502 struct snd_soc_component *component, unsigned int reg, in snd_soc_component_update_bits_legacy() argument
508 mutex_lock(&component->io_mutex); in snd_soc_component_update_bits_legacy()
510 old = soc_component_read_no_lock(component, reg); in snd_soc_component_update_bits_legacy()
515 ret = soc_component_write_no_lock(component, reg, new); in snd_soc_component_update_bits_legacy()
517 mutex_unlock(&component->io_mutex); in snd_soc_component_update_bits_legacy()
519 return soc_component_ret(component, ret); in snd_soc_component_update_bits_legacy()
524 * @component: Component to update
533 int snd_soc_component_update_bits(struct snd_soc_component *component, in snd_soc_component_update_bits() argument
539 if (component->regmap) in snd_soc_component_update_bits()
540 ret = regmap_update_bits_check(component->regmap, reg, mask, in snd_soc_component_update_bits()
543 ret = snd_soc_component_update_bits_legacy(component, reg, in snd_soc_component_update_bits()
547 return soc_component_ret(component, ret); in snd_soc_component_update_bits()
555 * @component: Component to update
569 int snd_soc_component_update_bits_async(struct snd_soc_component *component, in snd_soc_component_update_bits_async() argument
575 if (component->regmap) in snd_soc_component_update_bits_async()
576 ret = regmap_update_bits_check_async(component->regmap, reg, in snd_soc_component_update_bits_async()
579 ret = snd_soc_component_update_bits_legacy(component, reg, in snd_soc_component_update_bits_async()
583 return soc_component_ret(component, ret); in snd_soc_component_update_bits_async()
590 * @component: Component for which to wait
595 void snd_soc_component_async_complete(struct snd_soc_component *component) in snd_soc_component_async_complete() argument
597 if (component->regmap) in snd_soc_component_async_complete()
598 regmap_async_complete(component->regmap); in snd_soc_component_async_complete()
604 * @component: component
614 int snd_soc_component_test_bits(struct snd_soc_component *component, in snd_soc_component_test_bits() argument
619 old = snd_soc_component_read(component, reg); in snd_soc_component_test_bits()
628 struct snd_soc_component *component; in snd_soc_pcm_component_pointer() local
632 for_each_rtd_components(rtd, i, component) in snd_soc_pcm_component_pointer()
633 if (component->driver->pointer) in snd_soc_pcm_component_pointer()
634 return component->driver->pointer(component, substream); in snd_soc_pcm_component_pointer()
643 struct snd_soc_component *component; in snd_soc_pcm_component_ioctl() local
647 for_each_rtd_components(rtd, i, component) in snd_soc_pcm_component_ioctl()
648 if (component->driver->ioctl) in snd_soc_pcm_component_ioctl()
650 component, in snd_soc_pcm_component_ioctl()
651 component->driver->ioctl(component, in snd_soc_pcm_component_ioctl()
660 struct snd_soc_component *component; in snd_soc_pcm_component_sync_stop() local
663 for_each_rtd_components(rtd, i, component) { in snd_soc_pcm_component_sync_stop()
664 if (component->driver->sync_stop) { in snd_soc_pcm_component_sync_stop()
665 ret = component->driver->sync_stop(component, in snd_soc_pcm_component_sync_stop()
668 return soc_component_ret(component, ret); in snd_soc_pcm_component_sync_stop()
680 struct snd_soc_component *component; in snd_soc_pcm_component_copy_user() local
684 for_each_rtd_components(rtd, i, component) in snd_soc_pcm_component_copy_user()
685 if (component->driver->copy_user) in snd_soc_pcm_component_copy_user()
687 component, in snd_soc_pcm_component_copy_user()
688 component->driver->copy_user( in snd_soc_pcm_component_copy_user()
689 component, substream, channel, in snd_soc_pcm_component_copy_user()
699 struct snd_soc_component *component; in snd_soc_pcm_component_page() local
704 for_each_rtd_components(rtd, i, component) { in snd_soc_pcm_component_page()
705 if (component->driver->page) { in snd_soc_pcm_component_page()
706 page = component->driver->page(component, in snd_soc_pcm_component_page()
720 struct snd_soc_component *component; in snd_soc_pcm_component_mmap() local
724 for_each_rtd_components(rtd, i, component) in snd_soc_pcm_component_mmap()
725 if (component->driver->mmap) in snd_soc_pcm_component_mmap()
727 component, in snd_soc_pcm_component_mmap()
728 component->driver->mmap(component, in snd_soc_pcm_component_mmap()
736 struct snd_soc_component *component; in snd_soc_pcm_component_new() local
740 for_each_rtd_components(rtd, i, component) { in snd_soc_pcm_component_new()
741 if (component->driver->pcm_construct) { in snd_soc_pcm_component_new()
742 ret = component->driver->pcm_construct(component, rtd); in snd_soc_pcm_component_new()
744 return soc_component_ret(component, ret); in snd_soc_pcm_component_new()
753 struct snd_soc_component *component; in snd_soc_pcm_component_free() local
759 for_each_rtd_components(rtd, i, component) in snd_soc_pcm_component_free()
760 if (component->driver->pcm_destruct) in snd_soc_pcm_component_free()
761 component->driver->pcm_destruct(component, rtd->pcm); in snd_soc_pcm_component_free()
767 struct snd_soc_component *component; in snd_soc_pcm_component_prepare() local
770 for_each_rtd_components(rtd, i, component) { in snd_soc_pcm_component_prepare()
771 if (component->driver->prepare) { in snd_soc_pcm_component_prepare()
772 ret = component->driver->prepare(component, substream); in snd_soc_pcm_component_prepare()
774 return soc_component_ret(component, ret); in snd_soc_pcm_component_prepare()
786 struct snd_soc_component *component; in snd_soc_pcm_component_hw_params() local
789 for_each_rtd_components(rtd, i, component) { in snd_soc_pcm_component_hw_params()
790 if (component->driver->hw_params) { in snd_soc_pcm_component_hw_params()
791 ret = component->driver->hw_params(component, in snd_soc_pcm_component_hw_params()
794 *last = component; in snd_soc_pcm_component_hw_params()
795 return soc_component_ret(component, ret); in snd_soc_pcm_component_hw_params()
808 struct snd_soc_component *component; in snd_soc_pcm_component_hw_free() local
811 for_each_rtd_components(rtd, i, component) { in snd_soc_pcm_component_hw_free()
812 if (component == last) in snd_soc_pcm_component_hw_free()
815 if (component->driver->hw_free) { in snd_soc_pcm_component_hw_free()
816 ret = component->driver->hw_free(component, substream); in snd_soc_pcm_component_hw_free()
818 soc_component_ret(component, ret); in snd_soc_pcm_component_hw_free()
827 struct snd_soc_component *component; in snd_soc_pcm_component_trigger() local
830 for_each_rtd_components(rtd, i, component) { in snd_soc_pcm_component_trigger()
831 if (component->driver->trigger) { in snd_soc_pcm_component_trigger()
832 ret = component->driver->trigger(component, substream, cmd); in snd_soc_pcm_component_trigger()
834 return soc_component_ret(component, ret); in snd_soc_pcm_component_trigger()
844 struct snd_soc_component *component; in snd_soc_pcm_component_pm_runtime_get() local
847 for_each_rtd_components(rtd, i, component) { in snd_soc_pcm_component_pm_runtime_get()
848 ret = pm_runtime_get_sync(component->dev); in snd_soc_pcm_component_pm_runtime_get()
850 pm_runtime_put_noidle(component->dev); in snd_soc_pcm_component_pm_runtime_get()
851 return soc_component_ret(component, ret); in snd_soc_pcm_component_pm_runtime_get()
854 soc_component_mark_push(component, stream, pm); in snd_soc_pcm_component_pm_runtime_get()
863 struct snd_soc_component *component; in snd_soc_pcm_component_pm_runtime_put() local
866 for_each_rtd_components(rtd, i, component) { in snd_soc_pcm_component_pm_runtime_put()
867 if (rollback && !soc_component_mark_match(component, stream, pm)) in snd_soc_pcm_component_pm_runtime_put()
870 pm_runtime_mark_last_busy(component->dev); in snd_soc_pcm_component_pm_runtime_put()
871 pm_runtime_put_autosuspend(component->dev); in snd_soc_pcm_component_pm_runtime_put()
874 soc_component_mark_pop(component, stream, pm); in snd_soc_pcm_component_pm_runtime_put()