iio: ms65611_core: Fixes dereferencing regulator pointer
authorCrt Mori <cmo@melexis.com>
Fri, 14 Oct 2016 13:43:14 +0000 (15:43 +0200)
committerJonathan Cameron <jic23@kernel.org>
Sun, 23 Oct 2016 18:33:50 +0000 (19:33 +0100)
Change in handling of the regulator description means that static
checkers correctly assume we could be using dereferenced pointer to the
regulator. In reality we will never get the -ENODEV error, as current
behavior flow does not predict it, because:
If the device tree or board file does not define suitable regulators for
the component, it will be substituted by a dummy regulator, or, if
regulators are disabled altogether, by stubs.

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Suggested-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Crt Mori <cmo@melexis.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/pressure/ms5611_core.c

index a74ed1f0c880521430c680f795861af437c6ff26..6bd53e7026674032791cd15c7cfceaf6b68a8ba5 100644 (file)
@@ -392,17 +392,14 @@ static int ms5611_init(struct iio_dev *indio_dev)
 
        /* Enable attached regulator if any. */
        st->vdd = devm_regulator_get(indio_dev->dev.parent, "vdd");
-       if (!IS_ERR(st->vdd)) {
-               ret = regulator_enable(st->vdd);
-               if (ret) {
-                       dev_err(indio_dev->dev.parent,
-                               "failed to enable Vdd supply: %d\n", ret);
-                       return ret;
-               }
-       } else {
-               ret = PTR_ERR(st->vdd);
-               if (ret != -ENODEV)
-                       return ret;
+       if (IS_ERR(st->vdd))
+               return PTR_ERR(st->vdd);
+
+       ret = regulator_enable(st->vdd);
+       if (ret) {
+               dev_err(indio_dev->dev.parent,
+                       "failed to enable Vdd supply: %d\n", ret);
+               return ret;
        }
 
        ret = ms5611_reset(indio_dev);