Commit a36b3240 authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branch 'asoc/fix/dapm' into asoc-next

parents 23af7b0b 7f08a898
...@@ -488,6 +488,7 @@ struct snd_soc_dapm_path { ...@@ -488,6 +488,7 @@ struct snd_soc_dapm_path {
/* status */ /* status */
u32 connect:1; /* source and sink widgets are connected */ u32 connect:1; /* source and sink widgets are connected */
u32 walked:1; /* path has been walked */ u32 walked:1; /* path has been walked */
u32 walking:1; /* path is in the process of being walked */
u32 weak:1; /* path ignored for power management */ u32 weak:1; /* path ignored for power management */
int (*connected)(struct snd_soc_dapm_widget *source, int (*connected)(struct snd_soc_dapm_widget *source,
......
...@@ -831,6 +831,9 @@ static int is_connected_output_ep(struct snd_soc_dapm_widget *widget, ...@@ -831,6 +831,9 @@ static int is_connected_output_ep(struct snd_soc_dapm_widget *widget,
if (path->weak) if (path->weak)
continue; continue;
if (path->walking)
return 1;
if (path->walked) if (path->walked)
continue; continue;
...@@ -838,6 +841,7 @@ static int is_connected_output_ep(struct snd_soc_dapm_widget *widget, ...@@ -838,6 +841,7 @@ static int is_connected_output_ep(struct snd_soc_dapm_widget *widget,
if (path->sink && path->connect) { if (path->sink && path->connect) {
path->walked = 1; path->walked = 1;
path->walking = 1;
/* do we need to add this widget to the list ? */ /* do we need to add this widget to the list ? */
if (list) { if (list) {
...@@ -847,11 +851,14 @@ static int is_connected_output_ep(struct snd_soc_dapm_widget *widget, ...@@ -847,11 +851,14 @@ static int is_connected_output_ep(struct snd_soc_dapm_widget *widget,
dev_err(widget->dapm->dev, dev_err(widget->dapm->dev,
"ASoC: could not add widget %s\n", "ASoC: could not add widget %s\n",
widget->name); widget->name);
path->walking = 0;
return con; return con;
} }
} }
con += is_connected_output_ep(path->sink, list); 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, ...@@ -931,6 +938,9 @@ static int is_connected_input_ep(struct snd_soc_dapm_widget *widget,
if (path->weak) if (path->weak)
continue; continue;
if (path->walking)
return 1;
if (path->walked) if (path->walked)
continue; continue;
...@@ -938,6 +948,7 @@ static int is_connected_input_ep(struct snd_soc_dapm_widget *widget, ...@@ -938,6 +948,7 @@ static int is_connected_input_ep(struct snd_soc_dapm_widget *widget,
if (path->source && path->connect) { if (path->source && path->connect) {
path->walked = 1; path->walked = 1;
path->walking = 1;
/* do we need to add this widget to the list ? */ /* do we need to add this widget to the list ? */
if (list) { if (list) {
...@@ -947,11 +958,14 @@ static int is_connected_input_ep(struct snd_soc_dapm_widget *widget, ...@@ -947,11 +958,14 @@ static int is_connected_input_ep(struct snd_soc_dapm_widget *widget,
dev_err(widget->dapm->dev, dev_err(widget->dapm->dev,
"ASoC: could not add widget %s\n", "ASoC: could not add widget %s\n",
widget->name); widget->name);
path->walking = 0;
return con; return con;
} }
} }
con += is_connected_input_ep(path->source, list); con += is_connected_input_ep(path->source, list);
path->walking = 0;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment