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

title: SpacemiT K1 SoC Pin Controller

maintainers:
  - Yixun Lan <dlan@gentoo.org>

properties:
  compatible:
    enum:
      - spacemit,k1-pinctrl
      - spacemit,k3-pinctrl

  reg:
    items:
      - description: pinctrl io memory base

  clocks:
    items:
      - description: Functional Clock
      - description: Bus Clock

  clock-names:
    items:
      - const: func
      - const: bus

  resets:
    maxItems: 1

  spacemit,apbc:
    $ref: /schemas/types.yaml#/definitions/phandle
    description: Phandle to syscon that access the protected register

patternProperties:
  '-cfg$':
    type: object
    additionalProperties: false

    description:
      A pinctrl node should contain at least one subnode representing the
      pinctrl groups available on the machine.

    patternProperties:
      '-pins$':
        type: object
        additionalProperties: false

        description:
          Each subnode will list the pins it needs, and how they should
          be configured, with regard to muxer configuration, bias pull,
          drive strength, input schmitt trigger, slew rate, power source.

        allOf:
          - $ref: pincfg-node.yaml#
          - $ref: pinmux-node.yaml#

        properties:
          pinmux:
            description:
              The list of GPIOs and their mux settings that properties in the
              node apply to. This should be set using the K1_PADCONF macro to
              construct the value.

          bias-disable: true

          bias-pull-down: true

          bias-pull-up:
            description: |
              typical value for selecting bias pull up or strong pull up.
              0: normal bias pull up
              1: strong bias pull up
            enum: [ 0, 1 ]

          drive-strength:
            description:
              typical current (in mA) when the output at high level.
            anyOf:
              - enum: [ 11, 21, 32, 42 ]
                description: For K1 SoC, 1.8V voltage output

              - enum: [ 7, 10, 13, 16, 19, 23, 26, 29 ]
                description: For K1 SoC, 3.3V voltage output

              - enum: [ 2, 4, 6, 7, 9, 11, 13, 14, 21, 23, 25, 26, 28, 30, 31, 33 ]
                description: For K3 SoC, 1.8V voltage output

              - enum: [ 3, 5, 7, 9, 11, 13, 15, 17, 25, 27, 29, 31, 33, 35, 37, 38 ]
                description: For K3 SoC, 3.3V voltage output

          input-schmitt:
            description: |
              typical threshold for schmitt trigger.
              0: buffer mode
              1: trigger mode
              2, 3: trigger mode
            $ref: /schemas/types.yaml#/definitions/uint32
            enum: [ 0, 1, 2, 3 ]

          power-source:
            description: external power supplies at 1.8v or 3.3v.
            enum: [ 1800, 3300 ]

          slew-rate:
            description: |
              slew rate for output buffer.
              0: disable it
              1: enable it (via bundled value from drive strength)
              2: slow speed 0
              3: slow speed 1
              4: medium speed
              5: fast speed
            enum: [ 0, 1, 2, 3, 4, 5 ]

        required:
          - pinmux

required:
  - compatible
  - reg
  - clocks
  - clock-names

additionalProperties: false

examples:
  - |
    #define K1_PADCONF(pin, func) (((pin) << 16) | (func))

    soc {
        #address-cells = <2>;
        #size-cells = <2>;

        pinctrl@d401e000 {
            compatible = "spacemit,k1-pinctrl";
            reg = <0x0 0xd401e000 0x0 0x400>;
            clocks = <&syscon_apbc 42>,
                     <&syscon_apbc 94>;
            clock-names = "func", "bus";
            spacemit,apbc = <&syscon_apbc>;

            uart0_2_cfg: uart0-2-cfg {
                uart0-2-pins {
                    pinmux = <K1_PADCONF(68, 2)>,
                             <K1_PADCONF(69, 2)>;

                    bias-pull-up = <0>;
                    drive-strength = <32>;
                };
            };
        };
    };

...
