# 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
