Commit c5e68c4f authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'regulator-fix-v6.0-rc4' of...

Merge tag 'regulator-fix-v6.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator

Pull regulator fixes from Mark Brown:
 "One core fix here improving the error handling on enable failure, plus
  smaller fixes for the pfuze100 drive and the SPMI DT bindings"

* tag 'regulator-fix-v6.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator:
  regulator: Fix qcom,spmi-regulator schema
  regulator: pfuze100: Fix the global-out-of-bounds access in pfuze100_regulator_probe()
  regulator: core: Clean up on enable failure
parents b1d27aa3 475043fa
...@@ -35,6 +35,7 @@ patternProperties: ...@@ -35,6 +35,7 @@ patternProperties:
description: List of regulators and its properties description: List of regulators and its properties
type: object type: object
$ref: regulator.yaml# $ref: regulator.yaml#
unevaluatedProperties: false
properties: properties:
qcom,ocp-max-retries: qcom,ocp-max-retries:
...@@ -100,8 +101,6 @@ patternProperties: ...@@ -100,8 +101,6 @@ patternProperties:
SAW controlled gang leader. Will be configured as SAW regulator. SAW controlled gang leader. Will be configured as SAW regulator.
type: boolean type: boolean
unevaluatedProperties: false
required: required:
- compatible - compatible
......
...@@ -2733,13 +2733,18 @@ static int _regulator_do_enable(struct regulator_dev *rdev) ...@@ -2733,13 +2733,18 @@ static int _regulator_do_enable(struct regulator_dev *rdev)
*/ */
static int _regulator_handle_consumer_enable(struct regulator *regulator) static int _regulator_handle_consumer_enable(struct regulator *regulator)
{ {
int ret;
struct regulator_dev *rdev = regulator->rdev; struct regulator_dev *rdev = regulator->rdev;
lockdep_assert_held_once(&rdev->mutex.base); lockdep_assert_held_once(&rdev->mutex.base);
regulator->enable_count++; regulator->enable_count++;
if (regulator->uA_load && regulator->enable_count == 1) if (regulator->uA_load && regulator->enable_count == 1) {
return drms_uA_update(rdev); ret = drms_uA_update(rdev);
if (ret)
regulator->enable_count--;
return ret;
}
return 0; return 0;
} }
......
...@@ -766,7 +766,7 @@ static int pfuze100_regulator_probe(struct i2c_client *client, ...@@ -766,7 +766,7 @@ static int pfuze100_regulator_probe(struct i2c_client *client,
((pfuze_chip->chip_id == PFUZE3000) ? "3000" : "3001")))); ((pfuze_chip->chip_id == PFUZE3000) ? "3000" : "3001"))));
memcpy(pfuze_chip->regulator_descs, pfuze_chip->pfuze_regulators, memcpy(pfuze_chip->regulator_descs, pfuze_chip->pfuze_regulators,
sizeof(pfuze_chip->regulator_descs)); regulator_num * sizeof(struct pfuze_regulator));
ret = pfuze_parse_regulators_dt(pfuze_chip); ret = pfuze_parse_regulators_dt(pfuze_chip);
if (ret) if (ret)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment