From cc07094c69c447be5d30bd5b681bc3759f4a1e6d Mon Sep 17 00:00:00 2001 From: yangjiukui Date: Tue, 24 Aug 2021 15:57:42 +0800 Subject: [PATCH] fix: sensor: fix lsm6dso get a null pointer in non-fifo mode. CHAMPION-63 get the parent pointer in front of the batch. Change-Id: Ie309c6df942ecd3ae0f87966fe68053fe4fe4520 Signed-off-by: yangjiukui --- drivers/sensors/lsm6dso.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/drivers/sensors/lsm6dso.c b/drivers/sensors/lsm6dso.c index 9daea7fea0d..06d9ce5c351 100644 --- a/drivers/sensors/lsm6dso.c +++ b/drivers/sensors/lsm6dso.c @@ -2485,6 +2485,20 @@ static int lsm6dso_batch(FAR struct sensor_lowerhalf_s *lower, *latency_us = sensor->fifowtm * sensor->interval; sensor->batch = *latency_us; + if (lower->type == SENSOR_TYPE_ACCELEROMETER) + { + priv = (struct lsm6dso_dev_s *)(sensor - LSM6DSO_XL_IDX); + } + else if(lower->type == SENSOR_TYPE_GYROSCOPE) + { + priv = (struct lsm6dso_dev_s *)(sensor - LSM6DSO_GY_IDX); + } + else + { + snerr("Failed to match sensor type.\n"); + return -EINVAL; + } + if (sensor->fifowtm > 1) { sensor->fifoen = true; @@ -2497,13 +2511,10 @@ static int lsm6dso_batch(FAR struct sensor_lowerhalf_s *lower, if (lower->type == SENSOR_TYPE_ACCELEROMETER) { - priv = (struct lsm6dso_dev_s *)(sensor - LSM6DSO_XL_IDX); - lsm6dso_fifo_xl_setbatch(priv, g_lsm6dso_xl_bdr[idx].regval); } else if(lower->type == SENSOR_TYPE_GYROSCOPE) { - priv = (struct lsm6dso_dev_s *)(sensor - LSM6DSO_GY_IDX); lsm6dso_fifo_gy_setbatch(priv, g_lsm6dso_gy_bdr[idx].regval); } else