hwmon/lis3dh: make read/write of the range sys entry consistent
authorWang Zhifeng <zhifeng.wang@intel.com>
Fri, 4 May 2012 04:04:22 +0000 (12:04 +0800)
committerbuildbot <buildbot@intel.com>
Tue, 8 May 2012 12:00:23 +0000 (05:00 -0700)
BZ: 34712

The range sys entry uses different values for reading and writing.
This commit changes that to use the same values.

Change-Id: If7a017f5fa22a6955e7e08814eb29521ead9544e
Signed-off-by: Wang Zhifeng <zhifeng.wang@intel.com>
Reviewed-on: http://android.intel.com:8080/47364
Reviewed-by: Chen, Jie D <jie.d.chen@intel.com>
Reviewed-by: Yan, Leo <leo.yan@intel.com>
Reviewed-by: Du, Alek <alek.du@intel.com>
Reviewed-by: Tang, HaifengX <haifengx.tang@intel.com>
Tested-by: Tang, HaifengX <haifengx.tang@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
arch/x86/platform/intel-mid/device_libs/platform_lis3dh.c
drivers/hwmon/lis3dh_acc.c
include/linux/input/lis3dh.h

index 4dcae97..463deea 100644 (file)
@@ -21,6 +21,7 @@ void *lis3dh_platform_data(void *info)
        static struct lis3dh_acc_platform_data lis3dh_pdata;
 
        lis3dh_pdata.poll_interval = 200;
+       lis3dh_pdata.g_range = 2;
        lis3dh_pdata.negate_x = 1;
        lis3dh_pdata.negate_y = 0;
        lis3dh_pdata.negate_z = 0;
index 3fdcf4d..e37409a 100644 (file)
 #define SENSITIVITY_8G         4       /**     mg/LSB  */
 #define SENSITIVITY_16G                12      /**     mg/LSB  */
 
+/* Accelerometer Sensor Full Scale */
+#define LIS3DH_ACC_FS_MASK             0x30
+#define LIS3DH_ACC_G_2G                0x00
+#define LIS3DH_ACC_G_4G                0x10
+#define LIS3DH_ACC_G_8G                0x20
+#define LIS3DH_ACC_G_16G               0x30
+
 /* Accelerometer Sensor Operating Mode */
 #define LIS3DH_ACC_ENABLE      0x01
 #define LIS3DH_ACC_DISABLE     0x00
@@ -355,18 +362,23 @@ int lis3dh_acc_update_g_range(struct lis3dh_acc_data *acc, u8 new_g_range)
        u8 init_val;
        u8 new_val;
        u8 mask = LIS3DH_ACC_FS_MASK | HIGH_RESOLUTION;
+       u8 fs_bits = 0;
 
        switch (new_g_range) {
-       case LIS3DH_ACC_G_2G:
+       case 2:
+               fs_bits = LIS3DH_ACC_G_2G;
                sensitivity = SENSITIVITY_2G;
                break;
-       case LIS3DH_ACC_G_4G:
+       case 4:
+               fs_bits = LIS3DH_ACC_G_4G;
                sensitivity = SENSITIVITY_4G;
                break;
-       case LIS3DH_ACC_G_8G:
+       case 8:
+               fs_bits = LIS3DH_ACC_G_8G;
                sensitivity = SENSITIVITY_8G;
                break;
-       case LIS3DH_ACC_G_16G:
+       case 16:
+               fs_bits = LIS3DH_ACC_G_16G;
                sensitivity = SENSITIVITY_16G;
                break;
        default:
@@ -382,7 +394,7 @@ int lis3dh_acc_update_g_range(struct lis3dh_acc_data *acc, u8 new_g_range)
                goto error;
        init_val = buf;
        acc->resume_state[RES_CTRL_REG4] = init_val;
-       new_val = new_g_range | HIGH_RESOLUTION;
+       new_val = fs_bits | HIGH_RESOLUTION;
        updated_val = ((mask & new_val) | ((~mask) & init_val));
        buf = updated_val;
        err = lis3dh_acc_i2c_write(acc, CTRL_REG4, &buf, 1);
@@ -640,24 +652,10 @@ static ssize_t attr_get_range(struct device *dev,
 {
        char val;
        struct lis3dh_acc_data *acc = dev_get_drvdata(dev);
-       char range = 2;
+       char range;
 
        mutex_lock(&acc->lock);
-       val = acc->pdata->g_range ;
-       switch (val) {
-       case LIS3DH_ACC_G_2G:
-               range = 2;
-               break;
-       case LIS3DH_ACC_G_4G:
-               range = 4;
-               break;
-       case LIS3DH_ACC_G_8G:
-               range = 8;
-               break;
-       case LIS3DH_ACC_G_16G:
-               range = 16;
-               break;
-       }
+       range = acc->pdata->g_range ;
        mutex_unlock(&acc->lock);
        return sprintf(buf, "%d\n", range);
 }
@@ -672,9 +670,13 @@ static ssize_t attr_set_range(struct device *dev,
        if (strict_strtoul(buf, 10, &val))
                return -EINVAL;
 
+       if (val != 2 && val != 4 && val != 8 && val != 16)
+               return -EINVAL;
+
+
        mutex_lock(&acc->lock);
-       acc->pdata->g_range = val;
-       lis3dh_acc_update_g_range(acc, val);
+       acc->pdata->g_range = (u8) val;
+       lis3dh_acc_update_g_range(acc, acc->pdata->g_range);
        mutex_unlock(&acc->lock);
 
        return size;
index 49a7498..87b61a1 100644 (file)
@@ -61,13 +61,6 @@ Revision 1-0-7 26/11/2010
 /*   Accelerometer defines section              */
 /************************************************/
 
-/* Accelerometer Sensor Full Scale */
-#define LIS3DH_ACC_FS_MASK             0x30
-#define LIS3DH_ACC_G_2G                0x00
-#define LIS3DH_ACC_G_4G                0x10
-#define LIS3DH_ACC_G_8G                0x20
-#define LIS3DH_ACC_G_16G               0x30
-
 /* supported accelerometer model */
 enum acc_model {
        MODEL_LIS3DH,