]> git.karo-electronics.de Git - linux-beck.git/commitdiff
iio: light: ltr501: Powerdown device on error
authorCristina Opriceana <cristina.opriceana@gmail.com>
Wed, 1 Apr 2015 15:50:17 +0000 (18:50 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 2 Apr 2015 08:27:39 +0000 (10:27 +0200)
Power down device when an error occurs  in order to avoid wasting
power. Move powerdown function up to be seen by the new call and
align parameters for the ltr501_write_contr() call.

Signed-off-by: Cristina Opriceana <cristina.opriceana@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/iio/light/ltr501.c

index 62b7072af4de1425f0eb607b2d175a36b61bed09..78b87839c4b95864fffcc40c6aaceaf0b6093ccc 100644 (file)
@@ -333,6 +333,13 @@ static int ltr501_init(struct ltr501_data *data)
                data->ps_contr);
 }
 
+static int ltr501_powerdown(struct ltr501_data *data)
+{
+       return ltr501_write_contr(data->client,
+                                 data->als_contr & ~LTR501_CONTR_ACTIVE,
+                                 data->ps_contr & ~LTR501_CONTR_ACTIVE);
+}
+
 static int ltr501_probe(struct i2c_client *client,
                          const struct i2c_device_id *id)
 {
@@ -370,7 +377,7 @@ static int ltr501_probe(struct i2c_client *client,
        ret = iio_triggered_buffer_setup(indio_dev, NULL,
                ltr501_trigger_handler, NULL);
        if (ret)
-               return ret;
+               goto powerdown_on_error;
 
        ret = iio_device_register(indio_dev);
        if (ret)
@@ -380,16 +387,11 @@ static int ltr501_probe(struct i2c_client *client,
 
 error_unreg_buffer:
        iio_triggered_buffer_cleanup(indio_dev);
+powerdown_on_error:
+       ltr501_powerdown(data);
        return ret;
 }
 
-static int ltr501_powerdown(struct ltr501_data *data)
-{
-       return ltr501_write_contr(data->client,
-               data->als_contr & ~LTR501_CONTR_ACTIVE,
-               data->ps_contr & ~LTR501_CONTR_ACTIVE);
-}
-
 static int ltr501_remove(struct i2c_client *client)
 {
        struct iio_dev *indio_dev = i2c_get_clientdata(client);