Lines Matching full:component

3 // soc-component.c
17 static inline int _soc_component_ret(struct snd_soc_component *component, const char *func, int ret)
19 return snd_soc_ret(component->dev, ret,
20 "at %s() on %s\n", func, component->name);
24 static inline int _soc_component_ret_reg_rw(struct snd_soc_component *component,
27 return snd_soc_ret(component->dev, ret,
29 func, component->name, reg);
32 static inline int soc_component_field_shift(struct snd_soc_component *component,
36 dev_err(component->dev, "ASoC: error field mask is zero for %s\n",
37 component->name);
48 #define soc_component_mark_push(component, substream, tgt) ((component)->mark_##tgt = substream)
49 #define soc_component_mark_pop(component, tgt) ((component)->mark_##tgt = NULL)
50 #define soc_component_mark_match(component, substream, tgt) ((component)->mark_##tgt == substream)
52 void snd_soc_component_set_aux(struct snd_soc_component *component,
55 component->init = (aux) ? aux->init : NULL;
58 int snd_soc_component_init(struct snd_soc_component *component)
62 if (component->init)
63 ret = component->init(component);
65 return soc_component_ret(component, ret);
69 * snd_soc_component_set_sysclk - configure COMPONENT system or master clock.
70 * @component: COMPONENT
78 int snd_soc_component_set_sysclk(struct snd_soc_component *component,
84 if (component->driver->set_sysclk)
85 ret = component->driver->set_sysclk(component, clk_id, source,
88 return soc_component_ret(component, ret);
93 * snd_soc_component_set_pll - configure component PLL.
94 * @component: COMPONENT
102 int snd_soc_component_set_pll(struct snd_soc_component *component, int pll_id,
108 if (component->driver->set_pll)
109 ret = component->driver->set_pll(component, pll_id, source,
112 return soc_component_ret(component, ret);
116 void snd_soc_component_seq_notifier(struct snd_soc_component *component,
119 if (component->driver->seq_notifier)
120 component->driver->seq_notifier(component, type, subseq);
123 int snd_soc_component_stream_event(struct snd_soc_component *component,
128 if (component->driver->stream_event)
129 ret = component->driver->stream_event(component, event);
131 return soc_component_ret(component, ret);
134 int snd_soc_component_set_bias_level(struct snd_soc_component *component,
139 if (component->driver->set_bias_level)
140 ret = component->driver->set_bias_level(component, level);
142 return soc_component_ret(component, ret);
145 int snd_soc_component_enable_pin(struct snd_soc_component *component,
149 snd_soc_component_get_dapm(component);
154 int snd_soc_component_enable_pin_unlocked(struct snd_soc_component *component,
158 snd_soc_component_get_dapm(component);
163 int snd_soc_component_disable_pin(struct snd_soc_component *component,
167 snd_soc_component_get_dapm(component);
172 int snd_soc_component_disable_pin_unlocked(struct snd_soc_component *component,
176 snd_soc_component_get_dapm(component);
181 int snd_soc_component_nc_pin(struct snd_soc_component *component,
185 snd_soc_component_get_dapm(component);
190 int snd_soc_component_nc_pin_unlocked(struct snd_soc_component *component,
194 snd_soc_component_get_dapm(component);
199 int snd_soc_component_get_pin_status(struct snd_soc_component *component,
203 snd_soc_component_get_dapm(component);
208 int snd_soc_component_force_enable_pin(struct snd_soc_component *component,
212 snd_soc_component_get_dapm(component);
218 struct snd_soc_component *component,
222 snd_soc_component_get_dapm(component);
227 static void soc_get_kcontrol_name(struct snd_soc_component *component,
231 if (component->name_prefix)
232 snprintf(buf, size, "%s %s", component->name_prefix, ctl);
237 struct snd_kcontrol *snd_soc_component_get_kcontrol(struct snd_soc_component *component,
242 soc_get_kcontrol_name(component, name, ARRAY_SIZE(name), ctl);
244 return snd_soc_card_get_kcontrol(component->card, name);
248 int snd_soc_component_notify_control(struct snd_soc_component *component,
253 kctl = snd_soc_component_get_kcontrol(component, ctl);
255 return soc_component_ret(component, -EINVAL);
257 snd_ctl_notify(component->card->snd_card,
265 * snd_soc_component_set_jack - configure component jack.
266 * @component: COMPONENTs
272 int snd_soc_component_set_jack(struct snd_soc_component *component,
277 if (component->driver->set_jack)
278 ret = component->driver->set_jack(component, jack, data);
280 return soc_component_ret(component, ret);
286 * @component: COMPONENTs
288 * Returns the jack type of the component
293 struct snd_soc_component *component)
297 if (component->driver->get_jack_type)
298 ret = component->driver->get_jack_type(component);
300 return soc_component_ret(component, ret);
304 int snd_soc_component_module_get(struct snd_soc_component *component,
309 if (component->driver->module_get_upon_open == !!upon_open &&
310 !try_module_get(component->dev->driver->owner))
315 soc_component_mark_push(component, mark, module);
317 return soc_component_ret(component, ret);
320 void snd_soc_component_module_put(struct snd_soc_component *component,
323 if (rollback && !soc_component_mark_match(component, mark, module))
326 if (component->driver->module_get_upon_open == !!upon_open)
327 module_put(component->dev->driver->owner);
330 soc_component_mark_pop(component, module);
333 int snd_soc_component_open(struct snd_soc_component *component,
338 if (component->driver->open)
339 ret = component->driver->open(component, substream);
343 soc_component_mark_push(component, substream, open);
345 return soc_component_ret(component, ret);
348 int snd_soc_component_close(struct snd_soc_component *component,
354 if (rollback && !soc_component_mark_match(component, substream, open))
357 if (component->driver->close)
358 ret = component->driver->close(component, substream);
361 soc_component_mark_pop(component, open);
363 return soc_component_ret(component, ret);
366 void snd_soc_component_suspend(struct snd_soc_component *component)
368 if (component->driver->suspend)
369 component->driver->suspend(component);
370 component->suspended = 1;
373 void snd_soc_component_resume(struct snd_soc_component *component)
375 if (component->driver->resume)
376 component->driver->resume(component);
377 component->suspended = 0;
380 int snd_soc_component_is_suspended(struct snd_soc_component *component)
382 return component->suspended;
385 int snd_soc_component_probe(struct snd_soc_component *component)
389 if (component->driver->probe)
390 ret = component->driver->probe(component);
392 return soc_component_ret(component, ret);
395 void snd_soc_component_remove(struct snd_soc_component *component)
397 if (component->driver->remove)
398 component->driver->remove(component);
401 int snd_soc_component_of_xlate_dai_id(struct snd_soc_component *component,
406 if (component->driver->of_xlate_dai_id)
407 ret = component->driver->of_xlate_dai_id(component, ep);
409 return soc_component_ret(component, ret);
412 int snd_soc_component_of_xlate_dai_name(struct snd_soc_component *component,
416 if (component->driver->of_xlate_dai_name)
417 return component->driver->of_xlate_dai_name(component,
421 * the error just yet. If a device has more than one component, the
427 void snd_soc_component_setup_regmap(struct snd_soc_component *component)
429 int val_bytes = regmap_get_val_bytes(component->regmap);
433 component->val_bytes = val_bytes;
440 * component
441 * @component: The component for which to initialize the regmap instance
442 * @regmap: The regmap instance that should be used by the component
445 * associated with the component. Only use this if the regmap instance is not
446 * yet ready when the component is registered. The function must also be called
447 * before the first IO attempt of the component.
449 void snd_soc_component_init_regmap(struct snd_soc_component *component,
452 component->regmap = regmap;
453 snd_soc_component_setup_regmap(component);
459 * component
460 * @component: The component for which to de-initialize the regmap instance
462 * Calls regmap_exit() on the regmap instance associated to the component and
463 * removes the regmap instance from the component.
468 void snd_soc_component_exit_regmap(struct snd_soc_component *component)
470 regmap_exit(component->regmap);
471 component->regmap = NULL;
477 int snd_soc_component_compr_open(struct snd_soc_component *component,
482 if (component->driver->compress_ops &&
483 component->driver->compress_ops->open)
484 ret = component->driver->compress_ops->open(component, cstream);
488 soc_component_mark_push(component, cstream, compr_open);
490 return soc_component_ret(component, ret);
494 void snd_soc_component_compr_free(struct snd_soc_component *component,
498 if (rollback && !soc_component_mark_match(component, cstream, compr_open))
501 if (component->driver->compress_ops &&
502 component->driver->compress_ops->free)
503 component->driver->compress_ops->free(component, cstream);
506 soc_component_mark_pop(component, compr_open);
513 struct snd_soc_component *component;
516 for_each_rtd_components(rtd, i, component) {
517 if (component->driver->compress_ops &&
518 component->driver->compress_ops->trigger) {
519 ret = component->driver->compress_ops->trigger(
520 component, cstream, cmd);
522 return soc_component_ret(component, ret);
534 struct snd_soc_component *component;
537 for_each_rtd_components(rtd, i, component) {
538 if (component->driver->compress_ops &&
539 component->driver->compress_ops->set_params) {
540 ret = component->driver->compress_ops->set_params(
541 component, cstream, params);
543 return soc_component_ret(component, ret);
555 struct snd_soc_component *component;
558 for_each_rtd_components(rtd, i, component) {
559 if (component->driver->compress_ops &&
560 component->driver->compress_ops->get_params) {
561 ret = component->driver->compress_ops->get_params(
562 component, cstream, params);
563 return soc_component_ret(component, ret);
575 struct snd_soc_component *component;
580 for_each_rtd_components(rtd, i, component) {
581 if (component->driver->compress_ops &&
582 component->driver->compress_ops->get_caps) {
583 ret = component->driver->compress_ops->get_caps(
584 component, cstream, caps);
591 return soc_component_ret(component, ret);
599 struct snd_soc_component *component;
604 for_each_rtd_components(rtd, i, component) {
605 if (component->driver->compress_ops &&
606 component->driver->compress_ops->get_codec_caps) {
607 ret = component->driver->compress_ops->get_codec_caps(
608 component, cstream, codec);
615 return soc_component_ret(component, ret);
622 struct snd_soc_component *component;
625 for_each_rtd_components(rtd, i, component) {
626 if (component->driver->compress_ops &&
627 component->driver->compress_ops->ack) {
628 ret = component->driver->compress_ops->ack(
629 component, cstream, bytes);
631 return soc_component_ret(component, ret);
643 struct snd_soc_component *component;
646 for_each_rtd_components(rtd, i, component) {
647 if (component->driver->compress_ops &&
648 component->driver->compress_ops->pointer) {
649 ret = component->driver->compress_ops->pointer(
650 component, cstream, tstamp);
651 return soc_component_ret(component, ret);
663 struct snd_soc_component *component;
668 for_each_rtd_components(rtd, i, component) {
669 if (component->driver->compress_ops &&
670 component->driver->compress_ops->copy) {
671 ret = component->driver->compress_ops->copy(
672 component, cstream, buf, count);
679 return soc_component_ret(component, ret);
687 struct snd_soc_component *component;
690 for_each_rtd_components(rtd, i, component) {
691 if (component->driver->compress_ops &&
692 component->driver->compress_ops->set_metadata) {
693 ret = component->driver->compress_ops->set_metadata(
694 component, cstream, metadata);
696 return soc_component_ret(component, ret);
708 struct snd_soc_component *component;
711 for_each_rtd_components(rtd, i, component) {
712 if (component->driver->compress_ops &&
713 component->driver->compress_ops->get_metadata) {
714 ret = component->driver->compress_ops->get_metadata(
715 component, cstream, metadata);
716 return soc_component_ret(component, ret);
725 struct snd_soc_component *component,
731 if (component->regmap)
732 ret = regmap_read(component->regmap, reg, &val);
733 else if (component->driver->read) {
735 val = component->driver->read(component, reg);
741 return soc_component_ret_reg_rw(component, ret, reg);
748 * @component: Component to read from
753 unsigned int snd_soc_component_read(struct snd_soc_component *component,
758 mutex_lock(&component->io_mutex);
759 val = soc_component_read_no_lock(component, reg);
760 mutex_unlock(&component->io_mutex);
767 struct snd_soc_component *component,
772 if (component->regmap)
773 ret = regmap_write(component->regmap, reg, val);
774 else if (component->driver->write)
775 ret = component->driver->write(component, reg, val);
777 return soc_component_ret_reg_rw(component, ret, reg);
782 * @component: Component to write to
788 int snd_soc_component_write(struct snd_soc_component *component,
793 mutex_lock(&component->io_mutex);
794 ret = soc_component_write_no_lock(component, reg, val);
795 mutex_unlock(&component->io_mutex);
802 struct snd_soc_component *component, unsigned int reg,
808 mutex_lock(&component->io_mutex);
810 old = soc_component_read_no_lock(component, reg);
815 ret = soc_component_write_no_lock(component, reg, new);
817 mutex_unlock(&component->io_mutex);
819 return soc_component_ret_reg_rw(component, ret, reg);
824 * @component: Component to update
833 int snd_soc_component_update_bits(struct snd_soc_component *component,
839 if (component->regmap)
840 ret = regmap_update_bits_check(component->regmap, reg, mask,
843 ret = snd_soc_component_update_bits_legacy(component, reg,
847 return soc_component_ret_reg_rw(component, ret, reg);
855 * @component: Component to update
869 int snd_soc_component_update_bits_async(struct snd_soc_component *component,
875 if (component->regmap)
876 ret = regmap_update_bits_check_async(component->regmap, reg,
879 ret = snd_soc_component_update_bits_legacy(component, reg,
883 return soc_component_ret_reg_rw(component, ret, reg);
890 * @component: Component to read from
896 unsigned int snd_soc_component_read_field(struct snd_soc_component *component,
901 val = snd_soc_component_read(component, reg);
903 val = (val & mask) >> soc_component_field_shift(component, mask);
911 * @component: Component to write to
918 int snd_soc_component_write_field(struct snd_soc_component *component,
923 val = (val << soc_component_field_shift(component, mask)) & mask;
925 return snd_soc_component_update_bits(component, reg, mask, val);
931 * @component: Component for which to wait
936 void snd_soc_component_async_complete(struct snd_soc_component *component)
938 if (component->regmap)
939 regmap_async_complete(component->regmap);
945 * @component: component
955 int snd_soc_component_test_bits(struct snd_soc_component *component,
960 old = snd_soc_component_read(component, reg);
969 struct snd_soc_component *component;
973 for_each_rtd_components(rtd, i, component)
974 if (component->driver->pointer)
975 return component->driver->pointer(component, substream);
981 struct snd_soc_component *component)
987 if (dai->component == component)
999 struct snd_soc_component *component;
1009 for_each_rtd_components(rtd, i, component) {
1010 if (!component->driver->delay)
1013 delay = component->driver->delay(component, substream);
1015 if (snd_soc_component_is_codec_on_rtd(rtd, component))
1026 struct snd_soc_component *component;
1030 for_each_rtd_components(rtd, i, component)
1031 if (component->driver->ioctl)
1033 component,
1034 component->driver->ioctl(component,
1043 struct snd_soc_component *component;
1046 for_each_rtd_components(rtd, i, component) {
1047 if (component->driver->sync_stop) {
1048 ret = component->driver->sync_stop(component,
1051 return soc_component_ret(component, ret);
1063 struct snd_soc_component *component;
1067 for_each_rtd_components(rtd, i, component)
1068 if (component->driver->copy)
1069 return soc_component_ret(component,
1070 component->driver->copy(component, substream,
1080 struct snd_soc_component *component;
1085 for_each_rtd_components(rtd, i, component) {
1086 if (component->driver->page) {
1087 page = component->driver->page(component,
1101 struct snd_soc_component *component;
1105 for_each_rtd_components(rtd, i, component)
1106 if (component->driver->mmap)
1108 component,
1109 component->driver->mmap(component,
1117 struct snd_soc_component *component;
1121 for_each_rtd_components(rtd, i, component) {
1122 if (component->driver->pcm_construct) {
1123 ret = component->driver->pcm_construct(component, rtd);
1125 return soc_component_ret(component, ret);
1134 struct snd_soc_component *component;
1140 for_each_rtd_components(rtd, i, component)
1141 if (component->driver->pcm_destruct)
1142 component->driver->pcm_destruct(component, rtd->pcm);
1148 struct snd_soc_component *component;
1151 for_each_rtd_components(rtd, i, component) {
1152 if (component->driver->prepare) {
1153 ret = component->driver->prepare(component, substream);
1155 return soc_component_ret(component, ret);
1166 struct snd_soc_component *component;
1169 for_each_rtd_components(rtd, i, component) {
1170 if (component->driver->hw_params) {
1171 ret = component->driver->hw_params(component,
1174 return soc_component_ret(component, ret);
1177 soc_component_mark_push(component, substream, hw_params);
1187 struct snd_soc_component *component;
1190 for_each_rtd_components(rtd, i, component) {
1191 if (rollback && !soc_component_mark_match(component, substream, hw_params))
1194 if (component->driver->hw_free) {
1195 ret = component->driver->hw_free(component, substream);
1197 soc_component_ret(component, ret);
1201 soc_component_mark_pop(component, hw_params);
1205 static int soc_component_trigger(struct snd_soc_component *component,
1211 if (component->driver->trigger)
1212 ret = component->driver->trigger(component, substream, cmd);
1214 return soc_component_ret(component, ret);
1221 struct snd_soc_component *component;
1228 for_each_rtd_components(rtd, i, component) {
1229 ret = soc_component_trigger(component, substream, cmd);
1232 soc_component_mark_push(component, substream, trigger);
1238 for_each_rtd_components(rtd, i, component) {
1239 if (rollback && !soc_component_mark_match(component, substream, trigger))
1242 r = soc_component_trigger(component, substream, cmd);
1245 soc_component_mark_pop(component, trigger);
1255 struct snd_soc_component *component;
1258 for_each_rtd_components(rtd, i, component) {
1259 int ret = pm_runtime_get_sync(component->dev);
1261 pm_runtime_put_noidle(component->dev);
1262 return soc_component_ret(component, ret);
1265 soc_component_mark_push(component, stream, pm);
1274 struct snd_soc_component *component;
1277 for_each_rtd_components(rtd, i, component) {
1278 if (rollback && !soc_component_mark_match(component, stream, pm))
1281 pm_runtime_put_autosuspend(component->dev);
1284 soc_component_mark_pop(component, pm);
1291 struct snd_soc_component *component;
1295 for_each_rtd_components(rtd, i, component)
1296 if (component->driver->ack)
1297 return component->driver->ack(component, substream);