diff options
Diffstat (limited to 'sound/soc/soc-dapm.c')
| -rw-r--r-- | sound/soc/soc-dapm.c | 14 | 
1 files changed, 14 insertions, 0 deletions
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index 1d6a9b3ceb2..d6d9ba2e691 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -831,6 +831,9 @@ static int is_connected_output_ep(struct snd_soc_dapm_widget *widget,  		if (path->weak)  			continue; +		if (path->walking) +			return 1; +  		if (path->walked)  			continue; @@ -838,6 +841,7 @@ static int is_connected_output_ep(struct snd_soc_dapm_widget *widget,  		if (path->sink && path->connect) {  			path->walked = 1; +			path->walking = 1;  			/* do we need to add this widget to the list ? */  			if (list) { @@ -847,11 +851,14 @@ static int is_connected_output_ep(struct snd_soc_dapm_widget *widget,  					dev_err(widget->dapm->dev,  						"ASoC: could not add widget %s\n",  						widget->name); +					path->walking = 0;  					return con;  				}  			}  			con += is_connected_output_ep(path->sink, list); + +			path->walking = 0;  		}  	} @@ -931,6 +938,9 @@ static int is_connected_input_ep(struct snd_soc_dapm_widget *widget,  		if (path->weak)  			continue; +		if (path->walking) +			return 1; +  		if (path->walked)  			continue; @@ -938,6 +948,7 @@ static int is_connected_input_ep(struct snd_soc_dapm_widget *widget,  		if (path->source && path->connect) {  			path->walked = 1; +			path->walking = 1;  			/* do we need to add this widget to the list ? */  			if (list) { @@ -947,11 +958,14 @@ static int is_connected_input_ep(struct snd_soc_dapm_widget *widget,  					dev_err(widget->dapm->dev,  						"ASoC: could not add widget %s\n",  						widget->name); +					path->walking = 0;  					return con;  				}  			}  			con += is_connected_input_ep(path->source, list); + +			path->walking = 0;  		}  	}  |