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