# Copyright (c) 2020 Linaro Limited
# Copyright (c) 2021 Microchip Technology Inc.
# SPDX-License-Identifier: Apache-2.0

description: |
    Microchip XEC Pin controller Node
    Based on pincfg-node.yaml binding.
    The MCHP XEC pin controller is a singleton node responsible for controlling
    pin function selection and pin properties. For example, you can use this
    node to select peripheral pin functions.

    The node has the 'pinctrl' node label set in your SoC's devicetree,
    so you can modify it like this:

      &pinctrl {
              /* your modifications go here */
      };

    All device pin configurations should be placed in child nodes of the
    'pinctrl' node, as in the spi0 example shown at the end:

    A group can also specify shared pin properties common to all the specified
    pins, such as the 'bias-pull-up' property in group 2. Here is a list of
    supported standard pin properties:

    - bias-disable: Disable pull-up/down (default behavior, not required).
    - bias-pull-down: Enable pull-down resistor.
    - bias-pull-up: Enable pull-up resistor.
    - drive-push-pull: Output driver is push-pull (default, not required).
    - drive-open-drain: Output driver is open-drain.
    - output-high: Set output state high when pin configured.
    - output-low: Set output state low when pin configured.

    Custom pin properties for drive strength and slew rate are available:
    - drive-strength
    - slew-rate

    Driver strength and slew rate hardware defaults vary by SoC and pin.

    An example for MEC172x family, include the chip level pinctrl
    DTSI file in the board level DTS:

      #include <microchip/mec172x/mec172xnsz-pinctrl.dtsi>

    We want to use the shared SPI port of the MEC172x QMSPI controller
    and want the chip select 0 to be open-drain.

    To change a pin's pinctrl default properties add a reference to the
    pin in the board's DTS file and set the properties.

      &spi0 {
        pinctrl-0 = < &shd_cs0_n_gpio055
                      &shd_clk_gpio056
                      &shd_io0_gpio223
                      &shd_io1_gpio224
                      &shd_io3_gpio016 >;
        pinctrl-names = "default";
      }

      &shd_cs0_n_gpio055 {
        drive-open-drain;
      };

compatible: "microchip,xec-pinctrl"

include:
    - name: base.yaml
    - name: pincfg-node.yaml
      child-binding:
        property-allowlist:
          - bias-disable
          - bias-pull-down
          - bias-pull-up
          - drive-push-pull
          - drive-open-drain
          - low-power-enable
          - output-high
          - output-low

properties:
    reg:
      required: true

child-binding:
    description: |
      This binding gives a base representation of the Microchip XEC pins
      configuration

    properties:
        pinmux:
            type: int
            required: true
            description: Pinmux selection

        slew-rate:
          required: false
          type: string
          default: "low-speed"
          enum:
          - "low-speed"
          - "high-speed"
          description: |
            Pin speed. The default value of slew-rate is the SoC power-on-reset
            value. Please refer to the data sheet as a small number of pins
            may have a different default and some pins do not implement
            slew rate adjustment.

        drive-strength:
          required: false
          type: string
          default: "1x"
          enum:
            - "1x"
            - "2x"
            - "4x"
            - "6x"
          description: |
            Pin output drive strength for PIO and PIO-24 pin types. Default
            is "1x" for most pins. PIO pins are 2, 4, 8, or 12 mA. PIO-24 pins
            are 4, 8, 16, or 24 mA. Please refer to the data sheet for each
            pin's PIO type and default drive strength.
