# Copyright (c) 2023 Ambiq Micro Inc. <www.ambiq.com>
# SPDX-License-Identifier: Apache-2.0

description: |
    Ambiq GPIO provides the GPIO pin mapping for GPIO child nodes.

    The Ambiq Apollo4x soc designs a single GPIO port with 128 pins.
    It uses 128 continuous 32-bit registers to configure the GPIO pins.
    This binding provides a pin mapping to solve the limitation of the maximum
    32 pins handling in GPIO driver API.

    The Ambiq Apollo4x soc should define one "ambiq,gpio" parent node in soc
    devicetree and some child nodes which are compatible with "ambiq,gpio-bank"
    under this parent node.

    Here is an example of how a "ambiq,gpio" node can be used with the combined
    gpio child nodes:

    gpio: gpio@40010000 {
      compatible = "ambiq,gpio";
      gpio-map-mask = <0xffffffe0 0xffffffc0>;
      gpio-map-pass-thru = <0x1f 0x3f>;
      gpio-map = <
        0x00 0x0 &gpio0_31 0x0 0x0
        0x20 0x0 &gpio32_63 0x0 0x0
        0x40 0x0 &gpio64_95 0x0 0x0
        0x60 0x0 &gpio96_127 0x0 0x0
      >;
      reg = <0x40010000>;
      #gpio-cells = <2>;
      #address-cells = <1>;
      #size-cells = <0>;
      ranges;

      gpio0_31: gpio0_31@0 {
        compatible = "ambiq,gpio-bank";
        gpio-controller;
        #gpio-cells = <2>;
        reg = <0>;
        interrupts = <56 0>;
        status = "disabled";
      };

      gpio32_63: gpio32_63@80 {
        compatible = "ambiq,gpio-bank";
        gpio-controller;
        #gpio-cells = <2>;
        reg = <0x80>;
        interrupts = <57 0>;
        status = "disabled";
      };

      gpio64_95: gpio64_95@100 {
        compatible = "ambiq,gpio-bank";
        gpio-controller;
        #gpio-cells = <2>;
        reg = <0x100>;
        interrupts = <58 0>;
        status = "disabled";
      };

      gpio96_127: gpio96_127@180 {
        compatible = "ambiq,gpio-bank";
        gpio-controller;
        #gpio-cells = <2>;
        reg = <0x180>;
        interrupts = <59 0>;
        status = "disabled";
      };
    };

    In the above example, the gpio@40010000 is a "ambiq,gpio" parent node which
    provides the base register address 0x40010000. It has four "ambiq,gpio-bank"
    child nodes. Each of them covers 32 pins (the default value of "ngpios"
    property is 32). The "reg" property of child nodes defines the register
    address offset. The register address of pin described in gpio-cells can be
    obtained by: base address + child address offset + (pin << 2). For example:
    the address of pin 20 of gpio32_63@80 node is (0x40010000 + 0x80 + (20 << 2))
    = 0x400100D0 and the real GPIO pin number of this pin in soc is (20 + 32)
    = 52.

compatible: "ambiq,gpio"

include: [gpio-nexus.yaml, base.yaml]
