# 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.
  ESP32S2 and ESP32S3 have 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/S3 have 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).
