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

    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

    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
      required: false
      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
      required: false
      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
      required: false
      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
      required: false
      description: |
        Pin select for DFE pin 1. See description for dfegpio0-gpios.

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

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

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

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

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

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