summaryrefslogtreecommitdiff
path: root/driver/accelgyro_lsm6dsm.c
diff options
context:
space:
mode:
Diffstat (limited to 'driver/accelgyro_lsm6dsm.c')
-rw-r--r--driver/accelgyro_lsm6dsm.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/driver/accelgyro_lsm6dsm.c b/driver/accelgyro_lsm6dsm.c
index d0ef49b906..683b2ed616 100644
--- a/driver/accelgyro_lsm6dsm.c
+++ b/driver/accelgyro_lsm6dsm.c
@@ -337,6 +337,14 @@ static int set_range(const struct motion_sensor_t *s, int range, int rnd)
{
int err;
uint8_t ctrl_reg, reg_val;
+ /*
+ * Since 'stprivate_data a_data;' is the first member of lsm6dsm_data,
+ * the address of lsm6dsm_data is the same as a_data's. Using this
+ * fact, we can do the following conversion. This conversion is equal
+ * to:
+ * struct lsm6dsm_data *lsm_data = s->drv_data;
+ * struct stprivate_data *data = &lsm_data->a_data;
+ */
struct stprivate_data *data = s->drv_data;
int newrange = range;
@@ -381,6 +389,14 @@ static int set_range(const struct motion_sensor_t *s, int range, int rnd)
*/
static int get_range(const struct motion_sensor_t *s)
{
+ /*
+ * Since 'stprivate_data a_data;' is the first member of lsm6dsm_data,
+ * the address of lsm6dsm_data is the same as a_data's. Using this
+ * fact, we can do the following conversion. This conversion is equal
+ * to:
+ * struct lsm6dsm_data *lsm_data = s->drv_data;
+ * struct stprivate_data *data = &lsm_data->a_data;
+ */
struct stprivate_data *data = s->drv_data;
if (s->type == MOTIONSENSE_TYPE_ACCEL)
@@ -399,6 +415,14 @@ static int get_range(const struct motion_sensor_t *s)
static int set_data_rate(const struct motion_sensor_t *s, int rate, int rnd)
{
int ret, normalized_rate;
+ /*
+ * Since 'stprivate_data a_data;' is the first member of lsm6dsm_data,
+ * the address of lsm6dsm_data is the same as a_data's. Using this
+ * fact, we can do the following conversion. This conversion is equal
+ * to:
+ * struct lsm6dsm_data *lsm_data = s->drv_data;
+ * struct stprivate_data *data = &lsm_data->a_data;
+ */
struct stprivate_data *data = s->drv_data;
uint8_t ctrl_reg, reg_val;
@@ -491,6 +515,14 @@ static int read(const struct motion_sensor_t *s, vector_3_t v)
static int init(const struct motion_sensor_t *s)
{
int ret = 0, tmp;
+ /*
+ * Since 'stprivate_data a_data;' is the first member of lsm6dsm_data,
+ * the address of lsm6dsm_data is the same as a_data's. Using this
+ * fact, we can do the following conversion. This conversion is equal
+ * to:
+ * struct lsm6dsm_data *lsm_data = s->drv_data;
+ * struct stprivate_data *data = &lsm_data->a_data;
+ */
struct stprivate_data *data = s->drv_data;
ret = st_raw_read8(s->port, s->addr, LSM6DSM_WHO_AM_I_REG, &tmp);