# Copyright (c) 2023 Antmicro <www.antmicro.com>
# SPDX-License-Identifier: Apache-2.0

description: |
    The Ambiq Apollo4 pin controller is a node responsible for controlling
    pin function selection and pin properties, such as routing a UART0 TX
    to pin 60 and enabling the pullup resistor on that pin.

    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 shown in this example:

      /* You can put this in places like a board-pinctrl.dtsi file in
       * your board directory, or a devicetree overlay in your application.
       */

      /* include pre-defined combinations for the SoC variant used by the board */
      #include <dt-bindings/pinctrl/ambiq-apollo4-pinctrl.h>

      &pinctrl {
        uart0_default: uart0_default {
          group1 {
            pinmux = <UART0TX_P60>;
          };
          group2 {
            pinmux = <UART0RX_P47>;
            input-enable;
          };
        };
      };

    The 'uart0_default' child node encodes the pin configurations for a
    particular state of a device; in this case, the default (that is, active)
    state.

    As shown, pin configurations are organized in groups within each child node.
    Each group can specify a list of pin function selections in the 'pinmux'
    property.

    A group can also specify shared pin properties common to all the specified
    pins, such as the 'input-enable' property in group 2.

compatible: "ambiq,apollo4-pinctrl"

include: base.yaml

child-binding:
  description: |
    Definitions for a pinctrl state.
  child-binding:

    include:
      - name: pincfg-node.yaml
        property-allowlist:
          - input-enable
          - drive-push-pull
          - drive-open-drain
          - bias-high-impedance
          - bias-pull-up
          - bias-pull-down

    properties:
      pinmux:
        required: true
        type: array
        description: |
          An array of pins sharing the same group properties. Each
          element of the array is an integer constructed from the
          pin number and the alternative function of the pin.
      drive-strength:
        type: string
        enum:
          - "0.1"
          - "0.5"
          - "0.75"
          - "1.0"
        default: "0.1"
        description: |
          The drive strength of a pin, relative to full-driver strength.
          The default value is 0.1, which is the reset value.
      slew-rate:
        type: string
        enum:
          - "slow"
          - "fast"
        default: "slow"
        description: |
          Select slew rate for a pin. The default is slow, which is the reset value.
      ambiq,pull-up-ohms:
        type: int
        enum:
          - 1500
          - 6000
          - 12000
          - 24000
          - 50000
          - 100000
        default: 1500
        description: |
          The pullup resistor value. The default value is 1500 ohms.
      ambiq,iom-nce-module:
        type: int
        default: 0
        description: |
          IOM nCE module select. The default value is reset value.
