# Copyright (c) 2022 Espressif Systems (Shanghai) Co., Ltd.
# SPDX-License-Identifier: Apache-2.0

description: |

  Espressif's Pulse Counter Mode (PCNT) controller Node

  The pulse counter module is designed to count the number of
  rising and/or falling edges of an input signal.

  The ESP32's PCNT module has 8 independent counting “units” numbered from 0 to 7.
  The ESP32S2's PCNT module has 4 independent counting “units” numbered from 0 to 3.

  Each pulse counter unit has a 16-bit signed counter register.

  Each unit has two independent channel: ch0 and ch1 that can be configured
  to either increment or decrement the counter.

  Each channel has two inputs: a signal input that accepts signal edges
  to be detected, as well as a control input that can be used to enable
  or disable the signal input.

  Each pulse counter unit also features a filter on each of the four inputs,
  adding the option to ignore short glitches in the signals.

  By combining the usage of both signal and control inputs, a PCNT unit can
  act as a quadrature decoder.

  Example: Use PCNT to read a rotary-enconder

  The mapping between signal and control input and the pin is done through pinctrl:

    &pinctrl {
        pcnt_default: pcnt_default {
            group1 {
                pinmux = <PCNT0_CH0SIG_GPIO14>,
                        <PCNT0_CH0CTRL_GPIO15>;
                bias-pull-up;
            };
        };
    };

  Note: Check espressif,esp32-pinctrl.yaml for complete documentation regarding pinctrl.

  Use the PCNT node to configure the module:

    &pcnt {
      pinctrl-0 = <&pcnt_default>;
      pinctrl-names = "default";
      status = "okay";
      #address-cells = <1>;
      #size-cells = <0>;
      unit0@0 {
        reg = <0>;
        #address-cells = <1>;
        #size-cells = <0>;
        filter = <100>;
        channelA@0 {
            reg = <0>;
            sig-pos-mode = <2>;
            sig-neg-mode = <1>;
            ctrl-h-mode = <0>;
            ctrl-l-mode = <1>;
        };
      };
    };

compatible: "espressif,esp32-pcnt"

include: [sensor-device.yaml, pinctrl-device.yaml]

child-binding:
  description: PCNT Unit configuration.

  properties:
    reg:
      type: int
      required: true
      enum:
      - 0
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7

      description: |
        The PCNT unit index.
        The ESP32 has 8 PCNT units. ESP32S2 has 4 PCNT units.

    filter:
      type: int
      description: Pulse length (ns) to be ignored

  child-binding:
    description: PCNT Channel configuration.

    properties:
      reg:
        type: int
        required: true
        enum:
        - 0
        - 1

        description: The PCNT channel index.

      sig-pos-mode:
        type: int
        enum:
        - 0
        - 1
        - 2

        description: |
          Define what to do on the positive edge of pulse input.
          0 (Default) - Inhibit counter (counter value will not change in this condition).
          1 - Increase counter value.
          2 - Decrease counter value.

      sig-neg-mode:
        type: int
        enum:
        - 0
        - 1
        - 2

        description: |
          Define what to do on the negative edge of pulse input.
          0 (Default) - Inhibit counter (counter value will not change in this condition).
          1 - Increase counter value.
          2 - Decrease counter value.

      ctrl-h-mode:
        type: int
        enum:
        - 0
        - 1
        - 2

        description: |
          Define what to do when the control input is high.
          0 (Default) - Don't change counter mode.
          1 - Invert counter mode(increase -> decrease, decrease -> increase).
          2 - Control mode: Inhibit counter (counter value will not change in this condition).

      ctrl-l-mode:
        type: int
        enum:
        - 0
        - 1
        - 2

        description: |
          Define what to do when the control input is low.
          0 (Default) - Don't change counter mode.
          1 - Invert counter mode(increase -> decrease, decrease -> increase).
          2 - Control mode: Inhibit counter (counter value will not change in this condition).
