# Copyright (c) 2022 Schlumberger
# SPDX-License-Identifier: Apache-2.0

description: INFINEON XMC4XXX SPI controller

compatible: "infineon,xmc4xxx-spi"

include: [spi-controller.yaml, pinctrl-device.yaml]

properties:
  reg:
    required: true

  miso-src:
    description: |
      Connects the SPI miso line (USIC DX0 input) to a specific GPIO pin.
      The USIC DX0 input is a multiplexer which connects to different GPIO pins.
      Refer to the XMC4XXX reference manual for the GPIO pin/mux mappings. DX0G
      is the loopback input line.
    type: string
    required: true
    enum:
      - "DX0A"
      - "DX0B"
      - "DX0C"
      - "DX0D"
      - "DX0E"
      - "DX0F"
      - "DX0G"

  interrupts:
    description: |
      IRQ number and priority to use for interrupt driven SPI. If DMA is not used (enabled using
      option CONFIG_SPI_XMC4XXX_DMA) then only one, for receiving, labelled with "rx" needs to be
      set. When using DMA, two interrupts labelled "tx" and "rx" must be set.
      Each USIC must use a certain interrupt range:
      USIC0 = [84, 89]
      USIC1 = [90, 95]
      USIC2 = [96, 101]

  dmas:
    description: |
      Optional TX & RX dma specifiers.

      The dmas are referenced in the USIC/SPI node using the following syntax:
      dmas = <&dma1 1 0 XMC4XXX_SET_CONFIG(10,6)>, <&dma1 2 0 XMC4XXX_SET_CONFIG(11,6)>;
      where the first entry is for the TX, and the second for RX.

      The parameters in the dma entry are: dma device phandle, dma channel, dma priority (0 is
      lowest and 7 is highest), and an opaque entry for the dma line routing parameters set
      by the macro XMC4XXX_SET_CONFIG(line, request_source). Use the following steps to properly
      select parameters line, request_source:
      1. Select a dma device and a free dma channel.
      1. Select a free dma line. dma0 device can only connect to lines [0, 7] and
         dma1 can connect to lines [8, 11].
      2. For a given interrupt, calculate the service request (SR) number. Note the following
         simple mapping: in USIC0 interrupt 84->SR0, interrupt 85->SR1, ... etc.
         In USIC1, interrupt 90->SR0, 91->SR1, etc.
      3. Select request_source from Table "DMA Request Source Selection" in XMC4XXX reference
         manual.

      For example, say we select interrupt 85 on USIC0, dma0, channel 3, priority 4, and line 7.
      The interrupt would map to SR1. From Table "DMA Request Source Selection", request_source
      would need to be set to 10 and the dts entry would be:
      dma = <&dma0 3 4 XMC4XXX_SET_CONFIG(7,10) ... >;

  dma-names:
    description: |
      Required if the dmas property exists. Should be set to "tx" and "rx"
      to match the dmas property.

      For example
         dma-names = "tx", "rx";

  pinctrl-0:
    required: true

  pinctrl-names:
    required: true
