# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/cirrus,lochnagar.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Cirrus Logic Lochnagar Audio Development Board

maintainers:
  - patches@opensource.cirrus.com

description: |
  Lochnagar is an evaluation and development board for Cirrus Logic
  Smart CODEC and Amp devices. It allows the connection of most Cirrus
  Logic devices on mini-cards, as well as allowing connection of
  various application processor systems to provide a full evaluation
  platform.  Audio system topology, clocking and power can all be
  controlled through the Lochnagar, allowing the device under test
  to be used in a variety of possible use cases.

  Also see these documents for generic binding information:
    [1] GPIO : ../gpio/gpio.txt

  And these for relevant defines:
    [2] include/dt-bindings/pinctrl/lochnagar.h
    [3] include/dt-bindings/clock/lochnagar.h

  And these documents for the required sub-node binding details:
    [4] Clock: ../clock/cirrus,lochnagar.yaml
    [5] Pinctrl: ../pinctrl/cirrus,lochnagar.yaml
    [6] Sound: ../sound/cirrus,lochnagar.yaml
    [7] Hardware Monitor: ../hwmon/cirrus,lochnagar.yaml

allOf:
  - if:
      properties:
        compatible:
          enum:
            - cirrus,lochnagar2
    then:
      properties:
        lochnagar-hwmon:
          type: object
          $ref: /schemas/hwmon/cirrus,lochnagar.yaml#

        lochnagar-sc:
          type: object
          $ref: /schemas/sound/cirrus,lochnagar.yaml#

properties:
  compatible:
    enum:
      - cirrus,lochnagar1
      - cirrus,lochnagar2

  reg:
    const: 0x22

  reset-gpios:
    maxItems: 1

  present-gpios:
    description: |
      Host present line, indicating the presence of a
      host system, see [1]. This can be omitted if the present line is
      tied in hardware.
    maxItems: 1

  lochnagar-clk:
    type: object
    $ref: /schemas/clock/cirrus,lochnagar.yaml#

  lochnagar-pmic32k:
    type: object
    $ref: /schemas/clock/fixed-clock.yaml#
    properties:
      clock-frequency:
        const: 32768

  lochnagar-clk12m:
    type: object
    $ref: /schemas/clock/fixed-clock.yaml#
    properties:
      clock-frequency:
        const: 12288000

  lochnagar-clk11m:
    type: object
    $ref: /schemas/clock/fixed-clock.yaml#
    properties:
      clock-frequency:
        const: 11298600

  lochnagar-clk24m:
    type: object
    $ref: /schemas/clock/fixed-clock.yaml#
    properties:
      clock-frequency:
        const: 24576000

  lochnagar-clk22m:
    type: object
    $ref: /schemas/clock/fixed-clock.yaml#
    properties:
      clock-frequency:
        const: 22579200

  lochnagar-clk8m:
    type: object
    $ref: /schemas/clock/fixed-clock.yaml#
    properties:
      clock-frequency:
        const: 8192000

  lochnagar-usb24m:
    type: object
    $ref: /schemas/clock/fixed-clock.yaml#
    properties:
      clock-frequency:
        const: 24576000

  lochnagar-usb12m:
    type: object
    $ref: /schemas/clock/fixed-clock.yaml#
    properties:
      clock-frequency:
        const: 12288000

  pinctrl:
    type: object
    $ref: /schemas/pinctrl/cirrus,lochnagar.yaml#

  lochnagar-hwmon:
    type: object
    $ref: /schemas/hwmon/cirrus,lochnagar.yaml#

  lochnagar-sc:
    type: object
    $ref: /schemas/sound/cirrus,lochnagar.yaml#

  VDDCORE:
    description:
      Initialisation data for the VDDCORE regulator, which supplies the
      CODECs digital core if not being provided by an internal regulator.
    type: object
    $ref: /schemas/regulator/regulator.yaml#
    unevaluatedProperties: false
    properties:
      compatible:
        enum:
          - cirrus,lochnagar2-vddcore

      SYSVDD-supply:
        description:
          Primary power supply for the Lochnagar.
    required:
      - compatible

  MICVDD:
    description:
      Initialisation data for the MICVDD regulator, which supplies the
      CODECs MICVDD.
    type: object
    $ref: /schemas/regulator/regulator.yaml#
    unevaluatedProperties: false
    properties:
      compatible:
        enum:
          - cirrus,lochnagar2-micvdd

      SYSVDD-supply:
        description:
          Primary power supply for the Lochnagar.
    required:
      - compatible

  MIC1VDD:
    description:
      Initialisation data for the MIC1VDD supplies.
    type: object
    $ref: /schemas/regulator/regulator.yaml#
    unevaluatedProperties: false
    properties:
      compatible:
        enum:
          - cirrus,lochnagar2-mic1vdd

      cirrus,micbias-input:
        description:
          A property selecting which of the CODEC minicard micbias outputs
          should be used.
        $ref: /schemas/types.yaml#/definitions/uint32
        minimum: 1
        maximum: 4

      MICBIAS1-supply:
        description:
          Regulator supplies for the MIC1VDD outputs, supplying the digital
          microphones, normally supplied from the attached CODEC.
    required:
      - compatible

  MIC2VDD:
    description:
      Initialisation data for the MIC2VDD supplies.
    type: object
    $ref: /schemas/regulator/regulator.yaml#
    unevaluatedProperties: false
    properties:
      compatible:
        enum:
          - cirrus,lochnagar2-mic2vdd

      cirrus,micbias-input:
        description:
          A property selecting which of the CODEC minicard micbias outputs
          should be used.
        $ref: /schemas/types.yaml#/definitions/uint32
        minimum: 1
        maximum: 4

      MICBIAS2-supply:
        description:
          Regulator supplies for the MIC2VDD outputs, supplying the digital
          microphones, normally supplied from the attached CODEC.
    required:
      - compatible

  VDD1V8:
    description:
      Recommended fixed regulator for the VDD1V8 regulator, which supplies
      the CODECs analog and 1.8V digital supplies.
    type: object
    $ref: /schemas/regulator/regulator.yaml#
    unevaluatedProperties: false
    properties:
      compatible:
        enum:
          - regulator-fixed

      regulator-min-microvolt:
        const: 1800000

      regulator-max-microvolt:
        const: 1800000

      vin-supply:
        description:
          Should be set to same supply as SYSVDD
    required:
      - compatible
      - regulator-min-microvolt
      - regulator-max-microvolt
      - regulator-boot-on
      - regulator-always-on
      - vin-supply

required:
  - compatible
  - reg
  - reset-gpios
  - lochnagar-clk
  - pinctrl

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/lochnagar.h>
    #include <dt-bindings/pinctrl/lochnagar.h>
    i2c@e0004000 {
        #address-cells = <1>;
        #size-cells = <0>;
        reg = <0xe0004000 0x1000>;

        lochnagar: lochnagar@22 {
            compatible = "cirrus,lochnagar2";
            reg = <0x22>;

            reset-gpios = <&gpio0 55 0>;
            present-gpios = <&gpio0 60 0>;

            lochnagarclk: lochnagar-clk {
                compatible = "cirrus,lochnagar2-clk";

                #clock-cells = <1>;
                clocks = <&clkaudio>, <&clkpmic>;
                clock-names = "ln-gf-mclk2", "ln-pmic-32k";

                assigned-clocks = <&lochnagarclk LOCHNAGAR_CDC_MCLK1>,
                                  <&lochnagarclk LOCHNAGAR_CDC_MCLK2>;
                assigned-clock-parents = <&clkaudio>, <&clkpmic>;
            };

            clkpmic: lochnagar-pmic32k {
                compatible = "fixed-clock";
                #clock-cells = <0>;
                clock-frequency = <32768>;
            };

            pinctrl {
                compatible = "cirrus,lochnagar-pinctrl";

                gpio-controller;
                #gpio-cells = <2>;
                gpio-ranges = <&lochnagar 0 0 LOCHNAGAR2_PIN_NUM_GPIOS>;

                pinctrl-names = "default";
                pinctrl-0 = <&pinsettings>;

                pinsettings: pin-settings {
                    ap2aif-pins {
                        input-enable;
                        groups = "gf-aif1";
                        function = "codec-aif3";
                    };
                    codec2aif-pins {
                        output-enable;
                        groups = "codec-aif3";
                        function = "gf-aif1";
                    };
                };
            };

            lochnagar-sc {
                compatible = "cirrus,lochnagar2-soundcard";

                #sound-dai-cells = <1>;

                clocks = <&lochnagarclk LOCHNAGAR_SOUNDCARD_MCLK>;
                clock-names = "mclk";
            };

            lochnagar-hwmon {
                compatible = "cirrus,lochnagar2-hwmon";
            };

            MIC1VDD {
                compatible = "cirrus,lochnagar2-mic1vdd";

                cirrus,micbias-input = <3>;
            };

            MICVDD {
                compatible = "cirrus,lochnagar2-micvdd";

                SYSVDD-supply = <&wallvdd>;

                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
            };

            VDD1V8 {
                compatible = "regulator-fixed";

                regulator-name = "VDD1V8";
                regulator-min-microvolt = <1800000>;
                regulator-max-microvolt = <1800000>;
                regulator-boot-on;
                regulator-always-on;

                vin-supply = <&wallvdd>;
            };
        };
    };