On Sun, Jul 31, 2022 at 11:47:57PM -0500, Samuel Holland wrote: > The Allwinner D1 SoC contains two pairs of in-package LDOs. One pair is > for general purpose use. LDOA generally powers the board's 1.8 V rail. > LDOB generally powers the in-package DRAM, where applicable. > > The other pair of LDOs powers the analog power domains inside the SoC, > including the audio codec, thermal sensor, and ADCs. These LDOs require > a 0.9 V bandgap voltage reference. The calibration value for the voltage > reference is stored in an eFuse, accessed via an NVMEM cell. > > Neither LDO control register is in its own MMIO range; instead, each > regulator device relies on a syscon exported by some "host" device node. > Getting the register via a syscon avoids a dependency on the subsystem/ > driver for that host device (e.g. a functioning thermal sensor should > not depend on having the audio codec driver loaded). > > Signed-off-by: Samuel Holland <samuel@xxxxxxxxxxxx> > --- > > .../allwinner,sun20i-d1-analog-ldos.yaml | 77 +++++++++++++++++++ > .../allwinner,sun20i-d1-system-ldos.yaml | 55 +++++++++++++ > 2 files changed, 132 insertions(+) > create mode 100644 Documentation/devicetree/bindings/regulator/allwinner,sun20i-d1-analog-ldos.yaml > create mode 100644 Documentation/devicetree/bindings/regulator/allwinner,sun20i-d1-system-ldos.yaml > > diff --git a/Documentation/devicetree/bindings/regulator/allwinner,sun20i-d1-analog-ldos.yaml b/Documentation/devicetree/bindings/regulator/allwinner,sun20i-d1-analog-ldos.yaml > new file mode 100644 > index 000000000000..df648c56123d > --- /dev/null > +++ b/Documentation/devicetree/bindings/regulator/allwinner,sun20i-d1-analog-ldos.yaml > @@ -0,0 +1,77 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/regulator/allwinner,sun20i-d1-analog-ldos.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Allwinner D1 Analog LDOs > + > +description: > + Allwinner D1 contains a set of LDOs which are designed to supply analog power > + inside and outside the SoC. They are controlled by a register within the audio > + codec MMIO space, but which is not part of the audio codec clock/reset domain, > + and so is exposed as a syscon. > + > +maintainers: > + - Samuel Holland <samuel@xxxxxxxxxxxx> > + > +properties: > + compatible: > + enum: > + - allwinner,sun20i-d1-analog-ldos > + > + nvmem-cells: > + items: > + - description: NVMEM cell for the calibrated bandgap reference trim value > + > + nvmem-cell-names: > + items: > + - const: bg_trim > + > + syscon: 'syscon' is not a generic property. Name it based on the block you are linking to or what the control is. Or better yet, if this is the only control interface, make this a child node of the referenced node instead. > + $ref: /schemas/types.yaml#/definitions/phandle > + description: phandle of the device containing the power register > + > +patternProperties: > + "^(aldo|hpldo)$": > + type: object > + $ref: regulator.yaml# unevaluatedProperties: false > + > +required: > + - compatible > + - nvmem-cells > + - nvmem-cell-names > + - syscon > + > +unevaluatedProperties: false > + > +examples: > + - | > + sid: efuse { > + #address-cells = <1>; > + #size-cells = <1>; > + > + bg_trim: bg-trim@28 { > + reg = <0x28 0x4>; > + bits = <16, 8>; > + }; > + }; > + > + ldos-analog { > + compatible = "allwinner,sun20i-d1-analog-ldos"; > + nvmem-cells = <&bg_trim>; > + nvmem-cell-names = "bg_trim"; > + syscon = <&codec>; > + > + reg_aldo: aldo { > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + }; > + > + reg_hpldo: hpldo { > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + }; > + }; > + > +... > diff --git a/Documentation/devicetree/bindings/regulator/allwinner,sun20i-d1-system-ldos.yaml b/Documentation/devicetree/bindings/regulator/allwinner,sun20i-d1-system-ldos.yaml > new file mode 100644 > index 000000000000..13b2e8c84f1d > --- /dev/null > +++ b/Documentation/devicetree/bindings/regulator/allwinner,sun20i-d1-system-ldos.yaml > @@ -0,0 +1,55 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/regulator/allwinner,sun20i-d1-system-ldos.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Allwinner D1 System LDOs > + > +description: > + Allwinner D1 contains a pair of general-purpose LDOs which are designed to > + supply power inside and outside the SoC. They are controlled by a register > + within the system controller MMIO space. > + > +maintainers: > + - Samuel Holland <samuel@xxxxxxxxxxxx> > + > +properties: > + compatible: > + enum: > + - allwinner,sun20i-d1-system-ldos > + > + syscon: > + $ref: /schemas/types.yaml#/definitions/phandle > + description: phandle of the device containing the LDO control register > + > +patternProperties: > + "^(ldoa|ldob)$": > + type: object > + $ref: regulator.yaml# > + > +required: > + - compatible > + - syscon > + > +unevaluatedProperties: false > + > +examples: > + - | > + ldos-system { > + compatible = "allwinner,sun20i-d1-system-ldos"; > + syscon = <&syscon>; > + > + reg_ldoa: ldoa { > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + }; > + > + reg_ldob: ldob { > + regulator-name = "vcc-dram"; > + regulator-min-microvolt = <1500000>; > + regulator-max-microvolt = <1500000>; > + }; > + }; > + > +... > -- > 2.35.1 > >