xref: /openbmc/linux/sound/soc/soc-pcm.c (revision ca07ee4e)
1 // SPDX-License-Identifier: GPL-2.0+
2 //
3 // soc-pcm.c  --  ALSA SoC PCM
4 //
5 // Copyright 2005 Wolfson Microelectronics PLC.
6 // Copyright 2005 Openedhand Ltd.
7 // Copyright (C) 2010 Slimlogic Ltd.
8 // Copyright (C) 2010 Texas Instruments Inc.
9 //
10 // Authors: Liam Girdwood <lrg@ti.com>
11 //          Mark Brown <broonie@opensource.wolfsonmicro.com>
12 
13 #include <linux/kernel.h>
14 #include <linux/init.h>
15 #include <linux/delay.h>
16 #include <linux/pinctrl/consumer.h>
17 #include <linux/pm_runtime.h>
18 #include <linux/slab.h>
19 #include <linux/workqueue.h>
20 #include <linux/export.h>
21 #include <linux/debugfs.h>
22 #include <sound/core.h>
23 #include <sound/pcm.h>
24 #include <sound/pcm_params.h>
25 #include <sound/soc.h>
26 #include <sound/soc-dpcm.h>
27 #include <sound/initval.h>
28 
29 #define DPCM_MAX_BE_USERS	8
30 
31 /**
32  * snd_soc_runtime_activate() - Increment active count for PCM runtime components
33  * @rtd: ASoC PCM runtime that is activated
34  * @stream: Direction of the PCM stream
35  *
36  * Increments the active count for all the DAIs and components attached to a PCM
37  * runtime. Should typically be called when a stream is opened.
38  *
39  * Must be called with the rtd->card->pcm_mutex being held
40  */
41 void snd_soc_runtime_activate(struct snd_soc_pcm_runtime *rtd, int stream)
42 {
43 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
44 	struct snd_soc_dai *codec_dai;
45 	int i;
46 
47 	lockdep_assert_held(&rtd->card->pcm_mutex);
48 
49 	if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
50 		cpu_dai->playback_active++;
51 		for_each_rtd_codec_dai(rtd, i, codec_dai)
52 			codec_dai->playback_active++;
53 	} else {
54 		cpu_dai->capture_active++;
55 		for_each_rtd_codec_dai(rtd, i, codec_dai)
56 			codec_dai->capture_active++;
57 	}
58 
59 	cpu_dai->active++;
60 	cpu_dai->component->active++;
61 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
62 		codec_dai->active++;
63 		codec_dai->component->active++;
64 	}
65 }
66 
67 /**
68  * snd_soc_runtime_deactivate() - Decrement active count for PCM runtime components
69  * @rtd: ASoC PCM runtime that is deactivated
70  * @stream: Direction of the PCM stream
71  *
72  * Decrements the active count for all the DAIs and components attached to a PCM
73  * runtime. Should typically be called when a stream is closed.
74  *
75  * Must be called with the rtd->card->pcm_mutex being held
76  */
77 void snd_soc_runtime_deactivate(struct snd_soc_pcm_runtime *rtd, int stream)
78 {
79 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
80 	struct snd_soc_dai *codec_dai;
81 	int i;
82 
83 	lockdep_assert_held(&rtd->card->pcm_mutex);
84 
85 	if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
86 		cpu_dai->playback_active--;
87 		for_each_rtd_codec_dai(rtd, i, codec_dai)
88 			codec_dai->playback_active--;
89 	} else {
90 		cpu_dai->capture_active--;
91 		for_each_rtd_codec_dai(rtd, i, codec_dai)
92 			codec_dai->capture_active--;
93 	}
94 
95 	cpu_dai->active--;
96 	cpu_dai->component->active--;
97 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
98 		codec_dai->component->active--;
99 		codec_dai->active--;
100 	}
101 }
102 
103 /**
104  * snd_soc_runtime_ignore_pmdown_time() - Check whether to ignore the power down delay
105  * @rtd: The ASoC PCM runtime that should be checked.
106  *
107  * This function checks whether the power down delay should be ignored for a
108  * specific PCM runtime. Returns true if the delay is 0, if it the DAI link has
109  * been configured to ignore the delay, or if none of the components benefits
110  * from having the delay.
111  */
112 bool snd_soc_runtime_ignore_pmdown_time(struct snd_soc_pcm_runtime *rtd)
113 {
114 	struct snd_soc_rtdcom_list *rtdcom;
115 	struct snd_soc_component *component;
116 	bool ignore = true;
117 
118 	if (!rtd->pmdown_time || rtd->dai_link->ignore_pmdown_time)
119 		return true;
120 
121 	for_each_rtd_components(rtd, rtdcom, component)
122 		ignore &= !component->driver->use_pmdown_time;
123 
124 	return ignore;
125 }
126 
127 /**
128  * snd_soc_set_runtime_hwparams - set the runtime hardware parameters
129  * @substream: the pcm substream
130  * @hw: the hardware parameters
131  *
132  * Sets the substream runtime hardware parameters.
133  */
134 int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream,
135 	const struct snd_pcm_hardware *hw)
136 {
137 	struct snd_pcm_runtime *runtime = substream->runtime;
138 	runtime->hw.info = hw->info;
139 	runtime->hw.formats = hw->formats;
140 	runtime->hw.period_bytes_min = hw->period_bytes_min;
141 	runtime->hw.period_bytes_max = hw->period_bytes_max;
142 	runtime->hw.periods_min = hw->periods_min;
143 	runtime->hw.periods_max = hw->periods_max;
144 	runtime->hw.buffer_bytes_max = hw->buffer_bytes_max;
145 	runtime->hw.fifo_size = hw->fifo_size;
146 	return 0;
147 }
148 EXPORT_SYMBOL_GPL(snd_soc_set_runtime_hwparams);
149 
150 /* DPCM stream event, send event to FE and all active BEs. */
151 int dpcm_dapm_stream_event(struct snd_soc_pcm_runtime *fe, int dir,
152 	int event)
153 {
154 	struct snd_soc_dpcm *dpcm;
155 
156 	for_each_dpcm_be(fe, dir, dpcm) {
157 
158 		struct snd_soc_pcm_runtime *be = dpcm->be;
159 
160 		dev_dbg(be->dev, "ASoC: BE %s event %d dir %d\n",
161 				be->dai_link->name, event, dir);
162 
163 		if ((event == SND_SOC_DAPM_STREAM_STOP) &&
164 		    (be->dpcm[dir].users >= 1))
165 			continue;
166 
167 		snd_soc_dapm_stream_event(be, dir, event);
168 	}
169 
170 	snd_soc_dapm_stream_event(fe, dir, event);
171 
172 	return 0;
173 }
174 
175 static int soc_pcm_apply_symmetry(struct snd_pcm_substream *substream,
176 					struct snd_soc_dai *soc_dai)
177 {
178 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
179 	int ret;
180 
181 	if (soc_dai->rate && (soc_dai->driver->symmetric_rates ||
182 				rtd->dai_link->symmetric_rates)) {
183 		dev_dbg(soc_dai->dev, "ASoC: Symmetry forces %dHz rate\n",
184 				soc_dai->rate);
185 
186 		ret = snd_pcm_hw_constraint_single(substream->runtime,
187 						SNDRV_PCM_HW_PARAM_RATE,
188 						soc_dai->rate);
189 		if (ret < 0) {
190 			dev_err(soc_dai->dev,
191 				"ASoC: Unable to apply rate constraint: %d\n",
192 				ret);
193 			return ret;
194 		}
195 	}
196 
197 	if (soc_dai->channels && (soc_dai->driver->symmetric_channels ||
198 				rtd->dai_link->symmetric_channels)) {
199 		dev_dbg(soc_dai->dev, "ASoC: Symmetry forces %d channel(s)\n",
200 				soc_dai->channels);
201 
202 		ret = snd_pcm_hw_constraint_single(substream->runtime,
203 						SNDRV_PCM_HW_PARAM_CHANNELS,
204 						soc_dai->channels);
205 		if (ret < 0) {
206 			dev_err(soc_dai->dev,
207 				"ASoC: Unable to apply channel symmetry constraint: %d\n",
208 				ret);
209 			return ret;
210 		}
211 	}
212 
213 	if (soc_dai->sample_bits && (soc_dai->driver->symmetric_samplebits ||
214 				rtd->dai_link->symmetric_samplebits)) {
215 		dev_dbg(soc_dai->dev, "ASoC: Symmetry forces %d sample bits\n",
216 				soc_dai->sample_bits);
217 
218 		ret = snd_pcm_hw_constraint_single(substream->runtime,
219 						SNDRV_PCM_HW_PARAM_SAMPLE_BITS,
220 						soc_dai->sample_bits);
221 		if (ret < 0) {
222 			dev_err(soc_dai->dev,
223 				"ASoC: Unable to apply sample bits symmetry constraint: %d\n",
224 				ret);
225 			return ret;
226 		}
227 	}
228 
229 	return 0;
230 }
231 
232 static int soc_pcm_params_symmetry(struct snd_pcm_substream *substream,
233 				struct snd_pcm_hw_params *params)
234 {
235 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
236 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
237 	struct snd_soc_dai *codec_dai;
238 	unsigned int rate, channels, sample_bits, symmetry, i;
239 
240 	rate = params_rate(params);
241 	channels = params_channels(params);
242 	sample_bits = snd_pcm_format_physical_width(params_format(params));
243 
244 	/* reject unmatched parameters when applying symmetry */
245 	symmetry = cpu_dai->driver->symmetric_rates ||
246 		rtd->dai_link->symmetric_rates;
247 
248 	for_each_rtd_codec_dai(rtd, i, codec_dai)
249 		symmetry |= codec_dai->driver->symmetric_rates;
250 
251 	if (symmetry && cpu_dai->rate && cpu_dai->rate != rate) {
252 		dev_err(rtd->dev, "ASoC: unmatched rate symmetry: %d - %d\n",
253 				cpu_dai->rate, rate);
254 		return -EINVAL;
255 	}
256 
257 	symmetry = cpu_dai->driver->symmetric_channels ||
258 		rtd->dai_link->symmetric_channels;
259 
260 	for_each_rtd_codec_dai(rtd, i, codec_dai)
261 		symmetry |= codec_dai->driver->symmetric_channels;
262 
263 	if (symmetry && cpu_dai->channels && cpu_dai->channels != channels) {
264 		dev_err(rtd->dev, "ASoC: unmatched channel symmetry: %d - %d\n",
265 				cpu_dai->channels, channels);
266 		return -EINVAL;
267 	}
268 
269 	symmetry = cpu_dai->driver->symmetric_samplebits ||
270 		rtd->dai_link->symmetric_samplebits;
271 
272 	for_each_rtd_codec_dai(rtd, i, codec_dai)
273 		symmetry |= codec_dai->driver->symmetric_samplebits;
274 
275 	if (symmetry && cpu_dai->sample_bits && cpu_dai->sample_bits != sample_bits) {
276 		dev_err(rtd->dev, "ASoC: unmatched sample bits symmetry: %d - %d\n",
277 				cpu_dai->sample_bits, sample_bits);
278 		return -EINVAL;
279 	}
280 
281 	return 0;
282 }
283 
284 static bool soc_pcm_has_symmetry(struct snd_pcm_substream *substream)
285 {
286 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
287 	struct snd_soc_dai_driver *cpu_driver = rtd->cpu_dai->driver;
288 	struct snd_soc_dai_link *link = rtd->dai_link;
289 	struct snd_soc_dai *codec_dai;
290 	unsigned int symmetry, i;
291 
292 	symmetry = cpu_driver->symmetric_rates || link->symmetric_rates ||
293 		cpu_driver->symmetric_channels || link->symmetric_channels ||
294 		cpu_driver->symmetric_samplebits || link->symmetric_samplebits;
295 
296 	for_each_rtd_codec_dai(rtd, i, codec_dai)
297 		symmetry = symmetry ||
298 			codec_dai->driver->symmetric_rates ||
299 			codec_dai->driver->symmetric_channels ||
300 			codec_dai->driver->symmetric_samplebits;
301 
302 	return symmetry;
303 }
304 
305 static void soc_pcm_set_msb(struct snd_pcm_substream *substream, int bits)
306 {
307 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
308 	int ret;
309 
310 	if (!bits)
311 		return;
312 
313 	ret = snd_pcm_hw_constraint_msbits(substream->runtime, 0, 0, bits);
314 	if (ret != 0)
315 		dev_warn(rtd->dev, "ASoC: Failed to set MSB %d: %d\n",
316 				 bits, ret);
317 }
318 
319 static void soc_pcm_apply_msb(struct snd_pcm_substream *substream)
320 {
321 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
322 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
323 	struct snd_soc_dai *codec_dai;
324 	int i;
325 	unsigned int bits = 0, cpu_bits;
326 
327 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
328 		for_each_rtd_codec_dai(rtd, i, codec_dai) {
329 			if (codec_dai->driver->playback.sig_bits == 0) {
330 				bits = 0;
331 				break;
332 			}
333 			bits = max(codec_dai->driver->playback.sig_bits, bits);
334 		}
335 		cpu_bits = cpu_dai->driver->playback.sig_bits;
336 	} else {
337 		for_each_rtd_codec_dai(rtd, i, codec_dai) {
338 			if (codec_dai->driver->capture.sig_bits == 0) {
339 				bits = 0;
340 				break;
341 			}
342 			bits = max(codec_dai->driver->capture.sig_bits, bits);
343 		}
344 		cpu_bits = cpu_dai->driver->capture.sig_bits;
345 	}
346 
347 	soc_pcm_set_msb(substream, bits);
348 	soc_pcm_set_msb(substream, cpu_bits);
349 }
350 
351 static void soc_pcm_init_runtime_hw(struct snd_pcm_substream *substream)
352 {
353 	struct snd_pcm_runtime *runtime = substream->runtime;
354 	struct snd_pcm_hardware *hw = &runtime->hw;
355 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
356 	struct snd_soc_dai *codec_dai;
357 	struct snd_soc_dai_driver *cpu_dai_drv = rtd->cpu_dai->driver;
358 	struct snd_soc_dai_driver *codec_dai_drv;
359 	struct snd_soc_pcm_stream *codec_stream;
360 	struct snd_soc_pcm_stream *cpu_stream;
361 	unsigned int chan_min = 0, chan_max = UINT_MAX;
362 	unsigned int rate_min = 0, rate_max = UINT_MAX;
363 	unsigned int rates = UINT_MAX;
364 	u64 formats = ULLONG_MAX;
365 	int i;
366 
367 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
368 		cpu_stream = &cpu_dai_drv->playback;
369 	else
370 		cpu_stream = &cpu_dai_drv->capture;
371 
372 	/* first calculate min/max only for CODECs in the DAI link */
373 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
374 
375 		/*
376 		 * Skip CODECs which don't support the current stream type.
377 		 * Otherwise, since the rate, channel, and format values will
378 		 * zero in that case, we would have no usable settings left,
379 		 * causing the resulting setup to fail.
380 		 * At least one CODEC should match, otherwise we should have
381 		 * bailed out on a higher level, since there would be no
382 		 * CODEC to support the transfer direction in that case.
383 		 */
384 		if (!snd_soc_dai_stream_valid(codec_dai,
385 					      substream->stream))
386 			continue;
387 
388 		codec_dai_drv = codec_dai->driver;
389 		if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
390 			codec_stream = &codec_dai_drv->playback;
391 		else
392 			codec_stream = &codec_dai_drv->capture;
393 		chan_min = max(chan_min, codec_stream->channels_min);
394 		chan_max = min(chan_max, codec_stream->channels_max);
395 		rate_min = max(rate_min, codec_stream->rate_min);
396 		rate_max = min_not_zero(rate_max, codec_stream->rate_max);
397 		formats &= codec_stream->formats;
398 		rates = snd_pcm_rate_mask_intersect(codec_stream->rates, rates);
399 	}
400 
401 	/*
402 	 * chan min/max cannot be enforced if there are multiple CODEC DAIs
403 	 * connected to a single CPU DAI, use CPU DAI's directly and let
404 	 * channel allocation be fixed up later
405 	 */
406 	if (rtd->num_codecs > 1) {
407 		chan_min = cpu_stream->channels_min;
408 		chan_max = cpu_stream->channels_max;
409 	}
410 
411 	hw->channels_min = max(chan_min, cpu_stream->channels_min);
412 	hw->channels_max = min(chan_max, cpu_stream->channels_max);
413 	if (hw->formats)
414 		hw->formats &= formats & cpu_stream->formats;
415 	else
416 		hw->formats = formats & cpu_stream->formats;
417 	hw->rates = snd_pcm_rate_mask_intersect(rates, cpu_stream->rates);
418 
419 	snd_pcm_limit_hw_rates(runtime);
420 
421 	hw->rate_min = max(hw->rate_min, cpu_stream->rate_min);
422 	hw->rate_min = max(hw->rate_min, rate_min);
423 	hw->rate_max = min_not_zero(hw->rate_max, cpu_stream->rate_max);
424 	hw->rate_max = min_not_zero(hw->rate_max, rate_max);
425 }
426 
427 static int soc_pcm_components_open(struct snd_pcm_substream *substream,
428 				   struct snd_soc_component **last)
429 {
430 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
431 	struct snd_soc_rtdcom_list *rtdcom;
432 	struct snd_soc_component *component;
433 	int ret = 0;
434 
435 	for_each_rtd_components(rtd, rtdcom, component) {
436 		*last = component;
437 
438 		ret = snd_soc_component_module_get_when_open(component);
439 		if (ret < 0) {
440 			dev_err(component->dev,
441 				"ASoC: can't get module %s\n",
442 				component->name);
443 			return ret;
444 		}
445 
446 		ret = snd_soc_component_open(component, substream);
447 		if (ret < 0) {
448 			dev_err(component->dev,
449 				"ASoC: can't open component %s: %d\n",
450 				component->name, ret);
451 			return ret;
452 		}
453 	}
454 	*last = NULL;
455 	return 0;
456 }
457 
458 static int soc_pcm_components_close(struct snd_pcm_substream *substream,
459 				    struct snd_soc_component *last)
460 {
461 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
462 	struct snd_soc_rtdcom_list *rtdcom;
463 	struct snd_soc_component *component;
464 	int ret = 0;
465 
466 	for_each_rtd_components(rtd, rtdcom, component) {
467 		if (component == last)
468 			break;
469 
470 		ret |= snd_soc_component_close(component, substream);
471 		snd_soc_component_module_put_when_close(component);
472 	}
473 
474 	return ret;
475 }
476 
477 /*
478  * Called by ALSA when a PCM substream is opened, the runtime->hw record is
479  * then initialized and any private data can be allocated. This also calls
480  * startup for the cpu DAI, component, machine and codec DAI.
481  */
482 static int soc_pcm_open(struct snd_pcm_substream *substream)
483 {
484 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
485 	struct snd_pcm_runtime *runtime = substream->runtime;
486 	struct snd_soc_component *component;
487 	struct snd_soc_rtdcom_list *rtdcom;
488 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
489 	struct snd_soc_dai *codec_dai;
490 	const char *codec_dai_name = "multicodec";
491 	int i, ret = 0;
492 
493 	pinctrl_pm_select_default_state(cpu_dai->dev);
494 	for_each_rtd_codec_dai(rtd, i, codec_dai)
495 		pinctrl_pm_select_default_state(codec_dai->dev);
496 
497 	for_each_rtd_components(rtd, rtdcom, component) {
498 		pm_runtime_get_sync(component->dev);
499 	}
500 
501 	mutex_lock_nested(&rtd->card->pcm_mutex, rtd->card->pcm_subclass);
502 
503 	/* startup the audio subsystem */
504 	ret = snd_soc_dai_startup(cpu_dai, substream);
505 	if (ret < 0) {
506 		dev_err(cpu_dai->dev, "ASoC: can't open interface %s: %d\n",
507 			cpu_dai->name, ret);
508 		goto out;
509 	}
510 
511 	ret = soc_pcm_components_open(substream, &component);
512 	if (ret < 0)
513 		goto component_err;
514 
515 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
516 		ret = snd_soc_dai_startup(codec_dai, substream);
517 		if (ret < 0) {
518 			dev_err(codec_dai->dev,
519 				"ASoC: can't open codec %s: %d\n",
520 				codec_dai->name, ret);
521 			goto codec_dai_err;
522 		}
523 
524 		if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
525 			codec_dai->tx_mask = 0;
526 		else
527 			codec_dai->rx_mask = 0;
528 	}
529 
530 	if (rtd->dai_link->ops->startup) {
531 		ret = rtd->dai_link->ops->startup(substream);
532 		if (ret < 0) {
533 			pr_err("ASoC: %s startup failed: %d\n",
534 			       rtd->dai_link->name, ret);
535 			goto machine_err;
536 		}
537 	}
538 
539 	/* Dynamic PCM DAI links compat checks use dynamic capabilities */
540 	if (rtd->dai_link->dynamic || rtd->dai_link->no_pcm)
541 		goto dynamic;
542 
543 	/* Check that the codec and cpu DAIs are compatible */
544 	soc_pcm_init_runtime_hw(substream);
545 
546 	if (rtd->num_codecs == 1)
547 		codec_dai_name = rtd->codec_dai->name;
548 
549 	if (soc_pcm_has_symmetry(substream))
550 		runtime->hw.info |= SNDRV_PCM_INFO_JOINT_DUPLEX;
551 
552 	ret = -EINVAL;
553 	if (!runtime->hw.rates) {
554 		printk(KERN_ERR "ASoC: %s <-> %s No matching rates\n",
555 			codec_dai_name, cpu_dai->name);
556 		goto config_err;
557 	}
558 	if (!runtime->hw.formats) {
559 		printk(KERN_ERR "ASoC: %s <-> %s No matching formats\n",
560 			codec_dai_name, cpu_dai->name);
561 		goto config_err;
562 	}
563 	if (!runtime->hw.channels_min || !runtime->hw.channels_max ||
564 	    runtime->hw.channels_min > runtime->hw.channels_max) {
565 		printk(KERN_ERR "ASoC: %s <-> %s No matching channels\n",
566 				codec_dai_name, cpu_dai->name);
567 		goto config_err;
568 	}
569 
570 	soc_pcm_apply_msb(substream);
571 
572 	/* Symmetry only applies if we've already got an active stream. */
573 	if (cpu_dai->active) {
574 		ret = soc_pcm_apply_symmetry(substream, cpu_dai);
575 		if (ret != 0)
576 			goto config_err;
577 	}
578 
579 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
580 		if (codec_dai->active) {
581 			ret = soc_pcm_apply_symmetry(substream, codec_dai);
582 			if (ret != 0)
583 				goto config_err;
584 		}
585 	}
586 
587 	pr_debug("ASoC: %s <-> %s info:\n",
588 			codec_dai_name, cpu_dai->name);
589 	pr_debug("ASoC: rate mask 0x%x\n", runtime->hw.rates);
590 	pr_debug("ASoC: min ch %d max ch %d\n", runtime->hw.channels_min,
591 		 runtime->hw.channels_max);
592 	pr_debug("ASoC: min rate %d max rate %d\n", runtime->hw.rate_min,
593 		 runtime->hw.rate_max);
594 
595 dynamic:
596 
597 	snd_soc_runtime_activate(rtd, substream->stream);
598 
599 	mutex_unlock(&rtd->card->pcm_mutex);
600 	return 0;
601 
602 config_err:
603 	if (rtd->dai_link->ops->shutdown)
604 		rtd->dai_link->ops->shutdown(substream);
605 
606 machine_err:
607 	i = rtd->num_codecs;
608 
609 codec_dai_err:
610 	for_each_rtd_codec_dai_rollback(rtd, i, codec_dai)
611 		snd_soc_dai_shutdown(codec_dai, substream);
612 
613 component_err:
614 	soc_pcm_components_close(substream, component);
615 
616 	snd_soc_dai_shutdown(cpu_dai, substream);
617 out:
618 	mutex_unlock(&rtd->card->pcm_mutex);
619 
620 	for_each_rtd_components(rtd, rtdcom, component) {
621 		pm_runtime_mark_last_busy(component->dev);
622 		pm_runtime_put_autosuspend(component->dev);
623 	}
624 
625 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
626 		if (!codec_dai->active)
627 			pinctrl_pm_select_sleep_state(codec_dai->dev);
628 	}
629 	if (!cpu_dai->active)
630 		pinctrl_pm_select_sleep_state(cpu_dai->dev);
631 
632 	return ret;
633 }
634 
635 /*
636  * Power down the audio subsystem pmdown_time msecs after close is called.
637  * This is to ensure there are no pops or clicks in between any music tracks
638  * due to DAPM power cycling.
639  */
640 static void close_delayed_work(struct snd_soc_pcm_runtime *rtd)
641 {
642 	struct snd_soc_dai *codec_dai = rtd->codec_dais[0];
643 
644 	mutex_lock_nested(&rtd->card->pcm_mutex, rtd->card->pcm_subclass);
645 
646 	dev_dbg(rtd->dev, "ASoC: pop wq checking: %s status: %s waiting: %s\n",
647 		 codec_dai->driver->playback.stream_name,
648 		 codec_dai->playback_active ? "active" : "inactive",
649 		 rtd->pop_wait ? "yes" : "no");
650 
651 	/* are we waiting on this codec DAI stream */
652 	if (rtd->pop_wait == 1) {
653 		rtd->pop_wait = 0;
654 		snd_soc_dapm_stream_event(rtd, SNDRV_PCM_STREAM_PLAYBACK,
655 					  SND_SOC_DAPM_STREAM_STOP);
656 	}
657 
658 	mutex_unlock(&rtd->card->pcm_mutex);
659 }
660 
661 static void codec2codec_close_delayed_work(struct snd_soc_pcm_runtime *rtd)
662 {
663 	/*
664 	 * Currently nothing to do for c2c links
665 	 * Since c2c links are internal nodes in the DAPM graph and
666 	 * don't interface with the outside world or application layer
667 	 * we don't have to do any special handling on close.
668 	 */
669 }
670 
671 /*
672  * Called by ALSA when a PCM substream is closed. Private data can be
673  * freed here. The cpu DAI, codec DAI, machine and components are also
674  * shutdown.
675  */
676 static int soc_pcm_close(struct snd_pcm_substream *substream)
677 {
678 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
679 	struct snd_soc_component *component;
680 	struct snd_soc_rtdcom_list *rtdcom;
681 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
682 	struct snd_soc_dai *codec_dai;
683 	int i;
684 
685 	mutex_lock_nested(&rtd->card->pcm_mutex, rtd->card->pcm_subclass);
686 
687 	snd_soc_runtime_deactivate(rtd, substream->stream);
688 
689 	/* clear the corresponding DAIs rate when inactive */
690 	if (!cpu_dai->active)
691 		cpu_dai->rate = 0;
692 
693 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
694 		if (!codec_dai->active)
695 			codec_dai->rate = 0;
696 	}
697 
698 	snd_soc_dai_digital_mute(cpu_dai, 1, substream->stream);
699 
700 	snd_soc_dai_shutdown(cpu_dai, substream);
701 
702 	for_each_rtd_codec_dai(rtd, i, codec_dai)
703 		snd_soc_dai_shutdown(codec_dai, substream);
704 
705 	if (rtd->dai_link->ops->shutdown)
706 		rtd->dai_link->ops->shutdown(substream);
707 
708 	soc_pcm_components_close(substream, NULL);
709 
710 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
711 		if (snd_soc_runtime_ignore_pmdown_time(rtd)) {
712 			/* powered down playback stream now */
713 			snd_soc_dapm_stream_event(rtd,
714 						  SNDRV_PCM_STREAM_PLAYBACK,
715 						  SND_SOC_DAPM_STREAM_STOP);
716 		} else {
717 			/* start delayed pop wq here for playback streams */
718 			rtd->pop_wait = 1;
719 			queue_delayed_work(system_power_efficient_wq,
720 					   &rtd->delayed_work,
721 					   msecs_to_jiffies(rtd->pmdown_time));
722 		}
723 	} else {
724 		/* capture streams can be powered down now */
725 		snd_soc_dapm_stream_event(rtd, SNDRV_PCM_STREAM_CAPTURE,
726 					  SND_SOC_DAPM_STREAM_STOP);
727 	}
728 
729 	mutex_unlock(&rtd->card->pcm_mutex);
730 
731 	for_each_rtd_components(rtd, rtdcom, component) {
732 		pm_runtime_mark_last_busy(component->dev);
733 		pm_runtime_put_autosuspend(component->dev);
734 	}
735 
736 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
737 		if (!codec_dai->active)
738 			pinctrl_pm_select_sleep_state(codec_dai->dev);
739 	}
740 	if (!cpu_dai->active)
741 		pinctrl_pm_select_sleep_state(cpu_dai->dev);
742 
743 	return 0;
744 }
745 
746 /*
747  * Called by ALSA when the PCM substream is prepared, can set format, sample
748  * rate, etc.  This function is non atomic and can be called multiple times,
749  * it can refer to the runtime info.
750  */
751 static int soc_pcm_prepare(struct snd_pcm_substream *substream)
752 {
753 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
754 	struct snd_soc_component *component;
755 	struct snd_soc_rtdcom_list *rtdcom;
756 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
757 	struct snd_soc_dai *codec_dai;
758 	int i, ret = 0;
759 
760 	mutex_lock_nested(&rtd->card->pcm_mutex, rtd->card->pcm_subclass);
761 
762 	if (rtd->dai_link->ops->prepare) {
763 		ret = rtd->dai_link->ops->prepare(substream);
764 		if (ret < 0) {
765 			dev_err(rtd->card->dev, "ASoC: machine prepare error:"
766 				" %d\n", ret);
767 			goto out;
768 		}
769 	}
770 
771 	for_each_rtd_components(rtd, rtdcom, component) {
772 		ret = snd_soc_component_prepare(component, substream);
773 		if (ret < 0) {
774 			dev_err(component->dev,
775 				"ASoC: platform prepare error: %d\n", ret);
776 			goto out;
777 		}
778 	}
779 
780 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
781 		ret = snd_soc_dai_prepare(codec_dai, substream);
782 		if (ret < 0) {
783 			dev_err(codec_dai->dev,
784 				"ASoC: codec DAI prepare error: %d\n",
785 				ret);
786 			goto out;
787 		}
788 	}
789 
790 	ret = snd_soc_dai_prepare(cpu_dai, substream);
791 	if (ret < 0) {
792 		dev_err(cpu_dai->dev,
793 			"ASoC: cpu DAI prepare error: %d\n", ret);
794 		goto out;
795 	}
796 
797 	/* cancel any delayed stream shutdown that is pending */
798 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK &&
799 	    rtd->pop_wait) {
800 		rtd->pop_wait = 0;
801 		cancel_delayed_work(&rtd->delayed_work);
802 	}
803 
804 	snd_soc_dapm_stream_event(rtd, substream->stream,
805 			SND_SOC_DAPM_STREAM_START);
806 
807 	for_each_rtd_codec_dai(rtd, i, codec_dai)
808 		snd_soc_dai_digital_mute(codec_dai, 0,
809 					 substream->stream);
810 	snd_soc_dai_digital_mute(cpu_dai, 0, substream->stream);
811 
812 out:
813 	mutex_unlock(&rtd->card->pcm_mutex);
814 	return ret;
815 }
816 
817 static void soc_pcm_codec_params_fixup(struct snd_pcm_hw_params *params,
818 				       unsigned int mask)
819 {
820 	struct snd_interval *interval;
821 	int channels = hweight_long(mask);
822 
823 	interval = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
824 	interval->min = channels;
825 	interval->max = channels;
826 }
827 
828 static int soc_pcm_components_hw_free(struct snd_pcm_substream *substream,
829 				      struct snd_soc_component *last)
830 {
831 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
832 	struct snd_soc_rtdcom_list *rtdcom;
833 	struct snd_soc_component *component;
834 	int ret = 0;
835 
836 	for_each_rtd_components(rtd, rtdcom, component) {
837 		if (component == last)
838 			break;
839 
840 		ret |= snd_soc_component_hw_free(component, substream);
841 	}
842 
843 	return ret;
844 }
845 
846 /*
847  * Called by ALSA when the hardware params are set by application. This
848  * function can also be called multiple times and can allocate buffers
849  * (using snd_pcm_lib_* ). It's non-atomic.
850  */
851 static int soc_pcm_hw_params(struct snd_pcm_substream *substream,
852 				struct snd_pcm_hw_params *params)
853 {
854 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
855 	struct snd_soc_component *component;
856 	struct snd_soc_rtdcom_list *rtdcom;
857 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
858 	struct snd_soc_dai *codec_dai;
859 	int i, ret = 0;
860 
861 	mutex_lock_nested(&rtd->card->pcm_mutex, rtd->card->pcm_subclass);
862 
863 	ret = soc_pcm_params_symmetry(substream, params);
864 	if (ret)
865 		goto out;
866 
867 	if (rtd->dai_link->ops->hw_params) {
868 		ret = rtd->dai_link->ops->hw_params(substream, params);
869 		if (ret < 0) {
870 			dev_err(rtd->card->dev, "ASoC: machine hw_params"
871 				" failed: %d\n", ret);
872 			goto out;
873 		}
874 	}
875 
876 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
877 		struct snd_pcm_hw_params codec_params;
878 
879 		/*
880 		 * Skip CODECs which don't support the current stream type,
881 		 * the idea being that if a CODEC is not used for the currently
882 		 * set up transfer direction, it should not need to be
883 		 * configured, especially since the configuration used might
884 		 * not even be supported by that CODEC. There may be cases
885 		 * however where a CODEC needs to be set up although it is
886 		 * actually not being used for the transfer, e.g. if a
887 		 * capture-only CODEC is acting as an LRCLK and/or BCLK master
888 		 * for the DAI link including a playback-only CODEC.
889 		 * If this becomes necessary, we will have to augment the
890 		 * machine driver setup with information on how to act, so
891 		 * we can do the right thing here.
892 		 */
893 		if (!snd_soc_dai_stream_valid(codec_dai, substream->stream))
894 			continue;
895 
896 		/* copy params for each codec */
897 		codec_params = *params;
898 
899 		/* fixup params based on TDM slot masks */
900 		if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK &&
901 		    codec_dai->tx_mask)
902 			soc_pcm_codec_params_fixup(&codec_params,
903 						   codec_dai->tx_mask);
904 
905 		if (substream->stream == SNDRV_PCM_STREAM_CAPTURE &&
906 		    codec_dai->rx_mask)
907 			soc_pcm_codec_params_fixup(&codec_params,
908 						   codec_dai->rx_mask);
909 
910 		ret = snd_soc_dai_hw_params(codec_dai, substream,
911 					    &codec_params);
912 		if(ret < 0)
913 			goto codec_err;
914 
915 		codec_dai->rate = params_rate(&codec_params);
916 		codec_dai->channels = params_channels(&codec_params);
917 		codec_dai->sample_bits = snd_pcm_format_physical_width(
918 						params_format(&codec_params));
919 
920 		snd_soc_dapm_update_dai(substream, &codec_params, codec_dai);
921 	}
922 
923 	ret = snd_soc_dai_hw_params(cpu_dai, substream, params);
924 	if (ret < 0)
925 		goto interface_err;
926 
927 	/* store the parameters for each DAIs */
928 	cpu_dai->rate = params_rate(params);
929 	cpu_dai->channels = params_channels(params);
930 	cpu_dai->sample_bits =
931 		snd_pcm_format_physical_width(params_format(params));
932 
933 	snd_soc_dapm_update_dai(substream, params, cpu_dai);
934 
935 	for_each_rtd_components(rtd, rtdcom, component) {
936 		ret = snd_soc_component_hw_params(component, substream, params);
937 		if (ret < 0) {
938 			dev_err(component->dev,
939 				"ASoC: %s hw params failed: %d\n",
940 				component->name, ret);
941 			goto component_err;
942 		}
943 	}
944 	component = NULL;
945 
946 out:
947 	mutex_unlock(&rtd->card->pcm_mutex);
948 	return ret;
949 
950 component_err:
951 	soc_pcm_components_hw_free(substream, component);
952 
953 	snd_soc_dai_hw_free(cpu_dai, substream);
954 	cpu_dai->rate = 0;
955 
956 interface_err:
957 	i = rtd->num_codecs;
958 
959 codec_err:
960 	for_each_rtd_codec_dai_rollback(rtd, i, codec_dai) {
961 		if (!snd_soc_dai_stream_valid(codec_dai, substream->stream))
962 			continue;
963 
964 		snd_soc_dai_hw_free(codec_dai, substream);
965 		codec_dai->rate = 0;
966 	}
967 
968 	if (rtd->dai_link->ops->hw_free)
969 		rtd->dai_link->ops->hw_free(substream);
970 
971 	mutex_unlock(&rtd->card->pcm_mutex);
972 	return ret;
973 }
974 
975 /*
976  * Frees resources allocated by hw_params, can be called multiple times
977  */
978 static int soc_pcm_hw_free(struct snd_pcm_substream *substream)
979 {
980 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
981 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
982 	struct snd_soc_dai *codec_dai;
983 	bool playback = substream->stream == SNDRV_PCM_STREAM_PLAYBACK;
984 	int i;
985 
986 	mutex_lock_nested(&rtd->card->pcm_mutex, rtd->card->pcm_subclass);
987 
988 	/* clear the corresponding DAIs parameters when going to be inactive */
989 	if (cpu_dai->active == 1) {
990 		cpu_dai->rate = 0;
991 		cpu_dai->channels = 0;
992 		cpu_dai->sample_bits = 0;
993 	}
994 
995 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
996 		if (codec_dai->active == 1) {
997 			codec_dai->rate = 0;
998 			codec_dai->channels = 0;
999 			codec_dai->sample_bits = 0;
1000 		}
1001 	}
1002 
1003 	/* apply codec digital mute */
1004 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
1005 		if ((playback && codec_dai->playback_active == 1) ||
1006 		    (!playback && codec_dai->capture_active == 1))
1007 			snd_soc_dai_digital_mute(codec_dai, 1,
1008 						 substream->stream);
1009 	}
1010 
1011 	/* free any machine hw params */
1012 	if (rtd->dai_link->ops->hw_free)
1013 		rtd->dai_link->ops->hw_free(substream);
1014 
1015 	/* free any component resources */
1016 	soc_pcm_components_hw_free(substream, NULL);
1017 
1018 	/* now free hw params for the DAIs  */
1019 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
1020 		if (!snd_soc_dai_stream_valid(codec_dai, substream->stream))
1021 			continue;
1022 
1023 		snd_soc_dai_hw_free(codec_dai, substream);
1024 	}
1025 
1026 	snd_soc_dai_hw_free(cpu_dai, substream);
1027 
1028 	mutex_unlock(&rtd->card->pcm_mutex);
1029 	return 0;
1030 }
1031 
1032 static int soc_pcm_trigger_start(struct snd_pcm_substream *substream, int cmd)
1033 {
1034 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
1035 	struct snd_soc_component *component;
1036 	struct snd_soc_rtdcom_list *rtdcom;
1037 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
1038 	struct snd_soc_dai *codec_dai;
1039 	int i, ret;
1040 
1041 	if (rtd->dai_link->ops->trigger) {
1042 		ret = rtd->dai_link->ops->trigger(substream, cmd);
1043 		if (ret < 0)
1044 			return ret;
1045 	}
1046 
1047 	for_each_rtd_components(rtd, rtdcom, component) {
1048 		ret = snd_soc_component_trigger(component, substream, cmd);
1049 		if (ret < 0)
1050 			return ret;
1051 	}
1052 
1053 	ret = snd_soc_dai_trigger(cpu_dai, substream, cmd);
1054 	if (ret < 0)
1055 		return ret;
1056 
1057 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
1058 		ret = snd_soc_dai_trigger(codec_dai, substream, cmd);
1059 		if (ret < 0)
1060 			return ret;
1061 	}
1062 
1063 	return 0;
1064 }
1065 
1066 static int soc_pcm_trigger_stop(struct snd_pcm_substream *substream, int cmd)
1067 {
1068 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
1069 	struct snd_soc_component *component;
1070 	struct snd_soc_rtdcom_list *rtdcom;
1071 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
1072 	struct snd_soc_dai *codec_dai;
1073 	int i, ret;
1074 
1075 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
1076 		ret = snd_soc_dai_trigger(codec_dai, substream, cmd);
1077 		if (ret < 0)
1078 			return ret;
1079 	}
1080 
1081 	ret = snd_soc_dai_trigger(cpu_dai, substream, cmd);
1082 	if (ret < 0)
1083 		return ret;
1084 
1085 	for_each_rtd_components(rtd, rtdcom, component) {
1086 		ret = snd_soc_component_trigger(component, substream, cmd);
1087 		if (ret < 0)
1088 			return ret;
1089 	}
1090 
1091 	if (rtd->dai_link->ops->trigger) {
1092 		ret = rtd->dai_link->ops->trigger(substream, cmd);
1093 		if (ret < 0)
1094 			return ret;
1095 	}
1096 
1097 	return 0;
1098 }
1099 
1100 static int soc_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
1101 {
1102 	int ret;
1103 
1104 	switch (cmd) {
1105 	case SNDRV_PCM_TRIGGER_START:
1106 	case SNDRV_PCM_TRIGGER_RESUME:
1107 	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
1108 		ret = soc_pcm_trigger_start(substream, cmd);
1109 		break;
1110 	case SNDRV_PCM_TRIGGER_STOP:
1111 	case SNDRV_PCM_TRIGGER_SUSPEND:
1112 	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
1113 		ret = soc_pcm_trigger_stop(substream, cmd);
1114 		break;
1115 	default:
1116 		return -EINVAL;
1117 	}
1118 
1119 	return ret;
1120 }
1121 
1122 static int soc_pcm_bespoke_trigger(struct snd_pcm_substream *substream,
1123 				   int cmd)
1124 {
1125 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
1126 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
1127 	struct snd_soc_dai *codec_dai;
1128 	int i, ret;
1129 
1130 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
1131 		ret = snd_soc_dai_bespoke_trigger(codec_dai, substream, cmd);
1132 		if (ret < 0)
1133 			return ret;
1134 	}
1135 
1136 	ret = snd_soc_dai_bespoke_trigger(cpu_dai, substream, cmd);
1137 	if (ret < 0)
1138 		return ret;
1139 
1140 	return 0;
1141 }
1142 /*
1143  * soc level wrapper for pointer callback
1144  * If cpu_dai, codec_dai, component driver has the delay callback, then
1145  * the runtime->delay will be updated accordingly.
1146  */
1147 static snd_pcm_uframes_t soc_pcm_pointer(struct snd_pcm_substream *substream)
1148 {
1149 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
1150 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
1151 	struct snd_soc_dai *codec_dai;
1152 	struct snd_pcm_runtime *runtime = substream->runtime;
1153 	snd_pcm_uframes_t offset = 0;
1154 	snd_pcm_sframes_t delay = 0;
1155 	snd_pcm_sframes_t codec_delay = 0;
1156 	int i;
1157 
1158 	/* clearing the previous total delay */
1159 	runtime->delay = 0;
1160 
1161 	offset = snd_soc_pcm_component_pointer(substream);
1162 
1163 	/* base delay if assigned in pointer callback */
1164 	delay = runtime->delay;
1165 
1166 	delay += snd_soc_dai_delay(cpu_dai, substream);
1167 
1168 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
1169 		codec_delay = max(codec_delay,
1170 				  snd_soc_dai_delay(codec_dai, substream));
1171 	}
1172 	delay += codec_delay;
1173 
1174 	runtime->delay = delay;
1175 
1176 	return offset;
1177 }
1178 
1179 /* connect a FE and BE */
1180 static int dpcm_be_connect(struct snd_soc_pcm_runtime *fe,
1181 		struct snd_soc_pcm_runtime *be, int stream)
1182 {
1183 	struct snd_soc_dpcm *dpcm;
1184 	unsigned long flags;
1185 #ifdef CONFIG_DEBUG_FS
1186 	char *name;
1187 #endif
1188 
1189 	/* only add new dpcms */
1190 	for_each_dpcm_be(fe, stream, dpcm) {
1191 		if (dpcm->be == be && dpcm->fe == fe)
1192 			return 0;
1193 	}
1194 
1195 	dpcm = kzalloc(sizeof(struct snd_soc_dpcm), GFP_KERNEL);
1196 	if (!dpcm)
1197 		return -ENOMEM;
1198 
1199 	dpcm->be = be;
1200 	dpcm->fe = fe;
1201 	be->dpcm[stream].runtime = fe->dpcm[stream].runtime;
1202 	dpcm->state = SND_SOC_DPCM_LINK_STATE_NEW;
1203 	spin_lock_irqsave(&fe->card->dpcm_lock, flags);
1204 	list_add(&dpcm->list_be, &fe->dpcm[stream].be_clients);
1205 	list_add(&dpcm->list_fe, &be->dpcm[stream].fe_clients);
1206 	spin_unlock_irqrestore(&fe->card->dpcm_lock, flags);
1207 
1208 	dev_dbg(fe->dev, "connected new DPCM %s path %s %s %s\n",
1209 			stream ? "capture" : "playback",  fe->dai_link->name,
1210 			stream ? "<-" : "->", be->dai_link->name);
1211 
1212 #ifdef CONFIG_DEBUG_FS
1213 	name = kasprintf(GFP_KERNEL, "%s:%s", be->dai_link->name,
1214 			 stream ? "capture" : "playback");
1215 	if (name) {
1216 		dpcm->debugfs_state = debugfs_create_dir(name,
1217 							 fe->debugfs_dpcm_root);
1218 		debugfs_create_u32("state", 0644, dpcm->debugfs_state,
1219 				   &dpcm->state);
1220 		kfree(name);
1221 	}
1222 #endif
1223 	return 1;
1224 }
1225 
1226 /* reparent a BE onto another FE */
1227 static void dpcm_be_reparent(struct snd_soc_pcm_runtime *fe,
1228 			struct snd_soc_pcm_runtime *be, int stream)
1229 {
1230 	struct snd_soc_dpcm *dpcm;
1231 	struct snd_pcm_substream *fe_substream, *be_substream;
1232 
1233 	/* reparent if BE is connected to other FEs */
1234 	if (!be->dpcm[stream].users)
1235 		return;
1236 
1237 	be_substream = snd_soc_dpcm_get_substream(be, stream);
1238 
1239 	for_each_dpcm_fe(be, stream, dpcm) {
1240 		if (dpcm->fe == fe)
1241 			continue;
1242 
1243 		dev_dbg(fe->dev, "reparent %s path %s %s %s\n",
1244 			stream ? "capture" : "playback",
1245 			dpcm->fe->dai_link->name,
1246 			stream ? "<-" : "->", dpcm->be->dai_link->name);
1247 
1248 		fe_substream = snd_soc_dpcm_get_substream(dpcm->fe, stream);
1249 		be_substream->runtime = fe_substream->runtime;
1250 		break;
1251 	}
1252 }
1253 
1254 /* disconnect a BE and FE */
1255 void dpcm_be_disconnect(struct snd_soc_pcm_runtime *fe, int stream)
1256 {
1257 	struct snd_soc_dpcm *dpcm, *d;
1258 	unsigned long flags;
1259 
1260 	for_each_dpcm_be_safe(fe, stream, dpcm, d) {
1261 		dev_dbg(fe->dev, "ASoC: BE %s disconnect check for %s\n",
1262 				stream ? "capture" : "playback",
1263 				dpcm->be->dai_link->name);
1264 
1265 		if (dpcm->state != SND_SOC_DPCM_LINK_STATE_FREE)
1266 			continue;
1267 
1268 		dev_dbg(fe->dev, "freed DSP %s path %s %s %s\n",
1269 			stream ? "capture" : "playback", fe->dai_link->name,
1270 			stream ? "<-" : "->", dpcm->be->dai_link->name);
1271 
1272 		/* BEs still alive need new FE */
1273 		dpcm_be_reparent(fe, dpcm->be, stream);
1274 
1275 #ifdef CONFIG_DEBUG_FS
1276 		debugfs_remove_recursive(dpcm->debugfs_state);
1277 #endif
1278 		spin_lock_irqsave(&fe->card->dpcm_lock, flags);
1279 		list_del(&dpcm->list_be);
1280 		list_del(&dpcm->list_fe);
1281 		spin_unlock_irqrestore(&fe->card->dpcm_lock, flags);
1282 		kfree(dpcm);
1283 	}
1284 }
1285 
1286 /* get BE for DAI widget and stream */
1287 static struct snd_soc_pcm_runtime *dpcm_get_be(struct snd_soc_card *card,
1288 		struct snd_soc_dapm_widget *widget, int stream)
1289 {
1290 	struct snd_soc_pcm_runtime *be;
1291 	struct snd_soc_dai *dai;
1292 	int i;
1293 
1294 	dev_dbg(card->dev, "ASoC: find BE for widget %s\n", widget->name);
1295 
1296 	if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
1297 		for_each_card_rtds(card, be) {
1298 
1299 			if (!be->dai_link->no_pcm)
1300 				continue;
1301 
1302 			dev_dbg(card->dev, "ASoC: try BE : %s\n",
1303 				be->cpu_dai->playback_widget ?
1304 				be->cpu_dai->playback_widget->name : "(not set)");
1305 
1306 			if (be->cpu_dai->playback_widget == widget)
1307 				return be;
1308 
1309 			for_each_rtd_codec_dai(be, i, dai) {
1310 				if (dai->playback_widget == widget)
1311 					return be;
1312 			}
1313 		}
1314 	} else {
1315 
1316 		for_each_card_rtds(card, be) {
1317 
1318 			if (!be->dai_link->no_pcm)
1319 				continue;
1320 
1321 			dev_dbg(card->dev, "ASoC: try BE %s\n",
1322 				be->cpu_dai->capture_widget ?
1323 				be->cpu_dai->capture_widget->name : "(not set)");
1324 
1325 			if (be->cpu_dai->capture_widget == widget)
1326 				return be;
1327 
1328 			for_each_rtd_codec_dai(be, i, dai) {
1329 				if (dai->capture_widget == widget)
1330 					return be;
1331 			}
1332 		}
1333 	}
1334 
1335 	/* dai link name and stream name set correctly ? */
1336 	dev_err(card->dev, "ASoC: can't get %s BE for %s\n",
1337 		stream ? "capture" : "playback", widget->name);
1338 	return NULL;
1339 }
1340 
1341 static inline struct snd_soc_dapm_widget *
1342 	dai_get_widget(struct snd_soc_dai *dai, int stream)
1343 {
1344 	if (stream == SNDRV_PCM_STREAM_PLAYBACK)
1345 		return dai->playback_widget;
1346 	else
1347 		return dai->capture_widget;
1348 }
1349 
1350 static int widget_in_list(struct snd_soc_dapm_widget_list *list,
1351 		struct snd_soc_dapm_widget *widget)
1352 {
1353 	int i;
1354 
1355 	for (i = 0; i < list->num_widgets; i++) {
1356 		if (widget == list->widgets[i])
1357 			return 1;
1358 	}
1359 
1360 	return 0;
1361 }
1362 
1363 static bool dpcm_end_walk_at_be(struct snd_soc_dapm_widget *widget,
1364 		enum snd_soc_dapm_direction dir)
1365 {
1366 	struct snd_soc_card *card = widget->dapm->card;
1367 	struct snd_soc_pcm_runtime *rtd;
1368 	struct snd_soc_dai *dai;
1369 	int i;
1370 
1371 	if (dir == SND_SOC_DAPM_DIR_OUT) {
1372 		for_each_card_rtds(card, rtd) {
1373 			if (!rtd->dai_link->no_pcm)
1374 				continue;
1375 
1376 			if (rtd->cpu_dai->playback_widget == widget)
1377 				return true;
1378 
1379 			for_each_rtd_codec_dai(rtd, i, dai) {
1380 				if (dai->playback_widget == widget)
1381 					return true;
1382 			}
1383 		}
1384 	} else { /* SND_SOC_DAPM_DIR_IN */
1385 		for_each_card_rtds(card, rtd) {
1386 			if (!rtd->dai_link->no_pcm)
1387 				continue;
1388 
1389 			if (rtd->cpu_dai->capture_widget == widget)
1390 				return true;
1391 
1392 			for_each_rtd_codec_dai(rtd, i, dai) {
1393 				if (dai->capture_widget == widget)
1394 					return true;
1395 			}
1396 		}
1397 	}
1398 
1399 	return false;
1400 }
1401 
1402 int dpcm_path_get(struct snd_soc_pcm_runtime *fe,
1403 	int stream, struct snd_soc_dapm_widget_list **list)
1404 {
1405 	struct snd_soc_dai *cpu_dai = fe->cpu_dai;
1406 	int paths;
1407 
1408 	/* get number of valid DAI paths and their widgets */
1409 	paths = snd_soc_dapm_dai_get_connected_widgets(cpu_dai, stream, list,
1410 			dpcm_end_walk_at_be);
1411 
1412 	dev_dbg(fe->dev, "ASoC: found %d audio %s paths\n", paths,
1413 			stream ? "capture" : "playback");
1414 
1415 	return paths;
1416 }
1417 
1418 static int dpcm_prune_paths(struct snd_soc_pcm_runtime *fe, int stream,
1419 	struct snd_soc_dapm_widget_list **list_)
1420 {
1421 	struct snd_soc_dpcm *dpcm;
1422 	struct snd_soc_dapm_widget_list *list = *list_;
1423 	struct snd_soc_dapm_widget *widget;
1424 	struct snd_soc_dai *dai;
1425 	int prune = 0;
1426 	int do_prune;
1427 
1428 	/* Destroy any old FE <--> BE connections */
1429 	for_each_dpcm_be(fe, stream, dpcm) {
1430 		unsigned int i;
1431 
1432 		/* is there a valid CPU DAI widget for this BE */
1433 		widget = dai_get_widget(dpcm->be->cpu_dai, stream);
1434 
1435 		/* prune the BE if it's no longer in our active list */
1436 		if (widget && widget_in_list(list, widget))
1437 			continue;
1438 
1439 		/* is there a valid CODEC DAI widget for this BE */
1440 		do_prune = 1;
1441 		for_each_rtd_codec_dai(dpcm->be, i, dai) {
1442 			widget = dai_get_widget(dai, stream);
1443 
1444 			/* prune the BE if it's no longer in our active list */
1445 			if (widget && widget_in_list(list, widget))
1446 				do_prune = 0;
1447 		}
1448 		if (!do_prune)
1449 			continue;
1450 
1451 		dev_dbg(fe->dev, "ASoC: pruning %s BE %s for %s\n",
1452 			stream ? "capture" : "playback",
1453 			dpcm->be->dai_link->name, fe->dai_link->name);
1454 		dpcm->state = SND_SOC_DPCM_LINK_STATE_FREE;
1455 		dpcm->be->dpcm[stream].runtime_update = SND_SOC_DPCM_UPDATE_BE;
1456 		prune++;
1457 	}
1458 
1459 	dev_dbg(fe->dev, "ASoC: found %d old BE paths for pruning\n", prune);
1460 	return prune;
1461 }
1462 
1463 static int dpcm_add_paths(struct snd_soc_pcm_runtime *fe, int stream,
1464 	struct snd_soc_dapm_widget_list **list_)
1465 {
1466 	struct snd_soc_card *card = fe->card;
1467 	struct snd_soc_dapm_widget_list *list = *list_;
1468 	struct snd_soc_pcm_runtime *be;
1469 	int i, new = 0, err;
1470 
1471 	/* Create any new FE <--> BE connections */
1472 	for (i = 0; i < list->num_widgets; i++) {
1473 
1474 		switch (list->widgets[i]->id) {
1475 		case snd_soc_dapm_dai_in:
1476 			if (stream != SNDRV_PCM_STREAM_PLAYBACK)
1477 				continue;
1478 			break;
1479 		case snd_soc_dapm_dai_out:
1480 			if (stream != SNDRV_PCM_STREAM_CAPTURE)
1481 				continue;
1482 			break;
1483 		default:
1484 			continue;
1485 		}
1486 
1487 		/* is there a valid BE rtd for this widget */
1488 		be = dpcm_get_be(card, list->widgets[i], stream);
1489 		if (!be) {
1490 			dev_err(fe->dev, "ASoC: no BE found for %s\n",
1491 					list->widgets[i]->name);
1492 			continue;
1493 		}
1494 
1495 		/* make sure BE is a real BE */
1496 		if (!be->dai_link->no_pcm)
1497 			continue;
1498 
1499 		/* don't connect if FE is not running */
1500 		if (!fe->dpcm[stream].runtime && !fe->fe_compr)
1501 			continue;
1502 
1503 		/* newly connected FE and BE */
1504 		err = dpcm_be_connect(fe, be, stream);
1505 		if (err < 0) {
1506 			dev_err(fe->dev, "ASoC: can't connect %s\n",
1507 				list->widgets[i]->name);
1508 			break;
1509 		} else if (err == 0) /* already connected */
1510 			continue;
1511 
1512 		/* new */
1513 		be->dpcm[stream].runtime_update = SND_SOC_DPCM_UPDATE_BE;
1514 		new++;
1515 	}
1516 
1517 	dev_dbg(fe->dev, "ASoC: found %d new BE paths\n", new);
1518 	return new;
1519 }
1520 
1521 /*
1522  * Find the corresponding BE DAIs that source or sink audio to this
1523  * FE substream.
1524  */
1525 int dpcm_process_paths(struct snd_soc_pcm_runtime *fe,
1526 	int stream, struct snd_soc_dapm_widget_list **list, int new)
1527 {
1528 	if (new)
1529 		return dpcm_add_paths(fe, stream, list);
1530 	else
1531 		return dpcm_prune_paths(fe, stream, list);
1532 }
1533 
1534 void dpcm_clear_pending_state(struct snd_soc_pcm_runtime *fe, int stream)
1535 {
1536 	struct snd_soc_dpcm *dpcm;
1537 	unsigned long flags;
1538 
1539 	spin_lock_irqsave(&fe->card->dpcm_lock, flags);
1540 	for_each_dpcm_be(fe, stream, dpcm)
1541 		dpcm->be->dpcm[stream].runtime_update =
1542 						SND_SOC_DPCM_UPDATE_NO;
1543 	spin_unlock_irqrestore(&fe->card->dpcm_lock, flags);
1544 }
1545 
1546 static void dpcm_be_dai_startup_unwind(struct snd_soc_pcm_runtime *fe,
1547 	int stream)
1548 {
1549 	struct snd_soc_dpcm *dpcm;
1550 
1551 	/* disable any enabled and non active backends */
1552 	for_each_dpcm_be(fe, stream, dpcm) {
1553 
1554 		struct snd_soc_pcm_runtime *be = dpcm->be;
1555 		struct snd_pcm_substream *be_substream =
1556 			snd_soc_dpcm_get_substream(be, stream);
1557 
1558 		if (be->dpcm[stream].users == 0)
1559 			dev_err(be->dev, "ASoC: no users %s at close - state %d\n",
1560 				stream ? "capture" : "playback",
1561 				be->dpcm[stream].state);
1562 
1563 		if (--be->dpcm[stream].users != 0)
1564 			continue;
1565 
1566 		if (be->dpcm[stream].state != SND_SOC_DPCM_STATE_OPEN)
1567 			continue;
1568 
1569 		soc_pcm_close(be_substream);
1570 		be_substream->runtime = NULL;
1571 		be->dpcm[stream].state = SND_SOC_DPCM_STATE_CLOSE;
1572 	}
1573 }
1574 
1575 int dpcm_be_dai_startup(struct snd_soc_pcm_runtime *fe, int stream)
1576 {
1577 	struct snd_soc_dpcm *dpcm;
1578 	int err, count = 0;
1579 
1580 	/* only startup BE DAIs that are either sinks or sources to this FE DAI */
1581 	for_each_dpcm_be(fe, stream, dpcm) {
1582 
1583 		struct snd_soc_pcm_runtime *be = dpcm->be;
1584 		struct snd_pcm_substream *be_substream =
1585 			snd_soc_dpcm_get_substream(be, stream);
1586 
1587 		if (!be_substream) {
1588 			dev_err(be->dev, "ASoC: no backend %s stream\n",
1589 				stream ? "capture" : "playback");
1590 			continue;
1591 		}
1592 
1593 		/* is this op for this BE ? */
1594 		if (!snd_soc_dpcm_be_can_update(fe, be, stream))
1595 			continue;
1596 
1597 		/* first time the dpcm is open ? */
1598 		if (be->dpcm[stream].users == DPCM_MAX_BE_USERS)
1599 			dev_err(be->dev, "ASoC: too many users %s at open %d\n",
1600 				stream ? "capture" : "playback",
1601 				be->dpcm[stream].state);
1602 
1603 		if (be->dpcm[stream].users++ != 0)
1604 			continue;
1605 
1606 		if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_NEW) &&
1607 		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_CLOSE))
1608 			continue;
1609 
1610 		dev_dbg(be->dev, "ASoC: open %s BE %s\n",
1611 			stream ? "capture" : "playback", be->dai_link->name);
1612 
1613 		be_substream->runtime = be->dpcm[stream].runtime;
1614 		err = soc_pcm_open(be_substream);
1615 		if (err < 0) {
1616 			dev_err(be->dev, "ASoC: BE open failed %d\n", err);
1617 			be->dpcm[stream].users--;
1618 			if (be->dpcm[stream].users < 0)
1619 				dev_err(be->dev, "ASoC: no users %s at unwind %d\n",
1620 					stream ? "capture" : "playback",
1621 					be->dpcm[stream].state);
1622 
1623 			be->dpcm[stream].state = SND_SOC_DPCM_STATE_CLOSE;
1624 			goto unwind;
1625 		}
1626 
1627 		be->dpcm[stream].state = SND_SOC_DPCM_STATE_OPEN;
1628 		count++;
1629 	}
1630 
1631 	return count;
1632 
1633 unwind:
1634 	/* disable any enabled and non active backends */
1635 	for_each_dpcm_be_rollback(fe, stream, dpcm) {
1636 		struct snd_soc_pcm_runtime *be = dpcm->be;
1637 		struct snd_pcm_substream *be_substream =
1638 			snd_soc_dpcm_get_substream(be, stream);
1639 
1640 		if (!snd_soc_dpcm_be_can_update(fe, be, stream))
1641 			continue;
1642 
1643 		if (be->dpcm[stream].users == 0)
1644 			dev_err(be->dev, "ASoC: no users %s at close %d\n",
1645 				stream ? "capture" : "playback",
1646 				be->dpcm[stream].state);
1647 
1648 		if (--be->dpcm[stream].users != 0)
1649 			continue;
1650 
1651 		if (be->dpcm[stream].state != SND_SOC_DPCM_STATE_OPEN)
1652 			continue;
1653 
1654 		soc_pcm_close(be_substream);
1655 		be_substream->runtime = NULL;
1656 		be->dpcm[stream].state = SND_SOC_DPCM_STATE_CLOSE;
1657 	}
1658 
1659 	return err;
1660 }
1661 
1662 static void dpcm_init_runtime_hw(struct snd_pcm_runtime *runtime,
1663 				 struct snd_soc_pcm_stream *stream)
1664 {
1665 	runtime->hw.rate_min = stream->rate_min;
1666 	runtime->hw.rate_max = min_not_zero(stream->rate_max, UINT_MAX);
1667 	runtime->hw.channels_min = stream->channels_min;
1668 	runtime->hw.channels_max = stream->channels_max;
1669 	if (runtime->hw.formats)
1670 		runtime->hw.formats &= stream->formats;
1671 	else
1672 		runtime->hw.formats = stream->formats;
1673 	runtime->hw.rates = stream->rates;
1674 }
1675 
1676 static void dpcm_runtime_merge_format(struct snd_pcm_substream *substream,
1677 				      u64 *formats)
1678 {
1679 	struct snd_soc_pcm_runtime *fe = substream->private_data;
1680 	struct snd_soc_dpcm *dpcm;
1681 	struct snd_soc_dai *dai;
1682 	int stream = substream->stream;
1683 
1684 	if (!fe->dai_link->dpcm_merged_format)
1685 		return;
1686 
1687 	/*
1688 	 * It returns merged BE codec format
1689 	 * if FE want to use it (= dpcm_merged_format)
1690 	 */
1691 
1692 	for_each_dpcm_be(fe, stream, dpcm) {
1693 		struct snd_soc_pcm_runtime *be = dpcm->be;
1694 		struct snd_soc_dai_driver *codec_dai_drv;
1695 		struct snd_soc_pcm_stream *codec_stream;
1696 		int i;
1697 
1698 		for_each_rtd_codec_dai(be, i, dai) {
1699 			/*
1700 			 * Skip CODECs which don't support the current stream
1701 			 * type. See soc_pcm_init_runtime_hw() for more details
1702 			 */
1703 			if (!snd_soc_dai_stream_valid(dai, stream))
1704 				continue;
1705 
1706 			codec_dai_drv = dai->driver;
1707 			if (stream == SNDRV_PCM_STREAM_PLAYBACK)
1708 				codec_stream = &codec_dai_drv->playback;
1709 			else
1710 				codec_stream = &codec_dai_drv->capture;
1711 
1712 			*formats &= codec_stream->formats;
1713 		}
1714 	}
1715 }
1716 
1717 static void dpcm_runtime_merge_chan(struct snd_pcm_substream *substream,
1718 				    unsigned int *channels_min,
1719 				    unsigned int *channels_max)
1720 {
1721 	struct snd_soc_pcm_runtime *fe = substream->private_data;
1722 	struct snd_soc_dpcm *dpcm;
1723 	int stream = substream->stream;
1724 
1725 	if (!fe->dai_link->dpcm_merged_chan)
1726 		return;
1727 
1728 	/*
1729 	 * It returns merged BE codec channel;
1730 	 * if FE want to use it (= dpcm_merged_chan)
1731 	 */
1732 
1733 	for_each_dpcm_be(fe, stream, dpcm) {
1734 		struct snd_soc_pcm_runtime *be = dpcm->be;
1735 		struct snd_soc_dai_driver *cpu_dai_drv =  be->cpu_dai->driver;
1736 		struct snd_soc_dai_driver *codec_dai_drv;
1737 		struct snd_soc_pcm_stream *codec_stream;
1738 		struct snd_soc_pcm_stream *cpu_stream;
1739 
1740 		if (stream == SNDRV_PCM_STREAM_PLAYBACK)
1741 			cpu_stream = &cpu_dai_drv->playback;
1742 		else
1743 			cpu_stream = &cpu_dai_drv->capture;
1744 
1745 		*channels_min = max(*channels_min, cpu_stream->channels_min);
1746 		*channels_max = min(*channels_max, cpu_stream->channels_max);
1747 
1748 		/*
1749 		 * chan min/max cannot be enforced if there are multiple CODEC
1750 		 * DAIs connected to a single CPU DAI, use CPU DAI's directly
1751 		 */
1752 		if (be->num_codecs == 1) {
1753 			codec_dai_drv = be->codec_dais[0]->driver;
1754 
1755 			if (stream == SNDRV_PCM_STREAM_PLAYBACK)
1756 				codec_stream = &codec_dai_drv->playback;
1757 			else
1758 				codec_stream = &codec_dai_drv->capture;
1759 
1760 			*channels_min = max(*channels_min,
1761 					    codec_stream->channels_min);
1762 			*channels_max = min(*channels_max,
1763 					    codec_stream->channels_max);
1764 		}
1765 	}
1766 }
1767 
1768 static void dpcm_runtime_merge_rate(struct snd_pcm_substream *substream,
1769 				    unsigned int *rates,
1770 				    unsigned int *rate_min,
1771 				    unsigned int *rate_max)
1772 {
1773 	struct snd_soc_pcm_runtime *fe = substream->private_data;
1774 	struct snd_soc_dpcm *dpcm;
1775 	int stream = substream->stream;
1776 
1777 	if (!fe->dai_link->dpcm_merged_rate)
1778 		return;
1779 
1780 	/*
1781 	 * It returns merged BE codec channel;
1782 	 * if FE want to use it (= dpcm_merged_chan)
1783 	 */
1784 
1785 	for_each_dpcm_be(fe, stream, dpcm) {
1786 		struct snd_soc_pcm_runtime *be = dpcm->be;
1787 		struct snd_soc_dai_driver *cpu_dai_drv =  be->cpu_dai->driver;
1788 		struct snd_soc_dai_driver *codec_dai_drv;
1789 		struct snd_soc_pcm_stream *codec_stream;
1790 		struct snd_soc_pcm_stream *cpu_stream;
1791 		struct snd_soc_dai *dai;
1792 		int i;
1793 
1794 		if (stream == SNDRV_PCM_STREAM_PLAYBACK)
1795 			cpu_stream = &cpu_dai_drv->playback;
1796 		else
1797 			cpu_stream = &cpu_dai_drv->capture;
1798 
1799 		*rate_min = max(*rate_min, cpu_stream->rate_min);
1800 		*rate_max = min_not_zero(*rate_max, cpu_stream->rate_max);
1801 		*rates = snd_pcm_rate_mask_intersect(*rates, cpu_stream->rates);
1802 
1803 		for_each_rtd_codec_dai(be, i, dai) {
1804 			/*
1805 			 * Skip CODECs which don't support the current stream
1806 			 * type. See soc_pcm_init_runtime_hw() for more details
1807 			 */
1808 			if (!snd_soc_dai_stream_valid(dai, stream))
1809 				continue;
1810 
1811 			codec_dai_drv = dai->driver;
1812 			if (stream == SNDRV_PCM_STREAM_PLAYBACK)
1813 				codec_stream = &codec_dai_drv->playback;
1814 			else
1815 				codec_stream = &codec_dai_drv->capture;
1816 
1817 			*rate_min = max(*rate_min, codec_stream->rate_min);
1818 			*rate_max = min_not_zero(*rate_max,
1819 						 codec_stream->rate_max);
1820 			*rates = snd_pcm_rate_mask_intersect(*rates,
1821 						codec_stream->rates);
1822 		}
1823 	}
1824 }
1825 
1826 static void dpcm_set_fe_runtime(struct snd_pcm_substream *substream)
1827 {
1828 	struct snd_pcm_runtime *runtime = substream->runtime;
1829 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
1830 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
1831 	struct snd_soc_dai_driver *cpu_dai_drv = cpu_dai->driver;
1832 
1833 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
1834 		dpcm_init_runtime_hw(runtime, &cpu_dai_drv->playback);
1835 	else
1836 		dpcm_init_runtime_hw(runtime, &cpu_dai_drv->capture);
1837 
1838 	dpcm_runtime_merge_format(substream, &runtime->hw.formats);
1839 	dpcm_runtime_merge_chan(substream, &runtime->hw.channels_min,
1840 				&runtime->hw.channels_max);
1841 	dpcm_runtime_merge_rate(substream, &runtime->hw.rates,
1842 				&runtime->hw.rate_min, &runtime->hw.rate_max);
1843 }
1844 
1845 static int dpcm_fe_dai_do_trigger(struct snd_pcm_substream *substream, int cmd);
1846 
1847 /* Set FE's runtime_update state; the state is protected via PCM stream lock
1848  * for avoiding the race with trigger callback.
1849  * If the state is unset and a trigger is pending while the previous operation,
1850  * process the pending trigger action here.
1851  */
1852 static void dpcm_set_fe_update_state(struct snd_soc_pcm_runtime *fe,
1853 				     int stream, enum snd_soc_dpcm_update state)
1854 {
1855 	struct snd_pcm_substream *substream =
1856 		snd_soc_dpcm_get_substream(fe, stream);
1857 
1858 	snd_pcm_stream_lock_irq(substream);
1859 	if (state == SND_SOC_DPCM_UPDATE_NO && fe->dpcm[stream].trigger_pending) {
1860 		dpcm_fe_dai_do_trigger(substream,
1861 				       fe->dpcm[stream].trigger_pending - 1);
1862 		fe->dpcm[stream].trigger_pending = 0;
1863 	}
1864 	fe->dpcm[stream].runtime_update = state;
1865 	snd_pcm_stream_unlock_irq(substream);
1866 }
1867 
1868 static int dpcm_apply_symmetry(struct snd_pcm_substream *fe_substream,
1869 			       int stream)
1870 {
1871 	struct snd_soc_dpcm *dpcm;
1872 	struct snd_soc_pcm_runtime *fe = fe_substream->private_data;
1873 	struct snd_soc_dai *fe_cpu_dai = fe->cpu_dai;
1874 	int err;
1875 
1876 	/* apply symmetry for FE */
1877 	if (soc_pcm_has_symmetry(fe_substream))
1878 		fe_substream->runtime->hw.info |= SNDRV_PCM_INFO_JOINT_DUPLEX;
1879 
1880 	/* Symmetry only applies if we've got an active stream. */
1881 	if (fe_cpu_dai->active) {
1882 		err = soc_pcm_apply_symmetry(fe_substream, fe_cpu_dai);
1883 		if (err < 0)
1884 			return err;
1885 	}
1886 
1887 	/* apply symmetry for BE */
1888 	for_each_dpcm_be(fe, stream, dpcm) {
1889 		struct snd_soc_pcm_runtime *be = dpcm->be;
1890 		struct snd_pcm_substream *be_substream =
1891 			snd_soc_dpcm_get_substream(be, stream);
1892 		struct snd_soc_pcm_runtime *rtd;
1893 		struct snd_soc_dai *codec_dai;
1894 		int i;
1895 
1896 		/* A backend may not have the requested substream */
1897 		if (!be_substream)
1898 			continue;
1899 
1900 		rtd = be_substream->private_data;
1901 		if (rtd->dai_link->be_hw_params_fixup)
1902 			continue;
1903 
1904 		if (soc_pcm_has_symmetry(be_substream))
1905 			be_substream->runtime->hw.info |= SNDRV_PCM_INFO_JOINT_DUPLEX;
1906 
1907 		/* Symmetry only applies if we've got an active stream. */
1908 		if (rtd->cpu_dai->active) {
1909 			err = soc_pcm_apply_symmetry(fe_substream,
1910 						     rtd->cpu_dai);
1911 			if (err < 0)
1912 				return err;
1913 		}
1914 
1915 		for_each_rtd_codec_dai(rtd, i, codec_dai) {
1916 			if (codec_dai->active) {
1917 				err = soc_pcm_apply_symmetry(fe_substream,
1918 							     codec_dai);
1919 				if (err < 0)
1920 					return err;
1921 			}
1922 		}
1923 	}
1924 
1925 	return 0;
1926 }
1927 
1928 static int dpcm_fe_dai_startup(struct snd_pcm_substream *fe_substream)
1929 {
1930 	struct snd_soc_pcm_runtime *fe = fe_substream->private_data;
1931 	struct snd_pcm_runtime *runtime = fe_substream->runtime;
1932 	int stream = fe_substream->stream, ret = 0;
1933 
1934 	dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_FE);
1935 
1936 	ret = dpcm_be_dai_startup(fe, fe_substream->stream);
1937 	if (ret < 0) {
1938 		dev_err(fe->dev,"ASoC: failed to start some BEs %d\n", ret);
1939 		goto be_err;
1940 	}
1941 
1942 	dev_dbg(fe->dev, "ASoC: open FE %s\n", fe->dai_link->name);
1943 
1944 	/* start the DAI frontend */
1945 	ret = soc_pcm_open(fe_substream);
1946 	if (ret < 0) {
1947 		dev_err(fe->dev,"ASoC: failed to start FE %d\n", ret);
1948 		goto unwind;
1949 	}
1950 
1951 	fe->dpcm[stream].state = SND_SOC_DPCM_STATE_OPEN;
1952 
1953 	dpcm_set_fe_runtime(fe_substream);
1954 	snd_pcm_limit_hw_rates(runtime);
1955 
1956 	ret = dpcm_apply_symmetry(fe_substream, stream);
1957 	if (ret < 0) {
1958 		dev_err(fe->dev, "ASoC: failed to apply dpcm symmetry %d\n",
1959 			ret);
1960 		goto unwind;
1961 	}
1962 
1963 	dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_NO);
1964 	return 0;
1965 
1966 unwind:
1967 	dpcm_be_dai_startup_unwind(fe, fe_substream->stream);
1968 be_err:
1969 	dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_NO);
1970 	return ret;
1971 }
1972 
1973 int dpcm_be_dai_shutdown(struct snd_soc_pcm_runtime *fe, int stream)
1974 {
1975 	struct snd_soc_dpcm *dpcm;
1976 
1977 	/* only shutdown BEs that are either sinks or sources to this FE DAI */
1978 	for_each_dpcm_be(fe, stream, dpcm) {
1979 
1980 		struct snd_soc_pcm_runtime *be = dpcm->be;
1981 		struct snd_pcm_substream *be_substream =
1982 			snd_soc_dpcm_get_substream(be, stream);
1983 
1984 		/* is this op for this BE ? */
1985 		if (!snd_soc_dpcm_be_can_update(fe, be, stream))
1986 			continue;
1987 
1988 		if (be->dpcm[stream].users == 0)
1989 			dev_err(be->dev, "ASoC: no users %s at close - state %d\n",
1990 				stream ? "capture" : "playback",
1991 				be->dpcm[stream].state);
1992 
1993 		if (--be->dpcm[stream].users != 0)
1994 			continue;
1995 
1996 		if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_FREE) &&
1997 		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_OPEN)) {
1998 			soc_pcm_hw_free(be_substream);
1999 			be->dpcm[stream].state = SND_SOC_DPCM_STATE_HW_FREE;
2000 		}
2001 
2002 		dev_dbg(be->dev, "ASoC: close BE %s\n",
2003 			be->dai_link->name);
2004 
2005 		soc_pcm_close(be_substream);
2006 		be_substream->runtime = NULL;
2007 
2008 		be->dpcm[stream].state = SND_SOC_DPCM_STATE_CLOSE;
2009 	}
2010 	return 0;
2011 }
2012 
2013 static int dpcm_fe_dai_shutdown(struct snd_pcm_substream *substream)
2014 {
2015 	struct snd_soc_pcm_runtime *fe = substream->private_data;
2016 	int stream = substream->stream;
2017 
2018 	dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_FE);
2019 
2020 	/* shutdown the BEs */
2021 	dpcm_be_dai_shutdown(fe, substream->stream);
2022 
2023 	dev_dbg(fe->dev, "ASoC: close FE %s\n", fe->dai_link->name);
2024 
2025 	/* now shutdown the frontend */
2026 	soc_pcm_close(substream);
2027 
2028 	/* run the stream event for each BE */
2029 	dpcm_dapm_stream_event(fe, stream, SND_SOC_DAPM_STREAM_STOP);
2030 
2031 	fe->dpcm[stream].state = SND_SOC_DPCM_STATE_CLOSE;
2032 	dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_NO);
2033 	return 0;
2034 }
2035 
2036 int dpcm_be_dai_hw_free(struct snd_soc_pcm_runtime *fe, int stream)
2037 {
2038 	struct snd_soc_dpcm *dpcm;
2039 
2040 	/* only hw_params backends that are either sinks or sources
2041 	 * to this frontend DAI */
2042 	for_each_dpcm_be(fe, stream, dpcm) {
2043 
2044 		struct snd_soc_pcm_runtime *be = dpcm->be;
2045 		struct snd_pcm_substream *be_substream =
2046 			snd_soc_dpcm_get_substream(be, stream);
2047 
2048 		/* is this op for this BE ? */
2049 		if (!snd_soc_dpcm_be_can_update(fe, be, stream))
2050 			continue;
2051 
2052 		/* only free hw when no longer used - check all FEs */
2053 		if (!snd_soc_dpcm_can_be_free_stop(fe, be, stream))
2054 				continue;
2055 
2056 		/* do not free hw if this BE is used by other FE */
2057 		if (be->dpcm[stream].users > 1)
2058 			continue;
2059 
2060 		if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_PARAMS) &&
2061 		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_PREPARE) &&
2062 		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_FREE) &&
2063 		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_PAUSED) &&
2064 		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_STOP) &&
2065 		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_SUSPEND))
2066 			continue;
2067 
2068 		dev_dbg(be->dev, "ASoC: hw_free BE %s\n",
2069 			be->dai_link->name);
2070 
2071 		soc_pcm_hw_free(be_substream);
2072 
2073 		be->dpcm[stream].state = SND_SOC_DPCM_STATE_HW_FREE;
2074 	}
2075 
2076 	return 0;
2077 }
2078 
2079 static int dpcm_fe_dai_hw_free(struct snd_pcm_substream *substream)
2080 {
2081 	struct snd_soc_pcm_runtime *fe = substream->private_data;
2082 	int err, stream = substream->stream;
2083 
2084 	mutex_lock_nested(&fe->card->mutex, SND_SOC_CARD_CLASS_RUNTIME);
2085 	dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_FE);
2086 
2087 	dev_dbg(fe->dev, "ASoC: hw_free FE %s\n", fe->dai_link->name);
2088 
2089 	/* call hw_free on the frontend */
2090 	err = soc_pcm_hw_free(substream);
2091 	if (err < 0)
2092 		dev_err(fe->dev,"ASoC: hw_free FE %s failed\n",
2093 			fe->dai_link->name);
2094 
2095 	/* only hw_params backends that are either sinks or sources
2096 	 * to this frontend DAI */
2097 	err = dpcm_be_dai_hw_free(fe, stream);
2098 
2099 	fe->dpcm[stream].state = SND_SOC_DPCM_STATE_HW_FREE;
2100 	dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_NO);
2101 
2102 	mutex_unlock(&fe->card->mutex);
2103 	return 0;
2104 }
2105 
2106 int dpcm_be_dai_hw_params(struct snd_soc_pcm_runtime *fe, int stream)
2107 {
2108 	struct snd_soc_dpcm *dpcm;
2109 	int ret;
2110 
2111 	for_each_dpcm_be(fe, stream, dpcm) {
2112 
2113 		struct snd_soc_pcm_runtime *be = dpcm->be;
2114 		struct snd_pcm_substream *be_substream =
2115 			snd_soc_dpcm_get_substream(be, stream);
2116 
2117 		/* is this op for this BE ? */
2118 		if (!snd_soc_dpcm_be_can_update(fe, be, stream))
2119 			continue;
2120 
2121 		/* copy params for each dpcm */
2122 		memcpy(&dpcm->hw_params, &fe->dpcm[stream].hw_params,
2123 				sizeof(struct snd_pcm_hw_params));
2124 
2125 		/* perform any hw_params fixups */
2126 		if (be->dai_link->be_hw_params_fixup) {
2127 			ret = be->dai_link->be_hw_params_fixup(be,
2128 					&dpcm->hw_params);
2129 			if (ret < 0) {
2130 				dev_err(be->dev,
2131 					"ASoC: hw_params BE fixup failed %d\n",
2132 					ret);
2133 				goto unwind;
2134 			}
2135 		}
2136 
2137 		/* copy the fixed-up hw params for BE dai */
2138 		memcpy(&be->dpcm[stream].hw_params, &dpcm->hw_params,
2139 		       sizeof(struct snd_pcm_hw_params));
2140 
2141 		/* only allow hw_params() if no connected FEs are running */
2142 		if (!snd_soc_dpcm_can_be_params(fe, be, stream))
2143 			continue;
2144 
2145 		if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_OPEN) &&
2146 		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_PARAMS) &&
2147 		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_FREE))
2148 			continue;
2149 
2150 		dev_dbg(be->dev, "ASoC: hw_params BE %s\n",
2151 			be->dai_link->name);
2152 
2153 		ret = soc_pcm_hw_params(be_substream, &dpcm->hw_params);
2154 		if (ret < 0) {
2155 			dev_err(dpcm->be->dev,
2156 				"ASoC: hw_params BE failed %d\n", ret);
2157 			goto unwind;
2158 		}
2159 
2160 		be->dpcm[stream].state = SND_SOC_DPCM_STATE_HW_PARAMS;
2161 	}
2162 	return 0;
2163 
2164 unwind:
2165 	/* disable any enabled and non active backends */
2166 	for_each_dpcm_be_rollback(fe, stream, dpcm) {
2167 		struct snd_soc_pcm_runtime *be = dpcm->be;
2168 		struct snd_pcm_substream *be_substream =
2169 			snd_soc_dpcm_get_substream(be, stream);
2170 
2171 		if (!snd_soc_dpcm_be_can_update(fe, be, stream))
2172 			continue;
2173 
2174 		/* only allow hw_free() if no connected FEs are running */
2175 		if (!snd_soc_dpcm_can_be_free_stop(fe, be, stream))
2176 			continue;
2177 
2178 		if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_OPEN) &&
2179 		   (be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_PARAMS) &&
2180 		   (be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_FREE) &&
2181 		   (be->dpcm[stream].state != SND_SOC_DPCM_STATE_STOP))
2182 			continue;
2183 
2184 		soc_pcm_hw_free(be_substream);
2185 	}
2186 
2187 	return ret;
2188 }
2189 
2190 static int dpcm_fe_dai_hw_params(struct snd_pcm_substream *substream,
2191 				 struct snd_pcm_hw_params *params)
2192 {
2193 	struct snd_soc_pcm_runtime *fe = substream->private_data;
2194 	int ret, stream = substream->stream;
2195 
2196 	mutex_lock_nested(&fe->card->mutex, SND_SOC_CARD_CLASS_RUNTIME);
2197 	dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_FE);
2198 
2199 	memcpy(&fe->dpcm[substream->stream].hw_params, params,
2200 			sizeof(struct snd_pcm_hw_params));
2201 	ret = dpcm_be_dai_hw_params(fe, substream->stream);
2202 	if (ret < 0) {
2203 		dev_err(fe->dev,"ASoC: hw_params BE failed %d\n", ret);
2204 		goto out;
2205 	}
2206 
2207 	dev_dbg(fe->dev, "ASoC: hw_params FE %s rate %d chan %x fmt %d\n",
2208 			fe->dai_link->name, params_rate(params),
2209 			params_channels(params), params_format(params));
2210 
2211 	/* call hw_params on the frontend */
2212 	ret = soc_pcm_hw_params(substream, params);
2213 	if (ret < 0) {
2214 		dev_err(fe->dev,"ASoC: hw_params FE failed %d\n", ret);
2215 		dpcm_be_dai_hw_free(fe, stream);
2216 	 } else
2217 		fe->dpcm[stream].state = SND_SOC_DPCM_STATE_HW_PARAMS;
2218 
2219 out:
2220 	dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_NO);
2221 	mutex_unlock(&fe->card->mutex);
2222 	return ret;
2223 }
2224 
2225 static int dpcm_do_trigger(struct snd_soc_dpcm *dpcm,
2226 		struct snd_pcm_substream *substream, int cmd)
2227 {
2228 	int ret;
2229 
2230 	dev_dbg(dpcm->be->dev, "ASoC: trigger BE %s cmd %d\n",
2231 			dpcm->be->dai_link->name, cmd);
2232 
2233 	ret = soc_pcm_trigger(substream, cmd);
2234 	if (ret < 0)
2235 		dev_err(dpcm->be->dev,"ASoC: trigger BE failed %d\n", ret);
2236 
2237 	return ret;
2238 }
2239 
2240 int dpcm_be_dai_trigger(struct snd_soc_pcm_runtime *fe, int stream,
2241 			       int cmd)
2242 {
2243 	struct snd_soc_dpcm *dpcm;
2244 	int ret = 0;
2245 
2246 	for_each_dpcm_be(fe, stream, dpcm) {
2247 
2248 		struct snd_soc_pcm_runtime *be = dpcm->be;
2249 		struct snd_pcm_substream *be_substream =
2250 			snd_soc_dpcm_get_substream(be, stream);
2251 
2252 		/* is this op for this BE ? */
2253 		if (!snd_soc_dpcm_be_can_update(fe, be, stream))
2254 			continue;
2255 
2256 		switch (cmd) {
2257 		case SNDRV_PCM_TRIGGER_START:
2258 			if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_PREPARE) &&
2259 			    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_STOP))
2260 				continue;
2261 
2262 			ret = dpcm_do_trigger(dpcm, be_substream, cmd);
2263 			if (ret)
2264 				return ret;
2265 
2266 			be->dpcm[stream].state = SND_SOC_DPCM_STATE_START;
2267 			break;
2268 		case SNDRV_PCM_TRIGGER_RESUME:
2269 			if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_SUSPEND))
2270 				continue;
2271 
2272 			ret = dpcm_do_trigger(dpcm, be_substream, cmd);
2273 			if (ret)
2274 				return ret;
2275 
2276 			be->dpcm[stream].state = SND_SOC_DPCM_STATE_START;
2277 			break;
2278 		case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
2279 			if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_PAUSED))
2280 				continue;
2281 
2282 			ret = dpcm_do_trigger(dpcm, be_substream, cmd);
2283 			if (ret)
2284 				return ret;
2285 
2286 			be->dpcm[stream].state = SND_SOC_DPCM_STATE_START;
2287 			break;
2288 		case SNDRV_PCM_TRIGGER_STOP:
2289 			if (be->dpcm[stream].state != SND_SOC_DPCM_STATE_START)
2290 				continue;
2291 
2292 			if (!snd_soc_dpcm_can_be_free_stop(fe, be, stream))
2293 				continue;
2294 
2295 			ret = dpcm_do_trigger(dpcm, be_substream, cmd);
2296 			if (ret)
2297 				return ret;
2298 
2299 			be->dpcm[stream].state = SND_SOC_DPCM_STATE_STOP;
2300 			break;
2301 		case SNDRV_PCM_TRIGGER_SUSPEND:
2302 			if (be->dpcm[stream].state != SND_SOC_DPCM_STATE_START)
2303 				continue;
2304 
2305 			if (!snd_soc_dpcm_can_be_free_stop(fe, be, stream))
2306 				continue;
2307 
2308 			ret = dpcm_do_trigger(dpcm, be_substream, cmd);
2309 			if (ret)
2310 				return ret;
2311 
2312 			be->dpcm[stream].state = SND_SOC_DPCM_STATE_SUSPEND;
2313 			break;
2314 		case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
2315 			if (be->dpcm[stream].state != SND_SOC_DPCM_STATE_START)
2316 				continue;
2317 
2318 			if (!snd_soc_dpcm_can_be_free_stop(fe, be, stream))
2319 				continue;
2320 
2321 			ret = dpcm_do_trigger(dpcm, be_substream, cmd);
2322 			if (ret)
2323 				return ret;
2324 
2325 			be->dpcm[stream].state = SND_SOC_DPCM_STATE_PAUSED;
2326 			break;
2327 		}
2328 	}
2329 
2330 	return ret;
2331 }
2332 EXPORT_SYMBOL_GPL(dpcm_be_dai_trigger);
2333 
2334 static int dpcm_dai_trigger_fe_be(struct snd_pcm_substream *substream,
2335 				  int cmd, bool fe_first)
2336 {
2337 	struct snd_soc_pcm_runtime *fe = substream->private_data;
2338 	int ret;
2339 
2340 	/* call trigger on the frontend before the backend. */
2341 	if (fe_first) {
2342 		dev_dbg(fe->dev, "ASoC: pre trigger FE %s cmd %d\n",
2343 			fe->dai_link->name, cmd);
2344 
2345 		ret = soc_pcm_trigger(substream, cmd);
2346 		if (ret < 0)
2347 			return ret;
2348 
2349 		ret = dpcm_be_dai_trigger(fe, substream->stream, cmd);
2350 		return ret;
2351 	}
2352 
2353 	/* call trigger on the frontend after the backend. */
2354 	ret = dpcm_be_dai_trigger(fe, substream->stream, cmd);
2355 	if (ret < 0)
2356 		return ret;
2357 
2358 	dev_dbg(fe->dev, "ASoC: post trigger FE %s cmd %d\n",
2359 		fe->dai_link->name, cmd);
2360 
2361 	ret = soc_pcm_trigger(substream, cmd);
2362 
2363 	return ret;
2364 }
2365 
2366 static int dpcm_fe_dai_do_trigger(struct snd_pcm_substream *substream, int cmd)
2367 {
2368 	struct snd_soc_pcm_runtime *fe = substream->private_data;
2369 	int stream = substream->stream;
2370 	int ret = 0;
2371 	enum snd_soc_dpcm_trigger trigger = fe->dai_link->trigger[stream];
2372 
2373 	fe->dpcm[stream].runtime_update = SND_SOC_DPCM_UPDATE_FE;
2374 
2375 	switch (trigger) {
2376 	case SND_SOC_DPCM_TRIGGER_PRE:
2377 		switch (cmd) {
2378 		case SNDRV_PCM_TRIGGER_START:
2379 		case SNDRV_PCM_TRIGGER_RESUME:
2380 		case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
2381 			ret = dpcm_dai_trigger_fe_be(substream, cmd, true);
2382 			break;
2383 		case SNDRV_PCM_TRIGGER_STOP:
2384 		case SNDRV_PCM_TRIGGER_SUSPEND:
2385 		case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
2386 			ret = dpcm_dai_trigger_fe_be(substream, cmd, false);
2387 			break;
2388 		default:
2389 			ret = -EINVAL;
2390 			break;
2391 		}
2392 		break;
2393 	case SND_SOC_DPCM_TRIGGER_POST:
2394 		switch (cmd) {
2395 		case SNDRV_PCM_TRIGGER_START:
2396 		case SNDRV_PCM_TRIGGER_RESUME:
2397 		case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
2398 			ret = dpcm_dai_trigger_fe_be(substream, cmd, false);
2399 			break;
2400 		case SNDRV_PCM_TRIGGER_STOP:
2401 		case SNDRV_PCM_TRIGGER_SUSPEND:
2402 		case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
2403 			ret = dpcm_dai_trigger_fe_be(substream, cmd, true);
2404 			break;
2405 		default:
2406 			ret = -EINVAL;
2407 			break;
2408 		}
2409 		break;
2410 	case SND_SOC_DPCM_TRIGGER_BESPOKE:
2411 		/* bespoke trigger() - handles both FE and BEs */
2412 
2413 		dev_dbg(fe->dev, "ASoC: bespoke trigger FE %s cmd %d\n",
2414 				fe->dai_link->name, cmd);
2415 
2416 		ret = soc_pcm_bespoke_trigger(substream, cmd);
2417 		break;
2418 	default:
2419 		dev_err(fe->dev, "ASoC: invalid trigger cmd %d for %s\n", cmd,
2420 				fe->dai_link->name);
2421 		ret = -EINVAL;
2422 		goto out;
2423 	}
2424 
2425 	if (ret < 0) {
2426 		dev_err(fe->dev, "ASoC: trigger FE cmd: %d failed: %d\n",
2427 			cmd, ret);
2428 		goto out;
2429 	}
2430 
2431 	switch (cmd) {
2432 	case SNDRV_PCM_TRIGGER_START:
2433 	case SNDRV_PCM_TRIGGER_RESUME:
2434 	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
2435 		fe->dpcm[stream].state = SND_SOC_DPCM_STATE_START;
2436 		break;
2437 	case SNDRV_PCM_TRIGGER_STOP:
2438 	case SNDRV_PCM_TRIGGER_SUSPEND:
2439 		fe->dpcm[stream].state = SND_SOC_DPCM_STATE_STOP;
2440 		break;
2441 	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
2442 		fe->dpcm[stream].state = SND_SOC_DPCM_STATE_PAUSED;
2443 		break;
2444 	}
2445 
2446 out:
2447 	fe->dpcm[stream].runtime_update = SND_SOC_DPCM_UPDATE_NO;
2448 	return ret;
2449 }
2450 
2451 static int dpcm_fe_dai_trigger(struct snd_pcm_substream *substream, int cmd)
2452 {
2453 	struct snd_soc_pcm_runtime *fe = substream->private_data;
2454 	int stream = substream->stream;
2455 
2456 	/* if FE's runtime_update is already set, we're in race;
2457 	 * process this trigger later at exit
2458 	 */
2459 	if (fe->dpcm[stream].runtime_update != SND_SOC_DPCM_UPDATE_NO) {
2460 		fe->dpcm[stream].trigger_pending = cmd + 1;
2461 		return 0; /* delayed, assuming it's successful */
2462 	}
2463 
2464 	/* we're alone, let's trigger */
2465 	return dpcm_fe_dai_do_trigger(substream, cmd);
2466 }
2467 
2468 int dpcm_be_dai_prepare(struct snd_soc_pcm_runtime *fe, int stream)
2469 {
2470 	struct snd_soc_dpcm *dpcm;
2471 	int ret = 0;
2472 
2473 	for_each_dpcm_be(fe, stream, dpcm) {
2474 
2475 		struct snd_soc_pcm_runtime *be = dpcm->be;
2476 		struct snd_pcm_substream *be_substream =
2477 			snd_soc_dpcm_get_substream(be, stream);
2478 
2479 		/* is this op for this BE ? */
2480 		if (!snd_soc_dpcm_be_can_update(fe, be, stream))
2481 			continue;
2482 
2483 		if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_PARAMS) &&
2484 		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_STOP) &&
2485 		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_SUSPEND) &&
2486 		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_PAUSED))
2487 			continue;
2488 
2489 		dev_dbg(be->dev, "ASoC: prepare BE %s\n",
2490 			be->dai_link->name);
2491 
2492 		ret = soc_pcm_prepare(be_substream);
2493 		if (ret < 0) {
2494 			dev_err(be->dev, "ASoC: backend prepare failed %d\n",
2495 				ret);
2496 			break;
2497 		}
2498 
2499 		be->dpcm[stream].state = SND_SOC_DPCM_STATE_PREPARE;
2500 	}
2501 	return ret;
2502 }
2503 
2504 static int dpcm_fe_dai_prepare(struct snd_pcm_substream *substream)
2505 {
2506 	struct snd_soc_pcm_runtime *fe = substream->private_data;
2507 	int stream = substream->stream, ret = 0;
2508 
2509 	mutex_lock_nested(&fe->card->mutex, SND_SOC_CARD_CLASS_RUNTIME);
2510 
2511 	dev_dbg(fe->dev, "ASoC: prepare FE %s\n", fe->dai_link->name);
2512 
2513 	dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_FE);
2514 
2515 	/* there is no point preparing this FE if there are no BEs */
2516 	if (list_empty(&fe->dpcm[stream].be_clients)) {
2517 		dev_err(fe->dev, "ASoC: no backend DAIs enabled for %s\n",
2518 				fe->dai_link->name);
2519 		ret = -EINVAL;
2520 		goto out;
2521 	}
2522 
2523 	ret = dpcm_be_dai_prepare(fe, substream->stream);
2524 	if (ret < 0)
2525 		goto out;
2526 
2527 	/* call prepare on the frontend */
2528 	ret = soc_pcm_prepare(substream);
2529 	if (ret < 0) {
2530 		dev_err(fe->dev,"ASoC: prepare FE %s failed\n",
2531 			fe->dai_link->name);
2532 		goto out;
2533 	}
2534 
2535 	/* run the stream event for each BE */
2536 	dpcm_dapm_stream_event(fe, stream, SND_SOC_DAPM_STREAM_START);
2537 	fe->dpcm[stream].state = SND_SOC_DPCM_STATE_PREPARE;
2538 
2539 out:
2540 	dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_NO);
2541 	mutex_unlock(&fe->card->mutex);
2542 
2543 	return ret;
2544 }
2545 
2546 static int dpcm_run_update_shutdown(struct snd_soc_pcm_runtime *fe, int stream)
2547 {
2548 	struct snd_pcm_substream *substream =
2549 		snd_soc_dpcm_get_substream(fe, stream);
2550 	enum snd_soc_dpcm_trigger trigger = fe->dai_link->trigger[stream];
2551 	int err;
2552 
2553 	dev_dbg(fe->dev, "ASoC: runtime %s close on FE %s\n",
2554 			stream ? "capture" : "playback", fe->dai_link->name);
2555 
2556 	if (trigger == SND_SOC_DPCM_TRIGGER_BESPOKE) {
2557 		/* call bespoke trigger - FE takes care of all BE triggers */
2558 		dev_dbg(fe->dev, "ASoC: bespoke trigger FE %s cmd stop\n",
2559 				fe->dai_link->name);
2560 
2561 		err = soc_pcm_bespoke_trigger(substream, SNDRV_PCM_TRIGGER_STOP);
2562 		if (err < 0)
2563 			dev_err(fe->dev,"ASoC: trigger FE failed %d\n", err);
2564 	} else {
2565 		dev_dbg(fe->dev, "ASoC: trigger FE %s cmd stop\n",
2566 			fe->dai_link->name);
2567 
2568 		err = dpcm_be_dai_trigger(fe, stream, SNDRV_PCM_TRIGGER_STOP);
2569 		if (err < 0)
2570 			dev_err(fe->dev,"ASoC: trigger FE failed %d\n", err);
2571 	}
2572 
2573 	err = dpcm_be_dai_hw_free(fe, stream);
2574 	if (err < 0)
2575 		dev_err(fe->dev,"ASoC: hw_free FE failed %d\n", err);
2576 
2577 	err = dpcm_be_dai_shutdown(fe, stream);
2578 	if (err < 0)
2579 		dev_err(fe->dev,"ASoC: shutdown FE failed %d\n", err);
2580 
2581 	/* run the stream event for each BE */
2582 	dpcm_dapm_stream_event(fe, stream, SND_SOC_DAPM_STREAM_NOP);
2583 
2584 	return 0;
2585 }
2586 
2587 static int dpcm_run_update_startup(struct snd_soc_pcm_runtime *fe, int stream)
2588 {
2589 	struct snd_pcm_substream *substream =
2590 		snd_soc_dpcm_get_substream(fe, stream);
2591 	struct snd_soc_dpcm *dpcm;
2592 	enum snd_soc_dpcm_trigger trigger = fe->dai_link->trigger[stream];
2593 	int ret;
2594 	unsigned long flags;
2595 
2596 	dev_dbg(fe->dev, "ASoC: runtime %s open on FE %s\n",
2597 			stream ? "capture" : "playback", fe->dai_link->name);
2598 
2599 	/* Only start the BE if the FE is ready */
2600 	if (fe->dpcm[stream].state == SND_SOC_DPCM_STATE_HW_FREE ||
2601 		fe->dpcm[stream].state == SND_SOC_DPCM_STATE_CLOSE)
2602 		return -EINVAL;
2603 
2604 	/* startup must always be called for new BEs */
2605 	ret = dpcm_be_dai_startup(fe, stream);
2606 	if (ret < 0)
2607 		goto disconnect;
2608 
2609 	/* keep going if FE state is > open */
2610 	if (fe->dpcm[stream].state == SND_SOC_DPCM_STATE_OPEN)
2611 		return 0;
2612 
2613 	ret = dpcm_be_dai_hw_params(fe, stream);
2614 	if (ret < 0)
2615 		goto close;
2616 
2617 	/* keep going if FE state is > hw_params */
2618 	if (fe->dpcm[stream].state == SND_SOC_DPCM_STATE_HW_PARAMS)
2619 		return 0;
2620 
2621 
2622 	ret = dpcm_be_dai_prepare(fe, stream);
2623 	if (ret < 0)
2624 		goto hw_free;
2625 
2626 	/* run the stream event for each BE */
2627 	dpcm_dapm_stream_event(fe, stream, SND_SOC_DAPM_STREAM_NOP);
2628 
2629 	/* keep going if FE state is > prepare */
2630 	if (fe->dpcm[stream].state == SND_SOC_DPCM_STATE_PREPARE ||
2631 		fe->dpcm[stream].state == SND_SOC_DPCM_STATE_STOP)
2632 		return 0;
2633 
2634 	if (trigger == SND_SOC_DPCM_TRIGGER_BESPOKE) {
2635 		/* call trigger on the frontend - FE takes care of all BE triggers */
2636 		dev_dbg(fe->dev, "ASoC: bespoke trigger FE %s cmd start\n",
2637 				fe->dai_link->name);
2638 
2639 		ret = soc_pcm_bespoke_trigger(substream, SNDRV_PCM_TRIGGER_START);
2640 		if (ret < 0) {
2641 			dev_err(fe->dev,"ASoC: bespoke trigger FE failed %d\n", ret);
2642 			goto hw_free;
2643 		}
2644 	} else {
2645 		dev_dbg(fe->dev, "ASoC: trigger FE %s cmd start\n",
2646 			fe->dai_link->name);
2647 
2648 		ret = dpcm_be_dai_trigger(fe, stream,
2649 					SNDRV_PCM_TRIGGER_START);
2650 		if (ret < 0) {
2651 			dev_err(fe->dev,"ASoC: trigger FE failed %d\n", ret);
2652 			goto hw_free;
2653 		}
2654 	}
2655 
2656 	return 0;
2657 
2658 hw_free:
2659 	dpcm_be_dai_hw_free(fe, stream);
2660 close:
2661 	dpcm_be_dai_shutdown(fe, stream);
2662 disconnect:
2663 	/* disconnect any non started BEs */
2664 	spin_lock_irqsave(&fe->card->dpcm_lock, flags);
2665 	for_each_dpcm_be(fe, stream, dpcm) {
2666 		struct snd_soc_pcm_runtime *be = dpcm->be;
2667 		if (be->dpcm[stream].state != SND_SOC_DPCM_STATE_START)
2668 				dpcm->state = SND_SOC_DPCM_LINK_STATE_FREE;
2669 	}
2670 	spin_unlock_irqrestore(&fe->card->dpcm_lock, flags);
2671 
2672 	return ret;
2673 }
2674 
2675 static int dpcm_run_new_update(struct snd_soc_pcm_runtime *fe, int stream)
2676 {
2677 	int ret;
2678 
2679 	dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_BE);
2680 	ret = dpcm_run_update_startup(fe, stream);
2681 	if (ret < 0)
2682 		dev_err(fe->dev, "ASoC: failed to startup some BEs\n");
2683 	dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_NO);
2684 
2685 	return ret;
2686 }
2687 
2688 static int dpcm_run_old_update(struct snd_soc_pcm_runtime *fe, int stream)
2689 {
2690 	int ret;
2691 
2692 	dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_BE);
2693 	ret = dpcm_run_update_shutdown(fe, stream);
2694 	if (ret < 0)
2695 		dev_err(fe->dev, "ASoC: failed to shutdown some BEs\n");
2696 	dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_NO);
2697 
2698 	return ret;
2699 }
2700 
2701 static int soc_dpcm_fe_runtime_update(struct snd_soc_pcm_runtime *fe, int new)
2702 {
2703 	struct snd_soc_dapm_widget_list *list;
2704 	int count, paths;
2705 
2706 	if (!fe->dai_link->dynamic)
2707 		return 0;
2708 
2709 	/* only check active links */
2710 	if (!fe->cpu_dai->active)
2711 		return 0;
2712 
2713 	/* DAPM sync will call this to update DSP paths */
2714 	dev_dbg(fe->dev, "ASoC: DPCM %s runtime update for FE %s\n",
2715 		new ? "new" : "old", fe->dai_link->name);
2716 
2717 	/* skip if FE doesn't have playback capability */
2718 	if (!snd_soc_dai_stream_valid(fe->cpu_dai,   SNDRV_PCM_STREAM_PLAYBACK) ||
2719 	    !snd_soc_dai_stream_valid(fe->codec_dai, SNDRV_PCM_STREAM_PLAYBACK))
2720 		goto capture;
2721 
2722 	/* skip if FE isn't currently playing */
2723 	if (!fe->cpu_dai->playback_active || !fe->codec_dai->playback_active)
2724 		goto capture;
2725 
2726 	paths = dpcm_path_get(fe, SNDRV_PCM_STREAM_PLAYBACK, &list);
2727 	if (paths < 0) {
2728 		dev_warn(fe->dev, "ASoC: %s no valid %s path\n",
2729 			 fe->dai_link->name,  "playback");
2730 		return paths;
2731 	}
2732 
2733 	/* update any playback paths */
2734 	count = dpcm_process_paths(fe, SNDRV_PCM_STREAM_PLAYBACK, &list, new);
2735 	if (count) {
2736 		if (new)
2737 			dpcm_run_new_update(fe, SNDRV_PCM_STREAM_PLAYBACK);
2738 		else
2739 			dpcm_run_old_update(fe, SNDRV_PCM_STREAM_PLAYBACK);
2740 
2741 		dpcm_clear_pending_state(fe, SNDRV_PCM_STREAM_PLAYBACK);
2742 		dpcm_be_disconnect(fe, SNDRV_PCM_STREAM_PLAYBACK);
2743 	}
2744 
2745 	dpcm_path_put(&list);
2746 
2747 capture:
2748 	/* skip if FE doesn't have capture capability */
2749 	if (!snd_soc_dai_stream_valid(fe->cpu_dai,   SNDRV_PCM_STREAM_CAPTURE) ||
2750 	    !snd_soc_dai_stream_valid(fe->codec_dai, SNDRV_PCM_STREAM_CAPTURE))
2751 		return 0;
2752 
2753 	/* skip if FE isn't currently capturing */
2754 	if (!fe->cpu_dai->capture_active || !fe->codec_dai->capture_active)
2755 		return 0;
2756 
2757 	paths = dpcm_path_get(fe, SNDRV_PCM_STREAM_CAPTURE, &list);
2758 	if (paths < 0) {
2759 		dev_warn(fe->dev, "ASoC: %s no valid %s path\n",
2760 			 fe->dai_link->name,  "capture");
2761 		return paths;
2762 	}
2763 
2764 	/* update any old capture paths */
2765 	count = dpcm_process_paths(fe, SNDRV_PCM_STREAM_CAPTURE, &list, new);
2766 	if (count) {
2767 		if (new)
2768 			dpcm_run_new_update(fe, SNDRV_PCM_STREAM_CAPTURE);
2769 		else
2770 			dpcm_run_old_update(fe, SNDRV_PCM_STREAM_CAPTURE);
2771 
2772 		dpcm_clear_pending_state(fe, SNDRV_PCM_STREAM_CAPTURE);
2773 		dpcm_be_disconnect(fe, SNDRV_PCM_STREAM_CAPTURE);
2774 	}
2775 
2776 	dpcm_path_put(&list);
2777 
2778 	return 0;
2779 }
2780 
2781 /* Called by DAPM mixer/mux changes to update audio routing between PCMs and
2782  * any DAI links.
2783  */
2784 int soc_dpcm_runtime_update(struct snd_soc_card *card)
2785 {
2786 	struct snd_soc_pcm_runtime *fe;
2787 	int ret = 0;
2788 
2789 	mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_RUNTIME);
2790 	/* shutdown all old paths first */
2791 	for_each_card_rtds(card, fe) {
2792 		ret = soc_dpcm_fe_runtime_update(fe, 0);
2793 		if (ret)
2794 			goto out;
2795 	}
2796 
2797 	/* bring new paths up */
2798 	for_each_card_rtds(card, fe) {
2799 		ret = soc_dpcm_fe_runtime_update(fe, 1);
2800 		if (ret)
2801 			goto out;
2802 	}
2803 
2804 out:
2805 	mutex_unlock(&card->mutex);
2806 	return ret;
2807 }
2808 int soc_dpcm_be_digital_mute(struct snd_soc_pcm_runtime *fe, int mute)
2809 {
2810 	struct snd_soc_dpcm *dpcm;
2811 	struct snd_soc_dai *dai;
2812 
2813 	for_each_dpcm_be(fe, SNDRV_PCM_STREAM_PLAYBACK, dpcm) {
2814 
2815 		struct snd_soc_pcm_runtime *be = dpcm->be;
2816 		int i;
2817 
2818 		if (be->dai_link->ignore_suspend)
2819 			continue;
2820 
2821 		for_each_rtd_codec_dai(be, i, dai) {
2822 			struct snd_soc_dai_driver *drv = dai->driver;
2823 
2824 			dev_dbg(be->dev, "ASoC: BE digital mute %s\n",
2825 					 be->dai_link->name);
2826 
2827 			if (drv->ops && drv->ops->digital_mute &&
2828 							dai->playback_active)
2829 				drv->ops->digital_mute(dai, mute);
2830 		}
2831 	}
2832 
2833 	return 0;
2834 }
2835 
2836 static int dpcm_fe_dai_open(struct snd_pcm_substream *fe_substream)
2837 {
2838 	struct snd_soc_pcm_runtime *fe = fe_substream->private_data;
2839 	struct snd_soc_dpcm *dpcm;
2840 	struct snd_soc_dapm_widget_list *list;
2841 	int ret;
2842 	int stream = fe_substream->stream;
2843 
2844 	mutex_lock_nested(&fe->card->mutex, SND_SOC_CARD_CLASS_RUNTIME);
2845 	fe->dpcm[stream].runtime = fe_substream->runtime;
2846 
2847 	ret = dpcm_path_get(fe, stream, &list);
2848 	if (ret < 0) {
2849 		mutex_unlock(&fe->card->mutex);
2850 		return ret;
2851 	} else if (ret == 0) {
2852 		dev_dbg(fe->dev, "ASoC: %s no valid %s route\n",
2853 			fe->dai_link->name, stream ? "capture" : "playback");
2854 	}
2855 
2856 	/* calculate valid and active FE <-> BE dpcms */
2857 	dpcm_process_paths(fe, stream, &list, 1);
2858 
2859 	ret = dpcm_fe_dai_startup(fe_substream);
2860 	if (ret < 0) {
2861 		/* clean up all links */
2862 		for_each_dpcm_be(fe, stream, dpcm)
2863 			dpcm->state = SND_SOC_DPCM_LINK_STATE_FREE;
2864 
2865 		dpcm_be_disconnect(fe, stream);
2866 		fe->dpcm[stream].runtime = NULL;
2867 	}
2868 
2869 	dpcm_clear_pending_state(fe, stream);
2870 	dpcm_path_put(&list);
2871 	mutex_unlock(&fe->card->mutex);
2872 	return ret;
2873 }
2874 
2875 static int dpcm_fe_dai_close(struct snd_pcm_substream *fe_substream)
2876 {
2877 	struct snd_soc_pcm_runtime *fe = fe_substream->private_data;
2878 	struct snd_soc_dpcm *dpcm;
2879 	int stream = fe_substream->stream, ret;
2880 
2881 	mutex_lock_nested(&fe->card->mutex, SND_SOC_CARD_CLASS_RUNTIME);
2882 	ret = dpcm_fe_dai_shutdown(fe_substream);
2883 
2884 	/* mark FE's links ready to prune */
2885 	for_each_dpcm_be(fe, stream, dpcm)
2886 		dpcm->state = SND_SOC_DPCM_LINK_STATE_FREE;
2887 
2888 	dpcm_be_disconnect(fe, stream);
2889 
2890 	fe->dpcm[stream].runtime = NULL;
2891 	mutex_unlock(&fe->card->mutex);
2892 	return ret;
2893 }
2894 
2895 /* create a new pcm */
2896 int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)
2897 {
2898 	struct snd_soc_dai *codec_dai;
2899 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
2900 	struct snd_soc_rtdcom_list *rtdcom;
2901 	struct snd_soc_component *component;
2902 	struct snd_pcm *pcm;
2903 	char new_name[64];
2904 	int ret = 0, playback = 0, capture = 0;
2905 	int i;
2906 
2907 	if (rtd->dai_link->dynamic || rtd->dai_link->no_pcm) {
2908 		playback = rtd->dai_link->dpcm_playback;
2909 		capture = rtd->dai_link->dpcm_capture;
2910 	} else {
2911 		/* Adapt stream for codec2codec links */
2912 		struct snd_soc_pcm_stream *cpu_capture = rtd->dai_link->params ?
2913 			&cpu_dai->driver->playback : &cpu_dai->driver->capture;
2914 		struct snd_soc_pcm_stream *cpu_playback = rtd->dai_link->params ?
2915 			&cpu_dai->driver->capture : &cpu_dai->driver->playback;
2916 
2917 		for_each_rtd_codec_dai(rtd, i, codec_dai) {
2918 			if (snd_soc_dai_stream_valid(codec_dai, SNDRV_PCM_STREAM_PLAYBACK) &&
2919 			    snd_soc_dai_stream_valid(cpu_dai,   SNDRV_PCM_STREAM_PLAYBACK))
2920 				playback = 1;
2921 			if (snd_soc_dai_stream_valid(codec_dai, SNDRV_PCM_STREAM_CAPTURE) &&
2922 			    snd_soc_dai_stream_valid(cpu_dai,   SNDRV_PCM_STREAM_CAPTURE))
2923 				capture = 1;
2924 		}
2925 
2926 		capture = capture && cpu_capture->channels_min;
2927 		playback = playback && cpu_playback->channels_min;
2928 	}
2929 
2930 	if (rtd->dai_link->playback_only) {
2931 		playback = 1;
2932 		capture = 0;
2933 	}
2934 
2935 	if (rtd->dai_link->capture_only) {
2936 		playback = 0;
2937 		capture = 1;
2938 	}
2939 
2940 	/* create the PCM */
2941 	if (rtd->dai_link->params) {
2942 		snprintf(new_name, sizeof(new_name), "codec2codec(%s)",
2943 			 rtd->dai_link->stream_name);
2944 
2945 		ret = snd_pcm_new_internal(rtd->card->snd_card, new_name, num,
2946 					   playback, capture, &pcm);
2947 	} else if (rtd->dai_link->no_pcm) {
2948 		snprintf(new_name, sizeof(new_name), "(%s)",
2949 			rtd->dai_link->stream_name);
2950 
2951 		ret = snd_pcm_new_internal(rtd->card->snd_card, new_name, num,
2952 				playback, capture, &pcm);
2953 	} else {
2954 		if (rtd->dai_link->dynamic)
2955 			snprintf(new_name, sizeof(new_name), "%s (*)",
2956 				rtd->dai_link->stream_name);
2957 		else
2958 			snprintf(new_name, sizeof(new_name), "%s %s-%d",
2959 				rtd->dai_link->stream_name,
2960 				(rtd->num_codecs > 1) ?
2961 				"multicodec" : rtd->codec_dai->name, num);
2962 
2963 		ret = snd_pcm_new(rtd->card->snd_card, new_name, num, playback,
2964 			capture, &pcm);
2965 	}
2966 	if (ret < 0) {
2967 		dev_err(rtd->card->dev, "ASoC: can't create pcm for %s\n",
2968 			rtd->dai_link->name);
2969 		return ret;
2970 	}
2971 	dev_dbg(rtd->card->dev, "ASoC: registered pcm #%d %s\n",num, new_name);
2972 
2973 	/* DAPM dai link stream work */
2974 	if (rtd->dai_link->params)
2975 		rtd->close_delayed_work_func = codec2codec_close_delayed_work;
2976 	else
2977 		rtd->close_delayed_work_func = close_delayed_work;
2978 
2979 	pcm->nonatomic = rtd->dai_link->nonatomic;
2980 	rtd->pcm = pcm;
2981 	pcm->private_data = rtd;
2982 
2983 	if (rtd->dai_link->no_pcm || rtd->dai_link->params) {
2984 		if (playback)
2985 			pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream->private_data = rtd;
2986 		if (capture)
2987 			pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream->private_data = rtd;
2988 		goto out;
2989 	}
2990 
2991 	/* ASoC PCM operations */
2992 	if (rtd->dai_link->dynamic) {
2993 		rtd->ops.open		= dpcm_fe_dai_open;
2994 		rtd->ops.hw_params	= dpcm_fe_dai_hw_params;
2995 		rtd->ops.prepare	= dpcm_fe_dai_prepare;
2996 		rtd->ops.trigger	= dpcm_fe_dai_trigger;
2997 		rtd->ops.hw_free	= dpcm_fe_dai_hw_free;
2998 		rtd->ops.close		= dpcm_fe_dai_close;
2999 		rtd->ops.pointer	= soc_pcm_pointer;
3000 	} else {
3001 		rtd->ops.open		= soc_pcm_open;
3002 		rtd->ops.hw_params	= soc_pcm_hw_params;
3003 		rtd->ops.prepare	= soc_pcm_prepare;
3004 		rtd->ops.trigger	= soc_pcm_trigger;
3005 		rtd->ops.hw_free	= soc_pcm_hw_free;
3006 		rtd->ops.close		= soc_pcm_close;
3007 		rtd->ops.pointer	= soc_pcm_pointer;
3008 	}
3009 
3010 	for_each_rtd_components(rtd, rtdcom, component) {
3011 		const struct snd_soc_component_driver *drv = component->driver;
3012 
3013 		if (drv->ioctl)
3014 			rtd->ops.ioctl		= snd_soc_pcm_component_ioctl;
3015 		if (drv->sync_stop)
3016 			rtd->ops.sync_stop	= snd_soc_pcm_component_sync_stop;
3017 		if (drv->copy_user)
3018 			rtd->ops.copy_user	= snd_soc_pcm_component_copy_user;
3019 		if (drv->page)
3020 			rtd->ops.page		= snd_soc_pcm_component_page;
3021 		if (drv->mmap)
3022 			rtd->ops.mmap		= snd_soc_pcm_component_mmap;
3023 	}
3024 
3025 	if (playback)
3026 		snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &rtd->ops);
3027 
3028 	if (capture)
3029 		snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &rtd->ops);
3030 
3031 	ret = snd_soc_pcm_component_new(rtd);
3032 	if (ret < 0) {
3033 		dev_err(rtd->dev, "ASoC: pcm constructor failed: %d\n", ret);
3034 		return ret;
3035 	}
3036 
3037 	pcm->no_device_suspend = true;
3038 out:
3039 	dev_info(rtd->card->dev, "%s <-> %s mapping ok\n",
3040 		 (rtd->num_codecs > 1) ? "multicodec" : rtd->codec_dai->name,
3041 		 cpu_dai->name);
3042 	return ret;
3043 }
3044 
3045 /* is the current PCM operation for this FE ? */
3046 int snd_soc_dpcm_fe_can_update(struct snd_soc_pcm_runtime *fe, int stream)
3047 {
3048 	if (fe->dpcm[stream].runtime_update == SND_SOC_DPCM_UPDATE_FE)
3049 		return 1;
3050 	return 0;
3051 }
3052 EXPORT_SYMBOL_GPL(snd_soc_dpcm_fe_can_update);
3053 
3054 /* is the current PCM operation for this BE ? */
3055 int snd_soc_dpcm_be_can_update(struct snd_soc_pcm_runtime *fe,
3056 		struct snd_soc_pcm_runtime *be, int stream)
3057 {
3058 	if ((fe->dpcm[stream].runtime_update == SND_SOC_DPCM_UPDATE_FE) ||
3059 	   ((fe->dpcm[stream].runtime_update == SND_SOC_DPCM_UPDATE_BE) &&
3060 		  be->dpcm[stream].runtime_update))
3061 		return 1;
3062 	return 0;
3063 }
3064 EXPORT_SYMBOL_GPL(snd_soc_dpcm_be_can_update);
3065 
3066 /* get the substream for this BE */
3067 struct snd_pcm_substream *
3068 	snd_soc_dpcm_get_substream(struct snd_soc_pcm_runtime *be, int stream)
3069 {
3070 	return be->pcm->streams[stream].substream;
3071 }
3072 EXPORT_SYMBOL_GPL(snd_soc_dpcm_get_substream);
3073 
3074 /* get the BE runtime state */
3075 enum snd_soc_dpcm_state
3076 	snd_soc_dpcm_be_get_state(struct snd_soc_pcm_runtime *be, int stream)
3077 {
3078 	return be->dpcm[stream].state;
3079 }
3080 EXPORT_SYMBOL_GPL(snd_soc_dpcm_be_get_state);
3081 
3082 /* set the BE runtime state */
3083 void snd_soc_dpcm_be_set_state(struct snd_soc_pcm_runtime *be,
3084 		int stream, enum snd_soc_dpcm_state state)
3085 {
3086 	be->dpcm[stream].state = state;
3087 }
3088 EXPORT_SYMBOL_GPL(snd_soc_dpcm_be_set_state);
3089 
3090 /*
3091  * We can only hw_free, stop, pause or suspend a BE DAI if any of it's FE
3092  * are not running, paused or suspended for the specified stream direction.
3093  */
3094 int snd_soc_dpcm_can_be_free_stop(struct snd_soc_pcm_runtime *fe,
3095 		struct snd_soc_pcm_runtime *be, int stream)
3096 {
3097 	struct snd_soc_dpcm *dpcm;
3098 	int state;
3099 	int ret = 1;
3100 	unsigned long flags;
3101 
3102 	spin_lock_irqsave(&fe->card->dpcm_lock, flags);
3103 	for_each_dpcm_fe(be, stream, dpcm) {
3104 
3105 		if (dpcm->fe == fe)
3106 			continue;
3107 
3108 		state = dpcm->fe->dpcm[stream].state;
3109 		if (state == SND_SOC_DPCM_STATE_START ||
3110 			state == SND_SOC_DPCM_STATE_PAUSED ||
3111 			state == SND_SOC_DPCM_STATE_SUSPEND) {
3112 			ret = 0;
3113 			break;
3114 		}
3115 	}
3116 	spin_unlock_irqrestore(&fe->card->dpcm_lock, flags);
3117 
3118 	/* it's safe to free/stop this BE DAI */
3119 	return ret;
3120 }
3121 EXPORT_SYMBOL_GPL(snd_soc_dpcm_can_be_free_stop);
3122 
3123 /*
3124  * We can only change hw params a BE DAI if any of it's FE are not prepared,
3125  * running, paused or suspended for the specified stream direction.
3126  */
3127 int snd_soc_dpcm_can_be_params(struct snd_soc_pcm_runtime *fe,
3128 		struct snd_soc_pcm_runtime *be, int stream)
3129 {
3130 	struct snd_soc_dpcm *dpcm;
3131 	int state;
3132 	int ret = 1;
3133 	unsigned long flags;
3134 
3135 	spin_lock_irqsave(&fe->card->dpcm_lock, flags);
3136 	for_each_dpcm_fe(be, stream, dpcm) {
3137 
3138 		if (dpcm->fe == fe)
3139 			continue;
3140 
3141 		state = dpcm->fe->dpcm[stream].state;
3142 		if (state == SND_SOC_DPCM_STATE_START ||
3143 			state == SND_SOC_DPCM_STATE_PAUSED ||
3144 			state == SND_SOC_DPCM_STATE_SUSPEND ||
3145 			state == SND_SOC_DPCM_STATE_PREPARE) {
3146 			ret = 0;
3147 			break;
3148 		}
3149 	}
3150 	spin_unlock_irqrestore(&fe->card->dpcm_lock, flags);
3151 
3152 	/* it's safe to change hw_params */
3153 	return ret;
3154 }
3155 EXPORT_SYMBOL_GPL(snd_soc_dpcm_can_be_params);
3156 
3157 #ifdef CONFIG_DEBUG_FS
3158 static const char *dpcm_state_string(enum snd_soc_dpcm_state state)
3159 {
3160 	switch (state) {
3161 	case SND_SOC_DPCM_STATE_NEW:
3162 		return "new";
3163 	case SND_SOC_DPCM_STATE_OPEN:
3164 		return "open";
3165 	case SND_SOC_DPCM_STATE_HW_PARAMS:
3166 		return "hw_params";
3167 	case SND_SOC_DPCM_STATE_PREPARE:
3168 		return "prepare";
3169 	case SND_SOC_DPCM_STATE_START:
3170 		return "start";
3171 	case SND_SOC_DPCM_STATE_STOP:
3172 		return "stop";
3173 	case SND_SOC_DPCM_STATE_SUSPEND:
3174 		return "suspend";
3175 	case SND_SOC_DPCM_STATE_PAUSED:
3176 		return "paused";
3177 	case SND_SOC_DPCM_STATE_HW_FREE:
3178 		return "hw_free";
3179 	case SND_SOC_DPCM_STATE_CLOSE:
3180 		return "close";
3181 	}
3182 
3183 	return "unknown";
3184 }
3185 
3186 static ssize_t dpcm_show_state(struct snd_soc_pcm_runtime *fe,
3187 				int stream, char *buf, size_t size)
3188 {
3189 	struct snd_pcm_hw_params *params = &fe->dpcm[stream].hw_params;
3190 	struct snd_soc_dpcm *dpcm;
3191 	ssize_t offset = 0;
3192 	unsigned long flags;
3193 
3194 	/* FE state */
3195 	offset += snprintf(buf + offset, size - offset,
3196 			"[%s - %s]\n", fe->dai_link->name,
3197 			stream ? "Capture" : "Playback");
3198 
3199 	offset += snprintf(buf + offset, size - offset, "State: %s\n",
3200 	                dpcm_state_string(fe->dpcm[stream].state));
3201 
3202 	if ((fe->dpcm[stream].state >= SND_SOC_DPCM_STATE_HW_PARAMS) &&
3203 	    (fe->dpcm[stream].state <= SND_SOC_DPCM_STATE_STOP))
3204 		offset += snprintf(buf + offset, size - offset,
3205 				"Hardware Params: "
3206 				"Format = %s, Channels = %d, Rate = %d\n",
3207 				snd_pcm_format_name(params_format(params)),
3208 				params_channels(params),
3209 				params_rate(params));
3210 
3211 	/* BEs state */
3212 	offset += snprintf(buf + offset, size - offset, "Backends:\n");
3213 
3214 	if (list_empty(&fe->dpcm[stream].be_clients)) {
3215 		offset += snprintf(buf + offset, size - offset,
3216 				" No active DSP links\n");
3217 		goto out;
3218 	}
3219 
3220 	spin_lock_irqsave(&fe->card->dpcm_lock, flags);
3221 	for_each_dpcm_be(fe, stream, dpcm) {
3222 		struct snd_soc_pcm_runtime *be = dpcm->be;
3223 		params = &dpcm->hw_params;
3224 
3225 		offset += snprintf(buf + offset, size - offset,
3226 				"- %s\n", be->dai_link->name);
3227 
3228 		offset += snprintf(buf + offset, size - offset,
3229 				"   State: %s\n",
3230 				dpcm_state_string(be->dpcm[stream].state));
3231 
3232 		if ((be->dpcm[stream].state >= SND_SOC_DPCM_STATE_HW_PARAMS) &&
3233 		    (be->dpcm[stream].state <= SND_SOC_DPCM_STATE_STOP))
3234 			offset += snprintf(buf + offset, size - offset,
3235 				"   Hardware Params: "
3236 				"Format = %s, Channels = %d, Rate = %d\n",
3237 				snd_pcm_format_name(params_format(params)),
3238 				params_channels(params),
3239 				params_rate(params));
3240 	}
3241 	spin_unlock_irqrestore(&fe->card->dpcm_lock, flags);
3242 out:
3243 	return offset;
3244 }
3245 
3246 static ssize_t dpcm_state_read_file(struct file *file, char __user *user_buf,
3247 				size_t count, loff_t *ppos)
3248 {
3249 	struct snd_soc_pcm_runtime *fe = file->private_data;
3250 	ssize_t out_count = PAGE_SIZE, offset = 0, ret = 0;
3251 	char *buf;
3252 
3253 	buf = kmalloc(out_count, GFP_KERNEL);
3254 	if (!buf)
3255 		return -ENOMEM;
3256 
3257 	if (snd_soc_dai_stream_valid(fe->cpu_dai, SNDRV_PCM_STREAM_PLAYBACK))
3258 		offset += dpcm_show_state(fe, SNDRV_PCM_STREAM_PLAYBACK,
3259 					buf + offset, out_count - offset);
3260 
3261 	if (snd_soc_dai_stream_valid(fe->cpu_dai, SNDRV_PCM_STREAM_CAPTURE))
3262 		offset += dpcm_show_state(fe, SNDRV_PCM_STREAM_CAPTURE,
3263 					buf + offset, out_count - offset);
3264 
3265 	ret = simple_read_from_buffer(user_buf, count, ppos, buf, offset);
3266 
3267 	kfree(buf);
3268 	return ret;
3269 }
3270 
3271 static const struct file_operations dpcm_state_fops = {
3272 	.open = simple_open,
3273 	.read = dpcm_state_read_file,
3274 	.llseek = default_llseek,
3275 };
3276 
3277 void soc_dpcm_debugfs_add(struct snd_soc_pcm_runtime *rtd)
3278 {
3279 	if (!rtd->dai_link)
3280 		return;
3281 
3282 	if (!rtd->dai_link->dynamic)
3283 		return;
3284 
3285 	if (!rtd->card->debugfs_card_root)
3286 		return;
3287 
3288 	rtd->debugfs_dpcm_root = debugfs_create_dir(rtd->dai_link->name,
3289 			rtd->card->debugfs_card_root);
3290 
3291 	debugfs_create_file("state", 0444, rtd->debugfs_dpcm_root,
3292 			    rtd, &dpcm_state_fops);
3293 }
3294 #endif
3295