Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7c4c25e4 authored by Axel Lin's avatar Axel Lin Committed by Liam Girdwood
Browse files

regulator: max1586 - fix a memory leak in max1586_pmic_remove()



In max1586_pmic_probe(), we allocate memory for max1586.
In max1586_pmic_remove(), current implementation only free rdev
which is a member of struct max1586_data.
Thus, there is a small memory leak when we unload the module.

This patch fixes the memory leak by passing max1586 to i2c clientdata,
and properly kfree(max1586) in max1586_pmic_remove().

Signed-off-by: default avatarAxel Lin <axel.lin@gmail.com>
Acked-by: default avatarWolfram Sang <w.sang@pengutronix.de>
Acked-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: default avatarRobert Jarzmik <robert.jarzmik@free.fr>
Signed-off-by: default avatarLiam Girdwood <lrg@slimlogic.co.uk>
parent c4604e49
Loading
Loading
Loading
Loading
+5 −5
Original line number Original line Diff line number Diff line
@@ -223,7 +223,7 @@ static int __devinit max1586_pmic_probe(struct i2c_client *client,
		}
		}
	}
	}


	i2c_set_clientdata(client, rdev);
	i2c_set_clientdata(client, max1586);
	dev_info(&client->dev, "Maxim 1586 regulator driver loaded\n");
	dev_info(&client->dev, "Maxim 1586 regulator driver loaded\n");
	return 0;
	return 0;


@@ -238,13 +238,13 @@ static int __devinit max1586_pmic_probe(struct i2c_client *client,


static int __devexit max1586_pmic_remove(struct i2c_client *client)
static int __devexit max1586_pmic_remove(struct i2c_client *client)
{
{
	struct regulator_dev **rdev = i2c_get_clientdata(client);
	struct max1586_data *max1586 = i2c_get_clientdata(client);
	int i;
	int i;


	for (i = 0; i <= MAX1586_V6; i++)
	for (i = 0; i <= MAX1586_V6; i++)
		if (rdev[i])
		if (max1586->rdev[i])
			regulator_unregister(rdev[i]);
			regulator_unregister(max1586->rdev[i]);
	kfree(rdev);
	kfree(max1586);


	return 0;
	return 0;
}
}