regulator: max77802: Don't ignore return value of current opmode
authorKrzysztof Kozlowski <[email protected]>
Tue, 4 Nov 2014 08:49:43 +0000 (09:49 +0100)
committerMark Brown <[email protected]>
Tue, 4 Nov 2014 20:47:50 +0000 (20:47 +0000)
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 <[email protected]>
Reviewed-by: Javier Martinez Canillas <[email protected]>
Signed-off-by: Mark Brown <[email protected]>
drivers/regulator/max77802.c

index f8f06ece2f3c99f6667076e9463b900d99271794..d076df1d21668e75e3025aefcafa03f6cf97a117 100644 (file)
@@ -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,