# Copyright (c) 2021 STMicroelectronics
# SPDX-License-Identifier: Apache-2.0

description: |
    When setting the odr property in a .dts or .dtsi file you may include
    lis2dw12.h and use the macros defined there.

    Example:
    #include <zephyr/dt-bindings/sensor/lis2dw12.h>

    lis2dw12: lis2dw12@0 {
      ...

      wakeup-duration = <LIS2DW12_DT_WAKEUP_4_ODR>;
      ff-threshold = <LIS2DW12_DT_FF_THRESHOLD_500_mg>;
      tap-mode = <LIS2DW12_DT_SINGLE_DOUBLE_TAP>;
      power-mode = <LIS2DW12_DT_HP_MODE>;
      bw-filt = <LIS2DW12_DT_FILTER_BW_ODR_DIV_2>;
    };

include: sensor-device.yaml

properties:
  irq-gpios:
    type: phandle-array
    description: |
      DRDY pin

      This pin defaults to active high when produced by the sensor.
      The property value should ensure the flags properly describe
      the signal that is presented to the driver.

  int-pin:
    type: int
    default: 1
    enum: [1, 2]

    description: |
      Select DRDY pin number (1 or 2).

         1 # drdy is generated from INT1
         2 # drdy is generated from INT2

      This number represents which of the two interrupt pins
      (INT1 or INT2) the drdy line is attached to. This property is not
      mandatory and if not present it defaults to 1 which is the
      configuration at power-up.

  range:
    type: int
    default: 2
    description: |
      Range in g. Default is power-up configuration.

        16 # 16g (1.952 mg/LSB)
         8 #  8g (0.976 mg/LSB)
         4 #  4g (0.488 mg/LSB)
         2 #  2g (0.244 mg/LSB)

    enum: [16, 8, 4, 2]

  odr:
    type: int
    description: |
      Output data rate in Hz. Default value is 12.5Hz if this is not set.
      The output data rates which are represented with fractional
      numbers are converted into their integer parts (1.65Hz -> 1, 12.5Hz -> 12).
      If 0 selected as the odr, the accelerometer initializes into
      power off state.

    enum: [0, 1, 12, 25, 50, 100, 200, 400, 800, 1600]

  bw-filt:
    type: int
    default: 0
    description: |
      Digital filtering cutoff bandwidth. Default is power-up configuration.

      - 0 # LIS2DW12_DT_FILTER_BW_ODR_DIV_2
      - 1 # LIS2DW12_DT_FILTER_BW_ODR_DIV_4
      - 2 # LIS2DW12_DT_FILTER_BW_ODR_DIV_10
      - 3 # LIS2DW12_DT_FILTER_BW_ODR_DIV_20

    enum: [0, 1, 2, 3]

  power-mode:
    type: int
    default: 0
    description: |
      Specify the sensor power mode. Default is power-up configuration.

      - 0 # LIS2DW12_DT_LP_M1
      - 1 # LIS2DW12_DT_LP_M2
      - 2 # LIS2DW12_DT_LP_M3
      - 3 # LIS2DW12_DT_LP_M4
      - 4 # LIS2DW12_DT_HP_MODE

    enum: [0, 1, 2, 3, 4]

  # tap and tap-tap configuration section
  # All default values are selected to match the power-up values.
  # tap and tap-tap events can be generated on INT1 only.

  tap-mode:
    type: int
    default: 0
    description: |
      Tap mode. Default is power-up configuration.

      - 0 # LIS2DW12_DT_SINGLE_TAP
      - 1 # LIS2DW12_DT_SINGLE_DOUBLE_TAP

    enum: [0, 1]

  tap-threshold:
    type: array
    default: [0, 0, 0]
    description: |
      Tap X/Y/Z axes threshold. Default is power-up configuration.
      (X/Y/Z values range from 0x00 to 0x1F)

      Thresholds to start the tap-event detection procedure on the X/Y/Z axes.
      Threshold values for each axis are unsigned 5-bit corresponding
      to a 2g acceleration full-scale range. A threshold value equal to zero
      corresponds to disable the tap detection on that axis.

      For example, if you want to set the threshold for X to 12, for Z to 14
      and want to disable tap detection on Y, you should specify in Device Tree

          tap-threshold = <12>, <0>, <14>

      which is equivalent to X = 12 * 2g/32 = 750mg and Z = 14 * 2g/32 = 875mg.

  tap-shock:
    type: int
    default: 0x0
    description: |
      Tap shock value. Default is power-up configuration.
      (values range from 0x0 to 0x3)
      This register represents the maximum time of an over-threshold signal
      detection to be recognized as a tap event. Where 0 equals 4*1/ODR and
      1LSB = 8*1/ODR.

  tap-latency:
    type: int
    default: 0x0
    description: |
      Tap latency. Default is power-up configuration.
      (values range from 0x0 to 0xF)
      When double-tap recognition is enabled, this register expresses the
      maximum time between two successive detected taps to determine a
      double-tap event. Where 0 equals 16*1/ODR and 1LSB = 32*1/ODR.

  tap-quiet:
    type: int
    default: 0x0
    description: |
      Expected quiet time after a tap detection. Default is power-up configuration.
      (values range from 0x0 to 0x3)
      This register represents the time after the first detected tap in which
      there must not be any overthreshold event. Where 0 equals 2*1/ODR
      and 1LSB = 4*1/ODR.

  low-noise:
    type: boolean
    description: |
      Enables the LOW_NOISE flag in the CTRL6 register.
      This influences the noise density and the current consumption.
      See the datasheet for more information.

  hp-filter-path:
    type: boolean
    description: |
      Sets the Filtered Data Selection bit in the CTRL6 register.
      When enabled, the high-pass filter path is selected.
      When disabled, the low-pass filter path is selected.
      Note that this influences the OUT_REG / FIFO values,
      but not the Wakeup function.

  hp-ref-mode:
    type: boolean
    description: |
      Enables the high-pass filter reference mode in the CTRL7 register.
      When the high-pass filter is configured in reference mode,
      the output data is calculated as the difference between the input
      acceleration and the values captured when reference mode was enabled.
      In this way only the difference is applied without any filtering
      of the LIS2DW12.
      Note that this influences both the OUT_REG / FIFO values,
      as well as the Wakeup function.

  drdy-pulsed:
    type: boolean
    description: |
      Selects the pulsed mode for data-ready interrupt when enabled,
      and the latched mode when disabled.
      Sets the corresponding DRDY_PULSED bit in the CTRL7 register.

  ff-duration:
    type: int
    default: 30
    description: |
      The freefall duration value represented in milliseconds.
      If the accelerometer readings of the all axes are lower
      than the freefall threshold value for the freefall duration long,
      then a freefall trigger occurs. This value is 5 bits long in the
      register and 1 LSB = 1 * 1/ODR. This value depends on the ODR.
      if the data rate change in code with SENSOR ATTR SAMPLING FREQUENCY,
      It must be set again with SENSOR_ATT_FF_DUR attribute. ST propose
      100Hz ODR and 30ms ff-duration for recognize freefall detection
      refer to ST DT0100 design tip document.

  ff-threshold:
    type: int
    default: 3
    description: |
      The freefall threshold value represented in mg.
      If the accelerometer readings of the all axes are lower
      than the freefall threshold value for the freefall duration long,
      then a freefall trigger occurs. This value is 3 bits long.
      Default value chosen 3 (312 mg) refer to ST DT0100 design tip document.

      - 0 # LIS2DW12_DT_FF_THRESHOLD_156_mg
      - 1 # LIS2DW12_DT_FF_THRESHOLD_219_mg
      - 2 # LIS2DW12_DT_FF_THRESHOLD_250_mg
      - 3 # LIS2DW12_DT_FF_THRESHOLD_312_mg
      - 4 # LIS2DW12_DT_FF_THRESHOLD_344_mg
      - 5 # LIS2DW12_DT_FF_THRESHOLD_406_mg
      - 6 # LIS2DW12_DT_FF_THRESHOLD_469_mg
      - 7 # LIS2DW12_DT_FF_THRESHOLD_500_mg

    enum: [0, 1, 2, 3, 4, 5, 6, 7]

  wakeup-duration:
    type: int
    default: 0
    description: |
      The wakeup duration. Default value is the register reset value.
      If the accelerometer readings of the all axes are higher
      than the wakeup threshold value for the wakeup duration long,
      then a wakeup trigger occurs. This value is 2 bits long in the
      register and 1 LSB = 1 * 1/ODR.

      - 0 # LIS2DW12_DT_WAKEUP_1_ODR
      - 1 # LIS2DW12_DT_WAKEUP_2_ODR
      - 2 # LIS2DW12_DT_WAKEUP_3_ODR
      - 3 # LIS2DW12_DT_WAKEUP_4_ODR

    enum: [0, 1, 2, 3]
