diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/soc/soc-dapm.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index 258acadb9e7d..f3255517de79 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c | |||
@@ -821,6 +821,7 @@ static int is_connected_output_ep(struct snd_soc_dapm_widget *widget, | |||
821 | (widget->id == snd_soc_dapm_line && | 821 | (widget->id == snd_soc_dapm_line && |
822 | !list_empty(&widget->sources))) { | 822 | !list_empty(&widget->sources))) { |
823 | widget->outputs = snd_soc_dapm_suspend_check(widget); | 823 | widget->outputs = snd_soc_dapm_suspend_check(widget); |
824 | path->walking = 0; | ||
824 | return widget->outputs; | 825 | return widget->outputs; |
825 | } | 826 | } |
826 | } | 827 | } |
@@ -831,6 +832,9 @@ static int is_connected_output_ep(struct snd_soc_dapm_widget *widget, | |||
831 | if (path->weak) | 832 | if (path->weak) |
832 | continue; | 833 | continue; |
833 | 834 | ||
835 | if (path->walking) | ||
836 | return 1; | ||
837 | |||
834 | if (path->walked) | 838 | if (path->walked) |
835 | continue; | 839 | continue; |
836 | 840 | ||
@@ -838,6 +842,7 @@ static int is_connected_output_ep(struct snd_soc_dapm_widget *widget, | |||
838 | 842 | ||
839 | if (path->sink && path->connect) { | 843 | if (path->sink && path->connect) { |
840 | path->walked = 1; | 844 | path->walked = 1; |
845 | path->walking = 1; | ||
841 | 846 | ||
842 | /* do we need to add this widget to the list ? */ | 847 | /* do we need to add this widget to the list ? */ |
843 | if (list) { | 848 | if (list) { |
@@ -847,11 +852,14 @@ static int is_connected_output_ep(struct snd_soc_dapm_widget *widget, | |||
847 | dev_err(widget->dapm->dev, | 852 | dev_err(widget->dapm->dev, |
848 | "ASoC: could not add widget %s\n", | 853 | "ASoC: could not add widget %s\n", |
849 | widget->name); | 854 | widget->name); |
855 | path->walking = 0; | ||
850 | return con; | 856 | return con; |
851 | } | 857 | } |
852 | } | 858 | } |
853 | 859 | ||
854 | con += is_connected_output_ep(path->sink, list); | 860 | con += is_connected_output_ep(path->sink, list); |
861 | |||
862 | path->walking = 0; | ||
855 | } | 863 | } |
856 | } | 864 | } |
857 | 865 | ||
@@ -931,6 +939,9 @@ static int is_connected_input_ep(struct snd_soc_dapm_widget *widget, | |||
931 | if (path->weak) | 939 | if (path->weak) |
932 | continue; | 940 | continue; |
933 | 941 | ||
942 | if (path->walking) | ||
943 | return 1; | ||
944 | |||
934 | if (path->walked) | 945 | if (path->walked) |
935 | continue; | 946 | continue; |
936 | 947 | ||
@@ -938,6 +949,7 @@ static int is_connected_input_ep(struct snd_soc_dapm_widget *widget, | |||
938 | 949 | ||
939 | if (path->source && path->connect) { | 950 | if (path->source && path->connect) { |
940 | path->walked = 1; | 951 | path->walked = 1; |
952 | path->walking = 1; | ||
941 | 953 | ||
942 | /* do we need to add this widget to the list ? */ | 954 | /* do we need to add this widget to the list ? */ |
943 | if (list) { | 955 | if (list) { |
@@ -947,11 +959,14 @@ static int is_connected_input_ep(struct snd_soc_dapm_widget *widget, | |||
947 | dev_err(widget->dapm->dev, | 959 | dev_err(widget->dapm->dev, |
948 | "ASoC: could not add widget %s\n", | 960 | "ASoC: could not add widget %s\n", |
949 | widget->name); | 961 | widget->name); |
962 | path->walking = 0; | ||
950 | return con; | 963 | return con; |
951 | } | 964 | } |
952 | } | 965 | } |
953 | 966 | ||
954 | con += is_connected_input_ep(path->source, list); | 967 | con += is_connected_input_ep(path->source, list); |
968 | |||
969 | path->walking = 0; | ||
955 | } | 970 | } |
956 | } | 971 | } |
957 | 972 | ||