int snd_soc_dapm_add_routes(struct snd_soc_dapm_context *dapm, const struct snd_soc_dapm_route *route, int num){int i, r, ret = 0;mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_INIT);for (i = 0; i < num; i++) {r = snd_soc_dapm_add_route(dapm, route);if (r < 0) {dev_err(dapm->dev, "ASoC: Failed to add route %s -> %s -> %s\n",route->source,route->control ? route->control : "direct",route->sink);ret = r;}route++;}mutex_unlock(&dapm->card->dapm_mutex);return ret;}int snd_soc_dapm_add_routes(struct snd_soc_dapm_context *dapm, const struct snd_soc_dapm_route *route, int num){int i, r, ret = 0;mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_INIT);for (i = 0; i < num; i++) {r = snd_soc_dapm_add_route(dapm, route);if (r < 0) {dev_err(dapm->dev, "ASoC: Failed to add route %s -> %s -> %s\n",route->source,route->control ? route->control : "direct",route->sink);ret = r;}route++;}mutex_unlock(&dapm->card->dapm_mutex);return ret;}
写几句static int fe_dai_probe(struct snd_soc_dai *dai){struct snd_soc_dapm_route intercon;if (!dai || !dai->driver) {pr_err("%s invalid params\n", __func__);return -EINVAL;}memset(&intercon, 0 , sizeof(intercon));if (dai->driver->playback.stream_name &&dai->driver->playback.aif_name) {dev_dbg(dai->dev, "%s add route for widget %s", __func__, dai->driver->playback.stream_name);intercon.source = dai->driver->playback.stream_name;intercon.sink = dai->driver->playback.aif_name;dev_dbg(dai->dev, "%s src %s sink %s\n", __func__, intercon.source, intercon.sink);snd_soc_dapm_add_routes(&dai->dapm, &intercon, 1);}if (dai->driver->capture.stream_name && dai->driver->capture.aif_name) {dev_dbg(dai->dev, "%s add route for widget %s", __func__, dai->driver->capture.stream_name);intercon.sink = dai->driver->capture.stream_name;intercon.source = dai->driver->capture.aif_name;dev_dbg(dai->dev, "%s src %s sink %s\n", __func__, intercon.source, intercon.sink);snd_soc_dapm_add_routes(&dai->dapm, &intercon, 1);}return 0;}