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

description: |
  This compatible binding should be applied to the device's iomuxc DTS node.
  the DTS node will be populated with all pinmux options for the specific SOC.
  These options can then be used in a pinctrl node with the "nxp,mcux-rt-pinctrl"
  compatible string to define pin groups.

  The user should not edit the bindings defined within this node to make pinmux
  selections, but should instead edit the pinctrl groups for their board.

compatible: "nxp,imx-iomuxc"

include:
  - name: base.yaml

properties:
  reg:
    required: true

child-binding:
  description: MCUX RT pin mux option
  properties:
    pinmux:
      required: true
      type: array
      description: |
        An array of values defining the pin mux selection, in the following format:
        <mux_register, mux_val, input_reg, daisy_val, cfg_reg>
        mux_register: register that will be written to make mux selection
        mux_val: value to write to mux_register
        input_reg: peripheral register that will direct peripheral signal to pin
        daisy_val: value to write to input_reg
        cfg_reg: register that will configure pin pull, drive strength, and open drain
    gpr:
      type: array
      description: |
        An array of values defining the GPR bit write required, if one exists.
        Some IOMUXC options require writing to an IOMUXC_GPR register to select
        them. This array has the following elements:
        <gpr_reg, gpr_shift, gpr_val>
        gpr_reg: GPR register address to write to
        gpr_shift: shift to apply to value before writing
        gpr_val: value to write
    # Note: the below properties should ideally be an enum. However, the pinctrl driver
    # will need to initialize the pin configuration register differently based on
    # the type of register provided, and it does so using the IF_ENABLED macro. This
    # macro cannot work using preprocessor equality statements (like DT_ENUM_IDX(prop) == val),
    # so we cannot use an enum and instead must use individual properties.
    pin-pue:
      type: boolean
      description: |
          RT11xx parts have multiple types of IOMUXC registers defined, with
          different register layouts. This property can be set to indicate
          to the pinctrl driver the type of register this pinmux represents,
          and should not be modified by the user.
    pin-pdrv:
      type: boolean
      description: |
          RT11xx parts have multiple types of IOMUXC registers defined, with
          different register layouts. This property can be set to indicate
          to the pinctrl driver the type of register this pinmux represents,
          and should not be modified by the user.
    pin-lpsr:
      type: boolean
      description: |
          RT11xx parts have multiple types of IOMUXC registers defined, with
          different register layouts. This property can be set to indicate
          to the pinctrl driver the type of register this pinmux represents,
          and should not be modified by the user.
    pin-snvs:
      type: boolean
      description: |
          RT11xx parts have multiple types of IOMUXC registers defined, with
          different register layouts. This property can be set to indicate
          to the pinctrl driver the type of register this pinmux represents,
          and should not be modified by the user.
