Based on the output of adt7316_show_all_DAC_update_modes() and
adt7316_show_DAC_update_mode(), adt7316_store_DAC_update_mode() should
expect the user to enter an integer input from 0 to 3. The user input is
currently expected to account for the actual bit positions in the register.
For example, choosing option 3 would require a write of 0x30 (actually 48
since it expects base 10). To address this inconsistency, create a shift
macro to be used in the valid input check as well as the calculation for
the register write.

Signed-off-by: Jeremy Fertic <jeremyfer...@gmail.com>
---
I'm not sure if this patch is appropriate since it's making a user visible
change. I've included it since the driver is still in staging.

 drivers/staging/iio/addac/adt7316.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/iio/addac/adt7316.c 
b/drivers/staging/iio/addac/adt7316.c
index bca599d8c51c..58b462ad0c83 100644
--- a/drivers/staging/iio/addac/adt7316.c
+++ b/drivers/staging/iio/addac/adt7316.c
@@ -129,6 +129,7 @@
  */
 #define ADT7316_DA_2VREF_CH_MASK       0xF
 #define ADT7316_DA_EN_MODE_MASK                0x30
+#define ADT7316_DA_EN_MODE_SHIFT       4
 #define ADT7316_DA_EN_MODE_SINGLE      0x00
 #define ADT7316_DA_EN_MODE_AB_CD       0x10
 #define ADT7316_DA_EN_MODE_ABCD                0x20
@@ -879,11 +880,11 @@ static ssize_t adt7316_store_DAC_update_mode(struct 
device *dev,
                return -EPERM;
 
        ret = kstrtou8(buf, 10, &data);
-       if (ret || data > ADT7316_DA_EN_MODE_MASK)
+       if (ret || data > (ADT7316_DA_EN_MODE_MASK >> ADT7316_DA_EN_MODE_SHIFT))
                return -EINVAL;
 
        dac_config = chip->dac_config & (~ADT7316_DA_EN_MODE_MASK);
-       dac_config |= data;
+       dac_config |= data << ADT7316_DA_EN_MODE_SHIFT;
 
        ret = chip->bus.write(chip->bus.client, ADT7316_DAC_CONFIG, dac_config);
        if (ret)
-- 
2.19.1

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to