Regulator: core: Unregister when gpio request fails.
If the gpio_request_one() fails, or returns EPROBE_DEFER, the regulator must be device_unregister()ed. When this is not done, there are WARNING: from sysfs: WARNING: at fs/sysfs/file.c:343 sysfs_open_file+0x238/0x268() Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
@@ -3365,7 +3365,7 @@ regulator_register(const struct regulator_desc *regulator_desc,
|
|||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
rdev_err(rdev, "Failed to request enable GPIO%d: %d\n",
|
rdev_err(rdev, "Failed to request enable GPIO%d: %d\n",
|
||||||
config->ena_gpio, ret);
|
config->ena_gpio, ret);
|
||||||
goto clean;
|
goto wash;
|
||||||
}
|
}
|
||||||
|
|
||||||
rdev->ena_gpio = config->ena_gpio;
|
rdev->ena_gpio = config->ena_gpio;
|
||||||
@@ -3449,6 +3449,7 @@ scrub:
|
|||||||
if (rdev->ena_gpio)
|
if (rdev->ena_gpio)
|
||||||
gpio_free(rdev->ena_gpio);
|
gpio_free(rdev->ena_gpio);
|
||||||
kfree(rdev->constraints);
|
kfree(rdev->constraints);
|
||||||
|
wash:
|
||||||
device_unregister(&rdev->dev);
|
device_unregister(&rdev->dev);
|
||||||
/* device core frees rdev */
|
/* device core frees rdev */
|
||||||
rdev = ERR_PTR(ret);
|
rdev = ERR_PTR(ret);
|
||||||
|
Reference in New Issue
Block a user