1# SPDX-License-Identifier: GPL-2.0
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/regulator/pwm-regulator.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Generic PWM Regulator
8
9maintainers:
10  - Brian Norris <briannorris@chromium.org>
11  - Lee Jones <lee@kernel.org>
12  - Alexandre Courbot <acourbot@nvidia.com>
13
14description: |
15  Currently supports 2 modes of operation:
16
17  Voltage Table:
18    When in this mode, a voltage table (See below) of predefined voltage <=>
19    duty-cycle values must be provided via DT. Limitations are that the
20    regulator can only operate at the voltages supplied in the table.
21    Intermediary duty-cycle values which would normally allow finer grained
22    voltage selection are ignored and rendered useless.  Although more control
23    is given to the user if the assumptions made in continuous-voltage mode do
24    not reign true.
25
26  Continuous Voltage:
27    This mode uses the regulator's maximum and minimum supplied voltages
28    specified in the regulator-{min,max}-microvolt properties to calculate
29    appropriate duty-cycle values.  This allows for a much more fine grained
30    solution when compared with voltage-table mode above.  This solution does
31    make an assumption that a %50 duty-cycle value will cause the regulator
32    voltage to run at half way between the supplied max_uV and min_uV values.
33
34  If voltage-table is provided, then the device will be used in Voltage Table
35  Mode.  If no voltage-table is provided, then the device will be used in
36  Continuous Voltage Mode.
37
38allOf:
39  - $ref: regulator.yaml#
40
41properties:
42  compatible:
43    const: pwm-regulator
44
45  pwms:
46    maxItems: 1
47
48  voltage-table:
49    description: Voltage and Duty-Cycle table.
50    $ref: /schemas/types.yaml#/definitions/uint32-matrix
51    items:
52      items:
53        - description: voltage in microvolts (uV)
54        - description: duty-cycle in percent (%)
55
56  enable-gpios:
57    description: Regulator enable GPIO
58    maxItems: 1
59
60   # Optional properties for Continuous mode:
61  pwm-dutycycle-unit:
62    description:
63      Integer value encoding the duty cycle unit. If not
64        defined, <100> is assumed, meaning that
65        pwm-dutycycle-range contains values expressed in
66        percent.
67    default: 100
68
69  pwm-dutycycle-range:
70    description:
71      Should contain 2 entries. The first entry is encoding
72        the dutycycle for regulator-min-microvolt and the
73        second one the dutycycle for regulator-max-microvolt.
74        Duty cycle values are expressed in pwm-dutycycle-unit.
75        If not defined, <0 100> is assumed.
76    $ref: /schemas/types.yaml#/definitions/uint32-array
77    items:
78      - description: the dutycycle for regulator-min-microvolt
79      - description: the dutycycle for regulator-max-microvolt
80    default: [ 0 100 ]
81
82required:
83  - compatible
84  - pwms
85
86unevaluatedProperties: false
87
88examples:
89  - |
90    #include <dt-bindings/gpio/gpio.h>
91
92    // Continuous Voltage With Enable GPIO Example:
93    regulator {
94        compatible = "pwm-regulator";
95        pwms = <&pwm1 0 8448 0>;
96        enable-gpios = <&gpio0 23 GPIO_ACTIVE_HIGH>;
97        regulator-min-microvolt = <1016000>;
98        regulator-max-microvolt = <1114000>;
99        regulator-name = "vdd_logic";
100        /* unit == per-mille */
101        pwm-dutycycle-unit = <1000>;
102        /*
103        * Inverted PWM logic, and the duty cycle range is limited
104        * to 30%-70%.
105        */
106        pwm-dutycycle-range = <700 300>; /* */
107    };
108
109  - |
110    // Voltage Table Example:
111    regulator {
112        compatible = "pwm-regulator";
113        pwms = <&pwm1 0 8448 0>;
114        regulator-min-microvolt = <1016000>;
115        regulator-max-microvolt = <1114000>;
116        regulator-name = "vdd_logic";
117
118                /* Voltage Duty-Cycle */
119        voltage-table = <1114000 0>,
120            <1095000 10>,
121            <1076000 20>,
122            <1056000 30>,
123            <1036000 40>,
124            <1016000 50>;
125    };
126...
127