1 /**
2   ******************************************************************************
3   * @file    lsm6dsox_reg.h
4   * @author  Sensors Software Solution Team
5   * @brief   This file contains all the functions prototypes for the
6   *          lsm6dsox_reg.c driver.
7   ******************************************************************************
8   * @attention
9   *
10   * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
11   * All rights reserved.</center></h2>
12   *
13   * This software component is licensed by ST under BSD 3-Clause license,
14   * the "License"; You may not use this file except in compliance with the
15   * License. You may obtain a copy of the License at:
16   *                        opensource.org/licenses/BSD-3-Clause
17   *
18   ******************************************************************************
19   */
20 
21 /* Define to prevent recursive inclusion -------------------------------------*/
22 #ifndef LSM6DSOX_REGS_H
23 #define LSM6DSOX_REGS_H
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 /* Includes ------------------------------------------------------------------*/
30 #include <stdint.h>
31 #include <stddef.h>
32 #include <math.h>
33 
34 /** @addtogroup LSM6DSOX
35   * @{
36   *
37   */
38 
39 /** @defgroup  Endianness definitions
40   * @{
41   *
42   */
43 
44 #ifndef DRV_BYTE_ORDER
45 #ifndef __BYTE_ORDER__
46 
47 #define DRV_LITTLE_ENDIAN 1234
48 #define DRV_BIG_ENDIAN    4321
49 
50 /** if _BYTE_ORDER is not defined, choose the endianness of your architecture
51   * by uncommenting the define which fits your platform endianness
52   */
53 //#define DRV_BYTE_ORDER    DRV_BIG_ENDIAN
54 #define DRV_BYTE_ORDER    DRV_LITTLE_ENDIAN
55 
56 #else /* defined __BYTE_ORDER__ */
57 
58 #define DRV_LITTLE_ENDIAN  __ORDER_LITTLE_ENDIAN__
59 #define DRV_BIG_ENDIAN     __ORDER_BIG_ENDIAN__
60 #define DRV_BYTE_ORDER     __BYTE_ORDER__
61 
62 #endif /* __BYTE_ORDER__*/
63 #endif /* DRV_BYTE_ORDER */
64 
65 /**
66   * @}
67   *
68   */
69 
70 /** @defgroup STMicroelectronics sensors common types
71   * @{
72   *
73   */
74 
75 #ifndef MEMS_SHARED_TYPES
76 #define MEMS_SHARED_TYPES
77 
78 typedef struct
79 {
80 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
81   uint8_t bit0       : 1;
82   uint8_t bit1       : 1;
83   uint8_t bit2       : 1;
84   uint8_t bit3       : 1;
85   uint8_t bit4       : 1;
86   uint8_t bit5       : 1;
87   uint8_t bit6       : 1;
88   uint8_t bit7       : 1;
89 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
90   uint8_t bit7       : 1;
91   uint8_t bit6       : 1;
92   uint8_t bit5       : 1;
93   uint8_t bit4       : 1;
94   uint8_t bit3       : 1;
95   uint8_t bit2       : 1;
96   uint8_t bit1       : 1;
97   uint8_t bit0       : 1;
98 #endif /* DRV_BYTE_ORDER */
99 } bitwise_t;
100 
101 #define PROPERTY_DISABLE                (0U)
102 #define PROPERTY_ENABLE                 (1U)
103 
104 /** @addtogroup  Interfaces_Functions
105   * @brief       This section provide a set of functions used to read and
106   *              write a generic register of the device.
107   *              MANDATORY: return 0 -> no Error.
108   * @{
109   *
110   */
111 
112 typedef int32_t (*stmdev_write_ptr)(void *, uint8_t, const uint8_t *, uint16_t);
113 typedef int32_t (*stmdev_read_ptr)(void *, uint8_t, uint8_t *, uint16_t);
114 typedef void (*stmdev_mdelay_ptr)(uint32_t millisec);
115 
116 typedef struct
117 {
118   /** Component mandatory fields **/
119   stmdev_write_ptr  write_reg;
120   stmdev_read_ptr   read_reg;
121   /** Component optional fields **/
122   stmdev_mdelay_ptr   mdelay;
123   /** Customizable optional pointer **/
124   void *handle;
125 } stmdev_ctx_t;
126 
127 /**
128   * @}
129   *
130   */
131 
132 #endif /* MEMS_SHARED_TYPES */
133 
134 #ifndef MEMS_UCF_SHARED_TYPES
135 #define MEMS_UCF_SHARED_TYPES
136 
137 /** @defgroup    Generic address-data structure definition
138   * @brief       This structure is useful to load a predefined configuration
139   *              of a sensor.
140   *              You can create a sensor configuration by your own or using
141   *              Unico / Unicleo tools available on STMicroelectronics
142   *              web site.
143   *
144   * @{
145   *
146   */
147 
148 typedef struct
149 {
150   uint8_t address;
151   uint8_t data;
152 } ucf_line_t;
153 
154 /**
155   * @}
156   *
157   */
158 
159 #endif /* MEMS_UCF_SHARED_TYPES */
160 
161 /**
162   * @}
163   *
164   */
165 
166 /** @defgroup LSM6DSOX_Infos
167   * @{
168   *
169   */
170 
171 /** I2C Device Address 8 bit format  if SA0=0 -> D5 if SA0=1 -> D7 **/
172 #define LSM6DSOX_I2C_ADD_L                    0xD5U
173 #define LSM6DSOX_I2C_ADD_H                    0xD7U
174 
175 /** Device Identification (Who am I) **/
176 #define LSM6DSOX_ID                           0x6CU
177 
178 /**
179   * @}
180   *
181   */
182 
183 #define LSM6DSOX_FUNC_CFG_ACCESS              0x01U
184 typedef struct
185 {
186 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
187   uint8_t ois_ctrl_from_ui         : 1;
188   uint8_t not_used_01              : 5;
189   uint8_t reg_access               : 2; /* shub_reg_access + func_cfg_access */
190 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
191   uint8_t reg_access               : 2; /* shub_reg_access + func_cfg_access */
192   uint8_t not_used_01              : 5;
193   uint8_t ois_ctrl_from_ui         : 1;
194 #endif /* DRV_BYTE_ORDER */
195 } lsm6dsox_func_cfg_access_t;
196 
197 #define LSM6DSOX_PIN_CTRL                     0x02U
198 typedef struct
199 {
200 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
201   uint8_t not_used_01              : 6;
202   uint8_t sdo_pu_en                : 1;
203   uint8_t ois_pu_dis               : 1;
204 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
205   uint8_t ois_pu_dis               : 1;
206   uint8_t sdo_pu_en                : 1;
207   uint8_t not_used_01              : 6;
208 #endif /* DRV_BYTE_ORDER */
209 } lsm6dsox_pin_ctrl_t;
210 
211 #define LSM6DSOX_S4S_TPH_L                    0x04U
212 typedef struct
213 {
214 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
215   uint8_t tph_l                    : 7;
216   uint8_t tph_h_sel                : 1;
217 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
218   uint8_t tph_h_sel                : 1;
219   uint8_t tph_l                    : 7;
220 #endif /* DRV_BYTE_ORDER */
221 } lsm6dsox_s4s_tph_l_t;
222 
223 #define LSM6DSOX_S4S_TPH_H                    0x05U
224 typedef struct
225 {
226   uint8_t tph_h                    : 8;
227 } lsm6dsox_s4s_tph_h_t;
228 
229 #define LSM6DSOX_S4S_RR                       0x06U
230 typedef struct
231 {
232 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
233   uint8_t rr                       : 2;
234   uint8_t not_used_01              : 6;
235 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
236   uint8_t not_used_01              : 6;
237   uint8_t rr                       : 2;
238 #endif /* DRV_BYTE_ORDER */
239 } lsm6dsox_s4s_rr_t;
240 
241 #define LSM6DSOX_FIFO_CTRL1                   0x07U
242 typedef struct
243 {
244   uint8_t wtm                      : 8;
245 } lsm6dsox_fifo_ctrl1_t;
246 
247 #define LSM6DSOX_FIFO_CTRL2                   0x08U
248 typedef struct
249 {
250 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
251   uint8_t wtm                      : 1;
252   uint8_t uncoptr_rate             : 2;
253   uint8_t not_used_01              : 1;
254   uint8_t odrchg_en                : 1;
255   uint8_t not_used_02              : 1;
256   uint8_t fifo_compr_rt_en         : 1;
257   uint8_t stop_on_wtm              : 1;
258 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
259   uint8_t stop_on_wtm              : 1;
260   uint8_t fifo_compr_rt_en         : 1;
261   uint8_t not_used_02              : 1;
262   uint8_t odrchg_en                : 1;
263   uint8_t not_used_01              : 1;
264   uint8_t uncoptr_rate             : 2;
265   uint8_t wtm                      : 1;
266 #endif /* DRV_BYTE_ORDER */
267 } lsm6dsox_fifo_ctrl2_t;
268 
269 #define LSM6DSOX_FIFO_CTRL3                   0x09U
270 typedef struct
271 {
272 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
273   uint8_t bdr_xl                   : 4;
274   uint8_t bdr_gy                   : 4;
275 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
276   uint8_t bdr_gy                   : 4;
277   uint8_t bdr_xl                   : 4;
278 #endif /* DRV_BYTE_ORDER */
279 } lsm6dsox_fifo_ctrl3_t;
280 
281 #define LSM6DSOX_FIFO_CTRL4                   0x0AU
282 typedef struct
283 {
284 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
285   uint8_t fifo_mode                : 3;
286   uint8_t not_used_01              : 1;
287   uint8_t odr_t_batch              : 2;
288   uint8_t odr_ts_batch             : 2;
289 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
290   uint8_t odr_ts_batch             : 2;
291   uint8_t odr_t_batch              : 2;
292   uint8_t not_used_01              : 1;
293   uint8_t fifo_mode                : 3;
294 #endif /* DRV_BYTE_ORDER */
295 } lsm6dsox_fifo_ctrl4_t;
296 
297 #define LSM6DSOX_COUNTER_BDR_REG1             0x0BU
298 typedef struct
299 {
300 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
301   uint8_t cnt_bdr_th               : 3;
302   uint8_t not_used_01              : 2;
303   uint8_t trig_counter_bdr         : 1;
304   uint8_t rst_counter_bdr          : 1;
305   uint8_t dataready_pulsed         : 1;
306 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
307   uint8_t dataready_pulsed         : 1;
308   uint8_t rst_counter_bdr          : 1;
309   uint8_t trig_counter_bdr         : 1;
310   uint8_t not_used_01              : 2;
311   uint8_t cnt_bdr_th               : 3;
312 #endif /* DRV_BYTE_ORDER */
313 } lsm6dsox_counter_bdr_reg1_t;
314 
315 #define LSM6DSOX_COUNTER_BDR_REG2             0x0CU
316 typedef struct
317 {
318   uint8_t cnt_bdr_th               : 8;
319 } lsm6dsox_counter_bdr_reg2_t;
320 
321 #define LSM6DSOX_INT1_CTRL                    0x0D
322 typedef struct
323 {
324 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
325   uint8_t int1_drdy_xl             : 1;
326   uint8_t int1_drdy_g              : 1;
327   uint8_t int1_boot                : 1;
328   uint8_t int1_fifo_th             : 1;
329   uint8_t int1_fifo_ovr            : 1;
330   uint8_t int1_fifo_full           : 1;
331   uint8_t int1_cnt_bdr             : 1;
332   uint8_t den_drdy_flag            : 1;
333 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
334   uint8_t den_drdy_flag            : 1;
335   uint8_t int1_cnt_bdr             : 1;
336   uint8_t int1_fifo_full           : 1;
337   uint8_t int1_fifo_ovr            : 1;
338   uint8_t int1_fifo_th             : 1;
339   uint8_t int1_boot                : 1;
340   uint8_t int1_drdy_g              : 1;
341   uint8_t int1_drdy_xl             : 1;
342 #endif /* DRV_BYTE_ORDER */
343 } lsm6dsox_int1_ctrl_t;
344 
345 #define LSM6DSOX_INT2_CTRL                    0x0EU
346 typedef struct
347 {
348 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
349   uint8_t int2_drdy_xl             : 1;
350   uint8_t int2_drdy_g              : 1;
351   uint8_t int2_drdy_temp           : 1;
352   uint8_t int2_fifo_th             : 1;
353   uint8_t int2_fifo_ovr            : 1;
354   uint8_t int2_fifo_full           : 1;
355   uint8_t int2_cnt_bdr             : 1;
356   uint8_t not_used_01              : 1;
357 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
358   uint8_t not_used_01              : 1;
359   uint8_t int2_cnt_bdr             : 1;
360   uint8_t int2_fifo_full           : 1;
361   uint8_t int2_fifo_ovr            : 1;
362   uint8_t int2_fifo_th             : 1;
363   uint8_t int2_drdy_temp           : 1;
364   uint8_t int2_drdy_g              : 1;
365   uint8_t int2_drdy_xl             : 1;
366 #endif /* DRV_BYTE_ORDER */
367 } lsm6dsox_int2_ctrl_t;
368 
369 #define LSM6DSOX_WHO_AM_I                     0x0FU
370 #define LSM6DSOX_CTRL1_XL                     0x10U
371 typedef struct
372 {
373 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
374   uint8_t not_used_01              : 1;
375   uint8_t lpf2_xl_en               : 1;
376   uint8_t fs_xl                    : 2;
377   uint8_t odr_xl                   : 4;
378 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
379   uint8_t odr_xl                   : 4;
380   uint8_t fs_xl                    : 2;
381   uint8_t lpf2_xl_en               : 1;
382   uint8_t not_used_01              : 1;
383 #endif /* DRV_BYTE_ORDER */
384 } lsm6dsox_ctrl1_xl_t;
385 
386 #define LSM6DSOX_CTRL2_G                      0x11U
387 typedef struct
388 {
389 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
390   uint8_t not_used_01              : 1;
391   uint8_t fs_g                     : 3; /* fs_125 + fs_g */
392   uint8_t odr_g                    : 4;
393 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
394   uint8_t odr_g                    : 4;
395   uint8_t fs_g                     : 3; /* fs_125 + fs_g */
396   uint8_t not_used_01              : 1;
397 #endif /* DRV_BYTE_ORDER */
398 } lsm6dsox_ctrl2_g_t;
399 
400 #define LSM6DSOX_CTRL3_C                      0x12U
401 typedef struct
402 {
403 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
404   uint8_t sw_reset                 : 1;
405   uint8_t not_used_01              : 1;
406   uint8_t if_inc                   : 1;
407   uint8_t sim                      : 1;
408   uint8_t pp_od                    : 1;
409   uint8_t h_lactive                : 1;
410   uint8_t bdu                      : 1;
411   uint8_t boot                     : 1;
412 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
413   uint8_t boot                     : 1;
414   uint8_t bdu                      : 1;
415   uint8_t h_lactive                : 1;
416   uint8_t pp_od                    : 1;
417   uint8_t sim                      : 1;
418   uint8_t if_inc                   : 1;
419   uint8_t not_used_01              : 1;
420   uint8_t sw_reset                 : 1;
421 #endif /* DRV_BYTE_ORDER */
422 } lsm6dsox_ctrl3_c_t;
423 
424 #define LSM6DSOX_CTRL4_C                      0x13U
425 typedef struct
426 {
427 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
428   uint8_t not_used_01              : 1;
429   uint8_t lpf1_sel_g               : 1;
430   uint8_t i2c_disable              : 1;
431   uint8_t drdy_mask                : 1;
432   uint8_t not_used_02              : 1;
433   uint8_t int2_on_int1             : 1;
434   uint8_t sleep_g                  : 1;
435   uint8_t not_used_03              : 1;
436 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
437   uint8_t not_used_03              : 1;
438   uint8_t sleep_g                  : 1;
439   uint8_t int2_on_int1             : 1;
440   uint8_t not_used_02              : 1;
441   uint8_t drdy_mask                : 1;
442   uint8_t i2c_disable              : 1;
443   uint8_t lpf1_sel_g               : 1;
444   uint8_t not_used_01              : 1;
445 #endif /* DRV_BYTE_ORDER */
446 } lsm6dsox_ctrl4_c_t;
447 
448 #define LSM6DSOX_CTRL5_C                      0x14U
449 typedef struct
450 {
451 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
452   uint8_t st_xl                    : 2;
453   uint8_t st_g                     : 2;
454   uint8_t rounding_status          : 1;
455   uint8_t rounding                 : 2;
456   uint8_t xl_ulp_en                : 1;
457 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
458   uint8_t xl_ulp_en                : 1;
459   uint8_t rounding                 : 2;
460   uint8_t rounding_status          : 1;
461   uint8_t st_g                     : 2;
462   uint8_t st_xl                    : 2;
463 #endif /* DRV_BYTE_ORDER */
464 } lsm6dsox_ctrl5_c_t;
465 
466 #define LSM6DSOX_CTRL6_C                      0x15U
467 typedef struct
468 {
469 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
470   uint8_t ftype                    : 3;
471   uint8_t usr_off_w                : 1;
472   uint8_t xl_hm_mode               : 1;
473   uint8_t den_mode                 : 3;   /* trig_en + lvl1_en + lvl2_en */
474 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
475   uint8_t den_mode                 : 3;   /* trig_en + lvl1_en + lvl2_en */
476   uint8_t xl_hm_mode               : 1;
477   uint8_t usr_off_w                : 1;
478   uint8_t ftype                    : 3;
479 #endif /* DRV_BYTE_ORDER */
480 } lsm6dsox_ctrl6_c_t;
481 
482 #define LSM6DSOX_CTRL7_G                      0x16U
483 typedef struct
484 {
485 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
486   uint8_t ois_on                   : 1;
487   uint8_t usr_off_on_out           : 1;
488   uint8_t ois_on_en                : 1;
489   uint8_t not_used_01              : 1;
490   uint8_t hpm_g                    : 2;
491   uint8_t hp_en_g                  : 1;
492   uint8_t g_hm_mode                : 1;
493 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
494   uint8_t g_hm_mode                : 1;
495   uint8_t hp_en_g                  : 1;
496   uint8_t hpm_g                    : 2;
497   uint8_t not_used_01              : 1;
498   uint8_t ois_on_en                : 1;
499   uint8_t usr_off_on_out           : 1;
500   uint8_t ois_on                   : 1;
501 #endif /* DRV_BYTE_ORDER */
502 } lsm6dsox_ctrl7_g_t;
503 
504 #define LSM6DSOX_CTRL8_XL                     0x17U
505 typedef struct
506 {
507 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
508   uint8_t low_pass_on_6d           : 1;
509   uint8_t xl_fs_mode               : 1;
510   uint8_t hp_slope_xl_en           : 1;
511   uint8_t fastsettl_mode_xl        : 1;
512   uint8_t hp_ref_mode_xl           : 1;
513   uint8_t hpcf_xl                  : 3;
514 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
515   uint8_t hpcf_xl                  : 3;
516   uint8_t hp_ref_mode_xl           : 1;
517   uint8_t fastsettl_mode_xl        : 1;
518   uint8_t hp_slope_xl_en           : 1;
519   uint8_t xl_fs_mode               : 1;
520   uint8_t low_pass_on_6d           : 1;
521 #endif /* DRV_BYTE_ORDER */
522 } lsm6dsox_ctrl8_xl_t;
523 
524 #define LSM6DSOX_CTRL9_XL                     0x18U
525 typedef struct
526 {
527 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
528   uint8_t not_used_01              : 1;
529   uint8_t i3c_disable              : 1;
530   uint8_t den_lh                   : 1;
531   uint8_t den_xl_g                 : 2;   /* den_xl_en + den_xl_g */
532   uint8_t den_z                    : 1;
533   uint8_t den_y                    : 1;
534   uint8_t den_x                    : 1;
535 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
536   uint8_t den_x                    : 1;
537   uint8_t den_y                    : 1;
538   uint8_t den_z                    : 1;
539   uint8_t den_xl_g                 : 2;   /* den_xl_en + den_xl_g */
540   uint8_t den_lh                   : 1;
541   uint8_t i3c_disable              : 1;
542   uint8_t not_used_01              : 1;
543 #endif /* DRV_BYTE_ORDER */
544 } lsm6dsox_ctrl9_xl_t;
545 
546 #define LSM6DSOX_CTRL10_C                     0x19U
547 typedef struct
548 {
549 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
550   uint8_t not_used_01              : 5;
551   uint8_t timestamp_en             : 1;
552   uint8_t not_used_02              : 2;
553 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
554   uint8_t not_used_02              : 2;
555   uint8_t timestamp_en             : 1;
556   uint8_t not_used_01              : 5;
557 #endif /* DRV_BYTE_ORDER */
558 } lsm6dsox_ctrl10_c_t;
559 
560 #define LSM6DSOX_ALL_INT_SRC                  0x1AU
561 typedef struct
562 {
563 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
564   uint8_t ff_ia                    : 1;
565   uint8_t wu_ia                    : 1;
566   uint8_t single_tap               : 1;
567   uint8_t double_tap               : 1;
568   uint8_t d6d_ia                   : 1;
569   uint8_t sleep_change_ia          : 1;
570   uint8_t not_used_01              : 1;
571   uint8_t timestamp_endcount       : 1;
572 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
573   uint8_t timestamp_endcount       : 1;
574   uint8_t not_used_01              : 1;
575   uint8_t sleep_change_ia          : 1;
576   uint8_t d6d_ia                   : 1;
577   uint8_t double_tap               : 1;
578   uint8_t single_tap               : 1;
579   uint8_t wu_ia                    : 1;
580   uint8_t ff_ia                    : 1;
581 #endif /* DRV_BYTE_ORDER */
582 } lsm6dsox_all_int_src_t;
583 
584 #define LSM6DSOX_WAKE_UP_SRC                  0x1BU
585 typedef struct
586 {
587 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
588   uint8_t z_wu                     : 1;
589   uint8_t y_wu                     : 1;
590   uint8_t x_wu                     : 1;
591   uint8_t wu_ia                    : 1;
592   uint8_t sleep_state              : 1;
593   uint8_t ff_ia                    : 1;
594   uint8_t sleep_change_ia          : 2;
595 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
596   uint8_t sleep_change_ia          : 2;
597   uint8_t ff_ia                    : 1;
598   uint8_t sleep_state              : 1;
599   uint8_t wu_ia                    : 1;
600   uint8_t x_wu                     : 1;
601   uint8_t y_wu                     : 1;
602   uint8_t z_wu                     : 1;
603 #endif /* DRV_BYTE_ORDER */
604 } lsm6dsox_wake_up_src_t;
605 
606 #define LSM6DSOX_TAP_SRC                      0x1CU
607 typedef struct
608 {
609 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
610   uint8_t z_tap                    : 1;
611   uint8_t y_tap                    : 1;
612   uint8_t x_tap                    : 1;
613   uint8_t tap_sign                 : 1;
614   uint8_t double_tap               : 1;
615   uint8_t single_tap               : 1;
616   uint8_t tap_ia                   : 1;
617   uint8_t not_used_02              : 1;
618 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
619   uint8_t not_used_02              : 1;
620   uint8_t tap_ia                   : 1;
621   uint8_t single_tap               : 1;
622   uint8_t double_tap               : 1;
623   uint8_t tap_sign                 : 1;
624   uint8_t x_tap                    : 1;
625   uint8_t y_tap                    : 1;
626   uint8_t z_tap                    : 1;
627 #endif /* DRV_BYTE_ORDER */
628 } lsm6dsox_tap_src_t;
629 
630 #define LSM6DSOX_D6D_SRC                      0x1DU
631 typedef struct
632 {
633 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
634   uint8_t xl                       : 1;
635   uint8_t xh                       : 1;
636   uint8_t yl                       : 1;
637   uint8_t yh                       : 1;
638   uint8_t zl                       : 1;
639   uint8_t zh                       : 1;
640   uint8_t d6d_ia                   : 1;
641   uint8_t den_drdy                 : 1;
642 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
643   uint8_t den_drdy                 : 1;
644   uint8_t d6d_ia                   : 1;
645   uint8_t zh                       : 1;
646   uint8_t zl                       : 1;
647   uint8_t yh                       : 1;
648   uint8_t yl                       : 1;
649   uint8_t xh                       : 1;
650   uint8_t xl                       : 1;
651 #endif /* DRV_BYTE_ORDER */
652 } lsm6dsox_d6d_src_t;
653 
654 #define LSM6DSOX_STATUS_REG                   0x1EU
655 typedef struct
656 {
657 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
658   uint8_t xlda                     : 1;
659   uint8_t gda                      : 1;
660   uint8_t tda                      : 1;
661   uint8_t not_used_01              : 5;
662 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
663   uint8_t not_used_01              : 5;
664   uint8_t tda                      : 1;
665   uint8_t gda                      : 1;
666   uint8_t xlda                     : 1;
667 #endif /* DRV_BYTE_ORDER */
668 } lsm6dsox_status_reg_t;
669 
670 #define LSM6DSOX_OUT_TEMP_L                   0x20U
671 #define LSM6DSOX_OUT_TEMP_H                   0x21U
672 #define LSM6DSOX_OUTX_L_G                     0x22U
673 #define LSM6DSOX_OUTX_H_G                     0x23U
674 #define LSM6DSOX_OUTY_L_G                     0x24U
675 #define LSM6DSOX_OUTY_H_G                     0x25U
676 #define LSM6DSOX_OUTZ_L_G                     0x26U
677 #define LSM6DSOX_OUTZ_H_G                     0x27U
678 #define LSM6DSOX_OUTX_L_A                     0x28U
679 #define LSM6DSOX_OUTX_H_A                     0x29U
680 #define LSM6DSOX_OUTY_L_A                     0x2AU
681 #define LSM6DSOX_OUTY_H_A                     0x2BU
682 #define LSM6DSOX_OUTZ_L_A                     0x2CU
683 #define LSM6DSOX_OUTZ_H_A                     0x2DU
684 #define LSM6DSOX_EMB_FUNC_STATUS_MAINPAGE     0x35U
685 typedef struct
686 {
687 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
688   uint8_t not_used_01             : 3;
689   uint8_t is_step_det             : 1;
690   uint8_t is_tilt                 : 1;
691   uint8_t is_sigmot               : 1;
692   uint8_t not_used_02             : 1;
693   uint8_t is_fsm_lc               : 1;
694 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
695   uint8_t is_fsm_lc               : 1;
696   uint8_t not_used_02             : 1;
697   uint8_t is_sigmot               : 1;
698   uint8_t is_tilt                 : 1;
699   uint8_t is_step_det             : 1;
700   uint8_t not_used_01             : 3;
701 #endif /* DRV_BYTE_ORDER */
702 } lsm6dsox_emb_func_status_mainpage_t;
703 
704 #define LSM6DSOX_FSM_STATUS_A_MAINPAGE        0x36U
705 typedef struct
706 {
707 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
708   uint8_t is_fsm1                 : 1;
709   uint8_t is_fsm2                 : 1;
710   uint8_t is_fsm3                 : 1;
711   uint8_t is_fsm4                 : 1;
712   uint8_t is_fsm5                 : 1;
713   uint8_t is_fsm6                 : 1;
714   uint8_t is_fsm7                 : 1;
715   uint8_t is_fsm8                 : 1;
716 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
717   uint8_t is_fsm8                 : 1;
718   uint8_t is_fsm7                 : 1;
719   uint8_t is_fsm6                 : 1;
720   uint8_t is_fsm5                 : 1;
721   uint8_t is_fsm4                 : 1;
722   uint8_t is_fsm3                 : 1;
723   uint8_t is_fsm2                 : 1;
724   uint8_t is_fsm1                 : 1;
725 #endif /* DRV_BYTE_ORDER */
726 } lsm6dsox_fsm_status_a_mainpage_t;
727 
728 #define LSM6DSOX_FSM_STATUS_B_MAINPAGE        0x37U
729 typedef struct
730 {
731 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
732   uint8_t is_fsm9                 : 1;
733   uint8_t is_fsm10                : 1;
734   uint8_t is_fsm11                : 1;
735   uint8_t is_fsm12                : 1;
736   uint8_t is_fsm13                : 1;
737   uint8_t is_fsm14                : 1;
738   uint8_t is_fsm15                : 1;
739   uint8_t is_fsm16                : 1;
740 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
741   uint8_t is_fsm16                : 1;
742   uint8_t is_fsm15                : 1;
743   uint8_t is_fsm14                : 1;
744   uint8_t is_fsm13                : 1;
745   uint8_t is_fsm12                : 1;
746   uint8_t is_fsm11                : 1;
747   uint8_t is_fsm10                : 1;
748   uint8_t is_fsm9                 : 1;
749 #endif /* DRV_BYTE_ORDER */
750 } lsm6dsox_fsm_status_b_mainpage_t;
751 
752 #define LSM6DSOX_MLC_STATUS_MAINPAGE     0x38U
753 typedef struct
754 {
755 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
756   uint8_t is_mlc1             : 1;
757   uint8_t is_mlc2             : 1;
758   uint8_t is_mlc3             : 1;
759   uint8_t is_mlc4             : 1;
760   uint8_t is_mlc5             : 1;
761   uint8_t is_mlc6             : 1;
762   uint8_t is_mlc7             : 1;
763   uint8_t is_mlc8             : 1;
764 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
765   uint8_t is_mlc8             : 1;
766   uint8_t is_mlc7             : 1;
767   uint8_t is_mlc6             : 1;
768   uint8_t is_mlc5             : 1;
769   uint8_t is_mlc4             : 1;
770   uint8_t is_mlc3             : 1;
771   uint8_t is_mlc2             : 1;
772   uint8_t is_mlc1             : 1;
773 #endif /* DRV_BYTE_ORDER */
774 } lsm6dsox_mlc_status_mainpage_t;
775 
776 #define LSM6DSOX_STATUS_MASTER_MAINPAGE       0x39U
777 typedef struct
778 {
779 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
780   uint8_t sens_hub_endop          : 1;
781   uint8_t not_used_01             : 2;
782   uint8_t slave0_nack             : 1;
783   uint8_t slave1_nack             : 1;
784   uint8_t slave2_nack             : 1;
785   uint8_t slave3_nack             : 1;
786   uint8_t wr_once_done            : 1;
787 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
788   uint8_t wr_once_done            : 1;
789   uint8_t slave3_nack             : 1;
790   uint8_t slave2_nack             : 1;
791   uint8_t slave1_nack             : 1;
792   uint8_t slave0_nack             : 1;
793   uint8_t not_used_01             : 2;
794   uint8_t sens_hub_endop          : 1;
795 #endif /* DRV_BYTE_ORDER */
796 } lsm6dsox_status_master_mainpage_t;
797 
798 #define LSM6DSOX_FIFO_STATUS1                 0x3AU
799 typedef struct
800 {
801   uint8_t diff_fifo                : 8;
802 } lsm6dsox_fifo_status1_t;
803 
804 #define LSM6DSOX_FIFO_STATUS2                 0x3B
805 typedef struct
806 {
807 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
808   uint8_t diff_fifo                : 2;
809   uint8_t not_used_01              : 1;
810   uint8_t over_run_latched         : 1;
811   uint8_t counter_bdr_ia           : 1;
812   uint8_t fifo_full_ia             : 1;
813   uint8_t fifo_ovr_ia              : 1;
814   uint8_t fifo_wtm_ia              : 1;
815 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
816   uint8_t fifo_wtm_ia              : 1;
817   uint8_t fifo_ovr_ia              : 1;
818   uint8_t fifo_full_ia             : 1;
819   uint8_t counter_bdr_ia           : 1;
820   uint8_t over_run_latched         : 1;
821   uint8_t not_used_01              : 1;
822   uint8_t diff_fifo                : 2;
823 #endif /* DRV_BYTE_ORDER */
824 } lsm6dsox_fifo_status2_t;
825 
826 #define LSM6DSOX_TIMESTAMP0                   0x40U
827 #define LSM6DSOX_TIMESTAMP1                   0x41U
828 #define LSM6DSOX_TIMESTAMP2                   0x42U
829 #define LSM6DSOX_TIMESTAMP3                   0x43U
830 #define LSM6DSOX_UI_STATUS_REG_OIS            0x49U
831 typedef struct
832 {
833 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
834   uint8_t xlda                     : 1;
835   uint8_t gda                      : 1;
836   uint8_t gyro_settling            : 1;
837   uint8_t not_used_01              : 5;
838 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
839   uint8_t not_used_01              : 5;
840   uint8_t gyro_settling            : 1;
841   uint8_t gda                      : 1;
842   uint8_t xlda                     : 1;
843 #endif /* DRV_BYTE_ORDER */
844 } lsm6dsox_ui_status_reg_ois_t;
845 
846 #define LSM6DSOX_UI_OUTX_L_G_OIS              0x4AU
847 #define LSM6DSOX_UI_OUTX_H_G_OIS              0x4BU
848 #define LSM6DSOX_UI_OUTY_L_G_OIS              0x4CU
849 #define LSM6DSOX_UI_OUTY_H_G_OIS              0x4DU
850 #define LSM6DSOX_UI_OUTZ_L_G_OIS              0x4EU
851 #define LSM6DSOX_UI_OUTZ_H_G_OIS              0x4FU
852 #define LSM6DSOX_UI_OUTX_L_A_OIS              0x50U
853 #define LSM6DSOX_UI_OUTX_H_A_OIS              0x51U
854 #define LSM6DSOX_UI_OUTY_L_A_OIS              0x52U
855 #define LSM6DSOX_UI_OUTY_H_A_OIS              0x53U
856 #define LSM6DSOX_UI_OUTZ_L_A_OIS              0x54U
857 #define LSM6DSOX_UI_OUTZ_H_A_OIS              0x55U
858 
859 #define LSM6DSOX_TAP_CFG0                     0x56U
860 typedef struct
861 {
862 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
863   uint8_t lir                      : 1;
864   uint8_t tap_z_en                 : 1;
865   uint8_t tap_y_en                 : 1;
866   uint8_t tap_x_en                 : 1;
867   uint8_t slope_fds                : 1;
868   uint8_t sleep_status_on_int      : 1;
869   uint8_t int_clr_on_read          : 1;
870   uint8_t not_used_01              : 1;
871 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
872   uint8_t not_used_01              : 1;
873   uint8_t int_clr_on_read          : 1;
874   uint8_t sleep_status_on_int      : 1;
875   uint8_t slope_fds                : 1;
876   uint8_t tap_x_en                 : 1;
877   uint8_t tap_y_en                 : 1;
878   uint8_t tap_z_en                 : 1;
879   uint8_t lir                      : 1;
880 #endif /* DRV_BYTE_ORDER */
881 } lsm6dsox_tap_cfg0_t;
882 
883 #define LSM6DSOX_TAP_CFG1                     0x57U
884 typedef struct
885 {
886 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
887   uint8_t tap_ths_x                : 5;
888   uint8_t tap_priority             : 3;
889 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
890   uint8_t tap_priority             : 3;
891   uint8_t tap_ths_x                : 5;
892 #endif /* DRV_BYTE_ORDER */
893 } lsm6dsox_tap_cfg1_t;
894 
895 #define LSM6DSOX_TAP_CFG2                     0x58U
896 typedef struct
897 {
898 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
899   uint8_t tap_ths_y                : 5;
900   uint8_t inact_en                 : 2;
901   uint8_t interrupts_enable        : 1;
902 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
903   uint8_t interrupts_enable        : 1;
904   uint8_t inact_en                 : 2;
905   uint8_t tap_ths_y                : 5;
906 #endif /* DRV_BYTE_ORDER */
907 } lsm6dsox_tap_cfg2_t;
908 
909 #define LSM6DSOX_TAP_THS_6D                   0x59U
910 typedef struct
911 {
912 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
913   uint8_t tap_ths_z                : 5;
914   uint8_t sixd_ths                 : 2;
915   uint8_t d4d_en                   : 1;
916 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
917   uint8_t d4d_en                   : 1;
918   uint8_t sixd_ths                 : 2;
919   uint8_t tap_ths_z                : 5;
920 #endif /* DRV_BYTE_ORDER */
921 } lsm6dsox_tap_ths_6d_t;
922 
923 #define LSM6DSOX_INT_DUR2                     0x5AU
924 typedef struct
925 {
926 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
927   uint8_t shock                    : 2;
928   uint8_t quiet                    : 2;
929   uint8_t dur                      : 4;
930 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
931   uint8_t dur                      : 4;
932   uint8_t quiet                    : 2;
933   uint8_t shock                    : 2;
934 #endif /* DRV_BYTE_ORDER */
935 } lsm6dsox_int_dur2_t;
936 
937 #define LSM6DSOX_WAKE_UP_THS                  0x5BU
938 typedef struct
939 {
940 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
941   uint8_t wk_ths                   : 6;
942   uint8_t usr_off_on_wu            : 1;
943   uint8_t single_double_tap        : 1;
944 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
945   uint8_t single_double_tap        : 1;
946   uint8_t usr_off_on_wu            : 1;
947   uint8_t wk_ths                   : 6;
948 #endif /* DRV_BYTE_ORDER */
949 } lsm6dsox_wake_up_ths_t;
950 
951 #define LSM6DSOX_WAKE_UP_DUR                  0x5CU
952 typedef struct
953 {
954 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
955   uint8_t sleep_dur                : 4;
956   uint8_t wake_ths_w               : 1;
957   uint8_t wake_dur                 : 2;
958   uint8_t ff_dur                   : 1;
959 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
960   uint8_t ff_dur                   : 1;
961   uint8_t wake_dur                 : 2;
962   uint8_t wake_ths_w               : 1;
963   uint8_t sleep_dur                : 4;
964 #endif /* DRV_BYTE_ORDER */
965 } lsm6dsox_wake_up_dur_t;
966 
967 #define LSM6DSOX_FREE_FALL                    0x5DU
968 typedef struct
969 {
970 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
971   uint8_t ff_ths                   : 3;
972   uint8_t ff_dur                   : 5;
973 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
974   uint8_t ff_dur                   : 5;
975   uint8_t ff_ths                   : 3;
976 #endif /* DRV_BYTE_ORDER */
977 } lsm6dsox_free_fall_t;
978 
979 #define LSM6DSOX_MD1_CFG                      0x5EU
980 typedef struct
981 {
982 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
983   uint8_t int1_shub                : 1;
984   uint8_t int1_emb_func            : 1;
985   uint8_t int1_6d                  : 1;
986   uint8_t int1_double_tap          : 1;
987   uint8_t int1_ff                  : 1;
988   uint8_t int1_wu                  : 1;
989   uint8_t int1_single_tap          : 1;
990   uint8_t int1_sleep_change        : 1;
991 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
992   uint8_t int1_sleep_change        : 1;
993   uint8_t int1_single_tap          : 1;
994   uint8_t int1_wu                  : 1;
995   uint8_t int1_ff                  : 1;
996   uint8_t int1_double_tap          : 1;
997   uint8_t int1_6d                  : 1;
998   uint8_t int1_emb_func            : 1;
999   uint8_t int1_shub                : 1;
1000 #endif /* DRV_BYTE_ORDER */
1001 } lsm6dsox_md1_cfg_t;
1002 
1003 #define LSM6DSOX_MD2_CFG                      0x5FU
1004 typedef struct
1005 {
1006 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1007   uint8_t int2_timestamp           : 1;
1008   uint8_t int2_emb_func            : 1;
1009   uint8_t int2_6d                  : 1;
1010   uint8_t int2_double_tap          : 1;
1011   uint8_t int2_ff                  : 1;
1012   uint8_t int2_wu                  : 1;
1013   uint8_t int2_single_tap          : 1;
1014   uint8_t int2_sleep_change        : 1;
1015 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1016   uint8_t int2_sleep_change        : 1;
1017   uint8_t int2_single_tap          : 1;
1018   uint8_t int2_wu                  : 1;
1019   uint8_t int2_ff                  : 1;
1020   uint8_t int2_double_tap          : 1;
1021   uint8_t int2_6d                  : 1;
1022   uint8_t int2_emb_func            : 1;
1023   uint8_t int2_timestamp           : 1;
1024 #endif /* DRV_BYTE_ORDER */
1025 } lsm6dsox_md2_cfg_t;
1026 
1027 #define LSM6DSOX_S4S_ST_CMD_CODE              0x60U
1028 typedef struct
1029 {
1030   uint8_t s4s_st_cmd_code          : 8;
1031 } lsm6dsox_s4s_st_cmd_code_t;
1032 
1033 #define LSM6DSOX_S4S_DT_REG                   0x61U
1034 typedef struct
1035 {
1036   uint8_t dt                       : 8;
1037 } lsm6dsox_s4s_dt_reg_t;
1038 
1039 #define LSM6DSOX_I3C_BUS_AVB                  0x62U
1040 typedef struct
1041 {
1042 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1043   uint8_t pd_dis_int1              : 1;
1044   uint8_t not_used_01              : 2;
1045   uint8_t i3c_bus_avb_sel          : 2;
1046   uint8_t not_used_02              : 3;
1047 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1048   uint8_t not_used_02              : 3;
1049   uint8_t i3c_bus_avb_sel          : 2;
1050   uint8_t not_used_01              : 2;
1051   uint8_t pd_dis_int1              : 1;
1052 #endif /* DRV_BYTE_ORDER */
1053 } lsm6dsox_i3c_bus_avb_t;
1054 
1055 #define LSM6DSOX_INTERNAL_FREQ_FINE           0x63U
1056 typedef struct
1057 {
1058   uint8_t freq_fine                : 8;
1059 } lsm6dsox_internal_freq_fine_t;
1060 
1061 #define LSM6DSOX_UI_INT_OIS                   0x6F
1062 typedef struct
1063 {
1064 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1065   uint8_t not_used_01              : 3;
1066   uint8_t spi2_read_en             : 1;
1067   uint8_t not_used_02              : 1;
1068   uint8_t den_lh_ois               : 1;
1069   uint8_t lvl2_ois                 : 1;
1070   uint8_t int2_drdy_ois            : 1;
1071 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1072   uint8_t int2_drdy_ois            : 1;
1073   uint8_t lvl2_ois                 : 1;
1074   uint8_t den_lh_ois               : 1;
1075   uint8_t not_used_02              : 1;
1076   uint8_t spi2_read_en             : 1;
1077   uint8_t not_used_01              : 3;
1078 #endif /* DRV_BYTE_ORDER */
1079 } lsm6dsox_ui_int_ois_t;
1080 
1081 #define LSM6DSOX_UI_CTRL1_OIS                 0x70U
1082 typedef struct
1083 {
1084 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1085   uint8_t ois_en_spi2              : 1;
1086   uint8_t fs_g_ois                 : 3; /* fs_125_ois + fs[1:0]_g_ois */
1087   uint8_t mode4_en                 : 1;
1088   uint8_t sim_ois                  : 1;
1089   uint8_t lvl1_ois                 : 1;
1090   uint8_t not_used_01              : 1;
1091 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1092   uint8_t not_used_01              : 1;
1093   uint8_t lvl1_ois                 : 1;
1094   uint8_t sim_ois                  : 1;
1095   uint8_t mode4_en                 : 1;
1096   uint8_t fs_g_ois                 : 3; /* fs_125_ois + fs[1:0]_g_ois */
1097   uint8_t ois_en_spi2              : 1;
1098 #endif /* DRV_BYTE_ORDER */
1099 } lsm6dsox_ui_ctrl1_ois_t;
1100 
1101 #define LSM6DSOX_UI_CTRL2_OIS                 0x71U
1102 typedef struct
1103 {
1104 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1105   uint8_t hp_en_ois                : 1;
1106   uint8_t ftype_ois                : 2;
1107   uint8_t not_used_01              : 1;
1108   uint8_t hpm_ois                  : 2;
1109   uint8_t not_used_02              : 2;
1110 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1111   uint8_t not_used_02              : 2;
1112   uint8_t hpm_ois                  : 2;
1113   uint8_t not_used_01              : 1;
1114   uint8_t ftype_ois                : 2;
1115   uint8_t hp_en_ois                : 1;
1116 #endif /* DRV_BYTE_ORDER */
1117 } lsm6dsox_ui_ctrl2_ois_t;
1118 
1119 #define LSM6DSOX_UI_CTRL3_OIS                 0x72U
1120 typedef struct
1121 {
1122 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1123   uint8_t st_ois_clampdis          : 1;
1124   uint8_t not_used_01              : 2;
1125   uint8_t filter_xl_conf_ois       : 3;
1126   uint8_t fs_xl_ois                : 2;
1127 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1128   uint8_t fs_xl_ois                : 2;
1129   uint8_t filter_xl_conf_ois       : 3;
1130   uint8_t not_used_01              : 2;
1131   uint8_t st_ois_clampdis          : 1;
1132 #endif /* DRV_BYTE_ORDER */
1133 } lsm6dsox_ui_ctrl3_ois_t;
1134 
1135 #define LSM6DSOX_X_OFS_USR                    0x73U
1136 #define LSM6DSOX_Y_OFS_USR                    0x74U
1137 #define LSM6DSOX_Z_OFS_USR                    0x75U
1138 #define LSM6DSOX_FIFO_DATA_OUT_TAG            0x78U
1139 typedef struct
1140 {
1141 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1142   uint8_t tag_parity               : 1;
1143   uint8_t tag_cnt                  : 2;
1144   uint8_t tag_sensor               : 5;
1145 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1146   uint8_t tag_sensor               : 5;
1147   uint8_t tag_cnt                  : 2;
1148   uint8_t tag_parity               : 1;
1149 #endif /* DRV_BYTE_ORDER */
1150 } lsm6dsox_fifo_data_out_tag_t;
1151 
1152 #define LSM6DSOX_FIFO_DATA_OUT_X_L            0x79
1153 #define LSM6DSOX_FIFO_DATA_OUT_X_H            0x7A
1154 #define LSM6DSOX_FIFO_DATA_OUT_Y_L            0x7B
1155 #define LSM6DSOX_FIFO_DATA_OUT_Y_H            0x7C
1156 #define LSM6DSOX_FIFO_DATA_OUT_Z_L            0x7D
1157 #define LSM6DSOX_FIFO_DATA_OUT_Z_H            0x7E
1158 
1159 #define LSM6DSOX_SPI2_WHO_AM_I                0x0F
1160 #define LSM6DSOX_SPI2_STATUS_REG_OIS          0x1E
1161 typedef struct
1162 {
1163 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1164   uint8_t xlda                     : 1;
1165   uint8_t gda                      : 1;
1166   uint8_t gyro_settling            : 1;
1167   uint8_t not_used_01              : 5;
1168 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1169   uint8_t not_used_01              : 5;
1170   uint8_t gyro_settling            : 1;
1171   uint8_t gda                      : 1;
1172   uint8_t xlda                     : 1;
1173 #endif /* DRV_BYTE_ORDER */
1174 } lsm6dsox_spi2_status_reg_ois_t;
1175 
1176 #define LSM6DSOX_SPI2_OUT_TEMP_L              0x20
1177 #define LSM6DSOX_SPI2_OUT_TEMP_H              0x21
1178 #define LSM6DSOX_SPI2_OUTX_L_G_OIS            0x22
1179 #define LSM6DSOX_SPI2_OUTX_H_G_OIS            0x23
1180 #define LSM6DSOX_SPI2_OUTY_L_G_OIS            0x24
1181 #define LSM6DSOX_SPI2_OUTY_H_G_OIS            0x25
1182 #define LSM6DSOX_SPI2_OUTZ_L_G_OIS            0x26
1183 #define LSM6DSOX_SPI2_OUTZ_H_G_OIS            0x27
1184 #define LSM6DSOX_SPI2_OUTX_L_A_OIS            0x28
1185 #define LSM6DSOX_SPI2_OUTX_H_A_OIS            0x29
1186 #define LSM6DSOX_SPI2_OUTY_L_A_OIS            0x2A
1187 #define LSM6DSOX_SPI2_OUTY_H_A_OIS            0x2B
1188 #define LSM6DSOX_SPI2_OUTZ_L_A_OIS            0x2C
1189 #define LSM6DSOX_SPI2_OUTZ_H_A_OIS            0x2D
1190 #define LSM6DSOX_SPI2_INT_OIS                 0x6F
1191 typedef struct
1192 {
1193 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1194   uint8_t st_xl_ois                : 2;
1195   uint8_t not_used_01              : 3;
1196   uint8_t den_lh_ois               : 1;
1197   uint8_t lvl2_ois                 : 1;
1198   uint8_t int2_drdy_ois            : 1;
1199 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1200   uint8_t int2_drdy_ois            : 1;
1201   uint8_t lvl2_ois                 : 1;
1202   uint8_t den_lh_ois               : 1;
1203   uint8_t not_used_01              : 3;
1204   uint8_t st_xl_ois                : 2;
1205 #endif /* DRV_BYTE_ORDER */
1206 } lsm6dsox_spi2_int_ois_t;
1207 
1208 #define LSM6DSOX_SPI2_CTRL1_OIS               0x70U
1209 typedef struct
1210 {
1211 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1212   uint8_t ois_en_spi2              : 1;
1213   uint8_t fs_g_ois                 : 3; /* fs_125_ois + fs[1:0]_g_ois */
1214   uint8_t mode4_en                 : 1;
1215   uint8_t sim_ois                  : 1;
1216   uint8_t lvl1_ois                 : 1;
1217   uint8_t not_used_01              : 1;
1218 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1219   uint8_t not_used_01              : 1;
1220   uint8_t lvl1_ois                 : 1;
1221   uint8_t sim_ois                  : 1;
1222   uint8_t mode4_en                 : 1;
1223   uint8_t fs_g_ois                 : 3; /* fs_125_ois + fs[1:0]_g_ois */
1224   uint8_t ois_en_spi2              : 1;
1225 #endif /* DRV_BYTE_ORDER */
1226 } lsm6dsox_spi2_ctrl1_ois_t;
1227 
1228 #define LSM6DSOX_SPI2_CTRL2_OIS               0x71U
1229 typedef struct
1230 {
1231 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1232   uint8_t hp_en_ois                : 1;
1233   uint8_t ftype_ois                : 2;
1234   uint8_t not_used_01              : 1;
1235   uint8_t hpm_ois                  : 2;
1236   uint8_t not_used_02              : 2;
1237 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1238   uint8_t not_used_02              : 2;
1239   uint8_t hpm_ois                  : 2;
1240   uint8_t not_used_01              : 1;
1241   uint8_t ftype_ois                : 2;
1242   uint8_t hp_en_ois                : 1;
1243 #endif /* DRV_BYTE_ORDER */
1244 } lsm6dsox_spi2_ctrl2_ois_t;
1245 
1246 #define LSM6DSOX_SPI2_CTRL3_OIS               0x72U
1247 typedef struct
1248 {
1249 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1250   uint8_t st_ois_clampdis          : 1;
1251   uint8_t st_ois                   : 2;
1252   uint8_t filter_xl_conf_ois       : 3;
1253   uint8_t fs_xl_ois                : 2;
1254 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1255   uint8_t fs_xl_ois                : 2;
1256   uint8_t filter_xl_conf_ois       : 3;
1257   uint8_t st_ois                   : 2;
1258   uint8_t st_ois_clampdis          : 1;
1259 #endif /* DRV_BYTE_ORDER */
1260 } lsm6dsox_spi2_ctrl3_ois_t;
1261 
1262 #define LSM6DSOX_PAGE_SEL                     0x02U
1263 typedef struct
1264 {
1265 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1266   uint8_t not_used_01              : 4;
1267   uint8_t page_sel                 : 4;
1268 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1269   uint8_t page_sel                 : 4;
1270   uint8_t not_used_01              : 4;
1271 #endif /* DRV_BYTE_ORDER */
1272 } lsm6dsox_page_sel_t;
1273 
1274 #define LSM6DSOX_EMB_FUNC_EN_A                0x04U
1275 typedef struct
1276 {
1277 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1278   uint8_t not_used_01              : 3;
1279   uint8_t pedo_en                  : 1;
1280   uint8_t tilt_en                  : 1;
1281   uint8_t sign_motion_en           : 1;
1282   uint8_t not_used_02              : 2;
1283 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1284   uint8_t not_used_02              : 2;
1285   uint8_t sign_motion_en           : 1;
1286   uint8_t tilt_en                  : 1;
1287   uint8_t pedo_en                  : 1;
1288   uint8_t not_used_01              : 3;
1289 #endif /* DRV_BYTE_ORDER */
1290 } lsm6dsox_emb_func_en_a_t;
1291 
1292 #define LSM6DSOX_EMB_FUNC_EN_B                0x05U
1293 typedef struct
1294 {
1295 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1296   uint8_t fsm_en                   : 1;
1297   uint8_t not_used_01              : 2;
1298   uint8_t fifo_compr_en            : 1;
1299   uint8_t mlc_en                   : 1;
1300   uint8_t not_used_02              : 3;
1301 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1302   uint8_t not_used_02              : 3;
1303   uint8_t mlc_en                   : 1;
1304   uint8_t fifo_compr_en            : 1;
1305   uint8_t not_used_01              : 2;
1306   uint8_t fsm_en                   : 1;
1307 #endif /* DRV_BYTE_ORDER */
1308 } lsm6dsox_emb_func_en_b_t;
1309 
1310 #define LSM6DSOX_PAGE_ADDRESS                 0x08U
1311 typedef struct
1312 {
1313   uint8_t page_addr                : 8;
1314 } lsm6dsox_page_address_t;
1315 
1316 #define LSM6DSOX_PAGE_VALUE                   0x09U
1317 typedef struct
1318 {
1319   uint8_t page_value               : 8;
1320 } lsm6dsox_page_value_t;
1321 
1322 #define LSM6DSOX_EMB_FUNC_INT1                0x0AU
1323 typedef struct
1324 {
1325 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1326   uint8_t not_used_01              : 3;
1327   uint8_t int1_step_detector       : 1;
1328   uint8_t int1_tilt                : 1;
1329   uint8_t int1_sig_mot             : 1;
1330   uint8_t not_used_02              : 1;
1331   uint8_t int1_fsm_lc              : 1;
1332 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1333   uint8_t int1_fsm_lc              : 1;
1334   uint8_t not_used_02              : 1;
1335   uint8_t int1_sig_mot             : 1;
1336   uint8_t int1_tilt                : 1;
1337   uint8_t int1_step_detector       : 1;
1338   uint8_t not_used_01              : 3;
1339 #endif /* DRV_BYTE_ORDER */
1340 } lsm6dsox_emb_func_int1_t;
1341 
1342 #define LSM6DSOX_FSM_INT1_A                   0x0BU
1343 typedef struct
1344 {
1345 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1346   uint8_t int1_fsm1                : 1;
1347   uint8_t int1_fsm2                : 1;
1348   uint8_t int1_fsm3                : 1;
1349   uint8_t int1_fsm4                : 1;
1350   uint8_t int1_fsm5                : 1;
1351   uint8_t int1_fsm6                : 1;
1352   uint8_t int1_fsm7                : 1;
1353   uint8_t int1_fsm8                : 1;
1354 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1355   uint8_t int1_fsm8                : 1;
1356   uint8_t int1_fsm7                : 1;
1357   uint8_t int1_fsm6                : 1;
1358   uint8_t int1_fsm5                : 1;
1359   uint8_t int1_fsm4                : 1;
1360   uint8_t int1_fsm3                : 1;
1361   uint8_t int1_fsm2                : 1;
1362   uint8_t int1_fsm1                : 1;
1363 #endif /* DRV_BYTE_ORDER */
1364 } lsm6dsox_fsm_int1_a_t;
1365 
1366 #define LSM6DSOX_FSM_INT1_B                   0x0CU
1367 typedef struct
1368 {
1369 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1370   uint8_t int1_fsm16               : 1;
1371   uint8_t int1_fsm15               : 1;
1372   uint8_t int1_fsm14               : 1;
1373   uint8_t int1_fsm13               : 1;
1374   uint8_t int1_fsm12               : 1;
1375   uint8_t int1_fsm11               : 1;
1376   uint8_t int1_fsm10               : 1;
1377   uint8_t int1_fsm9                : 1;
1378 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1379 #endif /* DRV_BYTE_ORDER */
1380 } lsm6dsox_fsm_int1_b_t;
1381 
1382 #define LSM6DSOX_MLC_INT1                     0x0DU
1383 typedef struct
1384 {
1385 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1386   uint8_t int1_mlc1                : 1;
1387   uint8_t int1_mlc2                : 1;
1388   uint8_t int1_mlc3                : 1;
1389   uint8_t int1_mlc4                : 1;
1390   uint8_t int1_mlc5                : 1;
1391   uint8_t int1_mlc6                : 1;
1392   uint8_t int1_mlc7                : 1;
1393   uint8_t int1_mlc8                : 1;
1394 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1395   uint8_t int1_mlc8                : 1;
1396   uint8_t int1_mlc7                : 1;
1397   uint8_t int1_mlc6                : 1;
1398   uint8_t int1_mlc5                : 1;
1399   uint8_t int1_mlc4                : 1;
1400   uint8_t int1_mlc3                : 1;
1401   uint8_t int1_mlc2                : 1;
1402   uint8_t int1_mlc1                : 1;
1403 #endif /* DRV_BYTE_ORDER */
1404 } lsm6dsox_mlc_int1_t;
1405 
1406 #define LSM6DSOX_EMB_FUNC_INT2                0x0EU
1407 typedef struct
1408 {
1409 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1410   uint8_t not_used_01              : 3;
1411   uint8_t int2_step_detector       : 1;
1412   uint8_t int2_tilt                : 1;
1413   uint8_t int2_sig_mot             : 1;
1414   uint8_t not_used_02              : 1;
1415   uint8_t int2_fsm_lc              : 1;
1416 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1417   uint8_t int2_fsm_lc              : 1;
1418   uint8_t not_used_02              : 1;
1419   uint8_t int2_sig_mot             : 1;
1420   uint8_t int2_tilt                : 1;
1421   uint8_t int2_step_detector       : 1;
1422   uint8_t not_used_01              : 3;
1423 #endif /* DRV_BYTE_ORDER */
1424 } lsm6dsox_emb_func_int2_t;
1425 
1426 #define LSM6DSOX_FSM_INT2_A                   0x0FU
1427 typedef struct
1428 {
1429 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1430   uint8_t int2_fsm1                : 1;
1431   uint8_t int2_fsm2                : 1;
1432   uint8_t int2_fsm3                : 1;
1433   uint8_t int2_fsm4                : 1;
1434   uint8_t int2_fsm5                : 1;
1435   uint8_t int2_fsm6                : 1;
1436   uint8_t int2_fsm7                : 1;
1437   uint8_t int2_fsm8                : 1;
1438 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1439   uint8_t int2_fsm8                : 1;
1440   uint8_t int2_fsm7                : 1;
1441   uint8_t int2_fsm6                : 1;
1442   uint8_t int2_fsm5                : 1;
1443   uint8_t int2_fsm4                : 1;
1444   uint8_t int2_fsm3                : 1;
1445   uint8_t int2_fsm2                : 1;
1446   uint8_t int2_fsm1                : 1;
1447 #endif /* DRV_BYTE_ORDER */
1448 } lsm6dsox_fsm_int2_a_t;
1449 
1450 #define LSM6DSOX_FSM_INT2_B                   0x10U
1451 typedef struct
1452 {
1453 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1454   uint8_t int2_fsm9                : 1;
1455   uint8_t int2_fsm10               : 1;
1456   uint8_t int2_fsm11               : 1;
1457   uint8_t int2_fsm12               : 1;
1458   uint8_t int2_fsm13               : 1;
1459   uint8_t int2_fsm14               : 1;
1460   uint8_t int2_fsm15               : 1;
1461   uint8_t int2_fsm16               : 1;
1462 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1463   uint8_t int2_fsm16               : 1;
1464   uint8_t int2_fsm15               : 1;
1465   uint8_t int2_fsm14               : 1;
1466   uint8_t int2_fsm13               : 1;
1467   uint8_t int2_fsm12               : 1;
1468   uint8_t int2_fsm11               : 1;
1469   uint8_t int2_fsm10               : 1;
1470   uint8_t int2_fsm9                : 1;
1471 #endif /* DRV_BYTE_ORDER */
1472 } lsm6dsox_fsm_int2_b_t;
1473 
1474 #define LSM6DSOX_MLC_INT2                     0x11U
1475 typedef struct
1476 {
1477 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1478   uint8_t int2_mlc1             : 1;
1479   uint8_t int2_mlc2             : 1;
1480   uint8_t int2_mlc3             : 1;
1481   uint8_t int2_mlc4             : 1;
1482   uint8_t int2_mlc5             : 1;
1483   uint8_t int2_mlc6             : 1;
1484   uint8_t int2_mlc7             : 1;
1485   uint8_t int2_mlc8             : 1;
1486 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1487   uint8_t int2_mlc8             : 1;
1488   uint8_t int2_mlc7             : 1;
1489   uint8_t int2_mlc6             : 1;
1490   uint8_t int2_mlc5             : 1;
1491   uint8_t int2_mlc4             : 1;
1492   uint8_t int2_mlc3             : 1;
1493   uint8_t int2_mlc2             : 1;
1494   uint8_t int2_mlc1             : 1;
1495 #endif /* DRV_BYTE_ORDER */
1496 } lsm6dsox_mlc_int2_t;
1497 
1498 #define LSM6DSOX_EMB_FUNC_STATUS              0x12U
1499 typedef struct
1500 {
1501 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1502   uint8_t not_used_01              : 3;
1503   uint8_t is_step_det              : 1;
1504   uint8_t is_tilt                  : 1;
1505   uint8_t is_sigmot                : 1;
1506   uint8_t not_used_02              : 1;
1507   uint8_t is_fsm_lc                : 1;
1508 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1509   uint8_t is_fsm_lc                : 1;
1510   uint8_t not_used_02              : 1;
1511   uint8_t is_sigmot                : 1;
1512   uint8_t is_tilt                  : 1;
1513   uint8_t is_step_det              : 1;
1514   uint8_t not_used_01              : 3;
1515 #endif /* DRV_BYTE_ORDER */
1516 } lsm6dsox_emb_func_status_t;
1517 
1518 #define LSM6DSOX_FSM_STATUS_A                 0x13U
1519 typedef struct
1520 {
1521 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1522   uint8_t is_fsm1                  : 1;
1523   uint8_t is_fsm2                  : 1;
1524   uint8_t is_fsm3                  : 1;
1525   uint8_t is_fsm4                  : 1;
1526   uint8_t is_fsm5                  : 1;
1527   uint8_t is_fsm6                  : 1;
1528   uint8_t is_fsm7                  : 1;
1529   uint8_t is_fsm8                  : 1;
1530 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1531   uint8_t is_fsm8                  : 1;
1532   uint8_t is_fsm7                  : 1;
1533   uint8_t is_fsm6                  : 1;
1534   uint8_t is_fsm5                  : 1;
1535   uint8_t is_fsm4                  : 1;
1536   uint8_t is_fsm3                  : 1;
1537   uint8_t is_fsm2                  : 1;
1538   uint8_t is_fsm1                  : 1;
1539 #endif /* DRV_BYTE_ORDER */
1540 } lsm6dsox_fsm_status_a_t;
1541 
1542 #define LSM6DSOX_FSM_STATUS_B                 0x14U
1543 typedef struct
1544 {
1545 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1546   uint8_t is_fsm9                  : 1;
1547   uint8_t is_fsm10                 : 1;
1548   uint8_t is_fsm11                 : 1;
1549   uint8_t is_fsm12                 : 1;
1550   uint8_t is_fsm13                 : 1;
1551   uint8_t is_fsm14                 : 1;
1552   uint8_t is_fsm15                 : 1;
1553   uint8_t is_fsm16                 : 1;
1554 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1555   uint8_t is_fsm16                 : 1;
1556   uint8_t is_fsm15                 : 1;
1557   uint8_t is_fsm14                 : 1;
1558   uint8_t is_fsm13                 : 1;
1559   uint8_t is_fsm12                 : 1;
1560   uint8_t is_fsm11                 : 1;
1561   uint8_t is_fsm10                 : 1;
1562   uint8_t is_fsm9                  : 1;
1563 #endif /* DRV_BYTE_ORDER */
1564 } lsm6dsox_fsm_status_b_t;
1565 
1566 #define LSM6DSOX_MLC_STATUS                   0x15U
1567 typedef struct
1568 {
1569 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1570   uint8_t is_mlc1            : 1;
1571   uint8_t is_mlc2            : 1;
1572   uint8_t is_mlc3            : 1;
1573   uint8_t is_mlc4            : 1;
1574   uint8_t is_mlc5            : 1;
1575   uint8_t is_mlc6            : 1;
1576   uint8_t is_mlc7            : 1;
1577   uint8_t is_mlc8            : 1;
1578 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1579   uint8_t is_mlc8            : 1;
1580   uint8_t is_mlc7            : 1;
1581   uint8_t is_mlc6            : 1;
1582   uint8_t is_mlc5            : 1;
1583   uint8_t is_mlc4            : 1;
1584   uint8_t is_mlc3            : 1;
1585   uint8_t is_mlc2            : 1;
1586   uint8_t is_mlc1            : 1;
1587 #endif /* DRV_BYTE_ORDER */
1588 } lsm6dsox_mlc_status_t;
1589 
1590 #define LSM6DSOX_PAGE_RW                      0x17U
1591 typedef struct
1592 {
1593 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1594   uint8_t not_used_01              : 5;
1595   uint8_t page_rw                  : 2;  /* page_write + page_read */
1596   uint8_t emb_func_lir             : 1;
1597 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1598   uint8_t emb_func_lir             : 1;
1599   uint8_t page_rw                  : 2;  /* page_write + page_read */
1600   uint8_t not_used_01              : 5;
1601 #endif /* DRV_BYTE_ORDER */
1602 } lsm6dsox_page_rw_t;
1603 
1604 #define LSM6DSOX_EMB_FUNC_FIFO_CFG             0x44U
1605 typedef struct
1606 {
1607 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1608   uint8_t not_used_00              : 6;
1609   uint8_t pedo_fifo_en             : 1;
1610   uint8_t not_used_01              : 1;
1611 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1612   uint8_t not_used_01              : 1;
1613   uint8_t pedo_fifo_en             : 1;
1614   uint8_t not_used_00              : 6;
1615 #endif /* DRV_BYTE_ORDER */
1616 } lsm6dsox_emb_func_fifo_cfg_t;
1617 
1618 #define LSM6DSOX_FSM_ENABLE_A                 0x46U
1619 typedef struct
1620 {
1621 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1622   uint8_t fsm1_en                  : 1;
1623   uint8_t fsm2_en                  : 1;
1624   uint8_t fsm3_en                  : 1;
1625   uint8_t fsm4_en                  : 1;
1626   uint8_t fsm5_en                  : 1;
1627   uint8_t fsm6_en                  : 1;
1628   uint8_t fsm7_en                  : 1;
1629   uint8_t fsm8_en                  : 1;
1630 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1631   uint8_t fsm8_en                  : 1;
1632   uint8_t fsm7_en                  : 1;
1633   uint8_t fsm6_en                  : 1;
1634   uint8_t fsm5_en                  : 1;
1635   uint8_t fsm4_en                  : 1;
1636   uint8_t fsm3_en                  : 1;
1637   uint8_t fsm2_en                  : 1;
1638   uint8_t fsm1_en                  : 1;
1639 #endif /* DRV_BYTE_ORDER */
1640 } lsm6dsox_fsm_enable_a_t;
1641 
1642 #define LSM6DSOX_FSM_ENABLE_B                 0x47U
1643 typedef struct
1644 {
1645 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1646   uint8_t fsm9_en                  : 1;
1647   uint8_t fsm10_en                 : 1;
1648   uint8_t fsm11_en                 : 1;
1649   uint8_t fsm12_en                 : 1;
1650   uint8_t fsm13_en                 : 1;
1651   uint8_t fsm14_en                 : 1;
1652   uint8_t fsm15_en                 : 1;
1653   uint8_t fsm16_en                 : 1;
1654 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1655   uint8_t fsm16_en                 : 1;
1656   uint8_t fsm15_en                 : 1;
1657   uint8_t fsm14_en                 : 1;
1658   uint8_t fsm13_en                 : 1;
1659   uint8_t fsm12_en                 : 1;
1660   uint8_t fsm11_en                 : 1;
1661   uint8_t fsm10_en                 : 1;
1662   uint8_t fsm9_en                  : 1;
1663 #endif /* DRV_BYTE_ORDER */
1664 } lsm6dsox_fsm_enable_b_t;
1665 
1666 #define LSM6DSOX_FSM_LONG_COUNTER_L           0x48U
1667 #define LSM6DSOX_FSM_LONG_COUNTER_H           0x49U
1668 #define LSM6DSOX_FSM_LONG_COUNTER_CLEAR       0x4AU
1669 typedef struct
1670 {
1671 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1672   uint8_t fsm_lc_clr               : 2;  /* fsm_lc_cleared + fsm_lc_clear */
1673   uint8_t not_used_01              : 6;
1674 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1675   uint8_t not_used_01              : 6;
1676   uint8_t fsm_lc_clr               : 2;  /* fsm_lc_cleared + fsm_lc_clear */
1677 #endif /* DRV_BYTE_ORDER */
1678 } lsm6dsox_fsm_long_counter_clear_t;
1679 
1680 #define LSM6DSOX_FSM_OUTS1                    0x4CU
1681 typedef struct
1682 {
1683 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1684   uint8_t n_v                      : 1;
1685   uint8_t p_v                      : 1;
1686   uint8_t n_z                      : 1;
1687   uint8_t p_z                      : 1;
1688   uint8_t n_y                      : 1;
1689   uint8_t p_y                      : 1;
1690   uint8_t n_x                      : 1;
1691   uint8_t p_x                      : 1;
1692 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1693   uint8_t p_x                      : 1;
1694   uint8_t n_x                      : 1;
1695   uint8_t p_y                      : 1;
1696   uint8_t n_y                      : 1;
1697   uint8_t p_z                      : 1;
1698   uint8_t n_z                      : 1;
1699   uint8_t p_v                      : 1;
1700   uint8_t n_v                      : 1;
1701 #endif /* DRV_BYTE_ORDER */
1702 } lsm6dsox_fsm_outs1_t;
1703 
1704 #define LSM6DSOX_FSM_OUTS2                    0x4DU
1705 typedef struct
1706 {
1707 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1708   uint8_t n_v                      : 1;
1709   uint8_t p_v                      : 1;
1710   uint8_t n_z                      : 1;
1711   uint8_t p_z                      : 1;
1712   uint8_t n_y                      : 1;
1713   uint8_t p_y                      : 1;
1714   uint8_t n_x                      : 1;
1715   uint8_t p_x                      : 1;
1716 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1717   uint8_t p_x                      : 1;
1718   uint8_t n_x                      : 1;
1719   uint8_t p_y                      : 1;
1720   uint8_t n_y                      : 1;
1721   uint8_t p_z                      : 1;
1722   uint8_t n_z                      : 1;
1723   uint8_t p_v                      : 1;
1724   uint8_t n_v                      : 1;
1725 #endif /* DRV_BYTE_ORDER */
1726 } lsm6dsox_fsm_outs2_t;
1727 
1728 #define LSM6DSOX_FSM_OUTS3                    0x4EU
1729 typedef struct
1730 {
1731 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1732   uint8_t n_v                      : 1;
1733   uint8_t p_v                      : 1;
1734   uint8_t n_z                      : 1;
1735   uint8_t p_z                      : 1;
1736   uint8_t n_y                      : 1;
1737   uint8_t p_y                      : 1;
1738   uint8_t n_x                      : 1;
1739   uint8_t p_x                      : 1;
1740 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1741   uint8_t p_x                      : 1;
1742   uint8_t n_x                      : 1;
1743   uint8_t p_y                      : 1;
1744   uint8_t n_y                      : 1;
1745   uint8_t p_z                      : 1;
1746   uint8_t n_z                      : 1;
1747   uint8_t p_v                      : 1;
1748   uint8_t n_v                      : 1;
1749 #endif /* DRV_BYTE_ORDER */
1750 } lsm6dsox_fsm_outs3_t;
1751 
1752 #define LSM6DSOX_FSM_OUTS4                    0x4FU
1753 typedef struct
1754 {
1755 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1756   uint8_t n_v                      : 1;
1757   uint8_t p_v                      : 1;
1758   uint8_t n_z                      : 1;
1759   uint8_t p_z                      : 1;
1760   uint8_t n_y                      : 1;
1761   uint8_t p_y                      : 1;
1762   uint8_t n_x                      : 1;
1763   uint8_t p_x                      : 1;
1764 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1765   uint8_t p_x                      : 1;
1766   uint8_t n_x                      : 1;
1767   uint8_t p_y                      : 1;
1768   uint8_t n_y                      : 1;
1769   uint8_t p_z                      : 1;
1770   uint8_t n_z                      : 1;
1771   uint8_t p_v                      : 1;
1772   uint8_t n_v                      : 1;
1773 #endif /* DRV_BYTE_ORDER */
1774 } lsm6dsox_fsm_outs4_t;
1775 
1776 #define LSM6DSOX_FSM_OUTS5                    0x50U
1777 typedef struct
1778 {
1779 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1780   uint8_t n_v                      : 1;
1781   uint8_t p_v                      : 1;
1782   uint8_t n_z                      : 1;
1783   uint8_t p_z                      : 1;
1784   uint8_t n_y                      : 1;
1785   uint8_t p_y                      : 1;
1786   uint8_t n_x                      : 1;
1787   uint8_t p_x                      : 1;
1788 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1789   uint8_t p_x                      : 1;
1790   uint8_t n_x                      : 1;
1791   uint8_t p_y                      : 1;
1792   uint8_t n_y                      : 1;
1793   uint8_t p_z                      : 1;
1794   uint8_t n_z                      : 1;
1795   uint8_t p_v                      : 1;
1796   uint8_t n_v                      : 1;
1797 #endif /* DRV_BYTE_ORDER */
1798 } lsm6dsox_fsm_outs5_t;
1799 
1800 #define LSM6DSOX_FSM_OUTS6                    0x51U
1801 typedef struct
1802 {
1803 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1804   uint8_t n_v                      : 1;
1805   uint8_t p_v                      : 1;
1806   uint8_t n_z                      : 1;
1807   uint8_t p_z                      : 1;
1808   uint8_t n_y                      : 1;
1809   uint8_t p_y                      : 1;
1810   uint8_t n_x                      : 1;
1811   uint8_t p_x                      : 1;
1812 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1813   uint8_t p_x                      : 1;
1814   uint8_t n_x                      : 1;
1815   uint8_t p_y                      : 1;
1816   uint8_t n_y                      : 1;
1817   uint8_t p_z                      : 1;
1818   uint8_t n_z                      : 1;
1819   uint8_t p_v                      : 1;
1820   uint8_t n_v                      : 1;
1821 #endif /* DRV_BYTE_ORDER */
1822 } lsm6dsox_fsm_outs6_t;
1823 
1824 #define LSM6DSOX_FSM_OUTS7                    0x52U
1825 typedef struct
1826 {
1827 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1828   uint8_t n_v                      : 1;
1829   uint8_t p_v                      : 1;
1830   uint8_t n_z                      : 1;
1831   uint8_t p_z                      : 1;
1832   uint8_t n_y                      : 1;
1833   uint8_t p_y                      : 1;
1834   uint8_t n_x                      : 1;
1835   uint8_t p_x                      : 1;
1836 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1837   uint8_t p_x                      : 1;
1838   uint8_t n_x                      : 1;
1839   uint8_t p_y                      : 1;
1840   uint8_t n_y                      : 1;
1841   uint8_t p_z                      : 1;
1842   uint8_t n_z                      : 1;
1843   uint8_t p_v                      : 1;
1844   uint8_t n_v                      : 1;
1845 #endif /* DRV_BYTE_ORDER */
1846 } lsm6dsox_fsm_outs7_t;
1847 
1848 #define LSM6DSOX_FSM_OUTS8                    0x53U
1849 typedef struct
1850 {
1851 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1852   uint8_t n_v                      : 1;
1853   uint8_t p_v                      : 1;
1854   uint8_t n_z                      : 1;
1855   uint8_t p_z                      : 1;
1856   uint8_t n_y                      : 1;
1857   uint8_t p_y                      : 1;
1858   uint8_t n_x                      : 1;
1859   uint8_t p_x                      : 1;
1860 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1861   uint8_t p_x                      : 1;
1862   uint8_t n_x                      : 1;
1863   uint8_t p_y                      : 1;
1864   uint8_t n_y                      : 1;
1865   uint8_t p_z                      : 1;
1866   uint8_t n_z                      : 1;
1867   uint8_t p_v                      : 1;
1868   uint8_t n_v                      : 1;
1869 #endif /* DRV_BYTE_ORDER */
1870 } lsm6dsox_fsm_outs8_t;
1871 
1872 #define LSM6DSOX_FSM_OUTS9                    0x54U
1873 typedef struct
1874 {
1875 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1876   uint8_t n_v                      : 1;
1877   uint8_t p_v                      : 1;
1878   uint8_t n_z                      : 1;
1879   uint8_t p_z                      : 1;
1880   uint8_t n_y                      : 1;
1881   uint8_t p_y                      : 1;
1882   uint8_t n_x                      : 1;
1883   uint8_t p_x                      : 1;
1884 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1885   uint8_t p_x                      : 1;
1886   uint8_t n_x                      : 1;
1887   uint8_t p_y                      : 1;
1888   uint8_t n_y                      : 1;
1889   uint8_t p_z                      : 1;
1890   uint8_t n_z                      : 1;
1891   uint8_t p_v                      : 1;
1892   uint8_t n_v                      : 1;
1893 #endif /* DRV_BYTE_ORDER */
1894 } lsm6dsox_fsm_outs9_t;
1895 
1896 #define LSM6DSOX_FSM_OUTS10                   0x55U
1897 typedef struct
1898 {
1899 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1900   uint8_t n_v                      : 1;
1901   uint8_t p_v                      : 1;
1902   uint8_t n_z                      : 1;
1903   uint8_t p_z                      : 1;
1904   uint8_t n_y                      : 1;
1905   uint8_t p_y                      : 1;
1906   uint8_t n_x                      : 1;
1907   uint8_t p_x                      : 1;
1908 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1909   uint8_t p_x                      : 1;
1910   uint8_t n_x                      : 1;
1911   uint8_t p_y                      : 1;
1912   uint8_t n_y                      : 1;
1913   uint8_t p_z                      : 1;
1914   uint8_t n_z                      : 1;
1915   uint8_t p_v                      : 1;
1916   uint8_t n_v                      : 1;
1917 #endif /* DRV_BYTE_ORDER */
1918 } lsm6dsox_fsm_outs10_t;
1919 
1920 #define LSM6DSOX_FSM_OUTS11                   0x56U
1921 typedef struct
1922 {
1923 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1924   uint8_t n_v                      : 1;
1925   uint8_t p_v                      : 1;
1926   uint8_t n_z                      : 1;
1927   uint8_t p_z                      : 1;
1928   uint8_t n_y                      : 1;
1929   uint8_t p_y                      : 1;
1930   uint8_t n_x                      : 1;
1931   uint8_t p_x                      : 1;
1932 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1933   uint8_t p_x                      : 1;
1934   uint8_t n_x                      : 1;
1935   uint8_t p_y                      : 1;
1936   uint8_t n_y                      : 1;
1937   uint8_t p_z                      : 1;
1938   uint8_t n_z                      : 1;
1939   uint8_t p_v                      : 1;
1940   uint8_t n_v                      : 1;
1941 #endif /* DRV_BYTE_ORDER */
1942 } lsm6dsox_fsm_outs11_t;
1943 
1944 #define LSM6DSOX_FSM_OUTS12                   0x57U
1945 typedef struct
1946 {
1947 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1948   uint8_t n_v                      : 1;
1949   uint8_t p_v                      : 1;
1950   uint8_t n_z                      : 1;
1951   uint8_t p_z                      : 1;
1952   uint8_t n_y                      : 1;
1953   uint8_t p_y                      : 1;
1954   uint8_t n_x                      : 1;
1955   uint8_t p_x                      : 1;
1956 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1957   uint8_t p_x                      : 1;
1958   uint8_t n_x                      : 1;
1959   uint8_t p_y                      : 1;
1960   uint8_t n_y                      : 1;
1961   uint8_t p_z                      : 1;
1962   uint8_t n_z                      : 1;
1963   uint8_t p_v                      : 1;
1964   uint8_t n_v                      : 1;
1965 #endif /* DRV_BYTE_ORDER */
1966 } lsm6dsox_fsm_outs12_t;
1967 
1968 #define LSM6DSOX_FSM_OUTS13                   0x58U
1969 typedef struct
1970 {
1971 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1972   uint8_t n_v                      : 1;
1973   uint8_t p_v                      : 1;
1974   uint8_t n_z                      : 1;
1975   uint8_t p_z                      : 1;
1976   uint8_t n_y                      : 1;
1977   uint8_t p_y                      : 1;
1978   uint8_t n_x                      : 1;
1979   uint8_t p_x                      : 1;
1980 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1981   uint8_t p_x                      : 1;
1982   uint8_t n_x                      : 1;
1983   uint8_t p_y                      : 1;
1984   uint8_t n_y                      : 1;
1985   uint8_t p_z                      : 1;
1986   uint8_t n_z                      : 1;
1987   uint8_t p_v                      : 1;
1988   uint8_t n_v                      : 1;
1989 #endif /* DRV_BYTE_ORDER */
1990 } lsm6dsox_fsm_outs13_t;
1991 
1992 #define LSM6DSOX_FSM_OUTS14                   0x59U
1993 typedef struct
1994 {
1995 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1996   uint8_t n_v                      : 1;
1997   uint8_t p_v                      : 1;
1998   uint8_t n_z                      : 1;
1999   uint8_t p_z                      : 1;
2000   uint8_t n_y                      : 1;
2001   uint8_t p_y                      : 1;
2002   uint8_t n_x                      : 1;
2003   uint8_t p_x                      : 1;
2004 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2005   uint8_t p_x                      : 1;
2006   uint8_t n_x                      : 1;
2007   uint8_t p_y                      : 1;
2008   uint8_t n_y                      : 1;
2009   uint8_t p_z                      : 1;
2010   uint8_t n_z                      : 1;
2011   uint8_t p_v                      : 1;
2012   uint8_t n_v                      : 1;
2013 #endif /* DRV_BYTE_ORDER */
2014 } lsm6dsox_fsm_outs14_t;
2015 
2016 #define LSM6DSOX_FSM_OUTS15                   0x5AU
2017 typedef struct
2018 {
2019 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2020   uint8_t n_v                      : 1;
2021   uint8_t p_v                      : 1;
2022   uint8_t n_z                      : 1;
2023   uint8_t p_z                      : 1;
2024   uint8_t n_y                      : 1;
2025   uint8_t p_y                      : 1;
2026   uint8_t n_x                      : 1;
2027   uint8_t p_x                      : 1;
2028 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2029   uint8_t p_x                      : 1;
2030   uint8_t n_x                      : 1;
2031   uint8_t p_y                      : 1;
2032   uint8_t n_y                      : 1;
2033   uint8_t p_z                      : 1;
2034   uint8_t n_z                      : 1;
2035   uint8_t p_v                      : 1;
2036   uint8_t n_v                      : 1;
2037 #endif /* DRV_BYTE_ORDER */
2038 } lsm6dsox_fsm_outs15_t;
2039 
2040 #define LSM6DSOX_FSM_OUTS16                   0x5BU
2041 typedef struct
2042 {
2043 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2044   uint8_t n_v                      : 1;
2045   uint8_t p_v                      : 1;
2046   uint8_t n_z                      : 1;
2047   uint8_t p_z                      : 1;
2048   uint8_t n_y                      : 1;
2049   uint8_t p_y                      : 1;
2050   uint8_t n_x                      : 1;
2051   uint8_t p_x                      : 1;
2052 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2053   uint8_t p_x                      : 1;
2054   uint8_t n_x                      : 1;
2055   uint8_t p_y                      : 1;
2056   uint8_t n_y                      : 1;
2057   uint8_t p_z                      : 1;
2058   uint8_t n_z                      : 1;
2059   uint8_t p_v                      : 1;
2060   uint8_t n_v                      : 1;
2061 #endif /* DRV_BYTE_ORDER */
2062 } lsm6dsox_fsm_outs16_t;
2063 
2064 #define LSM6DSOX_EMB_FUNC_ODR_CFG_B           0x5FU
2065 typedef struct
2066 {
2067 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2068   uint8_t not_used_01              : 3;
2069   uint8_t fsm_odr                  : 2;
2070   uint8_t not_used_02              : 3;
2071 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2072   uint8_t not_used_02              : 3;
2073   uint8_t fsm_odr                  : 2;
2074   uint8_t not_used_01              : 3;
2075 #endif /* DRV_BYTE_ORDER */
2076 } lsm6dsox_emb_func_odr_cfg_b_t;
2077 
2078 #define LSM6DSOX_EMB_FUNC_ODR_CFG_C           0x60U
2079 typedef struct
2080 {
2081 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2082   uint8_t not_used_01             : 4;
2083   uint8_t mlc_odr                 : 2;
2084   uint8_t not_used_02             : 2;
2085 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2086   uint8_t not_used_02             : 2;
2087   uint8_t mlc_odr                 : 2;
2088   uint8_t not_used_01             : 4;
2089 #endif /* DRV_BYTE_ORDER */
2090 } lsm6dsox_emb_func_odr_cfg_c_t;
2091 
2092 #define LSM6DSOX_STEP_COUNTER_L               0x62U
2093 #define LSM6DSOX_STEP_COUNTER_H               0x63U
2094 #define LSM6DSOX_EMB_FUNC_SRC                 0x64U
2095 typedef struct
2096 {
2097 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2098   uint8_t not_used_01              : 2;
2099   uint8_t stepcounter_bit_set      : 1;
2100   uint8_t step_overflow            : 1;
2101   uint8_t step_count_delta_ia      : 1;
2102   uint8_t step_detected            : 1;
2103   uint8_t not_used_02              : 1;
2104   uint8_t pedo_rst_step            : 1;
2105 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2106   uint8_t pedo_rst_step            : 1;
2107   uint8_t not_used_02              : 1;
2108   uint8_t step_detected            : 1;
2109   uint8_t step_count_delta_ia      : 1;
2110   uint8_t step_overflow            : 1;
2111   uint8_t stepcounter_bit_set      : 1;
2112   uint8_t not_used_01              : 2;
2113 #endif /* DRV_BYTE_ORDER */
2114 } lsm6dsox_emb_func_src_t;
2115 
2116 #define LSM6DSOX_EMB_FUNC_INIT_A              0x66U
2117 typedef struct
2118 {
2119 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2120   uint8_t not_used_01               : 3;
2121   uint8_t step_det_init             : 1;
2122   uint8_t tilt_init                 : 1;
2123   uint8_t sig_mot_init              : 1;
2124   uint8_t not_used_02               : 2;
2125 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2126   uint8_t not_used_02               : 2;
2127   uint8_t sig_mot_init              : 1;
2128   uint8_t tilt_init                 : 1;
2129   uint8_t step_det_init             : 1;
2130   uint8_t not_used_01               : 3;
2131 #endif /* DRV_BYTE_ORDER */
2132 } lsm6dsox_emb_func_init_a_t;
2133 
2134 #define LSM6DSOX_EMB_FUNC_INIT_B              0x67U
2135 typedef struct
2136 {
2137 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2138   uint8_t fsm_init                 : 1;
2139   uint8_t not_used_01              : 2;
2140   uint8_t fifo_compr_init          : 1;
2141   uint8_t mlc_init                 : 1;
2142   uint8_t not_used_02              : 3;
2143 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2144   uint8_t not_used_02              : 3;
2145   uint8_t mlc_init                 : 1;
2146   uint8_t fifo_compr_init          : 1;
2147   uint8_t not_used_01              : 2;
2148   uint8_t fsm_init                 : 1;
2149 #endif /* DRV_BYTE_ORDER */
2150 } lsm6dsox_emb_func_init_b_t;
2151 
2152 #define LSM6DSOX_MLC0_SRC                     0x70U
2153 #define LSM6DSOX_MLC1_SRC                     0x71U
2154 #define LSM6DSOX_MLC2_SRC                     0x72U
2155 #define LSM6DSOX_MLC3_SRC                     0x73U
2156 #define LSM6DSOX_MLC4_SRC                     0x74U
2157 #define LSM6DSOX_MLC5_SRC                     0x75U
2158 #define LSM6DSOX_MLC6_SRC                     0x76U
2159 #define LSM6DSOX_MLC7_SRC                     0x77U
2160 #define LSM6DSOX_MAG_SENSITIVITY_L            0xBAU
2161 #define LSM6DSOX_MAG_SENSITIVITY_H            0xBBU
2162 #define LSM6DSOX_MAG_OFFX_L                   0xC0U
2163 #define LSM6DSOX_MAG_OFFX_H                   0xC1U
2164 #define LSM6DSOX_MAG_OFFY_L                   0xC2U
2165 #define LSM6DSOX_MAG_OFFY_H                   0xC3U
2166 #define LSM6DSOX_MAG_OFFZ_L                   0xC4U
2167 #define LSM6DSOX_MAG_OFFZ_H                   0xC5U
2168 #define LSM6DSOX_MAG_SI_XX_L                  0xC6U
2169 #define LSM6DSOX_MAG_SI_XX_H                  0xC7U
2170 #define LSM6DSOX_MAG_SI_XY_L                  0xC8U
2171 #define LSM6DSOX_MAG_SI_XY_H                  0xC9U
2172 #define LSM6DSOX_MAG_SI_XZ_L                  0xCAU
2173 #define LSM6DSOX_MAG_SI_XZ_H                  0xCBU
2174 #define LSM6DSOX_MAG_SI_YY_L                  0xCCU
2175 #define LSM6DSOX_MAG_SI_YY_H                  0xCDU
2176 #define LSM6DSOX_MAG_SI_YZ_L                  0xCEU
2177 #define LSM6DSOX_MAG_SI_YZ_H                  0xCFU
2178 #define LSM6DSOX_MAG_SI_ZZ_L                  0xD0U
2179 #define LSM6DSOX_MAG_SI_ZZ_H                  0xD1U
2180 #define LSM6DSOX_MAG_CFG_A                    0xD4U
2181 typedef struct
2182 {
2183 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2184   uint8_t mag_z_axis               : 3;
2185   uint8_t not_used_01              : 1;
2186   uint8_t mag_y_axis               : 3;
2187   uint8_t not_used_02              : 1;
2188 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2189   uint8_t not_used_02              : 1;
2190   uint8_t mag_y_axis               : 3;
2191   uint8_t not_used_01              : 1;
2192   uint8_t mag_z_axis               : 3;
2193 #endif /* DRV_BYTE_ORDER */
2194 } lsm6dsox_mag_cfg_a_t;
2195 
2196 #define LSM6DSOX_MAG_CFG_B                    0xD5U
2197 typedef struct
2198 {
2199 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2200   uint8_t mag_x_axis               : 3;
2201   uint8_t not_used_01              : 5;
2202 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2203   uint8_t not_used_01              : 5;
2204   uint8_t mag_x_axis               : 3;
2205 #endif /* DRV_BYTE_ORDER */
2206 } lsm6dsox_mag_cfg_b_t;
2207 
2208 #define LSM6DSOX_FSM_LC_TIMEOUT_L             0x17AU
2209 #define LSM6DSOX_FSM_LC_TIMEOUT_H             0x17BU
2210 #define LSM6DSOX_FSM_PROGRAMS                 0x17CU
2211 #define LSM6DSOX_FSM_START_ADD_L              0x17EU
2212 #define LSM6DSOX_FSM_START_ADD_H              0x17FU
2213 #define LSM6DSOX_PEDO_CMD_REG                 0x183U
2214 typedef struct
2215 {
2216 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2217   uint8_t ad_det_en                : 1;
2218   uint8_t not_used_01              : 1;
2219   uint8_t fp_rejection_en          : 1;
2220   uint8_t carry_count_en           : 1;
2221   uint8_t not_used_02              : 4;
2222 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2223   uint8_t not_used_02              : 4;
2224   uint8_t carry_count_en           : 1;
2225   uint8_t fp_rejection_en          : 1;
2226   uint8_t not_used_01              : 1;
2227   uint8_t ad_det_en                : 1;
2228 #endif /* DRV_BYTE_ORDER */
2229 } lsm6dsox_pedo_cmd_reg_t;
2230 
2231 #define LSM6DSOX_PEDO_DEB_STEPS_CONF          0x184U
2232 #define LSM6DSOX_PEDO_SC_DELTAT_L             0x1D0U
2233 #define LSM6DSOX_PEDO_SC_DELTAT_H             0x1D1U
2234 
2235 #define LSM6DSOX_MLC_MAG_SENSITIVITY_L        0x1E8U
2236 #define LSM6DSOX_MLC_MAG_SENSITIVITY_H        0x1E9U
2237 
2238 #define LSM6DSOX_SENSOR_HUB_1                 0x02U
2239 typedef struct
2240 {
2241 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2242   uint8_t bit0                    : 1;
2243   uint8_t bit1                    : 1;
2244   uint8_t bit2                    : 1;
2245   uint8_t bit3                    : 1;
2246   uint8_t bit4                    : 1;
2247   uint8_t bit5                    : 1;
2248   uint8_t bit6                    : 1;
2249   uint8_t bit7                    : 1;
2250 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2251   uint8_t bit7                    : 1;
2252   uint8_t bit6                    : 1;
2253   uint8_t bit5                    : 1;
2254   uint8_t bit4                    : 1;
2255   uint8_t bit3                    : 1;
2256   uint8_t bit2                    : 1;
2257   uint8_t bit1                    : 1;
2258   uint8_t bit0                    : 1;
2259 #endif /* DRV_BYTE_ORDER */
2260 } lsm6dsox_sensor_hub_1_t;
2261 
2262 #define LSM6DSOX_SENSOR_HUB_2                 0x03U
2263 typedef struct
2264 {
2265 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2266   uint8_t bit0                    : 1;
2267   uint8_t bit1                    : 1;
2268   uint8_t bit2                    : 1;
2269   uint8_t bit3                    : 1;
2270   uint8_t bit4                    : 1;
2271   uint8_t bit5                    : 1;
2272   uint8_t bit6                    : 1;
2273   uint8_t bit7                    : 1;
2274 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2275   uint8_t bit7                    : 1;
2276   uint8_t bit6                    : 1;
2277   uint8_t bit5                    : 1;
2278   uint8_t bit4                    : 1;
2279   uint8_t bit3                    : 1;
2280   uint8_t bit2                    : 1;
2281   uint8_t bit1                    : 1;
2282   uint8_t bit0                    : 1;
2283 #endif /* DRV_BYTE_ORDER */
2284 } lsm6dsox_sensor_hub_2_t;
2285 
2286 #define LSM6DSOX_SENSOR_HUB_3                 0x04U
2287 typedef struct
2288 {
2289 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2290   uint8_t bit0                    : 1;
2291   uint8_t bit1                    : 1;
2292   uint8_t bit2                    : 1;
2293   uint8_t bit3                    : 1;
2294   uint8_t bit4                    : 1;
2295   uint8_t bit5                    : 1;
2296   uint8_t bit6                    : 1;
2297   uint8_t bit7                    : 1;
2298 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2299   uint8_t bit7                    : 1;
2300   uint8_t bit6                    : 1;
2301   uint8_t bit5                    : 1;
2302   uint8_t bit4                    : 1;
2303   uint8_t bit3                    : 1;
2304   uint8_t bit2                    : 1;
2305   uint8_t bit1                    : 1;
2306   uint8_t bit0                    : 1;
2307 #endif /* DRV_BYTE_ORDER */
2308 } lsm6dsox_sensor_hub_3_t;
2309 
2310 #define LSM6DSOX_SENSOR_HUB_4                 0x05U
2311 typedef struct
2312 {
2313 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2314   uint8_t bit0                    : 1;
2315   uint8_t bit1                    : 1;
2316   uint8_t bit2                    : 1;
2317   uint8_t bit3                    : 1;
2318   uint8_t bit4                    : 1;
2319   uint8_t bit5                    : 1;
2320   uint8_t bit6                    : 1;
2321   uint8_t bit7                    : 1;
2322 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2323   uint8_t bit7                    : 1;
2324   uint8_t bit6                    : 1;
2325   uint8_t bit5                    : 1;
2326   uint8_t bit4                    : 1;
2327   uint8_t bit3                    : 1;
2328   uint8_t bit2                    : 1;
2329   uint8_t bit1                    : 1;
2330   uint8_t bit0                    : 1;
2331 #endif /* DRV_BYTE_ORDER */
2332 } lsm6dsox_sensor_hub_4_t;
2333 
2334 #define LSM6DSOX_SENSOR_HUB_5                 0x06U
2335 typedef struct
2336 {
2337 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2338   uint8_t bit0                    : 1;
2339   uint8_t bit1                    : 1;
2340   uint8_t bit2                    : 1;
2341   uint8_t bit3                    : 1;
2342   uint8_t bit4                    : 1;
2343   uint8_t bit5                    : 1;
2344   uint8_t bit6                    : 1;
2345   uint8_t bit7                    : 1;
2346 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2347   uint8_t bit7                    : 1;
2348   uint8_t bit6                    : 1;
2349   uint8_t bit5                    : 1;
2350   uint8_t bit4                    : 1;
2351   uint8_t bit3                    : 1;
2352   uint8_t bit2                    : 1;
2353   uint8_t bit1                    : 1;
2354   uint8_t bit0                    : 1;
2355 #endif /* DRV_BYTE_ORDER */
2356 } lsm6dsox_sensor_hub_5_t;
2357 
2358 #define LSM6DSOX_SENSOR_HUB_6                 0x07U
2359 typedef struct
2360 {
2361 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2362   uint8_t bit0                    : 1;
2363   uint8_t bit1                    : 1;
2364   uint8_t bit2                    : 1;
2365   uint8_t bit3                    : 1;
2366   uint8_t bit4                    : 1;
2367   uint8_t bit5                    : 1;
2368   uint8_t bit6                    : 1;
2369   uint8_t bit7                    : 1;
2370 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2371   uint8_t bit7                    : 1;
2372   uint8_t bit6                    : 1;
2373   uint8_t bit5                    : 1;
2374   uint8_t bit4                    : 1;
2375   uint8_t bit3                    : 1;
2376   uint8_t bit2                    : 1;
2377   uint8_t bit1                    : 1;
2378   uint8_t bit0                    : 1;
2379 #endif /* DRV_BYTE_ORDER */
2380 } lsm6dsox_sensor_hub_6_t;
2381 
2382 #define LSM6DSOX_SENSOR_HUB_7                 0x08U
2383 typedef struct
2384 {
2385 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2386   uint8_t bit0                    : 1;
2387   uint8_t bit1                    : 1;
2388   uint8_t bit2                    : 1;
2389   uint8_t bit3                    : 1;
2390   uint8_t bit4                    : 1;
2391   uint8_t bit5                    : 1;
2392   uint8_t bit6                    : 1;
2393   uint8_t bit7                    : 1;
2394 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2395   uint8_t bit7                    : 1;
2396   uint8_t bit6                    : 1;
2397   uint8_t bit5                    : 1;
2398   uint8_t bit4                    : 1;
2399   uint8_t bit3                    : 1;
2400   uint8_t bit2                    : 1;
2401   uint8_t bit1                    : 1;
2402   uint8_t bit0                    : 1;
2403 #endif /* DRV_BYTE_ORDER */
2404 } lsm6dsox_sensor_hub_7_t;
2405 
2406 #define LSM6DSOX_SENSOR_HUB_8                 0x09U
2407 typedef struct
2408 {
2409 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2410   uint8_t bit0                    : 1;
2411   uint8_t bit1                    : 1;
2412   uint8_t bit2                    : 1;
2413   uint8_t bit3                    : 1;
2414   uint8_t bit4                    : 1;
2415   uint8_t bit5                    : 1;
2416   uint8_t bit6                    : 1;
2417   uint8_t bit7                    : 1;
2418 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2419   uint8_t bit7                    : 1;
2420   uint8_t bit6                    : 1;
2421   uint8_t bit5                    : 1;
2422   uint8_t bit4                    : 1;
2423   uint8_t bit3                    : 1;
2424   uint8_t bit2                    : 1;
2425   uint8_t bit1                    : 1;
2426   uint8_t bit0                    : 1;
2427 #endif /* DRV_BYTE_ORDER */
2428 } lsm6dsox_sensor_hub_8_t;
2429 
2430 #define LSM6DSOX_SENSOR_HUB_9                 0x0AU
2431 typedef struct
2432 {
2433 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2434   uint8_t bit0                    : 1;
2435   uint8_t bit1                    : 1;
2436   uint8_t bit2                    : 1;
2437   uint8_t bit3                    : 1;
2438   uint8_t bit4                    : 1;
2439   uint8_t bit5                    : 1;
2440   uint8_t bit6                    : 1;
2441   uint8_t bit7                    : 1;
2442 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2443   uint8_t bit7                    : 1;
2444   uint8_t bit6                    : 1;
2445   uint8_t bit5                    : 1;
2446   uint8_t bit4                    : 1;
2447   uint8_t bit3                    : 1;
2448   uint8_t bit2                    : 1;
2449   uint8_t bit1                    : 1;
2450   uint8_t bit0                    : 1;
2451 #endif /* DRV_BYTE_ORDER */
2452 } lsm6dsox_sensor_hub_9_t;
2453 
2454 #define LSM6DSOX_SENSOR_HUB_10                0x0BU
2455 typedef struct
2456 {
2457 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2458   uint8_t bit0                    : 1;
2459   uint8_t bit1                    : 1;
2460   uint8_t bit2                    : 1;
2461   uint8_t bit3                    : 1;
2462   uint8_t bit4                    : 1;
2463   uint8_t bit5                    : 1;
2464   uint8_t bit6                    : 1;
2465   uint8_t bit7                    : 1;
2466 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2467   uint8_t bit7                    : 1;
2468   uint8_t bit6                    : 1;
2469   uint8_t bit5                    : 1;
2470   uint8_t bit4                    : 1;
2471   uint8_t bit3                    : 1;
2472   uint8_t bit2                    : 1;
2473   uint8_t bit1                    : 1;
2474   uint8_t bit0                    : 1;
2475 #endif /* DRV_BYTE_ORDER */
2476 } lsm6dsox_sensor_hub_10_t;
2477 
2478 #define LSM6DSOX_SENSOR_HUB_11                0x0CU
2479 typedef struct
2480 {
2481 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2482   uint8_t bit0                    : 1;
2483   uint8_t bit1                    : 1;
2484   uint8_t bit2                    : 1;
2485   uint8_t bit3                    : 1;
2486   uint8_t bit4                    : 1;
2487   uint8_t bit5                    : 1;
2488   uint8_t bit6                    : 1;
2489   uint8_t bit7                    : 1;
2490 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2491   uint8_t bit7                    : 1;
2492   uint8_t bit6                    : 1;
2493   uint8_t bit5                    : 1;
2494   uint8_t bit4                    : 1;
2495   uint8_t bit3                    : 1;
2496   uint8_t bit2                    : 1;
2497   uint8_t bit1                    : 1;
2498   uint8_t bit0                    : 1;
2499 #endif /* DRV_BYTE_ORDER */
2500 } lsm6dsox_sensor_hub_11_t;
2501 
2502 #define LSM6DSOX_SENSOR_HUB_12                0x0DU
2503 typedef struct
2504 {
2505 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2506   uint8_t bit0                    : 1;
2507   uint8_t bit1                    : 1;
2508   uint8_t bit2                    : 1;
2509   uint8_t bit3                    : 1;
2510   uint8_t bit4                    : 1;
2511   uint8_t bit5                    : 1;
2512   uint8_t bit6                    : 1;
2513   uint8_t bit7                    : 1;
2514 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2515   uint8_t bit7                    : 1;
2516   uint8_t bit6                    : 1;
2517   uint8_t bit5                    : 1;
2518   uint8_t bit4                    : 1;
2519   uint8_t bit3                    : 1;
2520   uint8_t bit2                    : 1;
2521   uint8_t bit1                    : 1;
2522   uint8_t bit0                    : 1;
2523 #endif /* DRV_BYTE_ORDER */
2524 } lsm6dsox_sensor_hub_12_t;
2525 
2526 #define LSM6DSOX_SENSOR_HUB_13                0x0EU
2527 typedef struct
2528 {
2529 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2530   uint8_t bit0                    : 1;
2531   uint8_t bit1                    : 1;
2532   uint8_t bit2                    : 1;
2533   uint8_t bit3                    : 1;
2534   uint8_t bit4                    : 1;
2535   uint8_t bit5                    : 1;
2536   uint8_t bit6                    : 1;
2537   uint8_t bit7                    : 1;
2538 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2539   uint8_t bit7                    : 1;
2540   uint8_t bit6                    : 1;
2541   uint8_t bit5                    : 1;
2542   uint8_t bit4                    : 1;
2543   uint8_t bit3                    : 1;
2544   uint8_t bit2                    : 1;
2545   uint8_t bit1                    : 1;
2546   uint8_t bit0                    : 1;
2547 #endif /* DRV_BYTE_ORDER */
2548 } lsm6dsox_sensor_hub_13_t;
2549 
2550 #define LSM6DSOX_SENSOR_HUB_14                0x0FU
2551 typedef struct
2552 {
2553 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2554   uint8_t bit0                    : 1;
2555   uint8_t bit1                    : 1;
2556   uint8_t bit2                    : 1;
2557   uint8_t bit3                    : 1;
2558   uint8_t bit4                    : 1;
2559   uint8_t bit5                    : 1;
2560   uint8_t bit6                    : 1;
2561   uint8_t bit7                    : 1;
2562 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2563   uint8_t bit7                    : 1;
2564   uint8_t bit6                    : 1;
2565   uint8_t bit5                    : 1;
2566   uint8_t bit4                    : 1;
2567   uint8_t bit3                    : 1;
2568   uint8_t bit2                    : 1;
2569   uint8_t bit1                    : 1;
2570   uint8_t bit0                    : 1;
2571 #endif /* DRV_BYTE_ORDER */
2572 } lsm6dsox_sensor_hub_14_t;
2573 
2574 #define LSM6DSOX_SENSOR_HUB_15                0x10U
2575 typedef struct
2576 {
2577 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2578   uint8_t bit0                    : 1;
2579   uint8_t bit1                    : 1;
2580   uint8_t bit2                    : 1;
2581   uint8_t bit3                    : 1;
2582   uint8_t bit4                    : 1;
2583   uint8_t bit5                    : 1;
2584   uint8_t bit6                    : 1;
2585   uint8_t bit7                    : 1;
2586 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2587   uint8_t bit7                    : 1;
2588   uint8_t bit6                    : 1;
2589   uint8_t bit5                    : 1;
2590   uint8_t bit4                    : 1;
2591   uint8_t bit3                    : 1;
2592   uint8_t bit2                    : 1;
2593   uint8_t bit1                    : 1;
2594   uint8_t bit0                    : 1;
2595 #endif /* DRV_BYTE_ORDER */
2596 } lsm6dsox_sensor_hub_15_t;
2597 
2598 #define LSM6DSOX_SENSOR_HUB_16                0x11U
2599 typedef struct
2600 {
2601 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2602   uint8_t bit0                    : 1;
2603   uint8_t bit1                    : 1;
2604   uint8_t bit2                    : 1;
2605   uint8_t bit3                    : 1;
2606   uint8_t bit4                    : 1;
2607   uint8_t bit5                    : 1;
2608   uint8_t bit6                    : 1;
2609   uint8_t bit7                    : 1;
2610 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2611   uint8_t bit7                    : 1;
2612   uint8_t bit6                    : 1;
2613   uint8_t bit5                    : 1;
2614   uint8_t bit4                    : 1;
2615   uint8_t bit3                    : 1;
2616   uint8_t bit2                    : 1;
2617   uint8_t bit1                    : 1;
2618   uint8_t bit0                    : 1;
2619 #endif /* DRV_BYTE_ORDER */
2620 } lsm6dsox_sensor_hub_16_t;
2621 
2622 #define LSM6DSOX_SENSOR_HUB_17                0x12U
2623 typedef struct
2624 {
2625 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2626   uint8_t bit0                    : 1;
2627   uint8_t bit1                    : 1;
2628   uint8_t bit2                    : 1;
2629   uint8_t bit3                    : 1;
2630   uint8_t bit4                    : 1;
2631   uint8_t bit5                    : 1;
2632   uint8_t bit6                    : 1;
2633   uint8_t bit7                    : 1;
2634 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2635   uint8_t bit7                    : 1;
2636   uint8_t bit6                    : 1;
2637   uint8_t bit5                    : 1;
2638   uint8_t bit4                    : 1;
2639   uint8_t bit3                    : 1;
2640   uint8_t bit2                    : 1;
2641   uint8_t bit1                    : 1;
2642   uint8_t bit0                    : 1;
2643 #endif /* DRV_BYTE_ORDER */
2644 } lsm6dsox_sensor_hub_17_t;
2645 
2646 #define LSM6DSOX_SENSOR_HUB_18                0x13U
2647 typedef struct
2648 {
2649 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2650   uint8_t bit0                    : 1;
2651   uint8_t bit1                    : 1;
2652   uint8_t bit2                    : 1;
2653   uint8_t bit3                    : 1;
2654   uint8_t bit4                    : 1;
2655   uint8_t bit5                    : 1;
2656   uint8_t bit6                    : 1;
2657   uint8_t bit7                    : 1;
2658 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2659   uint8_t bit7                    : 1;
2660   uint8_t bit6                    : 1;
2661   uint8_t bit5                    : 1;
2662   uint8_t bit4                    : 1;
2663   uint8_t bit3                    : 1;
2664   uint8_t bit2                    : 1;
2665   uint8_t bit1                    : 1;
2666   uint8_t bit0                    : 1;
2667 #endif /* DRV_BYTE_ORDER */
2668 } lsm6dsox_sensor_hub_18_t;
2669 
2670 #define LSM6DSOX_MASTER_CONFIG                0x14U
2671 typedef struct
2672 {
2673 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2674   uint8_t aux_sens_on              : 2;
2675   uint8_t master_on                : 1;
2676   uint8_t shub_pu_en               : 1;
2677   uint8_t pass_through_mode        : 1;
2678   uint8_t start_config             : 1;
2679   uint8_t write_once               : 1;
2680   uint8_t rst_master_regs          : 1;
2681 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2682   uint8_t rst_master_regs          : 1;
2683   uint8_t write_once               : 1;
2684   uint8_t start_config             : 1;
2685   uint8_t pass_through_mode        : 1;
2686   uint8_t shub_pu_en               : 1;
2687   uint8_t master_on                : 1;
2688   uint8_t aux_sens_on              : 2;
2689 #endif /* DRV_BYTE_ORDER */
2690 } lsm6dsox_master_config_t;
2691 
2692 #define LSM6DSOX_SLV0_ADD                     0x15U
2693 typedef struct
2694 {
2695 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2696   uint8_t rw_0                     : 1;
2697   uint8_t slave0                   : 7;
2698 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2699   uint8_t slave0                   : 7;
2700   uint8_t rw_0                     : 1;
2701 #endif /* DRV_BYTE_ORDER */
2702 } lsm6dsox_slv0_add_t;
2703 
2704 #define LSM6DSOX_SLV0_SUBADD                  0x16U
2705 typedef struct
2706 {
2707   uint8_t slave0_reg               : 8;
2708 } lsm6dsox_slv0_subadd_t;
2709 
2710 #define LSM6DSOX_SLV0_CONFIG                  0x17U
2711 typedef struct
2712 {
2713 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2714   uint8_t slave0_numop             : 3;
2715   uint8_t batch_ext_sens_0_en      : 1;
2716   uint8_t not_used_01              : 2;
2717   uint8_t shub_odr                 : 2;
2718 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2719   uint8_t shub_odr                 : 2;
2720   uint8_t not_used_01              : 2;
2721   uint8_t batch_ext_sens_0_en      : 1;
2722   uint8_t slave0_numop             : 3;
2723 #endif /* DRV_BYTE_ORDER */
2724 } lsm6dsox_slv0_config_t;
2725 
2726 #define LSM6DSOX_SLV1_ADD                     0x18U
2727 typedef struct
2728 {
2729 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2730   uint8_t r_1                      : 1;
2731   uint8_t slave1_add               : 7;
2732 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2733   uint8_t slave1_add               : 7;
2734   uint8_t r_1                      : 1;
2735 #endif /* DRV_BYTE_ORDER */
2736 } lsm6dsox_slv1_add_t;
2737 
2738 #define LSM6DSOX_SLV1_SUBADD                  0x19U
2739 typedef struct
2740 {
2741   uint8_t slave1_reg               : 8;
2742 } lsm6dsox_slv1_subadd_t;
2743 
2744 #define LSM6DSOX_SLV1_CONFIG                  0x1AU
2745 typedef struct
2746 {
2747 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2748   uint8_t slave1_numop             : 3;
2749   uint8_t batch_ext_sens_1_en      : 1;
2750   uint8_t not_used_01              : 4;
2751 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2752   uint8_t not_used_01              : 4;
2753   uint8_t batch_ext_sens_1_en      : 1;
2754   uint8_t slave1_numop             : 3;
2755 #endif /* DRV_BYTE_ORDER */
2756 } lsm6dsox_slv1_config_t;
2757 
2758 #define LSM6DSOX_SLV2_ADD                     0x1BU
2759 typedef struct
2760 {
2761 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2762   uint8_t r_2                      : 1;
2763   uint8_t slave2_add               : 7;
2764 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2765   uint8_t slave2_add               : 7;
2766   uint8_t r_2                      : 1;
2767 #endif /* DRV_BYTE_ORDER */
2768 } lsm6dsox_slv2_add_t;
2769 
2770 #define LSM6DSOX_SLV2_SUBADD                  0x1CU
2771 typedef struct
2772 {
2773   uint8_t slave2_reg               : 8;
2774 } lsm6dsox_slv2_subadd_t;
2775 
2776 #define LSM6DSOX_SLV2_CONFIG                  0x1DU
2777 typedef struct
2778 {
2779 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2780   uint8_t slave2_numop             : 3;
2781   uint8_t batch_ext_sens_2_en      : 1;
2782   uint8_t not_used_01              : 4;
2783 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2784   uint8_t not_used_01              : 4;
2785   uint8_t batch_ext_sens_2_en      : 1;
2786   uint8_t slave2_numop             : 3;
2787 #endif /* DRV_BYTE_ORDER */
2788 } lsm6dsox_slv2_config_t;
2789 
2790 #define LSM6DSOX_SLV3_ADD                     0x1EU
2791 typedef struct
2792 {
2793 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2794   uint8_t r_3                      : 1;
2795   uint8_t slave3_add               : 7;
2796 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2797   uint8_t slave3_add               : 7;
2798   uint8_t r_3                      : 1;
2799 #endif /* DRV_BYTE_ORDER */
2800 } lsm6dsox_slv3_add_t;
2801 
2802 #define LSM6DSOX_SLV3_SUBADD                  0x1FU
2803 typedef struct
2804 {
2805   uint8_t slave3_reg               : 8;
2806 } lsm6dsox_slv3_subadd_t;
2807 
2808 #define LSM6DSOX_SLV3_CONFIG                  0x20U
2809 typedef struct
2810 {
2811 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2812   uint8_t slave3_numop             : 3;
2813   uint8_t  batch_ext_sens_3_en     : 1;
2814   uint8_t not_used_01              : 4;
2815 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2816   uint8_t not_used_01              : 4;
2817   uint8_t  batch_ext_sens_3_en     : 1;
2818   uint8_t slave3_numop             : 3;
2819 #endif /* DRV_BYTE_ORDER */
2820 } lsm6dsox_slv3_config_t;
2821 
2822 #define LSM6DSOX_DATAWRITE_SLV0               0x21U
2823 typedef struct
2824 {
2825   uint8_t slave0_dataw             : 8;
2826 } lsm6dsox_datawrite_slv0_t;
2827 
2828 #define LSM6DSOX_STATUS_MASTER                0x22U
2829 typedef struct
2830 {
2831 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2832   uint8_t sens_hub_endop           : 1;
2833   uint8_t not_used_01              : 2;
2834   uint8_t slave0_nack              : 1;
2835   uint8_t slave1_nack              : 1;
2836   uint8_t slave2_nack              : 1;
2837   uint8_t slave3_nack              : 1;
2838   uint8_t wr_once_done             : 1;
2839 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2840   uint8_t wr_once_done             : 1;
2841   uint8_t slave3_nack              : 1;
2842   uint8_t slave2_nack              : 1;
2843   uint8_t slave1_nack              : 1;
2844   uint8_t slave0_nack              : 1;
2845   uint8_t not_used_01              : 2;
2846   uint8_t sens_hub_endop           : 1;
2847 #endif /* DRV_BYTE_ORDER */
2848 } lsm6dsox_status_master_t;
2849 
2850 #define LSM6DSOX_START_FSM_ADD                0x0400U
2851 
2852 /**
2853   * @defgroup LSM6DSOX_Register_Union
2854   * @brief    This union group all the registers having a bit-field
2855   *           description.
2856   *           This union is useful but it's not needed by the driver.
2857   *
2858   *           REMOVING this union you are compliant with:
2859   *           MISRA-C 2012 [Rule 19.2] -> " Union are not allowed "
2860   *
2861   * @{
2862   *
2863   */
2864 typedef union
2865 {
2866   lsm6dsox_func_cfg_access_t               func_cfg_access;
2867   lsm6dsox_pin_ctrl_t                      pin_ctrl;
2868   lsm6dsox_s4s_tph_l_t                     s4s_tph_l;
2869   lsm6dsox_s4s_tph_h_t                     s4s_tph_h;
2870   lsm6dsox_s4s_rr_t                        s4s_rr;
2871   lsm6dsox_fifo_ctrl1_t                    fifo_ctrl1;
2872   lsm6dsox_fifo_ctrl2_t                    fifo_ctrl2;
2873   lsm6dsox_fifo_ctrl3_t                    fifo_ctrl3;
2874   lsm6dsox_fifo_ctrl4_t                    fifo_ctrl4;
2875   lsm6dsox_counter_bdr_reg1_t              counter_bdr_reg1;
2876   lsm6dsox_counter_bdr_reg2_t              counter_bdr_reg2;
2877   lsm6dsox_int1_ctrl_t                     int1_ctrl;
2878   lsm6dsox_int2_ctrl_t                     int2_ctrl;
2879   lsm6dsox_ctrl1_xl_t                      ctrl1_xl;
2880   lsm6dsox_ctrl2_g_t                       ctrl2_g;
2881   lsm6dsox_ctrl3_c_t                       ctrl3_c;
2882   lsm6dsox_ctrl4_c_t                       ctrl4_c;
2883   lsm6dsox_ctrl5_c_t                       ctrl5_c;
2884   lsm6dsox_ctrl6_c_t                       ctrl6_c;
2885   lsm6dsox_ctrl7_g_t                       ctrl7_g;
2886   lsm6dsox_ctrl8_xl_t                      ctrl8_xl;
2887   lsm6dsox_ctrl9_xl_t                      ctrl9_xl;
2888   lsm6dsox_ctrl10_c_t                      ctrl10_c;
2889   lsm6dsox_all_int_src_t                   all_int_src;
2890   lsm6dsox_wake_up_src_t                   wake_up_src;
2891   lsm6dsox_tap_src_t                       tap_src;
2892   lsm6dsox_d6d_src_t                       d6d_src;
2893   lsm6dsox_status_reg_t                    status_reg;
2894   lsm6dsox_fifo_status1_t                  fifo_status1;
2895   lsm6dsox_fifo_status2_t                  fifo_status2;
2896   lsm6dsox_ui_status_reg_ois_t             ui_status_reg_ois;
2897   lsm6dsox_tap_cfg0_t                      tap_cfg0;
2898   lsm6dsox_tap_cfg1_t                      tap_cfg1;
2899   lsm6dsox_tap_cfg2_t                      tap_cfg2;
2900   lsm6dsox_tap_ths_6d_t                    tap_ths_6d;
2901   lsm6dsox_int_dur2_t                      int_dur2;
2902   lsm6dsox_wake_up_ths_t                   wake_up_ths;
2903   lsm6dsox_wake_up_dur_t                   wake_up_dur;
2904   lsm6dsox_free_fall_t                     free_fall;
2905   lsm6dsox_md1_cfg_t                       md1_cfg;
2906   lsm6dsox_md2_cfg_t                       md2_cfg;
2907   lsm6dsox_s4s_st_cmd_code_t               s4s_st_cmd_code;
2908   lsm6dsox_s4s_dt_reg_t                    s4s_dt_reg;
2909   lsm6dsox_i3c_bus_avb_t                   i3c_bus_avb;
2910   lsm6dsox_internal_freq_fine_t            internal_freq_fine;
2911   lsm6dsox_ui_int_ois_t                    ui_int_ois;
2912   lsm6dsox_ui_ctrl1_ois_t                  ui_ctrl1_ois;
2913   lsm6dsox_ui_ctrl2_ois_t                  ui_ctrl2_ois;
2914   lsm6dsox_ui_ctrl3_ois_t                  ui_ctrl3_ois;
2915   lsm6dsox_fifo_data_out_tag_t             fifo_data_out_tag;
2916   lsm6dsox_spi2_status_reg_ois_t           spi2_status_reg_ois;
2917   lsm6dsox_spi2_int_ois_t                  spi2_int_ois;
2918   lsm6dsox_spi2_ctrl1_ois_t                spi2_ctrl1_ois;
2919   lsm6dsox_spi2_ctrl2_ois_t                spi2_ctrl2_ois;
2920   lsm6dsox_spi2_ctrl3_ois_t                spi2_ctrl3_ois;
2921   lsm6dsox_page_sel_t                      page_sel;
2922   lsm6dsox_emb_func_en_a_t                 emb_func_en_a;
2923   lsm6dsox_emb_func_en_b_t                 emb_func_en_b;
2924   lsm6dsox_page_address_t                  page_address;
2925   lsm6dsox_page_value_t                    page_value;
2926   lsm6dsox_emb_func_int1_t                 emb_func_int1;
2927   lsm6dsox_fsm_int1_a_t                    fsm_int1_a;
2928   lsm6dsox_fsm_int1_b_t                    fsm_int1_b;
2929   lsm6dsox_emb_func_int2_t                 emb_func_int2;
2930   lsm6dsox_fsm_int2_a_t                    fsm_int2_a;
2931   lsm6dsox_fsm_int2_b_t                    fsm_int2_b;
2932   lsm6dsox_emb_func_status_t               emb_func_status;
2933   lsm6dsox_fsm_status_a_t                  fsm_status_a;
2934   lsm6dsox_fsm_status_b_t                  fsm_status_b;
2935   lsm6dsox_page_rw_t                       page_rw;
2936   lsm6dsox_emb_func_fifo_cfg_t             emb_func_fifo_cfg;
2937   lsm6dsox_fsm_enable_a_t                  fsm_enable_a;
2938   lsm6dsox_fsm_enable_b_t                  fsm_enable_b;
2939   lsm6dsox_fsm_long_counter_clear_t        fsm_long_counter_clear;
2940   lsm6dsox_fsm_outs1_t                     fsm_outs1;
2941   lsm6dsox_fsm_outs2_t                     fsm_outs2;
2942   lsm6dsox_fsm_outs3_t                     fsm_outs3;
2943   lsm6dsox_fsm_outs4_t                     fsm_outs4;
2944   lsm6dsox_fsm_outs5_t                     fsm_outs5;
2945   lsm6dsox_fsm_outs6_t                     fsm_outs6;
2946   lsm6dsox_fsm_outs7_t                     fsm_outs7;
2947   lsm6dsox_fsm_outs8_t                     fsm_outs8;
2948   lsm6dsox_fsm_outs9_t                     fsm_outs9;
2949   lsm6dsox_fsm_outs10_t                    fsm_outs10;
2950   lsm6dsox_fsm_outs11_t                    fsm_outs11;
2951   lsm6dsox_fsm_outs12_t                    fsm_outs12;
2952   lsm6dsox_fsm_outs13_t                    fsm_outs13;
2953   lsm6dsox_fsm_outs14_t                    fsm_outs14;
2954   lsm6dsox_fsm_outs15_t                    fsm_outs15;
2955   lsm6dsox_fsm_outs16_t                    fsm_outs16;
2956   lsm6dsox_emb_func_odr_cfg_b_t            emb_func_odr_cfg_b;
2957   lsm6dsox_emb_func_odr_cfg_c_t            emb_func_odr_cfg_c;
2958   lsm6dsox_emb_func_src_t                  emb_func_src;
2959   lsm6dsox_emb_func_init_a_t               emb_func_init_a;
2960   lsm6dsox_emb_func_init_b_t               emb_func_init_b;
2961   lsm6dsox_mag_cfg_a_t                     mag_cfg_a;
2962   lsm6dsox_mag_cfg_b_t                     mag_cfg_b;
2963   lsm6dsox_pedo_cmd_reg_t                  pedo_cmd_reg;
2964   lsm6dsox_sensor_hub_1_t                  sensor_hub_1;
2965   lsm6dsox_sensor_hub_2_t                  sensor_hub_2;
2966   lsm6dsox_sensor_hub_3_t                  sensor_hub_3;
2967   lsm6dsox_sensor_hub_4_t                  sensor_hub_4;
2968   lsm6dsox_sensor_hub_5_t                  sensor_hub_5;
2969   lsm6dsox_sensor_hub_6_t                  sensor_hub_6;
2970   lsm6dsox_sensor_hub_7_t                  sensor_hub_7;
2971   lsm6dsox_sensor_hub_8_t                  sensor_hub_8;
2972   lsm6dsox_sensor_hub_9_t                  sensor_hub_9;
2973   lsm6dsox_sensor_hub_10_t                 sensor_hub_10;
2974   lsm6dsox_sensor_hub_11_t                 sensor_hub_11;
2975   lsm6dsox_sensor_hub_12_t                 sensor_hub_12;
2976   lsm6dsox_sensor_hub_13_t                 sensor_hub_13;
2977   lsm6dsox_sensor_hub_14_t                 sensor_hub_14;
2978   lsm6dsox_sensor_hub_15_t                 sensor_hub_15;
2979   lsm6dsox_sensor_hub_16_t                 sensor_hub_16;
2980   lsm6dsox_sensor_hub_17_t                 sensor_hub_17;
2981   lsm6dsox_sensor_hub_18_t                 sensor_hub_18;
2982   lsm6dsox_master_config_t                 master_config;
2983   lsm6dsox_slv0_add_t                      slv0_add;
2984   lsm6dsox_slv0_subadd_t                   slv0_subadd;
2985   lsm6dsox_slv0_config_t                   slv0_config;
2986   lsm6dsox_slv1_add_t                      slv1_add;
2987   lsm6dsox_slv1_subadd_t                   slv1_subadd;
2988   lsm6dsox_slv1_config_t                   slv1_config;
2989   lsm6dsox_slv2_add_t                      slv2_add;
2990   lsm6dsox_slv2_subadd_t                   slv2_subadd;
2991   lsm6dsox_slv2_config_t                   slv2_config;
2992   lsm6dsox_slv3_add_t                      slv3_add;
2993   lsm6dsox_slv3_subadd_t                   slv3_subadd;
2994   lsm6dsox_slv3_config_t                   slv3_config;
2995   lsm6dsox_datawrite_slv0_t                datawrite_slv0;
2996   lsm6dsox_status_master_t                 status_master;
2997   bitwise_t                                bitwise;
2998   uint8_t                                  byte;
2999 } lsm6dsox_reg_t;
3000 
3001 /**
3002   * @}
3003   *
3004   */
3005 
3006 #ifndef __weak
3007 #define __weak __attribute__((weak))
3008 #endif /* __weak */
3009 
3010 /*
3011  * These are the basic platform dependent I/O routines to read
3012  * and write device registers connected on a standard bus.
3013  * The driver keeps offering a default implementation based on function
3014  * pointers to read/write routines for backward compatibility.
3015  * The __weak directive allows the final application to overwrite
3016  * them with a custom implementation.
3017  */
3018 
3019 int32_t lsm6dsox_read_reg(const stmdev_ctx_t *ctx, uint8_t reg,
3020                           uint8_t *data,
3021                           uint16_t len);
3022 int32_t lsm6dsox_write_reg(const stmdev_ctx_t *ctx, uint8_t reg,
3023                            uint8_t *data,
3024                            uint16_t len);
3025 
3026 float_t lsm6dsox_from_fs2_to_mg(int16_t lsb);
3027 float_t lsm6dsox_from_fs4_to_mg(int16_t lsb);
3028 float_t lsm6dsox_from_fs8_to_mg(int16_t lsb);
3029 float_t lsm6dsox_from_fs16_to_mg(int16_t lsb);
3030 
3031 float_t lsm6dsox_from_fs125_to_mdps(int16_t lsb);
3032 float_t lsm6dsox_from_fs500_to_mdps(int16_t lsb);
3033 float_t lsm6dsox_from_fs250_to_mdps(int16_t lsb);
3034 float_t lsm6dsox_from_fs1000_to_mdps(int16_t lsb);
3035 float_t lsm6dsox_from_fs2000_to_mdps(int16_t lsb);
3036 
3037 float_t lsm6dsox_from_lsb_to_celsius(int16_t lsb);
3038 
3039 float_t lsm6dsox_from_lsb_to_nsec(int16_t lsb);
3040 
3041 typedef enum
3042 {
3043   LSM6DSOX_2g   = 0,
3044   LSM6DSOX_16g  = 1, /* if XL_FS_MODE = ‘1’ -> LSM6DSOX_2g */
3045   LSM6DSOX_4g   = 2,
3046   LSM6DSOX_8g   = 3,
3047 } lsm6dsox_fs_xl_t;
3048 int32_t lsm6dsox_xl_full_scale_set(const stmdev_ctx_t *ctx,
3049                                    lsm6dsox_fs_xl_t val);
3050 int32_t lsm6dsox_xl_full_scale_get(const stmdev_ctx_t *ctx,
3051                                    lsm6dsox_fs_xl_t *val);
3052 
3053 typedef enum
3054 {
3055   LSM6DSOX_XL_ODR_OFF    = 0,
3056   LSM6DSOX_XL_ODR_12Hz5  = 1,
3057   LSM6DSOX_XL_ODR_26Hz   = 2,
3058   LSM6DSOX_XL_ODR_52Hz   = 3,
3059   LSM6DSOX_XL_ODR_104Hz  = 4,
3060   LSM6DSOX_XL_ODR_208Hz  = 5,
3061   LSM6DSOX_XL_ODR_417Hz  = 6,
3062   LSM6DSOX_XL_ODR_833Hz  = 7,
3063   LSM6DSOX_XL_ODR_1667Hz = 8,
3064   LSM6DSOX_XL_ODR_3333Hz = 9,
3065   LSM6DSOX_XL_ODR_6667Hz = 10,
3066   LSM6DSOX_XL_ODR_1Hz6   = 11, /* (low power only) */
3067 } lsm6dsox_odr_xl_t;
3068 int32_t lsm6dsox_xl_data_rate_set(const stmdev_ctx_t *ctx,
3069                                   lsm6dsox_odr_xl_t val);
3070 int32_t lsm6dsox_xl_data_rate_get(const stmdev_ctx_t *ctx,
3071                                   lsm6dsox_odr_xl_t *val);
3072 
3073 typedef enum
3074 {
3075   LSM6DSOX_250dps   = 0,
3076   LSM6DSOX_125dps   = 1,
3077   LSM6DSOX_500dps   = 2,
3078   LSM6DSOX_1000dps  = 4,
3079   LSM6DSOX_2000dps  = 6,
3080 } lsm6dsox_fs_g_t;
3081 int32_t lsm6dsox_gy_full_scale_set(const stmdev_ctx_t *ctx,
3082                                    lsm6dsox_fs_g_t val);
3083 int32_t lsm6dsox_gy_full_scale_get(const stmdev_ctx_t *ctx,
3084                                    lsm6dsox_fs_g_t *val);
3085 
3086 typedef enum
3087 {
3088   LSM6DSOX_GY_ODR_OFF    = 0,
3089   LSM6DSOX_GY_ODR_12Hz5  = 1,
3090   LSM6DSOX_GY_ODR_26Hz   = 2,
3091   LSM6DSOX_GY_ODR_52Hz   = 3,
3092   LSM6DSOX_GY_ODR_104Hz  = 4,
3093   LSM6DSOX_GY_ODR_208Hz  = 5,
3094   LSM6DSOX_GY_ODR_417Hz  = 6,
3095   LSM6DSOX_GY_ODR_833Hz  = 7,
3096   LSM6DSOX_GY_ODR_1667Hz = 8,
3097   LSM6DSOX_GY_ODR_3333Hz = 9,
3098   LSM6DSOX_GY_ODR_6667Hz = 10,
3099 } lsm6dsox_odr_g_t;
3100 int32_t lsm6dsox_gy_data_rate_set(const stmdev_ctx_t *ctx,
3101                                   lsm6dsox_odr_g_t val);
3102 int32_t lsm6dsox_gy_data_rate_get(const stmdev_ctx_t *ctx,
3103                                   lsm6dsox_odr_g_t *val);
3104 
3105 int32_t lsm6dsox_block_data_update_set(const stmdev_ctx_t *ctx,
3106                                        uint8_t val);
3107 int32_t lsm6dsox_block_data_update_get(const stmdev_ctx_t *ctx,
3108                                        uint8_t *val);
3109 
3110 typedef enum
3111 {
3112   LSM6DSOX_LSb_1mg  = 0,
3113   LSM6DSOX_LSb_16mg = 1,
3114 } lsm6dsox_usr_off_w_t;
3115 int32_t lsm6dsox_xl_offset_weight_set(const stmdev_ctx_t *ctx,
3116                                       lsm6dsox_usr_off_w_t val);
3117 int32_t lsm6dsox_xl_offset_weight_get(const stmdev_ctx_t *ctx,
3118                                       lsm6dsox_usr_off_w_t *val);
3119 
3120 typedef enum
3121 {
3122   LSM6DSOX_HIGH_PERFORMANCE_MD  = 0,
3123   LSM6DSOX_LOW_NORMAL_POWER_MD  = 1,
3124   LSM6DSOX_ULTRA_LOW_POWER_MD   = 2,
3125 } lsm6dsox_xl_hm_mode_t;
3126 int32_t lsm6dsox_xl_power_mode_set(const stmdev_ctx_t *ctx,
3127                                    lsm6dsox_xl_hm_mode_t val);
3128 int32_t lsm6dsox_xl_power_mode_get(const stmdev_ctx_t *ctx,
3129                                    lsm6dsox_xl_hm_mode_t *val);
3130 
3131 typedef enum
3132 {
3133   LSM6DSOX_GY_HIGH_PERFORMANCE  = 0,
3134   LSM6DSOX_GY_NORMAL            = 1,
3135 } lsm6dsox_g_hm_mode_t;
3136 int32_t lsm6dsox_gy_power_mode_set(const stmdev_ctx_t *ctx,
3137                                    lsm6dsox_g_hm_mode_t val);
3138 int32_t lsm6dsox_gy_power_mode_get(const stmdev_ctx_t *ctx,
3139                                    lsm6dsox_g_hm_mode_t *val);
3140 
3141 int32_t lsm6dsox_status_reg_get(const stmdev_ctx_t *ctx,
3142                                 lsm6dsox_status_reg_t *val);
3143 
3144 int32_t lsm6dsox_xl_flag_data_ready_get(const stmdev_ctx_t *ctx,
3145                                         uint8_t *val);
3146 
3147 int32_t lsm6dsox_gy_flag_data_ready_get(const stmdev_ctx_t *ctx,
3148                                         uint8_t *val);
3149 
3150 int32_t lsm6dsox_temp_flag_data_ready_get(const stmdev_ctx_t *ctx,
3151                                           uint8_t *val);
3152 
3153 int32_t lsm6dsox_xl_usr_offset_x_set(const stmdev_ctx_t *ctx,
3154                                      uint8_t *buff);
3155 int32_t lsm6dsox_xl_usr_offset_x_get(const stmdev_ctx_t *ctx,
3156                                      uint8_t *buff);
3157 
3158 int32_t lsm6dsox_xl_usr_offset_y_set(const stmdev_ctx_t *ctx,
3159                                      uint8_t *buff);
3160 int32_t lsm6dsox_xl_usr_offset_y_get(const stmdev_ctx_t *ctx,
3161                                      uint8_t *buff);
3162 
3163 int32_t lsm6dsox_xl_usr_offset_z_set(const stmdev_ctx_t *ctx,
3164                                      uint8_t *buff);
3165 int32_t lsm6dsox_xl_usr_offset_z_get(const stmdev_ctx_t *ctx,
3166                                      uint8_t *buff);
3167 
3168 int32_t lsm6dsox_xl_usr_offset_set(const stmdev_ctx_t *ctx, uint8_t val);
3169 int32_t lsm6dsox_xl_usr_offset_get(const stmdev_ctx_t *ctx, uint8_t *val);
3170 
3171 int32_t lsm6dsox_timestamp_rst(const stmdev_ctx_t *ctx);
3172 
3173 int32_t lsm6dsox_timestamp_set(const stmdev_ctx_t *ctx, uint8_t val);
3174 int32_t lsm6dsox_timestamp_get(const stmdev_ctx_t *ctx, uint8_t *val);
3175 
3176 int32_t lsm6dsox_timestamp_raw_get(const stmdev_ctx_t *ctx, uint32_t *val);
3177 
3178 typedef enum
3179 {
3180   LSM6DSOX_NO_ROUND      = 0,
3181   LSM6DSOX_ROUND_XL      = 1,
3182   LSM6DSOX_ROUND_GY      = 2,
3183   LSM6DSOX_ROUND_GY_XL   = 3,
3184 } lsm6dsox_rounding_t;
3185 int32_t lsm6dsox_rounding_mode_set(const stmdev_ctx_t *ctx,
3186                                    lsm6dsox_rounding_t val);
3187 int32_t lsm6dsox_rounding_mode_get(const stmdev_ctx_t *ctx,
3188                                    lsm6dsox_rounding_t *val);
3189 
3190 typedef enum
3191 {
3192   LSM6DSOX_STAT_RND_DISABLE  = 0,
3193   LSM6DSOX_STAT_RND_ENABLE   = 1,
3194 } lsm6dsox_rounding_status_t;
3195 int32_t lsm6dsox_rounding_on_status_set(const stmdev_ctx_t *ctx,
3196                                         lsm6dsox_rounding_status_t val);
3197 int32_t lsm6dsox_rounding_on_status_get(const stmdev_ctx_t *ctx,
3198                                         lsm6dsox_rounding_status_t *val);
3199 
3200 int32_t lsm6dsox_temperature_raw_get(const stmdev_ctx_t *ctx, int16_t *val);
3201 
3202 int32_t lsm6dsox_angular_rate_raw_get(const stmdev_ctx_t *ctx,
3203                                       int16_t *val);
3204 
3205 int32_t lsm6dsox_acceleration_raw_get(const stmdev_ctx_t *ctx,
3206                                       int16_t *val);
3207 
3208 int32_t lsm6dsox_fifo_out_raw_get(const stmdev_ctx_t *ctx, uint8_t *buff);
3209 
3210 int32_t lsm6dsox_ois_angular_rate_raw_get(const stmdev_ctx_t *ctx,
3211                                           int16_t *val);
3212 
3213 int32_t lsm6dsox_ois_acceleration_raw_get(const stmdev_ctx_t *ctx,
3214                                           int16_t *val);
3215 
3216 int32_t lsm6dsox_aux_temperature_raw_get(const stmdev_ctx_t *ctx,
3217                                          int16_t *val);
3218 
3219 int32_t lsm6dsox_aux_ois_angular_rate_raw_get(const stmdev_ctx_t *ctx,
3220                                               int16_t *val);
3221 
3222 int32_t lsm6dsox_aux_ois_acceleration_raw_get(const stmdev_ctx_t *ctx,
3223                                               int16_t *val);
3224 
3225 int32_t lsm6dsox_number_of_steps_get(const stmdev_ctx_t *ctx,
3226                                      uint16_t *val);
3227 
3228 int32_t lsm6dsox_steps_reset(const stmdev_ctx_t *ctx);
3229 
3230 int32_t lsm6dsox_mlc_out_get(const stmdev_ctx_t *ctx, uint8_t *buff);
3231 
3232 int32_t lsm6dsox_odr_cal_reg_set(const stmdev_ctx_t *ctx, uint8_t val);
3233 int32_t lsm6dsox_odr_cal_reg_get(const stmdev_ctx_t *ctx, uint8_t *val);
3234 
3235 typedef enum
3236 {
3237   LSM6DSOX_USER_BANK           = 0,
3238   LSM6DSOX_SENSOR_HUB_BANK     = 1,
3239   LSM6DSOX_EMBEDDED_FUNC_BANK  = 2,
3240 } lsm6dsox_reg_access_t;
3241 int32_t lsm6dsox_mem_bank_set(const stmdev_ctx_t *ctx,
3242                               lsm6dsox_reg_access_t val);
3243 int32_t lsm6dsox_mem_bank_get(const stmdev_ctx_t *ctx,
3244                               lsm6dsox_reg_access_t *val);
3245 
3246 int32_t lsm6dsox_ln_pg_write_byte(const stmdev_ctx_t *ctx, uint16_t address,
3247                                   uint8_t *val);
3248 int32_t lsm6dsox_ln_pg_read_byte(const stmdev_ctx_t *ctx, uint16_t address,
3249                                  uint8_t *val);
3250 
3251 int32_t lsm6dsox_ln_pg_write(const stmdev_ctx_t *ctx, uint16_t address,
3252                              uint8_t *buf, uint8_t len);
3253 int32_t lsm6dsox_ln_pg_read(const stmdev_ctx_t *ctx, uint16_t address,
3254                             uint8_t *val);
3255 
3256 typedef enum
3257 {
3258   LSM6DSOX_DRDY_LATCHED = 0,
3259   LSM6DSOX_DRDY_PULSED  = 1,
3260 } lsm6dsox_dataready_pulsed_t;
3261 int32_t lsm6dsox_data_ready_mode_set(const stmdev_ctx_t *ctx,
3262                                      lsm6dsox_dataready_pulsed_t val);
3263 int32_t lsm6dsox_data_ready_mode_get(const stmdev_ctx_t *ctx,
3264                                      lsm6dsox_dataready_pulsed_t *val);
3265 
3266 int32_t lsm6dsox_device_id_get(const stmdev_ctx_t *ctx, uint8_t *buff);
3267 
3268 int32_t lsm6dsox_reset_set(const stmdev_ctx_t *ctx, uint8_t val);
3269 int32_t lsm6dsox_reset_get(const stmdev_ctx_t *ctx, uint8_t *val);
3270 
3271 int32_t lsm6dsox_auto_increment_set(const stmdev_ctx_t *ctx, uint8_t val);
3272 int32_t lsm6dsox_auto_increment_get(const stmdev_ctx_t *ctx, uint8_t *val);
3273 
3274 int32_t lsm6dsox_boot_set(const stmdev_ctx_t *ctx, uint8_t val);
3275 int32_t lsm6dsox_boot_get(const stmdev_ctx_t *ctx, uint8_t *val);
3276 
3277 typedef enum
3278 {
3279   LSM6DSOX_XL_ST_DISABLE  = 0,
3280   LSM6DSOX_XL_ST_POSITIVE = 1,
3281   LSM6DSOX_XL_ST_NEGATIVE = 2,
3282 } lsm6dsox_st_xl_t;
3283 int32_t lsm6dsox_xl_self_test_set(const stmdev_ctx_t *ctx,
3284                                   lsm6dsox_st_xl_t val);
3285 int32_t lsm6dsox_xl_self_test_get(const stmdev_ctx_t *ctx,
3286                                   lsm6dsox_st_xl_t *val);
3287 
3288 typedef enum
3289 {
3290   LSM6DSOX_GY_ST_DISABLE  = 0,
3291   LSM6DSOX_GY_ST_POSITIVE = 1,
3292   LSM6DSOX_GY_ST_NEGATIVE = 3,
3293 } lsm6dsox_st_g_t;
3294 int32_t lsm6dsox_gy_self_test_set(const stmdev_ctx_t *ctx,
3295                                   lsm6dsox_st_g_t val);
3296 int32_t lsm6dsox_gy_self_test_get(const stmdev_ctx_t *ctx,
3297                                   lsm6dsox_st_g_t *val);
3298 
3299 int32_t lsm6dsox_xl_filter_lp2_set(const stmdev_ctx_t *ctx, uint8_t val);
3300 int32_t lsm6dsox_xl_filter_lp2_get(const stmdev_ctx_t *ctx, uint8_t *val);
3301 
3302 int32_t lsm6dsox_gy_filter_lp1_set(const stmdev_ctx_t *ctx, uint8_t val);
3303 int32_t lsm6dsox_gy_filter_lp1_get(const stmdev_ctx_t *ctx, uint8_t *val);
3304 
3305 int32_t lsm6dsox_filter_settling_mask_set(const stmdev_ctx_t *ctx,
3306                                           uint8_t val);
3307 int32_t lsm6dsox_filter_settling_mask_get(const stmdev_ctx_t *ctx,
3308                                           uint8_t *val);
3309 
3310 typedef enum
3311 {
3312   LSM6DSOX_ULTRA_LIGHT  = 0,
3313   LSM6DSOX_VERY_LIGHT   = 1,
3314   LSM6DSOX_LIGHT        = 2,
3315   LSM6DSOX_MEDIUM       = 3,
3316   LSM6DSOX_STRONG       = 4,
3317   LSM6DSOX_VERY_STRONG  = 5,
3318   LSM6DSOX_AGGRESSIVE   = 6,
3319   LSM6DSOX_XTREME       = 7,
3320 } lsm6dsox_ftype_t;
3321 int32_t lsm6dsox_gy_lp1_bandwidth_set(const stmdev_ctx_t *ctx,
3322                                       lsm6dsox_ftype_t val);
3323 int32_t lsm6dsox_gy_lp1_bandwidth_get(const stmdev_ctx_t *ctx,
3324                                       lsm6dsox_ftype_t *val);
3325 
3326 int32_t lsm6dsox_xl_lp2_on_6d_set(const stmdev_ctx_t *ctx, uint8_t val);
3327 int32_t lsm6dsox_xl_lp2_on_6d_get(const stmdev_ctx_t *ctx, uint8_t *val);
3328 
3329 typedef enum
3330 {
3331   LSM6DSOX_HP_PATH_DISABLE_ON_OUT    = 0x00,
3332   LSM6DSOX_SLOPE_ODR_DIV_4           = 0x10,
3333   LSM6DSOX_HP_ODR_DIV_10             = 0x11,
3334   LSM6DSOX_HP_ODR_DIV_20             = 0x12,
3335   LSM6DSOX_HP_ODR_DIV_45             = 0x13,
3336   LSM6DSOX_HP_ODR_DIV_100            = 0x14,
3337   LSM6DSOX_HP_ODR_DIV_200            = 0x15,
3338   LSM6DSOX_HP_ODR_DIV_400            = 0x16,
3339   LSM6DSOX_HP_ODR_DIV_800            = 0x17,
3340   LSM6DSOX_HP_REF_MD_ODR_DIV_10      = 0x31,
3341   LSM6DSOX_HP_REF_MD_ODR_DIV_20      = 0x32,
3342   LSM6DSOX_HP_REF_MD_ODR_DIV_45      = 0x33,
3343   LSM6DSOX_HP_REF_MD_ODR_DIV_100     = 0x34,
3344   LSM6DSOX_HP_REF_MD_ODR_DIV_200     = 0x35,
3345   LSM6DSOX_HP_REF_MD_ODR_DIV_400     = 0x36,
3346   LSM6DSOX_HP_REF_MD_ODR_DIV_800     = 0x37,
3347   LSM6DSOX_LP_ODR_DIV_10             = 0x01,
3348   LSM6DSOX_LP_ODR_DIV_20             = 0x02,
3349   LSM6DSOX_LP_ODR_DIV_45             = 0x03,
3350   LSM6DSOX_LP_ODR_DIV_100            = 0x04,
3351   LSM6DSOX_LP_ODR_DIV_200            = 0x05,
3352   LSM6DSOX_LP_ODR_DIV_400            = 0x06,
3353   LSM6DSOX_LP_ODR_DIV_800            = 0x07,
3354 } lsm6dsox_hp_slope_xl_en_t;
3355 int32_t lsm6dsox_xl_hp_path_on_out_set(const stmdev_ctx_t *ctx,
3356                                        lsm6dsox_hp_slope_xl_en_t val);
3357 int32_t lsm6dsox_xl_hp_path_on_out_get(const stmdev_ctx_t *ctx,
3358                                        lsm6dsox_hp_slope_xl_en_t *val);
3359 
3360 int32_t lsm6dsox_xl_fast_settling_set(const stmdev_ctx_t *ctx, uint8_t val);
3361 int32_t lsm6dsox_xl_fast_settling_get(const stmdev_ctx_t *ctx,
3362                                       uint8_t *val);
3363 
3364 typedef enum
3365 {
3366   LSM6DSOX_USE_SLOPE = 0,
3367   LSM6DSOX_USE_HPF   = 1,
3368 } lsm6dsox_slope_fds_t;
3369 int32_t lsm6dsox_xl_hp_path_internal_set(const stmdev_ctx_t *ctx,
3370                                          lsm6dsox_slope_fds_t val);
3371 int32_t lsm6dsox_xl_hp_path_internal_get(const stmdev_ctx_t *ctx,
3372                                          lsm6dsox_slope_fds_t *val);
3373 
3374 typedef enum
3375 {
3376   LSM6DSOX_HP_FILTER_NONE     = 0x00,
3377   LSM6DSOX_HP_FILTER_16mHz    = 0x80,
3378   LSM6DSOX_HP_FILTER_65mHz    = 0x81,
3379   LSM6DSOX_HP_FILTER_260mHz   = 0x82,
3380   LSM6DSOX_HP_FILTER_1Hz04    = 0x83,
3381 } lsm6dsox_hpm_g_t;
3382 int32_t lsm6dsox_gy_hp_path_internal_set(const stmdev_ctx_t *ctx,
3383                                          lsm6dsox_hpm_g_t val);
3384 int32_t lsm6dsox_gy_hp_path_internal_get(const stmdev_ctx_t *ctx,
3385                                          lsm6dsox_hpm_g_t *val);
3386 
3387 typedef enum
3388 {
3389   LSM6DSOX_OIS_CTRL_AUX_DATA_UI          = 0x00,
3390   LSM6DSOX_OIS_CTRL_AUX_DATA_UI_AUX      = 0x01,
3391   LSM6DSOX_OIS_CTRL_UI_AUX_DATA_UI       = 0x02,
3392   LSM6DSOX_OIS_CTRL_UI_AUX_DATA_UI_AUX   = 0x03,
3393 } lsm6dsox_spi2_read_en_t;
3394 int32_t lsm6dsox_ois_mode_set(const stmdev_ctx_t *ctx,
3395                               lsm6dsox_spi2_read_en_t val);
3396 int32_t lsm6dsox_ois_mode_get(const stmdev_ctx_t *ctx,
3397                               lsm6dsox_spi2_read_en_t *val);
3398 
3399 typedef enum
3400 {
3401   LSM6DSOX_AUX_PULL_UP_DISC       = 0,
3402   LSM6DSOX_AUX_PULL_UP_CONNECT    = 1,
3403 } lsm6dsox_ois_pu_dis_t;
3404 int32_t lsm6dsox_aux_sdo_ocs_mode_set(const stmdev_ctx_t *ctx,
3405                                       lsm6dsox_ois_pu_dis_t val);
3406 int32_t lsm6dsox_aux_sdo_ocs_mode_get(const stmdev_ctx_t *ctx,
3407                                       lsm6dsox_ois_pu_dis_t *val);
3408 
3409 typedef enum
3410 {
3411   LSM6DSOX_AUX_ON                    = 1,
3412   LSM6DSOX_AUX_ON_BY_AUX_INTERFACE   = 0,
3413 } lsm6dsox_ois_on_t;
3414 int32_t lsm6dsox_aux_pw_on_ctrl_set(const stmdev_ctx_t *ctx,
3415                                     lsm6dsox_ois_on_t val);
3416 int32_t lsm6dsox_aux_pw_on_ctrl_get(const stmdev_ctx_t *ctx,
3417                                     lsm6dsox_ois_on_t *val);
3418 
3419 typedef enum
3420 {
3421   LSM6DSOX_USE_SAME_XL_FS        = 0,
3422   LSM6DSOX_USE_DIFFERENT_XL_FS   = 1,
3423 } lsm6dsox_xl_fs_mode_t;
3424 int32_t lsm6dsox_aux_xl_fs_mode_set(const stmdev_ctx_t *ctx,
3425                                     lsm6dsox_xl_fs_mode_t val);
3426 int32_t lsm6dsox_aux_xl_fs_mode_get(const stmdev_ctx_t *ctx,
3427                                     lsm6dsox_xl_fs_mode_t *val);
3428 
3429 int32_t lsm6dsox_aux_status_reg_get(const stmdev_ctx_t *ctx,
3430                                     lsm6dsox_spi2_status_reg_ois_t *val);
3431 
3432 int32_t lsm6dsox_aux_xl_flag_data_ready_get(const stmdev_ctx_t *ctx,
3433                                             uint8_t *val);
3434 
3435 int32_t lsm6dsox_aux_gy_flag_data_ready_get(const stmdev_ctx_t *ctx,
3436                                             uint8_t *val);
3437 
3438 int32_t lsm6dsox_aux_gy_flag_settling_get(const stmdev_ctx_t *ctx,
3439                                           uint8_t *val);
3440 
3441 typedef enum
3442 {
3443   LSM6DSOX_AUX_DEN_ACTIVE_LOW     = 0,
3444   LSM6DSOX_AUX_DEN_ACTIVE_HIGH    = 1,
3445 } lsm6dsox_den_lh_ois_t;
3446 int32_t lsm6dsox_aux_den_polarity_set(const stmdev_ctx_t *ctx,
3447                                       lsm6dsox_den_lh_ois_t val);
3448 int32_t lsm6dsox_aux_den_polarity_get(const stmdev_ctx_t *ctx,
3449                                       lsm6dsox_den_lh_ois_t *val);
3450 
3451 typedef enum
3452 {
3453   LSM6DSOX_AUX_DEN_DISABLE         = 0,
3454   LSM6DSOX_AUX_DEN_LEVEL_LATCH     = 3,
3455   LSM6DSOX_AUX_DEN_LEVEL_TRIG      = 2,
3456 } lsm6dsox_lvl2_ois_t;
3457 int32_t lsm6dsox_aux_den_mode_set(const stmdev_ctx_t *ctx,
3458                                   lsm6dsox_lvl2_ois_t val);
3459 int32_t lsm6dsox_aux_den_mode_get(const stmdev_ctx_t *ctx,
3460                                   lsm6dsox_lvl2_ois_t *val);
3461 
3462 int32_t lsm6dsox_aux_drdy_on_int2_set(const stmdev_ctx_t *ctx, uint8_t val);
3463 int32_t lsm6dsox_aux_drdy_on_int2_get(const stmdev_ctx_t *ctx,
3464                                       uint8_t *val);
3465 
3466 typedef enum
3467 {
3468   LSM6DSOX_AUX_DISABLE  = 0,
3469   LSM6DSOX_MODE_3_GY    = 1,
3470   LSM6DSOX_MODE_4_GY_XL = 3,
3471 } lsm6dsox_ois_en_spi2_t;
3472 int32_t lsm6dsox_aux_mode_set(const stmdev_ctx_t *ctx,
3473                               lsm6dsox_ois_en_spi2_t val);
3474 int32_t lsm6dsox_aux_mode_get(const stmdev_ctx_t *ctx,
3475                               lsm6dsox_ois_en_spi2_t *val);
3476 
3477 typedef enum
3478 {
3479   LSM6DSOX_250dps_AUX  = 0,
3480   LSM6DSOX_125dps_AUX  = 1,
3481   LSM6DSOX_500dps_AUX  = 2,
3482   LSM6DSOX_1000dps_AUX = 4,
3483   LSM6DSOX_2000dps_AUX = 6,
3484 } lsm6dsox_fs_g_ois_t;
3485 int32_t lsm6dsox_aux_gy_full_scale_set(const stmdev_ctx_t *ctx,
3486                                        lsm6dsox_fs_g_ois_t val);
3487 int32_t lsm6dsox_aux_gy_full_scale_get(const stmdev_ctx_t *ctx,
3488                                        lsm6dsox_fs_g_ois_t *val);
3489 
3490 typedef enum
3491 {
3492   LSM6DSOX_AUX_SPI_4_WIRE = 0,
3493   LSM6DSOX_AUX_SPI_3_WIRE = 1,
3494 } lsm6dsox_sim_ois_t;
3495 int32_t lsm6dsox_aux_spi_mode_set(const stmdev_ctx_t *ctx,
3496                                   lsm6dsox_sim_ois_t val);
3497 int32_t lsm6dsox_aux_spi_mode_get(const stmdev_ctx_t *ctx,
3498                                   lsm6dsox_sim_ois_t *val);
3499 
3500 typedef enum
3501 {
3502   LSM6DSOX_351Hz39 = 0,
3503   LSM6DSOX_236Hz63 = 1,
3504   LSM6DSOX_172Hz70 = 2,
3505   LSM6DSOX_937Hz91 = 3,
3506 } lsm6dsox_ftype_ois_t;
3507 int32_t lsm6dsox_aux_gy_lp1_bandwidth_set(const stmdev_ctx_t *ctx,
3508                                           lsm6dsox_ftype_ois_t val);
3509 int32_t lsm6dsox_aux_gy_lp1_bandwidth_get(const stmdev_ctx_t *ctx,
3510                                           lsm6dsox_ftype_ois_t *val);
3511 
3512 typedef enum
3513 {
3514   LSM6DSOX_AUX_HP_DISABLE = 0x00,
3515   LSM6DSOX_AUX_HP_Hz016   = 0x10,
3516   LSM6DSOX_AUX_HP_Hz065   = 0x11,
3517   LSM6DSOX_AUX_HP_Hz260   = 0x12,
3518   LSM6DSOX_AUX_HP_1Hz040  = 0x13,
3519 } lsm6dsox_hpm_ois_t;
3520 int32_t lsm6dsox_aux_gy_hp_bandwidth_set(const stmdev_ctx_t *ctx,
3521                                          lsm6dsox_hpm_ois_t val);
3522 int32_t lsm6dsox_aux_gy_hp_bandwidth_get(const stmdev_ctx_t *ctx,
3523                                          lsm6dsox_hpm_ois_t *val);
3524 
3525 typedef enum
3526 {
3527   LSM6DSOX_ENABLE_CLAMP  = 0,
3528   LSM6DSOX_DISABLE_CLAMP = 1,
3529 } lsm6dsox_st_ois_clampdis_t;
3530 int32_t lsm6dsox_aux_gy_clamp_set(const stmdev_ctx_t *ctx,
3531                                   lsm6dsox_st_ois_clampdis_t val);
3532 int32_t lsm6dsox_aux_gy_clamp_get(const stmdev_ctx_t *ctx,
3533                                   lsm6dsox_st_ois_clampdis_t *val);
3534 
3535 typedef enum
3536 {
3537   LSM6DSOX_289Hz = 0,
3538   LSM6DSOX_258Hz = 1,
3539   LSM6DSOX_120Hz = 2,
3540   LSM6DSOX_65Hz2 = 3,
3541   LSM6DSOX_33Hz2 = 4,
3542   LSM6DSOX_16Hz6 = 5,
3543   LSM6DSOX_8Hz30 = 6,
3544   LSM6DSOX_4Hz15 = 7,
3545 } lsm6dsox_filter_xl_conf_ois_t;
3546 int32_t lsm6dsox_aux_xl_bandwidth_set(const stmdev_ctx_t *ctx,
3547                                       lsm6dsox_filter_xl_conf_ois_t val);
3548 int32_t lsm6dsox_aux_xl_bandwidth_get(const stmdev_ctx_t *ctx,
3549                                       lsm6dsox_filter_xl_conf_ois_t *val);
3550 
3551 typedef enum
3552 {
3553   LSM6DSOX_AUX_2g  = 0,
3554   LSM6DSOX_AUX_16g = 1,
3555   LSM6DSOX_AUX_4g  = 2,
3556   LSM6DSOX_AUX_8g  = 3,
3557 } lsm6dsox_fs_xl_ois_t;
3558 int32_t lsm6dsox_aux_xl_full_scale_set(const stmdev_ctx_t *ctx,
3559                                        lsm6dsox_fs_xl_ois_t val);
3560 int32_t lsm6dsox_aux_xl_full_scale_get(const stmdev_ctx_t *ctx,
3561                                        lsm6dsox_fs_xl_ois_t *val);
3562 
3563 typedef enum
3564 {
3565   LSM6DSOX_PULL_UP_DISC       = 0,
3566   LSM6DSOX_PULL_UP_CONNECT    = 1,
3567 } lsm6dsox_sdo_pu_en_t;
3568 int32_t lsm6dsox_sdo_sa0_mode_set(const stmdev_ctx_t *ctx,
3569                                   lsm6dsox_sdo_pu_en_t val);
3570 int32_t lsm6dsox_sdo_sa0_mode_get(const stmdev_ctx_t *ctx,
3571                                   lsm6dsox_sdo_pu_en_t *val);
3572 
3573 typedef enum
3574 {
3575   LSM6DSOX_SPI_4_WIRE = 0,
3576   LSM6DSOX_SPI_3_WIRE = 1,
3577 } lsm6dsox_sim_t;
3578 int32_t lsm6dsox_spi_mode_set(const stmdev_ctx_t *ctx, lsm6dsox_sim_t val);
3579 int32_t lsm6dsox_spi_mode_get(const stmdev_ctx_t *ctx, lsm6dsox_sim_t *val);
3580 
3581 typedef enum
3582 {
3583   LSM6DSOX_I2C_ENABLE  = 0,
3584   LSM6DSOX_I2C_DISABLE = 1,
3585 } lsm6dsox_i2c_disable_t;
3586 int32_t lsm6dsox_i2c_interface_set(const stmdev_ctx_t *ctx,
3587                                    lsm6dsox_i2c_disable_t val);
3588 int32_t lsm6dsox_i2c_interface_get(const stmdev_ctx_t *ctx,
3589                                    lsm6dsox_i2c_disable_t *val);
3590 
3591 typedef enum
3592 {
3593   LSM6DSOX_I3C_DISABLE         = 0x80,
3594   LSM6DSOX_I3C_ENABLE_T_50us   = 0x00,
3595   LSM6DSOX_I3C_ENABLE_T_2us    = 0x01,
3596   LSM6DSOX_I3C_ENABLE_T_1ms    = 0x02,
3597   LSM6DSOX_I3C_ENABLE_T_25ms   = 0x03,
3598 } lsm6dsox_i3c_disable_t;
3599 int32_t lsm6dsox_i3c_disable_set(const stmdev_ctx_t *ctx,
3600                                  lsm6dsox_i3c_disable_t val);
3601 int32_t lsm6dsox_i3c_disable_get(const stmdev_ctx_t *ctx,
3602                                  lsm6dsox_i3c_disable_t *val);
3603 
3604 typedef enum
3605 {
3606   LSM6DSOX_PUSH_PULL                         = 0x00,
3607   LSM6DSOX_OPEN_DRAIN                        = 0x01,
3608   LSM6DSOX_INT1_NOPULL_DOWN_INT2_PUSH_PULL   = 0x02,
3609   LSM6DSOX_INT1_NOPULL_DOWN_INT2_OPEN_DRAIN  = 0x03,
3610 } lsm6dsox_pp_od_t;
3611 int32_t lsm6dsox_pin_mode_set(const stmdev_ctx_t *ctx,
3612                               lsm6dsox_pp_od_t val);
3613 int32_t lsm6dsox_pin_mode_get(const stmdev_ctx_t *ctx,
3614                               lsm6dsox_pp_od_t *val);
3615 
3616 typedef enum
3617 {
3618   LSM6DSOX_ACTIVE_HIGH = 0,
3619   LSM6DSOX_ACTIVE_LOW  = 1,
3620 } lsm6dsox_h_lactive_t;
3621 int32_t lsm6dsox_pin_polarity_set(const stmdev_ctx_t *ctx,
3622                                   lsm6dsox_h_lactive_t val);
3623 int32_t lsm6dsox_pin_polarity_get(const stmdev_ctx_t *ctx,
3624                                   lsm6dsox_h_lactive_t *val);
3625 
3626 int32_t lsm6dsox_all_on_int1_set(const stmdev_ctx_t *ctx, uint8_t val);
3627 int32_t lsm6dsox_all_on_int1_get(const stmdev_ctx_t *ctx, uint8_t *val);
3628 
3629 typedef enum
3630 {
3631   LSM6DSOX_ALL_INT_PULSED            = 0,
3632   LSM6DSOX_BASE_LATCHED_EMB_PULSED   = 1,
3633   LSM6DSOX_BASE_PULSED_EMB_LATCHED   = 2,
3634   LSM6DSOX_ALL_INT_LATCHED           = 3,
3635 } lsm6dsox_lir_t;
3636 int32_t lsm6dsox_int_notification_set(const stmdev_ctx_t *ctx,
3637                                       lsm6dsox_lir_t val);
3638 int32_t lsm6dsox_int_notification_get(const stmdev_ctx_t *ctx,
3639                                       lsm6dsox_lir_t *val);
3640 
3641 typedef enum
3642 {
3643   LSM6DSOX_LSb_FS_DIV_64       = 0,
3644   LSM6DSOX_LSb_FS_DIV_256      = 1,
3645 } lsm6dsox_wake_ths_w_t;
3646 int32_t lsm6dsox_wkup_ths_weight_set(const stmdev_ctx_t *ctx,
3647                                      lsm6dsox_wake_ths_w_t val);
3648 int32_t lsm6dsox_wkup_ths_weight_get(const stmdev_ctx_t *ctx,
3649                                      lsm6dsox_wake_ths_w_t *val);
3650 
3651 int32_t lsm6dsox_wkup_threshold_set(const stmdev_ctx_t *ctx, uint8_t val);
3652 int32_t lsm6dsox_wkup_threshold_get(const stmdev_ctx_t *ctx, uint8_t *val);
3653 
3654 int32_t lsm6dsox_xl_usr_offset_on_wkup_set(const stmdev_ctx_t *ctx,
3655                                            uint8_t val);
3656 int32_t lsm6dsox_xl_usr_offset_on_wkup_get(const stmdev_ctx_t *ctx,
3657                                            uint8_t *val);
3658 
3659 int32_t lsm6dsox_wkup_dur_set(const stmdev_ctx_t *ctx, uint8_t val);
3660 int32_t lsm6dsox_wkup_dur_get(const stmdev_ctx_t *ctx, uint8_t *val);
3661 
3662 int32_t lsm6dsox_gy_sleep_mode_set(const stmdev_ctx_t *ctx, uint8_t val);
3663 int32_t lsm6dsox_gy_sleep_mode_get(const stmdev_ctx_t *ctx, uint8_t *val);
3664 
3665 typedef enum
3666 {
3667   LSM6DSOX_DRIVE_SLEEP_CHG_EVENT = 0,
3668   LSM6DSOX_DRIVE_SLEEP_STATUS    = 1,
3669 } lsm6dsox_sleep_status_on_int_t;
3670 int32_t lsm6dsox_act_pin_notification_set(const stmdev_ctx_t *ctx,
3671                                           lsm6dsox_sleep_status_on_int_t val);
3672 int32_t lsm6dsox_act_pin_notification_get(const stmdev_ctx_t *ctx,
3673                                           lsm6dsox_sleep_status_on_int_t *val);
3674 
3675 typedef enum
3676 {
3677   LSM6DSOX_XL_AND_GY_NOT_AFFECTED      = 0,
3678   LSM6DSOX_XL_12Hz5_GY_NOT_AFFECTED    = 1,
3679   LSM6DSOX_XL_12Hz5_GY_SLEEP           = 2,
3680   LSM6DSOX_XL_12Hz5_GY_PD              = 3,
3681 } lsm6dsox_inact_en_t;
3682 int32_t lsm6dsox_act_mode_set(const stmdev_ctx_t *ctx,
3683                               lsm6dsox_inact_en_t val);
3684 int32_t lsm6dsox_act_mode_get(const stmdev_ctx_t *ctx,
3685                               lsm6dsox_inact_en_t *val);
3686 
3687 int32_t lsm6dsox_act_sleep_dur_set(const stmdev_ctx_t *ctx, uint8_t val);
3688 int32_t lsm6dsox_act_sleep_dur_get(const stmdev_ctx_t *ctx, uint8_t *val);
3689 
3690 int32_t lsm6dsox_tap_detection_on_z_set(const stmdev_ctx_t *ctx,
3691                                         uint8_t val);
3692 int32_t lsm6dsox_tap_detection_on_z_get(const stmdev_ctx_t *ctx,
3693                                         uint8_t *val);
3694 
3695 int32_t lsm6dsox_tap_detection_on_y_set(const stmdev_ctx_t *ctx,
3696                                         uint8_t val);
3697 int32_t lsm6dsox_tap_detection_on_y_get(const stmdev_ctx_t *ctx,
3698                                         uint8_t *val);
3699 
3700 int32_t lsm6dsox_tap_detection_on_x_set(const stmdev_ctx_t *ctx,
3701                                         uint8_t val);
3702 int32_t lsm6dsox_tap_detection_on_x_get(const stmdev_ctx_t *ctx,
3703                                         uint8_t *val);
3704 
3705 int32_t lsm6dsox_tap_threshold_x_set(const stmdev_ctx_t *ctx, uint8_t val);
3706 int32_t lsm6dsox_tap_threshold_x_get(const stmdev_ctx_t *ctx, uint8_t *val);
3707 
3708 typedef enum
3709 {
3710   LSM6DSOX_XYZ = 0,
3711   LSM6DSOX_YXZ = 1,
3712   LSM6DSOX_XZY = 2,
3713   LSM6DSOX_ZYX = 3,
3714   LSM6DSOX_YZX = 5,
3715   LSM6DSOX_ZXY = 6,
3716 } lsm6dsox_tap_priority_t;
3717 int32_t lsm6dsox_tap_axis_priority_set(const stmdev_ctx_t *ctx,
3718                                        lsm6dsox_tap_priority_t val);
3719 int32_t lsm6dsox_tap_axis_priority_get(const stmdev_ctx_t *ctx,
3720                                        lsm6dsox_tap_priority_t *val);
3721 
3722 int32_t lsm6dsox_tap_threshold_y_set(const stmdev_ctx_t *ctx, uint8_t val);
3723 int32_t lsm6dsox_tap_threshold_y_get(const stmdev_ctx_t *ctx, uint8_t *val);
3724 
3725 int32_t lsm6dsox_tap_threshold_z_set(const stmdev_ctx_t *ctx, uint8_t val);
3726 int32_t lsm6dsox_tap_threshold_z_get(const stmdev_ctx_t *ctx, uint8_t *val);
3727 
3728 int32_t lsm6dsox_tap_shock_set(const stmdev_ctx_t *ctx, uint8_t val);
3729 int32_t lsm6dsox_tap_shock_get(const stmdev_ctx_t *ctx, uint8_t *val);
3730 
3731 int32_t lsm6dsox_tap_quiet_set(const stmdev_ctx_t *ctx, uint8_t val);
3732 int32_t lsm6dsox_tap_quiet_get(const stmdev_ctx_t *ctx, uint8_t *val);
3733 
3734 int32_t lsm6dsox_tap_dur_set(const stmdev_ctx_t *ctx, uint8_t val);
3735 int32_t lsm6dsox_tap_dur_get(const stmdev_ctx_t *ctx, uint8_t *val);
3736 
3737 typedef enum
3738 {
3739   LSM6DSOX_ONLY_SINGLE = 0,
3740   LSM6DSOX_BOTH_SINGLE_DOUBLE = 1,
3741 } lsm6dsox_single_double_tap_t;
3742 int32_t lsm6dsox_tap_mode_set(const stmdev_ctx_t *ctx,
3743                               lsm6dsox_single_double_tap_t val);
3744 int32_t lsm6dsox_tap_mode_get(const stmdev_ctx_t *ctx,
3745                               lsm6dsox_single_double_tap_t *val);
3746 
3747 typedef enum
3748 {
3749   LSM6DSOX_DEG_80  = 0,
3750   LSM6DSOX_DEG_70  = 1,
3751   LSM6DSOX_DEG_60  = 2,
3752   LSM6DSOX_DEG_50  = 3,
3753 } lsm6dsox_sixd_ths_t;
3754 int32_t lsm6dsox_6d_threshold_set(const stmdev_ctx_t *ctx,
3755                                   lsm6dsox_sixd_ths_t val);
3756 int32_t lsm6dsox_6d_threshold_get(const stmdev_ctx_t *ctx,
3757                                   lsm6dsox_sixd_ths_t *val);
3758 
3759 int32_t lsm6dsox_4d_mode_set(const stmdev_ctx_t *ctx, uint8_t val);
3760 int32_t lsm6dsox_4d_mode_get(const stmdev_ctx_t *ctx, uint8_t *val);
3761 
3762 typedef enum
3763 {
3764   LSM6DSOX_FF_TSH_156mg = 0,
3765   LSM6DSOX_FF_TSH_219mg = 1,
3766   LSM6DSOX_FF_TSH_250mg = 2,
3767   LSM6DSOX_FF_TSH_312mg = 3,
3768   LSM6DSOX_FF_TSH_344mg = 4,
3769   LSM6DSOX_FF_TSH_406mg = 5,
3770   LSM6DSOX_FF_TSH_469mg = 6,
3771   LSM6DSOX_FF_TSH_500mg = 7,
3772 } lsm6dsox_ff_ths_t;
3773 int32_t lsm6dsox_ff_threshold_set(const stmdev_ctx_t *ctx,
3774                                   lsm6dsox_ff_ths_t val);
3775 int32_t lsm6dsox_ff_threshold_get(const stmdev_ctx_t *ctx,
3776                                   lsm6dsox_ff_ths_t *val);
3777 
3778 int32_t lsm6dsox_ff_dur_set(const stmdev_ctx_t *ctx, uint8_t val);
3779 int32_t lsm6dsox_ff_dur_get(const stmdev_ctx_t *ctx, uint8_t *val);
3780 
3781 int32_t lsm6dsox_fifo_watermark_set(const stmdev_ctx_t *ctx, uint16_t val);
3782 int32_t lsm6dsox_fifo_watermark_get(const stmdev_ctx_t *ctx, uint16_t *val);
3783 
3784 int32_t lsm6dsox_compression_algo_init_set(const stmdev_ctx_t *ctx,
3785                                            uint8_t val);
3786 int32_t lsm6dsox_compression_algo_init_get(const stmdev_ctx_t *ctx,
3787                                            uint8_t *val);
3788 
3789 typedef enum
3790 {
3791   LSM6DSOX_CMP_DISABLE  = 0x00,
3792   LSM6DSOX_CMP_ALWAYS   = 0x04,
3793   LSM6DSOX_CMP_8_TO_1   = 0x05,
3794   LSM6DSOX_CMP_16_TO_1  = 0x06,
3795   LSM6DSOX_CMP_32_TO_1  = 0x07,
3796 } lsm6dsox_uncoptr_rate_t;
3797 int32_t lsm6dsox_compression_algo_set(const stmdev_ctx_t *ctx,
3798                                       lsm6dsox_uncoptr_rate_t val);
3799 int32_t lsm6dsox_compression_algo_get(const stmdev_ctx_t *ctx,
3800                                       lsm6dsox_uncoptr_rate_t *val);
3801 
3802 int32_t lsm6dsox_fifo_virtual_sens_odr_chg_set(const stmdev_ctx_t *ctx,
3803                                                uint8_t val);
3804 int32_t lsm6dsox_fifo_virtual_sens_odr_chg_get(const stmdev_ctx_t *ctx,
3805                                                uint8_t *val);
3806 
3807 int32_t lsm6dsox_compression_algo_real_time_set(const stmdev_ctx_t *ctx,
3808                                                 uint8_t val);
3809 int32_t lsm6dsox_compression_algo_real_time_get(const stmdev_ctx_t *ctx,
3810                                                 uint8_t *val);
3811 
3812 int32_t lsm6dsox_fifo_stop_on_wtm_set(const stmdev_ctx_t *ctx, uint8_t val);
3813 int32_t lsm6dsox_fifo_stop_on_wtm_get(const stmdev_ctx_t *ctx,
3814                                       uint8_t *val);
3815 
3816 typedef enum
3817 {
3818   LSM6DSOX_XL_NOT_BATCHED       =  0,
3819   LSM6DSOX_XL_BATCHED_AT_12Hz5   =  1,
3820   LSM6DSOX_XL_BATCHED_AT_26Hz    =  2,
3821   LSM6DSOX_XL_BATCHED_AT_52Hz    =  3,
3822   LSM6DSOX_XL_BATCHED_AT_104Hz   =  4,
3823   LSM6DSOX_XL_BATCHED_AT_208Hz   =  5,
3824   LSM6DSOX_XL_BATCHED_AT_417Hz   =  6,
3825   LSM6DSOX_XL_BATCHED_AT_833Hz   =  7,
3826   LSM6DSOX_XL_BATCHED_AT_1667Hz  =  8,
3827   LSM6DSOX_XL_BATCHED_AT_3333Hz  =  9,
3828   LSM6DSOX_XL_BATCHED_AT_6667Hz  = 10,
3829   LSM6DSOX_XL_BATCHED_AT_6Hz5    = 11,
3830 } lsm6dsox_bdr_xl_t;
3831 int32_t lsm6dsox_fifo_xl_batch_set(const stmdev_ctx_t *ctx,
3832                                    lsm6dsox_bdr_xl_t val);
3833 int32_t lsm6dsox_fifo_xl_batch_get(const stmdev_ctx_t *ctx,
3834                                    lsm6dsox_bdr_xl_t *val);
3835 
3836 typedef enum
3837 {
3838   LSM6DSOX_GY_NOT_BATCHED         = 0,
3839   LSM6DSOX_GY_BATCHED_AT_12Hz5    = 1,
3840   LSM6DSOX_GY_BATCHED_AT_26Hz     = 2,
3841   LSM6DSOX_GY_BATCHED_AT_52Hz     = 3,
3842   LSM6DSOX_GY_BATCHED_AT_104Hz    = 4,
3843   LSM6DSOX_GY_BATCHED_AT_208Hz    = 5,
3844   LSM6DSOX_GY_BATCHED_AT_417Hz    = 6,
3845   LSM6DSOX_GY_BATCHED_AT_833Hz    = 7,
3846   LSM6DSOX_GY_BATCHED_AT_1667Hz   = 8,
3847   LSM6DSOX_GY_BATCHED_AT_3333Hz   = 9,
3848   LSM6DSOX_GY_BATCHED_AT_6667Hz   = 10,
3849   LSM6DSOX_GY_BATCHED_AT_6Hz5     = 11,
3850 } lsm6dsox_bdr_gy_t;
3851 int32_t lsm6dsox_fifo_gy_batch_set(const stmdev_ctx_t *ctx,
3852                                    lsm6dsox_bdr_gy_t val);
3853 int32_t lsm6dsox_fifo_gy_batch_get(const stmdev_ctx_t *ctx,
3854                                    lsm6dsox_bdr_gy_t *val);
3855 
3856 typedef enum
3857 {
3858   LSM6DSOX_BYPASS_MODE             = 0,
3859   LSM6DSOX_FIFO_MODE               = 1,
3860   LSM6DSOX_STREAM_TO_FIFO_MODE     = 3,
3861   LSM6DSOX_BYPASS_TO_STREAM_MODE   = 4,
3862   LSM6DSOX_STREAM_MODE             = 6,
3863   LSM6DSOX_BYPASS_TO_FIFO_MODE     = 7,
3864 } lsm6dsox_fifo_mode_t;
3865 int32_t lsm6dsox_fifo_mode_set(const stmdev_ctx_t *ctx,
3866                                lsm6dsox_fifo_mode_t val);
3867 int32_t lsm6dsox_fifo_mode_get(const stmdev_ctx_t *ctx,
3868                                lsm6dsox_fifo_mode_t *val);
3869 
3870 typedef enum
3871 {
3872   LSM6DSOX_TEMP_NOT_BATCHED        = 0,
3873   LSM6DSOX_TEMP_BATCHED_AT_1Hz6    = 1,
3874   LSM6DSOX_TEMP_BATCHED_AT_12Hz5   = 2,
3875   LSM6DSOX_TEMP_BATCHED_AT_52Hz    = 3,
3876 } lsm6dsox_odr_t_batch_t;
3877 int32_t lsm6dsox_fifo_temp_batch_set(const stmdev_ctx_t *ctx,
3878                                      lsm6dsox_odr_t_batch_t val);
3879 int32_t lsm6dsox_fifo_temp_batch_get(const stmdev_ctx_t *ctx,
3880                                      lsm6dsox_odr_t_batch_t *val);
3881 
3882 typedef enum
3883 {
3884   LSM6DSOX_NO_DECIMATION = 0,
3885   LSM6DSOX_DEC_1         = 1,
3886   LSM6DSOX_DEC_8         = 2,
3887   LSM6DSOX_DEC_32        = 3,
3888 } lsm6dsox_odr_ts_batch_t;
3889 int32_t lsm6dsox_fifo_timestamp_decimation_set(const stmdev_ctx_t *ctx,
3890                                                lsm6dsox_odr_ts_batch_t val);
3891 int32_t lsm6dsox_fifo_timestamp_decimation_get(const stmdev_ctx_t *ctx,
3892                                                lsm6dsox_odr_ts_batch_t *val);
3893 
3894 typedef enum
3895 {
3896   LSM6DSOX_XL_BATCH_EVENT   = 0,
3897   LSM6DSOX_GYRO_BATCH_EVENT = 1,
3898 } lsm6dsox_trig_counter_bdr_t;
3899 
3900 typedef enum
3901 {
3902   LSM6DSOX_GYRO_NC_TAG    = 1,
3903   LSM6DSOX_XL_NC_TAG,
3904   LSM6DSOX_TEMPERATURE_TAG,
3905   LSM6DSOX_TIMESTAMP_TAG,
3906   LSM6DSOX_CFG_CHANGE_TAG,
3907   LSM6DSOX_XL_NC_T_2_TAG,
3908   LSM6DSOX_XL_NC_T_1_TAG,
3909   LSM6DSOX_XL_2XC_TAG,
3910   LSM6DSOX_XL_3XC_TAG,
3911   LSM6DSOX_GYRO_NC_T_2_TAG,
3912   LSM6DSOX_GYRO_NC_T_1_TAG,
3913   LSM6DSOX_GYRO_2XC_TAG,
3914   LSM6DSOX_GYRO_3XC_TAG,
3915   LSM6DSOX_SENSORHUB_SLAVE0_TAG,
3916   LSM6DSOX_SENSORHUB_SLAVE1_TAG,
3917   LSM6DSOX_SENSORHUB_SLAVE2_TAG,
3918   LSM6DSOX_SENSORHUB_SLAVE3_TAG,
3919   LSM6DSOX_STEP_CPUNTER_TAG,
3920   LSM6DSOX_GAME_ROTATION_TAG,
3921   LSM6DSOX_GEOMAG_ROTATION_TAG,
3922   LSM6DSOX_ROTATION_TAG,
3923   LSM6DSOX_SENSORHUB_NACK_TAG  = 0x19,
3924 } lsm6dsox_fifo_tag_t;
3925 int32_t lsm6dsox_fifo_cnt_event_batch_set(const stmdev_ctx_t *ctx,
3926                                           lsm6dsox_trig_counter_bdr_t val);
3927 int32_t lsm6dsox_fifo_cnt_event_batch_get(const stmdev_ctx_t *ctx,
3928                                           lsm6dsox_trig_counter_bdr_t *val);
3929 
3930 int32_t lsm6dsox_rst_batch_counter_set(const stmdev_ctx_t *ctx,
3931                                        uint8_t val);
3932 int32_t lsm6dsox_rst_batch_counter_get(const stmdev_ctx_t *ctx,
3933                                        uint8_t *val);
3934 
3935 int32_t lsm6dsox_batch_counter_threshold_set(const stmdev_ctx_t *ctx,
3936                                              uint16_t val);
3937 int32_t lsm6dsox_batch_counter_threshold_get(const stmdev_ctx_t *ctx,
3938                                              uint16_t *val);
3939 
3940 int32_t lsm6dsox_fifo_data_level_get(const stmdev_ctx_t *ctx,
3941                                      uint16_t *val);
3942 
3943 int32_t lsm6dsox_fifo_status_get(const stmdev_ctx_t *ctx,
3944                                  lsm6dsox_fifo_status2_t *val);
3945 
3946 int32_t lsm6dsox_fifo_full_flag_get(const stmdev_ctx_t *ctx, uint8_t *val);
3947 
3948 int32_t lsm6dsox_fifo_ovr_flag_get(const stmdev_ctx_t *ctx, uint8_t *val);
3949 
3950 int32_t lsm6dsox_fifo_wtm_flag_get(const stmdev_ctx_t *ctx, uint8_t *val);
3951 
3952 int32_t lsm6dsox_fifo_sensor_tag_get(const stmdev_ctx_t *ctx,
3953                                      lsm6dsox_fifo_tag_t *val);
3954 
3955 int32_t lsm6dsox_fifo_pedo_batch_set(const stmdev_ctx_t *ctx, uint8_t val);
3956 int32_t lsm6dsox_fifo_pedo_batch_get(const stmdev_ctx_t *ctx, uint8_t *val);
3957 
3958 int32_t lsm6dsox_sh_batch_slave_0_set(const stmdev_ctx_t *ctx, uint8_t val);
3959 int32_t lsm6dsox_sh_batch_slave_0_get(const stmdev_ctx_t *ctx,
3960                                       uint8_t *val);
3961 
3962 int32_t lsm6dsox_sh_batch_slave_1_set(const stmdev_ctx_t *ctx, uint8_t val);
3963 int32_t lsm6dsox_sh_batch_slave_1_get(const stmdev_ctx_t *ctx,
3964                                       uint8_t *val);
3965 
3966 int32_t lsm6dsox_sh_batch_slave_2_set(const stmdev_ctx_t *ctx, uint8_t val);
3967 int32_t lsm6dsox_sh_batch_slave_2_get(const stmdev_ctx_t *ctx,
3968                                       uint8_t *val);
3969 
3970 int32_t lsm6dsox_sh_batch_slave_3_set(const stmdev_ctx_t *ctx, uint8_t val);
3971 int32_t lsm6dsox_sh_batch_slave_3_get(const stmdev_ctx_t *ctx,
3972                                       uint8_t *val);
3973 
3974 typedef enum
3975 {
3976   LSM6DSOX_DEN_DISABLE    = 0,
3977   LSM6DSOX_LEVEL_FIFO     = 6,
3978   LSM6DSOX_LEVEL_LETCHED  = 3,
3979   LSM6DSOX_LEVEL_TRIGGER  = 2,
3980   LSM6DSOX_EDGE_TRIGGER   = 4,
3981 } lsm6dsox_den_mode_t;
3982 int32_t lsm6dsox_den_mode_set(const stmdev_ctx_t *ctx,
3983                               lsm6dsox_den_mode_t val);
3984 int32_t lsm6dsox_den_mode_get(const stmdev_ctx_t *ctx,
3985                               lsm6dsox_den_mode_t *val);
3986 
3987 typedef enum
3988 {
3989   LSM6DSOX_DEN_ACT_LOW  = 0,
3990   LSM6DSOX_DEN_ACT_HIGH = 1,
3991 } lsm6dsox_den_lh_t;
3992 int32_t lsm6dsox_den_polarity_set(const stmdev_ctx_t *ctx,
3993                                   lsm6dsox_den_lh_t val);
3994 int32_t lsm6dsox_den_polarity_get(const stmdev_ctx_t *ctx,
3995                                   lsm6dsox_den_lh_t *val);
3996 
3997 typedef enum
3998 {
3999   LSM6DSOX_STAMP_IN_GY_DATA     = 0,
4000   LSM6DSOX_STAMP_IN_XL_DATA     = 1,
4001   LSM6DSOX_STAMP_IN_GY_XL_DATA  = 2,
4002 } lsm6dsox_den_xl_g_t;
4003 int32_t lsm6dsox_den_enable_set(const stmdev_ctx_t *ctx,
4004                                 lsm6dsox_den_xl_g_t val);
4005 int32_t lsm6dsox_den_enable_get(const stmdev_ctx_t *ctx,
4006                                 lsm6dsox_den_xl_g_t *val);
4007 
4008 int32_t lsm6dsox_den_mark_axis_x_set(const stmdev_ctx_t *ctx, uint8_t val);
4009 int32_t lsm6dsox_den_mark_axis_x_get(const stmdev_ctx_t *ctx, uint8_t *val);
4010 
4011 int32_t lsm6dsox_den_mark_axis_y_set(const stmdev_ctx_t *ctx, uint8_t val);
4012 int32_t lsm6dsox_den_mark_axis_y_get(const stmdev_ctx_t *ctx, uint8_t *val);
4013 
4014 int32_t lsm6dsox_den_mark_axis_z_set(const stmdev_ctx_t *ctx, uint8_t val);
4015 int32_t lsm6dsox_den_mark_axis_z_get(const stmdev_ctx_t *ctx, uint8_t *val);
4016 
4017 typedef enum
4018 {
4019   LSM6DSOX_PEDO_BASE_MODE            = 0x00,
4020   LSM6DSOX_FALSE_STEP_REJ            = 0x10,
4021   LSM6DSOX_FALSE_STEP_REJ_ADV_MODE   = 0x30,
4022 } lsm6dsox_pedo_md_t;
4023 int32_t lsm6dsox_pedo_sens_set(const stmdev_ctx_t *ctx,
4024                                lsm6dsox_pedo_md_t val);
4025 int32_t lsm6dsox_pedo_sens_get(const stmdev_ctx_t *ctx,
4026                                lsm6dsox_pedo_md_t *val);
4027 
4028 int32_t lsm6dsox_pedo_step_detect_get(const stmdev_ctx_t *ctx,
4029                                       uint8_t *val);
4030 
4031 int32_t lsm6dsox_pedo_debounce_steps_set(const stmdev_ctx_t *ctx,
4032                                          uint8_t *buff);
4033 int32_t lsm6dsox_pedo_debounce_steps_get(const stmdev_ctx_t *ctx,
4034                                          uint8_t *buff);
4035 
4036 int32_t lsm6dsox_pedo_steps_period_set(const stmdev_ctx_t *ctx,
4037                                        uint16_t val);
4038 int32_t lsm6dsox_pedo_steps_period_get(const stmdev_ctx_t *ctx,
4039                                        uint16_t *val);
4040 
4041 int32_t lsm6dsox_pedo_adv_detection_set(const stmdev_ctx_t *ctx,
4042                                         uint8_t val);
4043 int32_t lsm6dsox_pedo_adv_detection_get(const stmdev_ctx_t *ctx,
4044                                         uint8_t *val);
4045 
4046 int32_t lsm6dsox_pedo_false_step_rejection_set(const stmdev_ctx_t *ctx,
4047                                                uint8_t val);
4048 int32_t lsm6dsox_pedo_false_step_rejection_get(const stmdev_ctx_t *ctx,
4049                                                uint8_t *val);
4050 
4051 typedef enum
4052 {
4053   LSM6DSOX_EVERY_STEP     = 0,
4054   LSM6DSOX_COUNT_OVERFLOW = 1,
4055 } lsm6dsox_carry_count_en_t;
4056 int32_t lsm6dsox_pedo_int_mode_set(const stmdev_ctx_t *ctx,
4057                                    lsm6dsox_carry_count_en_t val);
4058 int32_t lsm6dsox_pedo_int_mode_get(const stmdev_ctx_t *ctx,
4059                                    lsm6dsox_carry_count_en_t *val);
4060 
4061 int32_t lsm6dsox_motion_flag_data_ready_get(const stmdev_ctx_t *ctx,
4062                                             uint8_t *val);
4063 
4064 int32_t lsm6dsox_tilt_flag_data_ready_get(const stmdev_ctx_t *ctx,
4065                                           uint8_t *val);
4066 
4067 int32_t lsm6dsox_sh_mag_sensitivity_set(const stmdev_ctx_t *ctx,
4068                                         uint16_t val);
4069 int32_t lsm6dsox_sh_mag_sensitivity_get(const stmdev_ctx_t *ctx,
4070                                         uint16_t *val);
4071 
4072 int32_t lsm6dsox_mlc_mag_sensitivity_set(const stmdev_ctx_t *ctx,
4073                                          uint16_t val);
4074 int32_t lsm6dsox_mlc_mag_sensitivity_get(const stmdev_ctx_t *ctx,
4075                                          uint16_t *val);
4076 
4077 int32_t lsm6dsox_mag_offset_set(const stmdev_ctx_t *ctx, int16_t *val);
4078 int32_t lsm6dsox_mag_offset_get(const stmdev_ctx_t *ctx, int16_t *val);
4079 
4080 int32_t lsm6dsox_mag_soft_iron_set(const stmdev_ctx_t *ctx, uint16_t *val);
4081 int32_t lsm6dsox_mag_soft_iron_get(const stmdev_ctx_t *ctx, uint16_t *val);
4082 
4083 typedef enum
4084 {
4085   LSM6DSOX_Z_EQ_Y     = 0,
4086   LSM6DSOX_Z_EQ_MIN_Y = 1,
4087   LSM6DSOX_Z_EQ_X     = 2,
4088   LSM6DSOX_Z_EQ_MIN_X = 3,
4089   LSM6DSOX_Z_EQ_MIN_Z = 4,
4090   LSM6DSOX_Z_EQ_Z     = 5,
4091 } lsm6dsox_mag_z_axis_t;
4092 int32_t lsm6dsox_mag_z_orient_set(const stmdev_ctx_t *ctx,
4093                                   lsm6dsox_mag_z_axis_t val);
4094 int32_t lsm6dsox_mag_z_orient_get(const stmdev_ctx_t *ctx,
4095                                   lsm6dsox_mag_z_axis_t *val);
4096 
4097 typedef enum
4098 {
4099   LSM6DSOX_Y_EQ_Y     = 0,
4100   LSM6DSOX_Y_EQ_MIN_Y = 1,
4101   LSM6DSOX_Y_EQ_X     = 2,
4102   LSM6DSOX_Y_EQ_MIN_X = 3,
4103   LSM6DSOX_Y_EQ_MIN_Z = 4,
4104   LSM6DSOX_Y_EQ_Z     = 5,
4105 } lsm6dsox_mag_y_axis_t;
4106 int32_t lsm6dsox_mag_y_orient_set(const stmdev_ctx_t *ctx,
4107                                   lsm6dsox_mag_y_axis_t val);
4108 int32_t lsm6dsox_mag_y_orient_get(const stmdev_ctx_t *ctx,
4109                                   lsm6dsox_mag_y_axis_t *val);
4110 
4111 typedef enum
4112 {
4113   LSM6DSOX_X_EQ_Y     = 0,
4114   LSM6DSOX_X_EQ_MIN_Y = 1,
4115   LSM6DSOX_X_EQ_X     = 2,
4116   LSM6DSOX_X_EQ_MIN_X = 3,
4117   LSM6DSOX_X_EQ_MIN_Z = 4,
4118   LSM6DSOX_X_EQ_Z     = 5,
4119 } lsm6dsox_mag_x_axis_t;
4120 int32_t lsm6dsox_mag_x_orient_set(const stmdev_ctx_t *ctx,
4121                                   lsm6dsox_mag_x_axis_t val);
4122 int32_t lsm6dsox_mag_x_orient_get(const stmdev_ctx_t *ctx,
4123                                   lsm6dsox_mag_x_axis_t *val);
4124 
4125 int32_t lsm6dsox_long_cnt_flag_data_ready_get(const stmdev_ctx_t *ctx,
4126                                               uint8_t *val);
4127 
4128 typedef struct
4129 {
4130   lsm6dsox_fsm_enable_a_t          fsm_enable_a;
4131   lsm6dsox_fsm_enable_b_t          fsm_enable_b;
4132 } lsm6dsox_emb_fsm_enable_t;
4133 int32_t lsm6dsox_fsm_enable_set(const stmdev_ctx_t *ctx,
4134                                 lsm6dsox_emb_fsm_enable_t *val);
4135 int32_t lsm6dsox_fsm_enable_get(const stmdev_ctx_t *ctx,
4136                                 lsm6dsox_emb_fsm_enable_t *val);
4137 
4138 int32_t lsm6dsox_long_cnt_set(const stmdev_ctx_t *ctx, uint16_t val);
4139 int32_t lsm6dsox_long_cnt_get(const stmdev_ctx_t *ctx, uint16_t *val);
4140 
4141 typedef enum
4142 {
4143   LSM6DSOX_LC_NORMAL     = 0,
4144   LSM6DSOX_LC_CLEAR      = 1,
4145   LSM6DSOX_LC_CLEAR_DONE = 2,
4146 } lsm6dsox_fsm_lc_clr_t;
4147 int32_t lsm6dsox_long_clr_set(const stmdev_ctx_t *ctx,
4148                               lsm6dsox_fsm_lc_clr_t val);
4149 int32_t lsm6dsox_long_clr_get(const stmdev_ctx_t *ctx,
4150                               lsm6dsox_fsm_lc_clr_t *val);
4151 
4152 typedef struct
4153 {
4154   lsm6dsox_fsm_outs1_t    fsm_outs1;
4155   lsm6dsox_fsm_outs2_t    fsm_outs2;
4156   lsm6dsox_fsm_outs3_t    fsm_outs3;
4157   lsm6dsox_fsm_outs4_t    fsm_outs4;
4158   lsm6dsox_fsm_outs5_t    fsm_outs5;
4159   lsm6dsox_fsm_outs6_t    fsm_outs6;
4160   lsm6dsox_fsm_outs7_t    fsm_outs7;
4161   lsm6dsox_fsm_outs8_t    fsm_outs8;
4162   lsm6dsox_fsm_outs1_t    fsm_outs9;
4163   lsm6dsox_fsm_outs2_t    fsm_outs10;
4164   lsm6dsox_fsm_outs3_t    fsm_outs11;
4165   lsm6dsox_fsm_outs4_t    fsm_outs12;
4166   lsm6dsox_fsm_outs5_t    fsm_outs13;
4167   lsm6dsox_fsm_outs6_t    fsm_outs14;
4168   lsm6dsox_fsm_outs7_t    fsm_outs15;
4169   lsm6dsox_fsm_outs8_t    fsm_outs16;
4170 } lsm6dsox_fsm_out_t;
4171 int32_t lsm6dsox_fsm_out_get(const stmdev_ctx_t *ctx,
4172                              lsm6dsox_fsm_out_t *val);
4173 
4174 typedef enum
4175 {
4176   LSM6DSOX_ODR_FSM_12Hz5 = 0,
4177   LSM6DSOX_ODR_FSM_26Hz  = 1,
4178   LSM6DSOX_ODR_FSM_52Hz  = 2,
4179   LSM6DSOX_ODR_FSM_104Hz = 3,
4180 } lsm6dsox_fsm_odr_t;
4181 int32_t lsm6dsox_fsm_data_rate_set(const stmdev_ctx_t *ctx,
4182                                    lsm6dsox_fsm_odr_t val);
4183 int32_t lsm6dsox_fsm_data_rate_get(const stmdev_ctx_t *ctx,
4184                                    lsm6dsox_fsm_odr_t *val);
4185 
4186 int32_t lsm6dsox_fsm_init_set(const stmdev_ctx_t *ctx, uint8_t val);
4187 int32_t lsm6dsox_fsm_init_get(const stmdev_ctx_t *ctx, uint8_t *val);
4188 
4189 int32_t lsm6dsox_long_cnt_int_value_set(const stmdev_ctx_t *ctx,
4190                                         uint16_t val);
4191 int32_t lsm6dsox_long_cnt_int_value_get(const stmdev_ctx_t *ctx,
4192                                         uint16_t *val);
4193 
4194 int32_t lsm6dsox_fsm_number_of_programs_set(const stmdev_ctx_t *ctx,
4195                                             uint8_t val);
4196 int32_t lsm6dsox_fsm_number_of_programs_get(const stmdev_ctx_t *ctx,
4197                                             uint8_t *val);
4198 
4199 int32_t lsm6dsox_fsm_start_address_set(const stmdev_ctx_t *ctx,
4200                                        uint16_t val);
4201 int32_t lsm6dsox_fsm_start_address_get(const stmdev_ctx_t *ctx,
4202                                        uint16_t *val);
4203 
4204 int32_t lsm6dsox_mlc_status_get(const stmdev_ctx_t *ctx,
4205                                 lsm6dsox_mlc_status_mainpage_t *val);
4206 
4207 typedef enum
4208 {
4209   LSM6DSOX_ODR_PRGS_12Hz5 = 0,
4210   LSM6DSOX_ODR_PRGS_26Hz  = 1,
4211   LSM6DSOX_ODR_PRGS_52Hz  = 2,
4212   LSM6DSOX_ODR_PRGS_104Hz = 3,
4213 } lsm6dsox_mlc_odr_t;
4214 int32_t lsm6dsox_mlc_data_rate_set(const stmdev_ctx_t *ctx,
4215                                    lsm6dsox_mlc_odr_t val);
4216 int32_t lsm6dsox_mlc_data_rate_get(const stmdev_ctx_t *ctx,
4217                                    lsm6dsox_mlc_odr_t *val);
4218 
4219 typedef struct
4220 {
4221   lsm6dsox_sensor_hub_1_t   sh_byte_1;
4222   lsm6dsox_sensor_hub_2_t   sh_byte_2;
4223   lsm6dsox_sensor_hub_3_t   sh_byte_3;
4224   lsm6dsox_sensor_hub_4_t   sh_byte_4;
4225   lsm6dsox_sensor_hub_5_t   sh_byte_5;
4226   lsm6dsox_sensor_hub_6_t   sh_byte_6;
4227   lsm6dsox_sensor_hub_7_t   sh_byte_7;
4228   lsm6dsox_sensor_hub_8_t   sh_byte_8;
4229   lsm6dsox_sensor_hub_9_t   sh_byte_9;
4230   lsm6dsox_sensor_hub_10_t  sh_byte_10;
4231   lsm6dsox_sensor_hub_11_t  sh_byte_11;
4232   lsm6dsox_sensor_hub_12_t  sh_byte_12;
4233   lsm6dsox_sensor_hub_13_t  sh_byte_13;
4234   lsm6dsox_sensor_hub_14_t  sh_byte_14;
4235   lsm6dsox_sensor_hub_15_t  sh_byte_15;
4236   lsm6dsox_sensor_hub_16_t  sh_byte_16;
4237   lsm6dsox_sensor_hub_17_t  sh_byte_17;
4238   lsm6dsox_sensor_hub_18_t  sh_byte_18;
4239 } lsm6dsox_emb_sh_read_t;
4240 int32_t lsm6dsox_sh_read_data_raw_get(const stmdev_ctx_t *ctx,
4241                                       lsm6dsox_emb_sh_read_t *val,
4242                                       uint8_t len);
4243 
4244 typedef enum
4245 {
4246   LSM6DSOX_SLV_0       = 0,
4247   LSM6DSOX_SLV_0_1     = 1,
4248   LSM6DSOX_SLV_0_1_2   = 2,
4249   LSM6DSOX_SLV_0_1_2_3 = 3,
4250 } lsm6dsox_aux_sens_on_t;
4251 int32_t lsm6dsox_sh_slave_connected_set(const stmdev_ctx_t *ctx,
4252                                         lsm6dsox_aux_sens_on_t val);
4253 int32_t lsm6dsox_sh_slave_connected_get(const stmdev_ctx_t *ctx,
4254                                         lsm6dsox_aux_sens_on_t *val);
4255 
4256 int32_t lsm6dsox_sh_master_set(const stmdev_ctx_t *ctx, uint8_t val);
4257 int32_t lsm6dsox_sh_master_get(const stmdev_ctx_t *ctx, uint8_t *val);
4258 
4259 typedef enum
4260 {
4261   LSM6DSOX_EXT_PULL_UP      = 0,
4262   LSM6DSOX_INTERNAL_PULL_UP = 1,
4263 } lsm6dsox_shub_pu_en_t;
4264 int32_t lsm6dsox_sh_pin_mode_set(const stmdev_ctx_t *ctx,
4265                                  lsm6dsox_shub_pu_en_t val);
4266 int32_t lsm6dsox_sh_pin_mode_get(const stmdev_ctx_t *ctx,
4267                                  lsm6dsox_shub_pu_en_t *val);
4268 
4269 int32_t lsm6dsox_sh_pass_through_set(const stmdev_ctx_t *ctx, uint8_t val);
4270 int32_t lsm6dsox_sh_pass_through_get(const stmdev_ctx_t *ctx, uint8_t *val);
4271 
4272 typedef enum
4273 {
4274   LSM6DSOX_EXT_ON_INT2_PIN = 1,
4275   LSM6DSOX_XL_GY_DRDY      = 0,
4276 } lsm6dsox_start_config_t;
4277 int32_t lsm6dsox_sh_syncro_mode_set(const stmdev_ctx_t *ctx,
4278                                     lsm6dsox_start_config_t val);
4279 int32_t lsm6dsox_sh_syncro_mode_get(const stmdev_ctx_t *ctx,
4280                                     lsm6dsox_start_config_t *val);
4281 
4282 typedef enum
4283 {
4284   LSM6DSOX_EACH_SH_CYCLE    = 0,
4285   LSM6DSOX_ONLY_FIRST_CYCLE = 1,
4286 } lsm6dsox_write_once_t;
4287 int32_t lsm6dsox_sh_write_mode_set(const stmdev_ctx_t *ctx,
4288                                    lsm6dsox_write_once_t val);
4289 int32_t lsm6dsox_sh_write_mode_get(const stmdev_ctx_t *ctx,
4290                                    lsm6dsox_write_once_t *val);
4291 
4292 int32_t lsm6dsox_sh_reset_set(const stmdev_ctx_t *ctx);
4293 int32_t lsm6dsox_sh_reset_get(const stmdev_ctx_t *ctx, uint8_t *val);
4294 
4295 typedef enum
4296 {
4297   LSM6DSOX_SH_ODR_104Hz = 0,
4298   LSM6DSOX_SH_ODR_52Hz  = 1,
4299   LSM6DSOX_SH_ODR_26Hz  = 2,
4300   LSM6DSOX_SH_ODR_13Hz  = 3,
4301 } lsm6dsox_shub_odr_t;
4302 int32_t lsm6dsox_sh_data_rate_set(const stmdev_ctx_t *ctx,
4303                                   lsm6dsox_shub_odr_t val);
4304 int32_t lsm6dsox_sh_data_rate_get(const stmdev_ctx_t *ctx,
4305                                   lsm6dsox_shub_odr_t *val);
4306 
4307 typedef struct
4308 {
4309   uint8_t   slv0_add;
4310   uint8_t   slv0_subadd;
4311   uint8_t   slv0_data;
4312 } lsm6dsox_sh_cfg_write_t;
4313 int32_t lsm6dsox_sh_cfg_write(const stmdev_ctx_t *ctx,
4314                               lsm6dsox_sh_cfg_write_t *val);
4315 
4316 typedef struct
4317 {
4318   uint8_t   slv_add;
4319   uint8_t   slv_subadd;
4320   uint8_t   slv_len;
4321 } lsm6dsox_sh_cfg_read_t;
4322 int32_t lsm6dsox_sh_slv0_cfg_read(const stmdev_ctx_t *ctx,
4323                                   lsm6dsox_sh_cfg_read_t *val);
4324 int32_t lsm6dsox_sh_slv1_cfg_read(const stmdev_ctx_t *ctx,
4325                                   lsm6dsox_sh_cfg_read_t *val);
4326 int32_t lsm6dsox_sh_slv2_cfg_read(const stmdev_ctx_t *ctx,
4327                                   lsm6dsox_sh_cfg_read_t *val);
4328 int32_t lsm6dsox_sh_slv3_cfg_read(const stmdev_ctx_t *ctx,
4329                                   lsm6dsox_sh_cfg_read_t *val);
4330 
4331 int32_t lsm6dsox_sh_status_get(const stmdev_ctx_t *ctx,
4332                                lsm6dsox_status_master_t *val);
4333 typedef enum
4334 {
4335   LSM6DSOX_S4S_TPH_7bit   = 0,
4336   LSM6DSOX_S4S_TPH_15bit  = 1,
4337 } lsm6dsox_s4s_tph_res_t;
4338 int32_t lsm6dsox_s4s_tph_res_set(const stmdev_ctx_t *ctx,
4339                                  lsm6dsox_s4s_tph_res_t val);
4340 int32_t lsm6dsox_s4s_tph_res_get(const stmdev_ctx_t *ctx,
4341                                  lsm6dsox_s4s_tph_res_t *val);
4342 
4343 int32_t lsm6dsox_s4s_tph_val_set(const stmdev_ctx_t *ctx, uint16_t val);
4344 int32_t lsm6dsox_s4s_tph_val_get(const stmdev_ctx_t *ctx, uint16_t *val);
4345 
4346 typedef enum
4347 {
4348   LSM6DSOX_S4S_DT_RES_11 = 0,
4349   LSM6DSOX_S4S_DT_RES_12 = 1,
4350   LSM6DSOX_S4S_DT_RES_13 = 2,
4351   LSM6DSOX_S4S_DT_RES_14 = 3,
4352 } lsm6dsox_s4s_res_ratio_t;
4353 int32_t lsm6dsox_s4s_res_ratio_set(const stmdev_ctx_t *ctx,
4354                                    lsm6dsox_s4s_res_ratio_t val);
4355 int32_t lsm6dsox_s4s_res_ratio_get(const stmdev_ctx_t *ctx,
4356                                    lsm6dsox_s4s_res_ratio_t *val);
4357 
4358 int32_t lsm6dsox_s4s_command_set(const stmdev_ctx_t *ctx, uint8_t val);
4359 int32_t lsm6dsox_s4s_command_get(const stmdev_ctx_t *ctx, uint8_t *val);
4360 
4361 int32_t lsm6dsox_s4s_dt_set(const stmdev_ctx_t *ctx, uint8_t val);
4362 int32_t lsm6dsox_s4s_dt_get(const stmdev_ctx_t *ctx, uint8_t *val);
4363 
4364 typedef struct
4365 {
4366   uint8_t ui;
4367   uint8_t aux;
4368 } lsm6dsox_id_t;
4369 int32_t lsm6dsox_id_get(const stmdev_ctx_t *ctx, stmdev_ctx_t *aux_ctx,
4370                         lsm6dsox_id_t *val);
4371 
4372 typedef enum
4373 {
4374   LSM6DSOX_SEL_BY_HW   = 0x00, /* bus mode select by HW (SPI 3W disable) */
4375   LSM6DSOX_SPI_4W      = 0x06, /* Only SPI: SDO / SDI separated pins */
4376   LSM6DSOX_SPI_3W      = 0x07, /* Only SPI: SDO / SDI share the same pin */
4377   LSM6DSOX_I2C         = 0x04, /* Only I2C */
4378   LSM6DSOX_I3C_T_50us  = 0x02, /* I3C: available time equal to 50 μs */
4379   LSM6DSOX_I3C_T_2us   = 0x12, /* I3C: available time equal to 2 μs */
4380   LSM6DSOX_I3C_T_1ms   = 0x22, /* I3C: available time equal to 1 ms */
4381   LSM6DSOX_I3C_T_25ms  = 0x32, /* I3C: available time equal to 25 ms */
4382 } lsm6dsox_ui_bus_md_t;
4383 
4384 typedef enum
4385 {
4386   LSM6DSOX_SPI_4W_AUX  = 0x00,
4387   LSM6DSOX_SPI_3W_AUX  = 0x01,
4388 } lsm6dsox_aux_bus_md_t;
4389 
4390 typedef struct
4391 {
4392   lsm6dsox_ui_bus_md_t ui_bus_md;
4393   lsm6dsox_aux_bus_md_t aux_bus_md;
4394 } lsm6dsox_bus_mode_t;
4395 int32_t lsm6dsox_bus_mode_set(const stmdev_ctx_t *ctx,
4396                               stmdev_ctx_t *aux_ctx,
4397                               lsm6dsox_bus_mode_t val);
4398 int32_t lsm6dsox_bus_mode_get(const stmdev_ctx_t *ctx,
4399                               stmdev_ctx_t *aux_ctx,
4400                               lsm6dsox_bus_mode_t *val);
4401 
4402 typedef enum
4403 {
4404   LSM6DSOX_DRV_RDY   = 0x00, /* Initialize the device for driver usage */
4405   LSM6DSOX_BOOT      = 0x01, /* Restore calib. param. ( it takes 10ms ) */
4406   LSM6DSOX_RESET     = 0x02, /* Reset configuration registers */
4407   LSM6DSOX_FIFO_COMP = 0x04, /* FIFO compression initialization request. */
4408   LSM6DSOX_FSM       = 0x08, /* Finite State Machine initialization request */
4409   LSM6DSOX_MLC       = 0x10, /* Machine Learning Core initialization request */
4410   LSM6DSOX_PEDO      = 0x20, /* Pedometer algo initialization request. */
4411   LSM6DSOX_TILT      = 0x40, /* Tilt algo initialization request */
4412   LSM6DSOX_SMOTION   = 0x80, /* Significant Motion initialization request */
4413 } lsm6dsox_init_t;
4414 int32_t lsm6dsox_init_set(const stmdev_ctx_t *ctx, lsm6dsox_init_t val);
4415 
4416 typedef struct
4417 {
4418   uint8_t sw_reset           : 1; /* Restoring configuration registers */
4419   uint8_t boot               : 1; /* Restoring calibration parameters */
4420   uint8_t drdy_xl            : 1; /* Accelerometer data ready */
4421   uint8_t drdy_g             : 1; /* Gyroscope data ready */
4422   uint8_t drdy_temp          : 1; /* Temperature data ready */
4423   uint8_t ois_drdy_xl        : 1; /* Accelerometer data ready on OIS */
4424   uint8_t ois_drdy_g         : 1; /* Gyroscope data ready on OIS */
4425   uint8_t ois_gyro_settling  : 1; /* Gyroscope is in the settling phase */
4426 } lsm6dsox_status_t;
4427 int32_t lsm6dsox_status_get(const stmdev_ctx_t *ctx, stmdev_ctx_t *aux_ctx,
4428                             lsm6dsox_status_t *val);
4429 
4430 typedef struct
4431 {
4432   uint8_t sdo_sa0_pull_up     : 1; /* 1 = pull-up on SDO/SA0 pin */
4433   uint8_t aux_sdo_ocs_pull_up : 1; /* 1 = pull-up on OCS_Aux/SDO_Aux pins */
4434   uint8_t int1_int2_push_pull : 1; /* 1 = push-pull / 0 = open-drain*/
4435   uint8_t int1_pull_down      : 1; /* 1 = pull-down always disabled (0=auto) */
4436 } lsm6dsox_pin_conf_t;
4437 int32_t lsm6dsox_pin_conf_set(const stmdev_ctx_t *ctx,
4438                               lsm6dsox_pin_conf_t val);
4439 int32_t lsm6dsox_pin_conf_get(const stmdev_ctx_t *ctx,
4440                               lsm6dsox_pin_conf_t *val);
4441 
4442 typedef struct
4443 {
4444   uint8_t active_low   : 1; /* 1 = active low / 0 = active high */
4445   uint8_t base_latched : 1; /* base functions are: FF, WU, 6D, Tap, Act/Inac */
4446   uint8_t emb_latched  : 1; /* emb functions are: Pedo, Tilt, SMot, Timestamp */
4447 } lsm6dsox_int_mode_t;
4448 int32_t lsm6dsox_interrupt_mode_set(const stmdev_ctx_t *ctx,
4449                                     lsm6dsox_int_mode_t val);
4450 int32_t lsm6dsox_interrupt_mode_get(const stmdev_ctx_t *ctx,
4451                                     lsm6dsox_int_mode_t *val);
4452 
4453 typedef struct
4454 {
4455   uint8_t drdy_xl       : 1; /* Accelerometer data ready */
4456   uint8_t drdy_g        : 1; /* Gyroscope data ready */
4457   uint8_t drdy_temp     : 1; /* Temperature data ready (1 = int2 pin disable) */
4458   uint8_t boot          : 1; /* Restoring calibration parameters */
4459   uint8_t fifo_th       : 1; /* FIFO threshold reached */
4460   uint8_t fifo_ovr      : 1; /* FIFO overrun */
4461   uint8_t fifo_full     : 1; /* FIFO full */
4462   uint8_t fifo_bdr      : 1; /* FIFO Batch counter threshold reached */
4463   uint8_t den_flag      : 1; /* external trigger level recognition (DEN) */
4464   uint8_t sh_endop      : 1; /* sensor hub end operation */
4465   uint8_t timestamp     : 1; /* timestamp overflow (1 = int2 pin disable) */
4466   uint8_t six_d         : 1; /* orientation change (6D/4D detection) */
4467   uint8_t double_tap    : 1; /* double-tap event */
4468   uint8_t free_fall     : 1; /* free fall event */
4469   uint8_t wake_up       : 1; /* wake up event */
4470   uint8_t single_tap    : 1; /* single-tap event */
4471   uint8_t sleep_change  : 1; /* Act/Inact (or Vice-versa) status changed */
4472   uint8_t step_detector : 1; /* Step detected */
4473   uint8_t tilt          : 1; /* Relative tilt event detected */
4474   uint8_t sig_mot       : 1; /* "significant motion" event detected */
4475   uint8_t fsm_lc        : 1; /* fsm long counter timeout interrupt event */
4476   uint8_t fsm1          : 1; /* fsm 1 interrupt event */
4477   uint8_t fsm2          : 1; /* fsm 2 interrupt event */
4478   uint8_t fsm3          : 1; /* fsm 3 interrupt event */
4479   uint8_t fsm4          : 1; /* fsm 4 interrupt event */
4480   uint8_t fsm5          : 1; /* fsm 5 interrupt event */
4481   uint8_t fsm6          : 1; /* fsm 6 interrupt event */
4482   uint8_t fsm7          : 1; /* fsm 7 interrupt event */
4483   uint8_t fsm8          : 1; /* fsm 8 interrupt event */
4484   uint8_t fsm9          : 1; /* fsm 9 interrupt event */
4485   uint8_t fsm10         : 1; /* fsm 10 interrupt event */
4486   uint8_t fsm11         : 1; /* fsm 11 interrupt event */
4487   uint8_t fsm12         : 1; /* fsm 12 interrupt event */
4488   uint8_t fsm13         : 1; /* fsm 13 interrupt event */
4489   uint8_t fsm14         : 1; /* fsm 14 interrupt event */
4490   uint8_t fsm15         : 1; /* fsm 15 interrupt event */
4491   uint8_t fsm16         : 1; /* fsm 16 interrupt event */
4492   uint8_t mlc1          : 1; /* mlc 1 interrupt event */
4493   uint8_t mlc2          : 1; /* mlc 2 interrupt event */
4494   uint8_t mlc3          : 1; /* mlc 3 interrupt event */
4495   uint8_t mlc4          : 1; /* mlc 4 interrupt event */
4496   uint8_t mlc5          : 1; /* mlc 5 interrupt event */
4497   uint8_t mlc6          : 1; /* mlc 6 interrupt event */
4498   uint8_t mlc7          : 1; /* mlc 7 interrupt event */
4499   uint8_t mlc8          : 1; /* mlc 8 interrupt event */
4500 } lsm6dsox_pin_int1_route_t;
4501 
4502 int32_t lsm6dsox_pin_int1_route_set(const stmdev_ctx_t *ctx,
4503                                     lsm6dsox_pin_int1_route_t val);
4504 int32_t lsm6dsox_pin_int1_route_get(const stmdev_ctx_t *ctx,
4505                                     lsm6dsox_pin_int1_route_t *val);
4506 
4507 typedef struct
4508 {
4509   uint8_t drdy_ois      : 1; /* OIS chain data ready */
4510   uint8_t drdy_xl       : 1; /* Accelerometer data ready */
4511   uint8_t drdy_g        : 1; /* Gyroscope data ready */
4512   uint8_t drdy_temp     : 1; /* Temperature data ready */
4513   uint8_t fifo_th       : 1; /* FIFO threshold reached */
4514   uint8_t fifo_ovr      : 1; /* FIFO overrun */
4515   uint8_t fifo_full     : 1; /* FIFO full */
4516   uint8_t fifo_bdr      : 1; /* FIFO Batch counter threshold reached */
4517   uint8_t timestamp     : 1; /* timestamp overflow */
4518   uint8_t six_d         : 1; /* orientation change (6D/4D detection) */
4519   uint8_t double_tap    : 1; /* double-tap event */
4520   uint8_t free_fall     : 1; /* free fall event */
4521   uint8_t wake_up       : 1; /* wake up event */
4522   uint8_t single_tap    : 1; /* single-tap event */
4523   uint8_t sleep_change  : 1; /* Act/Inact (or Vice-versa) status changed */
4524   uint8_t step_detector : 1; /* Step detected */
4525   uint8_t tilt          : 1; /* Relative tilt event detected */
4526   uint8_t sig_mot       : 1; /* "significant motion" event detected */
4527   uint8_t fsm_lc        : 1; /* fsm long counter timeout interrupt event */
4528   uint8_t fsm1          : 1; /* fsm 1 interrupt event */
4529   uint8_t fsm2          : 1; /* fsm 2 interrupt event */
4530   uint8_t fsm3          : 1; /* fsm 3 interrupt event */
4531   uint8_t fsm4          : 1; /* fsm 4 interrupt event */
4532   uint8_t fsm5          : 1; /* fsm 5 interrupt event */
4533   uint8_t fsm6          : 1; /* fsm 6 interrupt event */
4534   uint8_t fsm7          : 1; /* fsm 7 interrupt event */
4535   uint8_t fsm8          : 1; /* fsm 8 interrupt event */
4536   uint8_t fsm9          : 1; /* fsm 9 interrupt event */
4537   uint8_t fsm10         : 1; /* fsm 10 interrupt event */
4538   uint8_t fsm11         : 1; /* fsm 11 interrupt event */
4539   uint8_t fsm12         : 1; /* fsm 12 interrupt event */
4540   uint8_t fsm13         : 1; /* fsm 13 interrupt event */
4541   uint8_t fsm14         : 1; /* fsm 14 interrupt event */
4542   uint8_t fsm15         : 1; /* fsm 15 interrupt event */
4543   uint8_t fsm16         : 1; /* fsm 16 interrupt event */
4544   uint8_t mlc1          : 1; /* mlc 1 interrupt event */
4545   uint8_t mlc2          : 1; /* mlc 2 interrupt event */
4546   uint8_t mlc3          : 1; /* mlc 3 interrupt event */
4547   uint8_t mlc4          : 1; /* mlc 4 interrupt event */
4548   uint8_t mlc5          : 1; /* mlc 5 interrupt event */
4549   uint8_t mlc6          : 1; /* mlc 6 interrupt event */
4550   uint8_t mlc7          : 1; /* mlc 7 interrupt event */
4551   uint8_t mlc8          : 1; /* mlc 8 interrupt event */
4552 } lsm6dsox_pin_int2_route_t;
4553 
4554 int32_t lsm6dsox_pin_int2_route_set(const stmdev_ctx_t *ctx,
4555                                     stmdev_ctx_t *aux_ctx,
4556                                     lsm6dsox_pin_int2_route_t val);
4557 int32_t lsm6dsox_pin_int2_route_get(const stmdev_ctx_t *ctx,
4558                                     stmdev_ctx_t *aux_ctx,
4559                                     lsm6dsox_pin_int2_route_t *val);
4560 
4561 typedef struct
4562 {
4563   uint8_t drdy_xl          :  1; /* Accelerometer data ready */
4564   uint8_t drdy_g           :  1; /* Gyroscope data ready */
4565   uint8_t drdy_temp        :  1; /* Temperature data ready */
4566   uint8_t den_flag         : 1; /* external trigger level recognition (DEN) */
4567   uint8_t timestamp        : 1; /* timestamp overflow (1 = int2 pin disable) */
4568   uint8_t free_fall        :  1; /* free fall event */
4569   uint8_t wake_up          :  1; /* wake up event */
4570   uint8_t wake_up_z        :  1; /* wake up on Z axis event */
4571   uint8_t wake_up_y        :  1; /* wake up on Y axis event */
4572   uint8_t wake_up_x        :  1; /* wake up on X axis event */
4573   uint8_t single_tap       :  1; /* single-tap event */
4574   uint8_t double_tap       :  1; /* double-tap event */
4575   uint8_t tap_z            :  1; /* single-tap on Z axis event */
4576   uint8_t tap_y            :  1; /* single-tap on Y axis event */
4577   uint8_t tap_x            :  1; /* single-tap on X axis event */
4578   uint8_t tap_sign         :  1; /* sign of tap event (0-pos / 1-neg) */
4579   uint8_t six_d            : 1; /* orientation change (6D/4D detection) */
4580   uint8_t six_d_xl         : 1; /* X-axis low 6D/4D event (under threshold) */
4581   uint8_t six_d_xh         : 1; /* X-axis high 6D/4D event (over threshold) */
4582   uint8_t six_d_yl         : 1; /* Y-axis low 6D/4D event (under threshold) */
4583   uint8_t six_d_yh         : 1; /* Y-axis high 6D/4D event (over threshold) */
4584   uint8_t six_d_zl         : 1; /* Z-axis low 6D/4D event (under threshold) */
4585   uint8_t six_d_zh         : 1; /* Z-axis high 6D/4D event (over threshold) */
4586   uint8_t sleep_change     : 1; /* Act/Inact (or Vice-versa) status changed */
4587   uint8_t sleep_state      : 1; /* Act/Inact status flag (0-Act / 1-Inact) */
4588   uint8_t step_detector    :  1; /* Step detected */
4589   uint8_t tilt             :  1; /* Relative tilt event detected */
4590   uint8_t sig_mot          : 1; /* "significant motion" event detected */
4591   uint8_t fsm_lc           : 1; /* fsm long counter timeout interrupt event */
4592   uint8_t fsm1             :  1; /* fsm 1 interrupt event */
4593   uint8_t fsm2             :  1; /* fsm 2 interrupt event */
4594   uint8_t fsm3             :  1; /* fsm 3 interrupt event */
4595   uint8_t fsm4             :  1; /* fsm 4 interrupt event */
4596   uint8_t fsm5             :  1; /* fsm 5 interrupt event */
4597   uint8_t fsm6             :  1; /* fsm 6 interrupt event */
4598   uint8_t fsm7             :  1; /* fsm 7 interrupt event */
4599   uint8_t fsm8             :  1; /* fsm 8 interrupt event */
4600   uint8_t fsm9             :  1; /* fsm 9 interrupt event */
4601   uint8_t fsm10            :  1; /* fsm 10 interrupt event */
4602   uint8_t fsm11            :  1; /* fsm 11 interrupt event */
4603   uint8_t fsm12            :  1; /* fsm 12 interrupt event */
4604   uint8_t fsm13            :  1; /* fsm 13 interrupt event */
4605   uint8_t fsm14            :  1; /* fsm 14 interrupt event */
4606   uint8_t fsm15            :  1; /* fsm 15 interrupt event */
4607   uint8_t fsm16            :  1; /* fsm 16 interrupt event */
4608   uint8_t mlc1             :  1; /* mlc 1 interrupt event */
4609   uint8_t mlc2             :  1; /* mlc 2 interrupt event */
4610   uint8_t mlc3             :  1; /* mlc 3 interrupt event */
4611   uint8_t mlc4             :  1; /* mlc 4 interrupt event */
4612   uint8_t mlc5             :  1; /* mlc 5 interrupt event */
4613   uint8_t mlc6             :  1; /* mlc 6 interrupt event */
4614   uint8_t mlc7             :  1; /* mlc 7 interrupt event */
4615   uint8_t mlc8             :  1; /* mlc 8 interrupt event */
4616   uint8_t sh_endop         :  1; /* sensor hub end operation */
4617   uint8_t sh_slave0_nack   : 1; /* Not acknowledge on sensor hub slave 0 */
4618   uint8_t sh_slave1_nack   : 1; /* Not acknowledge on sensor hub slave 1 */
4619   uint8_t sh_slave2_nack   : 1; /* Not acknowledge on sensor hub slave 2 */
4620   uint8_t sh_slave3_nack   : 1; /* Not acknowledge on sensor hub slave 3 */
4621   uint8_t sh_wr_once       : 1; /* "WRITE_ONCE" end on sensor hub slave 0 */
4622   uint16_t fifo_diff       : 10; /* Number of unread sensor data in FIFO*/
4623   uint8_t fifo_ovr_latched :  1; /* Latched FIFO overrun status */
4624   uint8_t fifo_bdr         : 1; /* FIFO Batch counter threshold reached */
4625   uint8_t fifo_full        :  1; /* FIFO full */
4626   uint8_t fifo_ovr         :  1; /* FIFO overrun */
4627   uint8_t fifo_th          :  1; /* FIFO threshold reached */
4628 } lsm6dsox_all_sources_t;
4629 int32_t lsm6dsox_all_sources_get(const stmdev_ctx_t *ctx,
4630                                  lsm6dsox_all_sources_t *val);
4631 
4632 typedef struct
4633 {
4634   uint8_t odr_fine_tune;
4635 } lsm6dsox_dev_cal_t;
4636 int32_t lsm6dsox_calibration_get(const stmdev_ctx_t *ctx,
4637                                  lsm6dsox_dev_cal_t *val);
4638 
4639 typedef enum
4640 {
4641   LSM6DSOX_XL_UI_OFF       = 0x00, /* in power down */
4642   LSM6DSOX_XL_UI_1Hz6_LP   = 0x1B, /* @1Hz6 (low power) */
4643   LSM6DSOX_XL_UI_1Hz6_ULP  = 0x2B, /* @1Hz6 (ultra low/Gy, OIS imu off) */
4644   LSM6DSOX_XL_UI_12Hz5_HP  = 0x01, /* @12Hz5 (high performance) */
4645   LSM6DSOX_XL_UI_12Hz5_LP  = 0x11, /* @12Hz5 (low power) */
4646   LSM6DSOX_XL_UI_12Hz5_ULP = 0x21, /* @12Hz5 (ultra low/Gy, OIS imu off) */
4647   LSM6DSOX_XL_UI_26Hz_HP   = 0x02, /* @26Hz  (high performance) */
4648   LSM6DSOX_XL_UI_26Hz_LP   = 0x12, /* @26Hz  (low power) */
4649   LSM6DSOX_XL_UI_26Hz_ULP  = 0x22, /* @26Hz  (ultra low/Gy, OIS imu off) */
4650   LSM6DSOX_XL_UI_52Hz_HP   = 0x03, /* @52Hz  (high performance) */
4651   LSM6DSOX_XL_UI_52Hz_LP   = 0x13, /* @52Hz  (low power) */
4652   LSM6DSOX_XL_UI_52Hz_ULP  = 0x23, /* @52Hz  (ultra low/Gy, OIS imu off) */
4653   LSM6DSOX_XL_UI_104Hz_HP  = 0x04, /* @104Hz (high performance) */
4654   LSM6DSOX_XL_UI_104Hz_NM  = 0x14, /* @104Hz (normal mode) */
4655   LSM6DSOX_XL_UI_104Hz_ULP = 0x24, /* @104Hz (ultra low/Gy, OIS imu off) */
4656   LSM6DSOX_XL_UI_208Hz_HP  = 0x05, /* @208Hz (high performance) */
4657   LSM6DSOX_XL_UI_208Hz_NM  = 0x15, /* @208Hz (normal mode) */
4658   LSM6DSOX_XL_UI_208Hz_ULP = 0x25, /* @208Hz (ultra low/Gy, OIS imu off) */
4659   LSM6DSOX_XL_UI_416Hz_HP  = 0x06, /* @416Hz (high performance) */
4660   LSM6DSOX_XL_UI_833Hz_HP  = 0x07, /* @833Hz (high performance) */
4661   LSM6DSOX_XL_UI_1667Hz_HP = 0x08, /* @1kHz66 (high performance) */
4662   LSM6DSOX_XL_UI_3333Hz_HP = 0x09, /* @3kHz33 (high performance) */
4663   LSM6DSOX_XL_UI_6667Hz_HP = 0x0A, /* @6kHz66 (high performance) */
4664 } lsm6dsox_ui_xl_odr_t;
4665 
4666 typedef enum
4667 {
4668   LSM6DSOX_XL_UI_2g   = 0,
4669   LSM6DSOX_XL_UI_4g   = 2,
4670   LSM6DSOX_XL_UI_8g   = 3,
4671   LSM6DSOX_XL_UI_16g  = 1, /* OIS full scale is also forced to be 16g */
4672 } lsm6dsox_ui_xl_fs_t;
4673 
4674 typedef enum
4675 {
4676   LSM6DSOX_GY_UI_OFF       = 0x00, /* gy in power down */
4677   LSM6DSOX_GY_UI_12Hz5_LP  = 0x11, /* gy @12Hz5 (low power) */
4678   LSM6DSOX_GY_UI_12Hz5_HP  = 0x01, /* gy @12Hz5 (high performance) */
4679   LSM6DSOX_GY_UI_26Hz_LP   = 0x12, /* gy @26Hz  (low power) */
4680   LSM6DSOX_GY_UI_26Hz_HP   = 0x02, /* gy @26Hz  (high performance) */
4681   LSM6DSOX_GY_UI_52Hz_LP   = 0x13, /* gy @52Hz  (low power) */
4682   LSM6DSOX_GY_UI_52Hz_HP   = 0x03, /* gy @52Hz  (high performance) */
4683   LSM6DSOX_GY_UI_104Hz_NM  = 0x14, /* gy @104Hz (low power) */
4684   LSM6DSOX_GY_UI_104Hz_HP  = 0x04, /* gy @104Hz (high performance) */
4685   LSM6DSOX_GY_UI_208Hz_NM  = 0x15, /* gy @208Hz (low power) */
4686   LSM6DSOX_GY_UI_208Hz_HP  = 0x05, /* gy @208Hz (high performance) */
4687   LSM6DSOX_GY_UI_416Hz_HP  = 0x06, /* gy @416Hz (high performance) */
4688   LSM6DSOX_GY_UI_833Hz_HP  = 0x07, /* gy @833Hz (high performance) */
4689   LSM6DSOX_GY_UI_1667Hz_HP = 0x08, /* gy @1kHz66 (high performance) */
4690   LSM6DSOX_GY_UI_3333Hz_HP = 0x09, /* gy @3kHz33 (high performance) */
4691   LSM6DSOX_GY_UI_6667Hz_HP = 0x0A, /* gy @6kHz66 (high performance) */
4692 } lsm6dsox_ui_gy_odr_t;
4693 
4694 typedef enum
4695 {
4696   LSM6DSOX_GY_UI_250dps   = 0,
4697   LSM6DSOX_GY_UI_125dps   = 1,
4698   LSM6DSOX_GY_UI_500dps   = 2,
4699   LSM6DSOX_GY_UI_1000dps  = 4,
4700   LSM6DSOX_GY_UI_2000dps  = 6,
4701 } lsm6dsox_ui_gy_fs_t;
4702 
4703 typedef enum
4704 {
4705   LSM6DSOX_OIS_ONLY_AUX    = 0x00, /* Auxiliary SPI full control */
4706   LSM6DSOX_OIS_ONLY_UI     = 0x02, /* Primary interface full control */
4707   LSM6DSOX_OIS_MIXED       = 0x01, /* Enabling by UI / read-config by AUX */
4708 } lsm6dsox_ois_ctrl_md_t;
4709 
4710 typedef enum
4711 {
4712   LSM6DSOX_XL_OIS_OFF       = 0x00, /* in power down */
4713   LSM6DSOX_XL_OIS_6667Hz_HP = 0x01, /* @6kHz OIS imu active/NO ULP on UI */
4714 } lsm6dsox_ois_xl_odr_t;
4715 
4716 typedef enum
4717 {
4718   LSM6DSOX_XL_OIS_2g   = 0,
4719   LSM6DSOX_XL_OIS_4g   = 2,
4720   LSM6DSOX_XL_OIS_8g   = 3,
4721   LSM6DSOX_XL_OIS_16g  = 1, /* UI full scale is also forced to be 16g */
4722 } lsm6dsox_ois_xl_fs_t;
4723 
4724 typedef enum
4725 {
4726   LSM6DSOX_GY_OIS_OFF       = 0x00, /* in power down */
4727   LSM6DSOX_GY_OIS_6667Hz_HP = 0x01, /* @6kHz No Ultra Low Power*/
4728 } lsm6dsox_ois_gy_odr_t;
4729 
4730 typedef enum
4731 {
4732   LSM6DSOX_GY_OIS_250dps   = 0,
4733   LSM6DSOX_GY_OIS_125dps   = 1,
4734   LSM6DSOX_GY_OIS_500dps   = 2,
4735   LSM6DSOX_GY_OIS_1000dps  = 4,
4736   LSM6DSOX_GY_OIS_2000dps  = 6,
4737 } lsm6dsox_ois_gy_fs_t;
4738 
4739 typedef enum
4740 {
4741   LSM6DSOX_FSM_DISABLE = 0x00,
4742   LSM6DSOX_FSM_XL      = 0x01,
4743   LSM6DSOX_FSM_GY      = 0x02,
4744   LSM6DSOX_FSM_XL_GY   = 0x03,
4745 } lsm6dsox_fsm_sens_t;
4746 
4747 typedef enum
4748 {
4749   LSM6DSOX_MLC_DISABLE = 0x00,
4750   LSM6DSOX_MLC_XL      = 0x01,
4751   LSM6DSOX_MLC_XL_GY   = 0x03,
4752 } lsm6dsox_mlc_sens_t;
4753 
4754 typedef struct
4755 {
4756   struct
4757   {
4758     struct
4759     {
4760       lsm6dsox_ui_xl_odr_t odr;
4761       lsm6dsox_ui_xl_fs_t fs;
4762     } xl;
4763     struct
4764     {
4765       lsm6dsox_ui_gy_odr_t odr;
4766       lsm6dsox_ui_gy_fs_t fs;
4767     } gy;
4768   } ui;
4769   struct
4770   {
4771     lsm6dsox_ois_ctrl_md_t ctrl_md;
4772     struct
4773     {
4774       lsm6dsox_ois_xl_odr_t odr;
4775       lsm6dsox_ois_xl_fs_t fs;
4776     } xl;
4777     struct
4778     {
4779       lsm6dsox_ois_gy_odr_t odr;
4780       lsm6dsox_ois_gy_fs_t fs;
4781     } gy;
4782   } ois;
4783   struct
4784   {
4785     lsm6dsox_fsm_sens_t sens;
4786     lsm6dsox_fsm_odr_t odr;
4787   } fsm;
4788   struct
4789   {
4790     lsm6dsox_mlc_sens_t sens;
4791     lsm6dsox_mlc_odr_t odr;
4792   } mlc;
4793 } lsm6dsox_md_t;
4794 int32_t lsm6dsox_mode_set(const stmdev_ctx_t *ctx, stmdev_ctx_t *aux_ctx,
4795                           lsm6dsox_md_t *val);
4796 int32_t lsm6dsox_mode_get(const stmdev_ctx_t *ctx, stmdev_ctx_t *aux_ctx,
4797                           lsm6dsox_md_t *val);
4798 
4799 typedef struct
4800 {
4801   struct
4802   {
4803     struct
4804     {
4805       float_t mg[3];
4806       int16_t raw[3];
4807     } xl;
4808     struct
4809     {
4810       float_t mdps[3];
4811       int16_t raw[3];
4812     } gy;
4813     struct
4814     {
4815       float_t deg_c;
4816       int16_t raw;
4817     } heat;
4818   } ui;
4819   struct
4820   {
4821     struct
4822     {
4823       float_t mg[3];
4824       int16_t raw[3];
4825     } xl;
4826     struct
4827     {
4828       float_t mdps[3];
4829       int16_t raw[3];
4830     } gy;
4831   } ois;
4832 } lsm6dsox_data_t;
4833 int32_t lsm6dsox_data_get(const stmdev_ctx_t *ctx, stmdev_ctx_t *aux_ctx,
4834                           lsm6dsox_md_t *md, lsm6dsox_data_t *data);
4835 
4836 typedef struct
4837 {
4838   uint8_t sig_mot      : 1; /* significant motion */
4839   uint8_t tilt         : 1; /* tilt detection  */
4840   uint8_t step         : 1; /* step counter/detector */
4841   uint8_t mlc          : 1; /* machine learning core */
4842   uint8_t fsm          : 1; /* finite state machine */
4843   uint8_t fifo_compr   : 1; /* mlc 8 interrupt event */
4844 } lsm6dsox_emb_sens_t;
4845 int32_t lsm6dsox_embedded_sens_set(const stmdev_ctx_t *ctx,
4846                                    lsm6dsox_emb_sens_t *emb_sens);
4847 int32_t lsm6dsox_embedded_sens_get(const stmdev_ctx_t *ctx,
4848                                    lsm6dsox_emb_sens_t *emb_sens);
4849 int32_t lsm6dsox_embedded_sens_off(const stmdev_ctx_t *ctx);
4850 
4851 /**
4852   * @}
4853   *
4854   */
4855 
4856 #ifdef __cplusplus
4857 }
4858 #endif
4859 
4860 #endif /*LSM6DSOX_DRIVER_H */
4861 
4862 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
4863