• Home
  • Raw
  • Download

Lines Matching +full:stream +full:- +full:match +full:- +full:mask

1 // SPDX-License-Identifier: GPL-2.0
3 // soc-component.c
5 // Copyright 2009-2011 Wolfson Microelectronics PLC.
25 case -EPROBE_DEFER: in _soc_component_ret()
26 case -ENOTSUPP: in _soc_component_ret()
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)
42 #define soc_component_mark_pop(component, substream, tgt) ((component)->mark_##tgt = NULL)
43 #define soc_component_mark_match(component, substream, tgt) ((component)->mark_##tgt == substream)
48 component->init = (aux) ? aux->init : NULL; in snd_soc_component_set_aux()
55 if (component->init) in snd_soc_component_init()
56 ret = component->init(component); in snd_soc_component_init()
62 * snd_soc_component_set_sysclk - configure COMPONENT system or master clock.
67 * @dir: new clock direction - input/output.
75 int ret = -ENOTSUPP; in snd_soc_component_set_sysclk()
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()
86 * snd_soc_component_set_pll - configure component PLL.
99 int ret = -EINVAL; in snd_soc_component_set_pll()
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()
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()
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()
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()
221 * snd_soc_component_set_jack - configure component jack.
231 int ret = -ENOTSUPP; in snd_soc_component_set_jack()
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()
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()
248 ret = -ENODEV; in snd_soc_component_module_get()
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()
276 if (component->driver->open) in snd_soc_component_open()
277 ret = component->driver->open(component, substream); in snd_soc_component_open()
295 if (component->driver->close) in snd_soc_component_close()
296 ret = component->driver->close(component, substream); in snd_soc_component_close()
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()
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()
320 return component->suspended; in snd_soc_component_is_suspended()
327 if (component->driver->probe) in snd_soc_component_probe()
328 ret = component->driver->probe(component); in snd_soc_component_probe()
335 if (component->driver->remove) in snd_soc_component_remove()
336 component->driver->remove(component); in snd_soc_component_remove()
342 int ret = -ENOTSUPP; in snd_soc_component_of_xlate_dai_id()
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()
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()
360 * first may not match and we don't want spam the log with this. in snd_soc_component_of_xlate_dai_name()
362 return -ENOTSUPP; in snd_soc_component_of_xlate_dai_name()
367 int val_bytes = regmap_get_val_bytes(component->regmap); in snd_soc_component_setup_regmap()
369 /* Errors are legitimate for non-integer byte multiples */ in snd_soc_component_setup_regmap()
371 component->val_bytes = val_bytes; in snd_soc_component_setup_regmap()
377 * snd_soc_component_init_regmap() - Initialize regmap instance for the
390 component->regmap = regmap; in snd_soc_component_init_regmap()
396 * snd_soc_component_exit_regmap() - De-initialize regmap instance for the
398 * @component: The component for which to de-initialize the regmap instance
408 regmap_exit(component->regmap); in snd_soc_component_exit_regmap()
409 component->regmap = NULL; in snd_soc_component_exit_regmap()
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()
429 ret = -EIO; in soc_component_read_no_lock()
438 * snd_soc_component_read() - Read register value
449 mutex_lock(&component->io_mutex); in snd_soc_component_read()
451 mutex_unlock(&component->io_mutex); in snd_soc_component_read()
461 int ret = -EIO; in soc_component_write_no_lock()
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()
472 * snd_soc_component_write() - Write register value
484 mutex_lock(&component->io_mutex); in snd_soc_component_write()
486 mutex_unlock(&component->io_mutex); in snd_soc_component_write()
494 unsigned int mask, unsigned int val, bool *change) in snd_soc_component_update_bits_legacy() argument
499 mutex_lock(&component->io_mutex); in snd_soc_component_update_bits_legacy()
503 new = (old & ~mask) | (val & mask); in snd_soc_component_update_bits_legacy()
508 mutex_unlock(&component->io_mutex); in snd_soc_component_update_bits_legacy()
514 * snd_soc_component_update_bits() - Perform read/modify/write cycle
517 * @mask: Mask that specifies which bits to update
518 * @val: New value for the bits specified by mask
525 unsigned int reg, unsigned int mask, unsigned int val) 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()
535 mask, val, &change); in snd_soc_component_update_bits()
544 * snd_soc_component_update_bits_async() - Perform asynchronous
548 * @mask: Mask that specifies which bits to update
549 * @val: New value for the bits specified by mask
561 unsigned int reg, unsigned int mask, unsigned int val) 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()
568 mask, val, &change); in snd_soc_component_update_bits_async()
571 mask, val, &change); in snd_soc_component_update_bits_async()
580 * snd_soc_component_async_complete() - Ensure asynchronous I/O has completed
588 if (component->regmap) in snd_soc_component_async_complete()
589 regmap_async_complete(component->regmap); in snd_soc_component_async_complete()
594 * snd_soc_component_test_bits - Test register for change
597 * @mask: Mask that specifies which bits to test
606 unsigned int reg, unsigned int mask, unsigned int value) in snd_soc_component_test_bits() argument
611 new = (old & ~mask) | value; in snd_soc_component_test_bits()
624 if (component->driver->pointer) in snd_soc_pcm_component_pointer()
625 return component->driver->pointer(component, substream); in snd_soc_pcm_component_pointer()
639 if (component->driver->ioctl) in snd_soc_pcm_component_ioctl()
642 component->driver->ioctl(component, in snd_soc_pcm_component_ioctl()
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()
676 if (component->driver->copy_user) in snd_soc_pcm_component_copy_user()
679 component->driver->copy_user( in snd_soc_pcm_component_copy_user()
683 return -EINVAL; in snd_soc_pcm_component_copy_user()
696 if (component->driver->page) { in snd_soc_pcm_component_page()
697 page = component->driver->page(component, in snd_soc_pcm_component_page()
716 if (component->driver->mmap) in snd_soc_pcm_component_mmap()
719 component->driver->mmap(component, in snd_soc_pcm_component_mmap()
722 return -EINVAL; in snd_soc_pcm_component_mmap()
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()
747 if (!rtd->pcm) 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()
762 if (component->driver->prepare) { in snd_soc_pcm_component_prepare()
763 ret = component->driver->prepare(component, substream); in snd_soc_pcm_component_prepare()
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()
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()
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()
833 void *stream) in snd_soc_pcm_component_pm_runtime_get() argument
839 ret = pm_runtime_get_sync(component->dev); in snd_soc_pcm_component_pm_runtime_get()
840 if (ret < 0 && ret != -EACCES) { in snd_soc_pcm_component_pm_runtime_get()
841 pm_runtime_put_noidle(component->dev); in snd_soc_pcm_component_pm_runtime_get()
844 /* mark stream if succeeded */ in snd_soc_pcm_component_pm_runtime_get()
845 soc_component_mark_push(component, stream, pm); in snd_soc_pcm_component_pm_runtime_get()
852 void *stream, int rollback) in snd_soc_pcm_component_pm_runtime_put() argument
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()
864 /* remove marked stream */ in snd_soc_pcm_component_pm_runtime_put()
865 soc_component_mark_pop(component, stream, pm); in snd_soc_pcm_component_pm_runtime_put()