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 int snd_soc_component_enable_pin(struct snd_soc_component *component, in snd_soc_component_enable_pin() argument
142 snd_soc_component_get_dapm(component); in snd_soc_component_enable_pin()
147 int snd_soc_component_enable_pin_unlocked(struct snd_soc_component *component, in snd_soc_component_enable_pin_unlocked() argument
151 snd_soc_component_get_dapm(component); in snd_soc_component_enable_pin_unlocked()
156 int snd_soc_component_disable_pin(struct snd_soc_component *component, in snd_soc_component_disable_pin() argument
160 snd_soc_component_get_dapm(component); in snd_soc_component_disable_pin()
165 int snd_soc_component_disable_pin_unlocked(struct snd_soc_component *component, in snd_soc_component_disable_pin_unlocked() argument
169 snd_soc_component_get_dapm(component); in snd_soc_component_disable_pin_unlocked()
174 int snd_soc_component_nc_pin(struct snd_soc_component *component, in snd_soc_component_nc_pin() argument
178 snd_soc_component_get_dapm(component); in snd_soc_component_nc_pin()
183 int snd_soc_component_nc_pin_unlocked(struct snd_soc_component *component, in snd_soc_component_nc_pin_unlocked() argument
187 snd_soc_component_get_dapm(component); in snd_soc_component_nc_pin_unlocked()
192 int snd_soc_component_get_pin_status(struct snd_soc_component *component, in snd_soc_component_get_pin_status() argument
196 snd_soc_component_get_dapm(component); in snd_soc_component_get_pin_status()
201 int snd_soc_component_force_enable_pin(struct snd_soc_component *component, in snd_soc_component_force_enable_pin() argument
205 snd_soc_component_get_dapm(component); in snd_soc_component_force_enable_pin()
211 struct snd_soc_component *component, in snd_soc_component_force_enable_pin_unlocked() argument
215 snd_soc_component_get_dapm(component); in snd_soc_component_force_enable_pin_unlocked()
221 * snd_soc_component_set_jack - configure component jack.
222 * @component: COMPONENTs
228 int snd_soc_component_set_jack(struct snd_soc_component *component, in snd_soc_component_set_jack() argument
233 if (component->driver->set_jack) in snd_soc_component_set_jack()
234 ret = component->driver->set_jack(component, jack, data); in snd_soc_component_set_jack()
236 return soc_component_ret(component, ret); in snd_soc_component_set_jack()
240 int snd_soc_component_module_get(struct snd_soc_component *component, in snd_soc_component_module_get() argument
246 if (component->driver->module_get_upon_open == !!upon_open && in snd_soc_component_module_get()
247 !try_module_get(component->dev->driver->owner)) in snd_soc_component_module_get()
252 soc_component_mark_push(component, substream, module); in snd_soc_component_module_get()
254 return soc_component_ret(component, ret); in snd_soc_component_module_get()
257 void snd_soc_component_module_put(struct snd_soc_component *component, in snd_soc_component_module_put() argument
261 if (rollback && !soc_component_mark_match(component, substream, module)) in snd_soc_component_module_put()
264 if (component->driver->module_get_upon_open == !!upon_open) in snd_soc_component_module_put()
265 module_put(component->dev->driver->owner); in snd_soc_component_module_put()
268 soc_component_mark_pop(component, substream, module); in snd_soc_component_module_put()
271 int snd_soc_component_open(struct snd_soc_component *component, in snd_soc_component_open() argument
276 if (component->driver->open) in snd_soc_component_open()
277 ret = component->driver->open(component, substream); in snd_soc_component_open()
281 soc_component_mark_push(component, substream, open); in snd_soc_component_open()
283 return soc_component_ret(component, ret); in snd_soc_component_open()
286 int snd_soc_component_close(struct snd_soc_component *component, in snd_soc_component_close() argument
292 if (rollback && !soc_component_mark_match(component, substream, open)) in snd_soc_component_close()
295 if (component->driver->close) in snd_soc_component_close()
296 ret = component->driver->close(component, substream); in snd_soc_component_close()
299 soc_component_mark_pop(component, substream, open); in snd_soc_component_close()
301 return soc_component_ret(component, ret); in snd_soc_component_close()
304 void snd_soc_component_suspend(struct snd_soc_component *component) in snd_soc_component_suspend() argument
306 if (component->driver->suspend) in snd_soc_component_suspend()
307 component->driver->suspend(component); in snd_soc_component_suspend()
308 component->suspended = 1; in snd_soc_component_suspend()
311 void snd_soc_component_resume(struct snd_soc_component *component) in snd_soc_component_resume() argument
313 if (component->driver->resume) in snd_soc_component_resume()
314 component->driver->resume(component); in snd_soc_component_resume()
315 component->suspended = 0; in snd_soc_component_resume()
318 int snd_soc_component_is_suspended(struct snd_soc_component *component) in snd_soc_component_is_suspended() argument
320 return component->suspended; in snd_soc_component_is_suspended()
323 int snd_soc_component_probe(struct snd_soc_component *component) in snd_soc_component_probe() argument
327 if (component->driver->probe) in snd_soc_component_probe()
328 ret = component->driver->probe(component); in snd_soc_component_probe()
330 return soc_component_ret(component, ret); in snd_soc_component_probe()
333 void snd_soc_component_remove(struct snd_soc_component *component) in snd_soc_component_remove() argument
335 if (component->driver->remove) in snd_soc_component_remove()
336 component->driver->remove(component); in snd_soc_component_remove()
339 int snd_soc_component_of_xlate_dai_id(struct snd_soc_component *component, in snd_soc_component_of_xlate_dai_id() argument
344 if (component->driver->of_xlate_dai_id) in snd_soc_component_of_xlate_dai_id()
345 ret = component->driver->of_xlate_dai_id(component, ep); in snd_soc_component_of_xlate_dai_id()
347 return soc_component_ret(component, ret); in snd_soc_component_of_xlate_dai_id()
350 int snd_soc_component_of_xlate_dai_name(struct snd_soc_component *component, in snd_soc_component_of_xlate_dai_name() argument
354 if (component->driver->of_xlate_dai_name) in snd_soc_component_of_xlate_dai_name()
355 return component->driver->of_xlate_dai_name(component, in snd_soc_component_of_xlate_dai_name()
359 * the error just yet. If a device has more than one component, the in snd_soc_component_of_xlate_dai_name()
365 void snd_soc_component_setup_regmap(struct snd_soc_component *component) in snd_soc_component_setup_regmap() argument
367 int val_bytes = regmap_get_val_bytes(component->regmap); in snd_soc_component_setup_regmap()
371 component->val_bytes = val_bytes; in snd_soc_component_setup_regmap()
378 * component
379 * @component: The component for which to initialize the regmap instance
380 * @regmap: The regmap instance that should be used by the component
383 * associated with the component. Only use this if the regmap instance is not
384 * yet ready when the component is registered. The function must also be called
385 * before the first IO attempt of the component.
387 void snd_soc_component_init_regmap(struct snd_soc_component *component, in snd_soc_component_init_regmap() argument
390 component->regmap = regmap; in snd_soc_component_init_regmap()
391 snd_soc_component_setup_regmap(component); in snd_soc_component_init_regmap()
397 * component
398 * @component: The component for which to de-initialize the regmap instance
400 * Calls regmap_exit() on the regmap instance associated to the component and
401 * removes the regmap instance from the component.
406 void snd_soc_component_exit_regmap(struct snd_soc_component *component) in snd_soc_component_exit_regmap() argument
408 regmap_exit(component->regmap); in snd_soc_component_exit_regmap()
409 component->regmap = NULL; in snd_soc_component_exit_regmap()
416 struct snd_soc_component *component, in soc_component_read_no_lock() argument
422 if (component->regmap) in soc_component_read_no_lock()
423 ret = regmap_read(component->regmap, reg, &val); in soc_component_read_no_lock()
424 else if (component->driver->read) { in soc_component_read_no_lock()
426 val = component->driver->read(component, reg); in soc_component_read_no_lock()
432 return soc_component_ret(component, ret); in soc_component_read_no_lock()
439 * @component: Component to read from
444 unsigned int snd_soc_component_read(struct snd_soc_component *component, in snd_soc_component_read() argument
449 mutex_lock(&component->io_mutex); in snd_soc_component_read()
450 val = soc_component_read_no_lock(component, reg); in snd_soc_component_read()
451 mutex_unlock(&component->io_mutex); in snd_soc_component_read()
458 struct snd_soc_component *component, in soc_component_write_no_lock() argument
463 if (component->regmap) in soc_component_write_no_lock()
464 ret = regmap_write(component->regmap, reg, val); in soc_component_write_no_lock()
465 else if (component->driver->write) in soc_component_write_no_lock()
466 ret = component->driver->write(component, reg, val); in soc_component_write_no_lock()
468 return soc_component_ret(component, ret); in soc_component_write_no_lock()
473 * @component: Component to write to
479 int snd_soc_component_write(struct snd_soc_component *component, in snd_soc_component_write() argument
484 mutex_lock(&component->io_mutex); in snd_soc_component_write()
485 ret = soc_component_write_no_lock(component, reg, val); in snd_soc_component_write()
486 mutex_unlock(&component->io_mutex); in snd_soc_component_write()
493 struct snd_soc_component *component, unsigned int reg, in snd_soc_component_update_bits_legacy() argument
499 mutex_lock(&component->io_mutex); in snd_soc_component_update_bits_legacy()
501 old = soc_component_read_no_lock(component, reg); in snd_soc_component_update_bits_legacy()
506 ret = soc_component_write_no_lock(component, reg, new); in snd_soc_component_update_bits_legacy()
508 mutex_unlock(&component->io_mutex); in snd_soc_component_update_bits_legacy()
510 return soc_component_ret(component, ret); in snd_soc_component_update_bits_legacy()
515 * @component: Component to update
524 int snd_soc_component_update_bits(struct snd_soc_component *component, in snd_soc_component_update_bits() argument
530 if (component->regmap) in snd_soc_component_update_bits()
531 ret = regmap_update_bits_check(component->regmap, reg, mask, in snd_soc_component_update_bits()
534 ret = snd_soc_component_update_bits_legacy(component, reg, in snd_soc_component_update_bits()
538 return soc_component_ret(component, ret); in snd_soc_component_update_bits()
546 * @component: Component to update
560 int snd_soc_component_update_bits_async(struct snd_soc_component *component, in snd_soc_component_update_bits_async() argument
566 if (component->regmap) in snd_soc_component_update_bits_async()
567 ret = regmap_update_bits_check_async(component->regmap, reg, in snd_soc_component_update_bits_async()
570 ret = snd_soc_component_update_bits_legacy(component, reg, in snd_soc_component_update_bits_async()
574 return soc_component_ret(component, ret); in snd_soc_component_update_bits_async()
581 * @component: Component for which to wait
586 void snd_soc_component_async_complete(struct snd_soc_component *component) in snd_soc_component_async_complete() argument
588 if (component->regmap) in snd_soc_component_async_complete()
589 regmap_async_complete(component->regmap); in snd_soc_component_async_complete()
595 * @component: component
605 int snd_soc_component_test_bits(struct snd_soc_component *component, in snd_soc_component_test_bits() argument
610 old = snd_soc_component_read(component, reg); in snd_soc_component_test_bits()
619 struct snd_soc_component *component; in snd_soc_pcm_component_pointer() local
623 for_each_rtd_components(rtd, i, component) in snd_soc_pcm_component_pointer()
624 if (component->driver->pointer) in snd_soc_pcm_component_pointer()
625 return component->driver->pointer(component, substream); in snd_soc_pcm_component_pointer()
634 struct snd_soc_component *component; in snd_soc_pcm_component_ioctl() local
638 for_each_rtd_components(rtd, i, component) in snd_soc_pcm_component_ioctl()
639 if (component->driver->ioctl) in snd_soc_pcm_component_ioctl()
641 component, in snd_soc_pcm_component_ioctl()
642 component->driver->ioctl(component, in snd_soc_pcm_component_ioctl()
651 struct snd_soc_component *component; in snd_soc_pcm_component_sync_stop() local
654 for_each_rtd_components(rtd, i, component) { in snd_soc_pcm_component_sync_stop()
655 if (component->driver->sync_stop) { in snd_soc_pcm_component_sync_stop()
656 ret = component->driver->sync_stop(component, in snd_soc_pcm_component_sync_stop()
659 return soc_component_ret(component, ret); in snd_soc_pcm_component_sync_stop()
671 struct snd_soc_component *component; in snd_soc_pcm_component_copy_user() local
675 for_each_rtd_components(rtd, i, component) in snd_soc_pcm_component_copy_user()
676 if (component->driver->copy_user) in snd_soc_pcm_component_copy_user()
678 component, in snd_soc_pcm_component_copy_user()
679 component->driver->copy_user( in snd_soc_pcm_component_copy_user()
680 component, substream, channel, in snd_soc_pcm_component_copy_user()
690 struct snd_soc_component *component; in snd_soc_pcm_component_page() local
695 for_each_rtd_components(rtd, i, component) { in snd_soc_pcm_component_page()
696 if (component->driver->page) { in snd_soc_pcm_component_page()
697 page = component->driver->page(component, in snd_soc_pcm_component_page()
711 struct snd_soc_component *component; in snd_soc_pcm_component_mmap() local
715 for_each_rtd_components(rtd, i, component) in snd_soc_pcm_component_mmap()
716 if (component->driver->mmap) in snd_soc_pcm_component_mmap()
718 component, in snd_soc_pcm_component_mmap()
719 component->driver->mmap(component, in snd_soc_pcm_component_mmap()
727 struct snd_soc_component *component; in snd_soc_pcm_component_new() local
731 for_each_rtd_components(rtd, i, component) { in snd_soc_pcm_component_new()
732 if (component->driver->pcm_construct) { in snd_soc_pcm_component_new()
733 ret = component->driver->pcm_construct(component, rtd); in snd_soc_pcm_component_new()
735 return soc_component_ret(component, ret); in snd_soc_pcm_component_new()
744 struct snd_soc_component *component; in snd_soc_pcm_component_free() local
750 for_each_rtd_components(rtd, i, component) in snd_soc_pcm_component_free()
751 if (component->driver->pcm_destruct) in snd_soc_pcm_component_free()
752 component->driver->pcm_destruct(component, rtd->pcm); in snd_soc_pcm_component_free()
758 struct snd_soc_component *component; in snd_soc_pcm_component_prepare() local
761 for_each_rtd_components(rtd, i, component) { in snd_soc_pcm_component_prepare()
762 if (component->driver->prepare) { in snd_soc_pcm_component_prepare()
763 ret = component->driver->prepare(component, substream); in snd_soc_pcm_component_prepare()
765 return soc_component_ret(component, ret); in snd_soc_pcm_component_prepare()
777 struct snd_soc_component *component; in snd_soc_pcm_component_hw_params() local
780 for_each_rtd_components(rtd, i, component) { in snd_soc_pcm_component_hw_params()
781 if (component->driver->hw_params) { in snd_soc_pcm_component_hw_params()
782 ret = component->driver->hw_params(component, in snd_soc_pcm_component_hw_params()
785 *last = component; in snd_soc_pcm_component_hw_params()
786 return soc_component_ret(component, ret); in snd_soc_pcm_component_hw_params()
799 struct snd_soc_component *component; in snd_soc_pcm_component_hw_free() local
802 for_each_rtd_components(rtd, i, component) { in snd_soc_pcm_component_hw_free()
803 if (component == last) in snd_soc_pcm_component_hw_free()
806 if (component->driver->hw_free) { in snd_soc_pcm_component_hw_free()
807 ret = component->driver->hw_free(component, substream); in snd_soc_pcm_component_hw_free()
809 soc_component_ret(component, ret); in snd_soc_pcm_component_hw_free()
818 struct snd_soc_component *component; in snd_soc_pcm_component_trigger() local
821 for_each_rtd_components(rtd, i, component) { in snd_soc_pcm_component_trigger()
822 if (component->driver->trigger) { in snd_soc_pcm_component_trigger()
823 ret = component->driver->trigger(component, substream, cmd); in snd_soc_pcm_component_trigger()
825 return soc_component_ret(component, ret); in snd_soc_pcm_component_trigger()
835 struct snd_soc_component *component; in snd_soc_pcm_component_pm_runtime_get() local
838 for_each_rtd_components(rtd, i, component) { in snd_soc_pcm_component_pm_runtime_get()
839 ret = pm_runtime_get_sync(component->dev); in snd_soc_pcm_component_pm_runtime_get()
841 pm_runtime_put_noidle(component->dev); in snd_soc_pcm_component_pm_runtime_get()
842 return soc_component_ret(component, ret); in snd_soc_pcm_component_pm_runtime_get()
845 soc_component_mark_push(component, stream, pm); in snd_soc_pcm_component_pm_runtime_get()
854 struct snd_soc_component *component; in snd_soc_pcm_component_pm_runtime_put() local
857 for_each_rtd_components(rtd, i, component) { in snd_soc_pcm_component_pm_runtime_put()
858 if (rollback && !soc_component_mark_match(component, stream, pm)) in snd_soc_pcm_component_pm_runtime_put()
861 pm_runtime_mark_last_busy(component->dev); in snd_soc_pcm_component_pm_runtime_put()
862 pm_runtime_put_autosuspend(component->dev); in snd_soc_pcm_component_pm_runtime_put()
865 soc_component_mark_pop(component, stream, pm); in snd_soc_pcm_component_pm_runtime_put()