Lines Matching refs:dapm

3 // soc-dapm.c  --  ALSA SoC Dynamic Audio Power Management
42 #define DAPM_UPDATE_STAT(widget, val) widget->dapm->card->dapm_stats.val++;
51 static int snd_soc_dapm_add_path(struct snd_soc_dapm_context *dapm,
58 snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
62 snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm,
65 static unsigned int soc_dapm_read(struct snd_soc_dapm_context *dapm, int reg);
67 /* dapm power sequences - make this per codec in the future */
150 static void dapm_assert_locked(struct snd_soc_dapm_context *dapm)
152 if (dapm->card && dapm->card->instantiated)
153 lockdep_assert_held(&dapm->card->dapm_mutex);
190 dapm_assert_locked(w->dapm);
193 dev_vdbg(w->dapm->dev, "Marking %s dirty due to %s\n",
195 list_add_tail(&w->dirty, &w->dapm->card->dapm_dirty);
214 dapm_assert_locked(w->dapm);
321 /* create a new dapm widget */
374 dev_warn(widget->dapm->dev,
403 snd_soc_dapm_new_control_unlocked(widget->dapm,
438 widget->dapm, &template);
445 snd_soc_dapm_add_path(widget->dapm, data->widget,
448 data->value = soc_dapm_read(widget->dapm, e->reg) &
589 * snd_soc_dapm_kcontrol_dapm() - Returns the dapm context associated to a
599 return dapm_kcontrol_get_wlist(kcontrol)->widgets[0]->dapm;
617 static const char *soc_dapm_prefix(struct snd_soc_dapm_context *dapm)
619 if (!dapm->component)
621 return dapm->component->name_prefix;
624 static unsigned int soc_dapm_read(struct snd_soc_dapm_context *dapm, int reg)
626 if (!dapm->component)
628 return snd_soc_component_read(dapm->component, reg);
631 static int soc_dapm_update_bits(struct snd_soc_dapm_context *dapm,
634 if (!dapm->component)
636 return snd_soc_component_update_bits(dapm->component, reg,
640 static int soc_dapm_test_bits(struct snd_soc_dapm_context *dapm,
643 if (!dapm->component)
645 return snd_soc_component_test_bits(dapm->component, reg, mask, value);
648 static void soc_dapm_async_complete(struct snd_soc_dapm_context *dapm)
650 if (dapm->component)
651 snd_soc_component_async_complete(dapm->component);
663 wlist = &w->dapm->card->widgets;
685 * @dapm: The DAPM context for which to set the level
700 int snd_soc_dapm_force_bias_level(struct snd_soc_dapm_context *dapm,
705 if (dapm->component)
706 ret = snd_soc_component_set_bias_level(dapm->component, level);
709 dapm->bias_level = level;
717 * @dapm: DAPM context
724 static int snd_soc_dapm_set_bias_level(struct snd_soc_dapm_context *dapm,
727 struct snd_soc_card *card = dapm->card;
732 ret = snd_soc_card_set_bias_level(card, dapm, level);
736 if (!card || dapm != &card->dapm)
737 ret = snd_soc_dapm_force_bias_level(dapm, level);
742 ret = snd_soc_card_set_bias_level_post(card, dapm, level);
750 static int dapm_connect_mux(struct snd_soc_dapm_context *dapm,
760 val = soc_dapm_read(dapm, e->reg);
797 val = soc_dapm_read(p->sink->dapm, reg);
812 val = soc_dapm_read(p->sink->dapm, mc->rreg);
832 static int dapm_connect_mixer(struct snd_soc_dapm_context *dapm,
848 static int dapm_is_shared_kcontrol(struct snd_soc_dapm_context *dapm,
858 for_each_card_widgets(dapm->card, w) {
859 if (w == kcontrolw || w->dapm != kcontrolw->dapm)
880 struct snd_soc_dapm_context *dapm = w->dapm;
881 struct snd_card *card = dapm->card->snd_card;
891 prefix = soc_dapm_prefix(dapm);
897 shared = dapm_is_shared_kcontrol(dapm, w, &w->kcontrol_news[kci],
967 dev_err(dapm->dev,
968 "ASoC: failed to add widget %s dapm kcontrol %s: %d\n",
984 /* create new dapm mixer control */
1009 snd_soc_dapm_add_path(data->widget->dapm,
1019 /* create new dapm mux control */
1022 struct snd_soc_dapm_context *dapm = w->dapm;
1042 dev_err(dapm->dev,
1049 dev_err(dapm->dev, "ASoC: %s %s has no paths\n", type, w->name);
1065 /* create new dapm volume control */
1079 /* create new dapm dai link control */
1084 struct snd_soc_dapm_context *dapm = w->dapm;
1085 struct snd_card *card = dapm->card->snd_card;
1098 dev_err(dapm->dev,
1099 "ASoC: failed to add widget %s dapm kcontrol %s: %d\n",
1116 int level = snd_power_get_state(widget->dapm->card->snd_card);
1122 dev_dbg(widget->dapm->dev, "ASoC: %s ignoring suspend\n",
1252 * This function takes the dapm widget currently being examined and the walk
1270 * This function takes the dapm widget currently being examined and the walk
1296 * This function takes the dapm widget currently being examined and the walk
1353 soc_dapm_async_complete(w->dapm);
1359 dev_warn(w->dapm->dev,
1369 dev_warn(w->dapm->dev,
1413 soc_dapm_async_complete(w->dapm);
1510 if (a->dapm != b->dapm)
1511 return (unsigned long)a->dapm - (unsigned long)b->dapm;
1572 pop_dbg(w->dapm->dev, card->pop_time, "pop test : %s %s\n",
1574 soc_dapm_async_complete(w->dapm);
1579 dev_err(w->dapm->dev, "ASoC: %s: %s event failed: %d\n",
1588 struct snd_soc_dapm_context *dapm;
1596 dapm = w->dapm;
1599 WARN_ON(reg != w->reg || dapm != w->dapm);
1608 pop_dbg(dapm->dev, card->pop_time,
1622 pop_dbg(dapm->dev, card->pop_time,
1626 soc_dapm_update_bits(dapm, reg, mask, value);
1666 w->dapm != cur_dapm || w->subseq != cur_subseq) {
1678 if (cur_dapm && w->dapm != cur_dapm)
1718 cur_dapm = w->dapm;
1724 dev_err(w->dapm->dev,
1760 dev_err(w->dapm->dev, "ASoC: %s DAPM pre-event failed: %d\n",
1768 ret = soc_dapm_update_bits(w->dapm, update->reg, update->mask,
1771 dev_err(w->dapm->dev, "ASoC: %s DAPM update failed: %d\n",
1775 ret = soc_dapm_update_bits(w->dapm, update->reg2,
1778 dev_err(w->dapm->dev,
1787 dev_err(w->dapm->dev, "ASoC: %s DAPM post-event failed: %d\n",
1932 static bool dapm_idle_bias_off(struct snd_soc_dapm_context *dapm)
1934 if (dapm->idle_bias_off)
1937 switch (snd_power_get_state(dapm->card->snd_card)) {
1940 return dapm->suspend_bias_off;
1949 * Scan each dapm widget for complete audio path.
2002 d = w->dapm;
2045 dapm_pre_sequence_async(&card->dapm, 0);
2048 if (d != &card->dapm && d->bias_level != d->target_bias_level)
2072 if (d != &card->dapm && d->bias_level != d->target_bias_level)
2078 dapm_post_sequence_async(&card->dapm, 0);
2105 struct snd_soc_card *card = w->dapm->card;
2177 struct snd_soc_dapm_context *dapm = file->private_data;
2180 switch (dapm->bias_level) {
2194 WARN(1, "Unknown bias_level %d\n", dapm->bias_level);
2209 void snd_soc_dapm_debugfs_init(struct snd_soc_dapm_context *dapm,
2215 dapm->debugfs_dapm = debugfs_create_dir("dapm", parent);
2217 debugfs_create_file("bias_level", 0444, dapm->debugfs_dapm, dapm,
2223 struct snd_soc_dapm_context *dapm = w->dapm;
2225 if (!dapm->debugfs_dapm || !w->name)
2228 debugfs_create_file(w->name, 0444, dapm->debugfs_dapm, w,
2232 static void dapm_debugfs_cleanup(struct snd_soc_dapm_context *dapm)
2234 debugfs_remove_recursive(dapm->debugfs_dapm);
2235 dapm->debugfs_dapm = NULL;
2239 void snd_soc_dapm_debugfs_init(struct snd_soc_dapm_context *dapm,
2248 static inline void dapm_debugfs_cleanup(struct snd_soc_dapm_context *dapm)
2283 /* find dapm widget path assoc with kcontrol */
2301 int snd_soc_dapm_mux_update_power(struct snd_soc_dapm_context *dapm,
2305 struct snd_soc_card *card = dapm->card;
2329 /* find dapm widget path assoc with kcontrol */
2366 int snd_soc_dapm_mixer_update_power(struct snd_soc_dapm_context *dapm,
2370 struct snd_soc_card *card = dapm->card;
2387 struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
2400 if (w->dapm != dapm)
2430 switch (snd_soc_dapm_get_bias_level(dapm)) {
2449 /* show dapm widget status in sys fs */
2509 void snd_soc_dapm_reset_cache(struct snd_soc_dapm_context *dapm)
2511 dapm->path_sink_cache.widget = NULL;
2512 dapm->path_source_cache.widget = NULL;
2515 /* free all dapm widgets and resources */
2516 static void dapm_free_widgets(struct snd_soc_dapm_context *dapm)
2520 for_each_card_widgets_safe(dapm->card, w, next_w) {
2521 if (w->dapm != dapm)
2525 snd_soc_dapm_reset_cache(dapm);
2529 struct snd_soc_dapm_context *dapm, const char *pin,
2536 const char *prefix = soc_dapm_prefix(dapm);
2546 for_each_card_widgets(dapm->card, w) {
2548 if (w->dapm == dapm)
2566 static int __snd_soc_dapm_set_pin(struct snd_soc_dapm_context *dapm,
2569 struct snd_soc_dapm_widget *w = dapm_find_widget(dapm, pin, true);
2572 dapm_assert_locked(dapm);
2575 dev_err(dapm->dev, "ASoC: DAPM unknown pin %s\n", pin);
2597 static int snd_soc_dapm_set_pin(struct snd_soc_dapm_context *dapm,
2600 int ret = __snd_soc_dapm_set_pin(dapm, pin, status);
2606 * snd_soc_dapm_sync_unlocked - scan and power dapm paths
2607 * @dapm: DAPM context
2609 * Walks all dapm audio paths and powers widgets according to their
2616 int snd_soc_dapm_sync_unlocked(struct snd_soc_dapm_context *dapm)
2622 if (!dapm->card || !dapm->card->instantiated)
2625 return dapm_power_widgets(dapm->card, SND_SOC_DAPM_STREAM_NOP);
2630 * snd_soc_dapm_sync - scan and power dapm paths
2631 * @dapm: DAPM context
2633 * Walks all dapm audio paths and powers widgets according to their
2638 int snd_soc_dapm_sync(struct snd_soc_dapm_context *dapm)
2642 mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME);
2643 ret = snd_soc_dapm_sync_unlocked(dapm);
2644 mutex_unlock(&dapm->card->dapm_mutex);
2661 dev_dbg(w->dapm->dev, "%s DAI route %s -> %s\n",
2739 if (w->dapm->card->fully_routed)
2754 if (w->dapm->card->fully_routed)
2781 static int snd_soc_dapm_check_dynamic_path(struct snd_soc_dapm_context *dapm,
2811 dev_err(dapm->dev,
2816 dev_err(dapm->dev,
2825 static int snd_soc_dapm_add_path(struct snd_soc_dapm_context *dapm,
2837 dev_err(dapm->dev,
2844 dev_err(dapm->dev,
2851 dev_err(dapm->dev,
2857 ret = snd_soc_dapm_check_dynamic_path(dapm, wsource, wsink, control);
2883 ret = dapm_connect_mux(dapm, path, control, wsource);
2893 ret = dapm_connect_mux(dapm, path, control, wsink);
2900 ret = dapm_connect_mixer(dapm, path, control);
2909 list_add(&path->list, &dapm->card->paths);
2918 if (dapm->card->instantiated && path->connect)
2927 static int snd_soc_dapm_add_route(struct snd_soc_dapm_context *dapm,
2941 prefix = soc_dapm_prefix(dapm);
2954 wsource = dapm_wcache_lookup(&dapm->path_source_cache, source);
2955 wsink = dapm_wcache_lookup(&dapm->path_sink_cache, sink);
2964 for_each_card_widgets(dapm->card, w) {
2967 if (w->dapm == dapm) {
2974 dev_warn(dapm->dev,
2981 if (w->dapm == dapm) {
2988 dev_warn(dapm->dev,
3000 dev_err(dapm->dev, "ASoC: no source widget found for %s\n",
3005 dev_err(dapm->dev, "ASoC: no sink widget found for %s\n",
3011 dapm_wcache_update(&dapm->path_sink_cache, wsink);
3012 dapm_wcache_update(&dapm->path_source_cache, wsource);
3014 ret = snd_soc_dapm_add_path(dapm, wsource, wsink, route->control,
3021 dev_warn(dapm->dev, "ASoC: no dapm match for %s --> %s --> %s\n",
3026 static int snd_soc_dapm_del_route(struct snd_soc_dapm_context *dapm,
3038 dev_err(dapm->dev,
3043 prefix = soc_dapm_prefix(dapm);
3057 list_for_each_entry(p, &dapm->card->paths, list) {
3081 dev_warn(dapm->dev, "ASoC: Route %s->%s does not exist\n",
3090 * @dapm: DAPM context
3094 * Connects 2 dapm widgets together via a named audio path. The sink is
3101 int snd_soc_dapm_add_routes(struct snd_soc_dapm_context *dapm,
3106 mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME);
3108 r = snd_soc_dapm_add_route(dapm, route);
3110 dev_err(dapm->dev, "ASoC: Failed to add route %s -> %s -> %s\n",
3118 mutex_unlock(&dapm->card->dapm_mutex);
3126 * @dapm: DAPM context
3132 int snd_soc_dapm_del_routes(struct snd_soc_dapm_context *dapm,
3137 mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME);
3139 snd_soc_dapm_del_route(dapm, route);
3142 mutex_unlock(&dapm->card->dapm_mutex);
3148 static int snd_soc_dapm_weak_route(struct snd_soc_dapm_context *dapm,
3151 struct snd_soc_dapm_widget *source = dapm_find_widget(dapm,
3154 struct snd_soc_dapm_widget *sink = dapm_find_widget(dapm,
3161 dev_err(dapm->dev, "ASoC: Unable to find source %s for weak route\n",
3167 dev_err(dapm->dev, "ASoC: Unable to find sink %s for weak route\n",
3173 dev_warn(dapm->dev, "ASoC: Ignoring control for weak route %s->%s\n",
3184 dev_err(dapm->dev, "ASoC: No path found for weak route %s->%s\n",
3187 dev_warn(dapm->dev, "ASoC: %d paths found for weak route %s->%s\n",
3195 * @dapm: DAPM context
3209 int snd_soc_dapm_weak_routes(struct snd_soc_dapm_context *dapm,
3215 mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_INIT);
3217 err = snd_soc_dapm_weak_route(dapm, route);
3222 mutex_unlock(&dapm->card->dapm_mutex);
3229 * snd_soc_dapm_new_widgets - add new dapm widgets
3230 * @card: card to be checked for new dapm widgets
3232 * Checks the codec for any new dapm widgets and creates them if found.
3282 val = soc_dapm_read(w->dapm, w->reg);
3302 * snd_soc_dapm_get_volsw - dapm mixer get callback
3306 * Callback to get the value of a dapm mixer control.
3313 struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_dapm(kcontrol);
3314 struct snd_soc_card *card = dapm->card;
3327 reg_val = soc_dapm_read(dapm, reg);
3331 reg_val = soc_dapm_read(dapm, mc->rreg);
3361 * snd_soc_dapm_put_volsw - dapm mixer set callback
3365 * Callback to set the value of a dapm mixer control.
3372 struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_dapm(kcontrol);
3373 struct snd_soc_card *card = dapm->card;
3404 dev_warn(dapm->dev,
3413 reg_change = soc_dapm_test_bits(dapm, reg, mask << shift, val);
3416 reg_change |= soc_dapm_test_bits(dapm, mc->rreg,
3452 * snd_soc_dapm_get_enum_double - dapm enumerated double mixer get callback
3456 * Callback to get the value of a dapm enumerated double mixer control.
3463 struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_dapm(kcontrol);
3464 struct snd_soc_card *card = dapm->card;
3470 reg_val = soc_dapm_read(dapm, e->reg);
3489 * snd_soc_dapm_put_enum_double - dapm enumerated double mixer set callback
3493 * Callback to set the value of a dapm enumerated double mixer control.
3500 struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_dapm(kcontrol);
3501 struct snd_soc_card *card = dapm->card;
3526 reg_change = soc_dapm_test_bits(dapm, e->reg, mask, val);
3586 snd_soc_dapm_get_pin_status(&card->dapm, pin);
3608 ret = __snd_soc_dapm_set_pin(&card->dapm, pin,
3612 snd_soc_dapm_sync(&card->dapm);
3618 snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm,
3631 w->regulator = devm_regulator_get(dapm->dev, w->name);
3640 dev_warn(dapm->dev,
3646 w->pinctrl = devm_pinctrl_get(dapm->dev);
3656 w->clk = devm_clk_get(dapm->dev, w->name);
3666 prefix = soc_dapm_prefix(dapm);
3683 if (!dapm->card->fully_routed)
3693 if (!dapm->card->fully_routed)
3745 w->dapm = dapm;
3749 list_add_tail(&w->list, &dapm->card->widgets);
3762 dev_err(dapm->dev, "ASoC: Failed to request %s: %d\n",
3771 * snd_soc_dapm_new_control - create new dapm control
3772 * @dapm: DAPM context
3780 snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
3785 mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME);
3786 w = snd_soc_dapm_new_control_unlocked(dapm, widget);
3787 mutex_unlock(&dapm->card->dapm_mutex);
3794 * snd_soc_dapm_new_controls - create new dapm controls
3795 * @dapm: DAPM context
3803 int snd_soc_dapm_new_controls(struct snd_soc_dapm_context *dapm,
3811 mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_INIT);
3813 w = snd_soc_dapm_new_control_unlocked(dapm, widget);
3820 mutex_unlock(&dapm->card->dapm_mutex);
3885 dev_err(w->dapm->dev, "ASoC: link config missing\n");
3894 dev_warn(w->dapm->dev, "ASoC: Invalid format %llx specified\n",
4102 dev_warn(card->dapm.dev,
4202 w = snd_soc_dapm_new_control_unlocked(&card->dapm, &template);
4223 int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm,
4229 WARN_ON(dapm->dev != dai->dev);
4242 w = snd_soc_dapm_new_control_unlocked(dapm, &template);
4258 w = snd_soc_dapm_new_control_unlocked(dapm, &template);
4296 if (w->dapm != dai_w->dapm)
4318 snd_soc_dapm_add_path(w->dapm, src, sink, NULL, NULL);
4325 static void dapm_connect_dai_routes(struct snd_soc_dapm_context *dapm,
4332 dev_dbg(dapm->dev, "connected DAI link %s:%s -> %s:%s\n",
4337 snd_soc_dapm_add_path(dapm, src, dai, NULL, NULL);
4341 snd_soc_dapm_add_path(dapm, src, sink, NULL, NULL);
4374 dapm_connect_dai_routes(&card->dapm, cpu_dai, playback_cpu,
4392 dapm_connect_dai_routes(&card->dapm, codec_dai, codec,
4478 * snd_soc_dapm_stream_event - send a stream event to the dapm core
4483 * Sends a stream event to the dapm core. The core then makes any
4523 * @dapm: DAPM context
4534 int snd_soc_dapm_enable_pin_unlocked(struct snd_soc_dapm_context *dapm,
4537 return snd_soc_dapm_set_pin(dapm, pin, 1);
4543 * @dapm: DAPM context
4552 int snd_soc_dapm_enable_pin(struct snd_soc_dapm_context *dapm, const char *pin)
4556 mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME);
4558 ret = snd_soc_dapm_set_pin(dapm, pin, 1);
4560 mutex_unlock(&dapm->card->dapm_mutex);
4568 * @dapm: DAPM context
4580 int snd_soc_dapm_force_enable_pin_unlocked(struct snd_soc_dapm_context *dapm,
4583 struct snd_soc_dapm_widget *w = dapm_find_widget(dapm, pin, true);
4586 dev_err(dapm->dev, "ASoC: unknown pin %s\n", pin);
4590 dev_dbg(w->dapm->dev, "ASoC: force enable pin %s\n", pin);
4609 * @dapm: DAPM context
4619 int snd_soc_dapm_force_enable_pin(struct snd_soc_dapm_context *dapm,
4624 mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME);
4626 ret = snd_soc_dapm_force_enable_pin_unlocked(dapm, pin);
4628 mutex_unlock(&dapm->card->dapm_mutex);
4636 * @dapm: DAPM context
4646 int snd_soc_dapm_disable_pin_unlocked(struct snd_soc_dapm_context *dapm,
4649 return snd_soc_dapm_set_pin(dapm, pin, 0);
4655 * @dapm: DAPM context
4663 int snd_soc_dapm_disable_pin(struct snd_soc_dapm_context *dapm,
4668 mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME);
4670 ret = snd_soc_dapm_set_pin(dapm, pin, 0);
4672 mutex_unlock(&dapm->card->dapm_mutex);
4680 * @dapm: DAPM context
4694 int snd_soc_dapm_nc_pin_unlocked(struct snd_soc_dapm_context *dapm,
4697 return snd_soc_dapm_set_pin(dapm, pin, 0);
4703 * @dapm: DAPM context
4715 int snd_soc_dapm_nc_pin(struct snd_soc_dapm_context *dapm, const char *pin)
4719 mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME);
4721 ret = snd_soc_dapm_set_pin(dapm, pin, 0);
4723 mutex_unlock(&dapm->card->dapm_mutex);
4731 * @dapm: DAPM context
4738 int snd_soc_dapm_get_pin_status(struct snd_soc_dapm_context *dapm,
4741 struct snd_soc_dapm_widget *w = dapm_find_widget(dapm, pin, true);
4752 * @dapm: DAPM context
4761 int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm,
4764 struct snd_soc_dapm_widget *w = dapm_find_widget(dapm, pin, false);
4767 dev_err(dapm->dev, "ASoC: unknown pin %s\n", pin);
4778 * snd_soc_dapm_free - free dapm resources
4779 * @dapm: DAPM context
4781 * Free all dapm widgets and resources.
4783 void snd_soc_dapm_free(struct snd_soc_dapm_context *dapm)
4785 dapm_debugfs_cleanup(dapm);
4786 dapm_free_widgets(dapm);
4787 list_del(&dapm->list);
4791 void snd_soc_dapm_init(struct snd_soc_dapm_context *dapm,
4795 dapm->card = card;
4796 dapm->component = component;
4797 dapm->bias_level = SND_SOC_BIAS_OFF;
4800 dapm->dev = component->dev;
4801 dapm->idle_bias_off = !component->driver->idle_bias_on,
4802 dapm->suspend_bias_off = component->driver->suspend_bias_off;
4804 dapm->dev = card->dev;
4807 INIT_LIST_HEAD(&dapm->list);
4809 list_add(&dapm->list, &card->dapm_list);
4813 static void soc_dapm_shutdown_dapm(struct snd_soc_dapm_context *dapm)
4815 struct snd_soc_card *card = dapm->card;
4822 for_each_card_widgets(dapm->card, w) {
4823 if (w->dapm != dapm)
4836 if (dapm->bias_level == SND_SOC_BIAS_ON)
4837 snd_soc_dapm_set_bias_level(dapm,
4840 if (dapm->bias_level == SND_SOC_BIAS_PREPARE)
4841 snd_soc_dapm_set_bias_level(dapm,
4853 struct snd_soc_dapm_context *dapm;
4855 for_each_card_dapms(card, dapm) {
4856 if (dapm != &card->dapm) {
4857 soc_dapm_shutdown_dapm(dapm);
4858 if (dapm->bias_level == SND_SOC_BIAS_STANDBY)
4859 snd_soc_dapm_set_bias_level(dapm,
4864 soc_dapm_shutdown_dapm(&card->dapm);
4865 if (card->dapm.bias_level == SND_SOC_BIAS_STANDBY)
4866 snd_soc_dapm_set_bias_level(&card->dapm,