# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/net/nfc/marvell,nci.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Marvell International Ltd. NCI NFC controller

maintainers:
  - Krzysztof Kozlowski <krzk@kernel.org>

properties:
  compatible:
    enum:
      - marvell,nfc-i2c
      - marvell,nfc-spi
      - marvell,nfc-uart

  hci-muxed:
    type: boolean
    description: |
      Specifies that the chip is muxing NCI over HCI frames

  interrupts:
    maxItems: 1

  reg:
    maxItems: 1

  reset-n-io:
    $ref: "/schemas/types.yaml#/definitions/phandle-array"
    maxItems: 1
    description: |
      Output GPIO pin used to reset the chip (active low)

  i2c-int-falling:
    type: boolean
    description: |
      For I2C type of connection. Specifies that the chip read event shall be
      trigged on falling edge.

  i2c-int-rising:
    type: boolean
    description: |
      For I2C type of connection.  Specifies that the chip read event shall be
      trigged on rising edge.

  break-control:
    type: boolean
    description: |
      For UART type of connection. Specifies that the chip needs specific break
      management.

  flow-control:
    type: boolean
    description: |
      For UART type of connection. Specifies that the chip is using RTS/CTS.

  spi-cpha: true
  spi-cpol: true

required:
  - compatible

allOf:
  - if:
      properties:
        compatible:
          contains:
            const: marvell,nfc-i2c
    then:
      properties:
        break-control: false
        flow-control: false
        spi-cpha: false
        spi-cpol: false
        spi-max-frequency: false
      required:
        - reg

  - if:
      properties:
        compatible:
          contains:
            const: marvell,nfc-spi
    then:
      $ref: /schemas/spi/spi-peripheral-props.yaml#
      properties:
        break-control: false
        flow-control: false
        i2c-int-falling: false
        i2c-int-rising: false
      required:
        - reg

  - if:
      properties:
        compatible:
          contains:
            const: marvell,nfc-uart
    then:
      properties:
        i2c-int-falling: false
        i2c-int-rising: false
        interrupts: false
        spi-cpha: false
        spi-cpol: false
        spi-max-frequency: false
        reg: false

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/irq.h>

    i2c {
        #address-cells = <1>;
        #size-cells = <0>;

        nfc@8 {
            compatible = "marvell,nfc-i2c";
            reg = <0x8>;

            interrupt-parent = <&gpio3>;
            interrupts = <21 IRQ_TYPE_EDGE_RISING>;

            i2c-int-rising;

            reset-n-io = <&gpio3 19 GPIO_ACTIVE_LOW>;
        };
    };

  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/irq.h>

    spi {
        #address-cells = <1>;
        #size-cells = <0>;

        nfc@0 {
            compatible = "marvell,nfc-spi";
            reg = <0>;

            spi-max-frequency = <3000000>;
            spi-cpha;
            spi-cpol;

            interrupt-parent = <&gpio1>;
            interrupts = <17 IRQ_TYPE_EDGE_RISING>;

            reset-n-io = <&gpio3 19 GPIO_ACTIVE_LOW>;
        };
    };

  - |
    #include <dt-bindings/gpio/gpio.h>

    uart {
        nfc {
            compatible = "marvell,nfc-uart";

            reset-n-io = <&gpio3 16 GPIO_ACTIVE_LOW>;

            hci-muxed;
            flow-control;
        };
    };
