ASoC: wm0010: fix error path
authorSudip Mukherjee <sudipm.mukherjee@gmail.com>
Fri, 18 Sep 2015 10:32:21 +0000 (16:02 +0530)
committerMark Brown <broonie@kernel.org>
Sat, 19 Sep 2015 15:40:55 +0000 (08:40 -0700)
Fix the error path so that we can free the allocated memory on the error
path instead of releasing them individually on each error.

Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
Acked-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/wm0010.c

index 7a1bc40538ca5ad1c9c70e93f3c0d3fd362504c5..76b2f88d9d9b76014601616ea853aa882c3ffdce 100644 (file)
@@ -663,10 +663,8 @@ static int wm0010_boot(struct snd_soc_codec *codec)
                }
 
                img_swap = kzalloc(len, GFP_KERNEL | GFP_DMA);
-               if (!img_swap) {
-                       kfree(out);
-                       goto abort;
-               }
+               if (!img_swap)
+                       goto abort_out;
 
                /* We need to re-order for 0010 */
                byte_swap_64((u64 *)&pll_rec, img_swap, len);
@@ -681,20 +679,16 @@ static int wm0010_boot(struct snd_soc_codec *codec)
                spi_message_add_tail(&t, &m);
 
                ret = spi_sync(spi, &m);
-               if (ret != 0) {
+               if (ret) {
                        dev_err(codec->dev, "First PLL write failed: %d\n", ret);
-                       kfree(img_swap);
-                       kfree(out);
-                       goto abort;
+                       goto abort_swap;
                }
 
                /* Use a second send of the message to get the return status */
                ret = spi_sync(spi, &m);
-               if (ret != 0) {
+               if (ret) {
                        dev_err(codec->dev, "Second PLL write failed: %d\n", ret);
-                       kfree(img_swap);
-                       kfree(out);
-                       goto abort;
+                       goto abort_swap;
                }
 
                p = (u32 *)out;
@@ -727,6 +721,10 @@ static int wm0010_boot(struct snd_soc_codec *codec)
 
        return 0;
 
+abort_swap:
+       kfree(img_swap);
+abort_out:
+       kfree(out);
 abort:
        /* Put the chip back into reset */
        wm0010_halt(codec);