aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iio
diff options
context:
space:
mode:
authorAdriana Reus <adriana.reus@intel.com>2015-12-14 14:24:45 +0200
committerJonathan Cameron <jic23@kernel.org>2015-12-22 18:00:51 +0000
commit58e9042f5f130bf3f9043cf75aa2632fc12140e6 (patch)
treeeb807062bd1266bcff18fb2c44535a96fd3581b7 /drivers/iio
parentiio: Make IIO value formating function globally available. (diff)
downloadlinux-dev-58e9042f5f130bf3f9043cf75aa2632fc12140e6.tar.xz
linux-dev-58e9042f5f130bf3f9043cf75aa2632fc12140e6.zip
iio: light: us5182d: Fix enable status inconcistency
When setting als only or proximity only modes make sure that we mark the other component as disabled. This fix is in preparation of adding event support because that will make it possible to switch between one-shot and continuous modes and not tracking these correctly may cause faulty behaviour (e.g wrongfully considering px enabled and not setting an appropriate mode in the chip). Signed-off-by: Adriana Reus <adriana.reus@intel.com> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers/iio')
-rw-r--r--drivers/iio/light/us5182d.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/iio/light/us5182d.c b/drivers/iio/light/us5182d.c
index 256c4bc12d21..f24b687bd152 100644
--- a/drivers/iio/light/us5182d.c
+++ b/drivers/iio/light/us5182d.c
@@ -238,8 +238,12 @@ static int us5182d_als_enable(struct us5182d_data *data)
int ret;
u8 mode;
- if (data->power_mode == US5182D_ONESHOT)
- return us5182d_set_opmode(data, US5182D_ALS_ONLY);
+ if (data->power_mode == US5182D_ONESHOT) {
+ ret = us5182d_set_opmode(data, US5182D_ALS_ONLY);
+ if (ret < 0)
+ return ret;
+ data->px_enabled = false;
+ }
if (data->als_enabled)
return 0;
@@ -260,8 +264,12 @@ static int us5182d_px_enable(struct us5182d_data *data)
int ret;
u8 mode;
- if (data->power_mode == US5182D_ONESHOT)
- return us5182d_set_opmode(data, US5182D_PX_ONLY);
+ if (data->power_mode == US5182D_ONESHOT) {
+ ret = us5182d_set_opmode(data, US5182D_PX_ONLY);
+ if (ret < 0)
+ return ret;
+ data->als_enabled = false;
+ }
if (data->px_enabled)
return 0;