diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index fdb5e1a1f246..3b399fe96e13 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -2139,8 +2139,16 @@ static int regulator_resolve_supply(struct regulator_dev *rdev) if (rdev->use_count) { ret = regulator_enable(rdev->supply); if (ret < 0) { - _regulator_put(rdev->supply); + struct regulator *supply; + + regulator_lock_two(rdev, rdev->supply->rdev, &ww_ctx); + + supply = rdev->supply; rdev->supply = NULL; + + regulator_unlock_two(rdev, supply->rdev, &ww_ctx); + + regulator_put(supply); goto out; } }