]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
staging: iio: light: jsa1127: fix shutdown
authorSri Krishna chowdary <schowdary@nvidia.com>
Fri, 7 Mar 2014 06:09:01 +0000 (11:39 +0530)
committerSachin Nikam <snikam@nvidia.com>
Tue, 11 Mar 2014 17:07:07 +0000 (10:07 -0700)
earlier code allows i2c access after either
1. power supply is disabled or
2. sensor is put to standby
This can cause i2c transactions to fail or invalid data can be read.
Prevent any i2c transfter from happening after these steps.

Bug 1473057

Change-Id: I8f702d2c7180c71afca46ec5b6f87e04a1e8ba78
Signed-off-by: Sri Krishna chowdary <schowdary@nvidia.com>
Reviewed-on: http://git-master/r/378767
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Sachin Nikam <snikam@nvidia.com>
drivers/staging/iio/light/jsa1127.c

index 654378b0a8b9b34b697a749c5f36b9b22df367b0..64480be4f5c67214583fb6e8f9f20a21a1ab3912 100644 (file)
@@ -4,7 +4,7 @@
  * IIO Light driver for monitoring ambient light intensity in lux and proximity
  * ir.
  *
- * Copyright (c) 2013, NVIDIA CORPORATION. All rights reserved.
+ * Copyright (c) 2013-2014, NVIDIA CORPORATION. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms and conditions of the GNU General Public License,
@@ -578,13 +578,13 @@ static void jsa1127_shutdown(struct i2c_client *client)
        struct jsa1127_chip *chip = iio_priv(indio_dev);
        int ret;
 
+       destroy_workqueue(chip->wq);
        if (chip->regulator && (chip->als_state != CHIP_POWER_OFF))
                regulator_disable(chip->regulator);
 
        if (!chip->regulator || regulator_is_enabled(chip->regulator))
                ret = jsa1127_send_cmd_locked(chip, JSA1127_CMD_STANDBY);
 
-       destroy_workqueue(chip->wq);
        iio_device_unregister(indio_dev);
        iio_device_free(indio_dev);
 }