# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/sound/davinci-mcasp-audio.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: McASP Controller for TI SoCs

maintainers:
  - Jayesh Choudhary <j-choudhary@ti.com>

properties:
  compatible:
    enum:
      - ti,dm646x-mcasp-audio
      - ti,da830-mcasp-audio
      - ti,am33xx-mcasp-audio
      - ti,dra7-mcasp-audio
      - ti,omap4-mcasp-audio

  reg:
    minItems: 1
    items:
      - description: CFG registers
      - description: data registers

  reg-names:
    minItems: 1
    items:
      - const: mpu
      - const: dat

  op-mode:
    $ref: /schemas/types.yaml#/definitions/uint32
    description: 0 - I2S or 1 - DIT operation mode
    enum:
      - 0
      - 1

  tdm-slots:
    $ref: /schemas/types.yaml#/definitions/uint32
    description:
      number of channels over one serializer
      the property is ignored in DIT mode
    minimum: 2
    maximum: 32

  serial-dir:
    description:
      A list of serializer configuration
      Entry is indication for serializer pin direction
      0 - Inactive, 1 - TX, 2 - RX
      All AXR pins should be present in the array even if inactive
    $ref: /schemas/types.yaml#/definitions/uint32-array
    minItems: 1
    maxItems: 25
    items:
      minimum: 0
      maximum: 2

  dmas:
    minItems: 1
    items:
      - description: transmission DMA channel
      - description: reception DMA channel

  dma-names:
    minItems: 1
    items:
      - const: tx
      - const: rx

  ti,hwmods:
    $ref: /schemas/types.yaml#/definitions/string
    description: Name of hwmod associated with McASP
    maxItems: 1
    deprecated: true

  tx-num-evt:
    $ref: /schemas/types.yaml#/definitions/uint32
    description:
      configures WFIFO threshold
      0 disables the FIFO use
      if property is missing, then also FIFO use is disabled

  rx-num-evt:
    $ref: /schemas/types.yaml#/definitions/uint32
    description:
      configures RFIFO threshold
      0 disables the FIFO use
      if property is missing, then also FIFO use is disabled

  dismod:
    $ref: /schemas/types.yaml#/definitions/uint32
    description:
      specify the drive on TX pin during inactive time slots
      0 - 3-state, 2 - logic low, 3 - logic high
    enum:
      - 0
      - 2
      - 3
    default: 2

  interrupts:
    minItems: 1
    maxItems: 2

  interrupt-names:
    oneOf:
      - description: TX interrupt
        const: tx
      - description: RX interrupt
        const: rx
      - description: TX and RX interrupts
        items:
          - const: tx
          - const: rx
      - description: Common/combined interrupt
        const: common

  fck_parent:
    $ref: /schemas/types.yaml#/definitions/string
    description: parent clock name for McASP fck
    maxItems: 1

  auxclk-fs-ratio:
    $ref: /schemas/types.yaml#/definitions/uint32
    description: ratio of AUCLK and FS rate if applicable

  gpio-controller: true

  "#gpio-cells":
    const: 2

  clocks:
    minItems: 1
    items:
      - description: functional clock
      - description: module specific optional ahclkx clock
      - description: module specific optional ahclkr clock

  clock-names:
    minItems: 1
    items:
      - const: fck
      - const: ahclkx
      - const: ahclkr

  power-domains:
    description: phandle to the corresponding power-domain
    maxItems: 1

  "#sound-dai-cells":
    const: 0

  port:
    description: connection for when McASP is used via graph card
    type: object

required:
  - compatible
  - reg
  - reg-names
  - dmas
  - dma-names
  - interrupts
  - interrupt-names

allOf:
  - $ref: dai-common.yaml#
  - if:
      properties:
        opmode:
          enum:
            - 0

    then:
      required:
        - tdm-slots

unevaluatedProperties: false

examples:
  - |
    mcasp0: mcasp0@1d00000 {
      compatible = "ti,da830-mcasp-audio";
      reg = <0x100000 0x3000>;
      reg-names = "mpu";
      interrupts = <82>, <83>;
      interrupt-names = "tx", "rx";
      op-mode = <0>;		/* MCASP_IIS_MODE */
      tdm-slots = <2>;
      dmas = <&main_udmap 0xc400>, <&main_udmap 0x4400>;
      dma-names = "tx", "rx";
      serial-dir = <
          0 0 0 0	/* 0: INACTIVE, 1: TX, 2: RX */
          0 0 0 0
          0 0 0 1
          2 0 0 0 >;
      tx-num-evt = <1>;
      rx-num-evt = <1>;
    };
