summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrzysztof Kozlowski <k.kozlowski@samsung.com>2014-11-04 08:49:43 (GMT)
committerMark Brown <broonie@kernel.org>2014-11-04 20:47:50 (GMT)
commita26ed45c912d46cedac5f15c2872aa7e462fcdf1 (patch)
tree8414c9b37c50b7798a5ada27b6e0a1507f46bdb9
parent4d7078e69417852283937872e210adcc633be66f (diff)
downloadlinux-a26ed45c912d46cedac5f15c2872aa7e462fcdf1.tar.xz
regulator: max77802: Don't ignore return value of current opmode
The return value of regmap_read() of current opmode for regulator was silently ignored and whatever happened to be in 'val' variable was used as new opmode. This could lead to using bogus opmode. Don't ignore what regmap_read() returns. If it fails just fall back to normal opmode. Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Reviewed-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk> Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--drivers/regulator/max77802.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/regulator/max77802.c b/drivers/regulator/max77802.c
index f8f06ec..d076df1 100644
--- a/drivers/regulator/max77802.c
+++ b/drivers/regulator/max77802.c
@@ -606,7 +606,13 @@ static int max77802_pmic_probe(struct platform_device *pdev)
config.of_node = pdata->regulators[i].of_node;
ret = regmap_read(iodev->regmap, regulators[i].enable_reg, &val);
- val = val >> shift & MAX77802_OPMODE_MASK;
+ if (ret < 0) {
+ dev_warn(&pdev->dev,
+ "cannot read current mode for %d\n", i);
+ val = MAX77802_OPMODE_NORMAL;
+ } else {
+ val = val >> shift & MAX77802_OPMODE_MASK;
+ }
/*
* If the regulator is disabled and the system warm rebooted,