# Copyright (c) 2023 Andriy Gelman
# SPDX-License-Identifier: Apache-2.0

description: |
  An external clock signal driven by a PWM pin.

  The devicetree must define a clock node:

  pwmclock: pwmclock {
      status = "okay";
      compatible = "pwm-clock";
      #clock-cells = <1>;
      pwms = <&pwm_ccu40 2 PWM_HZ(1000000) PWM_POLARITY_NORMAL>;
  };

  This will create a device node with a clock-controller
  API. Internally the device node will use PWM API to start the
  clock signals at 1MHz. Note that the PWM_HZ() macro converts the
  frequency to time (nanoseconds units). This may result in rounding
  errors if the clock frequency is not an integer number of nanoseconds.
  The clock frequency can be explicitly set using the clock-frequency
  property.

  The PWM node may need to be properly configured to generate
  the target period (i.e. using prescaler options). See the documentation
  for the target PWM driver.

compatible: "pwm-clock"

include: [clock-controller.yaml, base.yaml]

properties:
  pwms:
    type: phandle-array
    required: true

  clock-frequency:
    type: int
    description: |
      Exact output frequency, in case the PWM period is not exact
      but was rounded to nanoseconds. This property is optional.

  pwm-on-delay:
    type: int
    default: 0
    description:
      Optional blocking delay in micro seconds to make sure that the PWM
      clock has started after returning from clock_control_on().

  "#clock-cells":
    const: 1

clock-cells:
  - id
