Lines Matching refs:card

42 #define DAPM_UPDATE_STAT(widget, val) widget->dapm->card->dapm_stats.val++;
152 if (snd_soc_card_is_instantiated(dapm->card)) in dapm_assert_locked()
195 list_add_tail(&w->dirty, &w->dapm->card->dapm_dirty); in dapm_mark_dirty()
301 void dapm_mark_endpoints_dirty(struct snd_soc_card *card) in dapm_mark_endpoints_dirty() argument
305 snd_soc_dapm_mutex_lock_root(card); in dapm_mark_endpoints_dirty()
307 for_each_card_widgets(card, w) { in dapm_mark_endpoints_dirty()
317 snd_soc_dapm_mutex_unlock(card); in dapm_mark_endpoints_dirty()
603 static void dapm_reset(struct snd_soc_card *card) in dapm_reset() argument
607 snd_soc_dapm_mutex_assert_held(card); in dapm_reset()
609 memset(&card->dapm_stats, 0, sizeof(card->dapm_stats)); in dapm_reset()
611 for_each_card_widgets(card, w) { in dapm_reset()
658 struct list_head *wlist = &w->dapm->card->widgets; in dapm_wcache_lookup()
718 struct snd_soc_card *card = dapm->card; in snd_soc_dapm_set_bias_level() local
721 trace_snd_soc_bias_level_start(card, level); in snd_soc_dapm_set_bias_level()
723 ret = snd_soc_card_set_bias_level(card, dapm, level); in snd_soc_dapm_set_bias_level()
727 if (!card || dapm != &card->dapm) in snd_soc_dapm_set_bias_level()
733 ret = snd_soc_card_set_bias_level_post(card, dapm, level); in snd_soc_dapm_set_bias_level()
735 trace_snd_soc_bias_level_done(card, level); in snd_soc_dapm_set_bias_level()
850 for_each_card_widgets(dapm->card, w) { in dapm_is_shared_kcontrol()
873 struct snd_card *card = dapm->card->snd_card; in dapm_create_or_share_kcontrol() local
959 ret = snd_ctl_add(card, kcontrol); in dapm_create_or_share_kcontrol()
1086 struct snd_card *card = dapm->card->snd_card; in dapm_new_dai_link() local
1089 int ret = snd_ctl_add(card, kcontrol); in dapm_new_dai_link()
1110 int level = snd_power_get_state(widget->dapm->card->snd_card); in snd_soc_dapm_suspend_check()
1301 struct snd_soc_card *card = dai->component->card; in snd_soc_dapm_dai_get_connected_widgets() local
1307 snd_soc_dapm_mutex_lock(card); in snd_soc_dapm_dai_get_connected_widgets()
1327 snd_soc_dapm_mutex_unlock(card); in snd_soc_dapm_dai_get_connected_widgets()
1526 static void dapm_seq_check_event(struct snd_soc_card *card, in dapm_seq_check_event() argument
1568 pop_dbg(w->dapm->dev, card->pop_time, "pop test : %s %s\n", in dapm_seq_check_event()
1581 static void dapm_seq_run_coalesced(struct snd_soc_card *card, in dapm_seq_run_coalesced() argument
1604 pop_dbg(dapm->dev, card->pop_time, in dapm_seq_run_coalesced()
1609 dapm_seq_check_event(card, w, SND_SOC_DAPM_PRE_PMU); in dapm_seq_run_coalesced()
1610 dapm_seq_check_event(card, w, SND_SOC_DAPM_PRE_PMD); in dapm_seq_run_coalesced()
1618 pop_dbg(dapm->dev, card->pop_time, in dapm_seq_run_coalesced()
1620 value, mask, reg, card->pop_time); in dapm_seq_run_coalesced()
1621 pop_wait(card->pop_time); in dapm_seq_run_coalesced()
1626 dapm_seq_check_event(card, w, SND_SOC_DAPM_POST_PMU); in dapm_seq_run_coalesced()
1627 dapm_seq_check_event(card, w, SND_SOC_DAPM_POST_PMD); in dapm_seq_run_coalesced()
1639 static void dapm_seq_run(struct snd_soc_card *card, in dapm_seq_run() argument
1664 dapm_seq_run_coalesced(card, &pending); in dapm_seq_run()
1725 dapm_seq_run_coalesced(card, &pending); in dapm_seq_run()
1735 for_each_card_dapms(card, d) in dapm_seq_run()
1739 static void dapm_widget_update(struct snd_soc_card *card) in dapm_widget_update() argument
1741 struct snd_soc_dapm_update *update = card->update; in dapm_widget_update()
1927 switch (snd_power_get_state(dapm->card->snd_card)) { in dapm_idle_bias_off()
1947 static int dapm_power_widgets(struct snd_soc_card *card, int event) in dapm_power_widgets() argument
1957 snd_soc_dapm_mutex_assert_held(card); in dapm_power_widgets()
1959 trace_snd_soc_dapm_start(card); in dapm_power_widgets()
1961 for_each_card_dapms(card, d) { in dapm_power_widgets()
1968 dapm_reset(card); in dapm_power_widgets()
1976 list_for_each_entry(w, &card->dapm_dirty, dirty) { in dapm_power_widgets()
1980 for_each_card_widgets(card, w) { in dapm_power_widgets()
2025 for_each_card_dapms(card, d) in dapm_power_widgets()
2028 for_each_card_dapms(card, d) in dapm_power_widgets()
2032 trace_snd_soc_dapm_walk_done(card); in dapm_power_widgets()
2035 dapm_pre_sequence_async(&card->dapm, 0); in dapm_power_widgets()
2037 for_each_card_dapms(card, d) { in dapm_power_widgets()
2038 if (d != &card->dapm && d->bias_level != d->target_bias_level) in dapm_power_widgets()
2045 dapm_seq_check_event(card, w, SND_SOC_DAPM_WILL_PMD); in dapm_power_widgets()
2049 dapm_seq_check_event(card, w, SND_SOC_DAPM_WILL_PMU); in dapm_power_widgets()
2053 dapm_seq_run(card, &down_list, event, false); in dapm_power_widgets()
2055 dapm_widget_update(card); in dapm_power_widgets()
2058 dapm_seq_run(card, &up_list, event, true); in dapm_power_widgets()
2061 for_each_card_dapms(card, d) { in dapm_power_widgets()
2062 if (d != &card->dapm && d->bias_level != d->target_bias_level) in dapm_power_widgets()
2068 dapm_post_sequence_async(&card->dapm, 0); in dapm_power_widgets()
2071 for_each_card_dapms(card, d) { in dapm_power_widgets()
2080 pop_dbg(card->dev, card->pop_time, in dapm_power_widgets()
2081 "DAPM sequencing finished, waiting %dms\n", card->pop_time); in dapm_power_widgets()
2082 pop_wait(card->pop_time); in dapm_power_widgets()
2084 trace_snd_soc_dapm_done(card); in dapm_power_widgets()
2277 static int soc_dapm_mux_update_power(struct snd_soc_card *card, in soc_dapm_mux_update_power() argument
2284 snd_soc_dapm_mutex_assert_held(card); in soc_dapm_mux_update_power()
2299 dapm_power_widgets(card, SND_SOC_DAPM_STREAM_NOP); in soc_dapm_mux_update_power()
2308 struct snd_soc_card *card = dapm->card; in snd_soc_dapm_mux_update_power() local
2311 snd_soc_dapm_mutex_lock(card); in snd_soc_dapm_mux_update_power()
2312 card->update = update; in snd_soc_dapm_mux_update_power()
2313 ret = soc_dapm_mux_update_power(card, kcontrol, mux, e); in snd_soc_dapm_mux_update_power()
2314 card->update = NULL; in snd_soc_dapm_mux_update_power()
2315 snd_soc_dapm_mutex_unlock(card); in snd_soc_dapm_mux_update_power()
2317 snd_soc_dpcm_runtime_update(card); in snd_soc_dapm_mux_update_power()
2323 static int soc_dapm_mixer_update_power(struct snd_soc_card *card, in soc_dapm_mixer_update_power() argument
2330 snd_soc_dapm_mutex_assert_held(card); in soc_dapm_mixer_update_power()
2364 dapm_power_widgets(card, SND_SOC_DAPM_STREAM_NOP); in soc_dapm_mixer_update_power()
2373 struct snd_soc_card *card = dapm->card; in snd_soc_dapm_mixer_update_power() local
2376 snd_soc_dapm_mutex_lock(card); in snd_soc_dapm_mixer_update_power()
2377 card->update = update; in snd_soc_dapm_mixer_update_power()
2378 ret = soc_dapm_mixer_update_power(card, kcontrol, connect, -1); in snd_soc_dapm_mixer_update_power()
2379 card->update = NULL; in snd_soc_dapm_mixer_update_power()
2380 snd_soc_dapm_mutex_unlock(card); in snd_soc_dapm_mixer_update_power()
2382 snd_soc_dpcm_runtime_update(card); in snd_soc_dapm_mixer_update_power()
2398 if (!cmpnt->card) in dapm_widget_show_component()
2401 for_each_card_widgets(cmpnt->card, w) { in dapm_widget_show_component()
2459 snd_soc_dapm_mutex_lock_root(rtd->card); in dapm_widget_show()
2467 snd_soc_dapm_mutex_unlock(rtd->card); in dapm_widget_show()
2528 for_each_card_widgets_safe(dapm->card, w, next_w) { in dapm_free_widgets()
2556 for_each_card_widgets(dapm->card, w) { in dapm_find_widget()
2632 if (!snd_soc_card_is_instantiated(dapm->card)) in snd_soc_dapm_sync_unlocked()
2635 return dapm_power_widgets(dapm->card, SND_SOC_DAPM_STREAM_NOP); in snd_soc_dapm_sync_unlocked()
2723 snd_soc_dapm_mutex_lock(rtd->card); in snd_soc_dapm_update_dai()
2725 snd_soc_dapm_mutex_unlock(rtd->card); in snd_soc_dapm_update_dai()
2761 if (w->dapm->card->fully_routed) in dapm_update_widget_flags()
2776 if (w->dapm->card->fully_routed) in dapm_update_widget_flags()
2928 list_add(&path->list, &dapm->card->paths); in snd_soc_dapm_add_path()
2938 if (snd_soc_card_is_instantiated(dapm->card) && path->connect) in snd_soc_dapm_add_path()
2984 for_each_card_widgets(dapm->card, w) { in snd_soc_dapm_add_route()
3073 list_for_each_entry(p, &dapm->card->paths, list) { in snd_soc_dapm_del_route()
3247 int snd_soc_dapm_new_widgets(struct snd_soc_card *card) in snd_soc_dapm_new_widgets() argument
3252 snd_soc_dapm_mutex_lock_root(card); in snd_soc_dapm_new_widgets()
3254 for_each_card_widgets(card, w) in snd_soc_dapm_new_widgets()
3264 snd_soc_dapm_mutex_unlock(card); in snd_soc_dapm_new_widgets()
3306 dapm_power_widgets(card, SND_SOC_DAPM_STREAM_NOP); in snd_soc_dapm_new_widgets()
3307 snd_soc_dapm_mutex_unlock(card); in snd_soc_dapm_new_widgets()
3383 struct snd_soc_card *card = dapm->card; in snd_soc_dapm_put_volsw() local
3410 snd_soc_dapm_mutex_lock(card); in snd_soc_dapm_put_volsw()
3443 card->update = &update; in snd_soc_dapm_put_volsw()
3446 ret = soc_dapm_mixer_update_power(card, kcontrol, connect, in snd_soc_dapm_put_volsw()
3449 card->update = NULL; in snd_soc_dapm_put_volsw()
3452 snd_soc_dapm_mutex_unlock(card); in snd_soc_dapm_put_volsw()
3455 snd_soc_dpcm_runtime_update(card); in snd_soc_dapm_put_volsw()
3510 struct snd_soc_card *card = dapm->card; in snd_soc_dapm_put_enum_double() local
3530 snd_soc_dapm_mutex_lock(card); in snd_soc_dapm_put_enum_double()
3543 card->update = &update; in snd_soc_dapm_put_enum_double()
3546 ret = soc_dapm_mux_update_power(card, kcontrol, item[0], e); in snd_soc_dapm_put_enum_double()
3548 card->update = NULL; in snd_soc_dapm_put_enum_double()
3551 snd_soc_dapm_mutex_unlock(card); in snd_soc_dapm_put_enum_double()
3554 snd_soc_dpcm_runtime_update(card); in snd_soc_dapm_put_enum_double()
3589 struct snd_soc_card *card = snd_kcontrol_chip(kcontrol); in snd_soc_dapm_get_pin_switch() local
3592 snd_soc_dapm_mutex_lock(card); in snd_soc_dapm_get_pin_switch()
3595 snd_soc_dapm_get_pin_status(&card->dapm, pin); in snd_soc_dapm_get_pin_switch()
3597 snd_soc_dapm_mutex_unlock(card); in snd_soc_dapm_get_pin_switch()
3612 struct snd_soc_card *card = snd_kcontrol_chip(kcontrol); in snd_soc_dapm_put_pin_switch() local
3616 snd_soc_dapm_mutex_lock(card); in snd_soc_dapm_put_pin_switch()
3617 ret = __snd_soc_dapm_set_pin(&card->dapm, pin, in snd_soc_dapm_put_pin_switch()
3619 snd_soc_dapm_mutex_unlock(card); in snd_soc_dapm_put_pin_switch()
3621 snd_soc_dapm_sync(&card->dapm); in snd_soc_dapm_put_pin_switch()
3689 if (!dapm->card->fully_routed) in snd_soc_dapm_new_control_unlocked()
3699 if (!dapm->card->fully_routed) in snd_soc_dapm_new_control_unlocked()
3755 list_add_tail(&w->list, &dapm->card->widgets); in snd_soc_dapm_new_control_unlocked()
4067 snd_soc_dapm_free_kcontrol(struct snd_soc_card *card, in snd_soc_dapm_free_kcontrol() argument
4074 devm_kfree(card->dev, (void *)*private_value); in snd_soc_dapm_free_kcontrol()
4080 devm_kfree(card->dev, (void *)w_param_text[count]); in snd_soc_dapm_free_kcontrol()
4081 devm_kfree(card->dev, w_param_text); in snd_soc_dapm_free_kcontrol()
4085 snd_soc_dapm_alloc_kcontrol(struct snd_soc_card *card, in snd_soc_dapm_alloc_kcontrol() argument
4105 dev_warn(card->dapm.dev, in snd_soc_dapm_alloc_kcontrol()
4109 devm_kasprintf(card->dev, GFP_KERNEL, in snd_soc_dapm_alloc_kcontrol()
4113 w_param_text[count] = devm_kmemdup(card->dev, in snd_soc_dapm_alloc_kcontrol()
4127 (unsigned long) devm_kmemdup(card->dev, in snd_soc_dapm_alloc_kcontrol()
4131 dev_err(card->dev, "ASoC: Failed to create control for %s widget\n", in snd_soc_dapm_alloc_kcontrol()
4137 kcontrol_news = devm_kmemdup(card->dev, &kcontrol_dai_link[0], in snd_soc_dapm_alloc_kcontrol()
4141 dev_err(card->dev, "ASoC: Failed to create control for %s widget\n", in snd_soc_dapm_alloc_kcontrol()
4148 snd_soc_dapm_free_kcontrol(card, private_value, num_c2c_params, w_param_text); in snd_soc_dapm_alloc_kcontrol()
4153 snd_soc_dapm_new_dai(struct snd_soc_card *card, in snd_soc_dapm_new_dai() argument
4167 link_name = devm_kasprintf(card->dev, GFP_KERNEL, "%s-%s", in snd_soc_dapm_new_dai()
4177 w_param_text = devm_kcalloc(card->dev, in snd_soc_dapm_new_dai()
4184 kcontrol_news = snd_soc_dapm_alloc_kcontrol(card, link_name, in snd_soc_dapm_new_dai()
4202 dev_dbg(card->dev, "ASoC: adding %s widget\n", link_name); in snd_soc_dapm_new_dai()
4204 w = snd_soc_dapm_new_control_unlocked(&card->dapm, &template); in snd_soc_dapm_new_dai()
4215 devm_kfree(card->dev, (void *)template.kcontrol_news); in snd_soc_dapm_new_dai()
4216 snd_soc_dapm_free_kcontrol(card, &private_value, in snd_soc_dapm_new_dai()
4219 devm_kfree(card->dev, link_name); in snd_soc_dapm_new_dai()
4280 int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card) in snd_soc_dapm_link_dai_widgets() argument
4287 for_each_card_widgets(card, dai_w) { in snd_soc_dapm_link_dai_widgets()
4298 dev_dbg(card->dev, "dai widget %s has no DAI\n", in snd_soc_dapm_link_dai_widgets()
4306 for_each_card_widgets(card, w) { in snd_soc_dapm_link_dai_widgets()
4355 static void dapm_connect_dai_pair(struct snd_soc_card *card, in dapm_connect_dai_pair() argument
4385 struct snd_soc_dapm_widget *dai = snd_soc_dapm_new_dai(card, substream, in dapm_connect_dai_pair()
4394 dapm_connect_dai_routes(&card->dapm, src_dai[stream], *src[stream], in dapm_connect_dai_pair()
4438 void snd_soc_dapm_connect_dai_link_widgets(struct snd_soc_card *card) in snd_soc_dapm_connect_dai_link_widgets() argument
4445 for_each_card_rtds(card, rtd) { in snd_soc_dapm_connect_dai_link_widgets()
4455 dapm_connect_dai_pair(card, rtd, codec_dai, in snd_soc_dapm_connect_dai_link_widgets()
4459 dapm_connect_dai_pair(card, rtd, codec_dai, in snd_soc_dapm_connect_dai_link_widgets()
4465 dev_err(card->dev, "%s: no codec channel mapping table provided\n", in snd_soc_dapm_connect_dai_link_widgets()
4473 dev_err(card->dev, in snd_soc_dapm_connect_dai_link_widgets()
4479 dapm_connect_dai_pair(card, rtd, codec_dai, in snd_soc_dapm_connect_dai_link_widgets()
4483 dev_err(card->dev, in snd_soc_dapm_connect_dai_link_widgets()
4499 dapm_power_widgets(rtd->card, event); in soc_dapm_stream_event()
4516 struct snd_soc_card *card = rtd->card; in snd_soc_dapm_stream_event() local
4518 snd_soc_dapm_mutex_lock(card); in snd_soc_dapm_stream_event()
4520 snd_soc_dapm_mutex_unlock(card); in snd_soc_dapm_stream_event()
4817 struct snd_soc_card *card, in snd_soc_dapm_init() argument
4820 dapm->card = card; in snd_soc_dapm_init()
4829 dapm->dev = card->dev; in snd_soc_dapm_init()
4834 list_add(&dapm->list, &card->dapm_list); in snd_soc_dapm_init()
4840 struct snd_soc_card *card = dapm->card; in soc_dapm_shutdown_dapm() local
4845 snd_soc_dapm_mutex_lock_root(card); in soc_dapm_shutdown_dapm()
4847 for_each_card_widgets(dapm->card, w) { in soc_dapm_shutdown_dapm()
4864 dapm_seq_run(card, &down_list, 0, false); in soc_dapm_shutdown_dapm()
4870 snd_soc_dapm_mutex_unlock(card); in soc_dapm_shutdown_dapm()
4876 void snd_soc_dapm_shutdown(struct snd_soc_card *card) in snd_soc_dapm_shutdown() argument
4880 for_each_card_dapms(card, dapm) { in snd_soc_dapm_shutdown()
4881 if (dapm != &card->dapm) { in snd_soc_dapm_shutdown()
4889 soc_dapm_shutdown_dapm(&card->dapm); in snd_soc_dapm_shutdown()
4890 if (card->dapm.bias_level == SND_SOC_BIAS_STANDBY) in snd_soc_dapm_shutdown()
4891 snd_soc_dapm_set_bias_level(&card->dapm, in snd_soc_dapm_shutdown()