From e5320809ae393184f8ff3c120232f42fe714f616 Mon Sep 17 00:00:00 2001 From: Gwendal Grignou Date: Thu, 9 Jan 2020 10:19:59 -0800 Subject: 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 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1993584 Reviewed-by: Yuval Peress --- driver/mag_lis2mdl.c | 23 +++++++++++++++++------ driver/mag_lis2mdl.h | 2 -- 2 files changed, 17 insertions(+), 8 deletions(-) (limited to 'driver') 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 -- cgit v1.2.1