# Copyright (c) 2020 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

description: |
    This is an abstract device responsible for forwarding pins between cores.

    In nRF53 family of SoCs, GPIO pins must be explicitly forwarded by
    the application core to the network core if the latter should drive them.
    The purpose of this abstract device is to represent all GPIO pins that the
    nRF53 application core should forward to the nRF53 network core.

    Once the control over selected GPIO pins is forwarded to it, the network
    core is responsible for configuring the pins and driving them as needed.

    Here is an example of how a nrf-gpio-forwarder can be used with a nRF5340
    combined with a nRF21540 Front-End module. Consider the following node
    present in DTS file targeted for the nRF5340 network core, which defines
    the details of the nRF21540 Front-End module's interface:

    nrf_radio_fem: nrf21540 {
      compatible = "nordic,nrf21540-fem";
      tx-en-gpios = <&gpio0 30 GPIO_ACTIVE_HIGH>;
      rx-en-gpios = <&gpio1 11 GPIO_ACTIVE_HIGH>;
      pdn-gpios   = <&gpio1 10 GPIO_ACTIVE_HIGH>;
      mode-gpios  = <&gpio1 12 GPIO_ACTIVE_HIGH>;
    };

    Since the nRF21540 Front-End module should be controlled by the nRF5340
    network core, all the GPIO pins used to control it must be forwarded by
    the nRF5340 application core to the network core. Consider the following
    nrf-gpio-forwarder node defined in DTS file targeted for the nRF5340
    application core:

    gpio_fwd: nrf-gpio-forwarder {
      compatible = "nordic,nrf-gpio-forwarder";
      nrf21540-gpio-if {
        gpios = <&gpio0 30 0>, <&gpio1 11 0>, <&gpio1 10 0>, <&gpio1 12 0>;
      };
    };

    In the above example, the nrf-gpio-forwarder node is configured to forward
    control over the following GPIO pins to the network core:

      - P0.30 (matching `tx-en-gpios`)
      - P1.11 (matching `rx-en-gpios`)
      - P1.10 (matching `pdn-gpios`)
      - P1.12 (matching `mode-gpios`)

    Please note that the GPIO flags provided for child nodes of the forwarder
    are ignored. In order to configure the GPIOs passed to the forwarder, their
    GPIO flags must be set in the matching node that these GPIOs are forwarded
    to. In the above example, the GPIO flags must be set in the nrf21540 node.
    They are set to 0 in the nrf-gpio-forwarder node as they are ignored anyway.

    Child nodes for the forwarder can be defined independently by multiple DTS
    files. They are merged into a single node with multiple child nodes when
    processing devicetree for an application build. However, in order for that
    to happen, names of the child nodes must be unique in the scope of a single
    nrf-gpio-forwarder instance.

compatible: "nordic,nrf-gpio-forwarder"

include: "base.yaml"

child-binding:
  description: Arrays of GPIOs to be forwarded.

  properties:
    gpios:
      type: phandle-array
      required: true
      description: |
          Array of GPIOs to be forwarded. Note that GPIO flags provided for
          elements of this array are ignored. In order to configure the GPIOs
          from this array, their GPIO flags must be set in the matching
          node that these GPIOs are forwarded to.
