Documentation / devicetree / bindings / regulator / pwm-regulator.yaml


Based on kernel version 6.11. Page generated on 2024-09-24 08:21 EST.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/regulator/pwm-regulator.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Generic PWM Regulator

maintainers:
  - Brian Norris <briannorris@chromium.org>
  - Lee Jones <lee@kernel.org>
  - Alexandre Courbot <acourbot@nvidia.com>

description: |
  Currently supports 2 modes of operation:

  Voltage Table:
    When in this mode, a voltage table (See below) of predefined voltage <=>
    duty-cycle values must be provided via DT. Limitations are that the
    regulator can only operate at the voltages supplied in the table.
    Intermediary duty-cycle values which would normally allow finer grained
    voltage selection are ignored and rendered useless.  Although more control
    is given to the user if the assumptions made in continuous-voltage mode do
    not reign true.

  Continuous Voltage:
    This mode uses the regulator's maximum and minimum supplied voltages
    specified in the regulator-{min,max}-microvolt properties to calculate
    appropriate duty-cycle values.  This allows for a much more fine grained
    solution when compared with voltage-table mode above.  This solution does
    make an assumption that a %50 duty-cycle value will cause the regulator
    voltage to run at half way between the supplied max_uV and min_uV values.
 
  If voltage-table is provided, then the device will be used in Voltage Table
  Mode.  If no voltage-table is provided, then the device will be used in
  Continuous Voltage Mode.

allOf:
  - $ref: regulator.yaml#

properties:
  compatible:
    const: pwm-regulator

  pwms:
    maxItems: 1

  voltage-table:
    description: Voltage and Duty-Cycle table.
    $ref: /schemas/types.yaml#/definitions/uint32-matrix
    items:
      items:
        - description: voltage in microvolts (uV)
        - description: duty-cycle in percent (%)

  enable-gpios:
    description: Regulator enable GPIO
    maxItems: 1
 
   # Optional properties for Continuous mode:
  pwm-dutycycle-unit:
    description:
      Integer value encoding the duty cycle unit. If not
        defined, <100> is assumed, meaning that
        pwm-dutycycle-range contains values expressed in
        percent.
    $ref: /schemas/types.yaml#/definitions/uint32
    default: 100

  pwm-dutycycle-range:
    description:
      Should contain 2 entries. The first entry is encoding
        the dutycycle for regulator-min-microvolt and the
        second one the dutycycle for regulator-max-microvolt.
        Duty cycle values are expressed in pwm-dutycycle-unit.
        If not defined, <0 100> is assumed.
    $ref: /schemas/types.yaml#/definitions/uint32-array
    items:
      - description: the dutycycle for regulator-min-microvolt
      - description: the dutycycle for regulator-max-microvolt
    default: [ 0 100 ]

required:
  - compatible
  - pwms

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
 
    // Continuous Voltage With Enable GPIO Example:
    regulator {
        compatible = "pwm-regulator";
        pwms = <&pwm1 0 8448 0>;
        enable-gpios = <&gpio0 23 GPIO_ACTIVE_HIGH>;
        regulator-min-microvolt = <1016000>;
        regulator-max-microvolt = <1114000>;
        regulator-name = "vdd_logic";
        /* unit == per-mille */
        pwm-dutycycle-unit = <1000>;
        /*
        * Inverted PWM logic, and the duty cycle range is limited
        * to 30%-70%.
        */
        pwm-dutycycle-range = <700 300>; /* */
    };

  - |
    // Voltage Table Example:
    regulator {
        compatible = "pwm-regulator";
        pwms = <&pwm1 0 8448 0>;
        regulator-min-microvolt = <1016000>;
        regulator-max-microvolt = <1114000>;
        regulator-name = "vdd_logic";
 
                /* Voltage Duty-Cycle */
        voltage-table = <1114000 0>,
            <1095000 10>,
            <1076000 20>,
            <1056000 30>,
            <1036000 40>,
            <1016000 50>;
    };
...