| # 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] |