]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
staging: iio: light: jsa1127: report valid events
authorSri Krishna chowdary <schowdary@nvidia.com>
Tue, 3 Dec 2013 05:09:51 +0000 (10:39 +0530)
committerSachin Nikam <snikam@nvidia.com>
Wed, 4 Dec 2013 05:42:15 +0000 (21:42 -0800)
When configuring the sensor fails, the value read is 0xFFFF.
However, as the valid bit is 1, we mark it a valid event and
report the value to user. Avoid this by adding additional checks.

Bug 1415897

Change-Id: I9483e10c119c86bd63a7939956893b41692d93bb
Signed-off-by: Sri Krishna chowdary <schowdary@nvidia.com>
Reviewed-on: http://git-master/r/337577
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Jun Yan <juyan@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Sachin Nikam <snikam@nvidia.com>
drivers/staging/iio/light/jsa1127.c

index 4f344c6c7f3c0e561144039c63962a9d4a24af88..a1c086a668bdcc90e5f58764ae7b6bb3007d77df 100644 (file)
@@ -252,8 +252,12 @@ static int jsa1127_read_raw(struct iio_dev *indio_dev,
        case IIO_CHAN_INFO_RAW:
                if (chip->als_state != CHIP_POWER_ON_ALS_ON)
                        return -EINVAL;
-               *val = chip->als_raw_value;
-               ret = IIO_VAL_INT;
+
+               if (chip->als_raw_value != -EINVAL) {
+                       *val = chip->als_raw_value;
+                       ret = IIO_VAL_INT;
+               }
+
                queue_delayed_work(chip->wq, &chip->dw, 0);
                break;
        default:
@@ -368,19 +372,32 @@ static void jsa1127_work_func(struct work_struct *ws)
                return;
 
        if (chip->use_internal_integration_timing) {
-               jsa1127_send_cmd_locked(chip, JSA1127_OPMODE_CONTINUOUS);
+               ret = jsa1127_send_cmd_locked(chip, JSA1127_OPMODE_CONTINUOUS);
+               if (ret)
+                       goto fail;
                msleep(chip->integration_time);
        } else {
-               jsa1127_send_cmd_locked(chip,
+               ret = jsa1127_send_cmd_locked(chip,
                                        JSA1127_ONE_TIME_INTEGRATION_OPMODE);
-               jsa1127_send_cmd_locked(chip, JSA1127_CMD_START_INTERGATION);
+               if (ret)
+                       goto fail;
+               ret = jsa1127_send_cmd_locked(chip,
+                                               JSA1127_CMD_START_INTERGATION);
+               if (ret)
+                       goto fail;
                msleep(chip->integration_time);
-               jsa1127_send_cmd_locked(chip, JSA1127_CMD_STOP_INTERGATION);
+               ret = jsa1127_send_cmd_locked(chip,
+                                               JSA1127_CMD_STOP_INTERGATION);
+               if (ret)
+                       goto fail;
        }
        ret = jsa1127_try_update_als_reading_locked(chip);
        if (ret)
-               DEV_ERR("als reading update failed");
+               goto fail;
        jsa1127_send_cmd_locked(chip, JSA1127_CMD_STANDBY);
+       return;
+fail:
+       chip->als_raw_value = -EINVAL;
 }
 
 #if 0