ASoC: soc-pcm: add for_each_dapm_widgets() macro
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Mon, 10 Feb 2020 03:14:22 +0000 (12:14 +0900)
committerMark Brown <broonie@kernel.org>
Tue, 11 Feb 2020 15:41:16 +0000 (15:41 +0000)
This patch adds new for_each_dapm_widgets() macro and use it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Link: https://lore.kernel.org/r/878slbceyg.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/soc-dapm.h
sound/soc/soc-dapm.c
sound/soc/soc-pcm.c

index 2a306c6..9439e75 100644 (file)
@@ -693,6 +693,11 @@ struct snd_soc_dapm_widget_list {
        struct snd_soc_dapm_widget *widgets[0];
 };
 
+#define for_each_dapm_widgets(list, i, widget)                         \
+       for ((i) = 0;                                                   \
+            (i) < list->num_widgets && (widget = list->widgets[i]);    \
+            (i)++)
+
 struct snd_soc_dapm_stats {
        int power_checks;
        int path_checks;
index bc20ad9..cc17a37 100644 (file)
@@ -1724,9 +1724,7 @@ static void dapm_widget_update(struct snd_soc_card *card)
 
        wlist = dapm_kcontrol_get_wlist(update->kcontrol);
 
-       for (wi = 0; wi < wlist->num_widgets; wi++) {
-               w = wlist->widgets[wi];
-
+       for_each_dapm_widgets(wlist, wi, w) {
                if (w->event && (w->event_flags & SND_SOC_DAPM_PRE_REG)) {
                        ret = w->event(w, update->kcontrol, SND_SOC_DAPM_PRE_REG);
                        if (ret != 0)
@@ -1753,9 +1751,7 @@ static void dapm_widget_update(struct snd_soc_card *card)
                                w->name, ret);
        }
 
-       for (wi = 0; wi < wlist->num_widgets; wi++) {
-               w = wlist->widgets[wi];
-
+       for_each_dapm_widgets(wlist, wi, w) {
                if (w->event && (w->event_flags & SND_SOC_DAPM_POST_REG)) {
                        ret = w->event(w, update->kcontrol, SND_SOC_DAPM_POST_REG);
                        if (ret != 0)
index 2a4f7ac..7a490c0 100644 (file)
@@ -1306,12 +1306,12 @@ static inline struct snd_soc_dapm_widget *
 static int widget_in_list(struct snd_soc_dapm_widget_list *list,
                struct snd_soc_dapm_widget *widget)
 {
+       struct snd_soc_dapm_widget *w;
        int i;
 
-       for (i = 0; i < list->num_widgets; i++) {
-               if (widget == list->widgets[i])
+       for_each_dapm_widgets(list, i, w)
+               if (widget == w)
                        return 1;
-       }
 
        return 0;
 }
@@ -1422,12 +1422,13 @@ static int dpcm_add_paths(struct snd_soc_pcm_runtime *fe, int stream,
        struct snd_soc_card *card = fe->card;
        struct snd_soc_dapm_widget_list *list = *list_;
        struct snd_soc_pcm_runtime *be;
+       struct snd_soc_dapm_widget *widget;
        int i, new = 0, err;
 
        /* Create any new FE <--> BE connections */
-       for (i = 0; i < list->num_widgets; i++) {
+       for_each_dapm_widgets(list, i, widget) {
 
-               switch (list->widgets[i]->id) {
+               switch (widget->id) {
                case snd_soc_dapm_dai_in:
                        if (stream != SNDRV_PCM_STREAM_PLAYBACK)
                                continue;
@@ -1441,10 +1442,10 @@ static int dpcm_add_paths(struct snd_soc_pcm_runtime *fe, int stream,
                }
 
                /* is there a valid BE rtd for this widget */
-               be = dpcm_get_be(card, list->widgets[i], stream);
+               be = dpcm_get_be(card, widget, stream);
                if (!be) {
                        dev_err(fe->dev, "ASoC: no BE found for %s\n",
-                                       list->widgets[i]->name);
+                                       widget->name);
                        continue;
                }
 
@@ -1460,7 +1461,7 @@ static int dpcm_add_paths(struct snd_soc_pcm_runtime *fe, int stream,
                err = dpcm_be_connect(fe, be, stream);
                if (err < 0) {
                        dev_err(fe->dev, "ASoC: can't connect %s\n",
-                               list->widgets[i]->name);
+                               widget->name);
                        break;
                } else if (err == 0) /* already connected */
                        continue;