Signed-off-by: Axel Lin <axel.lin@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
        struct rt5631_priv *rt5631;
        int ret;
 
-       rt5631 = kzalloc(sizeof(struct rt5631_priv), GFP_KERNEL);
+       rt5631 = devm_kzalloc(&i2c->dev, sizeof(struct rt5631_priv),
+                             GFP_KERNEL);
        if (NULL == rt5631)
                return -ENOMEM;
 
 
        ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_rt5631,
                        rt5631_dai, ARRAY_SIZE(rt5631_dai));
-       if (ret < 0)
-               kfree(rt5631);
-
        return ret;
 }
 
 static __devexit int rt5631_i2c_remove(struct i2c_client *client)
 {
        snd_soc_unregister_codec(&client->dev);
-       kfree(i2c_get_clientdata(client));
        return 0;
 }