ASoC: ad1980: Replace goto loop with do-while loop
authorLars-Peter Clausen <lars@metafoo.de>
Tue, 20 May 2014 12:23:10 +0000 (14:23 +0200)
committerMark Brown <broonie@linaro.org>
Tue, 20 May 2014 21:53:36 +0000 (22:53 +0100)
Using a proper do-while loop here instead of a open-coded goto loop is both
cleaner and shorter.

Also fixes the following warnings from smatch:
sound/soc/codecs/ad1980.c:213 ad1980_reset() info: loop could be replaced with if statement.
sound/soc/codecs/ad1980.c:212 ad1980_reset() info: ignoring unreachable code.
sound/soc/codecs/ad1980.c:215 ad1980_reset() info: ignoring unreachable code.

While we are at it also change retry_cnt to unsigned int, using u16 for a
on-stack loop counter doesn't make that much sense.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
sound/soc/codecs/ad1980.c

index 34d965a..304d300 100644 (file)
@@ -189,28 +189,27 @@ static struct snd_soc_dai_driver ad1980_dai = {
 
 static int ad1980_reset(struct snd_soc_codec *codec, int try_warm)
 {
-       u16 retry_cnt = 0;
+       unsigned int retry_cnt = 0;
 
-retry:
-       if (try_warm && soc_ac97_ops->warm_reset) {
-               soc_ac97_ops->warm_reset(codec->ac97);
-               if (ac97_read(codec, AC97_RESET) == 0x0090)
-                       return 1;
-       }
-
-       soc_ac97_ops->reset(codec->ac97);
-       /* Set bit 16slot in register 74h, then every slot will has only 16
-        * bits. This command is sent out in 20bit mode, in which case the
-        * first nibble of data is eaten by the addr. (Tag is always 16 bit)*/
-       ac97_write(codec, AC97_AD_SERIAL_CFG, 0x9900);
-
-       if (ac97_read(codec, AC97_RESET)  != 0x0090)
-               goto err;
-       return 0;
+       do {
+               if (try_warm && soc_ac97_ops->warm_reset) {
+                       soc_ac97_ops->warm_reset(codec->ac97);
+                       if (ac97_read(codec, AC97_RESET) == 0x0090)
+                               return 1;
+               }
 
-err:
-       while (retry_cnt++ < 10)
-               goto retry;
+               soc_ac97_ops->reset(codec->ac97);
+               /*
+                * Set bit 16slot in register 74h, then every slot will has only
+                * 16 bits. This command is sent out in 20bit mode, in which
+                * case the first nibble of data is eaten by the addr. (Tag is
+                * always 16 bit)
+                */
+               ac97_write(codec, AC97_AD_SERIAL_CFG, 0x9900);
+
+               if (ac97_read(codec, AC97_RESET)  == 0x0090)
+                       return 0;
+       } while (retry_cnt++ < 10);
 
        printk(KERN_ERR "AD1980 AC97 reset failed\n");
        return -EIO;