staging: iio: tsl2583: Use devm_iio_device_alloc
authorSachin Kamat <sachin.kamat@linaro.org>
Thu, 5 Sep 2013 09:29:00 +0000 (10:29 +0100)
committerJonathan Cameron <jic23@kernel.org>
Sat, 7 Sep 2013 20:55:54 +0000 (21:55 +0100)
devm_iio_device_alloc makes the code simple. While at it also
fixed an uninitialized return with -EINVAL.

Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
Cc: J. August Brenner <jbrenner@taosinc.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/staging/iio/light/tsl2583.c

index b377dd3..d2aaf16 100644 (file)
@@ -815,12 +815,9 @@ static int taos_probe(struct i2c_client *clientp,
                return -EOPNOTSUPP;
        }
 
-       indio_dev = iio_device_alloc(sizeof(*chip));
-       if (indio_dev == NULL) {
-               ret = -ENOMEM;
-               dev_err(&clientp->dev, "iio allocation failed\n");
-               goto fail1;
-       }
+       indio_dev = devm_iio_device_alloc(&clientp->dev, sizeof(*chip));
+       if (!indio_dev)
+               return -ENOMEM;
        chip = iio_priv(indio_dev);
        chip->client = clientp;
        i2c_set_clientdata(clientp, indio_dev);
@@ -835,14 +832,14 @@ static int taos_probe(struct i2c_client *clientp,
                if (ret < 0) {
                        dev_err(&clientp->dev, "i2c_smbus_write_bytes() to cmd "
                                "reg failed in taos_probe(), err = %d\n", ret);
-                       goto fail2;
+                       return ret;
                }
                ret = i2c_smbus_read_byte(clientp);
                if (ret < 0) {
                        dev_err(&clientp->dev, "i2c_smbus_read_byte from "
                                "reg failed in taos_probe(), err = %d\n", ret);
 
-                       goto fail2;
+                       return ret;
                }
                buf[i] = ret;
        }
@@ -850,14 +847,14 @@ static int taos_probe(struct i2c_client *clientp,
        if (!taos_tsl258x_device(buf)) {
                dev_info(&clientp->dev, "i2c device found but does not match "
                        "expected id in taos_probe()\n");
-               goto fail2;
+               return -EINVAL;
        }
 
        ret = i2c_smbus_write_byte(clientp, (TSL258X_CMD_REG | TSL258X_CNTRL));
        if (ret < 0) {
                dev_err(&clientp->dev, "i2c_smbus_write_byte() to cmd reg "
                        "failed in taos_probe(), err = %d\n", ret);
-               goto fail2;
+               return ret;
        }
 
        indio_dev->info = &tsl2583_info;
@@ -867,7 +864,7 @@ static int taos_probe(struct i2c_client *clientp,
        ret = iio_device_register(indio_dev);
        if (ret) {
                dev_err(&clientp->dev, "iio registration failed\n");
-               goto fail2;
+               return ret;
        }
 
        /* Load up the V2 defaults (these are hard coded defaults for now) */
@@ -878,10 +875,6 @@ static int taos_probe(struct i2c_client *clientp,
 
        dev_info(&clientp->dev, "Light sensor found.\n");
        return 0;
-fail1:
-       iio_device_free(indio_dev);
-fail2:
-       return ret;
 }
 
 #ifdef CONFIG_PM_SLEEP
@@ -926,7 +919,6 @@ static SIMPLE_DEV_PM_OPS(taos_pm_ops, taos_suspend, taos_resume);
 static int taos_remove(struct i2c_client *client)
 {
        iio_device_unregister(i2c_get_clientdata(client));
-       iio_device_free(i2c_get_clientdata(client));
 
        return 0;
 }