summaryrefslogtreecommitdiff
path: root/driver
diff options
context:
space:
mode:
Diffstat (limited to 'driver')
-rw-r--r--driver/als_si114x.c11
-rw-r--r--driver/als_si114x.h1
2 files changed, 10 insertions, 2 deletions
diff --git a/driver/als_si114x.c b/driver/als_si114x.c
index 3be0c68d67..1ddb098ce9 100644
--- a/driver/als_si114x.c
+++ b/driver/als_si114x.c
@@ -93,10 +93,17 @@ static int si114x_read_results(struct motion_sensor_t *s, int nb)
if (ret)
break;
/* Add offset, calibration */
- if (val + type_data->offset < 0) {
- val = 0;
+ if (val + type_data->offset <= 0) {
+ val = 1;
} else {
val += type_data->offset;
+ /*
+ * Proxmitiy sensor data is inverse of the distance.
+ * Return back something proportional to distance,
+ * we affine with the scale parmeter.
+ */
+ if (s->type == MOTIONSENSE_TYPE_PROX)
+ val = SI114X_PS_INVERSION(val);
val = val * type_data->scale +
val * type_data->uscale / 10000;
}
diff --git a/driver/als_si114x.h b/driver/als_si114x.h
index de3375b457..4d524aea66 100644
--- a/driver/als_si114x.h
+++ b/driver/als_si114x.h
@@ -75,6 +75,7 @@
#define SI114X_REG_PS2_DATA1 0x29
#define SI114X_REG_PS3_DATA0 0x2a
#define SI114X_REG_PS3_DATA1 0x2b
+#define SI114X_PS_INVERSION(_data) ((1 << 16) / (_data))
#define SI114X_REG_AUX_DATA0 0x2c
#define SI114X_REG_AUX_DATA1 0x2d
#define SI114X_REG_PARAM_RD 0x2e