struct wm8995_priv *wm8995;
        int ret;
 
-       wm8995 = kzalloc(sizeof *wm8995, GFP_KERNEL);
+       wm8995 = devm_kzalloc(&spi->dev, sizeof(*wm8995), GFP_KERNEL);
        if (!wm8995)
                return -ENOMEM;
 
        if (IS_ERR(wm8995->regmap)) {
                ret = PTR_ERR(wm8995->regmap);
                dev_err(&spi->dev, "Failed to register regmap: %d\n", ret);
-               goto err_alloc;
+               return ret;
        }
 
        ret = snd_soc_register_codec(&spi->dev,
 
 err_regmap:
        regmap_exit(wm8995->regmap);
-err_alloc:
-       kfree(wm8995);
 
        return ret;
 }
        struct wm8995_priv *wm8995 = spi_get_drvdata(spi);
        snd_soc_unregister_codec(&spi->dev);
        regmap_exit(wm8995->regmap);
-       kfree(wm8995);
        return 0;
 }
 
        struct wm8995_priv *wm8995;
        int ret;
 
-       wm8995 = kzalloc(sizeof *wm8995, GFP_KERNEL);
+       wm8995 = devm_kzalloc(&i2c->dev, sizeof(*wm8995), GFP_KERNEL);
        if (!wm8995)
                return -ENOMEM;
 
        if (IS_ERR(wm8995->regmap)) {
                ret = PTR_ERR(wm8995->regmap);
                dev_err(&i2c->dev, "Failed to register regmap: %d\n", ret);
-               goto err_alloc;
+               return ret;
        }
 
        ret = snd_soc_register_codec(&i2c->dev,
 
 err_regmap:
        regmap_exit(wm8995->regmap);
-err_alloc:
-       kfree(wm8995);
 
        return ret;
 }
 
        snd_soc_unregister_codec(&client->dev);
        regmap_exit(wm8995->regmap);
-       kfree(wm8995);
        return 0;
 }