Commit df4d737e authored by Melissa Wen's avatar Melissa Wen Committed by Jonathan Cameron

staging:iio:ad7150: fix threshold mode config bit

According to the AD7150 configuration register description, bit 7 assumes
value 1 when the threshold mode is fixed and 0 when it is adaptive,
however, the operation that identifies this mode was considering the
opposite values.

This patch renames the boolean variable to describe it correctly and
properly replaces it in the places where it is used.

Fixes: 531efd6a ("staging:iio:adc:ad7150: chan_spec conv + i2c_smbus commands + drop unused poweroff timeout control.")
Signed-off-by: default avatarMelissa Wen <melissa.srw@gmail.com>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent e61ff0fb
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
* Copyright 2010-2011 Analog Devices Inc. * Copyright 2010-2011 Analog Devices Inc.
*/ */
#include <linux/bitfield.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -130,7 +131,7 @@ static int ad7150_read_event_config(struct iio_dev *indio_dev, ...@@ -130,7 +131,7 @@ static int ad7150_read_event_config(struct iio_dev *indio_dev,
{ {
int ret; int ret;
u8 threshtype; u8 threshtype;
bool adaptive; bool thrfixed;
struct ad7150_chip_info *chip = iio_priv(indio_dev); struct ad7150_chip_info *chip = iio_priv(indio_dev);
ret = i2c_smbus_read_byte_data(chip->client, AD7150_CFG); ret = i2c_smbus_read_byte_data(chip->client, AD7150_CFG);
...@@ -138,21 +139,23 @@ static int ad7150_read_event_config(struct iio_dev *indio_dev, ...@@ -138,21 +139,23 @@ static int ad7150_read_event_config(struct iio_dev *indio_dev,
return ret; return ret;
threshtype = (ret >> 5) & 0x03; threshtype = (ret >> 5) & 0x03;
adaptive = !!(ret & 0x80);
/*check if threshold mode is fixed or adaptive*/
thrfixed = FIELD_GET(AD7150_CFG_FIX, ret);
switch (type) { switch (type) {
case IIO_EV_TYPE_MAG_ADAPTIVE: case IIO_EV_TYPE_MAG_ADAPTIVE:
if (dir == IIO_EV_DIR_RISING) if (dir == IIO_EV_DIR_RISING)
return adaptive && (threshtype == 0x1); return !thrfixed && (threshtype == 0x1);
return adaptive && (threshtype == 0x0); return !thrfixed && (threshtype == 0x0);
case IIO_EV_TYPE_THRESH_ADAPTIVE: case IIO_EV_TYPE_THRESH_ADAPTIVE:
if (dir == IIO_EV_DIR_RISING) if (dir == IIO_EV_DIR_RISING)
return adaptive && (threshtype == 0x3); return !thrfixed && (threshtype == 0x3);
return adaptive && (threshtype == 0x2); return !thrfixed && (threshtype == 0x2);
case IIO_EV_TYPE_THRESH: case IIO_EV_TYPE_THRESH:
if (dir == IIO_EV_DIR_RISING) if (dir == IIO_EV_DIR_RISING)
return !adaptive && (threshtype == 0x1); return thrfixed && (threshtype == 0x1);
return !adaptive && (threshtype == 0x0); return thrfixed && (threshtype == 0x0);
default: default:
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment