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

description: |

  Espressif's Motor Control Pulse Width Modulator (MCPWM) controller Node

  The MCPWM peripheral is intended for motor and power control.
  It provides six PWM outputs that can be set up to operate in several topologies

  ESP32 contains two MCPWM peripherals: MCPWM0 and MCPWM1

  Each MCPWM peripheral has one clock divider (prescaler), three PWM timers, three PWM operators,
  and a capture module.

  Every PWM operator has two PWM outputs: PWMxA and PWMxB. They can work independently, in symmetric
  and asymmetric configuration. MCPWMxA and MCPWMxB will share the same timer, thus having the same
  operating frequency.

  The driver currently always use the timer x for operator x. Timer 0 will use operator 0 for
  PWM0A/B.
  Timer 1 will use operator 1 for PWM1A/B, and so on.

  Mapping channel ID:
  Channel 0 -> Timer 0, Operator 0, output PWM0A
  Channel 1 -> Timer 0, Operator 0, output PWM0B
  Channel 2 -> Timer 1, Operator 1, output PWM1A
  Channel 3 -> Timer 1, Operator 1, output PWM1B
  Channel 4 -> Timer 2, Operator 2, output PWM2A
  Channel 5 -> Timer 2, Operator 2, output PWM2B
  Channel 6 -> Capture 0
  Channel 7 -> Capture 1
  Channel 8 -> Capture 2

  Example: Use PWM0A output and capture 0:

  pwm_loopback_0 {
    compatible = "test-pwm-loopback";
    pwms = <&mcpwm0 0 0 PWM_POLARITY_NORMAL>, #Channel 0 -> Output PWM0A
           <&mcpwm0 6 0 PWM_POLARITY_NORMAL>; #Channel 6 -> Capture 0;
  };

  The mapping between the output PWMxA/B or CaptureX and GPIO is done through pinctrl:

    &mcpwm0 {
      pinctrl-0 = <&mcpwm0_default>;
      pinctrl-names = "default";
    }

  The 'mcpwm0_default' node is defined inside the pinctrl node.

    &pinctrl {
      mcpwm0_default: mcpwm0_default {
        group1 {
          pinmux = <MCPWM0_OUT0A_GPIO0>,
            <MCPWM0_OUT0B_GPIO2>,
            <MCPWM0_OUT1A_GPIO4>;
          output-enable;
        };
        group2 {
          pinmux = <MCPWM0_CAP0_GPIO5>;
        };
      };
    };

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

  Use the prescale-timerX property to configure the timers:

    &mcpwm0 {
      pinctrl-0 = <&mcpwm0_default>;
      pinctrl-names = "default";
      prescale = <255>;
      prescale-timer0 = <103>;
      prescale-timer1 = <0>;
      prescale-timer2 = <255>;
      status = "okay";
    };

compatible: "espressif,esp32-mcpwm"

include: [pwm-controller.yaml, pinctrl-device.yaml, base.yaml]

properties:
  prescale:
    type: int
    required: true
    description: |
      8 bit timer prescale for the global clock.
      Period of PWM_clk = 6.25ns * (PWM_CLK_PRESCALE + 1).

  "#pwm-cells":
    const: 3

  prescale-timer0:
    type: int
    description: |
      8 bit timer prescale for timer 0.
      Period of PT0_clk = Period of PWM_clk * (PWM_TIMER0_PRESCALE + 1).

  prescale-timer1:
    type: int
    description: |
      8 bit timer prescale for timer 1.
      Period of PT1_clk = Period of PWM_clk * (PWM_TIMER1_PRESCALE + 1).

  prescale-timer2:
    type: int
    description: |
      8 bit timer prescale for timer 2.
      Period of PT2_clk = Period of PWM_clk * (PWM_TIMER2_PRESCALE + 1).

pwm-cells:
  - channel
  - period
  - flags
