ASoC: dapm: Change prototype of soc_widget_read
authorArun Shamanna Lakshmi <aruns@nvidia.com>
Tue, 14 Jan 2014 23:31:54 +0000 (15:31 -0800)
committerMark Brown <broonie@linaro.org>
Wed, 15 Jan 2014 11:43:27 +0000 (11:43 +0000)
soc_widget_read API returns the register data and it is possible
that a register can contain 0xffffffff. Thus, change the prototype
of soc_widget_read to return only the error code and pass the reg
data through pointer argument.

Signed-off-by: Arun Shamanna Lakshmi <aruns@nvidia.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
sound/soc/soc-dapm.c

index 51b4c192f41a2a6f1b2fadadaca2ac0f41ab6418..2a44fe9122a2bf5ab0a4a0f6fc91b0c3cc510ff2 100644 (file)
@@ -371,12 +371,16 @@ static void dapm_reset(struct snd_soc_card *card)
        }
 }
 
-static int soc_widget_read(struct snd_soc_dapm_widget *w, int reg)
+static int soc_widget_read(struct snd_soc_dapm_widget *w, int reg,
+       unsigned int *value)
 {
-       if (w->codec)
-               return snd_soc_read(w->codec, reg);
-       else if (w->platform)
-               return snd_soc_platform_read(w->platform, reg);
+       if (w->codec) {
+               *value = snd_soc_read(w->codec, reg);
+               return 0;
+       } else if (w->platform) {
+               *value = snd_soc_platform_read(w->platform, reg);
+               return 0;
+       }
 
        dev_err(w->dapm->dev, "ASoC: no valid widget read method\n");
        return -1;
@@ -430,13 +434,12 @@ static int soc_widget_update_bits_locked(struct snd_soc_dapm_widget *w,
                        return ret;
        } else {
                soc_widget_lock(w);
-               ret = soc_widget_read(w, reg);
+               ret = soc_widget_read(w, reg, &old);
                if (ret < 0) {
                        soc_widget_unlock(w);
                        return ret;
                }
 
-               old = ret;
                new = (old & ~mask) | (value & mask);
                change = old != new;
                if (change) {
@@ -513,7 +516,7 @@ static void dapm_set_path_status(struct snd_soc_dapm_widget *w,
                unsigned int invert = mc->invert;
 
                if (reg != SND_SOC_NOPM) {
-                       val = soc_widget_read(w, reg);
+                       soc_widget_read(w, reg, &val);
                        val = (val >> shift) & mask;
                        if (invert)
                                val = max - val;
@@ -529,7 +532,7 @@ static void dapm_set_path_status(struct snd_soc_dapm_widget *w,
                        w->kcontrol_news[i].private_value;
                int val, item;
 
-               val = soc_widget_read(w, e->reg);
+               soc_widget_read(w, e->reg, &val);
                item = (val >> e->shift_l) & e->mask;
 
                if (item < e->max && !strcmp(p->name, e->texts[item]))
@@ -558,7 +561,7 @@ static void dapm_set_path_status(struct snd_soc_dapm_widget *w,
                        w->kcontrol_news[i].private_value;
                int val, item;
 
-               val = soc_widget_read(w, e->reg);
+               soc_widget_read(w, e->reg, &val);
                val = (val >> e->shift_l) & e->mask;
                for (item = 0; item < e->max; item++) {
                        if (val == e->values[item])
@@ -2782,7 +2785,8 @@ int snd_soc_dapm_new_widgets(struct snd_soc_card *card)
 
                /* Read the initial power state from the device */
                if (w->reg >= 0) {
-                       val = soc_widget_read(w, w->reg) >> w->shift;
+                       soc_widget_read(w, w->reg, &val);
+                       val = val >> w->shift;
                        val &= w->mask;
                        if (val == w->on_val)
                                w->power = 1;