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

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.

         3 # ODR/20 (HP/LP)
         2 # ODR/10 (HP/LP)
         1 # ODR/ 4 (HP/LP)
         0 # ODR/ 2 (up to ODR = 800 Hz, 400 Hz when ODR = 1600 Hz)

    enum:
      - 3
      - 2
      - 1
      - 0

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

        0 # Low Power M1
        1 # Low Power M2
        2 # Low Power M3
        3 # Low Power M4
        4 # High Performance

    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 # Only Single Tap
        1 # Single and 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 # ~156mg
      1 # ~219mg
      2 # ~250mg
      3 # ~312mg
      4 # ~344mg
      5 # ~406mg
      6 # ~469mg
      7 # ~500mg

    enum:
      - 0
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
