diff options
-rw-r--r-- | board/ryu/board.c | 2 | ||||
-rw-r--r-- | driver/als_si114x.c | 11 | ||||
-rw-r--r-- | driver/als_si114x.h | 1 |
3 files changed, 11 insertions, 3 deletions
diff --git a/board/ryu/board.c b/board/ryu/board.c index 53d3d2efd3..49a7e1bf0a 100644 --- a/board/ryu/board.c +++ b/board/ryu/board.c @@ -422,7 +422,7 @@ struct motion_sensor_t motion_sensors[] = { .drv_data = &g_si114x_data, .addr = SI114X_ADDR, .rot_standard_ref = NULL, - .default_range = 1 << 16, /* 100% fuzzy unit */ + .default_range = 7630, /* Upon testing at desk */ .config = { /* AP: by default shutdown all sensors */ [SENSOR_CONFIG_AP] = { 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 |