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

description: |
  Nordic nRF family TWIM (TWI master with EasyDMA).

  This binding can be used for nodes which can represent TWIM
  peripherals. A single SoC peripheral ID is often associated with
  multiple I2C peripherals, like a TWIM and a TWIS. You can choose
  TWIM by setting the node's "compatible" to "nordic,nrf-twim"
  and "status" to "okay", e.g. using an overlay file like this one:

      /* This is for TWIM0 -- change to "i2c1" for TWIM1, etc. */
      &i2c0 {
              compatible = "nordic,nrf-twim";
              status = "okay";
              /* other property settings can go here */
      };

  This works on any supported SoC, for all TWIM instances.

  Note: on nRF51 SoCs, use the "nordic,nrf-twi" binding instead.

compatible: "nordic,nrf-twim"

include: nordic,nrf-twi-common.yaml

properties:
    zephyr,concat-buf-size:
        type: int
        required: false
        default: 16
        description: |
            Size of a concatenation buffer that the driver is to use for merging
            multiple same direction I2C messages that have no RESTART or STOP
            flag between them (see e.g. the i2c_burst_write() function) into one
            transfer on the bus.

            This property must be provided when interacting with devices like
            the SSD1306 display that cannot tolerate a repeated start and
            address appearing on the bus between message fragments. For many
            devices a concatenation buffer is not necessary.

    zephyr,flash-buf-max-size:
        type: int
        required: false
        default: 16
        description: |
            TWIM peripherals cannot perform write transactions from buffers
            located in flash. If such buffers are expected to be used with
            a given instance of the TWIM peripheral, this property must be
            set to the maximum possible size of those buffers, so that the
            driver can reserve enough space in RAM to copy there the contents
            of particular buffers before requesting the actual transfers.

            If this property is not set to a value adequate for a given
            application, write transactions may fail for buffers that are
            located in flash, what in turn may cause certain components,
            like the DPS310 sensor driver, to not work.

            It is recommended to use the same value for this property and for
            the zephyr,concat-buf-size one, as both these buffering mechanisms
            can utilize the same space in RAM.
