# 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: [base.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
      required: false
      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
        required: false
        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
        required: false
        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
        required: false
        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
        required: false
        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).
