diff options
author | Gwendal Grignou <gwendal@chromium.org> | 2020-01-09 10:19:59 -0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-01-24 05:32:27 +0000 |
commit | e5320809ae393184f8ff3c120232f42fe714f616 (patch) | |
tree | 888de2420e993b9458e2bad55eac53c970b6fc60 | |
parent | 4ae4aa94365e6e93654c4a7191ec9a9f65409dc3 (diff) | |
download | chrome-ec-e5320809ae393184f8ff3c120232f42fe714f616.tar.gz |
driver: lis2mdl: Define LIS2MDL_CAL even when CONFIG_MAG_CALIBRATE is not
mag_cal_t holds offset information for the sensor, even when online
calibration is not defined.
Allow driver to work with online calibration disabled (it could be set
from the host).
BUG=none
BRANCH=none
TEST=using nucleo-f072rb_iks01a2, check magnetometer is working with or
without CONFIG_MAG_CALIBRATE enabled.
Change-Id: I2e259f53c620c593b516a12d6dff47dfbadb26c8
Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1993584
Reviewed-by: Yuval Peress <peress@chromium.org>
-rw-r--r-- | driver/mag_lis2mdl.c | 23 | ||||
-rw-r--r-- | driver/mag_lis2mdl.h | 2 |
2 files changed, 17 insertions, 8 deletions
diff --git a/driver/mag_lis2mdl.c b/driver/mag_lis2mdl.c index c63cb7b971..1f05800c08 100644 --- a/driver/mag_lis2mdl.c +++ b/driver/mag_lis2mdl.c @@ -32,6 +32,7 @@ void lis2mdl_normalize(const struct motion_sensor_t *s, { struct mag_cal_t *cal = LIS2MDL_CAL(s); int i; + #ifdef CONFIG_MAG_BMI160_LIS2MDL struct lis2mdl_private_data *private = LIS2MDL_DATA(s); intv3_t hn1; @@ -57,7 +58,8 @@ void lis2mdl_normalize(const struct motion_sensor_t *s, for (i = X; i <= Z; i++) v[i] = LIS2MDL_RATIO(v[i]); - mag_cal_update(cal, v); + if (IS_ENABLED(CONFIG_MAG_CALIBRATE)) + mag_cal_update(cal, v); v[X] += cal->bias[X]; v[Y] += cal->bias[Y]; @@ -170,8 +172,12 @@ int lis2mdl_thru_lsm6dsm_init(const struct motion_sensor_t *s) goto err_unlock; mutex_unlock(s->mutex); - init_mag_cal(cal); - cal->radius = 0.0f; + if (IS_ENABLED(CONFIG_MAG_CALIBRATE)) { + init_mag_cal(cal); + cal->radius = 0.0f; + } else { + memset(cal, 0, sizeof(*cal)); + } data->resol = LIS2DSL_RESOLUTION; return sensor_init_done(s); @@ -294,8 +300,12 @@ int lis2mdl_init(const struct motion_sensor_t *s) if (ret != EC_SUCCESS) return ret; - init_mag_cal(cal); - cal->radius = 0.0f; + if (IS_ENABLED(CONFIG_MAG_CALIBRATE)) { + init_mag_cal(cal); + cal->radius = 0.0f; + } else { + memset(cal, 0, sizeof(*cal)); + } data->resol = LIS2DSL_RESOLUTION; return sensor_init_done(s); @@ -351,7 +361,8 @@ int lis2mdl_set_data_rate(const struct motion_sensor_t *s, int rate, int rnd) if (normalized_rate == data->base.odr) return ret; - init_mag_cal(cal); + if (IS_ENABLED(CONFIG_MAG_CALIBRATE)) + init_mag_cal(cal); if (normalized_rate > 0) cal->batch_size = MAX( diff --git a/driver/mag_lis2mdl.h b/driver/mag_lis2mdl.h index 6be0d70e54..fb50b9712a 100644 --- a/driver/mag_lis2mdl.h +++ b/driver/mag_lis2mdl.h @@ -71,11 +71,9 @@ struct lis2mdl_private_data { #ifndef CONFIG_LSM6DSM_SEC_I2C #define LIS2MDL_ST_DATA(g) (&((g).data)) -#ifdef CONFIG_MAG_CALIBRATE #define LIS2MDL_CAL(_s) \ (&(DOWNCAST(s->drv_data, struct lis2mdl_private_data, data)->cal)) #endif -#endif #define LIS2MDL_ODR_MIN_VAL 10000 |