# Copyright (c) 2019-2020 Gerson Fernando Budke <nandojve@gmail.com>
# SPDX-License-Identifier: Apache-2.0

description: ATMEL AT86RF2xx 802.15.4 wireless transceiver

compatible: "atmel,rf2xx"

include: spi-device.yaml

properties:
    irq-gpios:
      type: phandle-array
      required: true

    reset-gpios:
      type: phandle-array
      required: true

    slptr-gpios:
      type: phandle-array
      required: true
      description: |
        Multi-functional pin that controls sleep, deep sleep, transmit
        start and receive states

    dig2-gpios:
      type: phandle-array
      description: RX and TX Frame Time Stamping(TX_ARET)

    clkm-gpios:
      type: phandle-array
      description: Master clock signal output

    local-mac-address:
      type: uint8-array
      description: |
        Specifies the MAC address that was assigned to the network
        device

    channel-page:
      type: int
      enum:
        - 0
        - 2
        - 5
      description: |
        Selects Channel Page accordingly with IEEE 802.15.4 standard. The Page 0
        is used in both Sub-Giga and 2.4GHz. It allows select channels 0-10 in
        Sub-Giga band (0: BPSK-20, 1-10: BPSK-40) and 11-26 in 2.4GHz band
        (11-26: O-QPSK-250). Channel 2 is for Sub-Giga and selects
        (0: OQPSK-SIN-RC-100, 1-10: OQPSK-SIN-250). Channel 5 is for Sub-Giga
        (JAPAN) and selects (0-3: OQPSK-RC-250) .
          0: Page 0 - BPSK-20 [0], BPSK-40 [1-10], O-QPSK-250 [11-26].
          2: Page 2 - OQPSK-SIN-RC-100 [0], OQPSK-SIN-250 [1-10].
          5: Page 5 - OQPSK-RC-250 [0-3].

    tx-pwr-table:
      type: uint8-array
      default: [ 0x00 ]
      description: |
        This is the Transmission Power Mapping Table array used to comply with
        local regulations. By default this value set an output power above 0dBm
        for all transceivers. This property must be used with tx-pwr-min and
        tx-pwr-max for normal operations. The number of elements is defined by
        the size of the tx-pwr-table array property. The max entry value for
        2.4GHz is 0x0f and 0xff for Sub-Giga. See PHY_TX_PWR at datasheet for
        more details.

        The output power is determined by following formula:

          linear_step = (tx-pwr-max - tx-pwr-min)
                      / (sizeof(tx-pwr-table) - 1.0);
          table_index = abs((value_in_dbm - tx-pwr-max) / linear_step);
          output_power = tx-pwr-table[table_index];

        Using AT86RF233 as example without external PA. By the datasheet the
        tx-pwr-min = -17 dBm and tx-pwr-max = +4 dBm. Using 48 elements in the
        tx-pwr-table array. The table array is filled from higher to lower power.

          tx-pwr-min = [01 11];	/* -17.0 dBm */
          tx-pwr-max = [00 04];	/*   4.0 dBm */
          tx-pwr-table = [00 01 03 04 05 05 06 06
                          07 07 07 08 08 09 09 0a
                          0a 0a 0b 0b 0b 0b 0c 0c
                          0c 0c 0d 0d 0d 0d 0d 0d
                          0d 0d 0e 0e 0e 0e 0e 0e
                          0e 0e 0e 0e 0e 0e 0f 0f];

        The values in the table are filled based on table 9-9 [ TX Output Power ]
        using the linear step in dBm as:

          linear_step = (4 - (-17)) / (48 - 1) => ~0.45 dBm

        Assuming that user wants set 0 dBm as output power:

          table_index = abs((0 - 4) / 0.45) => 8.95 ( round to 9 )
          output_power = tx-pwr-table[9] => 0x07 ( 0 dBm as table 9-9 )

        Note when tx-pwr-min is [ 0x00, 0x00 ] and tx-pwr-max is [ 0x00, 0x00 ]
        the linear step is zero. This means that table_index will be always the
        first element of the tx-pwr-table array, which is 0x00 by default. This
        is defined as general case when user not define any tx-pwr-* entries. It
        sets the transceiver to use always a value above 0 dBm as output power.

    tx-pwr-min:
      type: uint8-array
      default: [ 0x00, 0x00 ]
      description: |
        This value represent minimum normalized value in dBm for the transceiver
        output power. This property must be used when tx-pwr-table is defined.
        The value is represented by two entries where first element represents
        the signal indication [ 0x00-positive, 0x01-negative] and second element
        is the minimal value in dBm for the transceiver output power. By default,
        the combination of tx-pwr-min as [ 0x00, 0x00 ] and tx-pwr-max as [ 0x00,
        0x00 ] will create a fixed transmission power.

    tx-pwr-max:
      type: uint8-array
      default: [ 0x00, 0x00 ]
      description: |
        This value represent maximum normalized value in dBm for the transceiver
        output power. This property must be used when tx-pwr-table is defined.
        The value is represented by two entries where first element represents
        the signal indication [ 0x00-positive ] and second element is the maximum
        value in dBm for the transceiver output power. By default, the
        combination of tx-pwr-max as [ 0x00, 0x00 ] and tx-pwr-min as [ 0x00,
        0x00 ] will create a fixed transmission power.
