summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGwendal Grignou <gwendal@chromium.org>2020-01-09 10:19:59 -0800
committerCommit Bot <commit-bot@chromium.org>2020-06-20 04:40:03 +0000
commit01cda490aa440483f936cab94f8538abf0c16b4b (patch)
tree4ba53296da03abc6f68efe51abf46b94678a510f
parent2249b5d5d78c7024693433bda3a2463de314be93 (diff)
downloadchrome-ec-01cda490aa440483f936cab94f8538abf0c16b4b.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> (cherry picked from commit e5320809ae393184f8ff3c120232f42fe714f616) Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2249644 Reviewed-by: Inno.Park <ih.yoo.park@samsung.corp-partner.google.com> Tested-by: Inno.Park <ih.yoo.park@samsung.corp-partner.google.com> Commit-Queue: Bob Moragues <moragues@chromium.org>
-rw-r--r--driver/mag_lis2mdl.c23
-rw-r--r--driver/mag_lis2mdl.h2
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