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


description: |
    This is a representation of the nRF21540 Radio Front-End module.

    See the "nordic,nrf21540-fem-spi" binding to configure the SPI
    interface. The SPI interface should be configured as a child node
    of the SPI bus you have connected to the FEM. Then you "connect"
    the FEM and SPI configurations using the spi-if property.

    Here is an example nRF21540 configuration with a SPI interface
    selected, using the SPIM0 peripheral found on several nRF5 SoCs:

      &spi0 {
              compatible = "nordic,nrf-spim";
              status = "okay";
              cs-gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
              /* ... MISO/MOSI/SCK pin configuration goes here ... */

              my_spi_if: nrf21540-spi@0 {
                      compatible = "nordic,nrf21540-fem-spi";
                      reg = <0>;
                      spi-max-frequency = <8000000>;
              };
      };

      nrf_radio_fem: nrf21540 {
              compatible = "nordic,nrf21540-fem";
              tx-en-gpios = <&gpio0 2 GPIO_ACTIVE_HIGH>;
              rx-en-gpios = <&gpio0 5 GPIO_ACTIVE_HIGH>;
              spi-if = <&my_spi_if>;
              pdn-gpios = <...>;
              ant-sel-gpios = <...>;
              mode-gpios = <...>;
              /* ... other nRF21540 properties go here ... */
      };

      &radio {
              fem = <&nrf_radio_fem>;
      };

    In the above example, the nRF21540 is configured for use with:

      - TX_EN on P0.2 (from 'tx-en-gpios')
      - RX_EN on P0.5 (from 'rx-en-gpios')
      - SPI communication via SPIM0 (the bus, or parent node, of
        the 'my_spi_if' node
      - CSN on P1.3 (from index 0 in the bus node's 'cs-gpios' property)

    You must perform any additional required SPI pin configuration
    (nRF21540 MISO, MOSI, and SCK pins) within the SPI bus node
    ('spi0' in the above example). See your SPI node's binding for
    details on these pin mux properties. You can use any SPI node
    available in your SoC's devicetree.

    Configure any other nRF21540 pins as needed using 'pdn-gpios',
    'ant-sel-gpios', and 'mode-gpios' properties. If unsure about the
    format, use 'tx-en-gpios' as an example.

    Finally, the nRF5 SoC's radio peripheral is set up for use with
    the nRF21540 via the 'fem' property in the 'radio' node.

compatible: "nordic,nrf21540-fem"

include: base.yaml

properties:
    tx-en-gpios:
        type: phandle-array
        required: false
        description: |
            GPIO of the SOC controlling TX_EN pin of the nRF21540
    rx-en-gpios:
        type: phandle-array
        required: false
        description: |
            GPIO of the SOC controlling RX_EN pin of the nRF21540
    pdn-gpios:
        type: phandle-array
        required: false
        description: |
            GPIO of the SOC controlling PDN pin of the nRF21540
    ant-sel-gpios:
        type: phandle-array
        required: false
        description: |
            GPIO of the SOC controlling ANT-SEL pin of the nRF21540
    mode-gpios:
        type: phandle-array
        required: false
        description: |
            GPIO of the SOC controlling MODE pin of the nRF21540
    spi-if:
        type: phandle
        required: false
        description: |
            Reference to the nordic,nrf21540-fem-spi SPI bus interface.

            This must be present to support SPI control of the FEM.
    tx-en-settle-time-us:
        type: int
        default: 11
        description: |
            Settling time in microseconds from state PG to TX.

            Default value is based on Table 6 of the nRF21540 Product
            Specification (v1.0), and can be overridden for tuned
            configurations.
    rx-en-settle-time-us:
        type: int
        default: 11
        description: |
            Settling time in microseconds from state PG to RX.

            Default value is based on Table 6 of the nRF21540 Product
            Specification (v1.0), and can be overridden for tuned
            configurations.
    pdn-settle-time-us:
        type: int
        default: 18
        description: |
            Settling time in microseconds from state PD to PG.

            Default value is based on Table 6 of the nRF21540 Product
            Specification (v1.0), and can be overridden for tuned
            configurations.
    trx-hold-time-us:
        type: int
        default: 3
        description: |
            Power-off time in microseconds when changing from RX or TX to PG.

            Default value is based on Table 6 of the nRF21540 Product
            Specification (v1.0), and can be overridden for tuned
            configurations.
