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