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]>
---
 drivers/regulator/max77802.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/regulator/max77802.c b/drivers/regulator/max77802.c
index a0d146278b76..7cbff7038b43 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,
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to