xref: /linux/sound/soc/soc-dapm.c (revision d30c1683aaecb93d2ab95685dc4300a33d3cea7a)
1 // SPDX-License-Identifier: GPL-2.0+
2 //
3 // soc-dapm.c  --  ALSA SoC Dynamic Audio Power Management
4 //
5 // Copyright 2005 Wolfson Microelectronics PLC.
6 // Author: Liam Girdwood <lrg@slimlogic.co.uk>
7 //
8 //  Features:
9 //    o Changes power status of internal codec blocks depending on the
10 //      dynamic configuration of codec internal audio paths and active
11 //      DACs/ADCs.
12 //    o Platform power domain - can support external components i.e. amps and
13 //      mic/headphone insertion events.
14 //    o Automatic Mic Bias support
15 //    o Jack insertion power event initiation - e.g. hp insertion will enable
16 //      sinks, dacs, etc
17 //    o Delayed power down of audio subsystem to reduce pops between a quick
18 //      device reopen.
19 
20 #include <linux/module.h>
21 #include <linux/init.h>
22 #include <linux/async.h>
23 #include <linux/cleanup.h>
24 #include <linux/delay.h>
25 #include <linux/pm.h>
26 #include <linux/bitops.h>
27 #include <linux/platform_device.h>
28 #include <linux/jiffies.h>
29 #include <linux/debugfs.h>
30 #include <linux/pm_runtime.h>
31 #include <linux/regulator/consumer.h>
32 #include <linux/pinctrl/consumer.h>
33 #include <linux/clk.h>
34 #include <linux/slab.h>
35 #include <sound/core.h>
36 #include <sound/pcm.h>
37 #include <sound/pcm_params.h>
38 #include <sound/soc.h>
39 #include <sound/initval.h>
40 
41 #include <trace/events/asoc.h>
42 
43 #define DAPM_UPDATE_STAT(widget, val) widget->dapm->card->dapm_stats.val++;
44 
45 #define SND_SOC_DAPM_DIR_REVERSE(x) ((x == SND_SOC_DAPM_DIR_IN) ? \
46 	SND_SOC_DAPM_DIR_OUT : SND_SOC_DAPM_DIR_IN)
47 
48 #define snd_soc_dapm_for_each_direction(dir) \
49 	for ((dir) = SND_SOC_DAPM_DIR_IN; (dir) <= SND_SOC_DAPM_DIR_OUT; \
50 		(dir)++)
51 
52 /* dapm power sequences - make this per codec in the future */
53 static int dapm_up_seq[] = {
54 	[snd_soc_dapm_pre] = 1,
55 	[snd_soc_dapm_regulator_supply] = 2,
56 	[snd_soc_dapm_pinctrl] = 2,
57 	[snd_soc_dapm_clock_supply] = 2,
58 	[snd_soc_dapm_supply] = 3,
59 	[snd_soc_dapm_dai_link] = 3,
60 	[snd_soc_dapm_micbias] = 4,
61 	[snd_soc_dapm_vmid] = 4,
62 	[snd_soc_dapm_dai_in] = 5,
63 	[snd_soc_dapm_dai_out] = 5,
64 	[snd_soc_dapm_aif_in] = 5,
65 	[snd_soc_dapm_aif_out] = 5,
66 	[snd_soc_dapm_mic] = 6,
67 	[snd_soc_dapm_siggen] = 6,
68 	[snd_soc_dapm_input] = 6,
69 	[snd_soc_dapm_output] = 6,
70 	[snd_soc_dapm_mux] = 7,
71 	[snd_soc_dapm_demux] = 7,
72 	[snd_soc_dapm_dac] = 8,
73 	[snd_soc_dapm_switch] = 9,
74 	[snd_soc_dapm_mixer] = 9,
75 	[snd_soc_dapm_mixer_named_ctl] = 9,
76 	[snd_soc_dapm_pga] = 10,
77 	[snd_soc_dapm_buffer] = 10,
78 	[snd_soc_dapm_scheduler] = 10,
79 	[snd_soc_dapm_effect] = 10,
80 	[snd_soc_dapm_src] = 10,
81 	[snd_soc_dapm_asrc] = 10,
82 	[snd_soc_dapm_encoder] = 10,
83 	[snd_soc_dapm_decoder] = 10,
84 	[snd_soc_dapm_adc] = 11,
85 	[snd_soc_dapm_out_drv] = 12,
86 	[snd_soc_dapm_hp] = 12,
87 	[snd_soc_dapm_line] = 12,
88 	[snd_soc_dapm_sink] = 12,
89 	[snd_soc_dapm_spk] = 13,
90 	[snd_soc_dapm_kcontrol] = 14,
91 	[snd_soc_dapm_post] = 15,
92 };
93 
94 static int dapm_down_seq[] = {
95 	[snd_soc_dapm_pre] = 1,
96 	[snd_soc_dapm_kcontrol] = 2,
97 	[snd_soc_dapm_adc] = 3,
98 	[snd_soc_dapm_spk] = 4,
99 	[snd_soc_dapm_hp] = 5,
100 	[snd_soc_dapm_line] = 5,
101 	[snd_soc_dapm_out_drv] = 5,
102 	[snd_soc_dapm_sink] = 6,
103 	[snd_soc_dapm_pga] = 6,
104 	[snd_soc_dapm_buffer] = 6,
105 	[snd_soc_dapm_scheduler] = 6,
106 	[snd_soc_dapm_effect] = 6,
107 	[snd_soc_dapm_src] = 6,
108 	[snd_soc_dapm_asrc] = 6,
109 	[snd_soc_dapm_encoder] = 6,
110 	[snd_soc_dapm_decoder] = 6,
111 	[snd_soc_dapm_switch] = 7,
112 	[snd_soc_dapm_mixer_named_ctl] = 7,
113 	[snd_soc_dapm_mixer] = 7,
114 	[snd_soc_dapm_dac] = 8,
115 	[snd_soc_dapm_mic] = 9,
116 	[snd_soc_dapm_siggen] = 9,
117 	[snd_soc_dapm_input] = 9,
118 	[snd_soc_dapm_output] = 9,
119 	[snd_soc_dapm_micbias] = 10,
120 	[snd_soc_dapm_vmid] = 10,
121 	[snd_soc_dapm_mux] = 11,
122 	[snd_soc_dapm_demux] = 11,
123 	[snd_soc_dapm_aif_in] = 12,
124 	[snd_soc_dapm_aif_out] = 12,
125 	[snd_soc_dapm_dai_in] = 12,
126 	[snd_soc_dapm_dai_out] = 12,
127 	[snd_soc_dapm_dai_link] = 13,
128 	[snd_soc_dapm_supply] = 14,
129 	[snd_soc_dapm_clock_supply] = 15,
130 	[snd_soc_dapm_pinctrl] = 15,
131 	[snd_soc_dapm_regulator_supply] = 15,
132 	[snd_soc_dapm_post] = 16,
133 };
134 
135 static void dapm_assert_locked(struct snd_soc_dapm_context *dapm)
136 {
137 	if (snd_soc_card_is_instantiated(dapm->card))
138 		snd_soc_dapm_mutex_assert_held(dapm);
139 }
140 
141 static void pop_wait(u32 pop_time)
142 {
143 	if (pop_time)
144 		schedule_timeout_uninterruptible(msecs_to_jiffies(pop_time));
145 }
146 
147 __printf(3, 4)
148 static void pop_dbg(struct device *dev, u32 pop_time, const char *fmt, ...)
149 {
150 	va_list args;
151 	char *buf;
152 
153 	if (!pop_time)
154 		return;
155 
156 	buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
157 	if (buf == NULL)
158 		return;
159 
160 	va_start(args, fmt);
161 	vsnprintf(buf, PAGE_SIZE, fmt, args);
162 	dev_info(dev, "%s", buf);
163 	va_end(args);
164 
165 	kfree(buf);
166 }
167 
168 struct device *snd_soc_dapm_to_dev(struct snd_soc_dapm_context *dapm)
169 {
170 	if (dapm->component)
171 		return dapm->component->dev;
172 
173 	return dapm->card->dev;
174 }
175 EXPORT_SYMBOL_GPL(snd_soc_dapm_to_dev);
176 
177 struct snd_soc_card *snd_soc_dapm_to_card(struct snd_soc_dapm_context *dapm)
178 {
179 	return dapm->card;
180 }
181 EXPORT_SYMBOL_GPL(snd_soc_dapm_to_card);
182 
183 struct snd_soc_component *snd_soc_dapm_to_component(struct snd_soc_dapm_context *dapm)
184 {
185 	return dapm->component;
186 }
187 EXPORT_SYMBOL_GPL(snd_soc_dapm_to_component);
188 
189 static bool dapm_dirty_widget(struct snd_soc_dapm_widget *w)
190 {
191 	return !list_empty(&w->dirty);
192 }
193 
194 static void dapm_mark_dirty(struct snd_soc_dapm_widget *w, const char *reason)
195 {
196 	struct device *dev = snd_soc_dapm_to_dev(w->dapm);
197 
198 	dapm_assert_locked(w->dapm);
199 
200 	if (!dapm_dirty_widget(w)) {
201 		dev_vdbg(dev, "Marking %s dirty due to %s\n",
202 			 w->name, reason);
203 		list_add_tail(&w->dirty, &w->dapm->card->dapm_dirty);
204 	}
205 }
206 
207 /*
208  * Common implementation for dapm_widget_invalidate_input_paths() and
209  * dapm_widget_invalidate_output_paths(). The function is inlined since the
210  * combined size of the two specialized functions is only marginally larger then
211  * the size of the generic function and at the same time the fast path of the
212  * specialized functions is significantly smaller than the generic function.
213  */
214 static __always_inline void dapm_widget_invalidate_paths(
215 	struct snd_soc_dapm_widget *w, enum snd_soc_dapm_direction dir)
216 {
217 	enum snd_soc_dapm_direction rdir = SND_SOC_DAPM_DIR_REVERSE(dir);
218 	struct snd_soc_dapm_widget *node;
219 	struct snd_soc_dapm_path *p;
220 	LIST_HEAD(list);
221 
222 	dapm_assert_locked(w->dapm);
223 
224 	if (w->endpoints[dir] == -1)
225 		return;
226 
227 	list_add_tail(&w->work_list, &list);
228 	w->endpoints[dir] = -1;
229 
230 	list_for_each_entry(w, &list, work_list) {
231 		snd_soc_dapm_widget_for_each_path(w, dir, p) {
232 			if (p->is_supply || !p->connect)
233 				continue;
234 			node = p->node[rdir];
235 			if (node->endpoints[dir] != -1) {
236 				node->endpoints[dir] = -1;
237 				list_add_tail(&node->work_list, &list);
238 			}
239 		}
240 	}
241 }
242 
243 /*
244  * dapm_widget_invalidate_input_paths() - Invalidate the cached number of
245  *  input paths
246  * @w: The widget for which to invalidate the cached number of input paths
247  *
248  * Resets the cached number of inputs for the specified widget and all widgets
249  * that can be reached via outcoming paths from the widget.
250  *
251  * This function must be called if the number of output paths for a widget might
252  * have changed. E.g. if the source state of a widget changes or a path is added
253  * or activated with the widget as the sink.
254  */
255 static void dapm_widget_invalidate_input_paths(struct snd_soc_dapm_widget *w)
256 {
257 	dapm_widget_invalidate_paths(w, SND_SOC_DAPM_DIR_IN);
258 }
259 
260 /*
261  * dapm_widget_invalidate_output_paths() - Invalidate the cached number of
262  *  output paths
263  * @w: The widget for which to invalidate the cached number of output paths
264  *
265  * Resets the cached number of outputs for the specified widget and all widgets
266  * that can be reached via incoming paths from the widget.
267  *
268  * This function must be called if the number of output paths for a widget might
269  * have changed. E.g. if the sink state of a widget changes or a path is added
270  * or activated with the widget as the source.
271  */
272 static void dapm_widget_invalidate_output_paths(struct snd_soc_dapm_widget *w)
273 {
274 	dapm_widget_invalidate_paths(w, SND_SOC_DAPM_DIR_OUT);
275 }
276 
277 /*
278  * dapm_path_invalidate() - Invalidates the cached number of inputs and outputs
279  *  for the widgets connected to a path
280  * @p: The path to invalidate
281  *
282  * Resets the cached number of inputs for the sink of the path and the cached
283  * number of outputs for the source of the path.
284  *
285  * This function must be called when a path is added, removed or the connected
286  * state changes.
287  */
288 static void dapm_path_invalidate(struct snd_soc_dapm_path *p)
289 {
290 	/*
291 	 * Weak paths or supply paths do not influence the number of input or
292 	 * output paths of their neighbors.
293 	 */
294 	if (p->is_supply)
295 		return;
296 
297 	/*
298 	 * The number of connected endpoints is the sum of the number of
299 	 * connected endpoints of all neighbors. If a node with 0 connected
300 	 * endpoints is either connected or disconnected that sum won't change,
301 	 * so there is no need to re-check the path.
302 	 */
303 	if (p->source->endpoints[SND_SOC_DAPM_DIR_IN] != 0)
304 		dapm_widget_invalidate_input_paths(p->sink);
305 	if (p->sink->endpoints[SND_SOC_DAPM_DIR_OUT] != 0)
306 		dapm_widget_invalidate_output_paths(p->source);
307 }
308 
309 void snd_soc_dapm_mark_endpoints_dirty(struct snd_soc_card *card)
310 {
311 	struct snd_soc_dapm_widget *w;
312 
313 	snd_soc_dapm_mutex_lock_root(card);
314 
315 	for_each_card_widgets(card, w) {
316 		if (w->is_ep) {
317 			dapm_mark_dirty(w, "Rechecking endpoints");
318 			if (w->is_ep & SND_SOC_DAPM_EP_SINK)
319 				dapm_widget_invalidate_output_paths(w);
320 			if (w->is_ep & SND_SOC_DAPM_EP_SOURCE)
321 				dapm_widget_invalidate_input_paths(w);
322 		}
323 	}
324 
325 	snd_soc_dapm_mutex_unlock(card);
326 }
327 
328 /* create a new dapm widget */
329 static inline struct snd_soc_dapm_widget *dapm_cnew_widget(
330 	const struct snd_soc_dapm_widget *_widget,
331 	const char *prefix)
332 {
333 	struct snd_soc_dapm_widget *w __free(kfree) = kmemdup(_widget,
334 							      sizeof(*_widget),
335 							      GFP_KERNEL);
336 	if (!w)
337 		return NULL;
338 
339 	if (prefix)
340 		w->name = kasprintf(GFP_KERNEL, "%s %s", prefix, _widget->name);
341 	else
342 		w->name = kstrdup_const(_widget->name, GFP_KERNEL);
343 	if (!w->name)
344 		return NULL;
345 
346 	if (_widget->sname) {
347 		w->sname = kstrdup_const(_widget->sname, GFP_KERNEL);
348 		if (!w->sname) {
349 			kfree_const(w->name);
350 			return NULL;
351 		}
352 	}
353 
354 	return_ptr(w);
355 }
356 
357 struct dapm_kcontrol_data {
358 	unsigned int value;
359 	struct snd_soc_dapm_widget *widget;
360 	struct list_head paths;
361 	struct snd_soc_dapm_widget_list *wlist;
362 };
363 
364 static unsigned int soc_dapm_read(struct snd_soc_dapm_context *dapm, int reg)
365 {
366 	if (!dapm->component)
367 		return -EIO;
368 	return  snd_soc_component_read(dapm->component, reg);
369 }
370 
371 /* set up initial codec paths */
372 static void dapm_set_mixer_path_status(struct snd_soc_dapm_path *p, int i,
373 				       int nth_path)
374 {
375 	struct soc_mixer_control *mc = (struct soc_mixer_control *)
376 		p->sink->kcontrol_news[i].private_value;
377 	unsigned int reg = mc->reg;
378 	unsigned int invert = mc->invert;
379 
380 	if (reg != SND_SOC_NOPM) {
381 		unsigned int shift = mc->shift;
382 		unsigned int max = mc->max;
383 		unsigned int mask = (1 << fls(max)) - 1;
384 		unsigned int val = soc_dapm_read(p->sink->dapm, reg);
385 
386 		/*
387 		 * The nth_path argument allows this function to know
388 		 * which path of a kcontrol it is setting the initial
389 		 * status for. Ideally this would support any number
390 		 * of paths and channels. But since kcontrols only come
391 		 * in mono and stereo variants, we are limited to 2
392 		 * channels.
393 		 *
394 		 * The following code assumes for stereo controls the
395 		 * first path is the left channel, and all remaining
396 		 * paths are the right channel.
397 		 */
398 		if (snd_soc_volsw_is_stereo(mc) && nth_path > 0) {
399 			if (reg != mc->rreg)
400 				val = soc_dapm_read(p->sink->dapm, mc->rreg);
401 			val = (val >> mc->rshift) & mask;
402 		} else {
403 			val = (val >> shift) & mask;
404 		}
405 		if (invert)
406 			val = max - val;
407 		p->connect = !!val;
408 	} else {
409 		/* since a virtual mixer has no backing registers to
410 		 * decide which path to connect, it will try to match
411 		 * with initial state.  This is to ensure
412 		 * that the default mixer choice will be
413 		 * correctly powered up during initialization.
414 		 */
415 		p->connect = invert;
416 	}
417 }
418 
419 /* connect mux widget to its interconnecting audio paths */
420 static int dapm_connect_mux(struct snd_soc_dapm_context *dapm,
421 			    struct snd_soc_dapm_path *path, const char *control_name,
422 			    struct snd_soc_dapm_widget *w)
423 {
424 	const struct snd_kcontrol_new *kcontrol = &w->kcontrol_news[0];
425 	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
426 	unsigned int item;
427 	int i;
428 
429 	if (e->reg != SND_SOC_NOPM) {
430 		unsigned int val;
431 
432 		val = soc_dapm_read(dapm, e->reg);
433 		val = (val >> e->shift_l) & e->mask;
434 		item = snd_soc_enum_val_to_item(e, val);
435 	} else {
436 		/* since a virtual mux has no backing registers to
437 		 * decide which path to connect, it will try to match
438 		 * with the first enumeration.  This is to ensure
439 		 * that the default mux choice (the first) will be
440 		 * correctly powered up during initialization.
441 		 */
442 		item = 0;
443 	}
444 
445 	i = match_string(e->texts, e->items, control_name);
446 	if (i < 0)
447 		return -ENODEV;
448 
449 	path->name = e->texts[i];
450 	path->connect = (i == item);
451 	return 0;
452 
453 }
454 
455 /* connect mixer widget to its interconnecting audio paths */
456 static int dapm_connect_mixer(struct snd_soc_dapm_context *dapm,
457 			      struct snd_soc_dapm_path *path, const char *control_name)
458 {
459 	int i, nth_path = 0;
460 
461 	/* search for mixer kcontrol */
462 	for (i = 0; i < path->sink->num_kcontrols; i++) {
463 		if (!strcmp(control_name, path->sink->kcontrol_news[i].name)) {
464 			path->name = path->sink->kcontrol_news[i].name;
465 			dapm_set_mixer_path_status(path, i, nth_path++);
466 			return 0;
467 		}
468 	}
469 	return -ENODEV;
470 }
471 
472 /*
473  * dapm_update_widget_flags() - Re-compute widget sink and source flags
474  * @w: The widget for which to update the flags
475  *
476  * Some widgets have a dynamic category which depends on which neighbors they
477  * are connected to. This function update the category for these widgets.
478  *
479  * This function must be called whenever a path is added or removed to a widget.
480  */
481 static void dapm_update_widget_flags(struct snd_soc_dapm_widget *w)
482 {
483 	enum snd_soc_dapm_direction dir;
484 	struct snd_soc_dapm_path *p;
485 	unsigned int ep;
486 
487 	switch (w->id) {
488 	case snd_soc_dapm_input:
489 		/* On a fully routed card an input is never a source */
490 		if (w->dapm->card->fully_routed)
491 			return;
492 		ep = SND_SOC_DAPM_EP_SOURCE;
493 		snd_soc_dapm_widget_for_each_source_path(w, p) {
494 			if (p->source->id == snd_soc_dapm_micbias ||
495 			    p->source->id == snd_soc_dapm_mic ||
496 			    p->source->id == snd_soc_dapm_line ||
497 			    p->source->id == snd_soc_dapm_output) {
498 				ep = 0;
499 				break;
500 			}
501 		}
502 		break;
503 	case snd_soc_dapm_output:
504 		/* On a fully routed card a output is never a sink */
505 		if (w->dapm->card->fully_routed)
506 			return;
507 		ep = SND_SOC_DAPM_EP_SINK;
508 		snd_soc_dapm_widget_for_each_sink_path(w, p) {
509 			if (p->sink->id == snd_soc_dapm_spk ||
510 			    p->sink->id == snd_soc_dapm_hp ||
511 			    p->sink->id == snd_soc_dapm_line ||
512 			    p->sink->id == snd_soc_dapm_input) {
513 				ep = 0;
514 				break;
515 			}
516 		}
517 		break;
518 	case snd_soc_dapm_line:
519 		ep = 0;
520 		snd_soc_dapm_for_each_direction(dir) {
521 			if (!list_empty(&w->edges[dir]))
522 				ep |= SND_SOC_DAPM_DIR_TO_EP(dir);
523 		}
524 		break;
525 	default:
526 		return;
527 	}
528 
529 	w->is_ep = ep;
530 }
531 
532 static int snd_soc_dapm_check_dynamic_path(
533 	struct snd_soc_dapm_context *dapm,
534 	struct snd_soc_dapm_widget *source, struct snd_soc_dapm_widget *sink,
535 	const char *control)
536 {
537 	struct device *dev = snd_soc_dapm_to_dev(dapm);
538 	bool dynamic_source = false;
539 	bool dynamic_sink = false;
540 
541 	if (!control)
542 		return 0;
543 
544 	switch (source->id) {
545 	case snd_soc_dapm_demux:
546 		dynamic_source = true;
547 		break;
548 	default:
549 		break;
550 	}
551 
552 	switch (sink->id) {
553 	case snd_soc_dapm_mux:
554 	case snd_soc_dapm_switch:
555 	case snd_soc_dapm_mixer:
556 	case snd_soc_dapm_mixer_named_ctl:
557 		dynamic_sink = true;
558 		break;
559 	default:
560 		break;
561 	}
562 
563 	if (dynamic_source && dynamic_sink) {
564 		dev_err(dev,
565 			"Direct connection between demux and mixer/mux not supported for path %s -> [%s] -> %s\n",
566 			source->name, control, sink->name);
567 		return -EINVAL;
568 	} else if (!dynamic_source && !dynamic_sink) {
569 		dev_err(dev,
570 			"Control not supported for path %s -> [%s] -> %s\n",
571 			source->name, control, sink->name);
572 		return -EINVAL;
573 	}
574 
575 	return 0;
576 }
577 
578 static int snd_soc_dapm_add_path(
579 	struct snd_soc_dapm_context *dapm,
580 	struct snd_soc_dapm_widget *wsource, struct snd_soc_dapm_widget *wsink,
581 	const char *control,
582 	int (*connected)(struct snd_soc_dapm_widget *source,
583 			 struct snd_soc_dapm_widget *sink))
584 {
585 	struct device *dev = snd_soc_dapm_to_dev(dapm);
586 	enum snd_soc_dapm_direction dir;
587 	struct snd_soc_dapm_path *path;
588 	int ret;
589 
590 	if (wsink->is_supply && !wsource->is_supply) {
591 		dev_err(dev,
592 			"Connecting non-supply widget to supply widget is not supported (%s -> %s)\n",
593 			wsource->name, wsink->name);
594 		return -EINVAL;
595 	}
596 
597 	if (connected && !wsource->is_supply) {
598 		dev_err(dev,
599 			"connected() callback only supported for supply widgets (%s -> %s)\n",
600 			wsource->name, wsink->name);
601 		return -EINVAL;
602 	}
603 
604 	if (wsource->is_supply && control) {
605 		dev_err(dev,
606 			"Conditional paths are not supported for supply widgets (%s -> [%s] -> %s)\n",
607 			wsource->name, control, wsink->name);
608 		return -EINVAL;
609 	}
610 
611 	ret = snd_soc_dapm_check_dynamic_path(dapm, wsource, wsink, control);
612 	if (ret)
613 		return ret;
614 
615 	path = kzalloc(sizeof(struct snd_soc_dapm_path), GFP_KERNEL);
616 	if (!path)
617 		return -ENOMEM;
618 
619 	path->node[SND_SOC_DAPM_DIR_IN] = wsource;
620 	path->node[SND_SOC_DAPM_DIR_OUT] = wsink;
621 
622 	path->connected = connected;
623 	INIT_LIST_HEAD(&path->list);
624 	INIT_LIST_HEAD(&path->list_kcontrol);
625 
626 	if (wsource->is_supply || wsink->is_supply)
627 		path->is_supply = 1;
628 
629 	/* connect static paths */
630 	if (control == NULL) {
631 		path->connect = 1;
632 	} else {
633 		switch (wsource->id) {
634 		case snd_soc_dapm_demux:
635 			ret = dapm_connect_mux(dapm, path, control, wsource);
636 			if (ret)
637 				goto err;
638 			break;
639 		default:
640 			break;
641 		}
642 
643 		switch (wsink->id) {
644 		case snd_soc_dapm_mux:
645 			ret = dapm_connect_mux(dapm, path, control, wsink);
646 			if (ret != 0)
647 				goto err;
648 			break;
649 		case snd_soc_dapm_switch:
650 		case snd_soc_dapm_mixer:
651 		case snd_soc_dapm_mixer_named_ctl:
652 			ret = dapm_connect_mixer(dapm, path, control);
653 			if (ret != 0)
654 				goto err;
655 			break;
656 		default:
657 			break;
658 		}
659 	}
660 
661 	list_add(&path->list, &dapm->card->paths);
662 
663 	snd_soc_dapm_for_each_direction(dir)
664 		list_add(&path->list_node[dir], &path->node[dir]->edges[dir]);
665 
666 	snd_soc_dapm_for_each_direction(dir) {
667 		dapm_update_widget_flags(path->node[dir]);
668 		dapm_mark_dirty(path->node[dir], "Route added");
669 	}
670 
671 	if (snd_soc_card_is_instantiated(dapm->card) && path->connect)
672 		dapm_path_invalidate(path);
673 
674 	return 0;
675 err:
676 	kfree(path);
677 	return ret;
678 }
679 
680 static int dapm_kcontrol_data_alloc(struct snd_soc_dapm_widget *widget,
681 	struct snd_kcontrol *kcontrol, const char *ctrl_name)
682 {
683 	struct device *dev = snd_soc_dapm_to_dev(widget->dapm);
684 	struct dapm_kcontrol_data *data;
685 	struct soc_mixer_control *mc;
686 	struct soc_enum *e;
687 	const char *name;
688 	int ret;
689 
690 	data = kzalloc(sizeof(*data), GFP_KERNEL);
691 	if (!data)
692 		return -ENOMEM;
693 
694 	INIT_LIST_HEAD(&data->paths);
695 
696 	switch (widget->id) {
697 	case snd_soc_dapm_switch:
698 	case snd_soc_dapm_mixer:
699 	case snd_soc_dapm_mixer_named_ctl:
700 		mc = (struct soc_mixer_control *)kcontrol->private_value;
701 
702 		if (mc->autodisable) {
703 			struct snd_soc_dapm_widget template;
704 
705 			if (snd_soc_volsw_is_stereo(mc))
706 				dev_warn(dev,
707 					 "ASoC: Unsupported stereo autodisable control '%s'\n",
708 					 ctrl_name);
709 
710 			name = kasprintf(GFP_KERNEL, "%s %s", ctrl_name,
711 					 "Autodisable");
712 			if (!name) {
713 				ret = -ENOMEM;
714 				goto err_data;
715 			}
716 
717 			memset(&template, 0, sizeof(template));
718 			template.reg = mc->reg;
719 			template.mask = (1 << fls(mc->max)) - 1;
720 			template.shift = mc->shift;
721 			if (mc->invert)
722 				template.off_val = mc->max;
723 			else
724 				template.off_val = 0;
725 			template.on_val = template.off_val;
726 			template.id = snd_soc_dapm_kcontrol;
727 			template.name = name;
728 
729 			data->value = template.on_val;
730 
731 			data->widget =
732 				snd_soc_dapm_new_control_unlocked(widget->dapm,
733 				&template);
734 			kfree(name);
735 			if (IS_ERR(data->widget)) {
736 				ret = PTR_ERR(data->widget);
737 				goto err_data;
738 			}
739 		}
740 		break;
741 	case snd_soc_dapm_demux:
742 	case snd_soc_dapm_mux:
743 		e = (struct soc_enum *)kcontrol->private_value;
744 
745 		if (e->autodisable) {
746 			struct snd_soc_dapm_widget template;
747 
748 			name = kasprintf(GFP_KERNEL, "%s %s", ctrl_name,
749 					 "Autodisable");
750 			if (!name) {
751 				ret = -ENOMEM;
752 				goto err_data;
753 			}
754 
755 			memset(&template, 0, sizeof(template));
756 			template.reg = e->reg;
757 			template.mask = e->mask;
758 			template.shift = e->shift_l;
759 			template.off_val = snd_soc_enum_item_to_val(e, 0);
760 			template.on_val = template.off_val;
761 			template.id = snd_soc_dapm_kcontrol;
762 			template.name = name;
763 
764 			data->value = template.on_val;
765 
766 			data->widget = snd_soc_dapm_new_control_unlocked(
767 						widget->dapm, &template);
768 			kfree(name);
769 			if (IS_ERR(data->widget)) {
770 				ret = PTR_ERR(data->widget);
771 				goto err_data;
772 			}
773 
774 			snd_soc_dapm_add_path(widget->dapm, data->widget,
775 					      widget, NULL, NULL);
776 		} else if (e->reg != SND_SOC_NOPM) {
777 			data->value = soc_dapm_read(widget->dapm, e->reg) &
778 				      (e->mask << e->shift_l);
779 		}
780 		break;
781 	default:
782 		break;
783 	}
784 
785 	kcontrol->private_data = data;
786 
787 	return 0;
788 
789 err_data:
790 	kfree(data);
791 	return ret;
792 }
793 
794 static void dapm_kcontrol_free(struct snd_kcontrol *kctl)
795 {
796 	struct dapm_kcontrol_data *data = snd_kcontrol_chip(kctl);
797 
798 	list_del(&data->paths);
799 	kfree(data->wlist);
800 	kfree(data);
801 }
802 
803 static struct snd_soc_dapm_widget_list *dapm_kcontrol_get_wlist(
804 	const struct snd_kcontrol *kcontrol)
805 {
806 	struct dapm_kcontrol_data *data = snd_kcontrol_chip(kcontrol);
807 
808 	return data->wlist;
809 }
810 
811 static int dapm_kcontrol_add_widget(struct snd_kcontrol *kcontrol,
812 	struct snd_soc_dapm_widget *widget)
813 {
814 	struct dapm_kcontrol_data *data = snd_kcontrol_chip(kcontrol);
815 	struct snd_soc_dapm_widget_list *new_wlist;
816 	unsigned int n;
817 
818 	if (data->wlist)
819 		n = data->wlist->num_widgets + 1;
820 	else
821 		n = 1;
822 
823 	new_wlist = krealloc(data->wlist,
824 			     struct_size(new_wlist, widgets, n),
825 			     GFP_KERNEL);
826 	if (!new_wlist)
827 		return -ENOMEM;
828 
829 	new_wlist->num_widgets = n;
830 	new_wlist->widgets[n - 1] = widget;
831 
832 	data->wlist = new_wlist;
833 
834 	return 0;
835 }
836 
837 static void dapm_kcontrol_add_path(const struct snd_kcontrol *kcontrol,
838 	struct snd_soc_dapm_path *path)
839 {
840 	struct dapm_kcontrol_data *data = snd_kcontrol_chip(kcontrol);
841 
842 	list_add_tail(&path->list_kcontrol, &data->paths);
843 }
844 
845 static bool dapm_kcontrol_is_powered(const struct snd_kcontrol *kcontrol)
846 {
847 	struct dapm_kcontrol_data *data = snd_kcontrol_chip(kcontrol);
848 
849 	if (!data->widget)
850 		return true;
851 
852 	return data->widget->power;
853 }
854 
855 static struct list_head *dapm_kcontrol_get_path_list(
856 	const struct snd_kcontrol *kcontrol)
857 {
858 	struct dapm_kcontrol_data *data = snd_kcontrol_chip(kcontrol);
859 
860 	return &data->paths;
861 }
862 
863 #define dapm_kcontrol_for_each_path(path, kcontrol) \
864 	list_for_each_entry(path, dapm_kcontrol_get_path_list(kcontrol), \
865 		list_kcontrol)
866 
867 unsigned int snd_soc_dapm_kcontrol_get_value(const struct snd_kcontrol *kcontrol)
868 {
869 	struct dapm_kcontrol_data *data = snd_kcontrol_chip(kcontrol);
870 
871 	return data->value;
872 }
873 EXPORT_SYMBOL_GPL(snd_soc_dapm_kcontrol_get_value);
874 
875 static bool dapm_kcontrol_set_value(const struct snd_kcontrol *kcontrol,
876 	unsigned int value)
877 {
878 	struct dapm_kcontrol_data *data = snd_kcontrol_chip(kcontrol);
879 
880 	if (data->value == value)
881 		return false;
882 
883 	if (data->widget) {
884 		switch (dapm_kcontrol_get_wlist(kcontrol)->widgets[0]->id) {
885 		case snd_soc_dapm_switch:
886 		case snd_soc_dapm_mixer:
887 		case snd_soc_dapm_mixer_named_ctl:
888 			data->widget->on_val = value & data->widget->mask;
889 			break;
890 		case snd_soc_dapm_demux:
891 		case snd_soc_dapm_mux:
892 			data->widget->on_val = value >> data->widget->shift;
893 			break;
894 		default:
895 			data->widget->on_val = value;
896 			break;
897 		}
898 	}
899 
900 	data->value = value;
901 
902 	return true;
903 }
904 
905 /**
906  * snd_soc_dapm_kcontrol_to_widget() - Returns the widget associated to a
907  *   kcontrol
908  * @kcontrol: The kcontrol
909  */
910 struct snd_soc_dapm_widget *snd_soc_dapm_kcontrol_to_widget(struct snd_kcontrol *kcontrol)
911 {
912 	return dapm_kcontrol_get_wlist(kcontrol)->widgets[0];
913 }
914 EXPORT_SYMBOL_GPL(snd_soc_dapm_kcontrol_to_widget);
915 
916 /**
917  * snd_soc_dapm_kcontrol_to_dapm() - Returns the dapm context associated to a kcontrol
918  * @kcontrol: The kcontrol
919  *
920  * Note: This function must only be used on kcontrols that are known to have
921  * been registered for a CODEC. Otherwise the behaviour is undefined.
922  */
923 struct snd_soc_dapm_context *snd_soc_dapm_kcontrol_to_dapm(struct snd_kcontrol *kcontrol)
924 {
925 	return dapm_kcontrol_get_wlist(kcontrol)->widgets[0]->dapm;
926 }
927 EXPORT_SYMBOL_GPL(snd_soc_dapm_kcontrol_to_dapm);
928 
929 /**
930  * snd_soc_dapm_kcontrol_to_component() - Returns the component associated to a
931  * kcontrol
932  * @kcontrol: The kcontrol
933  *
934  * This function must only be used on DAPM contexts that are known to be part of
935  * a COMPONENT (e.g. in a COMPONENT driver). Otherwise the behavior is undefined
936  */
937 struct snd_soc_component *snd_soc_dapm_kcontrol_to_component(struct snd_kcontrol *kcontrol)
938 {
939 	return snd_soc_dapm_to_component(snd_soc_dapm_kcontrol_to_dapm(kcontrol));
940 }
941 EXPORT_SYMBOL_GPL(snd_soc_dapm_kcontrol_to_component);
942 
943 static void dapm_reset(struct snd_soc_card *card)
944 {
945 	struct snd_soc_dapm_widget *w;
946 
947 	snd_soc_dapm_mutex_assert_held(card);
948 
949 	memset(&card->dapm_stats, 0, sizeof(card->dapm_stats));
950 
951 	for_each_card_widgets(card, w) {
952 		w->new_power = w->power;
953 		w->power_checked = false;
954 	}
955 }
956 
957 static const char *soc_dapm_prefix(struct snd_soc_dapm_context *dapm)
958 {
959 	if (!dapm->component)
960 		return NULL;
961 	return dapm->component->name_prefix;
962 }
963 
964 static int soc_dapm_update_bits(struct snd_soc_dapm_context *dapm,
965 	int reg, unsigned int mask, unsigned int value)
966 {
967 	if (!dapm->component)
968 		return -EIO;
969 	return snd_soc_component_update_bits(dapm->component, reg,
970 					     mask, value);
971 }
972 
973 static int soc_dapm_test_bits(struct snd_soc_dapm_context *dapm,
974 	int reg, unsigned int mask, unsigned int value)
975 {
976 	if (!dapm->component)
977 		return -EIO;
978 	return snd_soc_component_test_bits(dapm->component, reg, mask, value);
979 }
980 
981 static void soc_dapm_async_complete(struct snd_soc_dapm_context *dapm)
982 {
983 	if (dapm->component)
984 		snd_soc_component_async_complete(dapm->component);
985 }
986 
987 static struct snd_soc_dapm_widget *
988 dapm_wcache_lookup(struct snd_soc_dapm_widget *w, const char *name)
989 {
990 	if (w) {
991 		struct list_head *wlist = &w->dapm->card->widgets;
992 		const int depth = 2;
993 		int i = 0;
994 
995 		list_for_each_entry_from(w, wlist, list) {
996 			if (!strcmp(name, w->name))
997 				return w;
998 
999 			if (++i == depth)
1000 				break;
1001 		}
1002 	}
1003 
1004 	return NULL;
1005 }
1006 
1007 /**
1008  * snd_soc_dapm_force_bias_level() - Sets the DAPM bias level
1009  * @dapm: The DAPM context for which to set the level
1010  * @level: The level to set
1011  *
1012  * Forces the DAPM bias level to a specific state. It will call the bias level
1013  * callback of DAPM context with the specified level. This will even happen if
1014  * the context is already at the same level. Furthermore it will not go through
1015  * the normal bias level sequencing, meaning any intermediate states between the
1016  * current and the target state will not be entered.
1017  *
1018  * Note that the change in bias level is only temporary and the next time
1019  * snd_soc_dapm_sync() is called the state will be set to the level as
1020  * determined by the DAPM core. The function is mainly intended to be used to
1021  * used during probe or resume from suspend to power up the device so
1022  * initialization can be done, before the DAPM core takes over.
1023  */
1024 int snd_soc_dapm_force_bias_level(struct snd_soc_dapm_context *dapm,
1025 	enum snd_soc_bias_level level)
1026 {
1027 	int ret = 0;
1028 
1029 	if (dapm->component)
1030 		ret = snd_soc_component_set_bias_level(dapm->component, level);
1031 
1032 	if (ret == 0)
1033 		dapm->bias_level = level;
1034 
1035 	return ret;
1036 }
1037 EXPORT_SYMBOL_GPL(snd_soc_dapm_force_bias_level);
1038 
1039 /**
1040  * snd_soc_dapm_init_bias_level() - Initialize DAPM bias level
1041  * @dapm: The DAPM context to initialize
1042  * @level: The DAPM level to initialize to
1043  *
1044  * This function only sets the driver internal state of the DAPM level and will
1045  * not modify the state of the device. Hence it should not be used during normal
1046  * operation, but only to synchronize the internal state to the device state.
1047  * E.g. during driver probe to set the DAPM level to the one corresponding with
1048  * the power-on reset state of the device.
1049  *
1050  * To change the DAPM state of the device use snd_soc_dapm_set_bias_level().
1051  */
1052 void snd_soc_dapm_init_bias_level(struct snd_soc_dapm_context *dapm, enum snd_soc_bias_level level)
1053 {
1054 	dapm->bias_level = level;
1055 }
1056 EXPORT_SYMBOL_GPL(snd_soc_dapm_init_bias_level);
1057 
1058 /**
1059  * snd_soc_dapm_set_bias_level - set the bias level for the system
1060  * @dapm: DAPM context
1061  * @level: level to configure
1062  *
1063  * Configure the bias (power) levels for the SoC audio device.
1064  *
1065  * Returns 0 for success else error.
1066  */
1067 static int snd_soc_dapm_set_bias_level(struct snd_soc_dapm_context *dapm,
1068 				       enum snd_soc_bias_level level)
1069 {
1070 	struct snd_soc_card *card = dapm->card;
1071 	int ret = 0;
1072 
1073 	trace_snd_soc_bias_level_start(dapm, level);
1074 
1075 	ret = snd_soc_card_set_bias_level(card, dapm, level);
1076 	if (ret != 0)
1077 		goto out;
1078 
1079 	if (dapm != &card->dapm)
1080 		ret = snd_soc_dapm_force_bias_level(dapm, level);
1081 
1082 	if (ret != 0)
1083 		goto out;
1084 
1085 	ret = snd_soc_card_set_bias_level_post(card, dapm, level);
1086 out:
1087 	trace_snd_soc_bias_level_done(dapm, level);
1088 
1089 	/* success */
1090 	if (ret == 0)
1091 		snd_soc_dapm_init_bias_level(dapm, level);
1092 
1093 	return ret;
1094 }
1095 
1096 /**
1097  * snd_soc_dapm_get_bias_level() - Get current DAPM bias level
1098  * @dapm: The context for which to get the bias level
1099  *
1100  * Returns: The current bias level of the passed DAPM context.
1101  */
1102 enum snd_soc_bias_level snd_soc_dapm_get_bias_level(struct snd_soc_dapm_context *dapm)
1103 {
1104 	return dapm->bias_level;
1105 }
1106 EXPORT_SYMBOL_GPL(snd_soc_dapm_get_bias_level);
1107 
1108 static int dapm_is_shared_kcontrol(struct snd_soc_dapm_context *dapm,
1109 	struct snd_soc_dapm_widget *kcontrolw,
1110 	const struct snd_kcontrol_new *kcontrol_new,
1111 	struct snd_kcontrol **kcontrol)
1112 {
1113 	struct snd_soc_dapm_widget *w;
1114 	int i;
1115 
1116 	*kcontrol = NULL;
1117 
1118 	for_each_card_widgets(dapm->card, w) {
1119 		if (w == kcontrolw || w->dapm != kcontrolw->dapm)
1120 			continue;
1121 		for (i = 0; i < w->num_kcontrols; i++) {
1122 			if (&w->kcontrol_news[i] == kcontrol_new) {
1123 				if (w->kcontrols)
1124 					*kcontrol = w->kcontrols[i];
1125 				return 1;
1126 			}
1127 		}
1128 	}
1129 
1130 	return 0;
1131 }
1132 
1133 /*
1134  * Determine if a kcontrol is shared. If it is, look it up. If it isn't,
1135  * create it. Either way, add the widget into the control's widget list
1136  */
1137 static int dapm_create_or_share_kcontrol(struct snd_soc_dapm_widget *w,
1138 	int kci)
1139 {
1140 	struct snd_soc_dapm_context *dapm = w->dapm;
1141 	struct device *dev = snd_soc_dapm_to_dev(dapm);
1142 	struct snd_card *card = dapm->card->snd_card;
1143 	const char *prefix;
1144 	size_t prefix_len;
1145 	int shared;
1146 	struct snd_kcontrol *kcontrol;
1147 	bool wname_in_long_name, kcname_in_long_name;
1148 	char *long_name = NULL;
1149 	const char *name;
1150 	int ret = 0;
1151 
1152 	prefix = soc_dapm_prefix(dapm);
1153 	if (prefix)
1154 		prefix_len = strlen(prefix) + 1;
1155 	else
1156 		prefix_len = 0;
1157 
1158 	shared = dapm_is_shared_kcontrol(dapm, w, &w->kcontrol_news[kci],
1159 					 &kcontrol);
1160 
1161 	if (!kcontrol) {
1162 		if (shared) {
1163 			wname_in_long_name = false;
1164 			kcname_in_long_name = true;
1165 		} else {
1166 			switch (w->id) {
1167 			case snd_soc_dapm_switch:
1168 			case snd_soc_dapm_mixer:
1169 			case snd_soc_dapm_pga:
1170 			case snd_soc_dapm_effect:
1171 			case snd_soc_dapm_out_drv:
1172 				wname_in_long_name = true;
1173 				kcname_in_long_name = true;
1174 				break;
1175 			case snd_soc_dapm_mixer_named_ctl:
1176 				wname_in_long_name = false;
1177 				kcname_in_long_name = true;
1178 				break;
1179 			case snd_soc_dapm_demux:
1180 			case snd_soc_dapm_mux:
1181 				wname_in_long_name = true;
1182 				kcname_in_long_name = false;
1183 				break;
1184 			default:
1185 				return -EINVAL;
1186 			}
1187 		}
1188 		if (w->no_wname_in_kcontrol_name)
1189 			wname_in_long_name = false;
1190 
1191 		if (wname_in_long_name && kcname_in_long_name) {
1192 			/*
1193 			 * The control will get a prefix from the control
1194 			 * creation process but we're also using the same
1195 			 * prefix for widgets so cut the prefix off the
1196 			 * front of the widget name.
1197 			 */
1198 			long_name = kasprintf(GFP_KERNEL, "%s %s",
1199 				 w->name + prefix_len,
1200 				 w->kcontrol_news[kci].name);
1201 			if (long_name == NULL)
1202 				return -ENOMEM;
1203 
1204 			name = long_name;
1205 		} else if (wname_in_long_name) {
1206 			long_name = NULL;
1207 			name = w->name + prefix_len;
1208 		} else {
1209 			long_name = NULL;
1210 			name = w->kcontrol_news[kci].name;
1211 		}
1212 
1213 		kcontrol = snd_soc_cnew(&w->kcontrol_news[kci], NULL, name,
1214 					prefix);
1215 		if (!kcontrol) {
1216 			ret = -ENOMEM;
1217 			goto exit_free;
1218 		}
1219 
1220 		kcontrol->private_free = dapm_kcontrol_free;
1221 
1222 		ret = dapm_kcontrol_data_alloc(w, kcontrol, name);
1223 		if (ret) {
1224 			snd_ctl_free_one(kcontrol);
1225 			goto exit_free;
1226 		}
1227 
1228 		ret = snd_ctl_add(card, kcontrol);
1229 		if (ret < 0) {
1230 			dev_err(dev,
1231 				"ASoC: failed to add widget %s dapm kcontrol %s: %d\n",
1232 				w->name, name, ret);
1233 			goto exit_free;
1234 		}
1235 	}
1236 
1237 	ret = dapm_kcontrol_add_widget(kcontrol, w);
1238 	if (ret == 0)
1239 		w->kcontrols[kci] = kcontrol;
1240 
1241 exit_free:
1242 	kfree(long_name);
1243 
1244 	return ret;
1245 }
1246 
1247 /* create new dapm mixer control */
1248 static int dapm_new_mixer(struct snd_soc_dapm_widget *w)
1249 {
1250 	int i, ret;
1251 	struct snd_soc_dapm_path *path;
1252 	struct dapm_kcontrol_data *data;
1253 
1254 	/* add kcontrol */
1255 	for (i = 0; i < w->num_kcontrols; i++) {
1256 		/* match name */
1257 		snd_soc_dapm_widget_for_each_source_path(w, path) {
1258 			/* mixer/mux paths name must match control name */
1259 			if (path->name != (char *)w->kcontrol_news[i].name)
1260 				continue;
1261 
1262 			if (!w->kcontrols[i]) {
1263 				ret = dapm_create_or_share_kcontrol(w, i);
1264 				if (ret < 0)
1265 					return ret;
1266 			}
1267 
1268 			dapm_kcontrol_add_path(w->kcontrols[i], path);
1269 
1270 			data = snd_kcontrol_chip(w->kcontrols[i]);
1271 			if (data->widget)
1272 				snd_soc_dapm_add_path(data->widget->dapm,
1273 						      data->widget,
1274 						      path->source,
1275 						      NULL, NULL);
1276 		}
1277 	}
1278 
1279 	return 0;
1280 }
1281 
1282 /* create new dapm mux control */
1283 static int dapm_new_mux(struct snd_soc_dapm_widget *w)
1284 {
1285 	struct snd_soc_dapm_context *dapm = w->dapm;
1286 	struct device *dev = snd_soc_dapm_to_dev(dapm);
1287 	enum snd_soc_dapm_direction dir;
1288 	struct snd_soc_dapm_path *path;
1289 	const char *type;
1290 	int ret;
1291 
1292 	switch (w->id) {
1293 	case snd_soc_dapm_mux:
1294 		dir = SND_SOC_DAPM_DIR_OUT;
1295 		type = "mux";
1296 		break;
1297 	case snd_soc_dapm_demux:
1298 		dir = SND_SOC_DAPM_DIR_IN;
1299 		type = "demux";
1300 		break;
1301 	default:
1302 		return -EINVAL;
1303 	}
1304 
1305 	if (w->num_kcontrols != 1) {
1306 		dev_err(dev,
1307 			"ASoC: %s %s has incorrect number of controls\n", type,
1308 			w->name);
1309 		return -EINVAL;
1310 	}
1311 
1312 	if (list_empty(&w->edges[dir])) {
1313 		dev_err(dev, "ASoC: %s %s has no paths\n", type, w->name);
1314 		return -EINVAL;
1315 	}
1316 
1317 	ret = dapm_create_or_share_kcontrol(w, 0);
1318 	if (ret < 0)
1319 		return ret;
1320 
1321 	snd_soc_dapm_widget_for_each_path(w, dir, path) {
1322 		if (path->name)
1323 			dapm_kcontrol_add_path(w->kcontrols[0], path);
1324 	}
1325 
1326 	return 0;
1327 }
1328 
1329 /* create new dapm volume control */
1330 static int dapm_new_pga(struct snd_soc_dapm_widget *w)
1331 {
1332 	int i;
1333 
1334 	for (i = 0; i < w->num_kcontrols; i++) {
1335 		int ret = dapm_create_or_share_kcontrol(w, i);
1336 		if (ret < 0)
1337 			return ret;
1338 	}
1339 
1340 	return 0;
1341 }
1342 
1343 /* create new dapm dai link control */
1344 static int dapm_new_dai_link(struct snd_soc_dapm_widget *w)
1345 {
1346 	int i;
1347 	struct snd_soc_pcm_runtime *rtd = w->priv;
1348 
1349 	/* create control for links with > 1 config */
1350 	if (rtd->dai_link->num_c2c_params <= 1)
1351 		return 0;
1352 
1353 	/* add kcontrol */
1354 	for (i = 0; i < w->num_kcontrols; i++) {
1355 		struct snd_soc_dapm_context *dapm = w->dapm;
1356 		struct device *dev = snd_soc_dapm_to_dev(dapm);
1357 		struct snd_card *card = dapm->card->snd_card;
1358 		struct snd_kcontrol *kcontrol = snd_soc_cnew(&w->kcontrol_news[i],
1359 							     w, w->name, NULL);
1360 		int ret = snd_ctl_add(card, kcontrol);
1361 
1362 		if (ret < 0) {
1363 			dev_err(dev,
1364 				"ASoC: failed to add widget %s dapm kcontrol %s: %d\n",
1365 				w->name, w->kcontrol_news[i].name, ret);
1366 			return ret;
1367 		}
1368 		kcontrol->private_data = w;
1369 		w->kcontrols[i] = kcontrol;
1370 	}
1371 
1372 	return 0;
1373 }
1374 
1375 /* We implement power down on suspend by checking the power state of
1376  * the ALSA card - when we are suspending the ALSA state for the card
1377  * is set to D3.
1378  */
1379 static int snd_soc_dapm_suspend_check(struct snd_soc_dapm_widget *widget)
1380 {
1381 	struct device *dev = snd_soc_dapm_to_dev(widget->dapm);
1382 	int level = snd_power_get_state(widget->dapm->card->snd_card);
1383 
1384 	switch (level) {
1385 	case SNDRV_CTL_POWER_D3hot:
1386 	case SNDRV_CTL_POWER_D3cold:
1387 		if (widget->ignore_suspend)
1388 			dev_dbg(dev, "ASoC: %s ignoring suspend\n",
1389 				widget->name);
1390 		return widget->ignore_suspend;
1391 	default:
1392 		return 1;
1393 	}
1394 }
1395 
1396 static void dapm_widget_list_free(struct snd_soc_dapm_widget_list **list)
1397 {
1398 	kfree(*list);
1399 }
1400 
1401 static int dapm_widget_list_create(struct snd_soc_dapm_widget_list **list,
1402 	struct list_head *widgets)
1403 {
1404 	struct snd_soc_dapm_widget *w;
1405 	struct list_head *it;
1406 	unsigned int size = 0;
1407 	unsigned int i = 0;
1408 
1409 	list_for_each(it, widgets)
1410 		size++;
1411 
1412 	*list = kzalloc(struct_size(*list, widgets, size), GFP_KERNEL);
1413 	if (*list == NULL)
1414 		return -ENOMEM;
1415 
1416 	(*list)->num_widgets = size;
1417 
1418 	list_for_each_entry(w, widgets, work_list)
1419 		(*list)->widgets[i++] = w;
1420 
1421 	(*list)->num_widgets = i;
1422 
1423 	return 0;
1424 }
1425 
1426 /*
1427  * Recursively reset the cached number of inputs or outputs for the specified
1428  * widget and all widgets that can be reached via incoming or outcoming paths
1429  * from the widget.
1430  */
1431 static void invalidate_paths_ep(struct snd_soc_dapm_widget *widget,
1432 	enum snd_soc_dapm_direction dir)
1433 {
1434 	enum snd_soc_dapm_direction rdir = SND_SOC_DAPM_DIR_REVERSE(dir);
1435 	struct snd_soc_dapm_path *path;
1436 
1437 	widget->endpoints[dir] = -1;
1438 
1439 	snd_soc_dapm_widget_for_each_path(widget, rdir, path) {
1440 		if (path->is_supply)
1441 			continue;
1442 
1443 		if (path->walking)
1444 			return;
1445 
1446 		if (path->connect) {
1447 			path->walking = 1;
1448 			invalidate_paths_ep(path->node[dir], dir);
1449 			path->walking = 0;
1450 		}
1451 	}
1452 }
1453 
1454 /*
1455  * Common implementation for is_connected_output_ep() and
1456  * is_connected_input_ep(). The function is inlined since the combined size of
1457  * the two specialized functions is only marginally larger then the size of the
1458  * generic function and at the same time the fast path of the specialized
1459  * functions is significantly smaller than the generic function.
1460  */
1461 static __always_inline int is_connected_ep(struct snd_soc_dapm_widget *widget,
1462 	struct list_head *list, enum snd_soc_dapm_direction dir,
1463 	int (*fn)(struct snd_soc_dapm_widget *, struct list_head *,
1464 		  bool (*custom_stop_condition)(struct snd_soc_dapm_widget *,
1465 						enum snd_soc_dapm_direction)),
1466 	bool (*custom_stop_condition)(struct snd_soc_dapm_widget *,
1467 				      enum snd_soc_dapm_direction))
1468 {
1469 	enum snd_soc_dapm_direction rdir = SND_SOC_DAPM_DIR_REVERSE(dir);
1470 	struct snd_soc_dapm_path *path;
1471 	int con = 0;
1472 
1473 	if (widget->endpoints[dir] >= 0)
1474 		return widget->endpoints[dir];
1475 
1476 	DAPM_UPDATE_STAT(widget, path_checks);
1477 
1478 	/* do we need to add this widget to the list ? */
1479 	if (list)
1480 		list_add_tail(&widget->work_list, list);
1481 
1482 	if (custom_stop_condition && custom_stop_condition(widget, dir)) {
1483 		list = NULL;
1484 		custom_stop_condition = NULL;
1485 	}
1486 
1487 	if ((widget->is_ep & SND_SOC_DAPM_DIR_TO_EP(dir)) && widget->connected) {
1488 		widget->endpoints[dir] = snd_soc_dapm_suspend_check(widget);
1489 		return widget->endpoints[dir];
1490 	}
1491 
1492 	snd_soc_dapm_widget_for_each_path(widget, rdir, path) {
1493 		DAPM_UPDATE_STAT(widget, neighbour_checks);
1494 
1495 		if (path->is_supply)
1496 			continue;
1497 
1498 		if (path->walking)
1499 			return 1;
1500 
1501 		trace_snd_soc_dapm_path(widget, dir, path);
1502 
1503 		if (path->connect) {
1504 			path->walking = 1;
1505 			con += fn(path->node[dir], list, custom_stop_condition);
1506 			path->walking = 0;
1507 		}
1508 	}
1509 
1510 	widget->endpoints[dir] = con;
1511 
1512 	return con;
1513 }
1514 
1515 /*
1516  * Recursively check for a completed path to an active or physically connected
1517  * output widget. Returns number of complete paths.
1518  *
1519  * Optionally, can be supplied with a function acting as a stopping condition.
1520  * This function takes the dapm widget currently being examined and the walk
1521  * direction as an arguments, it should return true if widgets from that point
1522  * in the graph onwards should not be added to the widget list.
1523  */
1524 static int is_connected_output_ep(struct snd_soc_dapm_widget *widget,
1525 	struct list_head *list,
1526 	bool (*custom_stop_condition)(struct snd_soc_dapm_widget *i,
1527 				      enum snd_soc_dapm_direction))
1528 {
1529 	return is_connected_ep(widget, list, SND_SOC_DAPM_DIR_OUT,
1530 			is_connected_output_ep, custom_stop_condition);
1531 }
1532 
1533 /*
1534  * Recursively check for a completed path to an active or physically connected
1535  * input widget. Returns number of complete paths.
1536  *
1537  * Optionally, can be supplied with a function acting as a stopping condition.
1538  * This function takes the dapm widget currently being examined and the walk
1539  * direction as an arguments, it should return true if the walk should be
1540  * stopped and false otherwise.
1541  */
1542 static int is_connected_input_ep(struct snd_soc_dapm_widget *widget,
1543 	struct list_head *list,
1544 	bool (*custom_stop_condition)(struct snd_soc_dapm_widget *i,
1545 				      enum snd_soc_dapm_direction))
1546 {
1547 	return is_connected_ep(widget, list, SND_SOC_DAPM_DIR_IN,
1548 			is_connected_input_ep, custom_stop_condition);
1549 }
1550 
1551 /**
1552  * snd_soc_dapm_dai_get_connected_widgets - query audio path and it's widgets.
1553  * @dai: the soc DAI.
1554  * @stream: stream direction.
1555  * @list: list of active widgets for this stream.
1556  * @custom_stop_condition: (optional) a function meant to stop the widget graph
1557  *                         walk based on custom logic.
1558  *
1559  * Queries DAPM graph as to whether a valid audio stream path exists for
1560  * the initial stream specified by name. This takes into account
1561  * current mixer and mux kcontrol settings. Creates list of valid widgets.
1562  *
1563  * Optionally, can be supplied with a function acting as a stopping condition.
1564  * This function takes the dapm widget currently being examined and the walk
1565  * direction as an arguments, it should return true if the walk should be
1566  * stopped and false otherwise.
1567  *
1568  * Returns the number of valid paths or negative error.
1569  */
1570 int snd_soc_dapm_dai_get_connected_widgets(struct snd_soc_dai *dai, int stream,
1571 	struct snd_soc_dapm_widget_list **list,
1572 	bool (*custom_stop_condition)(struct snd_soc_dapm_widget *,
1573 				      enum snd_soc_dapm_direction))
1574 {
1575 	struct snd_soc_card *card = dai->component->card;
1576 	struct snd_soc_dapm_widget *w = snd_soc_dai_get_widget(dai, stream);
1577 	LIST_HEAD(widgets);
1578 	int paths;
1579 	int ret;
1580 
1581 	snd_soc_dapm_mutex_lock(card);
1582 
1583 	if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
1584 		invalidate_paths_ep(w, SND_SOC_DAPM_DIR_OUT);
1585 		paths = is_connected_output_ep(w, &widgets,
1586 				custom_stop_condition);
1587 	} else {
1588 		invalidate_paths_ep(w, SND_SOC_DAPM_DIR_IN);
1589 		paths = is_connected_input_ep(w, &widgets,
1590 				custom_stop_condition);
1591 	}
1592 
1593 	/* Drop starting point */
1594 	list_del(widgets.next);
1595 
1596 	ret = dapm_widget_list_create(list, &widgets);
1597 	if (ret)
1598 		paths = ret;
1599 
1600 	trace_snd_soc_dapm_connected(paths, stream);
1601 	snd_soc_dapm_mutex_unlock(card);
1602 
1603 	return paths;
1604 }
1605 EXPORT_SYMBOL_GPL(snd_soc_dapm_dai_get_connected_widgets);
1606 
1607 void snd_soc_dapm_dai_free_widgets(struct snd_soc_dapm_widget_list **list)
1608 {
1609 	dapm_widget_list_free(list);
1610 }
1611 EXPORT_SYMBOL_GPL(snd_soc_dapm_dai_free_widgets);
1612 
1613 /*
1614  * Handler for regulator supply widget.
1615  */
1616 int snd_soc_dapm_regulator_event(struct snd_soc_dapm_widget *w,
1617 				 struct snd_kcontrol *kcontrol, int event)
1618 {
1619 	struct device *dev = snd_soc_dapm_to_dev(w->dapm);
1620 	int ret;
1621 
1622 	soc_dapm_async_complete(w->dapm);
1623 
1624 	if (SND_SOC_DAPM_EVENT_ON(event)) {
1625 		if (w->on_val & SND_SOC_DAPM_REGULATOR_BYPASS) {
1626 			ret = regulator_allow_bypass(w->regulator, false);
1627 			if (ret != 0)
1628 				dev_warn(dev,
1629 					 "ASoC: Failed to unbypass %s: %d\n",
1630 					 w->name, ret);
1631 		}
1632 
1633 		return regulator_enable(w->regulator);
1634 	} else {
1635 		if (w->on_val & SND_SOC_DAPM_REGULATOR_BYPASS) {
1636 			ret = regulator_allow_bypass(w->regulator, true);
1637 			if (ret != 0)
1638 				dev_warn(dev,
1639 					 "ASoC: Failed to bypass %s: %d\n",
1640 					 w->name, ret);
1641 		}
1642 
1643 		return regulator_disable_deferred(w->regulator, w->shift);
1644 	}
1645 }
1646 EXPORT_SYMBOL_GPL(snd_soc_dapm_regulator_event);
1647 
1648 /*
1649  * Handler for pinctrl widget.
1650  */
1651 int snd_soc_dapm_pinctrl_event(struct snd_soc_dapm_widget *w,
1652 			       struct snd_kcontrol *kcontrol, int event)
1653 {
1654 	struct snd_soc_dapm_pinctrl_priv *priv = w->priv;
1655 	struct pinctrl *p = w->pinctrl;
1656 	struct pinctrl_state *s;
1657 
1658 	if (!p || !priv)
1659 		return -EIO;
1660 
1661 	if (SND_SOC_DAPM_EVENT_ON(event))
1662 		s = pinctrl_lookup_state(p, priv->active_state);
1663 	else
1664 		s = pinctrl_lookup_state(p, priv->sleep_state);
1665 
1666 	if (IS_ERR(s))
1667 		return PTR_ERR(s);
1668 
1669 	return pinctrl_select_state(p, s);
1670 }
1671 EXPORT_SYMBOL_GPL(snd_soc_dapm_pinctrl_event);
1672 
1673 /*
1674  * Handler for clock supply widget.
1675  */
1676 int snd_soc_dapm_clock_event(struct snd_soc_dapm_widget *w,
1677 			     struct snd_kcontrol *kcontrol, int event)
1678 {
1679 	if (!w->clk)
1680 		return -EIO;
1681 
1682 	soc_dapm_async_complete(w->dapm);
1683 
1684 	if (SND_SOC_DAPM_EVENT_ON(event)) {
1685 		return clk_prepare_enable(w->clk);
1686 	} else {
1687 		clk_disable_unprepare(w->clk);
1688 		return 0;
1689 	}
1690 
1691 	return 0;
1692 }
1693 EXPORT_SYMBOL_GPL(snd_soc_dapm_clock_event);
1694 
1695 static int dapm_widget_power_check(struct snd_soc_dapm_widget *w)
1696 {
1697 	if (w->power_checked)
1698 		return w->new_power;
1699 
1700 	if (w->force)
1701 		w->new_power = 1;
1702 	else
1703 		w->new_power = w->power_check(w);
1704 
1705 	w->power_checked = true;
1706 
1707 	return w->new_power;
1708 }
1709 
1710 /* Generic check to see if a widget should be powered. */
1711 static int dapm_generic_check_power(struct snd_soc_dapm_widget *w)
1712 {
1713 	int in, out;
1714 
1715 	DAPM_UPDATE_STAT(w, power_checks);
1716 
1717 	in = is_connected_input_ep(w, NULL, NULL);
1718 	out = is_connected_output_ep(w, NULL, NULL);
1719 	return out != 0 && in != 0;
1720 }
1721 
1722 /* Check to see if a power supply is needed */
1723 static int dapm_supply_check_power(struct snd_soc_dapm_widget *w)
1724 {
1725 	struct snd_soc_dapm_path *path;
1726 
1727 	DAPM_UPDATE_STAT(w, power_checks);
1728 
1729 	/* Check if one of our outputs is connected */
1730 	snd_soc_dapm_widget_for_each_sink_path(w, path) {
1731 		DAPM_UPDATE_STAT(w, neighbour_checks);
1732 
1733 		if (path->connected &&
1734 		    !path->connected(path->source, path->sink))
1735 			continue;
1736 
1737 		if (dapm_widget_power_check(path->sink))
1738 			return 1;
1739 	}
1740 
1741 	return 0;
1742 }
1743 
1744 static int dapm_always_on_check_power(struct snd_soc_dapm_widget *w)
1745 {
1746 	return w->connected;
1747 }
1748 
1749 static int dapm_seq_compare(struct snd_soc_dapm_widget *a,
1750 			    struct snd_soc_dapm_widget *b,
1751 			    bool power_up)
1752 {
1753 	int *sort;
1754 
1755 	BUILD_BUG_ON(ARRAY_SIZE(dapm_up_seq) != SND_SOC_DAPM_TYPE_COUNT);
1756 	BUILD_BUG_ON(ARRAY_SIZE(dapm_down_seq) != SND_SOC_DAPM_TYPE_COUNT);
1757 
1758 	if (power_up)
1759 		sort = dapm_up_seq;
1760 	else
1761 		sort = dapm_down_seq;
1762 
1763 	WARN_ONCE(sort[a->id] == 0, "offset a->id %d not initialized\n", a->id);
1764 	WARN_ONCE(sort[b->id] == 0, "offset b->id %d not initialized\n", b->id);
1765 
1766 	if (sort[a->id] != sort[b->id])
1767 		return sort[a->id] - sort[b->id];
1768 	if (a->subseq != b->subseq) {
1769 		if (power_up)
1770 			return a->subseq - b->subseq;
1771 		else
1772 			return b->subseq - a->subseq;
1773 	}
1774 	if (a->reg != b->reg)
1775 		return a->reg - b->reg;
1776 	if (a->dapm != b->dapm)
1777 		return (unsigned long)a->dapm - (unsigned long)b->dapm;
1778 
1779 	return 0;
1780 }
1781 
1782 /* Insert a widget in order into a DAPM power sequence. */
1783 static void dapm_seq_insert(struct snd_soc_dapm_widget *new_widget,
1784 			    struct list_head *list,
1785 			    bool power_up)
1786 {
1787 	struct snd_soc_dapm_widget *w;
1788 
1789 	list_for_each_entry(w, list, power_list)
1790 		if (dapm_seq_compare(new_widget, w, power_up) < 0) {
1791 			list_add_tail(&new_widget->power_list, &w->power_list);
1792 			return;
1793 		}
1794 
1795 	list_add_tail(&new_widget->power_list, list);
1796 }
1797 
1798 static void dapm_seq_check_event(struct snd_soc_card *card,
1799 				 struct snd_soc_dapm_widget *w, int event)
1800 {
1801 	struct device *dev = card->dev;
1802 	const char *ev_name;
1803 	int power;
1804 
1805 	switch (event) {
1806 	case SND_SOC_DAPM_PRE_PMU:
1807 		ev_name = "PRE_PMU";
1808 		power = 1;
1809 		break;
1810 	case SND_SOC_DAPM_POST_PMU:
1811 		ev_name = "POST_PMU";
1812 		power = 1;
1813 		break;
1814 	case SND_SOC_DAPM_PRE_PMD:
1815 		ev_name = "PRE_PMD";
1816 		power = 0;
1817 		break;
1818 	case SND_SOC_DAPM_POST_PMD:
1819 		ev_name = "POST_PMD";
1820 		power = 0;
1821 		break;
1822 	case SND_SOC_DAPM_WILL_PMU:
1823 		ev_name = "WILL_PMU";
1824 		power = 1;
1825 		break;
1826 	case SND_SOC_DAPM_WILL_PMD:
1827 		ev_name = "WILL_PMD";
1828 		power = 0;
1829 		break;
1830 	default:
1831 		WARN(1, "Unknown event %d\n", event);
1832 		return;
1833 	}
1834 
1835 	if (w->new_power != power)
1836 		return;
1837 
1838 	if (w->event && (w->event_flags & event)) {
1839 		int ret;
1840 
1841 		pop_dbg(dev, card->pop_time, "pop test : %s %s\n",
1842 			w->name, ev_name);
1843 		soc_dapm_async_complete(w->dapm);
1844 		trace_snd_soc_dapm_widget_event_start(w, event);
1845 		ret = w->event(w, NULL, event);
1846 		trace_snd_soc_dapm_widget_event_done(w, event);
1847 		if (ret < 0)
1848 			dev_err(dev, "ASoC: %s: %s event failed: %d\n",
1849 			       ev_name, w->name, ret);
1850 	}
1851 }
1852 
1853 /* Apply the coalesced changes from a DAPM sequence */
1854 static void dapm_seq_run_coalesced(struct snd_soc_card *card,
1855 				   struct list_head *pending)
1856 {
1857 	struct device *dev = card->dev;
1858 	struct snd_soc_dapm_context *dapm;
1859 	struct snd_soc_dapm_widget *w;
1860 	int reg;
1861 	unsigned int value = 0;
1862 	unsigned int mask = 0;
1863 
1864 	w = list_first_entry(pending, struct snd_soc_dapm_widget, power_list);
1865 	reg = w->reg;
1866 	dapm = w->dapm;
1867 
1868 	list_for_each_entry(w, pending, power_list) {
1869 		WARN_ON(reg != w->reg || dapm != w->dapm);
1870 		w->power = w->new_power;
1871 
1872 		mask |= w->mask << w->shift;
1873 		if (w->power)
1874 			value |= w->on_val << w->shift;
1875 		else
1876 			value |= w->off_val << w->shift;
1877 
1878 		pop_dbg(dev, card->pop_time,
1879 			"pop test : Queue %s: reg=0x%x, 0x%x/0x%x\n",
1880 			w->name, reg, value, mask);
1881 
1882 		/* Check for events */
1883 		dapm_seq_check_event(card, w, SND_SOC_DAPM_PRE_PMU);
1884 		dapm_seq_check_event(card, w, SND_SOC_DAPM_PRE_PMD);
1885 	}
1886 
1887 	if (reg >= 0) {
1888 		/* Any widget will do, they should all be updating the
1889 		 * same register.
1890 		 */
1891 
1892 		pop_dbg(dev, card->pop_time,
1893 			"pop test : Applying 0x%x/0x%x to %x in %dms\n",
1894 			value, mask, reg, card->pop_time);
1895 		pop_wait(card->pop_time);
1896 		soc_dapm_update_bits(dapm, reg, mask, value);
1897 	}
1898 
1899 	list_for_each_entry(w, pending, power_list) {
1900 		dapm_seq_check_event(card, w, SND_SOC_DAPM_POST_PMU);
1901 		dapm_seq_check_event(card, w, SND_SOC_DAPM_POST_PMD);
1902 	}
1903 }
1904 
1905 /* Apply a DAPM power sequence.
1906  *
1907  * We walk over a pre-sorted list of widgets to apply power to.  In
1908  * order to minimise the number of writes to the device required
1909  * multiple widgets will be updated in a single write where possible.
1910  * Currently anything that requires more than a single write is not
1911  * handled.
1912  */
1913 static void dapm_seq_run(struct snd_soc_card *card,
1914 	struct list_head *list, int event, bool power_up)
1915 {
1916 	struct device *dev = card->dev;
1917 	struct snd_soc_dapm_widget *w, *n;
1918 	struct snd_soc_dapm_context *d;
1919 	LIST_HEAD(pending);
1920 	int cur_sort = -1;
1921 	int cur_subseq = -1;
1922 	int cur_reg = SND_SOC_NOPM;
1923 	struct snd_soc_dapm_context *cur_dapm = NULL;
1924 	int i;
1925 	int *sort;
1926 
1927 	if (power_up)
1928 		sort = dapm_up_seq;
1929 	else
1930 		sort = dapm_down_seq;
1931 
1932 	list_for_each_entry_safe(w, n, list, power_list) {
1933 		int ret = 0;
1934 
1935 		/* Do we need to apply any queued changes? */
1936 		if (sort[w->id] != cur_sort || w->reg != cur_reg ||
1937 		    w->dapm != cur_dapm || w->subseq != cur_subseq) {
1938 			if (!list_empty(&pending))
1939 				dapm_seq_run_coalesced(card, &pending);
1940 
1941 			if (cur_dapm && cur_dapm->component) {
1942 				for (i = 0; i < ARRAY_SIZE(dapm_up_seq); i++)
1943 					if (sort[i] == cur_sort)
1944 						snd_soc_component_seq_notifier(
1945 							cur_dapm->component,
1946 							i, cur_subseq);
1947 			}
1948 
1949 			if (cur_dapm && w->dapm != cur_dapm)
1950 				soc_dapm_async_complete(cur_dapm);
1951 
1952 			INIT_LIST_HEAD(&pending);
1953 			cur_sort = -1;
1954 			cur_subseq = INT_MIN;
1955 			cur_reg = SND_SOC_NOPM;
1956 			cur_dapm = NULL;
1957 		}
1958 
1959 		switch (w->id) {
1960 		case snd_soc_dapm_pre:
1961 			if (!w->event)
1962 				continue;
1963 
1964 			if (event == SND_SOC_DAPM_STREAM_START)
1965 				ret = w->event(w,
1966 					       NULL, SND_SOC_DAPM_PRE_PMU);
1967 			else if (event == SND_SOC_DAPM_STREAM_STOP)
1968 				ret = w->event(w,
1969 					       NULL, SND_SOC_DAPM_PRE_PMD);
1970 			break;
1971 
1972 		case snd_soc_dapm_post:
1973 			if (!w->event)
1974 				continue;
1975 
1976 			if (event == SND_SOC_DAPM_STREAM_START)
1977 				ret = w->event(w,
1978 					       NULL, SND_SOC_DAPM_POST_PMU);
1979 			else if (event == SND_SOC_DAPM_STREAM_STOP)
1980 				ret = w->event(w,
1981 					       NULL, SND_SOC_DAPM_POST_PMD);
1982 			break;
1983 
1984 		default:
1985 			/* Queue it up for application */
1986 			cur_sort = sort[w->id];
1987 			cur_subseq = w->subseq;
1988 			cur_reg = w->reg;
1989 			cur_dapm = w->dapm;
1990 			list_move(&w->power_list, &pending);
1991 			break;
1992 		}
1993 
1994 		if (ret < 0)
1995 			dev_err(dev,
1996 				"ASoC: Failed to apply widget power: %d\n", ret);
1997 	}
1998 
1999 	if (!list_empty(&pending))
2000 		dapm_seq_run_coalesced(card, &pending);
2001 
2002 	if (cur_dapm && cur_dapm->component) {
2003 		for (i = 0; i < ARRAY_SIZE(dapm_up_seq); i++)
2004 			if (sort[i] == cur_sort)
2005 				snd_soc_component_seq_notifier(
2006 					cur_dapm->component,
2007 					i, cur_subseq);
2008 	}
2009 
2010 	for_each_card_dapms(card, d)
2011 		soc_dapm_async_complete(d);
2012 }
2013 
2014 static void dapm_widget_update(struct snd_soc_card *card, struct snd_soc_dapm_update *update)
2015 {
2016 	struct device *dev = card->dev;
2017 	struct snd_soc_dapm_widget_list *wlist;
2018 	struct snd_soc_dapm_widget *w = NULL;
2019 	unsigned int wi;
2020 	int ret;
2021 
2022 	if (!update || !dapm_kcontrol_is_powered(update->kcontrol))
2023 		return;
2024 
2025 	wlist = dapm_kcontrol_get_wlist(update->kcontrol);
2026 
2027 	for_each_dapm_widgets(wlist, wi, w) {
2028 		if (w->event && (w->event_flags & SND_SOC_DAPM_PRE_REG)) {
2029 			ret = w->event(w, update->kcontrol, SND_SOC_DAPM_PRE_REG);
2030 			if (ret != 0)
2031 				dev_err(dev, "ASoC: %s DAPM pre-event failed: %d\n",
2032 					   w->name, ret);
2033 		}
2034 	}
2035 
2036 	if (!w)
2037 		return;
2038 
2039 	ret = soc_dapm_update_bits(w->dapm, update->reg, update->mask,
2040 		update->val);
2041 	if (ret < 0)
2042 		dev_err(dev, "ASoC: %s DAPM update failed: %d\n",
2043 			w->name, ret);
2044 
2045 	if (update->has_second_set) {
2046 		ret = soc_dapm_update_bits(w->dapm, update->reg2,
2047 					   update->mask2, update->val2);
2048 		if (ret < 0)
2049 			dev_err(dev,
2050 				"ASoC: %s DAPM update failed: %d\n",
2051 				w->name, ret);
2052 	}
2053 
2054 	for_each_dapm_widgets(wlist, wi, w) {
2055 		if (w->event && (w->event_flags & SND_SOC_DAPM_POST_REG)) {
2056 			ret = w->event(w, update->kcontrol, SND_SOC_DAPM_POST_REG);
2057 			if (ret != 0)
2058 				dev_err(dev, "ASoC: %s DAPM post-event failed: %d\n",
2059 					   w->name, ret);
2060 		}
2061 	}
2062 }
2063 
2064 /* Async callback run prior to DAPM sequences - brings to _PREPARE if
2065  * they're changing state.
2066  */
2067 static void dapm_pre_sequence_async(void *data, async_cookie_t cookie)
2068 {
2069 	struct snd_soc_dapm_context *dapm = data;
2070 	struct device *dev = snd_soc_dapm_to_dev(dapm);
2071 	int ret;
2072 
2073 	/* If we're off and we're not supposed to go into STANDBY */
2074 	if (dapm->bias_level == SND_SOC_BIAS_OFF &&
2075 	    dapm->target_bias_level != SND_SOC_BIAS_OFF) {
2076 		if (dev && cookie)
2077 			pm_runtime_get_sync(dev);
2078 
2079 		ret = snd_soc_dapm_set_bias_level(dapm, SND_SOC_BIAS_STANDBY);
2080 		if (ret != 0)
2081 			dev_err(dev,
2082 				"ASoC: Failed to turn on bias: %d\n", ret);
2083 	}
2084 
2085 	/* Prepare for a transition to ON or away from ON */
2086 	if ((dapm->target_bias_level == SND_SOC_BIAS_ON &&
2087 	     dapm->bias_level != SND_SOC_BIAS_ON) ||
2088 	    (dapm->target_bias_level != SND_SOC_BIAS_ON &&
2089 	     dapm->bias_level == SND_SOC_BIAS_ON)) {
2090 		ret = snd_soc_dapm_set_bias_level(dapm, SND_SOC_BIAS_PREPARE);
2091 		if (ret != 0)
2092 			dev_err(dev,
2093 				"ASoC: Failed to prepare bias: %d\n", ret);
2094 	}
2095 }
2096 
2097 /* Async callback run prior to DAPM sequences - brings to their final
2098  * state.
2099  */
2100 static void dapm_post_sequence_async(void *data, async_cookie_t cookie)
2101 {
2102 	struct snd_soc_dapm_context *dapm = data;
2103 	struct device *dev = snd_soc_dapm_to_dev(dapm);
2104 	int ret;
2105 
2106 	/* If we just powered the last thing off drop to standby bias */
2107 	if (dapm->bias_level == SND_SOC_BIAS_PREPARE &&
2108 	    (dapm->target_bias_level == SND_SOC_BIAS_STANDBY ||
2109 	     dapm->target_bias_level == SND_SOC_BIAS_OFF)) {
2110 		ret = snd_soc_dapm_set_bias_level(dapm, SND_SOC_BIAS_STANDBY);
2111 		if (ret != 0)
2112 			dev_err(dev, "ASoC: Failed to apply standby bias: %d\n", ret);
2113 	}
2114 
2115 	/* If we're in standby and can support bias off then do that */
2116 	if (dapm->bias_level == SND_SOC_BIAS_STANDBY &&
2117 	    dapm->target_bias_level == SND_SOC_BIAS_OFF) {
2118 		ret = snd_soc_dapm_set_bias_level(dapm, SND_SOC_BIAS_OFF);
2119 		if (ret != 0)
2120 			dev_err(dev, "ASoC: Failed to turn off bias: %d\n", ret);
2121 
2122 		if (dev && cookie)
2123 			pm_runtime_put(dev);
2124 	}
2125 
2126 	/* If we just powered up then move to active bias */
2127 	if (dapm->bias_level == SND_SOC_BIAS_PREPARE &&
2128 	    dapm->target_bias_level == SND_SOC_BIAS_ON) {
2129 		ret = snd_soc_dapm_set_bias_level(dapm, SND_SOC_BIAS_ON);
2130 		if (ret != 0)
2131 			dev_err(dev, "ASoC: Failed to apply active bias: %d\n", ret);
2132 	}
2133 }
2134 
2135 static void dapm_widget_set_peer_power(struct snd_soc_dapm_widget *peer,
2136 				       bool power, bool connect)
2137 {
2138 	/* If a connection is being made or broken then that update
2139 	 * will have marked the peer dirty, otherwise the widgets are
2140 	 * not connected and this update has no impact. */
2141 	if (!connect)
2142 		return;
2143 
2144 	/* If the peer is already in the state we're moving to then we
2145 	 * won't have an impact on it. */
2146 	if (power != peer->power)
2147 		dapm_mark_dirty(peer, "peer state change");
2148 }
2149 
2150 static void dapm_power_one_widget(struct snd_soc_dapm_widget *w,
2151 				  struct list_head *up_list,
2152 				  struct list_head *down_list)
2153 {
2154 	struct snd_soc_dapm_path *path;
2155 	int power;
2156 
2157 	switch (w->id) {
2158 	case snd_soc_dapm_pre:
2159 		power = 0;
2160 		goto end;
2161 	case snd_soc_dapm_post:
2162 		power = 1;
2163 		goto end;
2164 	default:
2165 		break;
2166 	}
2167 
2168 	power = dapm_widget_power_check(w);
2169 
2170 	if (w->power == power)
2171 		return;
2172 
2173 	trace_snd_soc_dapm_widget_power(w, power);
2174 
2175 	/*
2176 	 * If we changed our power state perhaps our neigbours
2177 	 * changed also.
2178 	 */
2179 	snd_soc_dapm_widget_for_each_source_path(w, path)
2180 		dapm_widget_set_peer_power(path->source, power, path->connect);
2181 
2182 	/*
2183 	 * Supplies can't affect their outputs, only their inputs
2184 	 */
2185 	if (!w->is_supply)
2186 		snd_soc_dapm_widget_for_each_sink_path(w, path)
2187 			dapm_widget_set_peer_power(path->sink, power, path->connect);
2188 
2189 end:
2190 	if (power)
2191 		dapm_seq_insert(w, up_list, true);
2192 	else
2193 		dapm_seq_insert(w, down_list, false);
2194 }
2195 
2196 bool snd_soc_dapm_get_idle_bias(struct snd_soc_dapm_context *dapm)
2197 {
2198 	if (dapm->idle_bias) {
2199 		struct snd_soc_component *component = snd_soc_dapm_to_component(dapm);
2200 		unsigned int state = snd_power_get_state(dapm->card->snd_card);
2201 
2202 		if ((state == SNDRV_CTL_POWER_D3hot || (state == SNDRV_CTL_POWER_D3cold)) &&
2203 		    component)
2204 			return !component->driver->suspend_bias_off;
2205 	}
2206 
2207 	return dapm->idle_bias;
2208 }
2209 EXPORT_SYMBOL_GPL(snd_soc_dapm_get_idle_bias);
2210 
2211 void snd_soc_dapm_set_idle_bias(struct snd_soc_dapm_context *dapm, bool on)
2212 {
2213 	dapm->idle_bias = on;
2214 }
2215 EXPORT_SYMBOL_GPL(snd_soc_dapm_set_idle_bias);
2216 
2217 /*
2218  * Scan each dapm widget for complete audio path.
2219  * A complete path is a route that has valid endpoints i.e.:-
2220  *
2221  *  o DAC to output pin.
2222  *  o Input pin to ADC.
2223  *  o Input pin to Output pin (bypass, sidetone)
2224  *  o DAC to ADC (loopback).
2225  */
2226 static int dapm_power_widgets(struct snd_soc_card *card, int event,
2227 			      struct snd_soc_dapm_update *update)
2228 {
2229 	struct snd_soc_dapm_context *dapm = snd_soc_card_to_dapm(card);
2230 	struct snd_soc_dapm_widget *w;
2231 	struct snd_soc_dapm_context *d;
2232 	LIST_HEAD(up_list);
2233 	LIST_HEAD(down_list);
2234 	ASYNC_DOMAIN_EXCLUSIVE(async_domain);
2235 	enum snd_soc_bias_level bias;
2236 	int ret;
2237 
2238 	snd_soc_dapm_mutex_assert_held(card);
2239 
2240 	trace_snd_soc_dapm_start(card, event);
2241 
2242 	for_each_card_dapms(card, d) {
2243 		if (snd_soc_dapm_get_idle_bias(d))
2244 			d->target_bias_level = SND_SOC_BIAS_STANDBY;
2245 		else
2246 			d->target_bias_level = SND_SOC_BIAS_OFF;
2247 	}
2248 
2249 	dapm_reset(card);
2250 
2251 	/* Check which widgets we need to power and store them in
2252 	 * lists indicating if they should be powered up or down.  We
2253 	 * only check widgets that have been flagged as dirty but note
2254 	 * that new widgets may be added to the dirty list while we
2255 	 * iterate.
2256 	 */
2257 	list_for_each_entry(w, &card->dapm_dirty, dirty) {
2258 		dapm_power_one_widget(w, &up_list, &down_list);
2259 	}
2260 
2261 	for_each_card_widgets(card, w) {
2262 		switch (w->id) {
2263 		case snd_soc_dapm_pre:
2264 		case snd_soc_dapm_post:
2265 			/* These widgets always need to be powered */
2266 			break;
2267 		default:
2268 			list_del_init(&w->dirty);
2269 			break;
2270 		}
2271 
2272 		if (w->new_power) {
2273 			d = w->dapm;
2274 
2275 			/* Supplies and micbiases only bring the
2276 			 * context up to STANDBY as unless something
2277 			 * else is active and passing audio they
2278 			 * generally don't require full power.  Signal
2279 			 * generators are virtual pins and have no
2280 			 * power impact themselves.
2281 			 */
2282 			switch (w->id) {
2283 			case snd_soc_dapm_siggen:
2284 			case snd_soc_dapm_vmid:
2285 				break;
2286 			case snd_soc_dapm_supply:
2287 			case snd_soc_dapm_regulator_supply:
2288 			case snd_soc_dapm_pinctrl:
2289 			case snd_soc_dapm_clock_supply:
2290 			case snd_soc_dapm_micbias:
2291 				if (d->target_bias_level < SND_SOC_BIAS_STANDBY)
2292 					d->target_bias_level = SND_SOC_BIAS_STANDBY;
2293 				break;
2294 			default:
2295 				d->target_bias_level = SND_SOC_BIAS_ON;
2296 				break;
2297 			}
2298 		}
2299 
2300 	}
2301 
2302 	/* Force all contexts in the card to the same bias state if
2303 	 * they're not ground referenced.
2304 	 */
2305 	bias = SND_SOC_BIAS_OFF;
2306 	for_each_card_dapms(card, d)
2307 		if (d->target_bias_level > bias)
2308 			bias = d->target_bias_level;
2309 	for_each_card_dapms(card, d)
2310 		if (snd_soc_dapm_get_idle_bias(d))
2311 			d->target_bias_level = bias;
2312 
2313 	trace_snd_soc_dapm_walk_done(card);
2314 
2315 	/* Run card bias changes at first */
2316 	dapm_pre_sequence_async(dapm, 0);
2317 	/* Run other bias changes in parallel */
2318 	for_each_card_dapms(card, d) {
2319 		if (d != dapm && d->bias_level != d->target_bias_level)
2320 			async_schedule_domain(dapm_pre_sequence_async, d,
2321 						&async_domain);
2322 	}
2323 	async_synchronize_full_domain(&async_domain);
2324 
2325 	list_for_each_entry(w, &down_list, power_list) {
2326 		dapm_seq_check_event(card, w, SND_SOC_DAPM_WILL_PMD);
2327 	}
2328 
2329 	list_for_each_entry(w, &up_list, power_list) {
2330 		dapm_seq_check_event(card, w, SND_SOC_DAPM_WILL_PMU);
2331 	}
2332 
2333 	/* Power down widgets first; try to avoid amplifying pops. */
2334 	dapm_seq_run(card, &down_list, event, false);
2335 
2336 	dapm_widget_update(card, update);
2337 
2338 	/* Now power up. */
2339 	dapm_seq_run(card, &up_list, event, true);
2340 
2341 	/* Run all the bias changes in parallel */
2342 	for_each_card_dapms(card, d) {
2343 		if (d != dapm && d->bias_level != d->target_bias_level)
2344 			async_schedule_domain(dapm_post_sequence_async, d,
2345 						&async_domain);
2346 	}
2347 	async_synchronize_full_domain(&async_domain);
2348 	/* Run card bias changes at last */
2349 	dapm_post_sequence_async(dapm, 0);
2350 
2351 	/* do we need to notify any clients that DAPM event is complete */
2352 	for_each_card_dapms(card, d) {
2353 		if (!d->component)
2354 			continue;
2355 
2356 		ret = snd_soc_component_stream_event(d->component, event);
2357 		if (ret < 0)
2358 			return ret;
2359 	}
2360 
2361 	pop_dbg(card->dev, card->pop_time,
2362 		"DAPM sequencing finished, waiting %dms\n", card->pop_time);
2363 	pop_wait(card->pop_time);
2364 
2365 	trace_snd_soc_dapm_done(card, event);
2366 
2367 	return 0;
2368 }
2369 
2370 #ifdef CONFIG_DEBUG_FS
2371 
2372 static const char * const snd_soc_dapm_type_name[] = {
2373 	[snd_soc_dapm_input]            = "input",
2374 	[snd_soc_dapm_output]           = "output",
2375 	[snd_soc_dapm_mux]              = "mux",
2376 	[snd_soc_dapm_demux]            = "demux",
2377 	[snd_soc_dapm_mixer]            = "mixer",
2378 	[snd_soc_dapm_mixer_named_ctl]  = "mixer_named_ctl",
2379 	[snd_soc_dapm_pga]              = "pga",
2380 	[snd_soc_dapm_out_drv]          = "out_drv",
2381 	[snd_soc_dapm_adc]              = "adc",
2382 	[snd_soc_dapm_dac]              = "dac",
2383 	[snd_soc_dapm_micbias]          = "micbias",
2384 	[snd_soc_dapm_mic]              = "mic",
2385 	[snd_soc_dapm_hp]               = "hp",
2386 	[snd_soc_dapm_spk]              = "spk",
2387 	[snd_soc_dapm_line]             = "line",
2388 	[snd_soc_dapm_switch]           = "switch",
2389 	[snd_soc_dapm_vmid]             = "vmid",
2390 	[snd_soc_dapm_pre]              = "pre",
2391 	[snd_soc_dapm_post]             = "post",
2392 	[snd_soc_dapm_supply]           = "supply",
2393 	[snd_soc_dapm_pinctrl]          = "pinctrl",
2394 	[snd_soc_dapm_regulator_supply] = "regulator_supply",
2395 	[snd_soc_dapm_clock_supply]     = "clock_supply",
2396 	[snd_soc_dapm_aif_in]           = "aif_in",
2397 	[snd_soc_dapm_aif_out]          = "aif_out",
2398 	[snd_soc_dapm_siggen]           = "siggen",
2399 	[snd_soc_dapm_sink]             = "sink",
2400 	[snd_soc_dapm_dai_in]           = "dai_in",
2401 	[snd_soc_dapm_dai_out]          = "dai_out",
2402 	[snd_soc_dapm_dai_link]         = "dai_link",
2403 	[snd_soc_dapm_kcontrol]         = "kcontrol",
2404 	[snd_soc_dapm_buffer]           = "buffer",
2405 	[snd_soc_dapm_scheduler]        = "scheduler",
2406 	[snd_soc_dapm_effect]           = "effect",
2407 	[snd_soc_dapm_src]              = "src",
2408 	[snd_soc_dapm_asrc]             = "asrc",
2409 	[snd_soc_dapm_encoder]          = "encoder",
2410 	[snd_soc_dapm_decoder]          = "decoder",
2411 };
2412 
2413 static ssize_t dapm_widget_power_read_file(struct file *file,
2414 					   char __user *user_buf,
2415 					   size_t count, loff_t *ppos)
2416 {
2417 	struct snd_soc_dapm_widget *w = file->private_data;
2418 	enum snd_soc_dapm_direction dir, rdir;
2419 	char *buf;
2420 	int in, out;
2421 	ssize_t ret;
2422 	struct snd_soc_dapm_path *p = NULL;
2423 	const char *c_name;
2424 
2425 	BUILD_BUG_ON(ARRAY_SIZE(snd_soc_dapm_type_name) != SND_SOC_DAPM_TYPE_COUNT);
2426 
2427 	buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
2428 	if (!buf)
2429 		return -ENOMEM;
2430 
2431 	snd_soc_dapm_mutex_lock_root(w->dapm);
2432 
2433 	/* Supply widgets are not handled by is_connected_{input,output}_ep() */
2434 	if (w->is_supply) {
2435 		in = 0;
2436 		out = 0;
2437 	} else {
2438 		in = is_connected_input_ep(w, NULL, NULL);
2439 		out = is_connected_output_ep(w, NULL, NULL);
2440 	}
2441 
2442 	ret = scnprintf(buf, PAGE_SIZE, "%s: %s%s  in %d out %d",
2443 		       w->name, w->power ? "On" : "Off",
2444 		       w->force ? " (forced)" : "", in, out);
2445 
2446 	if (w->reg >= 0)
2447 		ret += scnprintf(buf + ret, PAGE_SIZE - ret,
2448 				" - R%d(0x%x) mask 0x%x",
2449 				w->reg, w->reg, w->mask << w->shift);
2450 
2451 	ret += scnprintf(buf + ret, PAGE_SIZE - ret, "\n");
2452 
2453 	if (w->sname)
2454 		ret += scnprintf(buf + ret, PAGE_SIZE - ret, " stream %s %s\n",
2455 				w->sname,
2456 				w->active ? "active" : "inactive");
2457 
2458 	ret += scnprintf(buf + ret, PAGE_SIZE - ret, " widget-type %s\n",
2459 			 snd_soc_dapm_type_name[w->id]);
2460 
2461 	snd_soc_dapm_for_each_direction(dir) {
2462 		rdir = SND_SOC_DAPM_DIR_REVERSE(dir);
2463 		snd_soc_dapm_widget_for_each_path(w, dir, p) {
2464 			if (p->connected && !p->connected(p->source, p->sink))
2465 				continue;
2466 
2467 			if (!p->connect)
2468 				continue;
2469 
2470 			c_name = p->node[rdir]->dapm->component ?
2471 				p->node[rdir]->dapm->component->name : NULL;
2472 			ret += scnprintf(buf + ret, PAGE_SIZE - ret,
2473 					" %s  \"%s\" \"%s\" \"%s\"\n",
2474 					(rdir == SND_SOC_DAPM_DIR_IN) ? "in" : "out",
2475 					p->name ? p->name : "static",
2476 					p->node[rdir]->name, c_name);
2477 		}
2478 	}
2479 
2480 	snd_soc_dapm_mutex_unlock(w->dapm);
2481 
2482 	ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret);
2483 
2484 	kfree(buf);
2485 	return ret;
2486 }
2487 
2488 static const struct file_operations dapm_widget_power_fops = {
2489 	.open = simple_open,
2490 	.read = dapm_widget_power_read_file,
2491 	.llseek = default_llseek,
2492 };
2493 
2494 static ssize_t dapm_bias_read_file(struct file *file, char __user *user_buf,
2495 				   size_t count, loff_t *ppos)
2496 {
2497 	struct snd_soc_dapm_context *dapm = file->private_data;
2498 	char *level;
2499 
2500 	switch (dapm->bias_level) {
2501 	case SND_SOC_BIAS_ON:
2502 		level = "On\n";
2503 		break;
2504 	case SND_SOC_BIAS_PREPARE:
2505 		level = "Prepare\n";
2506 		break;
2507 	case SND_SOC_BIAS_STANDBY:
2508 		level = "Standby\n";
2509 		break;
2510 	case SND_SOC_BIAS_OFF:
2511 		level = "Off\n";
2512 		break;
2513 	default:
2514 		WARN(1, "Unknown bias_level %d\n", dapm->bias_level);
2515 		level = "Unknown\n";
2516 		break;
2517 	}
2518 
2519 	return simple_read_from_buffer(user_buf, count, ppos, level,
2520 				       strlen(level));
2521 }
2522 
2523 static const struct file_operations dapm_bias_fops = {
2524 	.open = simple_open,
2525 	.read = dapm_bias_read_file,
2526 	.llseek = default_llseek,
2527 };
2528 
2529 void snd_soc_dapm_debugfs_init(struct snd_soc_dapm_context *dapm,
2530 	struct dentry *parent)
2531 {
2532 	if (IS_ERR_OR_NULL(parent))
2533 		return;
2534 
2535 	dapm->debugfs_dapm = debugfs_create_dir("dapm", parent);
2536 
2537 	debugfs_create_file("bias_level", 0444, dapm->debugfs_dapm, dapm,
2538 			    &dapm_bias_fops);
2539 }
2540 
2541 static void dapm_debugfs_add_widget(struct snd_soc_dapm_widget *w)
2542 {
2543 	struct snd_soc_dapm_context *dapm = w->dapm;
2544 
2545 	if (!dapm->debugfs_dapm || !w->name)
2546 		return;
2547 
2548 	debugfs_create_file(w->name, 0444, dapm->debugfs_dapm, w,
2549 			    &dapm_widget_power_fops);
2550 }
2551 
2552 static void dapm_debugfs_free_widget(struct snd_soc_dapm_widget *w)
2553 {
2554 	struct snd_soc_dapm_context *dapm = w->dapm;
2555 
2556 	if (!dapm->debugfs_dapm || !w->name)
2557 		return;
2558 
2559 	debugfs_lookup_and_remove(w->name, dapm->debugfs_dapm);
2560 }
2561 
2562 static void dapm_debugfs_cleanup(struct snd_soc_dapm_context *dapm)
2563 {
2564 	debugfs_remove_recursive(dapm->debugfs_dapm);
2565 	dapm->debugfs_dapm = NULL;
2566 }
2567 
2568 #else
2569 void snd_soc_dapm_debugfs_init(struct snd_soc_dapm_context *dapm,
2570 	struct dentry *parent)
2571 {
2572 }
2573 
2574 static inline void dapm_debugfs_add_widget(struct snd_soc_dapm_widget *w)
2575 {
2576 }
2577 
2578 static inline void dapm_debugfs_free_widget(struct snd_soc_dapm_widget *w)
2579 {
2580 }
2581 
2582 static inline void dapm_debugfs_cleanup(struct snd_soc_dapm_context *dapm)
2583 {
2584 }
2585 
2586 #endif
2587 
2588 /*
2589  * soc_dapm_connect_path() - Connects or disconnects a path
2590  * @path: The path to update
2591  * @connect: The new connect state of the path. True if the path is connected,
2592  *  false if it is disconnected.
2593  * @reason: The reason why the path changed (for debugging only)
2594  */
2595 static void soc_dapm_connect_path(struct snd_soc_dapm_path *path,
2596 	bool connect, const char *reason)
2597 {
2598 	if (path->connect == connect)
2599 		return;
2600 
2601 	path->connect = connect;
2602 	dapm_mark_dirty(path->source, reason);
2603 	dapm_mark_dirty(path->sink, reason);
2604 	dapm_path_invalidate(path);
2605 }
2606 
2607 /* test and update the power status of a mux widget */
2608 static int soc_dapm_mux_update_power(struct snd_soc_card *card,
2609 				     struct snd_kcontrol *kcontrol,
2610 				     struct snd_soc_dapm_update *update,
2611 				     int mux, struct soc_enum *e)
2612 {
2613 	struct snd_soc_dapm_path *path;
2614 	int found = 0;
2615 	bool connect;
2616 
2617 	snd_soc_dapm_mutex_assert_held(card);
2618 
2619 	/* find dapm widget path assoc with kcontrol */
2620 	dapm_kcontrol_for_each_path(path, kcontrol) {
2621 		found = 1;
2622 		/* we now need to match the string in the enum to the path */
2623 		if (e && !(strcmp(path->name, e->texts[mux])))
2624 			connect = true;
2625 		else
2626 			connect = false;
2627 
2628 		soc_dapm_connect_path(path, connect, "mux update");
2629 	}
2630 
2631 	if (found)
2632 		dapm_power_widgets(card, SND_SOC_DAPM_STREAM_NOP, update);
2633 
2634 	return found;
2635 }
2636 
2637 int snd_soc_dapm_mux_update_power(struct snd_soc_dapm_context *dapm,
2638 	struct snd_kcontrol *kcontrol, int mux, struct soc_enum *e,
2639 	struct snd_soc_dapm_update *update)
2640 {
2641 	struct snd_soc_card *card = dapm->card;
2642 	int ret;
2643 
2644 	snd_soc_dapm_mutex_lock(card);
2645 	ret = soc_dapm_mux_update_power(card, kcontrol, update, mux, e);
2646 	snd_soc_dapm_mutex_unlock(card);
2647 	if (ret > 0)
2648 		snd_soc_dpcm_runtime_update(card);
2649 	return ret;
2650 }
2651 EXPORT_SYMBOL_GPL(snd_soc_dapm_mux_update_power);
2652 
2653 /* test and update the power status of a mixer or switch widget */
2654 static int soc_dapm_mixer_update_power(struct snd_soc_card *card,
2655 				       struct snd_kcontrol *kcontrol,
2656 				       struct snd_soc_dapm_update *update,
2657 				       int connect, int rconnect)
2658 {
2659 	struct snd_soc_dapm_path *path;
2660 	int found = 0;
2661 
2662 	snd_soc_dapm_mutex_assert_held(card);
2663 
2664 	/* find dapm widget path assoc with kcontrol */
2665 	dapm_kcontrol_for_each_path(path, kcontrol) {
2666 		/*
2667 		 * Ideally this function should support any number of
2668 		 * paths and channels. But since kcontrols only come
2669 		 * in mono and stereo variants, we are limited to 2
2670 		 * channels.
2671 		 *
2672 		 * The following code assumes for stereo controls the
2673 		 * first path (when 'found == 0') is the left channel,
2674 		 * and all remaining paths (when 'found == 1') are the
2675 		 * right channel.
2676 		 *
2677 		 * A stereo control is signified by a valid 'rconnect'
2678 		 * value, either 0 for unconnected, or >= 0 for connected.
2679 		 * This is chosen instead of using snd_soc_volsw_is_stereo,
2680 		 * so that the behavior of snd_soc_dapm_mixer_update_power
2681 		 * doesn't change even when the kcontrol passed in is
2682 		 * stereo.
2683 		 *
2684 		 * It passes 'connect' as the path connect status for
2685 		 * the left channel, and 'rconnect' for the right
2686 		 * channel.
2687 		 */
2688 		if (found && rconnect >= 0)
2689 			soc_dapm_connect_path(path, rconnect, "mixer update");
2690 		else
2691 			soc_dapm_connect_path(path, connect, "mixer update");
2692 		found = 1;
2693 	}
2694 
2695 	if (found)
2696 		dapm_power_widgets(card, SND_SOC_DAPM_STREAM_NOP, update);
2697 
2698 	return found;
2699 }
2700 
2701 int snd_soc_dapm_mixer_update_power(struct snd_soc_dapm_context *dapm,
2702 	struct snd_kcontrol *kcontrol, int connect,
2703 	struct snd_soc_dapm_update *update)
2704 {
2705 	struct snd_soc_card *card = dapm->card;
2706 	int ret;
2707 
2708 	snd_soc_dapm_mutex_lock(card);
2709 	ret = soc_dapm_mixer_update_power(card, kcontrol, update, connect, -1);
2710 	snd_soc_dapm_mutex_unlock(card);
2711 	if (ret > 0)
2712 		snd_soc_dpcm_runtime_update(card);
2713 	return ret;
2714 }
2715 EXPORT_SYMBOL_GPL(snd_soc_dapm_mixer_update_power);
2716 
2717 static ssize_t dapm_widget_show_component(struct snd_soc_component *component,
2718 					  char *buf, int count)
2719 {
2720 	struct snd_soc_dapm_context *dapm = snd_soc_component_to_dapm(component);
2721 	struct snd_soc_dapm_widget *w;
2722 	char *state = "not set";
2723 
2724 	/* card won't be set for the dummy component, as a spot fix
2725 	 * we're checking for that case specifically here but in future
2726 	 * we will ensure that the dummy component looks like others.
2727 	 */
2728 	if (!component->card)
2729 		return 0;
2730 
2731 	for_each_card_widgets(component->card, w) {
2732 		if (w->dapm != dapm)
2733 			continue;
2734 
2735 		/* only display widgets that burn power */
2736 		switch (w->id) {
2737 		case snd_soc_dapm_hp:
2738 		case snd_soc_dapm_mic:
2739 		case snd_soc_dapm_spk:
2740 		case snd_soc_dapm_line:
2741 		case snd_soc_dapm_micbias:
2742 		case snd_soc_dapm_dac:
2743 		case snd_soc_dapm_adc:
2744 		case snd_soc_dapm_pga:
2745 		case snd_soc_dapm_effect:
2746 		case snd_soc_dapm_out_drv:
2747 		case snd_soc_dapm_mixer:
2748 		case snd_soc_dapm_mixer_named_ctl:
2749 		case snd_soc_dapm_supply:
2750 		case snd_soc_dapm_regulator_supply:
2751 		case snd_soc_dapm_pinctrl:
2752 		case snd_soc_dapm_clock_supply:
2753 			if (w->name)
2754 				count += sysfs_emit_at(buf, count, "%s: %s\n",
2755 					w->name, w->power ? "On":"Off");
2756 		break;
2757 		default:
2758 		break;
2759 		}
2760 	}
2761 
2762 	switch (snd_soc_dapm_get_bias_level(dapm)) {
2763 	case SND_SOC_BIAS_ON:
2764 		state = "On";
2765 		break;
2766 	case SND_SOC_BIAS_PREPARE:
2767 		state = "Prepare";
2768 		break;
2769 	case SND_SOC_BIAS_STANDBY:
2770 		state = "Standby";
2771 		break;
2772 	case SND_SOC_BIAS_OFF:
2773 		state = "Off";
2774 		break;
2775 	}
2776 	count += sysfs_emit_at(buf, count, "PM State: %s\n", state);
2777 
2778 	return count;
2779 }
2780 
2781 /* show dapm widget status in sys fs */
2782 static ssize_t dapm_widget_show(struct device *dev,
2783 	struct device_attribute *attr, char *buf)
2784 {
2785 	struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev);
2786 	struct snd_soc_dai *codec_dai;
2787 	int i, count = 0;
2788 
2789 	snd_soc_dapm_mutex_lock_root(rtd->card);
2790 
2791 	for_each_rtd_codec_dais(rtd, i, codec_dai) {
2792 		struct snd_soc_component *component = codec_dai->component;
2793 
2794 		count = dapm_widget_show_component(component, buf, count);
2795 	}
2796 
2797 	snd_soc_dapm_mutex_unlock(rtd->card);
2798 
2799 	return count;
2800 }
2801 
2802 static DEVICE_ATTR_RO(dapm_widget);
2803 
2804 struct attribute *snd_soc_dapm_dev_attrs[] = {
2805 	&dev_attr_dapm_widget.attr,
2806 	NULL
2807 };
2808 
2809 static void dapm_free_path(struct snd_soc_dapm_path *path)
2810 {
2811 	list_del(&path->list_node[SND_SOC_DAPM_DIR_IN]);
2812 	list_del(&path->list_node[SND_SOC_DAPM_DIR_OUT]);
2813 	list_del(&path->list_kcontrol);
2814 	list_del(&path->list);
2815 	kfree(path);
2816 }
2817 
2818 /**
2819  * snd_soc_dapm_free_widget - Free specified widget
2820  * @w: widget to free
2821  *
2822  * Removes widget from all paths and frees memory occupied by it.
2823  */
2824 void snd_soc_dapm_free_widget(struct snd_soc_dapm_widget *w)
2825 {
2826 	struct snd_soc_dapm_path *p, *next_p;
2827 	enum snd_soc_dapm_direction dir;
2828 
2829 	if (!w)
2830 		return;
2831 
2832 	list_del(&w->list);
2833 	list_del(&w->dirty);
2834 	/*
2835 	 * remove source and sink paths associated to this widget.
2836 	 * While removing the path, remove reference to it from both
2837 	 * source and sink widgets so that path is removed only once.
2838 	 */
2839 	snd_soc_dapm_for_each_direction(dir) {
2840 		snd_soc_dapm_widget_for_each_path_safe(w, dir, p, next_p)
2841 			dapm_free_path(p);
2842 	}
2843 
2844 	dapm_debugfs_free_widget(w);
2845 
2846 	kfree(w->kcontrols);
2847 	kfree_const(w->name);
2848 	kfree_const(w->sname);
2849 	kfree(w);
2850 }
2851 EXPORT_SYMBOL_GPL(snd_soc_dapm_free_widget);
2852 
2853 /* free all dapm widgets and resources */
2854 static void dapm_free_widgets(struct snd_soc_dapm_context *dapm)
2855 {
2856 	struct snd_soc_dapm_widget *w, *next_w;
2857 
2858 	for_each_card_widgets_safe(dapm->card, w, next_w) {
2859 		if (w->dapm != dapm)
2860 			continue;
2861 		snd_soc_dapm_free_widget(w);
2862 	}
2863 
2864 	dapm->wcache_sink	= NULL;
2865 	dapm->wcache_source	= NULL;
2866 }
2867 
2868 static struct snd_soc_dapm_widget *dapm_find_widget(
2869 			struct snd_soc_dapm_context *dapm, const char *pin,
2870 			bool search_other_contexts)
2871 {
2872 	struct snd_soc_dapm_widget *w;
2873 	struct snd_soc_dapm_widget *fallback = NULL;
2874 	char prefixed_pin[80];
2875 	const char *pin_name;
2876 	const char *prefix = soc_dapm_prefix(dapm);
2877 
2878 	if (prefix) {
2879 		snprintf(prefixed_pin, sizeof(prefixed_pin), "%s %s",
2880 			 prefix, pin);
2881 		pin_name = prefixed_pin;
2882 	} else {
2883 		pin_name = pin;
2884 	}
2885 
2886 	for_each_card_widgets(dapm->card, w) {
2887 		if (!strcmp(w->name, pin_name)) {
2888 			if (w->dapm == dapm)
2889 				return w;
2890 			else
2891 				fallback = w;
2892 		}
2893 	}
2894 
2895 	if (search_other_contexts)
2896 		return fallback;
2897 
2898 	return NULL;
2899 }
2900 
2901 /*
2902  * set the DAPM pin status:
2903  * returns 1 when the value has been updated, 0 when unchanged, or a negative
2904  * error code; called from kcontrol put callback
2905  */
2906 static int __snd_soc_dapm_set_pin(struct snd_soc_dapm_context *dapm,
2907 				  const char *pin, int status)
2908 {
2909 	struct snd_soc_dapm_widget *w = dapm_find_widget(dapm, pin, true);
2910 	struct device *dev = snd_soc_dapm_to_dev(dapm);
2911 	int ret = 0;
2912 
2913 	dapm_assert_locked(dapm);
2914 
2915 	if (!w) {
2916 		dev_err(dev, "ASoC: DAPM unknown pin %s\n", pin);
2917 		return -EINVAL;
2918 	}
2919 
2920 	if (w->connected != status) {
2921 		dapm_mark_dirty(w, "pin configuration");
2922 		dapm_widget_invalidate_input_paths(w);
2923 		dapm_widget_invalidate_output_paths(w);
2924 		ret = 1;
2925 	}
2926 
2927 	w->connected = status;
2928 	if (status == 0)
2929 		w->force = 0;
2930 
2931 	return ret;
2932 }
2933 
2934 /*
2935  * similar as __snd_soc_dapm_set_pin(), but returns 0 when successful;
2936  * called from several API functions below
2937  */
2938 static int snd_soc_dapm_set_pin(struct snd_soc_dapm_context *dapm,
2939 				const char *pin, int status)
2940 {
2941 	int ret = __snd_soc_dapm_set_pin(dapm, pin, status);
2942 
2943 	return ret < 0 ? ret : 0;
2944 }
2945 
2946 /**
2947  * snd_soc_dapm_sync_unlocked - scan and power dapm paths
2948  * @dapm: DAPM context
2949  *
2950  * Walks all dapm audio paths and powers widgets according to their
2951  * stream or path usage.
2952  *
2953  * Requires external locking.
2954  *
2955  * Returns 0 for success.
2956  */
2957 int snd_soc_dapm_sync_unlocked(struct snd_soc_dapm_context *dapm)
2958 {
2959 	/*
2960 	 * Suppress early reports (eg, jacks syncing their state) to avoid
2961 	 * silly DAPM runs during card startup.
2962 	 */
2963 	if (!snd_soc_card_is_instantiated(dapm->card))
2964 		return 0;
2965 
2966 	return dapm_power_widgets(dapm->card, SND_SOC_DAPM_STREAM_NOP, NULL);
2967 }
2968 EXPORT_SYMBOL_GPL(snd_soc_dapm_sync_unlocked);
2969 
2970 /**
2971  * snd_soc_dapm_sync - scan and power dapm paths
2972  * @dapm: DAPM context
2973  *
2974  * Walks all dapm audio paths and powers widgets according to their
2975  * stream or path usage.
2976  *
2977  * Returns 0 for success.
2978  */
2979 int snd_soc_dapm_sync(struct snd_soc_dapm_context *dapm)
2980 {
2981 	int ret;
2982 
2983 	snd_soc_dapm_mutex_lock(dapm);
2984 	ret = snd_soc_dapm_sync_unlocked(dapm);
2985 	snd_soc_dapm_mutex_unlock(dapm);
2986 	return ret;
2987 }
2988 EXPORT_SYMBOL_GPL(snd_soc_dapm_sync);
2989 
2990 static int dapm_update_dai_chan(struct snd_soc_dapm_path *p,
2991 				struct snd_soc_dapm_widget *w,
2992 				int channels)
2993 {
2994 	struct device *dev = snd_soc_dapm_to_dev(w->dapm);
2995 
2996 	switch (w->id) {
2997 	case snd_soc_dapm_aif_out:
2998 	case snd_soc_dapm_aif_in:
2999 		break;
3000 	default:
3001 		return 0;
3002 	}
3003 
3004 	dev_dbg(dev, "%s DAI route %s -> %s\n",
3005 		w->channel < channels ? "Connecting" : "Disconnecting",
3006 		p->source->name, p->sink->name);
3007 
3008 	if (w->channel < channels)
3009 		soc_dapm_connect_path(p, true, "dai update");
3010 	else
3011 		soc_dapm_connect_path(p, false, "dai update");
3012 
3013 	return 0;
3014 }
3015 
3016 static int dapm_update_dai_unlocked(struct snd_pcm_substream *substream,
3017 				    struct snd_pcm_hw_params *params,
3018 				    struct snd_soc_dai *dai)
3019 {
3020 	int dir = substream->stream;
3021 	int channels = params_channels(params);
3022 	struct snd_soc_dapm_path *p;
3023 	struct snd_soc_dapm_widget *w;
3024 	int ret;
3025 
3026 	w = snd_soc_dai_get_widget(dai, dir);
3027 
3028 	if (!w)
3029 		return 0;
3030 
3031 	dev_dbg(dai->dev, "Update DAI routes for %s %s\n", dai->name, snd_pcm_direction_name(dir));
3032 
3033 	snd_soc_dapm_widget_for_each_sink_path(w, p) {
3034 		ret = dapm_update_dai_chan(p, p->sink, channels);
3035 		if (ret < 0)
3036 			return ret;
3037 	}
3038 
3039 	snd_soc_dapm_widget_for_each_source_path(w, p) {
3040 		ret = dapm_update_dai_chan(p, p->source, channels);
3041 		if (ret < 0)
3042 			return ret;
3043 	}
3044 
3045 	return 0;
3046 }
3047 
3048 int snd_soc_dapm_update_dai(struct snd_pcm_substream *substream,
3049 			    struct snd_pcm_hw_params *params,
3050 			    struct snd_soc_dai *dai)
3051 {
3052 	struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
3053 	int ret;
3054 
3055 	snd_soc_dapm_mutex_lock(rtd->card);
3056 	ret = dapm_update_dai_unlocked(substream, params, dai);
3057 	snd_soc_dapm_mutex_unlock(rtd->card);
3058 
3059 	return ret;
3060 }
3061 
3062 int snd_soc_dapm_widget_name_cmp(struct snd_soc_dapm_widget *widget, const char *s)
3063 {
3064 	struct snd_soc_component *component = widget->dapm->component;
3065 	const char *wname = widget->name;
3066 
3067 	if (component && component->name_prefix)
3068 		wname += strlen(component->name_prefix) + 1; /* plus space */
3069 
3070 	return strcmp(wname, s);
3071 }
3072 EXPORT_SYMBOL_GPL(snd_soc_dapm_widget_name_cmp);
3073 
3074 static int snd_soc_dapm_add_route(struct snd_soc_dapm_context *dapm,
3075 				  const struct snd_soc_dapm_route *route)
3076 {
3077 	struct snd_soc_dapm_widget *wsource = NULL, *wsink = NULL, *w;
3078 	struct snd_soc_dapm_widget *wtsource = NULL, *wtsink = NULL;
3079 	struct device *dev = snd_soc_dapm_to_dev(dapm);
3080 	const char *sink;
3081 	const char *source;
3082 	char prefixed_sink[80];
3083 	char prefixed_source[80];
3084 	const char *prefix;
3085 	unsigned int sink_ref = 0;
3086 	unsigned int source_ref = 0;
3087 	int ret;
3088 
3089 	prefix = soc_dapm_prefix(dapm);
3090 	if (prefix) {
3091 		snprintf(prefixed_sink, sizeof(prefixed_sink), "%s %s",
3092 			 prefix, route->sink);
3093 		sink = prefixed_sink;
3094 		snprintf(prefixed_source, sizeof(prefixed_source), "%s %s",
3095 			 prefix, route->source);
3096 		source = prefixed_source;
3097 	} else {
3098 		sink = route->sink;
3099 		source = route->source;
3100 	}
3101 
3102 	wsource	= dapm_wcache_lookup(dapm->wcache_source, source);
3103 	wsink	= dapm_wcache_lookup(dapm->wcache_sink,   sink);
3104 
3105 	if (wsink && wsource)
3106 		goto skip_search;
3107 
3108 	/*
3109 	 * find src and dest widgets over all widgets but favor a widget from
3110 	 * current DAPM context
3111 	 */
3112 	for_each_card_widgets(dapm->card, w) {
3113 		if (!wsink && !(strcmp(w->name, sink))) {
3114 			wtsink = w;
3115 			if (w->dapm == dapm) {
3116 				wsink = w;
3117 				if (wsource)
3118 					break;
3119 			}
3120 			sink_ref++;
3121 			if (sink_ref > 1)
3122 				dev_warn(dev,
3123 					"ASoC: sink widget %s overwritten\n",
3124 					w->name);
3125 			continue;
3126 		}
3127 		if (!wsource && !(strcmp(w->name, source))) {
3128 			wtsource = w;
3129 			if (w->dapm == dapm) {
3130 				wsource = w;
3131 				if (wsink)
3132 					break;
3133 			}
3134 			source_ref++;
3135 			if (source_ref > 1)
3136 				dev_warn(dev,
3137 					"ASoC: source widget %s overwritten\n",
3138 					w->name);
3139 		}
3140 	}
3141 	/* use widget from another DAPM context if not found from this */
3142 	if (!wsink)
3143 		wsink = wtsink;
3144 	if (!wsource)
3145 		wsource = wtsource;
3146 
3147 	ret = -ENODEV;
3148 	if (!wsource)
3149 		goto err;
3150 	if (!wsink)
3151 		goto err;
3152 
3153 skip_search:
3154 	/* update cache */
3155 	dapm->wcache_sink	= wsink;
3156 	dapm->wcache_source	= wsource;
3157 
3158 	ret = snd_soc_dapm_add_path(dapm, wsource, wsink, route->control,
3159 		route->connected);
3160 err:
3161 	if (ret)
3162 		dev_err(dev, "ASoC: Failed to add route %s%s -%s%s%s> %s%s\n",
3163 			source, !wsource ? "(*)" : "",
3164 			!route->control ? "" : "> [",
3165 			!route->control ? "" : route->control,
3166 			!route->control ? "" : "] -",
3167 			sink,  !wsink ? "(*)" : "");
3168 	return ret;
3169 }
3170 
3171 static int snd_soc_dapm_del_route(struct snd_soc_dapm_context *dapm,
3172 				  const struct snd_soc_dapm_route *route)
3173 {
3174 	struct device *dev = snd_soc_dapm_to_dev(dapm);
3175 	struct snd_soc_dapm_path *path, *p;
3176 	const char *sink;
3177 	const char *source;
3178 	char prefixed_sink[80];
3179 	char prefixed_source[80];
3180 	const char *prefix;
3181 
3182 	if (route->control) {
3183 		dev_err(dev,
3184 			"ASoC: Removal of routes with controls not supported\n");
3185 		return -EINVAL;
3186 	}
3187 
3188 	prefix = soc_dapm_prefix(dapm);
3189 	if (prefix) {
3190 		snprintf(prefixed_sink, sizeof(prefixed_sink), "%s %s",
3191 			 prefix, route->sink);
3192 		sink = prefixed_sink;
3193 		snprintf(prefixed_source, sizeof(prefixed_source), "%s %s",
3194 			 prefix, route->source);
3195 		source = prefixed_source;
3196 	} else {
3197 		sink = route->sink;
3198 		source = route->source;
3199 	}
3200 
3201 	path = NULL;
3202 	list_for_each_entry(p, &dapm->card->paths, list) {
3203 		if (strcmp(p->source->name, source) != 0)
3204 			continue;
3205 		if (strcmp(p->sink->name, sink) != 0)
3206 			continue;
3207 		path = p;
3208 		break;
3209 	}
3210 
3211 	if (path) {
3212 		struct snd_soc_dapm_widget *wsource = path->source;
3213 		struct snd_soc_dapm_widget *wsink = path->sink;
3214 
3215 		dapm_mark_dirty(wsource, "Route removed");
3216 		dapm_mark_dirty(wsink, "Route removed");
3217 		if (path->connect)
3218 			dapm_path_invalidate(path);
3219 
3220 		dapm_free_path(path);
3221 
3222 		/* Update any path related flags */
3223 		dapm_update_widget_flags(wsource);
3224 		dapm_update_widget_flags(wsink);
3225 	} else {
3226 		dev_warn(dev, "ASoC: Route %s->%s does not exist\n",
3227 			 source, sink);
3228 	}
3229 
3230 	return 0;
3231 }
3232 
3233 /**
3234  * snd_soc_dapm_add_routes - Add routes between DAPM widgets
3235  * @dapm: DAPM context
3236  * @route: audio routes
3237  * @num: number of routes
3238  *
3239  * Connects 2 dapm widgets together via a named audio path. The sink is
3240  * the widget receiving the audio signal, whilst the source is the sender
3241  * of the audio signal.
3242  *
3243  * Returns 0 for success else error. On error all resources can be freed
3244  * with a call to snd_soc_card_free().
3245  */
3246 int snd_soc_dapm_add_routes(struct snd_soc_dapm_context *dapm,
3247 			    const struct snd_soc_dapm_route *route, int num)
3248 {
3249 	int i, ret = 0;
3250 
3251 	snd_soc_dapm_mutex_lock(dapm);
3252 	for (i = 0; i < num; i++) {
3253 		int r = snd_soc_dapm_add_route(dapm, route);
3254 		if (r < 0)
3255 			ret = r;
3256 		route++;
3257 	}
3258 	snd_soc_dapm_mutex_unlock(dapm);
3259 
3260 	return ret;
3261 }
3262 EXPORT_SYMBOL_GPL(snd_soc_dapm_add_routes);
3263 
3264 /**
3265  * snd_soc_dapm_del_routes - Remove routes between DAPM widgets
3266  * @dapm: DAPM context
3267  * @route: audio routes
3268  * @num: number of routes
3269  *
3270  * Removes routes from the DAPM context.
3271  */
3272 int snd_soc_dapm_del_routes(struct snd_soc_dapm_context *dapm,
3273 			    const struct snd_soc_dapm_route *route, int num)
3274 {
3275 	int i;
3276 
3277 	snd_soc_dapm_mutex_lock(dapm);
3278 	for (i = 0; i < num; i++) {
3279 		snd_soc_dapm_del_route(dapm, route);
3280 		route++;
3281 	}
3282 	snd_soc_dapm_mutex_unlock(dapm);
3283 
3284 	return 0;
3285 }
3286 EXPORT_SYMBOL_GPL(snd_soc_dapm_del_routes);
3287 
3288 /**
3289  * snd_soc_dapm_new_widgets - add new dapm widgets
3290  * @card: card to be checked for new dapm widgets
3291  *
3292  * Checks the codec for any new dapm widgets and creates them if found.
3293  *
3294  * Returns 0 for success.
3295  */
3296 int snd_soc_dapm_new_widgets(struct snd_soc_card *card)
3297 {
3298 	struct snd_soc_dapm_widget *w;
3299 	unsigned int val;
3300 
3301 	snd_soc_dapm_mutex_lock_root(card);
3302 
3303 	for_each_card_widgets(card, w)
3304 	{
3305 		if (w->new)
3306 			continue;
3307 
3308 		if (w->num_kcontrols) {
3309 			w->kcontrols = kcalloc(w->num_kcontrols,
3310 						sizeof(struct snd_kcontrol *),
3311 						GFP_KERNEL);
3312 			if (!w->kcontrols) {
3313 				snd_soc_dapm_mutex_unlock(card);
3314 				return -ENOMEM;
3315 			}
3316 		}
3317 
3318 		switch(w->id) {
3319 		case snd_soc_dapm_switch:
3320 		case snd_soc_dapm_mixer:
3321 		case snd_soc_dapm_mixer_named_ctl:
3322 			dapm_new_mixer(w);
3323 			break;
3324 		case snd_soc_dapm_mux:
3325 		case snd_soc_dapm_demux:
3326 			dapm_new_mux(w);
3327 			break;
3328 		case snd_soc_dapm_pga:
3329 		case snd_soc_dapm_effect:
3330 		case snd_soc_dapm_out_drv:
3331 			dapm_new_pga(w);
3332 			break;
3333 		case snd_soc_dapm_dai_link:
3334 			dapm_new_dai_link(w);
3335 			break;
3336 		default:
3337 			break;
3338 		}
3339 
3340 		/* Read the initial power state from the device */
3341 		if (w->reg >= 0) {
3342 			val = soc_dapm_read(w->dapm, w->reg);
3343 			val = val >> w->shift;
3344 			val &= w->mask;
3345 			if (val == w->on_val)
3346 				w->power = 1;
3347 		}
3348 
3349 		w->new = 1;
3350 
3351 		dapm_mark_dirty(w, "new widget");
3352 		dapm_debugfs_add_widget(w);
3353 	}
3354 
3355 	dapm_power_widgets(card, SND_SOC_DAPM_STREAM_NOP, NULL);
3356 	snd_soc_dapm_mutex_unlock(card);
3357 	return 0;
3358 }
3359 EXPORT_SYMBOL_GPL(snd_soc_dapm_new_widgets);
3360 
3361 /**
3362  * snd_soc_dapm_get_volsw - dapm mixer get callback
3363  * @kcontrol: mixer control
3364  * @ucontrol: control element information
3365  *
3366  * Callback to get the value of a dapm mixer control.
3367  *
3368  * Returns 0 for success.
3369  */
3370 int snd_soc_dapm_get_volsw(struct snd_kcontrol *kcontrol,
3371 	struct snd_ctl_elem_value *ucontrol)
3372 {
3373 	struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_to_dapm(kcontrol);
3374 	struct soc_mixer_control *mc =
3375 		(struct soc_mixer_control *)kcontrol->private_value;
3376 	int reg = mc->reg;
3377 	unsigned int shift = mc->shift;
3378 	int max = mc->max;
3379 	unsigned int width = fls(max);
3380 	unsigned int mask = (1 << fls(max)) - 1;
3381 	unsigned int invert = mc->invert;
3382 	unsigned int reg_val, val, rval = 0;
3383 
3384 	snd_soc_dapm_mutex_lock(dapm);
3385 	if (dapm_kcontrol_is_powered(kcontrol) && reg != SND_SOC_NOPM) {
3386 		reg_val = soc_dapm_read(dapm, reg);
3387 		val = (reg_val >> shift) & mask;
3388 
3389 		if (reg != mc->rreg)
3390 			reg_val = soc_dapm_read(dapm, mc->rreg);
3391 
3392 		if (snd_soc_volsw_is_stereo(mc))
3393 			rval = (reg_val >> mc->rshift) & mask;
3394 	} else {
3395 		reg_val = snd_soc_dapm_kcontrol_get_value(kcontrol);
3396 		val = reg_val & mask;
3397 
3398 		if (snd_soc_volsw_is_stereo(mc))
3399 			rval = (reg_val >> width) & mask;
3400 	}
3401 	snd_soc_dapm_mutex_unlock(dapm);
3402 
3403 	if (invert)
3404 		ucontrol->value.integer.value[0] = max - val;
3405 	else
3406 		ucontrol->value.integer.value[0] = val;
3407 
3408 	if (snd_soc_volsw_is_stereo(mc)) {
3409 		if (invert)
3410 			ucontrol->value.integer.value[1] = max - rval;
3411 		else
3412 			ucontrol->value.integer.value[1] = rval;
3413 	}
3414 
3415 	return 0;
3416 }
3417 EXPORT_SYMBOL_GPL(snd_soc_dapm_get_volsw);
3418 
3419 /**
3420  * snd_soc_dapm_put_volsw - dapm mixer set callback
3421  * @kcontrol: mixer control
3422  * @ucontrol: control element information
3423  *
3424  * Callback to set the value of a dapm mixer control.
3425  *
3426  * Returns 0 for success.
3427  */
3428 int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol,
3429 	struct snd_ctl_elem_value *ucontrol)
3430 {
3431 	struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_to_dapm(kcontrol);
3432 	struct device *dev = snd_soc_dapm_to_dev(dapm);
3433 	struct snd_soc_card *card = dapm->card;
3434 	struct soc_mixer_control *mc =
3435 		(struct soc_mixer_control *)kcontrol->private_value;
3436 	int reg = mc->reg;
3437 	unsigned int shift = mc->shift;
3438 	int max = mc->max;
3439 	unsigned int width = fls(max);
3440 	unsigned int mask = (1 << width) - 1;
3441 	unsigned int invert = mc->invert;
3442 	unsigned int val, rval = 0;
3443 	int connect, rconnect = -1, change, reg_change = 0;
3444 	struct snd_soc_dapm_update update = {};
3445 	struct snd_soc_dapm_update *pupdate = NULL;
3446 	int ret = 0;
3447 
3448 	val = (ucontrol->value.integer.value[0] & mask);
3449 	connect = !!val;
3450 
3451 	if (invert)
3452 		val = max - val;
3453 
3454 	if (snd_soc_volsw_is_stereo(mc)) {
3455 		rval = (ucontrol->value.integer.value[1] & mask);
3456 		rconnect = !!rval;
3457 		if (invert)
3458 			rval = max - rval;
3459 	}
3460 
3461 	snd_soc_dapm_mutex_lock(card);
3462 
3463 	/* This assumes field width < (bits in unsigned int / 2) */
3464 	if (width > sizeof(unsigned int) * 8 / 2)
3465 		dev_warn(dev,
3466 			 "ASoC: control %s field width limit exceeded\n",
3467 			 kcontrol->id.name);
3468 	change = dapm_kcontrol_set_value(kcontrol, val | (rval << width));
3469 
3470 	if (reg != SND_SOC_NOPM) {
3471 		val = val << shift;
3472 		rval = rval << mc->rshift;
3473 
3474 		reg_change = soc_dapm_test_bits(dapm, reg, mask << shift, val);
3475 
3476 		if (snd_soc_volsw_is_stereo(mc))
3477 			reg_change |= soc_dapm_test_bits(dapm, mc->rreg,
3478 							 mask << mc->rshift,
3479 							 rval);
3480 	}
3481 
3482 	if (change || reg_change) {
3483 		if (reg_change) {
3484 			if (snd_soc_volsw_is_stereo(mc)) {
3485 				update.has_second_set = true;
3486 				update.reg2 = mc->rreg;
3487 				update.mask2 = mask << mc->rshift;
3488 				update.val2 = rval;
3489 			}
3490 			update.kcontrol = kcontrol;
3491 			update.reg = reg;
3492 			update.mask = mask << shift;
3493 			update.val = val;
3494 			pupdate = &update;
3495 		}
3496 		ret = soc_dapm_mixer_update_power(card, kcontrol, pupdate, connect, rconnect);
3497 	}
3498 
3499 	snd_soc_dapm_mutex_unlock(card);
3500 
3501 	if (ret > 0)
3502 		snd_soc_dpcm_runtime_update(card);
3503 
3504 	return change;
3505 }
3506 EXPORT_SYMBOL_GPL(snd_soc_dapm_put_volsw);
3507 
3508 /**
3509  * snd_soc_dapm_get_enum_double - dapm enumerated double mixer get callback
3510  * @kcontrol: mixer control
3511  * @ucontrol: control element information
3512  *
3513  * Callback to get the value of a dapm enumerated double mixer control.
3514  *
3515  * Returns 0 for success.
3516  */
3517 int snd_soc_dapm_get_enum_double(struct snd_kcontrol *kcontrol,
3518 	struct snd_ctl_elem_value *ucontrol)
3519 {
3520 	struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_to_dapm(kcontrol);
3521 	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
3522 	unsigned int reg_val, val;
3523 
3524 	snd_soc_dapm_mutex_lock(dapm);
3525 	if (e->reg != SND_SOC_NOPM && dapm_kcontrol_is_powered(kcontrol)) {
3526 		reg_val = soc_dapm_read(dapm, e->reg);
3527 	} else {
3528 		reg_val = snd_soc_dapm_kcontrol_get_value(kcontrol);
3529 	}
3530 	snd_soc_dapm_mutex_unlock(dapm);
3531 
3532 	val = (reg_val >> e->shift_l) & e->mask;
3533 	ucontrol->value.enumerated.item[0] = snd_soc_enum_val_to_item(e, val);
3534 	if (e->shift_l != e->shift_r) {
3535 		val = (reg_val >> e->shift_r) & e->mask;
3536 		val = snd_soc_enum_val_to_item(e, val);
3537 		ucontrol->value.enumerated.item[1] = val;
3538 	}
3539 
3540 	return 0;
3541 }
3542 EXPORT_SYMBOL_GPL(snd_soc_dapm_get_enum_double);
3543 
3544 /**
3545  * snd_soc_dapm_put_enum_double - dapm enumerated double mixer set callback
3546  * @kcontrol: mixer control
3547  * @ucontrol: control element information
3548  *
3549  * Callback to set the value of a dapm enumerated double mixer control.
3550  *
3551  * Returns 0 for success.
3552  */
3553 int snd_soc_dapm_put_enum_double(struct snd_kcontrol *kcontrol,
3554 	struct snd_ctl_elem_value *ucontrol)
3555 {
3556 	struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_to_dapm(kcontrol);
3557 	struct snd_soc_card *card = dapm->card;
3558 	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
3559 	unsigned int *item = ucontrol->value.enumerated.item;
3560 	unsigned int val, change, reg_change = 0;
3561 	unsigned int mask;
3562 	struct snd_soc_dapm_update update = {};
3563 	struct snd_soc_dapm_update *pupdate = NULL;
3564 	int ret = 0;
3565 
3566 	if (item[0] >= e->items)
3567 		return -EINVAL;
3568 
3569 	val = snd_soc_enum_item_to_val(e, item[0]) << e->shift_l;
3570 	mask = e->mask << e->shift_l;
3571 	if (e->shift_l != e->shift_r) {
3572 		if (item[1] > e->items)
3573 			return -EINVAL;
3574 		val |= snd_soc_enum_item_to_val(e, item[1]) << e->shift_r;
3575 		mask |= e->mask << e->shift_r;
3576 	}
3577 
3578 	snd_soc_dapm_mutex_lock(card);
3579 
3580 	change = dapm_kcontrol_set_value(kcontrol, val);
3581 
3582 	if (e->reg != SND_SOC_NOPM)
3583 		reg_change = soc_dapm_test_bits(dapm, e->reg, mask, val);
3584 
3585 	if (change || reg_change) {
3586 		if (reg_change) {
3587 			update.kcontrol = kcontrol;
3588 			update.reg = e->reg;
3589 			update.mask = mask;
3590 			update.val = val;
3591 			pupdate = &update;
3592 		}
3593 		ret = soc_dapm_mux_update_power(card, kcontrol, pupdate, item[0], e);
3594 	}
3595 
3596 	snd_soc_dapm_mutex_unlock(card);
3597 
3598 	if (ret > 0)
3599 		snd_soc_dpcm_runtime_update(card);
3600 
3601 	return change;
3602 }
3603 EXPORT_SYMBOL_GPL(snd_soc_dapm_put_enum_double);
3604 
3605 /**
3606  * snd_soc_dapm_info_pin_switch - Info for a pin switch
3607  *
3608  * @kcontrol: mixer control
3609  * @uinfo: control element information
3610  *
3611  * Callback to provide information about a pin switch control.
3612  */
3613 int snd_soc_dapm_info_pin_switch(struct snd_kcontrol *kcontrol,
3614 				 struct snd_ctl_elem_info *uinfo)
3615 {
3616 	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
3617 	uinfo->count = 1;
3618 	uinfo->value.integer.min = 0;
3619 	uinfo->value.integer.max = 1;
3620 
3621 	return 0;
3622 }
3623 EXPORT_SYMBOL_GPL(snd_soc_dapm_info_pin_switch);
3624 
3625 static int __snd_soc_dapm_get_pin_switch(struct snd_soc_dapm_context *dapm,
3626 					 const char *pin,
3627 					 struct snd_ctl_elem_value *ucontrol)
3628 {
3629 	snd_soc_dapm_mutex_lock(dapm);
3630 	ucontrol->value.integer.value[0] = snd_soc_dapm_get_pin_status(dapm, pin);
3631 	snd_soc_dapm_mutex_unlock(dapm);
3632 
3633 	return 0;
3634 }
3635 
3636 /**
3637  * snd_soc_dapm_get_pin_switch - Get information for a pin switch
3638  *
3639  * @kcontrol: mixer control
3640  * @ucontrol: Value
3641  *
3642  * Callback to provide information for a pin switch added at the card
3643  * level.
3644  */
3645 int snd_soc_dapm_get_pin_switch(struct snd_kcontrol *kcontrol,
3646 				struct snd_ctl_elem_value *ucontrol)
3647 {
3648 	struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
3649 	struct snd_soc_dapm_context *dapm = snd_soc_card_to_dapm(card);
3650 	const char *pin = (const char *)kcontrol->private_value;
3651 
3652 	return __snd_soc_dapm_get_pin_switch(dapm, pin, ucontrol);
3653 }
3654 EXPORT_SYMBOL_GPL(snd_soc_dapm_get_pin_switch);
3655 
3656 /**
3657  * snd_soc_dapm_get_component_pin_switch - Get information for a pin switch
3658  *
3659  * @kcontrol: mixer control
3660  * @ucontrol: Value
3661  *
3662  * Callback to provide information for a pin switch added at the component
3663  * level.
3664  */
3665 int snd_soc_dapm_get_component_pin_switch(struct snd_kcontrol *kcontrol,
3666 					  struct snd_ctl_elem_value *ucontrol)
3667 {
3668 	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
3669 	struct snd_soc_dapm_context *dapm = snd_soc_component_to_dapm(component);
3670 	const char *pin = (const char *)kcontrol->private_value;
3671 
3672 	return __snd_soc_dapm_get_pin_switch(dapm, pin, ucontrol);
3673 }
3674 EXPORT_SYMBOL_GPL(snd_soc_dapm_get_component_pin_switch);
3675 
3676 static int __snd_soc_dapm_put_pin_switch(struct snd_soc_dapm_context *dapm,
3677 					 const char *pin,
3678 					 struct snd_ctl_elem_value *ucontrol)
3679 {
3680 	int ret;
3681 
3682 	snd_soc_dapm_mutex_lock(dapm);
3683 	ret = __snd_soc_dapm_set_pin(dapm, pin, !!ucontrol->value.integer.value[0]);
3684 	snd_soc_dapm_mutex_unlock(dapm);
3685 
3686 	snd_soc_dapm_sync(dapm);
3687 
3688 	return ret;
3689 }
3690 
3691 /**
3692  * snd_soc_dapm_put_pin_switch - Set information for a pin switch
3693  *
3694  * @kcontrol: mixer control
3695  * @ucontrol: Value
3696  *
3697  * Callback to provide information for a pin switch added at the card
3698  * level.
3699  */
3700 int snd_soc_dapm_put_pin_switch(struct snd_kcontrol *kcontrol,
3701 				struct snd_ctl_elem_value *ucontrol)
3702 {
3703 	struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
3704 	struct snd_soc_dapm_context *dapm = snd_soc_card_to_dapm(card);
3705 	const char *pin = (const char *)kcontrol->private_value;
3706 
3707 	return __snd_soc_dapm_put_pin_switch(dapm, pin, ucontrol);
3708 }
3709 EXPORT_SYMBOL_GPL(snd_soc_dapm_put_pin_switch);
3710 
3711 /**
3712  * snd_soc_dapm_put_component_pin_switch - Set information for a pin switch
3713  *
3714  * @kcontrol: mixer control
3715  * @ucontrol: Value
3716  *
3717  * Callback to provide information for a pin switch added at the component
3718  * level.
3719  */
3720 int snd_soc_dapm_put_component_pin_switch(struct snd_kcontrol *kcontrol,
3721 					  struct snd_ctl_elem_value *ucontrol)
3722 {
3723 	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
3724 	struct snd_soc_dapm_context *dapm = snd_soc_component_to_dapm(component);
3725 	const char *pin = (const char *)kcontrol->private_value;
3726 
3727 	return __snd_soc_dapm_put_pin_switch(dapm, pin, ucontrol);
3728 }
3729 EXPORT_SYMBOL_GPL(snd_soc_dapm_put_component_pin_switch);
3730 
3731 struct snd_soc_dapm_widget *
3732 snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm,
3733 			 const struct snd_soc_dapm_widget *widget)
3734 {
3735 	struct device *dev = snd_soc_dapm_to_dev(dapm);
3736 	enum snd_soc_dapm_direction dir;
3737 	struct snd_soc_dapm_widget *w;
3738 	int ret = -ENOMEM;
3739 
3740 	w = dapm_cnew_widget(widget, soc_dapm_prefix(dapm));
3741 	if (!w)
3742 		goto cnew_failed;
3743 
3744 	switch (w->id) {
3745 	case snd_soc_dapm_regulator_supply:
3746 		w->regulator = devm_regulator_get(dev, widget->name);
3747 		if (IS_ERR(w->regulator)) {
3748 			ret = PTR_ERR(w->regulator);
3749 			goto request_failed;
3750 		}
3751 
3752 		if (w->on_val & SND_SOC_DAPM_REGULATOR_BYPASS) {
3753 			ret = regulator_allow_bypass(w->regulator, true);
3754 			if (ret != 0)
3755 				dev_warn(dev,
3756 					 "ASoC: Failed to bypass %s: %d\n",
3757 					 w->name, ret);
3758 		}
3759 		break;
3760 	case snd_soc_dapm_pinctrl:
3761 		w->pinctrl = devm_pinctrl_get(dev);
3762 		if (IS_ERR(w->pinctrl)) {
3763 			ret = PTR_ERR(w->pinctrl);
3764 			goto request_failed;
3765 		}
3766 
3767 		/* set to sleep_state when initializing */
3768 		snd_soc_dapm_pinctrl_event(w, NULL, SND_SOC_DAPM_POST_PMD);
3769 		break;
3770 	case snd_soc_dapm_clock_supply:
3771 		w->clk = devm_clk_get(dev, widget->name);
3772 		if (IS_ERR(w->clk)) {
3773 			ret = PTR_ERR(w->clk);
3774 			goto request_failed;
3775 		}
3776 		break;
3777 	default:
3778 		break;
3779 	}
3780 
3781 	switch (w->id) {
3782 	case snd_soc_dapm_mic:
3783 		w->is_ep = SND_SOC_DAPM_EP_SOURCE;
3784 		w->power_check = dapm_generic_check_power;
3785 		break;
3786 	case snd_soc_dapm_input:
3787 		if (!dapm->card->fully_routed)
3788 			w->is_ep = SND_SOC_DAPM_EP_SOURCE;
3789 		w->power_check = dapm_generic_check_power;
3790 		break;
3791 	case snd_soc_dapm_spk:
3792 	case snd_soc_dapm_hp:
3793 		w->is_ep = SND_SOC_DAPM_EP_SINK;
3794 		w->power_check = dapm_generic_check_power;
3795 		break;
3796 	case snd_soc_dapm_output:
3797 		if (!dapm->card->fully_routed)
3798 			w->is_ep = SND_SOC_DAPM_EP_SINK;
3799 		w->power_check = dapm_generic_check_power;
3800 		break;
3801 	case snd_soc_dapm_vmid:
3802 	case snd_soc_dapm_siggen:
3803 		w->is_ep = SND_SOC_DAPM_EP_SOURCE;
3804 		w->power_check = dapm_always_on_check_power;
3805 		break;
3806 	case snd_soc_dapm_sink:
3807 		w->is_ep = SND_SOC_DAPM_EP_SINK;
3808 		w->power_check = dapm_always_on_check_power;
3809 		break;
3810 
3811 	case snd_soc_dapm_mux:
3812 	case snd_soc_dapm_demux:
3813 	case snd_soc_dapm_switch:
3814 	case snd_soc_dapm_mixer:
3815 	case snd_soc_dapm_mixer_named_ctl:
3816 	case snd_soc_dapm_adc:
3817 	case snd_soc_dapm_aif_out:
3818 	case snd_soc_dapm_dac:
3819 	case snd_soc_dapm_aif_in:
3820 	case snd_soc_dapm_pga:
3821 	case snd_soc_dapm_buffer:
3822 	case snd_soc_dapm_scheduler:
3823 	case snd_soc_dapm_effect:
3824 	case snd_soc_dapm_src:
3825 	case snd_soc_dapm_asrc:
3826 	case snd_soc_dapm_encoder:
3827 	case snd_soc_dapm_decoder:
3828 	case snd_soc_dapm_out_drv:
3829 	case snd_soc_dapm_micbias:
3830 	case snd_soc_dapm_line:
3831 	case snd_soc_dapm_dai_link:
3832 	case snd_soc_dapm_dai_out:
3833 	case snd_soc_dapm_dai_in:
3834 		w->power_check = dapm_generic_check_power;
3835 		break;
3836 	case snd_soc_dapm_supply:
3837 	case snd_soc_dapm_regulator_supply:
3838 	case snd_soc_dapm_pinctrl:
3839 	case snd_soc_dapm_clock_supply:
3840 	case snd_soc_dapm_kcontrol:
3841 		w->is_supply = 1;
3842 		w->power_check = dapm_supply_check_power;
3843 		break;
3844 	default:
3845 		w->power_check = dapm_always_on_check_power;
3846 		break;
3847 	}
3848 
3849 	w->dapm = dapm;
3850 	INIT_LIST_HEAD(&w->list);
3851 	INIT_LIST_HEAD(&w->dirty);
3852 	/* see for_each_card_widgets */
3853 	list_add_tail(&w->list, &dapm->card->widgets);
3854 
3855 	snd_soc_dapm_for_each_direction(dir) {
3856 		INIT_LIST_HEAD(&w->edges[dir]);
3857 		w->endpoints[dir] = -1;
3858 	}
3859 
3860 	/* machine layer sets up unconnected pins and insertions */
3861 	w->connected = 1;
3862 	return w;
3863 
3864 request_failed:
3865 	dev_err_probe(dev, ret, "ASoC: Failed to request %s\n",
3866 		      w->name);
3867 	kfree_const(w->name);
3868 	kfree_const(w->sname);
3869 	kfree(w);
3870 cnew_failed:
3871 	return ERR_PTR(ret);
3872 }
3873 
3874 /**
3875  * snd_soc_dapm_new_control - create new dapm control
3876  * @dapm: DAPM context
3877  * @widget: widget template
3878  *
3879  * Creates new DAPM control based upon a template.
3880  *
3881  * Returns a widget pointer on success or an error pointer on failure
3882  */
3883 struct snd_soc_dapm_widget *
3884 snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
3885 			 const struct snd_soc_dapm_widget *widget)
3886 {
3887 	struct snd_soc_dapm_widget *w;
3888 
3889 	snd_soc_dapm_mutex_lock(dapm);
3890 	w = snd_soc_dapm_new_control_unlocked(dapm, widget);
3891 	snd_soc_dapm_mutex_unlock(dapm);
3892 
3893 	return w;
3894 }
3895 EXPORT_SYMBOL_GPL(snd_soc_dapm_new_control);
3896 
3897 /**
3898  * snd_soc_dapm_new_controls - create new dapm controls
3899  * @dapm: DAPM context
3900  * @widget: widget array
3901  * @num: number of widgets
3902  *
3903  * Creates new DAPM controls based upon the templates.
3904  *
3905  * Returns 0 for success else error.
3906  */
3907 int snd_soc_dapm_new_controls(struct snd_soc_dapm_context *dapm,
3908 	const struct snd_soc_dapm_widget *widget,
3909 	unsigned int num)
3910 {
3911 	int i;
3912 	int ret = 0;
3913 
3914 	snd_soc_dapm_mutex_lock_root(dapm);
3915 	for (i = 0; i < num; i++) {
3916 		struct snd_soc_dapm_widget *w = snd_soc_dapm_new_control_unlocked(dapm, widget);
3917 		if (IS_ERR(w)) {
3918 			ret = PTR_ERR(w);
3919 			break;
3920 		}
3921 		widget++;
3922 	}
3923 	snd_soc_dapm_mutex_unlock(dapm);
3924 	return ret;
3925 }
3926 EXPORT_SYMBOL_GPL(snd_soc_dapm_new_controls);
3927 
3928 static int
3929 snd_soc_dai_link_event_pre_pmu(struct snd_soc_dapm_widget *w,
3930 			       struct snd_pcm_substream *substream)
3931 {
3932 	struct device *dev = snd_soc_dapm_to_dev(w->dapm);
3933 	struct snd_soc_dapm_path *path;
3934 	struct snd_soc_dai *source, *sink;
3935 	struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
3936 	const struct snd_soc_pcm_stream *config = NULL;
3937 	struct snd_pcm_runtime *runtime = NULL;
3938 	unsigned int fmt;
3939 	int ret;
3940 
3941 	/*
3942 	 * NOTE
3943 	 *
3944 	 * snd_pcm_hw_params is quite large (608 bytes on arm64) and is
3945 	 * starting to get a bit excessive for allocation on the stack,
3946 	 * especially when you're building with some of the KASAN type
3947 	 * stuff that increases stack usage.
3948 	 * So, we use kzalloc()/kfree() for params in this function.
3949 	 */
3950 	struct snd_pcm_hw_params *params __free(kfree) = kzalloc(sizeof(*params),
3951 								 GFP_KERNEL);
3952 	if (!params)
3953 		return -ENOMEM;
3954 
3955 	runtime = kzalloc(sizeof(*runtime), GFP_KERNEL);
3956 	if (!runtime)
3957 		return -ENOMEM;
3958 
3959 	substream->runtime = runtime;
3960 
3961 	substream->stream = SNDRV_PCM_STREAM_CAPTURE;
3962 	snd_soc_dapm_widget_for_each_source_path(w, path) {
3963 		source = path->source->priv;
3964 
3965 		ret = snd_soc_dai_startup(source, substream);
3966 		if (ret < 0)
3967 			return ret;
3968 
3969 		snd_soc_dai_activate(source, substream->stream);
3970 	}
3971 
3972 	substream->stream = SNDRV_PCM_STREAM_PLAYBACK;
3973 	snd_soc_dapm_widget_for_each_sink_path(w, path) {
3974 		sink = path->sink->priv;
3975 
3976 		ret = snd_soc_dai_startup(sink, substream);
3977 		if (ret < 0)
3978 			return ret;
3979 
3980 		snd_soc_dai_activate(sink, substream->stream);
3981 	}
3982 
3983 	substream->hw_opened = 1;
3984 
3985 	/*
3986 	 * Note: getting the config after .startup() gives a chance to
3987 	 * either party on the link to alter the configuration if
3988 	 * necessary
3989 	 */
3990 	config = rtd->dai_link->c2c_params + rtd->c2c_params_select;
3991 	if (!config) {
3992 		dev_err(dev, "ASoC: link config missing\n");
3993 		return -EINVAL;
3994 	}
3995 
3996 	/* Be a little careful as we don't want to overflow the mask array */
3997 	if (!config->formats) {
3998 		dev_warn(dev, "ASoC: Invalid format was specified\n");
3999 
4000 		return -EINVAL;
4001 	}
4002 
4003 	fmt = ffs(config->formats) - 1;
4004 
4005 	snd_mask_set(hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT), fmt);
4006 	hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE)->min =
4007 		config->rate_min;
4008 	hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE)->max =
4009 		config->rate_max;
4010 	hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS)->min
4011 		= config->channels_min;
4012 	hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS)->max
4013 		= config->channels_max;
4014 
4015 	substream->stream = SNDRV_PCM_STREAM_CAPTURE;
4016 	snd_soc_dapm_widget_for_each_source_path(w, path) {
4017 		source = path->source->priv;
4018 
4019 		ret = snd_soc_dai_hw_params(source, substream, params);
4020 		if (ret < 0)
4021 			return ret;
4022 
4023 		dapm_update_dai_unlocked(substream, params, source);
4024 	}
4025 
4026 	substream->stream = SNDRV_PCM_STREAM_PLAYBACK;
4027 	snd_soc_dapm_widget_for_each_sink_path(w, path) {
4028 		sink = path->sink->priv;
4029 
4030 		ret = snd_soc_dai_hw_params(sink, substream, params);
4031 		if (ret < 0)
4032 			return ret;
4033 
4034 		dapm_update_dai_unlocked(substream, params, sink);
4035 	}
4036 
4037 	runtime->format = params_format(params);
4038 	runtime->subformat = params_subformat(params);
4039 	runtime->channels = params_channels(params);
4040 	runtime->rate = params_rate(params);
4041 
4042 	return 0;
4043 }
4044 
4045 static int snd_soc_dai_link_event(struct snd_soc_dapm_widget *w,
4046 				  struct snd_kcontrol *kcontrol, int event)
4047 {
4048 	struct snd_soc_dapm_path *path;
4049 	struct snd_soc_dai *source, *sink;
4050 	struct snd_pcm_substream *substream = w->priv;
4051 	int ret = 0, saved_stream = substream->stream;
4052 
4053 	if (WARN_ON(list_empty(&w->edges[SND_SOC_DAPM_DIR_OUT]) ||
4054 		    list_empty(&w->edges[SND_SOC_DAPM_DIR_IN])))
4055 		return -EINVAL;
4056 
4057 	switch (event) {
4058 	case SND_SOC_DAPM_PRE_PMU:
4059 		ret = snd_soc_dai_link_event_pre_pmu(w, substream);
4060 		if (ret < 0)
4061 			goto out;
4062 
4063 		break;
4064 
4065 	case SND_SOC_DAPM_POST_PMU:
4066 		snd_soc_dapm_widget_for_each_source_path(w, path) {
4067 			source = path->source->priv;
4068 
4069 			snd_soc_dai_prepare(source, substream);
4070 		}
4071 
4072 		snd_soc_dapm_widget_for_each_sink_path(w, path) {
4073 			sink = path->sink->priv;
4074 
4075 			snd_soc_dai_prepare(sink, substream);
4076 		}
4077 
4078 		snd_soc_dapm_widget_for_each_sink_path(w, path) {
4079 			sink = path->sink->priv;
4080 
4081 			snd_soc_dai_digital_mute(sink, 0, SNDRV_PCM_STREAM_PLAYBACK);
4082 			ret = 0;
4083 		}
4084 		break;
4085 
4086 	case SND_SOC_DAPM_PRE_PMD:
4087 		snd_soc_dapm_widget_for_each_sink_path(w, path) {
4088 			sink = path->sink->priv;
4089 
4090 			snd_soc_dai_digital_mute(sink, 1, SNDRV_PCM_STREAM_PLAYBACK);
4091 			ret = 0;
4092 		}
4093 
4094 		substream->stream = SNDRV_PCM_STREAM_CAPTURE;
4095 		snd_soc_dapm_widget_for_each_source_path(w, path) {
4096 			source = path->source->priv;
4097 			snd_soc_dai_hw_free(source, substream, 0);
4098 		}
4099 
4100 		substream->stream = SNDRV_PCM_STREAM_PLAYBACK;
4101 		snd_soc_dapm_widget_for_each_sink_path(w, path) {
4102 			sink = path->sink->priv;
4103 			snd_soc_dai_hw_free(sink, substream, 0);
4104 		}
4105 
4106 		substream->stream = SNDRV_PCM_STREAM_CAPTURE;
4107 		snd_soc_dapm_widget_for_each_source_path(w, path) {
4108 			source = path->source->priv;
4109 			snd_soc_dai_deactivate(source, substream->stream);
4110 			snd_soc_dai_shutdown(source, substream, 0);
4111 		}
4112 
4113 		substream->stream = SNDRV_PCM_STREAM_PLAYBACK;
4114 		snd_soc_dapm_widget_for_each_sink_path(w, path) {
4115 			sink = path->sink->priv;
4116 			snd_soc_dai_deactivate(sink, substream->stream);
4117 			snd_soc_dai_shutdown(sink, substream, 0);
4118 		}
4119 		break;
4120 
4121 	case SND_SOC_DAPM_POST_PMD:
4122 		kfree(substream->runtime);
4123 		substream->runtime = NULL;
4124 		break;
4125 
4126 	default:
4127 		WARN(1, "Unknown event %d\n", event);
4128 		ret = -EINVAL;
4129 	}
4130 
4131 out:
4132 	/* Restore the substream direction */
4133 	substream->stream = saved_stream;
4134 	return ret;
4135 }
4136 
4137 static int snd_soc_dapm_dai_link_get(struct snd_kcontrol *kcontrol,
4138 			  struct snd_ctl_elem_value *ucontrol)
4139 {
4140 	struct snd_soc_dapm_widget *w = snd_kcontrol_chip(kcontrol);
4141 	struct snd_soc_pcm_runtime *rtd = w->priv;
4142 
4143 	ucontrol->value.enumerated.item[0] = rtd->c2c_params_select;
4144 
4145 	return 0;
4146 }
4147 
4148 static int snd_soc_dapm_dai_link_put(struct snd_kcontrol *kcontrol,
4149 			  struct snd_ctl_elem_value *ucontrol)
4150 {
4151 	struct snd_soc_dapm_widget *w = snd_kcontrol_chip(kcontrol);
4152 	struct snd_soc_pcm_runtime *rtd = w->priv;
4153 
4154 	/* Can't change the config when widget is already powered */
4155 	if (w->power)
4156 		return -EBUSY;
4157 
4158 	if (ucontrol->value.enumerated.item[0] == rtd->c2c_params_select)
4159 		return 0;
4160 
4161 	if (ucontrol->value.enumerated.item[0] >= rtd->dai_link->num_c2c_params)
4162 		return -EINVAL;
4163 
4164 	rtd->c2c_params_select = ucontrol->value.enumerated.item[0];
4165 
4166 	return 1;
4167 }
4168 
4169 static void
4170 snd_soc_dapm_free_kcontrol(struct snd_soc_card *card,
4171 			unsigned long *private_value,
4172 			int num_c2c_params,
4173 			const char **w_param_text)
4174 {
4175 	int count;
4176 
4177 	devm_kfree(card->dev, (void *)*private_value);
4178 
4179 	if (!w_param_text)
4180 		return;
4181 
4182 	for (count = 0 ; count < num_c2c_params; count++)
4183 		devm_kfree(card->dev, (void *)w_param_text[count]);
4184 	devm_kfree(card->dev, w_param_text);
4185 }
4186 
4187 static struct snd_kcontrol_new *
4188 snd_soc_dapm_alloc_kcontrol(struct snd_soc_card *card,
4189 			char *link_name,
4190 			const struct snd_soc_pcm_stream *c2c_params,
4191 			int num_c2c_params, const char **w_param_text,
4192 			unsigned long *private_value)
4193 {
4194 	struct soc_enum w_param_enum[] = {
4195 		SOC_ENUM_SINGLE(0, 0, 0, NULL),
4196 	};
4197 	struct snd_kcontrol_new kcontrol_dai_link[] = {
4198 		SOC_ENUM_EXT(NULL, w_param_enum[0],
4199 			     snd_soc_dapm_dai_link_get,
4200 			     snd_soc_dapm_dai_link_put),
4201 	};
4202 	struct snd_kcontrol_new *kcontrol_news;
4203 	const struct snd_soc_pcm_stream *config = c2c_params;
4204 	int count;
4205 
4206 	for (count = 0 ; count < num_c2c_params; count++) {
4207 		if (!config->stream_name) {
4208 			dev_warn(card->dev,
4209 				"ASoC: anonymous config %d for dai link %s\n",
4210 				count, link_name);
4211 			w_param_text[count] =
4212 				devm_kasprintf(card->dev, GFP_KERNEL,
4213 					       "Anonymous Configuration %d",
4214 					       count);
4215 		} else {
4216 			w_param_text[count] = devm_kmemdup(card->dev,
4217 						config->stream_name,
4218 						strlen(config->stream_name) + 1,
4219 						GFP_KERNEL);
4220 		}
4221 		if (!w_param_text[count])
4222 			goto outfree_w_param;
4223 		config++;
4224 	}
4225 
4226 	w_param_enum[0].items = num_c2c_params;
4227 	w_param_enum[0].texts = w_param_text;
4228 
4229 	*private_value =
4230 		(unsigned long) devm_kmemdup(card->dev,
4231 			(void *)(kcontrol_dai_link[0].private_value),
4232 			sizeof(struct soc_enum), GFP_KERNEL);
4233 	if (!*private_value) {
4234 		dev_err(card->dev, "ASoC: Failed to create control for %s widget\n",
4235 			link_name);
4236 		goto outfree_w_param;
4237 	}
4238 	kcontrol_dai_link[0].private_value = *private_value;
4239 	/* duplicate kcontrol_dai_link on heap so that memory persists */
4240 	kcontrol_news = devm_kmemdup(card->dev, &kcontrol_dai_link[0],
4241 					sizeof(struct snd_kcontrol_new),
4242 					GFP_KERNEL);
4243 	if (!kcontrol_news) {
4244 		dev_err(card->dev, "ASoC: Failed to create control for %s widget\n",
4245 			link_name);
4246 		goto outfree_w_param;
4247 	}
4248 	return kcontrol_news;
4249 
4250 outfree_w_param:
4251 	snd_soc_dapm_free_kcontrol(card, private_value, num_c2c_params, w_param_text);
4252 	return NULL;
4253 }
4254 
4255 static struct snd_soc_dapm_widget *
4256 snd_soc_dapm_new_dai(struct snd_soc_card *card,
4257 		     struct snd_pcm_substream *substream,
4258 		     char *id)
4259 {
4260 	struct snd_soc_dapm_context *dapm = snd_soc_card_to_dapm(card);
4261 	struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
4262 	struct snd_soc_dapm_widget template;
4263 	struct snd_soc_dapm_widget *w;
4264 	const struct snd_kcontrol_new *kcontrol_news;
4265 	int num_kcontrols;
4266 	const char **w_param_text;
4267 	unsigned long private_value = 0;
4268 	char *link_name;
4269 	int ret = -ENOMEM;
4270 
4271 	link_name = devm_kasprintf(card->dev, GFP_KERNEL, "%s-%s",
4272 				   rtd->dai_link->name, id);
4273 	if (!link_name)
4274 		goto name_fail;
4275 
4276 	/* allocate memory for control, only in case of multiple configs */
4277 	w_param_text	= NULL;
4278 	kcontrol_news	= NULL;
4279 	num_kcontrols	= 0;
4280 	if (rtd->dai_link->num_c2c_params > 1) {
4281 		w_param_text = devm_kcalloc(card->dev,
4282 					    rtd->dai_link->num_c2c_params,
4283 					    sizeof(char *), GFP_KERNEL);
4284 		if (!w_param_text)
4285 			goto param_fail;
4286 
4287 		num_kcontrols = 1;
4288 		kcontrol_news = snd_soc_dapm_alloc_kcontrol(card, link_name,
4289 							    rtd->dai_link->c2c_params,
4290 							    rtd->dai_link->num_c2c_params,
4291 							    w_param_text, &private_value);
4292 		if (!kcontrol_news)
4293 			goto param_fail;
4294 	}
4295 
4296 	memset(&template, 0, sizeof(template));
4297 	template.reg		= SND_SOC_NOPM;
4298 	template.id		= snd_soc_dapm_dai_link;
4299 	template.name		= link_name;
4300 	template.event		= snd_soc_dai_link_event;
4301 	template.event_flags	= SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
4302 				  SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD;
4303 	template.kcontrol_news	= kcontrol_news;
4304 	template.num_kcontrols	= num_kcontrols;
4305 
4306 	dev_dbg(card->dev, "ASoC: adding %s widget\n", link_name);
4307 
4308 	w = snd_soc_dapm_new_control_unlocked(dapm, &template);
4309 	if (IS_ERR(w)) {
4310 		ret = PTR_ERR(w);
4311 		goto outfree_kcontrol_news;
4312 	}
4313 
4314 	w->priv = substream;
4315 
4316 	return w;
4317 
4318 outfree_kcontrol_news:
4319 	devm_kfree(card->dev, (void *)template.kcontrol_news);
4320 	snd_soc_dapm_free_kcontrol(card, &private_value,
4321 				   rtd->dai_link->num_c2c_params, w_param_text);
4322 param_fail:
4323 	devm_kfree(card->dev, link_name);
4324 name_fail:
4325 	dev_err(rtd->dev, "ASoC: Failed to create %s-%s widget: %d\n",
4326 		rtd->dai_link->name, id, ret);
4327 	return ERR_PTR(ret);
4328 }
4329 
4330 /**
4331  * snd_soc_dapm_new_dai_widgets - Create new DAPM widgets
4332  * @dapm: DAPM context
4333  * @dai: parent DAI
4334  *
4335  * Returns 0 on success, error code otherwise.
4336  */
4337 int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm,
4338 				 struct snd_soc_dai *dai)
4339 {
4340 	struct device *dev = snd_soc_dapm_to_dev(dapm);
4341 	struct snd_soc_dapm_widget template;
4342 	struct snd_soc_dapm_widget *w;
4343 
4344 	WARN_ON(dev != dai->dev);
4345 
4346 	memset(&template, 0, sizeof(template));
4347 	template.reg = SND_SOC_NOPM;
4348 
4349 	if (dai->driver->playback.stream_name) {
4350 		template.id = snd_soc_dapm_dai_in;
4351 		template.name = dai->driver->playback.stream_name;
4352 		template.sname = dai->driver->playback.stream_name;
4353 
4354 		dev_dbg(dai->dev, "ASoC: adding %s widget\n",
4355 			template.name);
4356 
4357 		w = snd_soc_dapm_new_control_unlocked(dapm, &template);
4358 		if (IS_ERR(w))
4359 			return PTR_ERR(w);
4360 
4361 		w->priv = dai;
4362 		snd_soc_dai_set_widget_playback(dai, w);
4363 	}
4364 
4365 	if (dai->driver->capture.stream_name) {
4366 		template.id = snd_soc_dapm_dai_out;
4367 		template.name = dai->driver->capture.stream_name;
4368 		template.sname = dai->driver->capture.stream_name;
4369 
4370 		dev_dbg(dai->dev, "ASoC: adding %s widget\n",
4371 			template.name);
4372 
4373 		w = snd_soc_dapm_new_control_unlocked(dapm, &template);
4374 		if (IS_ERR(w))
4375 			return PTR_ERR(w);
4376 
4377 		w->priv = dai;
4378 		snd_soc_dai_set_widget_capture(dai, w);
4379 	}
4380 
4381 	return 0;
4382 }
4383 EXPORT_SYMBOL_GPL(snd_soc_dapm_new_dai_widgets);
4384 
4385 int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card)
4386 {
4387 	struct snd_soc_dapm_widget *dai_w, *w;
4388 	struct snd_soc_dapm_widget *src, *sink;
4389 	struct snd_soc_dai *dai;
4390 
4391 	/* For each DAI widget... */
4392 	for_each_card_widgets(card, dai_w) {
4393 		switch (dai_w->id) {
4394 		case snd_soc_dapm_dai_in:
4395 		case snd_soc_dapm_dai_out:
4396 			break;
4397 		default:
4398 			continue;
4399 		}
4400 
4401 		/* let users know there is no DAI to link */
4402 		if (!dai_w->priv) {
4403 			dev_dbg(card->dev, "dai widget %s has no DAI\n",
4404 				dai_w->name);
4405 			continue;
4406 		}
4407 
4408 		dai = dai_w->priv;
4409 
4410 		/* ...find all widgets with the same stream and link them */
4411 		for_each_card_widgets(card, w) {
4412 			if (w->dapm != dai_w->dapm)
4413 				continue;
4414 
4415 			switch (w->id) {
4416 			case snd_soc_dapm_dai_in:
4417 			case snd_soc_dapm_dai_out:
4418 				continue;
4419 			default:
4420 				break;
4421 			}
4422 
4423 			if (!w->sname || !strstr(w->sname, dai_w->sname))
4424 				continue;
4425 
4426 			if (dai_w->id == snd_soc_dapm_dai_in) {
4427 				src = dai_w;
4428 				sink = w;
4429 			} else {
4430 				src = w;
4431 				sink = dai_w;
4432 			}
4433 			dev_dbg(dai->dev, "%s -> %s\n", src->name, sink->name);
4434 			snd_soc_dapm_add_path(w->dapm, src, sink, NULL, NULL);
4435 		}
4436 	}
4437 
4438 	return 0;
4439 }
4440 
4441 static void dapm_connect_dai_routes(struct snd_soc_dapm_context *dapm,
4442 				    struct snd_soc_dai *src_dai,
4443 				    struct snd_soc_dapm_widget *src,
4444 				    struct snd_soc_dapm_widget *dai,
4445 				    struct snd_soc_dai *sink_dai,
4446 				    struct snd_soc_dapm_widget *sink)
4447 {
4448 	struct device *dev = snd_soc_dapm_to_dev(dapm);
4449 
4450 	dev_dbg(dev, "connected DAI link %s:%s -> %s:%s\n",
4451 		src_dai->component->name, src->name,
4452 		sink_dai->component->name, sink->name);
4453 
4454 	if (dai) {
4455 		snd_soc_dapm_add_path(dapm, src, dai, NULL, NULL);
4456 		src = dai;
4457 	}
4458 
4459 	snd_soc_dapm_add_path(dapm, src, sink, NULL, NULL);
4460 }
4461 
4462 static void dapm_connect_dai_pair(struct snd_soc_card *card,
4463 				  struct snd_soc_pcm_runtime *rtd,
4464 				  struct snd_soc_dai *codec_dai,
4465 				  struct snd_soc_dai *cpu_dai)
4466 {
4467 	struct snd_soc_dapm_context *dapm = snd_soc_card_to_dapm(card);
4468 	struct snd_soc_dai_link *dai_link = rtd->dai_link;
4469 	struct snd_soc_dapm_widget *codec, *cpu;
4470 	struct snd_soc_dai *src_dai[]		= { cpu_dai,	codec_dai };
4471 	struct snd_soc_dai *sink_dai[]		= { codec_dai,	cpu_dai };
4472 	struct snd_soc_dapm_widget **src[]	= { &cpu,	&codec };
4473 	struct snd_soc_dapm_widget **sink[]	= { &codec,	&cpu };
4474 	char *widget_name[]			= { "playback",	"capture" };
4475 	int stream;
4476 
4477 	for_each_pcm_streams(stream) {
4478 		int stream_cpu, stream_codec;
4479 
4480 		stream_cpu	= snd_soc_get_stream_cpu(dai_link, stream);
4481 		stream_codec	= stream;
4482 
4483 		/* connect BE DAI playback if widgets are valid */
4484 		cpu	= snd_soc_dai_get_widget(cpu_dai,	stream_cpu);
4485 		codec	= snd_soc_dai_get_widget(codec_dai,	stream_codec);
4486 
4487 		if (!cpu || !codec)
4488 			continue;
4489 
4490 		/* special handling for [Codec2Codec] */
4491 		if (dai_link->c2c_params && !rtd->c2c_widget[stream]) {
4492 			struct snd_pcm_substream *substream = rtd->pcm->streams[stream].substream;
4493 			struct snd_soc_dapm_widget *dai = snd_soc_dapm_new_dai(card, substream,
4494 									       widget_name[stream]);
4495 
4496 			if (IS_ERR(dai))
4497 				continue;
4498 
4499 			rtd->c2c_widget[stream] = dai;
4500 		}
4501 
4502 		dapm_connect_dai_routes(dapm, src_dai[stream], *src[stream],
4503 					rtd->c2c_widget[stream],
4504 					sink_dai[stream], *sink[stream]);
4505 	}
4506 }
4507 
4508 static void soc_dapm_dai_stream_event(struct snd_soc_dai *dai, int stream,
4509 	int event)
4510 {
4511 	struct snd_soc_dapm_widget *w;
4512 
4513 	w = snd_soc_dai_get_widget(dai, stream);
4514 
4515 	if (w) {
4516 		unsigned int ep;
4517 
4518 		dapm_mark_dirty(w, "stream event");
4519 
4520 		if (w->id == snd_soc_dapm_dai_in) {
4521 			ep = SND_SOC_DAPM_EP_SOURCE;
4522 			dapm_widget_invalidate_input_paths(w);
4523 		} else {
4524 			ep = SND_SOC_DAPM_EP_SINK;
4525 			dapm_widget_invalidate_output_paths(w);
4526 		}
4527 
4528 		switch (event) {
4529 		case SND_SOC_DAPM_STREAM_START:
4530 			w->active = 1;
4531 			w->is_ep = ep;
4532 			break;
4533 		case SND_SOC_DAPM_STREAM_STOP:
4534 			w->active = 0;
4535 			w->is_ep = 0;
4536 			break;
4537 		case SND_SOC_DAPM_STREAM_SUSPEND:
4538 		case SND_SOC_DAPM_STREAM_RESUME:
4539 		case SND_SOC_DAPM_STREAM_PAUSE_PUSH:
4540 		case SND_SOC_DAPM_STREAM_PAUSE_RELEASE:
4541 			break;
4542 		}
4543 	}
4544 }
4545 
4546 void snd_soc_dapm_connect_dai_link_widgets(struct snd_soc_card *card)
4547 {
4548 	struct snd_soc_pcm_runtime *rtd;
4549 	struct snd_soc_dai *cpu_dai;
4550 	struct snd_soc_dai *codec_dai;
4551 
4552 	/* for each BE DAI link... */
4553 	for_each_card_rtds(card, rtd)  {
4554 		struct snd_soc_dai_link_ch_map *ch_maps;
4555 		int i;
4556 
4557 		/*
4558 		 * dynamic FE links have no fixed DAI mapping.
4559 		 * CODEC<->CODEC links have no direct connection.
4560 		 */
4561 		if (rtd->dai_link->dynamic)
4562 			continue;
4563 
4564 		/*
4565 		 * see
4566 		 *	soc.h :: [dai_link->ch_maps Image sample]
4567 		 */
4568 		for_each_rtd_ch_maps(rtd, i, ch_maps) {
4569 			cpu_dai   = snd_soc_rtd_to_cpu(rtd,   ch_maps->cpu);
4570 			codec_dai = snd_soc_rtd_to_codec(rtd, ch_maps->codec);
4571 
4572 			dapm_connect_dai_pair(card, rtd, codec_dai, cpu_dai);
4573 		}
4574 	}
4575 }
4576 
4577 static void soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd, int stream,
4578 	int event)
4579 {
4580 	struct snd_soc_dai *dai;
4581 	int i;
4582 
4583 	for_each_rtd_dais(rtd, i, dai)
4584 		soc_dapm_dai_stream_event(dai, stream, event);
4585 
4586 	dapm_power_widgets(rtd->card, event, NULL);
4587 }
4588 
4589 /**
4590  * snd_soc_dapm_stream_event - send a stream event to the dapm core
4591  * @rtd: PCM runtime data
4592  * @stream: stream name
4593  * @event: stream event
4594  *
4595  * Sends a stream event to the dapm core. The core then makes any
4596  * necessary widget power changes.
4597  *
4598  * Returns 0 for success else error.
4599  */
4600 void snd_soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd, int stream,
4601 			      int event)
4602 {
4603 	struct snd_soc_card *card = rtd->card;
4604 
4605 	snd_soc_dapm_mutex_lock(card);
4606 	soc_dapm_stream_event(rtd, stream, event);
4607 	snd_soc_dapm_mutex_unlock(card);
4608 }
4609 
4610 void snd_soc_dapm_stream_stop(struct snd_soc_pcm_runtime *rtd, int stream)
4611 {
4612 	if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
4613 		if (snd_soc_runtime_ignore_pmdown_time(rtd)) {
4614 			/* powered down playback stream now */
4615 			snd_soc_dapm_stream_event(rtd,
4616 						  SNDRV_PCM_STREAM_PLAYBACK,
4617 						  SND_SOC_DAPM_STREAM_STOP);
4618 		} else {
4619 			/* start delayed pop wq here for playback streams */
4620 			rtd->pop_wait = 1;
4621 			queue_delayed_work(system_power_efficient_wq,
4622 					   &rtd->delayed_work,
4623 					   msecs_to_jiffies(rtd->pmdown_time));
4624 		}
4625 	} else {
4626 		/* capture streams can be powered down now */
4627 		snd_soc_dapm_stream_event(rtd, SNDRV_PCM_STREAM_CAPTURE,
4628 					  SND_SOC_DAPM_STREAM_STOP);
4629 	}
4630 }
4631 EXPORT_SYMBOL_GPL(snd_soc_dapm_stream_stop);
4632 
4633 /**
4634  * snd_soc_dapm_enable_pin_unlocked - enable pin.
4635  * @dapm: DAPM context
4636  * @pin: pin name
4637  *
4638  * Enables input/output pin and its parents or children widgets iff there is
4639  * a valid audio route and active audio stream.
4640  *
4641  * Requires external locking.
4642  *
4643  * NOTE: snd_soc_dapm_sync() needs to be called after this for DAPM to
4644  * do any widget power switching.
4645  */
4646 int snd_soc_dapm_enable_pin_unlocked(struct snd_soc_dapm_context *dapm,
4647 				   const char *pin)
4648 {
4649 	return snd_soc_dapm_set_pin(dapm, pin, 1);
4650 }
4651 EXPORT_SYMBOL_GPL(snd_soc_dapm_enable_pin_unlocked);
4652 
4653 /**
4654  * snd_soc_dapm_enable_pin - enable pin.
4655  * @dapm: DAPM context
4656  * @pin: pin name
4657  *
4658  * Enables input/output pin and its parents or children widgets iff there is
4659  * a valid audio route and active audio stream.
4660  *
4661  * NOTE: snd_soc_dapm_sync() needs to be called after this for DAPM to
4662  * do any widget power switching.
4663  */
4664 int snd_soc_dapm_enable_pin(struct snd_soc_dapm_context *dapm, const char *pin)
4665 {
4666 	int ret;
4667 
4668 	snd_soc_dapm_mutex_lock(dapm);
4669 
4670 	ret = snd_soc_dapm_set_pin(dapm, pin, 1);
4671 
4672 	snd_soc_dapm_mutex_unlock(dapm);
4673 
4674 	return ret;
4675 }
4676 EXPORT_SYMBOL_GPL(snd_soc_dapm_enable_pin);
4677 
4678 /**
4679  * snd_soc_dapm_force_enable_pin_unlocked - force a pin to be enabled
4680  * @dapm: DAPM context
4681  * @pin: pin name
4682  *
4683  * Enables input/output pin regardless of any other state.  This is
4684  * intended for use with microphone bias supplies used in microphone
4685  * jack detection.
4686  *
4687  * Requires external locking.
4688  *
4689  * NOTE: snd_soc_dapm_sync() needs to be called after this for DAPM to
4690  * do any widget power switching.
4691  */
4692 int snd_soc_dapm_force_enable_pin_unlocked(struct snd_soc_dapm_context *dapm,
4693 					 const char *pin)
4694 {
4695 	struct device *dev;
4696 	struct snd_soc_dapm_widget *w = dapm_find_widget(dapm, pin, true);
4697 
4698 	if (!w) {
4699 		dev = snd_soc_dapm_to_dev(dapm);
4700 
4701 		dev_err(dev, "ASoC: unknown pin %s\n", pin);
4702 		return -EINVAL;
4703 	}
4704 
4705 	dev = snd_soc_dapm_to_dev(w->dapm);
4706 
4707 	dev_dbg(dev, "ASoC: force enable pin %s\n", pin);
4708 	if (!w->connected) {
4709 		/*
4710 		 * w->force does not affect the number of input or output paths,
4711 		 * so we only have to recheck if w->connected is changed
4712 		 */
4713 		dapm_widget_invalidate_input_paths(w);
4714 		dapm_widget_invalidate_output_paths(w);
4715 		w->connected = 1;
4716 	}
4717 	w->force = 1;
4718 	dapm_mark_dirty(w, "force enable");
4719 
4720 	return 0;
4721 }
4722 EXPORT_SYMBOL_GPL(snd_soc_dapm_force_enable_pin_unlocked);
4723 
4724 /**
4725  * snd_soc_dapm_force_enable_pin - force a pin to be enabled
4726  * @dapm: DAPM context
4727  * @pin: pin name
4728  *
4729  * Enables input/output pin regardless of any other state.  This is
4730  * intended for use with microphone bias supplies used in microphone
4731  * jack detection.
4732  *
4733  * NOTE: snd_soc_dapm_sync() needs to be called after this for DAPM to
4734  * do any widget power switching.
4735  */
4736 int snd_soc_dapm_force_enable_pin(struct snd_soc_dapm_context *dapm,
4737 				  const char *pin)
4738 {
4739 	int ret;
4740 
4741 	snd_soc_dapm_mutex_lock(dapm);
4742 
4743 	ret = snd_soc_dapm_force_enable_pin_unlocked(dapm, pin);
4744 
4745 	snd_soc_dapm_mutex_unlock(dapm);
4746 
4747 	return ret;
4748 }
4749 EXPORT_SYMBOL_GPL(snd_soc_dapm_force_enable_pin);
4750 
4751 /**
4752  * snd_soc_dapm_disable_pin_unlocked - disable pin.
4753  * @dapm: DAPM context
4754  * @pin: pin name
4755  *
4756  * Disables input/output pin and its parents or children widgets.
4757  *
4758  * Requires external locking.
4759  *
4760  * NOTE: snd_soc_dapm_sync() needs to be called after this for DAPM to
4761  * do any widget power switching.
4762  */
4763 int snd_soc_dapm_disable_pin_unlocked(struct snd_soc_dapm_context *dapm,
4764 				    const char *pin)
4765 {
4766 	return snd_soc_dapm_set_pin(dapm, pin, 0);
4767 }
4768 EXPORT_SYMBOL_GPL(snd_soc_dapm_disable_pin_unlocked);
4769 
4770 /**
4771  * snd_soc_dapm_disable_pin - disable pin.
4772  * @dapm: DAPM context
4773  * @pin: pin name
4774  *
4775  * Disables input/output pin and its parents or children widgets.
4776  *
4777  * NOTE: snd_soc_dapm_sync() needs to be called after this for DAPM to
4778  * do any widget power switching.
4779  */
4780 int snd_soc_dapm_disable_pin(struct snd_soc_dapm_context *dapm,
4781 			     const char *pin)
4782 {
4783 	int ret;
4784 
4785 	snd_soc_dapm_mutex_lock(dapm);
4786 
4787 	ret = snd_soc_dapm_set_pin(dapm, pin, 0);
4788 
4789 	snd_soc_dapm_mutex_unlock(dapm);
4790 
4791 	return ret;
4792 }
4793 EXPORT_SYMBOL_GPL(snd_soc_dapm_disable_pin);
4794 
4795 /**
4796  * snd_soc_dapm_get_pin_status - get audio pin status
4797  * @dapm: DAPM context
4798  * @pin: audio signal pin endpoint (or start point)
4799  *
4800  * Get audio pin status - connected or disconnected.
4801  *
4802  * Returns 1 for connected otherwise 0.
4803  */
4804 int snd_soc_dapm_get_pin_status(struct snd_soc_dapm_context *dapm,
4805 				const char *pin)
4806 {
4807 	struct snd_soc_dapm_widget *w = dapm_find_widget(dapm, pin, true);
4808 
4809 	if (w)
4810 		return w->connected;
4811 
4812 	return 0;
4813 }
4814 EXPORT_SYMBOL_GPL(snd_soc_dapm_get_pin_status);
4815 
4816 /**
4817  * snd_soc_dapm_ignore_suspend - ignore suspend status for DAPM endpoint
4818  * @dapm: DAPM context
4819  * @pin: audio signal pin endpoint (or start point)
4820  *
4821  * Mark the given endpoint or pin as ignoring suspend.  When the
4822  * system is disabled a path between two endpoints flagged as ignoring
4823  * suspend will not be disabled.  The path must already be enabled via
4824  * normal means at suspend time, it will not be turned on if it was not
4825  * already enabled.
4826  */
4827 int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm,
4828 				const char *pin)
4829 {
4830 	struct device *dev = snd_soc_dapm_to_dev(dapm);
4831 	struct snd_soc_dapm_widget *w = dapm_find_widget(dapm, pin, false);
4832 
4833 	if (!w) {
4834 		dev_err(dev, "ASoC: unknown pin %s\n", pin);
4835 		return -EINVAL;
4836 	}
4837 
4838 	w->ignore_suspend = 1;
4839 
4840 	return 0;
4841 }
4842 EXPORT_SYMBOL_GPL(snd_soc_dapm_ignore_suspend);
4843 
4844 /**
4845  * snd_soc_dapm_free - free dapm resources
4846  * @dapm: DAPM context
4847  *
4848  * Free all dapm widgets and resources.
4849  */
4850 void snd_soc_dapm_free(struct snd_soc_dapm_context *dapm)
4851 {
4852 	dapm_debugfs_cleanup(dapm);
4853 	dapm_free_widgets(dapm);
4854 	list_del(&dapm->list);
4855 }
4856 
4857 void snd_soc_dapm_init(struct snd_soc_dapm_context *dapm,
4858 		       struct snd_soc_card *card,
4859 		       struct snd_soc_component *component)
4860 {
4861 	dapm->card		= card;
4862 	dapm->component		= component;
4863 	dapm->bias_level	= SND_SOC_BIAS_OFF;
4864 
4865 	if (component) {
4866 		dapm->dev		= component->dev;
4867 		dapm->idle_bias		= component->driver->idle_bias_on;
4868 	} else {
4869 		dapm->dev		= card->dev;
4870 	}
4871 
4872 	INIT_LIST_HEAD(&dapm->list);
4873 	/* see for_each_card_dapms */
4874 	list_add(&dapm->list, &card->dapm_list);
4875 }
4876 
4877 static void soc_dapm_shutdown_dapm(struct snd_soc_dapm_context *dapm)
4878 {
4879 	struct snd_soc_card *card = dapm->card;
4880 	struct snd_soc_dapm_widget *w;
4881 	LIST_HEAD(down_list);
4882 	int powerdown = 0;
4883 
4884 	snd_soc_dapm_mutex_lock_root(card);
4885 
4886 	for_each_card_widgets(dapm->card, w) {
4887 		if (w->dapm != dapm)
4888 			continue;
4889 		if (w->power) {
4890 			dapm_seq_insert(w, &down_list, false);
4891 			w->new_power = 0;
4892 			powerdown = 1;
4893 		}
4894 	}
4895 
4896 	/* If there were no widgets to power down we're already in
4897 	 * standby.
4898 	 */
4899 	if (powerdown) {
4900 		if (dapm->bias_level == SND_SOC_BIAS_ON)
4901 			snd_soc_dapm_set_bias_level(dapm,
4902 						    SND_SOC_BIAS_PREPARE);
4903 		dapm_seq_run(card, &down_list, 0, false);
4904 		if (dapm->bias_level == SND_SOC_BIAS_PREPARE)
4905 			snd_soc_dapm_set_bias_level(dapm,
4906 						    SND_SOC_BIAS_STANDBY);
4907 	}
4908 
4909 	snd_soc_dapm_mutex_unlock(card);
4910 }
4911 
4912 /*
4913  * snd_soc_dapm_shutdown - callback for system shutdown
4914  */
4915 void snd_soc_dapm_shutdown(struct snd_soc_card *card)
4916 {
4917 	struct snd_soc_dapm_context *card_dapm = snd_soc_card_to_dapm(card);
4918 	struct snd_soc_dapm_context *dapm;
4919 
4920 	for_each_card_dapms(card, dapm) {
4921 		if (dapm != card_dapm) {
4922 			soc_dapm_shutdown_dapm(dapm);
4923 			if (dapm->bias_level == SND_SOC_BIAS_STANDBY)
4924 				snd_soc_dapm_set_bias_level(dapm, SND_SOC_BIAS_OFF);
4925 		}
4926 	}
4927 
4928 	soc_dapm_shutdown_dapm(card_dapm);
4929 	if (card_dapm->bias_level == SND_SOC_BIAS_STANDBY)
4930 		snd_soc_dapm_set_bias_level(card_dapm, SND_SOC_BIAS_OFF);
4931 }
4932 
4933 /* Module information */
4934 MODULE_AUTHOR("Liam Girdwood, lrg@slimlogic.co.uk");
4935 MODULE_DESCRIPTION("Dynamic Audio Power Management core for ALSA SoC");
4936 MODULE_LICENSE("GPL");
4937