diff options
author | Gwendal Grignou <gwendal@chromium.org> | 2020-05-17 16:43:02 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-11-12 03:23:26 +0000 |
commit | d28c10498cdbf007b97b5c0a9a951373574d4eea (patch) | |
tree | 3d66ca06837aae98ff747fff85b439976e563045 /driver/als_si114x.c | |
parent | 9676f9291f60efdfb31373aeb77385ebb6e9f6e5 (diff) | |
download | chrome-ec-d28c10498cdbf007b97b5c0a9a951373574d4eea.tar.gz |
motion_sense: Make change in range permanent
When AP changes range, unlike offset or ODR, it was not surviving init()
call. If the sensor is powered off in S3, at resume the range would be
back to the default.
To make it consistent with other attributes, remember range change until
EC powers down.
- remove get_range
- add current_range to store the range currently used.
This is modifiable by the AP
- when the AP shutdown, revert current_range to default_range
- Remove const attribute for sensor structure when init and set_range is
called.
BUG=chromium:1083791
BRANCH=none
TEST=One eve branch, check range is preserved even after 'shutdown -h 0'
Change-Id: Ia7126ac0cc9c3fef60b4464d95d6dd15e64b0fc4
Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2215751
Reviewed-by: Yuval Peress <peress@chromium.org>
Diffstat (limited to 'driver/als_si114x.c')
-rw-r--r-- | driver/als_si114x.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/driver/als_si114x.c b/driver/als_si114x.c index 35405bbea7..98b6c02dd5 100644 --- a/driver/als_si114x.c +++ b/driver/als_si114x.c @@ -23,7 +23,7 @@ #define CPRINTF(format, args...) cprintf(CC_ACCEL, format, ## args) #define CPRINTS(format, args...) cprints(CC_ACCEL, format, ## args) -static int init(const struct motion_sensor_t *s); +static int init(struct motion_sensor_t *s); /** * Read 8bit register from device. @@ -500,22 +500,17 @@ static int get_resolution(const struct motion_sensor_t *s) return val & 0x07; } -static int set_range(const struct motion_sensor_t *s, +static int set_range(struct motion_sensor_t *s, int range, int rnd) { struct si114x_typed_data_t *data = SI114X_GET_TYPED_DATA(s); data->scale = range >> 16; data->uscale = range & 0xffff; + s->current_range = range; return EC_SUCCESS; } -static int get_range(const struct motion_sensor_t *s) -{ - struct si114x_typed_data_t *data = SI114X_GET_TYPED_DATA(s); - return (data->scale << 16) | (data->uscale); -} - static int get_data_rate(const struct motion_sensor_t *s) { /* Sensor in forced mode, rate is used by motion_sense */ @@ -553,7 +548,7 @@ static int get_offset(const struct motion_sensor_t *s, return EC_SUCCESS; } -static int init(const struct motion_sensor_t *s) +static int init(struct motion_sensor_t *s) { int ret, resol; struct si114x_drv_data_t *data = SI114X_GET_DATA(s); @@ -590,7 +585,6 @@ const struct accelgyro_drv si114x_drv = { .init = init, .read = read, .set_range = set_range, - .get_range = get_range, .set_resolution = set_resolution, .get_resolution = get_resolution, .set_data_rate = set_data_rate, |