Lines Matching refs:component
3 // soc-component.c
18 static inline int _soc_component_ret(struct snd_soc_component *component,
32 dev_err(component->dev,
34 func, component->name, ret);
36 dev_err(component->dev,
38 func, component->name, reg, ret);
44 static inline int soc_component_field_shift(struct snd_soc_component *component,
48 dev_err(component->dev, "ASoC: error field mask is zero for %s\n",
49 component->name);
60 #define soc_component_mark_push(component, substream, tgt) ((component)->mark_##tgt = substream)
61 #define soc_component_mark_pop(component, substream, tgt) ((component)->mark_##tgt = NULL)
62 #define soc_component_mark_match(component, substream, tgt) ((component)->mark_##tgt == substream)
64 void snd_soc_component_set_aux(struct snd_soc_component *component,
67 component->init = (aux) ? aux->init : NULL;
70 int snd_soc_component_init(struct snd_soc_component *component)
74 if (component->init)
75 ret = component->init(component);
77 return soc_component_ret(component, ret);
82 * @component: COMPONENT
90 int snd_soc_component_set_sysclk(struct snd_soc_component *component,
96 if (component->driver->set_sysclk)
97 ret = component->driver->set_sysclk(component, clk_id, source,
100 return soc_component_ret(component, ret);
105 * snd_soc_component_set_pll - configure component PLL.
106 * @component: COMPONENT
114 int snd_soc_component_set_pll(struct snd_soc_component *component, int pll_id,
120 if (component->driver->set_pll)
121 ret = component->driver->set_pll(component, pll_id, source,
124 return soc_component_ret(component, ret);
128 void snd_soc_component_seq_notifier(struct snd_soc_component *component,
131 if (component->driver->seq_notifier)
132 component->driver->seq_notifier(component, type, subseq);
135 int snd_soc_component_stream_event(struct snd_soc_component *component,
140 if (component->driver->stream_event)
141 ret = component->driver->stream_event(component, event);
143 return soc_component_ret(component, ret);
146 int snd_soc_component_set_bias_level(struct snd_soc_component *component,
151 if (component->driver->set_bias_level)
152 ret = component->driver->set_bias_level(component, level);
154 return soc_component_ret(component, ret);
157 int snd_soc_component_enable_pin(struct snd_soc_component *component,
161 snd_soc_component_get_dapm(component);
166 int snd_soc_component_enable_pin_unlocked(struct snd_soc_component *component,
170 snd_soc_component_get_dapm(component);
175 int snd_soc_component_disable_pin(struct snd_soc_component *component,
179 snd_soc_component_get_dapm(component);
184 int snd_soc_component_disable_pin_unlocked(struct snd_soc_component *component,
188 snd_soc_component_get_dapm(component);
193 int snd_soc_component_nc_pin(struct snd_soc_component *component,
197 snd_soc_component_get_dapm(component);
202 int snd_soc_component_nc_pin_unlocked(struct snd_soc_component *component,
206 snd_soc_component_get_dapm(component);
211 int snd_soc_component_get_pin_status(struct snd_soc_component *component,
215 snd_soc_component_get_dapm(component);
220 int snd_soc_component_force_enable_pin(struct snd_soc_component *component,
224 snd_soc_component_get_dapm(component);
230 struct snd_soc_component *component,
234 snd_soc_component_get_dapm(component);
239 int snd_soc_component_notify_control(struct snd_soc_component *component,
246 if (component->name_prefix)
247 snprintf(name, ARRAY_SIZE(name), "%s %s", component->name_prefix, ctl);
251 kctl = snd_soc_card_get_kcontrol(component->card, name);
253 return soc_component_ret(component, -EINVAL);
255 snd_ctl_notify(component->card->snd_card,
263 * snd_soc_component_set_jack - configure component jack.
264 * @component: COMPONENTs
270 int snd_soc_component_set_jack(struct snd_soc_component *component,
275 if (component->driver->set_jack)
276 ret = component->driver->set_jack(component, jack, data);
278 return soc_component_ret(component, ret);
284 * @component: COMPONENTs
286 * Returns the jack type of the component
291 struct snd_soc_component *component)
295 if (component->driver->get_jack_type)
296 ret = component->driver->get_jack_type(component);
298 return soc_component_ret(component, ret);
302 int snd_soc_component_module_get(struct snd_soc_component *component,
307 if (component->driver->module_get_upon_open == !!upon_open &&
308 !try_module_get(component->dev->driver->owner))
313 soc_component_mark_push(component, mark, module);
315 return soc_component_ret(component, ret);
318 void snd_soc_component_module_put(struct snd_soc_component *component,
321 if (rollback && !soc_component_mark_match(component, mark, module))
324 if (component->driver->module_get_upon_open == !!upon_open)
325 module_put(component->dev->driver->owner);
328 soc_component_mark_pop(component, mark, module);
331 int snd_soc_component_open(struct snd_soc_component *component,
336 if (component->driver->open)
337 ret = component->driver->open(component, substream);
341 soc_component_mark_push(component, substream, open);
343 return soc_component_ret(component, ret);
346 int snd_soc_component_close(struct snd_soc_component *component,
352 if (rollback && !soc_component_mark_match(component, substream, open))
355 if (component->driver->close)
356 ret = component->driver->close(component, substream);
359 soc_component_mark_pop(component, substream, open);
361 return soc_component_ret(component, ret);
364 void snd_soc_component_suspend(struct snd_soc_component *component)
366 if (component->driver->suspend)
367 component->driver->suspend(component);
368 component->suspended = 1;
371 void snd_soc_component_resume(struct snd_soc_component *component)
373 if (component->driver->resume)
374 component->driver->resume(component);
375 component->suspended = 0;
378 int snd_soc_component_is_suspended(struct snd_soc_component *component)
380 return component->suspended;
383 int snd_soc_component_probe(struct snd_soc_component *component)
387 if (component->driver->probe)
388 ret = component->driver->probe(component);
390 return soc_component_ret(component, ret);
393 void snd_soc_component_remove(struct snd_soc_component *component)
395 if (component->driver->remove)
396 component->driver->remove(component);
399 int snd_soc_component_of_xlate_dai_id(struct snd_soc_component *component,
404 if (component->driver->of_xlate_dai_id)
405 ret = component->driver->of_xlate_dai_id(component, ep);
407 return soc_component_ret(component, ret);
410 int snd_soc_component_of_xlate_dai_name(struct snd_soc_component *component,
414 if (component->driver->of_xlate_dai_name)
415 return component->driver->of_xlate_dai_name(component,
419 * the error just yet. If a device has more than one component, the
425 void snd_soc_component_setup_regmap(struct snd_soc_component *component)
427 int val_bytes = regmap_get_val_bytes(component->regmap);
431 component->val_bytes = val_bytes;
438 * component
439 * @component: The component for which to initialize the regmap instance
440 * @regmap: The regmap instance that should be used by the component
443 * associated with the component. Only use this if the regmap instance is not
444 * yet ready when the component is registered. The function must also be called
445 * before the first IO attempt of the component.
447 void snd_soc_component_init_regmap(struct snd_soc_component *component,
450 component->regmap = regmap;
451 snd_soc_component_setup_regmap(component);
457 * component
458 * @component: The component for which to de-initialize the regmap instance
460 * Calls regmap_exit() on the regmap instance associated to the component and
461 * removes the regmap instance from the component.
466 void snd_soc_component_exit_regmap(struct snd_soc_component *component)
468 regmap_exit(component->regmap);
469 component->regmap = NULL;
475 int snd_soc_component_compr_open(struct snd_soc_component *component,
480 if (component->driver->compress_ops &&
481 component->driver->compress_ops->open)
482 ret = component->driver->compress_ops->open(component, cstream);
486 soc_component_mark_push(component, cstream, compr_open);
488 return soc_component_ret(component, ret);
492 void snd_soc_component_compr_free(struct snd_soc_component *component,
496 if (rollback && !soc_component_mark_match(component, cstream, compr_open))
499 if (component->driver->compress_ops &&
500 component->driver->compress_ops->free)
501 component->driver->compress_ops->free(component, cstream);
504 soc_component_mark_pop(component, cstream, compr_open);
511 struct snd_soc_component *component;
514 for_each_rtd_components(rtd, i, component) {
515 if (component->driver->compress_ops &&
516 component->driver->compress_ops->trigger) {
517 ret = component->driver->compress_ops->trigger(
518 component, cstream, cmd);
520 return soc_component_ret(component, ret);
532 struct snd_soc_component *component;
535 for_each_rtd_components(rtd, i, component) {
536 if (component->driver->compress_ops &&
537 component->driver->compress_ops->set_params) {
538 ret = component->driver->compress_ops->set_params(
539 component, cstream, params);
541 return soc_component_ret(component, ret);
553 struct snd_soc_component *component;
556 for_each_rtd_components(rtd, i, component) {
557 if (component->driver->compress_ops &&
558 component->driver->compress_ops->get_params) {
559 ret = component->driver->compress_ops->get_params(
560 component, cstream, params);
561 return soc_component_ret(component, ret);
573 struct snd_soc_component *component;
578 for_each_rtd_components(rtd, i, component) {
579 if (component->driver->compress_ops &&
580 component->driver->compress_ops->get_caps) {
581 ret = component->driver->compress_ops->get_caps(
582 component, cstream, caps);
589 return soc_component_ret(component, ret);
597 struct snd_soc_component *component;
602 for_each_rtd_components(rtd, i, component) {
603 if (component->driver->compress_ops &&
604 component->driver->compress_ops->get_codec_caps) {
605 ret = component->driver->compress_ops->get_codec_caps(
606 component, cstream, codec);
613 return soc_component_ret(component, ret);
620 struct snd_soc_component *component;
623 for_each_rtd_components(rtd, i, component) {
624 if (component->driver->compress_ops &&
625 component->driver->compress_ops->ack) {
626 ret = component->driver->compress_ops->ack(
627 component, cstream, bytes);
629 return soc_component_ret(component, ret);
641 struct snd_soc_component *component;
644 for_each_rtd_components(rtd, i, component) {
645 if (component->driver->compress_ops &&
646 component->driver->compress_ops->pointer) {
647 ret = component->driver->compress_ops->pointer(
648 component, cstream, tstamp);
649 return soc_component_ret(component, ret);
661 struct snd_soc_component *component;
666 for_each_rtd_components(rtd, i, component) {
667 if (component->driver->compress_ops &&
668 component->driver->compress_ops->copy) {
669 ret = component->driver->compress_ops->copy(
670 component, cstream, buf, count);
677 return soc_component_ret(component, ret);
685 struct snd_soc_component *component;
688 for_each_rtd_components(rtd, i, component) {
689 if (component->driver->compress_ops &&
690 component->driver->compress_ops->set_metadata) {
691 ret = component->driver->compress_ops->set_metadata(
692 component, cstream, metadata);
694 return soc_component_ret(component, ret);
706 struct snd_soc_component *component;
709 for_each_rtd_components(rtd, i, component) {
710 if (component->driver->compress_ops &&
711 component->driver->compress_ops->get_metadata) {
712 ret = component->driver->compress_ops->get_metadata(
713 component, cstream, metadata);
714 return soc_component_ret(component, ret);
723 struct snd_soc_component *component,
729 if (component->regmap)
730 ret = regmap_read(component->regmap, reg, &val);
731 else if (component->driver->read) {
733 val = component->driver->read(component, reg);
739 return soc_component_ret_reg_rw(component, ret, reg);
746 * @component: Component to read from
751 unsigned int snd_soc_component_read(struct snd_soc_component *component,
756 mutex_lock(&component->io_mutex);
757 val = soc_component_read_no_lock(component, reg);
758 mutex_unlock(&component->io_mutex);
765 struct snd_soc_component *component,
770 if (component->regmap)
771 ret = regmap_write(component->regmap, reg, val);
772 else if (component->driver->write)
773 ret = component->driver->write(component, reg, val);
775 return soc_component_ret_reg_rw(component, ret, reg);
780 * @component: Component to write to
786 int snd_soc_component_write(struct snd_soc_component *component,
791 mutex_lock(&component->io_mutex);
792 ret = soc_component_write_no_lock(component, reg, val);
793 mutex_unlock(&component->io_mutex);
800 struct snd_soc_component *component, unsigned int reg,
806 mutex_lock(&component->io_mutex);
808 old = soc_component_read_no_lock(component, reg);
813 ret = soc_component_write_no_lock(component, reg, new);
815 mutex_unlock(&component->io_mutex);
817 return soc_component_ret_reg_rw(component, ret, reg);
822 * @component: Component to update
831 int snd_soc_component_update_bits(struct snd_soc_component *component,
837 if (component->regmap)
838 ret = regmap_update_bits_check(component->regmap, reg, mask,
841 ret = snd_soc_component_update_bits_legacy(component, reg,
845 return soc_component_ret_reg_rw(component, ret, reg);
853 * @component: Component to update
867 int snd_soc_component_update_bits_async(struct snd_soc_component *component,
873 if (component->regmap)
874 ret = regmap_update_bits_check_async(component->regmap, reg,
877 ret = snd_soc_component_update_bits_legacy(component, reg,
881 return soc_component_ret_reg_rw(component, ret, reg);
888 * @component: Component to read from
894 unsigned int snd_soc_component_read_field(struct snd_soc_component *component,
899 val = snd_soc_component_read(component, reg);
901 val = (val & mask) >> soc_component_field_shift(component, mask);
909 * @component: Component to write to
916 int snd_soc_component_write_field(struct snd_soc_component *component,
921 val = (val << soc_component_field_shift(component, mask)) & mask;
923 return snd_soc_component_update_bits(component, reg, mask, val);
929 * @component: Component for which to wait
934 void snd_soc_component_async_complete(struct snd_soc_component *component)
936 if (component->regmap)
937 regmap_async_complete(component->regmap);
943 * @component: component
953 int snd_soc_component_test_bits(struct snd_soc_component *component,
958 old = snd_soc_component_read(component, reg);
967 struct snd_soc_component *component;
971 for_each_rtd_components(rtd, i, component)
972 if (component->driver->pointer)
973 return component->driver->pointer(component, substream);
979 struct snd_soc_component *component)
985 if (dai->component == component)
997 struct snd_soc_component *component;
1007 for_each_rtd_components(rtd, i, component) {
1008 if (!component->driver->delay)
1011 delay = component->driver->delay(component, substream);
1013 if (snd_soc_component_is_codec_on_rtd(rtd, component))
1024 struct snd_soc_component *component;
1028 for_each_rtd_components(rtd, i, component)
1029 if (component->driver->ioctl)
1031 component,
1032 component->driver->ioctl(component,
1041 struct snd_soc_component *component;
1044 for_each_rtd_components(rtd, i, component) {
1045 if (component->driver->sync_stop) {
1046 ret = component->driver->sync_stop(component,
1049 return soc_component_ret(component, ret);
1061 struct snd_soc_component *component;
1065 for_each_rtd_components(rtd, i, component)
1066 if (component->driver->copy)
1067 return soc_component_ret(component,
1068 component->driver->copy(component, substream,
1078 struct snd_soc_component *component;
1083 for_each_rtd_components(rtd, i, component) {
1084 if (component->driver->page) {
1085 page = component->driver->page(component,
1099 struct snd_soc_component *component;
1103 for_each_rtd_components(rtd, i, component)
1104 if (component->driver->mmap)
1106 component,
1107 component->driver->mmap(component,
1115 struct snd_soc_component *component;
1119 for_each_rtd_components(rtd, i, component) {
1120 if (component->driver->pcm_construct) {
1121 ret = component->driver->pcm_construct(component, rtd);
1123 return soc_component_ret(component, ret);
1132 struct snd_soc_component *component;
1138 for_each_rtd_components(rtd, i, component)
1139 if (component->driver->pcm_destruct)
1140 component->driver->pcm_destruct(component, rtd->pcm);
1146 struct snd_soc_component *component;
1149 for_each_rtd_components(rtd, i, component) {
1150 if (component->driver->prepare) {
1151 ret = component->driver->prepare(component, substream);
1153 return soc_component_ret(component, ret);
1164 struct snd_soc_component *component;
1167 for_each_rtd_components(rtd, i, component) {
1168 if (component->driver->hw_params) {
1169 ret = component->driver->hw_params(component,
1172 return soc_component_ret(component, ret);
1175 soc_component_mark_push(component, substream, hw_params);
1185 struct snd_soc_component *component;
1188 for_each_rtd_components(rtd, i, component) {
1189 if (rollback && !soc_component_mark_match(component, substream, hw_params))
1192 if (component->driver->hw_free) {
1193 ret = component->driver->hw_free(component, substream);
1195 soc_component_ret(component, ret);
1199 soc_component_mark_pop(component, substream, hw_params);
1203 static int soc_component_trigger(struct snd_soc_component *component,
1209 if (component->driver->trigger)
1210 ret = component->driver->trigger(component, substream, cmd);
1212 return soc_component_ret(component, ret);
1219 struct snd_soc_component *component;
1226 for_each_rtd_components(rtd, i, component) {
1227 ret = soc_component_trigger(component, substream, cmd);
1230 soc_component_mark_push(component, substream, trigger);
1236 for_each_rtd_components(rtd, i, component) {
1237 if (rollback && !soc_component_mark_match(component, substream, trigger))
1240 r = soc_component_trigger(component, substream, cmd);
1243 soc_component_mark_pop(component, substream, trigger);
1253 struct snd_soc_component *component;
1256 for_each_rtd_components(rtd, i, component) {
1257 int ret = pm_runtime_get_sync(component->dev);
1259 pm_runtime_put_noidle(component->dev);
1260 return soc_component_ret(component, ret);
1263 soc_component_mark_push(component, stream, pm);
1272 struct snd_soc_component *component;
1275 for_each_rtd_components(rtd, i, component) {
1276 if (rollback && !soc_component_mark_match(component, stream, pm))
1279 pm_runtime_mark_last_busy(component->dev);
1280 pm_runtime_put_autosuspend(component->dev);
1283 soc_component_mark_pop(component, stream, pm);
1290 struct snd_soc_component *component;
1294 for_each_rtd_components(rtd, i, component)
1295 if (component->driver->ack)
1296 return component->driver->ack(component, substream);