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

description: |
    Nordic nRF family RADIO peripheral.

    This controls the 2.4 GHz radio transceiver on nRF5x
    SoCs, which is available for use with Bluetooth, 802.15.4,
    and proprietary wireless protocols (not all of these
    protocols are available on all SoCs; consult the product
    specifications for details).

    This binding is not relevant to the nRF91x baseband radio.

    Front-End Module (FEM) support
    ------------------------------

    External front-end modules are range extenders used for boosting
    the link robustness and link budget of wireless SoCs. If your
    system includes an external FEM, set it up in the devicetree using
    this binding's 'fem' property, like this example:

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

      nrf_radio_fem: my-fem {
              compatible = "...";
              ....
      };

    Currently supported "compatible" properties for the FEM node are:

      - generic-fem-two-ctrl-pins
      - nordic,nrf21540-fem

    Refer to the bindings for these compatibles for more information
    about how to configure the FEM.

    Direction Finding Extension
    ---------------------------

    Some radios support the Bluetooth Direction Finding Extension (DFE).
    The 'dfe-supported' property will be set when it is available.
    In this case, the 'dfegpio[n]-gpios' properties configure GPIO pins
    to use to drive antenna switching.

    Each dfegpio[n]-gpios property which is set is used to initialize the
    corresponding PSEL.DFEGPIO[n] register.

    None of the dfegpio[n]-gpios properties are marked 'required',
    since which PSEL.DFEGPIO[n] registers will be used to drive
    antenna switches depends on the use case. Nevertheless, at least two
    antennas must be available to use DFE.

    That in turn means that at least one dfegpio[n]-gpios
    property must be provided if DFE is used, to give the radio the
    possibility to switch between two antennas. To use 12 antennas,
    4 GPIOs must be provided (since 4 GPIO pins support switching up to
    16 antennas).

    GPIOs are used in order, following the indices of the dfegpio[n]-gpios
    properties. The order is important because it affects the mapping of
    antenna switch patterns to GPIOs.

    Antenna switching patterns
    --------------------------

    An antenna switching pattern is a binary number where each bit is
    applied to a particular antenna GPIO pin. For example, the pattern
    0x3 means that antenna GPIOs at indexes 0 and 1 will be set, while
    the following are left unset.

    The number of GPIOs specified with dfegpio[n]-gpios properties
    affects the allowed pattern values. For example, when using four
    GPIOs, the pattern count cannot be greater than 16, and the
    maximum allowed value is 15.

    Antenna switch patterns are stored in DFE internal memory by
    writes to the SWITCHPATTERN register. DFE handling code applies
    antenna switch patterns during Constant Tone Extension (CTE)
    receive (Angle of Arrival mode) or transmission (Angle of
    Departure mode) procedure.

    DFE States
    ----------

    There are four states of DFE operation:

    * Idle: in this state, PDU transmission happens.
      DFE uses SWITCHPATTERN[0] to select the antenna in this state.
      (The 'dfe-pdu-antenna' property value described below is stored
      in SWITCHPATTERN[0] by the radio controller code.)

    * Guard: in this state, DFE prepares for reception or transmission
      of CTE. For this state, DFE selects the antenna by applying
      SWITCHPATTERN[1].

    * Reference: in this state, DFE starts to receive or transmit CTE.
      In AoA mode, DFE collects reference IQ samples. The selected
      antenna is the same as in the guard state.

    * Switch-sample: in this state, actual antenna switching happens.
      DFE selects antennas by applying SWITCHPATTERN[2..N]. If the
      number of switch-sample periods is greater than the number of
      stored switching patterns, DFE loops back to SWITCHPATTERN[2].


compatible: "nordic,nrf-radio"

include: [base.yaml]

properties:
    reg:
      required: true

    interrupts:
      required: true

    fem:
      type: phandle
      description: |
        Phandle linking the RADIO node to its external front-end module.

    coex:
      type: phandle
      description: |
        Phandle linking the RADIO node to the external radio coexistence arbitrator.

    dfe-supported:
      type: boolean
      description: |
        If set, the radio hardware supports the Direction Finding Extension.
        This property should be treated as read-only and should not be overridden;
        the correct value is provided for your target's SoC already.

    dfe-antenna-num:
      type: int
      description: |
        Number of available antennas for the Direction Finding Extension.

        This should only be set if dfe-supported is true. If you set this
        property, the value must be at least two.

    dfe-pdu-antenna:
      type: int
      description: |
        Antenna switch pattern to be used for transmission of PDU before start
        of transmission of Constant Tone Extension.

        This should only be set if dfe-supported is true.

        This pattern is stored in SWITCHPATTERN[0] before actual antenna
        switching patterns. This pattern will also be used to drive GPIOs
        when the radio releases control of GPIOs used to switch antennas.

    dfegpio0-gpios:
      type: phandle-array
      description: |
        Pin select for DFE pin 0. This should only be set if dfe-supported
        is true.

        For example, to use P0.2 on an nRF5x SoC:

          dfegpio1-gpios = <&gpio0 2 0>;

        To use P1.4:

          dfegpio1-gpios = <&gpio1 4 0>;

        Note the last 'flags' cell in the property is not used,
        and should be set to 0 as shown.

    dfegpio1-gpios:
      type: phandle-array
      description: |
        Pin select for DFE pin 1. See description for dfegpio0-gpios.

    dfegpio2-gpios:
      type: phandle-array
      description: |
        Pin select for DFE pin 2. See description for dfegpio0-gpios.

    dfegpio3-gpios:
      type: phandle-array
      description: |
        Pin select for DFE pin 3. See description for dfegpio0-gpios.

    dfegpio4-gpios:
      type: phandle-array
      description: |
        Pin select for DFE pin 4. See description for dfegpio0-gpios.

    dfegpio5-gpios:
      type: phandle-array
      description: |
        Pin select for DFE pin 5. See description for dfegpio0-gpios.

    dfegpio6-gpios:
      type: phandle-array
      description: |
        Pin select for DFE pin 6. See description for dfegpio0-gpios.

    dfegpio7-gpios:
      type: phandle-array
      description: |
        Pin select for DFE pin 7. See description for dfegpio0-gpios.

    ieee802154-supported:
      type: boolean
      description: |
        If set, indicates that the radio hardware supports the IEEE 802.15.4
        mode.

    ble-2mbps-supported:
      type: boolean
      description: |
        If set, indicates that the radio hardware supports the 2 Mbps BLE mode.

    ble-coded-phy-supported:
      type: boolean
      description: |
        If set, indicates that the radio hardware supports coded BLE PHY.

    tx-high-power-supported:
      type: boolean
      description: |
        If set, indicates that the radio hardware supports high TX power
        settings.
